43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/magnetic/interface.rb', line 43
def map_record options = {}
options.to_options!
record = options.delete :record
mapping = options.delete :mapping
route = options.delete :route
table_name = record.class.table_name
id = record.id
(( route ||= [] )) << "#{ table_name }[#{ id }]"
mapping.each do |path, block|
head, *tail = path.split '.'
m, head, array, *ignored = %r/^(.*?)(\[\*?\])?$/o.match(head).to_a
if array
subrecords = record.send head
subrecords = [subrecords] unless subrecords.class == Array
subpath = tail.join '.'
subblock = block
submapping = [[ subpath, subblock ]]
subrecords.each do |subrecord|
subroute = route.clone
map_record :record => subrecord, :mapping => submapping, :route => subroute
end
else
value = record.send head
path = Magnetic.path(( [route, head].join('.') ))
block.to_proc.call :path => path,
:value => value,
:model => record.class,
:table_name => table_name,
:column_name => head,
:record => record,
:interface => self,
:controller => @controller
end
end
end
|