polyrex-objects 0.9.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 25b8434f164aa4e2628a78c4fa5e294b1c869498
4
- data.tar.gz: e8c7156c27a25fc5cea2e412d0e7dac1ea4a7da1
3
+ metadata.gz: 1acdaea24860535ed620cd454e7487e9ab4c2cc9
4
+ data.tar.gz: 1c66171b97eff79522e3b3a31aaba93d72ac905d
5
5
  SHA512:
6
- metadata.gz: 3d702cc22105d9717206b384a24374cd1bbae24d378b14e27800367097101126b3f224cd973862965b2e1aa3f982de14eb461e813427b008cbf1afa4c112cf7c
7
- data.tar.gz: 34227d46a258030d4ca441b5e9bcddbfb52c0e640eaa88b4697b73657973a2f8c3c0c3b89daace3bfc15b5ae3427c14dded38c3fe7c2b01ec626ffbbfeb120d4
6
+ metadata.gz: 6e82afb248958a8e9f64afd3e16a80f81a28152f7c3926cee8f79a18a2c4496bc1eff5f7d17127f44a3a8cb47919ab6a2051cb6a9dda03d36db48157236b3e63
7
+ data.tar.gz: c5b5202f30fade92f4583848ebe7b34f06e2cce2b5baa6cbfc8e26623c99ff747fcf227fd7a95b13f7ba7c2e747ecb7147d9bfe32eaf11f009ca1b4ae4b13c64
checksums.yaml.gz.sig CHANGED
@@ -1,3 +1,2 @@
1
- GH ���Wb T:���ɾ%���HEov]�!QP��U
2
- �5����e~{g'sv�AU躲�X�s;
3
- �SY)����SBݐ�rZUʪ��4�Sa���, �Q��`��LU��V���$���\�N�&$)�X|�p����j���0�2�h��w������"gf�^�+�Wh���uj?�˸��`/1���Žp7L:�"%����Z�W�� ���ËOg�5IE���$�����͛O�I-o��ti�xm
1
+ R����;X��]�FG[�:������w^�T�1�7��z!Z�g��� ��
2
+ ��z@X܂
data.tar.gz.sig CHANGED
Binary file
@@ -9,20 +9,28 @@ require 'rexle'
9
9
 
10
10
  class PolyrexObjects
11
11
 
12
-
13
12
  class PolyrexObject
14
13
 
15
- attr_reader :node, :id
14
+ def initialize(node, id: '0', debug: true)
16
15
 
17
- def initialize(node, id: '0', objects: nil)
18
-
19
- @@id = id
20
- @node = node
16
+ @id = id
21
17
  @fields =[]
22
- @objects = objects
18
+ @node, @debug = node, debug
19
+
20
+ e = node.element('summary')
21
+ @schema = e.text('schema')
22
+ @child_schema = @schema =~ /\// ? @schema[/(?<=\/).*/] : @schema
23
+ puts '@child_schema:' + @child_schema.inspect if @debug
24
+ @record = @schema[/^[^\[]+/]
25
+ @fields = @schema[/(?<=\[)[^\]]+/].split(/ *, */)
23
26
 
27
+ attr = @fields.map {|x| [x, e.text(x)] }
28
+ build_attributes attr
29
+
30
+ define_singleton_method(@record.to_sym) { self.records}
31
+
24
32
  end
25
-
33
+
26
34
  def add(pxobj)
27
35
  @node.element('records').add pxobj.node
28
36
  end
@@ -40,14 +48,9 @@ class PolyrexObjects
40
48
  self.records.length
41
49
  end
42
50
 
43
- def create(id: '0')
44
- id ||=@@id
45
-
46
- id.succ!
47
- @create.id = id
51
+ def create(id: @id)
48
52
 
49
- @create.record = @node.element('records')
50
- @create
53
+ PolyrexCreateObject.new(id: id, record: @node)
51
54
  end
52
55
 
53
56
  def css(s)
@@ -83,7 +86,7 @@ class PolyrexObjects
83
86
  end
84
87
 
85
88
  def inspect()
86
- "#<PolyrexObject:%s" % __id__
89
+ "#<%s:%s" % [self.class.name, __id__]
87
90
  end
88
91
 
89
92
  def [](n)
@@ -93,8 +96,9 @@ class PolyrexObjects
93
96
  def parent()
94
97
 
95
98
  parent_node = self.node.parent.parent
96
- @objects[parent_node.name]\
97
- .new(parent_node, id: parent_node.attributes[:id], objects: @objects)
99
+
100
+ Kernel.const_get(parent_node.name.capitalize)\
101
+ .new(parent_node, id: parent_node.attributes[:id])
98
102
 
99
103
  end
100
104
 
@@ -105,7 +109,15 @@ class PolyrexObjects
105
109
 
106
110
  node.parent.parent.parent.parent ? true : false
107
111
  end
108
-
112
+
113
+ def records()
114
+
115
+ @node.xpath('records/*').map do |node|
116
+ Kernel.const_get(node.name.capitalize).new node
117
+ end
118
+
119
+ end
120
+
109
121
  def to_doc()
110
122
  Rexle.new @node.to_a
111
123
  end
@@ -129,25 +141,25 @@ class PolyrexObjects
129
141
  xsl_buffer =<<EOF
130
142
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
131
143
  <xsl:output encoding="UTF-8"
132
- indent="yes"
133
- omit-xml-declaration="yes"/>
134
-
135
- <xsl:template match="*">
136
- <xsl:element name="{name()}">
137
- <xsl:element name="summary">
138
- <xsl:for-each select="summary/*">
139
- <xsl:copy-of select="."/>
140
- </xsl:for-each>
141
- </xsl:element>
142
- <xsl:element name="records">
143
- <xsl:for-each select="records/*">
144
- <xsl:element name="{name()}">
145
- <xsl:copy-of select="summary/*"/>
146
- </xsl:element>
147
- </xsl:for-each>
148
- </xsl:element>
149
- </xsl:element>
150
- </xsl:template>
144
+ indent="yes"
145
+ omit-xml-declaration="yes"/>
146
+
147
+ <xsl:template match="*">
148
+ <xsl:element name="{name()}">
149
+ <xsl:element name="summary">
150
+ <xsl:for-each select="summary/*">
151
+ <xsl:copy-of select="."/>
152
+ </xsl:for-each>
153
+ </xsl:element>
154
+ <xsl:element name="records">
155
+ <xsl:for-each select="records/*">
156
+ <xsl:element name="{name()}">
157
+ <xsl:copy-of select="summary/*"/>
158
+ </xsl:element>
159
+ </xsl:for-each>
160
+ </xsl:element>
161
+ </xsl:element>
162
+ </xsl:template>
151
163
  </xsl:stylesheet>
152
164
  EOF
153
165
 
@@ -165,13 +177,12 @@ EOF
165
177
 
166
178
  end
167
179
 
168
-
169
180
  def to_h()
170
181
  @fields.inject({}) do |r, field|
171
182
  r.merge(field=> self.method(field).call)
172
183
  end
173
184
  end
174
-
185
+
175
186
  def to_s()
176
187
 
177
188
  if self.respond_to? :records then
@@ -199,9 +210,28 @@ EOF
199
210
  def xpath(s)
200
211
  @node.xpath(s)
201
212
  end
202
-
213
+
203
214
  private
204
-
215
+
216
+ def build_attributes(attr=[])
217
+
218
+ attr.each do |name, value|
219
+
220
+ var = name.to_s
221
+ get, set = var.to_sym, (var + '=').to_sym
222
+
223
+ define_singleton_method(get) do
224
+ @node.element("summary/#{__callee__}/text()").to_s
225
+ end
226
+
227
+ define_singleton_method(set) do |v|
228
+ @node.element("summary/#{(__callee__).to_s.chop}").text = v.to_s
229
+ end
230
+
231
+ end
232
+
233
+ end
234
+
205
235
  def build(records, indent=0)
206
236
 
207
237
  records.map do |item|
@@ -217,157 +247,29 @@ EOF
217
247
  end
218
248
  (' ' * indent) + line
219
249
  end
220
- end
221
- end
222
-
223
- def initialize(schema, node=nil, id: '0')
224
-
225
- @node = node
226
- @@id = id
250
+ end
227
251
 
228
- @schema = schema
252
+ end
229
253
 
230
- if schema then
231
-
232
- @class_names = []
254
+ def initialize(schema, debug: false)
233
255
 
234
- h = PolyrexSchema.new(schema).to_h
235
-
236
- scan = -> (a) do
237
- a.each do |x|
238
- make_class(x[:name], x[:fields], x[:schema])
239
- scan.call(x[:children]) if x[:children]
240
- end
241
- end
256
+ @debug = debug
257
+ record_names = schema.scan(/(?<=\/)\w+/)
258
+ puts 'record_names: ' + record_names.inspect if @debug
242
259
 
243
- scan.call h
244
-
245
- if @class_names.length < 2 then
246
- make_def_records(@class_names.first)
247
- else
248
- # implement the child_object within each class object
249
- @class_names[0..-2].reverse.each_with_index do |class_name, k|
250
-
251
- i = @class_names.length - (k + 1)
252
- make_def_records(class_name,i)
253
- end
254
- end
255
- @class_names[1..-1].each_with_index do |class_name, k|
256
- eval "#{class_name}.class_eval {
257
- def parent()
258
- #{@class_names[k]}.new(@node.parent.parent, id: @@id)
259
- end
260
- }"
261
- end
262
-
263
- methodx = @class_names.map do |name|
264
- %Q(def #{name.downcase}(); #{name}.new(@node, id: @@id); end)
265
- end
266
-
267
- self.instance_eval(methodx.join("\n"))
260
+ @classes = record_names.inject({}) do |r, name|
261
+ puts 'name: ' + name.inspect if @debug
262
+ r.merge!({name.to_sym => \
263
+ (Object.const_set name.capitalize, Class.new(PolyrexObject))})
268
264
  end
269
- end
270
265
 
271
- def to_a
272
- @class_names.map {|x| eval(x.to_s)}
273
266
  end
274
-
275
- def to_h
276
- Hash[self.to_a.map {|x| [x.name[/\w+$/], x]}]
277
- end
278
-
279
- private
280
-
281
- def make_class(name, fields, schema=@schema)
282
-
283
- if fields then
284
-
285
- @class_names << name.capitalize
286
-
287
- classx = []
288
- classx << "class #{name.capitalize} < PolyrexObject"
289
- classx << "def initialize(node=nil, id: '0', objects: nil)"
290
- classx << " @id = id"
291
- classx << " node ||= Rexle.new('<#{name}><summary/><records/></#{name}>').root"
292
- classx << " super(node, id: id, objects: objects)"
293
-
294
- classx << " a = node.xpath('summary/*',&:name)"
295
- classx << " yaml_fields = a - (#{fields} + %w(format_mask))"
296
- classx << "yaml_fields.each do |field|"
297
- classx << %q( "def self.#{field})
298
- classx << %q( s = @node.element('summary/#{field}/text()'))
299
- classx << %q( s[/^---/] ? YAML.load(s) : s)
300
- classx << %q( end")
301
- classx << "end"
302
-
303
- classx << "@fields = %i(#{fields.join(' ')})"
304
- classx << "@create = PolyrexCreateObject.new('#{@schema[/\/(.*)/,1]}', id: '#{@id}')"
305
- classx << "end"
306
-
307
- fields.each do |field|
308
- classx << "def #{field}"
309
- classx << " if @node.element('summary/#{field}').nil? then"
310
- classx << " @node.element('summary').add Rexle::Element.new('#{field}')"
311
- classx << " end"
312
- classx << " node = @node.element('summary/#{field}/text()')"
313
- classx << " node ? node.clone : ''"
314
- classx << "end"
315
- classx << "def #{field}=(text)"
316
- classx << " if @node.element('summary/#{field}').nil? then"
317
- classx << " @node.element('summary').add Rexle::Element.new('#{field}', value: text)"
318
- classx << " else"
319
- classx << " @node.element('summary/#{field}').text = text"
320
- classx << " end"
321
- classx << "end"
322
- end
323
267
 
324
- classx << "end"
325
-
326
- eval classx.join("\n")
327
- end
268
+ def to_h
269
+ @classes
328
270
  end
329
271
 
330
- def make_def_records(class_name, i=0)
331
-
332
- eval "#{class_name}.class_eval {
333
- def records()
334
-
335
- classes = {#{@class_names.map{|x| %Q(%s: %s) % [x[/[^:]+$/].downcase,x]}.join(',')} }
336
-
337
- objects = @node.xpath('records/*').map do |record|
338
- classes[record.name.to_sym].new(record, id: '#{@@id}')
339
- end
340
-
341
- def objects.records=(node); @node = node; end
342
- def objects.records(); @node; end
343
-
344
- def objects.sort_by!(&element_blk)
345
- a = @node.xpath('records/*').sort_by &element_blk
346
- records = @node.xpath('records')
347
- records.delete
348
- records = Rexle::Element.new 'records'
349
- a.each {|record| records.add record}
350
- @node.add records
351
- @node.xpath('records/*').map {|record| #{@class_names[i]}.new(record)}
352
- end
353
-
354
- objects.records = @node
355
-
356
- def objects.remove_all()
357
- e = @node.element('records')
358
- e.insert_before Rexle::Element.new('records')
359
- e.delete
360
- end
361
-
362
- objects
363
- end
364
-
365
- alias #{@class_names[i].downcase} records
366
-
367
- }"
368
-
272
+ def to_a
273
+ @classes.to_a
369
274
  end
370
-
371
-
372
-
373
275
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyrex-objects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.8
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,28 +10,27 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
- YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
- 8ixkARkWAmV1MB4XDTE2MDkxOTE0MjE1MVoXDTE3MDkxOTE0MjE1MVowSDESMBAG
16
- A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
- EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
- ggEBAMVBwxta9lcbi5Knax5F2M5wmzEaMpIBWtmhCVncFWkE6/I9t7nIwgXGXxie
19
- sG8hvFYCTmvP16jjHF4N9onSXSxmfRG+KfVegD98WY9Mwpn4LrzfmptP0jkknySS
20
- 3RXBVyvhuIdV/Y1fqTUfoCwmOzj+5shIq0ITYDK1ps3cbj54Q9pcqfAsMSA3X0ji
21
- z+W5OgD6VHgQSPgtnhEnaenTYWPOwXJC2PPzlyToR2RIma+4GD/elpXtlfta130D
22
- 98ZSyNMGv49j90rYC2bcLaufd0iv1TZr3qTHCWPantpAKLbuaZcAreT/9xpOzCNX
23
- ZucWCsC2bYfR6it7l3W3esMAwyUCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
- DwQEAwIEsDAdBgNVHQ4EFgQUVKQOcV8R19bHs8Ssu6oudV720akwJgYDVR0RBB8w
25
- HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAfuynl6sE
27
- moDCwW1vVh3v+gjThrAbrxdwZonbw9hSvOCcetaxm3CqrpLlLcTwoG8bbejXc//f
28
- oQ62xVA9R6xaLYR90XyEo/KjMl194mr1x0kfMhDX9OdAOPUgvQosr2UsNsxk3Qqe
29
- 28jXhYkFFuHDncZGzXP/hqZgDpDUQiIuRbKzaBbJrTMBQq5zz5QH0IVsMQdB4mLF
30
- PVHqVku7CAVFCfSOCdmP9gjcOGejaOORiCbvlO3eS15zXtAUhU8Q9z/Bj1TQIvWm
31
- oXSdIUkeIE8xMnBo9hsYRTxYptr4zHbWPTQqtm/3qYXr4Fcsmov4E7uE/IPqzajB
32
- s9lI00OyqNZ3ww==
13
+ MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwMzI5MjIyMjM4WhcN
15
+ MTkwMzI5MjIyMjM4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2IJ/P
17
+ FkDr7HIhebYeCG4rgWoPCdyYEa/PimPVzStI57EMrQXoxpNKrd+B6B8utB3wDJO9
18
+ SedSqfQMDcToKtbf93uqTdB5+uD3jd20zu77T0aO6Zh6ZiVBumyVhah1DAPltdy0
19
+ 2LiVR1wRFGLw1+cXYr4zCbN0QPOf7Y/d62Nozr4yNFWcz8fPnX9jFgEYXe3u6Jz5
20
+ fR4xJ2fP/j1OwpDf6ZvxuzYB6MuYRwaO1gBss5HP2BMu3XNhYMLM/c0ol5GIzSgi
21
+ d50IxhHZ50oaNv3iUKa0Sm57uoXwKKbED0Ngr06R34jdZ47+I30lY99Srnizid2o
22
+ q2o5eA0j21eTiY/JAgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
+ HQYDVR0OBBYEFDHTcDlJHSGUxHRByi2TUwXDTk1xMCYGA1UdEQQfMB2BG2dlbW1h
24
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTAmBgNVHRIEHzAdgRtnZW1tYXN0ZXJAamFt
25
+ ZXNyb2JlcnRzb24uZXUwDQYJKoZIhvcNAQEFBQADggEBADy14YRcdKLPPHPaY062
26
+ /BX61dSbO7EDW0e3S06K0mC2vz/GgB4EAy7InOugbEiruN+b9d2easbxxOADoRD3
27
+ L6lL0ueVRJjEScdVRDKHbf/GDctXe1dVTK1Tg8LaMcwp+HAQTtd83eZi6sxrw5xK
28
+ 9ERjlZVvXcNHuz9jWHUHj7HbYOS9vryaLbD+S9G72VPj/n1F/eAnUpnvZdqE/kxM
29
+ Ub/kjgBxH7GEfO1fPRZxK1+xOKc7oVr7y4Hpxm1+AVC6OpMCbn+5QTG1VrzSgPxb
30
+ ACBQhlVD3BfBw9Dgn9grd+SUOEmogOVDxNTXoL3fdgzYlSbv9YnK3csMPjzbMR6y
31
+ 3O0=
33
32
  -----END CERTIFICATE-----
34
- date: 2016-11-25 00:00:00.000000000 Z
33
+ date: 2018-03-29 00:00:00.000000000 Z
35
34
  dependencies:
36
35
  - !ruby/object:Gem::Dependency
37
36
  name: polyrex-createobject
@@ -39,22 +38,22 @@ dependencies:
39
38
  requirements:
40
39
  - - "~>"
41
40
  - !ruby/object:Gem::Version
42
- version: '0.6'
41
+ version: '0.7'
43
42
  - - ">="
44
43
  - !ruby/object:Gem::Version
45
- version: 0.6.0
44
+ version: 0.7.0
46
45
  type: :runtime
47
46
  prerelease: false
48
47
  version_requirements: !ruby/object:Gem::Requirement
49
48
  requirements:
50
49
  - - "~>"
51
50
  - !ruby/object:Gem::Version
52
- version: '0.6'
51
+ version: '0.7'
53
52
  - - ">="
54
53
  - !ruby/object:Gem::Version
55
- version: 0.6.0
54
+ version: 0.7.0
56
55
  description:
57
- email: james@r0bertson.co.uk
56
+ email: james@jamesrobertson.eu
58
57
  executables: []
59
58
  extensions: []
60
59
  extra_rdoc_files: []
@@ -80,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
79
  version: '0'
81
80
  requirements: []
82
81
  rubyforge_project:
83
- rubygems_version: 2.5.1
82
+ rubygems_version: 2.6.13
84
83
  signing_key:
85
84
  specification_version: 4
86
85
  summary: Polyrex-objects automically builds objects from a Polyrex schema
metadata.gz.sig CHANGED
@@ -1 +1 @@
1
- ��8��Ag���.f�0$��~�rW Nh�;�{=��{�@���S��
1
+ P7�M[�1�F����O�vp5�5& ���J�|�/��r��|�@n7ٞ�w�W΅ߜy��+��3X�qˮKPZmwY 5����Iq)�]�fiU� �"�B곿�Z�\X��qdW��+�k �d��=Μ)����גy�����'>���HT�F5RE<�����z��4oVĵ��pߪ񟴁���!�&9�f�Xo��<7g϶�SN��})����㪁&��ۑsڊU�W+o��ʌJ�;�y