polyrex 0.8.7 → 0.8.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/polyrex.rb +38 -11
- metadata +4 -4
data/lib/polyrex.rb
CHANGED
@@ -12,15 +12,19 @@ require 'polyrex-xslt'
|
|
12
12
|
require 'rexle'
|
13
13
|
|
14
14
|
class Polyrex
|
15
|
-
attr_accessor :summary_fields, :xslt_schema, :id_counter
|
15
|
+
attr_accessor :summary_fields, :xslt_schema, :id_counter, :schema
|
16
16
|
|
17
|
-
def initialize(location, id_counter='1')
|
17
|
+
def initialize(location=nil, id_counter='1')
|
18
18
|
|
19
19
|
@id_counter = id_counter
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
|
21
|
+
if location then
|
22
|
+
open(location)
|
23
|
+
summary_h = Hash[*@doc.xpath("summary/*").map {|x| [x.name, x.text]}.flatten]
|
24
|
+
@summary = OpenStruct.new summary_h
|
25
|
+
@summary_fields = summary_h.keys.map(&:to_sym)
|
26
|
+
end
|
27
|
+
|
24
28
|
@polyrex_xslt = PolyrexXSLT.new
|
25
29
|
end
|
26
30
|
|
@@ -85,6 +89,14 @@ class Polyrex
|
|
85
89
|
@objects_a[0].new(record)
|
86
90
|
end
|
87
91
|
end
|
92
|
+
|
93
|
+
def schema=(s)
|
94
|
+
open s
|
95
|
+
summary_h = Hash[*@doc.xpath("summary/*").map {|x| [x.name, x.text]}.flatten]
|
96
|
+
@summary = OpenStruct.new summary_h
|
97
|
+
@summary_fields = summary_h.keys.map(&:to_sym)
|
98
|
+
self
|
99
|
+
end
|
88
100
|
|
89
101
|
def summary
|
90
102
|
@summary
|
@@ -120,11 +132,12 @@ class Polyrex
|
|
120
132
|
doc = Rexle.new(PolyrexSchema.new(schema).to_s)
|
121
133
|
@format_masks = doc.xpath('//format_mask/text()')
|
122
134
|
schema_rpath = schema.gsub(/\[[^\]]+\]/,'')
|
135
|
+
|
123
136
|
@recordx = schema_rpath.split('/')
|
124
137
|
|
125
138
|
summary = ''
|
126
139
|
if @format_masks.length == @recordx.length then
|
127
|
-
root_format_mask = @format_masks.shift
|
140
|
+
root_format_mask = @format_masks.shift
|
128
141
|
field_names = root_format_mask.to_s.scan(/\[!(\w+)\]/).flatten.map(&:to_sym)
|
129
142
|
summary = field_names.map {|x| "<%s/>" % x}.join
|
130
143
|
end
|
@@ -159,7 +172,17 @@ class Polyrex
|
|
159
172
|
end
|
160
173
|
|
161
174
|
def string_parse(lines)
|
162
|
-
|
175
|
+
raw_header = lines.slice!(/<\?polyrex[^>]+>/)
|
176
|
+
|
177
|
+
if raw_header then
|
178
|
+
header = raw_header[/<?polyrex (.*)?>/,1]
|
179
|
+
header.scan(/\w+\="[^"]+\"/).map{|x| r = x.split(/=/); \
|
180
|
+
[(r[0] + "=").to_sym, r[1][/^"(.*)"$/,1]] }.each do |name, value|
|
181
|
+
self.method(name).call(value)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
format_line!(@parent_node, LineTree.new(lines.strip).to_a)
|
163
186
|
end
|
164
187
|
|
165
188
|
def load_handlers(schema)
|
@@ -168,6 +191,7 @@ class Polyrex
|
|
168
191
|
objects = PolyrexObjects.new(schema, @id_counter)
|
169
192
|
@objects = objects.to_h
|
170
193
|
@objects_a = objects.to_a
|
194
|
+
|
171
195
|
attach_create_handlers(@objects.keys)
|
172
196
|
attach_edit_handlers(@objects)
|
173
197
|
end
|
@@ -191,6 +215,7 @@ class Polyrex
|
|
191
215
|
@field_names = @format_masks[i].to_s.scan(/\[!(\w+)\]/).flatten.map(&:to_sym)
|
192
216
|
|
193
217
|
t = regexify_fmask(@format_masks[i]) #.sub(/\[/,'\[').sub(/\]/,'\]')
|
218
|
+
|
194
219
|
a = t.reverse.split(/(?=\)[^\(]+\()/).reverse.map &:reverse
|
195
220
|
patterns = tail_map(a)
|
196
221
|
|
@@ -290,15 +315,17 @@ class Polyrex
|
|
290
315
|
id = @doc.xpath('max(//@id)')
|
291
316
|
@id_counter = id.to_s.succ if id
|
292
317
|
|
293
|
-
|
294
|
-
|
318
|
+
if schema then
|
319
|
+
load_handlers(schema)
|
320
|
+
load_find_by(schema)
|
321
|
+
end
|
295
322
|
|
296
323
|
@parent_node = @doc.element('records')
|
297
324
|
|
298
325
|
end
|
299
326
|
|
300
327
|
def regexify_fmask(f)
|
301
|
-
|
328
|
+
|
302
329
|
a = f.split(/(?=\[!\w+\])/).map do |x|
|
303
330
|
|
304
331
|
aa = x.split(/(?=[^\]]+$)/)
|
metadata
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
name: polyrex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.8.
|
5
|
+
version: 0.8.9
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
|
7
|
+
authors:
|
8
|
+
- James Robertson
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-08-25 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|