polyrex 1.3.3 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/polyrex.rb +161 -161
- data.tar.gz.sig +0 -0
- metadata +9 -8
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e211b56546f7a7d8cc51eff031d5e404ae3d6fc6f7c3082bac158e88fc80f3e
|
4
|
+
data.tar.gz: fde6175c6355d803c5c31f7a49105cbb9ef27ad1b83daf702fcd4a6c144b631f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 821c0da30fb333a44418cf8cbb96789ea9e5e216646d33dee374461db182f54c9df59ba57ac56e2c2050053f31ad829ea8f00ce4d3b0982fd7ca1bac378042bb
|
7
|
+
data.tar.gz: '0785691bdae1f3e99665b1c3600e5ddce7027ef35ecd8eabea1ab98ae02ef33aaf77ceba456a3729be1d6c4ae0e7cb0c0e2bb1865f98ff63da1790dc0a6bf436'
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/polyrex.rb
CHANGED
@@ -39,7 +39,7 @@ class PolyrexException < Exception
|
|
39
39
|
end
|
40
40
|
|
41
41
|
class Polyrex
|
42
|
-
attr_accessor :summary_fields, :xslt_schema, :id_counter,
|
42
|
+
attr_accessor :summary_fields, :xslt_schema, :id_counter,
|
43
43
|
:schema, :type, :delimiter, :xslt, :format_masks
|
44
44
|
|
45
45
|
def initialize(location=nil, schema: nil, id_counter: '1', debug: false)
|
@@ -47,15 +47,15 @@ class Polyrex
|
|
47
47
|
|
48
48
|
@id_counter, @debug = id_counter, debug
|
49
49
|
@format_masks = []
|
50
|
-
@delimiter = ''
|
50
|
+
@delimiter = ''
|
51
51
|
|
52
|
-
self.method(:schema=).call(schema) if schema
|
53
|
-
|
54
|
-
if location then
|
52
|
+
self.method(:schema=).call(schema) if schema
|
53
|
+
|
54
|
+
if location then
|
55
55
|
|
56
56
|
s, type = RXFHelper.read(location)
|
57
57
|
return import(s) if s =~ /^\<\?polyrex\b/
|
58
|
-
|
58
|
+
|
59
59
|
@local_filepath = location if type == :file or type == :dfs
|
60
60
|
|
61
61
|
openx(s)
|
@@ -70,10 +70,10 @@ class Polyrex
|
|
70
70
|
|
71
71
|
@summary = RecordX.new @doc.root.xpath("summary/*")
|
72
72
|
@summary_fields = @summary.keys
|
73
|
-
|
73
|
+
|
74
74
|
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
@polyrex_xslt = RecordxXSLT.new
|
78
78
|
#@parent_node = @doc.root if @doc
|
79
79
|
end
|
@@ -99,7 +99,7 @@ class Polyrex
|
|
99
99
|
@doc.root.xpath(x).each(&:delete)
|
100
100
|
end
|
101
101
|
end
|
102
|
-
|
102
|
+
|
103
103
|
def delimiter=(separator)
|
104
104
|
|
105
105
|
@delimiter = separator
|
@@ -107,18 +107,18 @@ class Polyrex
|
|
107
107
|
@format_masks.map! do |format_mask|
|
108
108
|
format_mask.to_s.gsub(/\s/, separator)
|
109
109
|
end
|
110
|
-
end
|
111
|
-
|
110
|
+
end
|
111
|
+
|
112
112
|
def each_recursive(parent=self, level=0, &blk)
|
113
|
-
|
113
|
+
|
114
114
|
parent.records.each.with_index do |x, index|
|
115
115
|
|
116
116
|
blk.call(x, parent, level, index) if block_given?
|
117
117
|
|
118
118
|
each_recursive(x, level+1, &blk) if x.records.any?
|
119
|
-
|
119
|
+
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
end
|
123
123
|
|
124
124
|
def export(filepath)
|
@@ -134,20 +134,20 @@ class Polyrex
|
|
134
134
|
@doc.to_s(options)
|
135
135
|
end
|
136
136
|
|
137
|
-
def save(filepath=nil, opt={}, options: opt, pretty: false)
|
138
|
-
|
137
|
+
def save(filepath=nil, opt={}, options: opt, pretty: false)
|
138
|
+
|
139
139
|
refresh_summary
|
140
140
|
filepath ||= @local_filepath
|
141
141
|
@local_filepath = filepath
|
142
|
-
|
142
|
+
|
143
143
|
options.merge!({pretty: pretty}) if options.empty?
|
144
144
|
xml = @doc.to_s(options)
|
145
|
-
|
145
|
+
|
146
146
|
buffer = block_given? ? yield(xml) : xml
|
147
|
-
File.open(filepath,'w'){|f| f.write buffer}
|
147
|
+
File.open(filepath,'w'){|f| f.write buffer}
|
148
148
|
end
|
149
|
-
|
150
|
-
# -- start of crud methods --
|
149
|
+
|
150
|
+
# -- start of crud methods --
|
151
151
|
|
152
152
|
def find_by_id(id)
|
153
153
|
@parent_node = @doc.root.element("//[@id='#{id}']")
|
@@ -158,52 +158,52 @@ class Polyrex
|
|
158
158
|
@parent_node = @doc.root.element("//[@id='#{id}']")
|
159
159
|
self
|
160
160
|
end
|
161
|
-
|
161
|
+
|
162
162
|
def order=(val)
|
163
163
|
@order = val.to_s
|
164
164
|
end
|
165
165
|
|
166
166
|
# -- end of crud methods --
|
167
|
-
|
167
|
+
|
168
168
|
# -- start of full text edit methods
|
169
169
|
def format_masks
|
170
170
|
@format_masks
|
171
|
-
end
|
172
|
-
|
171
|
+
end
|
172
|
+
|
173
173
|
def parse(x=nil, options={})
|
174
174
|
|
175
175
|
buffer, type = RXFHelper.read(x)
|
176
|
-
|
176
|
+
|
177
177
|
if type == :unknown and buffer.lines.length <= 1 then
|
178
178
|
raise PolyrexException, 'File not found: ' + x.inspect
|
179
179
|
end
|
180
|
-
|
181
|
-
buffer = yield if block_given?
|
180
|
+
|
181
|
+
buffer = yield if block_given?
|
182
182
|
string_parse buffer.clone, options
|
183
183
|
|
184
184
|
self
|
185
|
-
end
|
186
|
-
|
185
|
+
end
|
186
|
+
|
187
187
|
alias import parse
|
188
188
|
|
189
189
|
def element(s)
|
190
190
|
@doc.root.element(s)
|
191
191
|
end
|
192
|
-
|
192
|
+
|
193
193
|
def leaf_nodes_to_dx()
|
194
|
-
|
194
|
+
|
195
195
|
schema, record_name = @summary.schema\
|
196
196
|
.match(/([^\/]+\/([^\/]+)\[[^\[]+$)/).captures
|
197
|
-
|
197
|
+
|
198
198
|
xml = RexleBuilder.new
|
199
199
|
|
200
200
|
xml.items do
|
201
201
|
xml.summary do
|
202
202
|
xml.schema schema.sub(/(\/\w+)\[([^\]]+)\]/,'\1(\2)')
|
203
203
|
end
|
204
|
-
xml.records
|
204
|
+
xml.records
|
205
205
|
end
|
206
|
-
|
206
|
+
|
207
207
|
doc = Rexle.new xml.to_a
|
208
208
|
body = doc.root.element 'records'
|
209
209
|
a = self.xpath('//' + record_name)
|
@@ -214,43 +214,43 @@ class Polyrex
|
|
214
214
|
|
215
215
|
make_dynarex doc.root
|
216
216
|
end
|
217
|
-
|
217
|
+
|
218
218
|
def records
|
219
219
|
|
220
|
-
@doc.root.xpath("records/*").map do |node|
|
220
|
+
@doc.root.xpath("records/*").map do |node|
|
221
221
|
Kernel.const_get(node.name.capitalize).new node, id: @id_counter
|
222
222
|
end
|
223
|
-
|
223
|
+
|
224
224
|
end
|
225
225
|
|
226
226
|
def rxpath(s)
|
227
|
-
|
227
|
+
|
228
228
|
a = @doc.root.xpath s.split('/').map \
|
229
229
|
{|x| x.sub('[','[summary/').prepend('records/')}.join('/')
|
230
|
-
|
231
|
-
a.map do |node|
|
230
|
+
|
231
|
+
a.map do |node|
|
232
232
|
Kernel.const_get(node.name.capitalize).new node, id: node.attributes[:id]
|
233
233
|
end
|
234
234
|
|
235
235
|
end
|
236
|
-
|
236
|
+
|
237
237
|
def schema=(s)
|
238
238
|
|
239
239
|
if s =~ /gem\[/ then
|
240
|
-
raise PolyrexException, "invalid schema: cannot contain the " +
|
240
|
+
raise PolyrexException, "invalid schema: cannot contain the " +
|
241
241
|
"word gem as a record name"
|
242
242
|
end
|
243
|
-
|
243
|
+
|
244
244
|
openx(s)
|
245
245
|
|
246
246
|
summary_h = Hash[*@doc.root.xpath("summary/*").\
|
247
247
|
map {|x| [x.name, x.text.to_s]}.flatten]
|
248
248
|
|
249
249
|
@summary = RecordX.new summary_h
|
250
|
-
@summary_fields = summary_h.keys.map(&:to_sym)
|
250
|
+
@summary_fields = summary_h.keys.map(&:to_sym)
|
251
251
|
self
|
252
252
|
end
|
253
|
-
|
253
|
+
|
254
254
|
def summary
|
255
255
|
@summary
|
256
256
|
end
|
@@ -258,7 +258,7 @@ class Polyrex
|
|
258
258
|
def to_a()
|
259
259
|
recordx_map @doc.root
|
260
260
|
end
|
261
|
-
|
261
|
+
|
262
262
|
def to_dynarex()
|
263
263
|
|
264
264
|
root = @doc.root.deep_clone
|
@@ -267,17 +267,17 @@ class Polyrex
|
|
267
267
|
#summary.delete('format_mask')
|
268
268
|
#summary.element('recordx_type').text = 'dynarex'
|
269
269
|
|
270
|
-
summary.add root.element('records/*/summary/format_mask').clone
|
270
|
+
summary.add root.element('records/*/summary/format_mask').clone
|
271
271
|
e = summary.element('schema')
|
272
272
|
e.text = e.text[/[^\/]+\/[^\/]+/].sub(/(\/\w+)\[([^\]]+)\]/,'\1(\2)')
|
273
273
|
|
274
274
|
make_dynarex(root)
|
275
275
|
end
|
276
|
-
|
276
|
+
|
277
277
|
def to_opml()
|
278
|
-
|
278
|
+
|
279
279
|
puts '@schema: ' + @schema.inspect if @debug
|
280
|
-
|
280
|
+
|
281
281
|
head, body = @schema.split(/(?<=\])/,2)
|
282
282
|
schema_body = body.gsub(/(?<=\[)[^\]]+/) do |x|
|
283
283
|
x.split(/\s*,\s*/).map {|field| '@' + field + ':' + field}.join(', ')
|
@@ -288,16 +288,16 @@ class Polyrex
|
|
288
288
|
|
289
289
|
puts 'schema_body: ' + schema_body.inspect if @debug
|
290
290
|
puts 'schema_head: ' + schema_head.inspect if @debug
|
291
|
-
xslt_schema = schema_head.sub(/^\w+/,'opml>head') +
|
291
|
+
xslt_schema = schema_head.sub(/^\w+/,'opml>head') +
|
292
292
|
schema_body.gsub(/\w+(?=\[)/,'outline')\
|
293
293
|
.sub(/\/(\w+)(?=\[)/,'/body>outline')
|
294
|
-
|
294
|
+
|
295
295
|
puts 'xslt_schema: ' + xslt_schema.inspect if @debug
|
296
|
-
|
296
|
+
|
297
297
|
recxslt = RecordxXSLT.new(schema: @schema, xslt_schema: xslt_schema)
|
298
|
-
|
299
|
-
Rexslt.new(recxslt.to_xslt, self.to_xml).to_s
|
300
|
-
|
298
|
+
|
299
|
+
Rexslt.new(recxslt.to_xslt, self.to_xml).to_s
|
300
|
+
|
301
301
|
end
|
302
302
|
|
303
303
|
def to_s(header: true)
|
@@ -312,9 +312,9 @@ class Polyrex
|
|
312
312
|
puts 'line: ' + line.inspect if @debug
|
313
313
|
|
314
314
|
recordsx = item.element('records').elements.to_a
|
315
|
-
|
315
|
+
|
316
316
|
if recordsx.length > 0 then
|
317
|
-
line = line + "\n" + build(recordsx, indent + 1).join("\n")
|
317
|
+
line = line + "\n" + build(recordsx, indent + 1).join("\n")
|
318
318
|
end
|
319
319
|
(' ' * indent) + line
|
320
320
|
end
|
@@ -334,9 +334,9 @@ class Polyrex
|
|
334
334
|
declaration = @raw_header
|
335
335
|
else
|
336
336
|
|
337
|
-
smry_fields = %i(schema)
|
337
|
+
smry_fields = %i(schema)
|
338
338
|
if self.delimiter.length > 0 then
|
339
|
-
smry_fields << :delimiter
|
339
|
+
smry_fields << :delimiter
|
340
340
|
else
|
341
341
|
smry_fields << :format_mask
|
342
342
|
end
|
@@ -350,22 +350,22 @@ class Polyrex
|
|
350
350
|
docheader = declaration + "\n" + sumry
|
351
351
|
out = build(self.records).join("\n")
|
352
352
|
header ? docheader + "\n" + out : out
|
353
|
-
|
353
|
+
|
354
354
|
end
|
355
|
-
|
355
|
+
|
356
356
|
def to_tree()
|
357
|
-
|
357
|
+
|
358
358
|
s = @schema.gsub(/(?<=\[)[^\]]+/) do |x|
|
359
359
|
x.split(/\s*,\s*/).map {|field| '@' + field + ':' + field}.join(', ')
|
360
360
|
end
|
361
361
|
|
362
|
-
xslt_schema = s.gsub(/\w+(?=\[)/,'item').sub(/^\w+/,'tree')
|
363
|
-
recxslt = RecordxXSLT.new(schema: @schema, xslt_schema: xslt_schema)
|
364
|
-
Rexslt.new(recxslt.to_xslt, self.to_xml).to_s
|
365
|
-
|
366
|
-
end
|
362
|
+
xslt_schema = s.gsub(/\w+(?=\[)/,'item').sub(/^\w+/,'tree')
|
363
|
+
recxslt = RecordxXSLT.new(schema: @schema, xslt_schema: xslt_schema)
|
364
|
+
Rexslt.new(recxslt.to_xslt, self.to_xml).to_s
|
367
365
|
|
368
|
-
|
366
|
+
end
|
367
|
+
|
368
|
+
def to_xslt()
|
369
369
|
@polyrex_xslt.schema = @schema
|
370
370
|
@polyrex_xslt.to_xslt
|
371
371
|
end
|
@@ -380,26 +380,26 @@ class Polyrex
|
|
380
380
|
end
|
381
381
|
|
382
382
|
def xslt=(value)
|
383
|
-
|
383
|
+
|
384
384
|
@summary.xslt = value
|
385
385
|
|
386
|
-
end
|
387
|
-
|
386
|
+
end
|
387
|
+
|
388
388
|
def xslt_schema=(s)
|
389
389
|
@polyrex_xslt.xslt_schema = s
|
390
390
|
self
|
391
391
|
end
|
392
|
-
|
392
|
+
|
393
393
|
protected
|
394
|
-
|
394
|
+
|
395
395
|
def doc()
|
396
396
|
@doc
|
397
397
|
end
|
398
398
|
|
399
399
|
private
|
400
|
-
|
400
|
+
|
401
401
|
def make_dynarex(root)
|
402
|
-
|
402
|
+
|
403
403
|
root.delete('summary/recordx_type')
|
404
404
|
root.delete('summary/format_mask')
|
405
405
|
root.xpath('records/*/summary/format_mask').each(&:delete)
|
@@ -433,8 +433,8 @@ xsl_buffer = '
|
|
433
433
|
|
434
434
|
buffer = Rexslt.new(xsl_buffer, root.xml).to_s
|
435
435
|
Dynarex.new buffer
|
436
|
-
|
437
|
-
end
|
436
|
+
|
437
|
+
end
|
438
438
|
|
439
439
|
def refresh_records(records, fields, level)
|
440
440
|
|
@@ -469,10 +469,10 @@ xsl_buffer = '
|
|
469
469
|
flatten.map(&:to_sym)
|
470
470
|
summary = field_names.map {|x| "<%s/>" % x}.join
|
471
471
|
end
|
472
|
-
|
472
|
+
|
473
473
|
summary << "<recordx_type>polyrex</recordx_type><schema>#{schema}</schema>"
|
474
474
|
#----
|
475
|
-
|
475
|
+
|
476
476
|
@schema = schema
|
477
477
|
@id_counter = '0'
|
478
478
|
|
@@ -481,12 +481,12 @@ xsl_buffer = '
|
|
481
481
|
[root_name, (summary || '') , root_name])
|
482
482
|
|
483
483
|
end
|
484
|
-
|
484
|
+
|
485
485
|
def recordx_map(node)
|
486
|
-
|
486
|
+
|
487
487
|
# get the summary
|
488
488
|
fields = node.xpath('summary/*').map do |x|
|
489
|
-
next if %w(schema format_mask recordx_type).include? x.name
|
489
|
+
next if %w(schema format_mask recordx_type).include? x.name
|
490
490
|
r = x.text.to_s.gsub(/^[\n\s]+/,'').length > 0 ? x.text.to_s : \
|
491
491
|
x.cdatas.join.strip
|
492
492
|
r
|
@@ -494,28 +494,28 @@ xsl_buffer = '
|
|
494
494
|
|
495
495
|
# get the records
|
496
496
|
a = node.xpath('records/*').map {|x| recordx_map x}
|
497
|
-
|
497
|
+
|
498
498
|
[fields.compact, a]
|
499
|
-
end
|
500
|
-
|
499
|
+
end
|
500
|
+
|
501
501
|
def string_parse(buffer, options={})
|
502
502
|
|
503
503
|
@raw_header = buffer.slice!(/<\?polyrex[^>]+>/)
|
504
|
-
|
504
|
+
|
505
505
|
if @raw_header then
|
506
506
|
header = @raw_header[/<?polyrex (.*)?>/,1]
|
507
507
|
|
508
508
|
r1 = /([\w\[\]\-]+\s*\=\s*'[^']*)'/
|
509
509
|
r2 = /([\w\[\]\-]+\s*\=\s*"[^"]*)"/
|
510
510
|
|
511
|
-
a = header.scan(/#{r1}|#{r2}/).map(&:compact).flatten
|
511
|
+
a = header.scan(/#{r1}|#{r2}/).map(&:compact).flatten
|
512
|
+
|
512
513
|
|
513
|
-
|
514
514
|
a.each do |x|
|
515
|
-
|
515
|
+
|
516
516
|
attr, val = x.split(/\s*=\s*["']/,2)
|
517
517
|
|
518
|
-
i = attr[/format_masks?\[(\d+)/,1]
|
518
|
+
i = attr[/format_masks?\[(\d+)/,1]
|
519
519
|
|
520
520
|
if i then
|
521
521
|
|
@@ -527,16 +527,16 @@ xsl_buffer = '
|
|
527
527
|
end
|
528
528
|
end
|
529
529
|
end
|
530
|
-
|
530
|
+
|
531
531
|
options.each do |k,v|
|
532
|
-
|
532
|
+
|
533
533
|
if options[k] then
|
534
534
|
a.delete a.assoc(k)
|
535
535
|
self.method(((k.to_s) + '=').to_sym).call(options[k])
|
536
536
|
end
|
537
|
-
|
537
|
+
|
538
538
|
end
|
539
|
-
|
539
|
+
|
540
540
|
end
|
541
541
|
|
542
542
|
raw_lines = buffer.lstrip.lines.map(&:chomp)
|
@@ -546,9 +546,9 @@ xsl_buffer = '
|
|
546
546
|
if raw_summary then
|
547
547
|
a_summary = raw_summary.split(',').map(&:strip)
|
548
548
|
|
549
|
-
while raw_lines.first[/#{a_summary.join('|')}:\s+\w+/] do
|
549
|
+
while raw_lines.first[/#{a_summary.join('|')}:\s+\w+/] do
|
550
550
|
|
551
|
-
label, val = raw_lines.shift.match(/(\w+):\s+([^$]+)$/).captures
|
551
|
+
label, val = raw_lines.shift.match(/(\w+):\s+([^$]+)$/).captures
|
552
552
|
@summary.send((label + '=').to_sym, val)
|
553
553
|
end
|
554
554
|
|
@@ -565,50 +565,50 @@ xsl_buffer = '
|
|
565
565
|
puts 'lines: ' + lines.inspect if @debug
|
566
566
|
@parent_node.root.add format_line!( lines)
|
567
567
|
|
568
|
-
end
|
569
|
-
|
568
|
+
end
|
569
|
+
|
570
570
|
def unescape(s)
|
571
571
|
r = s.gsub('<', '<').gsub('>','>')
|
572
572
|
end
|
573
|
-
|
573
|
+
|
574
574
|
def load_handlers(schema)
|
575
575
|
|
576
|
-
objects = PolyrexObjects.new(schema, debug: @debug)
|
576
|
+
objects = PolyrexObjects.new(schema, debug: @debug)
|
577
577
|
h = objects.to_h
|
578
578
|
puts 'h: ' + h.inspect if @debug
|
579
579
|
@objects = h.inject({}){|r,x| r.merge x[0].downcase => x[-1]}
|
580
580
|
|
581
581
|
@objects_a = objects.to_a
|
582
582
|
attach_create_handlers(@objects.keys)
|
583
|
-
#attach_edit_handlers(@objects)
|
583
|
+
#attach_edit_handlers(@objects)
|
584
584
|
|
585
585
|
end
|
586
|
-
|
586
|
+
|
587
587
|
def format_line!(a, i=0)
|
588
588
|
|
589
589
|
records = Rexle::Element.new('records')
|
590
|
-
|
590
|
+
|
591
591
|
# add code here for rowx
|
592
592
|
@field_names = format_masks[i].to_s.scan(/\[!(\w+)\]/)\
|
593
593
|
.flatten.map(&:to_sym)
|
594
594
|
|
595
595
|
rowx_fields = a.map{|x| x.first[/^\w+(?=:)/].to_s.to_sym}.uniq
|
596
|
-
|
596
|
+
|
597
597
|
records = if (@field_names & rowx_fields).length >= 2 then
|
598
598
|
# rowx implementation still to-do
|
599
599
|
#vertical_fiedlparse(records, a, i)
|
600
600
|
else
|
601
601
|
horizontal_fieldparse(records, a, i)
|
602
602
|
end
|
603
|
-
|
603
|
+
|
604
604
|
end
|
605
|
-
|
606
|
-
|
605
|
+
|
606
|
+
|
607
607
|
# -- end of full text edit methods
|
608
|
-
|
608
|
+
|
609
609
|
def horizontal_fieldparse(records, a, i)
|
610
610
|
|
611
|
-
a.each do |x|
|
611
|
+
a.each do |x|
|
612
612
|
|
613
613
|
unless @recordx[i] then
|
614
614
|
@recordx[i] = @recordx[-1].clone
|
@@ -620,28 +620,28 @@ xsl_buffer = '
|
|
620
620
|
|
621
621
|
|
622
622
|
line = raw_line
|
623
|
-
|
623
|
+
|
624
624
|
if line[/\w+\s*---/] then
|
625
625
|
|
626
626
|
node_name = line.sub(/\s*---/,'')
|
627
627
|
ynode = Rexle::Element.new(node_name).add_text("---\n" + x.join("\n"))
|
628
|
-
|
628
|
+
|
629
629
|
summary.add ynode
|
630
630
|
next
|
631
631
|
end
|
632
|
-
|
632
|
+
|
633
633
|
puts '@schema: ' + @schema.inspect if @debug
|
634
634
|
schema_a = @schema.split('/')[1..-1]
|
635
|
-
|
635
|
+
|
636
636
|
if @debug then
|
637
637
|
puts 'schema_a: ' + schema_a.inspect
|
638
638
|
puts 'i: ' + i.inspect
|
639
639
|
end
|
640
|
-
|
640
|
+
|
641
641
|
unless @format_masks[i][/^\(.*\)$/] then
|
642
642
|
|
643
643
|
@field_names, field_values = RXRawLineParser.new(format_masks[i])\
|
644
|
-
.parse(line)
|
644
|
+
.parse(line)
|
645
645
|
|
646
646
|
@field_names = schema_a[i] ? \
|
647
647
|
schema_a[i][/\[([^\]]+)/,1].split(/\s*,\s*/).map(&:to_sym) : \
|
@@ -656,12 +656,12 @@ xsl_buffer = '
|
|
656
656
|
|
657
657
|
pattern = patterns.detect {|x| line.match(/#{x}/)}
|
658
658
|
i = patterns.index(pattern)
|
659
|
-
|
659
|
+
|
660
660
|
@field_names = format_masks[i].to_s.scan(/\[!(\w+)\]/)\
|
661
661
|
.flatten.map(&:to_sym)
|
662
662
|
|
663
|
-
field_values = line.match(/#{pattern}/).captures
|
664
|
-
|
663
|
+
field_values = line.match(/#{pattern}/).captures
|
664
|
+
|
665
665
|
end
|
666
666
|
|
667
667
|
@id_counter.succ!
|
@@ -671,9 +671,9 @@ xsl_buffer = '
|
|
671
671
|
record.add_attribute(id: @id_counter.clone)
|
672
672
|
summary = Rexle::Element.new('summary')
|
673
673
|
|
674
|
-
@field_names.zip(field_values).each do |name, value|
|
674
|
+
@field_names.zip(field_values).each do |name, value|
|
675
675
|
field = Rexle::Element.new(name.to_s)
|
676
|
-
field.text = value
|
676
|
+
field.text = value
|
677
677
|
summary.add field
|
678
678
|
end
|
679
679
|
|
@@ -685,42 +685,42 @@ xsl_buffer = '
|
|
685
685
|
summary.add Rexle::Element.new('format_mask').add_text(format_mask)
|
686
686
|
summary.add Rexle::Element.new('schema').add_text(schema)
|
687
687
|
summary.add Rexle::Element.new('recordx_type').add_text('polyrex')
|
688
|
-
|
688
|
+
|
689
689
|
record.add summary
|
690
690
|
child_records = format_line!(x, i+1)
|
691
691
|
|
692
692
|
record.add child_records
|
693
693
|
records.add record
|
694
694
|
end
|
695
|
-
|
695
|
+
|
696
696
|
records
|
697
697
|
end
|
698
698
|
|
699
699
|
def attach_create_handlers(names)
|
700
700
|
methodx = names.map do |name|
|
701
701
|
%Q(
|
702
|
-
def create_#{name.downcase}(params, &blk)
|
702
|
+
def create_#{name.downcase}(params, &blk)
|
703
703
|
self.create.#{name.downcase}(params, &blk)
|
704
704
|
end
|
705
705
|
)
|
706
706
|
end
|
707
707
|
|
708
708
|
self.instance_eval(methodx.join("\n"))
|
709
|
-
|
709
|
+
|
710
710
|
end
|
711
|
-
|
711
|
+
|
712
712
|
def attach_edit_handlers(objects)
|
713
713
|
objects.keys.each do |name|
|
714
714
|
self.instance_eval(
|
715
715
|
%Q(
|
716
|
-
def #{name.downcase}()
|
716
|
+
def #{name.downcase}()
|
717
717
|
@objects['#{name}'].new(@parent_node, id: @id)
|
718
718
|
end
|
719
719
|
))
|
720
720
|
end
|
721
|
-
|
721
|
+
|
722
722
|
end
|
723
|
-
|
723
|
+
|
724
724
|
def openx(s)
|
725
725
|
|
726
726
|
if s[/</] # xml
|
@@ -728,7 +728,7 @@ xsl_buffer = '
|
|
728
728
|
elsif s[/\[/] then # schema
|
729
729
|
buffer = polyrex_new s
|
730
730
|
elsif s[/^https?:\/\//] then # url
|
731
|
-
buffer = open(s, 'UserAgent' => 'Polyrex-Reader').read
|
731
|
+
buffer = URI.open(s, 'UserAgent' => 'Polyrex-Reader').read
|
732
732
|
else # local file
|
733
733
|
buffer = File.read s
|
734
734
|
@local_filepath = s
|
@@ -738,9 +738,9 @@ xsl_buffer = '
|
|
738
738
|
@doc = Rexle.new buffer
|
739
739
|
|
740
740
|
schema = @doc.root.text('summary/schema').to_s
|
741
|
-
|
741
|
+
|
742
742
|
if schema.nil? then
|
743
|
-
schema = PolyrexSchema.new.parse(buffer).to_schema
|
743
|
+
schema = PolyrexSchema.new.parse(buffer).to_schema
|
744
744
|
e = @doc.root.element('summary')
|
745
745
|
e.add Rexle::Element.new('schema').add_text(schema)
|
746
746
|
end
|
@@ -763,7 +763,7 @@ xsl_buffer = '
|
|
763
763
|
@parent_node = @doc.root.element('records')
|
764
764
|
|
765
765
|
end
|
766
|
-
|
766
|
+
|
767
767
|
def regexify_fmask(f)
|
768
768
|
|
769
769
|
a = f.split(/(?=\[!\w+\])/).map do |x|
|
@@ -780,45 +780,45 @@ xsl_buffer = '
|
|
780
780
|
end
|
781
781
|
end
|
782
782
|
|
783
|
-
a.join
|
783
|
+
a.join
|
784
784
|
end
|
785
|
-
|
785
|
+
|
786
786
|
def tail_map(a)
|
787
787
|
[a] + (a.length > 1 ? tail_map(a[0..-2]) : [])
|
788
788
|
end
|
789
|
-
|
789
|
+
|
790
790
|
|
791
791
|
def load_find_by(schema)
|
792
792
|
|
793
793
|
a = PolyrexObjectMethods.new(schema).to_a
|
794
794
|
|
795
|
-
methodx = a.map do |class_name, methods|
|
796
|
-
|
795
|
+
methodx = a.map do |class_name, methods|
|
796
|
+
|
797
797
|
class_name.downcase!
|
798
|
-
|
799
|
-
methods.map do |method_name|
|
800
|
-
|
798
|
+
|
799
|
+
methods.map do |method_name|
|
800
|
+
|
801
801
|
xpath = %Q(@doc.root.element("//%s[summary/%s='\#\{val\}']")) % \
|
802
802
|
[class_name, method_name]
|
803
803
|
xpath2 = %Q(@doc.root.xpath("//%s[summary/%s='\#\{val\}']")) % \
|
804
804
|
[class_name, method_name]
|
805
|
-
|
806
|
-
"def find_by_#{class_name}_#{method_name}(val)
|
807
|
-
|
805
|
+
|
806
|
+
"def find_by_#{class_name}_#{method_name}(val)
|
807
|
+
|
808
808
|
node = #{xpath}
|
809
|
-
|
809
|
+
|
810
810
|
if node then
|
811
811
|
Kernel.const_get(node.name.capitalize).new node, id: @id
|
812
812
|
else
|
813
813
|
nil
|
814
814
|
end
|
815
|
-
|
815
|
+
|
816
816
|
end
|
817
817
|
|
818
|
-
def find_all_by_#{class_name}_#{method_name}(val)
|
819
|
-
|
818
|
+
def find_all_by_#{class_name}_#{method_name}(val)
|
819
|
+
|
820
820
|
nodes = #{xpath2}
|
821
|
-
|
821
|
+
|
822
822
|
if nodes then
|
823
823
|
nodes.map do |node|
|
824
824
|
Kernel.const_get(node.name.capitalize).new node, id: @id
|
@@ -826,35 +826,35 @@ xsl_buffer = '
|
|
826
826
|
else
|
827
827
|
nil
|
828
828
|
end
|
829
|
-
|
830
|
-
end
|
829
|
+
|
830
|
+
end
|
831
831
|
"
|
832
|
-
end
|
832
|
+
end
|
833
833
|
end
|
834
834
|
|
835
835
|
self.instance_eval methodx.join("\n")
|
836
836
|
end
|
837
837
|
|
838
838
|
|
839
|
-
# refreshes the XML document with any new modification from
|
839
|
+
# refreshes the XML document with any new modification from
|
840
840
|
# the summary object
|
841
841
|
def refresh_summary()
|
842
|
-
|
843
|
-
summary = @doc.root.element('summary')
|
842
|
+
|
843
|
+
summary = @doc.root.element('summary')
|
844
844
|
@summary.to_h.each do |k,v|
|
845
|
-
|
845
|
+
|
846
846
|
puts "k: %s; v: %s" % [k, v] if @debug
|
847
847
|
e = summary.element(k.to_s)
|
848
848
|
if e then
|
849
849
|
e.text = v
|
850
850
|
else
|
851
|
-
summary.add Rexle::Element.new(k.to_s).add_text(v)
|
851
|
+
summary.add Rexle::Element.new(k.to_s).add_text(v)
|
852
852
|
end
|
853
853
|
end
|
854
|
-
|
854
|
+
|
855
855
|
if @summary.xslt then
|
856
|
-
@doc.instructions = [['xml-stylesheet',
|
857
|
-
"title='XSL_formatting' type='text/xsl' href='#{@summary.xslt}'"]]
|
856
|
+
@doc.instructions = [['xml-stylesheet',
|
857
|
+
"title='XSL_formatting' type='text/xsl' href='#{@summary.xslt}'"]]
|
858
858
|
end
|
859
859
|
end
|
860
860
|
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyrex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
rivEdfkvT/8GV5Nip0lSS+cuk20UhOdJR9QIcCJp0QL4NUik9VYljGbQbQQS6Isc
|
36
36
|
iIwZ6uFJfcp9SWBRrSZmlI52
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2021-
|
38
|
+
date: 2021-11-18 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: polyrex-objects
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
version: '1.0'
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 1.0.
|
49
|
+
version: 1.0.3
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
version: '1.0'
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 1.0.
|
59
|
+
version: 1.0.3
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: polyrex-object-methods
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,7 +106,7 @@ dependencies:
|
|
106
106
|
version: '1.8'
|
107
107
|
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: 1.8.
|
109
|
+
version: 1.8.27
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -116,9 +116,9 @@ dependencies:
|
|
116
116
|
version: '1.8'
|
117
117
|
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
|
-
version: 1.8.
|
119
|
+
version: 1.8.27
|
120
120
|
description:
|
121
|
-
email:
|
121
|
+
email: digital.robertson@gmail.com
|
122
122
|
executables: []
|
123
123
|
extensions: []
|
124
124
|
extra_rdoc_files: []
|
@@ -143,7 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
145
|
requirements: []
|
146
|
-
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 2.7.10
|
147
148
|
signing_key:
|
148
149
|
specification_version: 4
|
149
150
|
summary: A flavour of XML for storing and retrieveing records in a Polyrex hierarchy
|
metadata.gz.sig
CHANGED
Binary file
|