Created
November 22, 2012 18:02
-
-
Save mrios/4132398 to your computer and use it in GitHub Desktop.
Portable Code for CanJS(frontend) & NodeJS(backend)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
( | |
function(fw) | |
{ | |
( | |
function(find,filter,spec) | |
{ | |
var results={} | |
fw.each( | |
spec | |
, function(source_transform,index) | |
{ | |
results[index] | |
= function(what) | |
{ | |
var transformed | |
= fw.clone(what) | |
, transformers | |
= fw.reduce( | |
source_transform | |
, function(result,field_t,key) | |
{ | |
var make_transformer | |
= function(field) | |
{ | |
var is_single | |
= field.key!=undefined | |
, is_linked | |
= field.linked!=undefined | |
, src | |
= index | |
, src_key | |
= is_single | |
?field.key | |
:'id' | |
, tgt | |
= is_linked | |
?field.linked | |
:field.embeded | |
, tgt_key | |
= is_linked | |
?field.linked_key | |
:field.embeded_key | |
return function(source_item,transform_key) | |
{ | |
var embed_single | |
= function() | |
{ | |
return fw.find(tgt,tgt_key,source_item[src_key]) | |
} | |
, embed_list | |
= function() | |
{ | |
return fw.filter(tgt,tgt_key,source_item[src_key]) | |
} | |
, link_single | |
= function() | |
{ | |
return {href:tgt+'/'+what[src_key]} | |
} | |
source_item[transform_key] | |
= is_single | |
?is_linked | |
?link_single() | |
:embed_single() | |
:embed_list() | |
} | |
} | |
result[key]=make_transformer(field_t) | |
return result | |
} | |
, {} | |
) | |
fw.each( | |
transformers | |
, function(t,k) | |
{ | |
t(transformed,k) | |
} | |
) | |
return transformed | |
} | |
} | |
) | |
return results | |
} | |
)(store_find,store_filter,transforms) | |
} | |
)(_) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var _ns = window._ns || {}; | |
_ns.Transform = (function(fw,store_find,store_filter,transforms,find,filter,spec) { | |
function doTransform(fw){ | |
( | |
function(find,filter,spec) | |
{ | |
var results={} | |
fw.each( | |
spec | |
, function(source_transform,index) | |
{ | |
results[index] | |
= function(what) | |
{ | |
var transformed | |
= fw.clone(what) | |
, transformers | |
= fw.reduce( | |
source_transform | |
, function(result,field_t,key) | |
{ | |
var make_transformer | |
= function(field) | |
{ | |
var is_single | |
= field.key!=undefined | |
, is_linked | |
= field.linked!=undefined | |
, src | |
= index | |
, src_key | |
= is_single | |
?field.key | |
:'id' | |
, tgt | |
= is_linked | |
?field.linked | |
:field.embeded | |
, tgt_key | |
= is_linked | |
?field.linked_key | |
:field.embeded_key | |
return function(source_item,transform_key) | |
{ | |
var embed_single | |
= function() | |
{ | |
return fw.find(tgt,tgt_key,source_item[src_key]) | |
} | |
, embed_list | |
= function() | |
{ | |
return fw.filter(tgt,tgt_key,source_item[src_key]) | |
} | |
, link_single | |
= function() | |
{ | |
return {href:tgt+'/'+what[src_key]} | |
} | |
source_item[transform_key] | |
= is_single | |
?is_linked | |
?link_single() | |
:embed_single() | |
:embed_list() | |
} | |
} | |
result[key]=make_transformer(field_t) | |
return result | |
} | |
, {} | |
) | |
fw.each( | |
transformers | |
, function(t,k) | |
{ | |
t(transformed,k) | |
} | |
) | |
return transformed | |
} | |
} | |
) | |
return results | |
} | |
)(store_find,store_filter,transforms) | |
} | |
return { | |
doTransform: doTransform | |
} | |
}()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment