polyrex 1.1.13 → 1.3.2
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/polyrex.rb +87 -33
- metadata +39 -75
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ba4f6a16445a6fbd95a21f6e5a5641a7d9f5003f22fb7ed2091e89e93668d6cb
|
4
|
+
data.tar.gz: a240d4e392b9b09556e26009bc72c59bd3a502f8a35292204df3ac201e8d5a7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 732161598ed4e13790d649ba5f531e82e91c6b1d9236b12f3b9acca5cdc4f62dec2538bd3eeee6c40258f677f5b491b01d37d3d20213cd9af47a319bb436a50a
|
7
|
+
data.tar.gz: '028715744fce1de173a07353cc193b0481a5b6be848fce8c9c39e7be09fe601044114ae0aea2fc97680c174c72ef9fac79bfa9d05ae053763fd55bf4ea2c4ca4'
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/polyrex.rb
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
# file: polyrex.rb
|
4
4
|
|
5
5
|
#require 'open-uri'
|
6
|
-
require 'polyrex-schema'
|
6
|
+
#require 'polyrex-schema'
|
7
7
|
#require 'line-tree'
|
8
8
|
require 'polyrex-objects'
|
9
|
-
require 'polyrex-createobject'
|
9
|
+
#require 'polyrex-createobject'
|
10
10
|
require 'polyrex-object-methods'
|
11
11
|
require 'recordx-xslt'
|
12
12
|
#require 'rexle'
|
@@ -42,18 +42,23 @@ class Polyrex
|
|
42
42
|
attr_accessor :summary_fields, :xslt_schema, :id_counter,
|
43
43
|
:schema, :type, :delimiter, :xslt, :format_masks
|
44
44
|
|
45
|
-
def initialize(location=nil, schema: nil, id_counter: '1')
|
45
|
+
def initialize(location=nil, schema: nil, id_counter: '1', debug: false)
|
46
46
|
|
47
47
|
|
48
|
-
@id_counter = id_counter
|
48
|
+
@id_counter, @debug = id_counter, debug
|
49
49
|
@format_masks = []
|
50
50
|
@delimiter = ''
|
51
51
|
|
52
52
|
self.method(:schema=).call(schema) if schema
|
53
53
|
|
54
|
-
if location then
|
54
|
+
if location then
|
55
55
|
|
56
|
-
|
56
|
+
s, type = RXFHelper.read(location)
|
57
|
+
return import(s) if s =~ /^\<\?polyrex\b/
|
58
|
+
|
59
|
+
@local_filepath = location if type == :file or type == :dfs
|
60
|
+
|
61
|
+
openx(s)
|
57
62
|
|
58
63
|
if schema then
|
59
64
|
|
@@ -70,6 +75,7 @@ class Polyrex
|
|
70
75
|
end
|
71
76
|
|
72
77
|
@polyrex_xslt = RecordxXSLT.new
|
78
|
+
#@parent_node = @doc.root if @doc
|
73
79
|
end
|
74
80
|
|
75
81
|
def add(pxobj)
|
@@ -80,15 +86,9 @@ class Polyrex
|
|
80
86
|
CGI.unescapeHTML(to_xml(options))
|
81
87
|
end
|
82
88
|
|
83
|
-
def create(id:
|
84
|
-
|
85
|
-
|
86
|
-
# @parent_node is a Rexle::Element pointing to the current record
|
87
|
-
|
88
|
-
@create.id = id || @id_counter
|
89
|
-
@create.record = @parent_node.name == 'records' ? \
|
90
|
-
@parent_node.root : @parent_node.root.element('records')
|
91
|
-
@create
|
89
|
+
def create(id: @id_counter)
|
90
|
+
puts 'id: ' + id.inspect if @debug
|
91
|
+
@create = PolyrexCreateObject.new(id: id, record: @doc.root)
|
92
92
|
end
|
93
93
|
|
94
94
|
def delete(x=nil)
|
@@ -176,6 +176,7 @@ class Polyrex
|
|
176
176
|
|
177
177
|
buffer = yield if block_given?
|
178
178
|
string_parse buffer.clone, options
|
179
|
+
|
179
180
|
self
|
180
181
|
end
|
181
182
|
|
@@ -212,9 +213,10 @@ class Polyrex
|
|
212
213
|
|
213
214
|
def records
|
214
215
|
|
215
|
-
@doc.root.xpath("records/*").map do |
|
216
|
-
|
216
|
+
@doc.root.xpath("records/*").map do |node|
|
217
|
+
Kernel.const_get(node.name.capitalize).new node, id: @id_counter
|
217
218
|
end
|
219
|
+
|
218
220
|
end
|
219
221
|
|
220
222
|
def rxpath(s)
|
@@ -222,7 +224,9 @@ class Polyrex
|
|
222
224
|
a = @doc.root.xpath s.split('/').map \
|
223
225
|
{|x| x.sub('[','[summary/').prepend('records/')}.join('/')
|
224
226
|
|
225
|
-
a.map
|
227
|
+
a.map do |node|
|
228
|
+
Kernel.const_get(node.name.capitalize).new node, id: node.attributes[:id]
|
229
|
+
end
|
226
230
|
|
227
231
|
end
|
228
232
|
|
@@ -265,6 +269,32 @@ class Polyrex
|
|
265
269
|
|
266
270
|
make_dynarex(root)
|
267
271
|
end
|
272
|
+
|
273
|
+
def to_opml()
|
274
|
+
|
275
|
+
puts '@schema: ' + @schema.inspect if @debug
|
276
|
+
|
277
|
+
head, body = @schema.split(/(?<=\])/,2)
|
278
|
+
schema_body = body.gsub(/(?<=\[)[^\]]+/) do |x|
|
279
|
+
x.split(/\s*,\s*/).map {|field| '@' + field + ':' + field}.join(', ')
|
280
|
+
end
|
281
|
+
schema_head = head.gsub(/(?<=\[)[^\]]+/) do |x|
|
282
|
+
x.split(/\s*,\s*/).map {|field| field + ':' + field}.join(', ')
|
283
|
+
end
|
284
|
+
|
285
|
+
puts 'schema_body: ' + schema_body.inspect if @debug
|
286
|
+
puts 'schema_head: ' + schema_head.inspect if @debug
|
287
|
+
xslt_schema = schema_head.sub(/^\w+/,'opml>head') +
|
288
|
+
schema_body.gsub(/\w+(?=\[)/,'outline')\
|
289
|
+
.sub(/\/(\w+)(?=\[)/,'/body>outline')
|
290
|
+
|
291
|
+
puts 'xslt_schema: ' + xslt_schema.inspect if @debug
|
292
|
+
|
293
|
+
recxslt = RecordxXSLT.new(schema: @schema, xslt_schema: xslt_schema)
|
294
|
+
|
295
|
+
Rexslt.new(recxslt.to_xslt, self.to_xml).to_s
|
296
|
+
|
297
|
+
end
|
268
298
|
|
269
299
|
def to_s(header: true)
|
270
300
|
|
@@ -275,11 +305,12 @@ class Polyrex
|
|
275
305
|
summary = item.element 'summary'
|
276
306
|
format_mask = summary.text('format_mask').to_s
|
277
307
|
line = format_mask.gsub(/\[![^\]]+\]/){|x| summary.text(x[2..-2]).to_s}
|
308
|
+
puts 'line: ' + line.inspect if @debug
|
278
309
|
|
279
|
-
|
310
|
+
recordsx = item.element('records').elements.to_a
|
280
311
|
|
281
|
-
if
|
282
|
-
line = line + "\n" + build(
|
312
|
+
if recordsx.length > 0 then
|
313
|
+
line = line + "\n" + build(recordsx, indent + 1).join("\n")
|
283
314
|
end
|
284
315
|
(' ' * indent) + line
|
285
316
|
end
|
@@ -312,11 +343,23 @@ class Polyrex
|
|
312
343
|
declaration = %Q(<?polyrex %s?>\n) % s
|
313
344
|
end
|
314
345
|
|
315
|
-
docheader = declaration + sumry
|
346
|
+
docheader = declaration + "\n" + sumry
|
316
347
|
out = build(self.records).join("\n")
|
317
348
|
header ? docheader + "\n" + out : out
|
318
349
|
|
319
350
|
end
|
351
|
+
|
352
|
+
def to_tree()
|
353
|
+
|
354
|
+
s = @schema.gsub(/(?<=\[)[^\]]+/) do |x|
|
355
|
+
x.split(/\s*,\s*/).map {|field| '@' + field + ':' + field}.join(', ')
|
356
|
+
end
|
357
|
+
|
358
|
+
xslt_schema = s.gsub(/\w+(?=\[)/,'item').sub(/^\w+/,'tree')
|
359
|
+
recxslt = RecordxXSLT.new(schema: @schema, xslt_schema: xslt_schema)
|
360
|
+
Rexslt.new(recxslt.to_xslt, self.to_xml).to_s
|
361
|
+
|
362
|
+
end
|
320
363
|
|
321
364
|
def to_xslt()
|
322
365
|
@polyrex_xslt.schema = @schema
|
@@ -492,7 +535,7 @@ xsl_buffer = '
|
|
492
535
|
|
493
536
|
end
|
494
537
|
|
495
|
-
raw_lines = buffer.
|
538
|
+
raw_lines = buffer.lstrip.lines.map(&:chomp)
|
496
539
|
|
497
540
|
raw_summary = schema[/^\w+\[([^\]]+)/,1]
|
498
541
|
|
@@ -513,7 +556,9 @@ xsl_buffer = '
|
|
513
556
|
@parent_node = records.parent
|
514
557
|
records.delete
|
515
558
|
|
516
|
-
|
559
|
+
puts 'raw_lines: ' + raw_lines.inspect if @debug
|
560
|
+
lines = LineTree.new(raw_lines.join("\n"), ignore_label: true).to_a
|
561
|
+
puts 'lines: ' + lines.inspect if @debug
|
517
562
|
@parent_node.root.add format_line!( lines)
|
518
563
|
|
519
564
|
end
|
@@ -524,10 +569,9 @@ xsl_buffer = '
|
|
524
569
|
|
525
570
|
def load_handlers(schema)
|
526
571
|
|
527
|
-
|
528
|
-
objects = PolyrexObjects.new(schema)
|
572
|
+
objects = PolyrexObjects.new(schema, debug: @debug)
|
529
573
|
h = objects.to_h
|
530
|
-
|
574
|
+
puts 'h: ' + h.inspect if @debug
|
531
575
|
@objects = h.inject({}){|r,x| r.merge x[0].downcase => x[-1]}
|
532
576
|
|
533
577
|
@objects_a = objects.to_a
|
@@ -582,12 +626,18 @@ xsl_buffer = '
|
|
582
626
|
next
|
583
627
|
end
|
584
628
|
|
629
|
+
puts '@schema: ' + @schema.inspect if @debug
|
630
|
+
schema_a = @schema.split('/')[1..-1]
|
631
|
+
|
632
|
+
if @debug then
|
633
|
+
puts 'schema_a: ' + schema_a.inspect
|
634
|
+
puts 'i: ' + i.inspect
|
635
|
+
end
|
636
|
+
|
585
637
|
unless @format_masks[i][/^\(.*\)$/] then
|
586
638
|
|
587
639
|
@field_names, field_values = RXRawLineParser.new(format_masks[i])\
|
588
640
|
.parse(line)
|
589
|
-
|
590
|
-
schema_a = @schema.split('/')[1..-1]
|
591
641
|
|
592
642
|
@field_names = schema_a[i] ? \
|
593
643
|
schema_a[i][/\[([^\]]+)/,1].split(/\s*,\s*/).map(&:to_sym) : \
|
@@ -625,7 +675,9 @@ xsl_buffer = '
|
|
625
675
|
|
626
676
|
format_mask = @format_masks[i].to_s
|
627
677
|
|
628
|
-
|
678
|
+
index = i >= schema_a.length ? schema_a.length - 1 : i
|
679
|
+
|
680
|
+
schema = schema_a[index..-1].join('/')
|
629
681
|
summary.add Rexle::Element.new('format_mask').add_text(format_mask)
|
630
682
|
summary.add Rexle::Element.new('schema').add_text(schema)
|
631
683
|
summary.add Rexle::Element.new('recordx_type').add_text('polyrex')
|
@@ -752,7 +804,7 @@ xsl_buffer = '
|
|
752
804
|
node = #{xpath}
|
753
805
|
|
754
806
|
if node then
|
755
|
-
|
807
|
+
Kernel.const_get(node.name.capitalize).new node, id: @id
|
756
808
|
else
|
757
809
|
nil
|
758
810
|
end
|
@@ -765,7 +817,7 @@ xsl_buffer = '
|
|
765
817
|
|
766
818
|
if nodes then
|
767
819
|
nodes.map do |node|
|
768
|
-
|
820
|
+
Kernel.const_get(node.name.capitalize).new node, id: @id
|
769
821
|
end
|
770
822
|
else
|
771
823
|
nil
|
@@ -785,7 +837,9 @@ xsl_buffer = '
|
|
785
837
|
def refresh_summary()
|
786
838
|
|
787
839
|
summary = @doc.root.element('summary')
|
788
|
-
@summary.to_h.each do |k,v|
|
840
|
+
@summary.to_h.each do |k,v|
|
841
|
+
|
842
|
+
puts "k: %s; v: %s" % [k, v] if @debug
|
789
843
|
e = summary.element(k.to_s)
|
790
844
|
if e then
|
791
845
|
e.text = v
|
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.
|
4
|
+
version: 1.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -10,88 +10,53 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwNTI0MTI1MjMzWhcN
|
15
|
+
MjIwNTI0MTI1MjMzWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDxKAjh
|
17
|
+
s6uPs8gcMaoia91NWkBsYkIRp98yXB/MeTcAcK+jM3Y3jbKfbsOa1QVETY+KNZPH
|
18
|
+
byDLynjQE7xOQhZjMrtDB128+iWT+fCvF/OQS0tMMT5ki3qHQDJSqUfxKngwK9p2
|
19
|
+
TlV4EVRaejuPYwGvXxb8qmx9jrR9S3HZVQMHd6aMNAwBb1ZNkSQymWQeEoM+45Un
|
20
|
+
pN3XHGEd2zejUOLNrSiZbBvq5fMb/V2a6LPAfg2WvZzWSZgl4jPjVtvUZVp1BUaU
|
21
|
+
YAXBUsKZ77FC6jR9lb+9iVJAwDTdsI2G6pX5W8EZG0L7i9jeLMQB8bCCzu2zlAhc
|
22
|
+
YJ06owu1LJhPWSxm/3aw6JTKQx0hFepF4mUKHe5iRhDgsVhHNkopzOCQ4JwwHu8G
|
23
|
+
PDi1kUQcFVVkWxRr/m/GRQFkYVn3omgIBMWp/JB8mmevqZ5gaCKvHF55wmDpFzyJ
|
24
|
+
cPDfCtP/wl8wqf363VQdgiru7EcgxQFtPgx6PyMNzfouhRhkBZIY7wYgROkCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUcuJiQueO
|
26
|
+
q5BdutOcNGPDMgOla5kwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
|
+
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEA1AnaW09JSrJOdlLTeiItH/Mfj6vcAuodI4Ys3PCh
|
29
|
+
UfQsIJUedcMysvo+6J0M+hEYL02w6ynWahcQbzvYPr+NwV/8FqMGGAyDpBSaLtrz
|
30
|
+
9J4cxy4p/mq2dF2lEsCUNoSBWvDpvQI4c2w79/gpWE+w0abHyX97r3N2wWv/OiwV
|
31
|
+
u06GMpESpRj4RAhhy88aDhGDUfMWd+nZ20gWcs2YR1yJf/JyaDfRcOFqLMgVw35Y
|
32
|
+
oQhEZldZrsYsF4FNEBmH2mx2iLq6VbCyZZ3M6jsIHUEDZdrDjbs8ejPvWfEdTW+1
|
33
|
+
x7007qRZCfLvIsqAf7GViMWXgbiv0ZFSKgV7qtK0IgVBg0NDor3xc9w/3VLqshTZ
|
34
|
+
jIqQb9u4Zkhtsp+Ly/HVroN0cylu1t/el2qILTDOkyKnAikvhKpX1wujv+VVqWwd
|
35
|
+
rivEdfkvT/8GV5Nip0lSS+cuk20UhOdJR9QIcCJp0QL4NUik9VYljGbQbQQS6Isc
|
36
|
+
iIwZ6uFJfcp9SWBRrSZmlI52
|
32
37
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
38
|
+
date: 2021-05-24 00:00:00.000000000 Z
|
34
39
|
dependencies:
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: polyrex-schema
|
37
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - "~>"
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0.4'
|
42
|
-
- - ">="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 0.4.2
|
45
|
-
type: :runtime
|
46
|
-
prerelease: false
|
47
|
-
version_requirements: !ruby/object:Gem::Requirement
|
48
|
-
requirements:
|
49
|
-
- - "~>"
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: '0.4'
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.4.2
|
55
40
|
- !ruby/object:Gem::Dependency
|
56
41
|
name: polyrex-objects
|
57
42
|
requirement: !ruby/object:Gem::Requirement
|
58
43
|
requirements:
|
59
44
|
- - "~>"
|
60
45
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: 0.9.8
|
65
|
-
type: :runtime
|
66
|
-
prerelease: false
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
68
|
-
requirements:
|
69
|
-
- - "~>"
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '0.9'
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: 0.9.8
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: polyrex-createobject
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '0.6'
|
46
|
+
version: '1.0'
|
82
47
|
- - ">="
|
83
48
|
- !ruby/object:Gem::Version
|
84
|
-
version: 0.
|
49
|
+
version: 1.0.1
|
85
50
|
type: :runtime
|
86
51
|
prerelease: false
|
87
52
|
version_requirements: !ruby/object:Gem::Requirement
|
88
53
|
requirements:
|
89
54
|
- - "~>"
|
90
55
|
- !ruby/object:Gem::Version
|
91
|
-
version: '0
|
56
|
+
version: '1.0'
|
92
57
|
- - ">="
|
93
58
|
- !ruby/object:Gem::Version
|
94
|
-
version: 0.
|
59
|
+
version: 1.0.1
|
95
60
|
- !ruby/object:Gem::Dependency
|
96
61
|
name: polyrex-object-methods
|
97
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,40 +83,40 @@ dependencies:
|
|
118
83
|
requirements:
|
119
84
|
- - "~>"
|
120
85
|
- !ruby/object:Gem::Version
|
121
|
-
version: '0.
|
86
|
+
version: '0.2'
|
122
87
|
- - ">="
|
123
88
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
89
|
+
version: 0.2.2
|
125
90
|
type: :runtime
|
126
91
|
prerelease: false
|
127
92
|
version_requirements: !ruby/object:Gem::Requirement
|
128
93
|
requirements:
|
129
94
|
- - "~>"
|
130
95
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0.
|
96
|
+
version: '0.2'
|
132
97
|
- - ">="
|
133
98
|
- !ruby/object:Gem::Version
|
134
|
-
version: 0.
|
99
|
+
version: 0.2.2
|
135
100
|
- !ruby/object:Gem::Dependency
|
136
101
|
name: dynarex
|
137
102
|
requirement: !ruby/object:Gem::Requirement
|
138
103
|
requirements:
|
139
104
|
- - "~>"
|
140
105
|
- !ruby/object:Gem::Version
|
141
|
-
version: '1.
|
106
|
+
version: '1.8'
|
142
107
|
- - ">="
|
143
108
|
- !ruby/object:Gem::Version
|
144
|
-
version: 1.
|
109
|
+
version: 1.8.19
|
145
110
|
type: :runtime
|
146
111
|
prerelease: false
|
147
112
|
version_requirements: !ruby/object:Gem::Requirement
|
148
113
|
requirements:
|
149
114
|
- - "~>"
|
150
115
|
- !ruby/object:Gem::Version
|
151
|
-
version: '1.
|
116
|
+
version: '1.8'
|
152
117
|
- - ">="
|
153
118
|
- !ruby/object:Gem::Version
|
154
|
-
version: 1.
|
119
|
+
version: 1.8.19
|
155
120
|
description:
|
156
121
|
email: james@jamesrobertson.eu
|
157
122
|
executables: []
|
@@ -178,8 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
143
|
- !ruby/object:Gem::Version
|
179
144
|
version: '0'
|
180
145
|
requirements: []
|
181
|
-
|
182
|
-
rubygems_version: 2.6.13
|
146
|
+
rubygems_version: 3.1.2
|
183
147
|
signing_key:
|
184
148
|
specification_version: 4
|
185
149
|
summary: A flavour of XML for storing and retrieveing records in a Polyrex hierarchy
|
metadata.gz.sig
CHANGED
Binary file
|