Skip to content

Instantly share code, notes, and snippets.

@gpittau
Forked from mrios/transforms.js
Created November 22, 2012 20:28
Show Gist options
  • Save gpittau/4132824 to your computer and use it in GitHub Desktop.
Save gpittau/4132824 to your computer and use it in GitHub Desktop.
Portable Code for CanJS(frontend) & NodeJS(backend)
(
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 find(tgt,tgt_key,source_item[src_key])
}
, embed_list
= function()
{
return 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)
}
)(_)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment