polyrex 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/polyrex.rb +28 -25
- metadata +1 -1
data/lib/polyrex.rb
CHANGED
@@ -17,32 +17,33 @@ class Polyrex
|
|
17
17
|
schema_rpath = schema.gsub(/\[[^\]]+\]/,'')
|
18
18
|
@recordx = schema_rpath.split('/')
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@doc = Document.new("<%s><summary>%s</summary></%s>" % [@root_name, summary, @root_name])
|
26
|
-
|
20
|
+
if @format_masks.length == @recordx.length then
|
21
|
+
root_format_mask = @format_masks.shift
|
22
|
+
field_names = root_format_mask.to_s.scan(/\[!(\w+)\]/).flatten.map(&:to_sym)
|
23
|
+
summary = field_names.map {|x| "<%s/>" % x}.join
|
24
|
+
end
|
27
25
|
#----
|
28
26
|
|
29
27
|
@schema = schema
|
30
28
|
|
31
29
|
@id = '1'
|
32
|
-
|
33
|
-
a = @recordx.clone
|
34
|
-
#@root_name = a[0]
|
35
|
-
|
36
|
-
#@doc = Document.new "<%s><summary/><records/></%s>" % ([@root_name] * 2)
|
37
|
-
@parent_node = XPath.first(@doc.root,'records')
|
30
|
+
a = @schema.split('/')
|
38
31
|
|
39
|
-
|
40
|
-
@rpaths = (@recordx.length).times.inject({}) {|r| r.merge ({a.join('/') => a.pop}) }
|
32
|
+
@rpaths = (a.length).times.inject({}) {|r| r.merge ({a.join('/').gsub(/\[[^\]]+\]/,'') => a.pop}) }
|
41
33
|
|
42
|
-
names = @rpaths.to_a[0..-2].map {|k,v| [v[
|
34
|
+
names = @rpaths.to_a[0..-2].map {|k,v| [v[/[^\[]+/], k]}
|
35
|
+
attach_create_handlers(names)
|
43
36
|
|
37
|
+
@root_name = @recordx.shift
|
38
|
+
|
39
|
+
@doc = Document.new("<%s><summary>%s</summary><records/></%s>" % [@root_name, (summary || '') , @root_name])
|
40
|
+
@parent_node = XPath.first(@doc.root,'records')
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def attach_create_handlers(names)
|
44
45
|
names[0..-2].each do |name, xpath|
|
45
|
-
|
46
|
+
self.instance_eval(
|
46
47
|
%Q(
|
47
48
|
def create_#{name}(params)
|
48
49
|
create_node(@parent_node, @rpaths['#{xpath}'], params)
|
@@ -62,9 +63,9 @@ def create_#{name}(params)
|
|
62
63
|
self
|
63
64
|
end
|
64
65
|
))
|
65
|
-
|
66
|
+
|
66
67
|
end
|
67
|
-
|
68
|
+
|
68
69
|
# -- start of crud methods --
|
69
70
|
def valid_creation?()
|
70
71
|
|
@@ -125,7 +126,12 @@ end
|
|
125
126
|
out = scan_link(new_a)
|
126
127
|
|
127
128
|
records = Document.new("<records>%s</records>" % out)
|
128
|
-
@doc.root
|
129
|
+
doc_records = XPath.first(@doc.root, 'records')
|
130
|
+
|
131
|
+
records.each do |record|
|
132
|
+
doc_records.add record
|
133
|
+
end
|
134
|
+
|
129
135
|
end
|
130
136
|
|
131
137
|
def build_tree(a, new_a, prev_indent, history=[])
|
@@ -170,18 +176,15 @@ end
|
|
170
176
|
|
171
177
|
line= x[0].reverse.map(&:strip).join
|
172
178
|
|
173
|
-
puts 'format_masks ' + @format_masks.inspect
|
174
179
|
@field_names = @format_masks[i].to_s.scan(/\[!(\w+)\]/).flatten.map(&:to_sym)
|
175
|
-
puts 'field_names : ' + @field_names.inspect
|
176
180
|
|
177
181
|
t = @format_masks[i].to_s.gsub(/\[!(\w+)\]/, '(.*)').sub(/\[/,'\[').sub(/\]/,'\]')
|
178
|
-
puts 'line : ' + line.inspect
|
179
182
|
field_values = line.match(/#{t}/).captures
|
180
|
-
puts 'field_values : ' + field_values.inspect
|
181
183
|
|
182
184
|
fields = @field_names.zip(field_values).map{|name, value| "<%s>%s</%s>" % [name,value,name]}.join
|
183
185
|
|
184
|
-
|
186
|
+
@id = (@id.to_i + 1).to_s
|
187
|
+
out << indent + "<#{tag_name} id='#{@id}'><summary>#{fields}</summary>"
|
185
188
|
if x.length > 1 and x[0].is_a? Array then
|
186
189
|
#i2 += ' '
|
187
190
|
out << indent + "<records>\n"
|