rexle-builder 1.0.2 → 1.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 173cd08ae892bc695eba952bfbe63fc021ef7a3fd0241b399e36cff7a8c1b5c8
4
- data.tar.gz: 2e31849b636155a8251e1a2a06620f33b1b868a7fc1d90cca981619a76041f9b
3
+ metadata.gz: ff62c53e5a7dd2775aa78650ebdc6bafeec01f666af4c0f88cd4ea85ddc407d2
4
+ data.tar.gz: b2b64bb339c75f2082d3be69675c4e9bf871df5a4b2d0aaf1dca4c2a1fe1c9c7
5
5
  SHA512:
6
- metadata.gz: b16a7f83b82355b14e61f320a4f032ffa29697fe6850b386490754da64a1cf19eced22b92c49deba892ed1bcd616978065ce0f27e0c342b2e4f0f10bc468152f
7
- data.tar.gz: 75ea0138a555d42c640f94fe7600f8e0970e2e0ba58760a36af1cdcf17479fb33108decbee4a6fae604541a674755dace8c0493c711e794bc0cff507ed1841c4
6
+ metadata.gz: bd689817a5975e66798398cfb361dba7d25cef704c97078c4a23f00b8cfb1fd6915172a809cc692bf7b3983372bbb9c722bb870bc2d2e6382f35736cb1ade03b
7
+ data.tar.gz: 47707186dbe3b2bf49b26418f2c44a0ad30dfd3bee5c5814a36e21d2956355b7e18016330ce77b80271f10efeb608153f67b7bf4339cd64ba33a99d8f356e061
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/rexle-builder.rb CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  class RexleArray < Array
7
-
7
+
8
8
  def initialize(raw_a)
9
9
  a = raw_a.first.is_a?(Array) ? raw_a : [raw_a]
10
10
  super(a)
@@ -19,20 +19,20 @@ class RexleBuilder
19
19
  yield(self.new(debug: debug))
20
20
 
21
21
  end
22
-
22
+
23
23
  def initialize(obj=nil, root: 'root', debug: false)
24
-
24
+
25
25
  @debug = debug
26
26
  @a = []
27
27
  @current_a = @a
28
28
  @namespace = nil
29
-
29
+
30
30
  if obj.is_a? Hash then
31
-
32
- key = obj.keys.first
33
-
31
+
32
+ key = obj.keys.first
33
+
34
34
  if obj.length > 1 or obj[key].is_a?(Array) or obj[key].is_a?(String) then
35
- self.send(root.to_sym) { buildx obj}
35
+ self.send(root.to_sym) { buildx obj}
36
36
  else
37
37
  self.send(key.to_sym) {buildx obj[key]}
38
38
  end
@@ -50,91 +50,135 @@ class RexleBuilder
50
50
  end
51
51
 
52
52
  def method_missing(sym, *args)
53
-
53
+
54
54
  puts 'args: ' + args.inspect if @debug
55
-
55
+
56
56
  value = args.find {|x| x.is_a? String} || ''
57
57
  attributes, obj = args.select {|x| x.is_a? Hash}
58
-
59
- # The obj is an optional Hash object used to build nested XML
58
+
59
+ # The obj is an optional Hash object used to build nested XML
60
60
  # after the current element
61
-
61
+
62
62
  if value =~ /^<.*>$/ then
63
-
63
+
64
64
  a = [
65
- sym.to_s,
66
- attributes,
65
+ sym.to_s,
66
+ attributes,
67
67
  *Rexle.new("<root>%s</root>" % value, debug: @debug).to_a[2..-1]
68
68
  ]
69
-
69
+
70
70
  end
71
-
71
+
72
+
73
+ # reserved keywords are masked with ._ e.g. ._method_missing
74
+ a ||= [sym.to_s.sub(/^(?:\._|_)/,'').sub(/^cdata!$/,'![')\
75
+ .sub(/^comment!$/, '!-'), attributes || {}, value || '']
72
76
  if @debug then
73
77
  puts 'sym: ' + sym.inspect
74
78
  puts 'args: ' + args.inspect
79
+ puts 'obj: ' + obj.inspect
80
+ puts 'a: ' + a.inspect
75
81
  end
76
-
77
- # reserved keywords are masked with ._ e.g. ._method_missing
78
- a ||= [sym.to_s.sub(/^(?:\._|_)/,'').sub(/^cdata!$/,'![')\
79
- .sub(/^comment!$/, '!-'), attributes || {}, value || '']
80
-
82
+
81
83
  a.concat RexleBuilder.new(obj, debug: false).to_a[3..-1] if obj
82
84
 
83
- if @namespace then
85
+ if @namespace then
84
86
  a.first.prepend(@namespace + ':')
85
- @namespace = nil
87
+ @namespace = nil
86
88
  end
87
89
 
88
90
  @current_a << a
89
-
91
+ puts '@current_a, before block_given : ' + @current_a.inspect if @debug
92
+
90
93
  if block_given? then
91
-
94
+
92
95
  prev_a = @current_a
93
96
  @current_a = a
94
-
95
- r = yield()
96
-
97
- @current_a.concat r if r.class == RexleArray
98
- @current_a = prev_a
99
-
97
+
98
+ r = yield()
99
+
100
+ if @debug then
101
+ puts 'r: ' + r.inspect
102
+ puts 'r.class: ' + r.class.inspect
103
+ end
104
+
105
+ return r if r == @a.first
106
+
107
+ if r.is_a? Array then
108
+
109
+ # only concat if r contains raw Rexle elements.
110
+ if r.all? {|field, attributes, value| attributes.is_a? Hash} then
111
+ @current_a.concat r
112
+ end
113
+
114
+ end
115
+ puts '@current_a ' + @current_a.inspect if @debug
116
+ @current_a = prev_a
117
+ return @a.first
118
+
100
119
  end
101
-
102
- @a.first
120
+
121
+ #@a.first
122
+ nil
103
123
  end
104
-
124
+
105
125
  private
106
-
126
+
107
127
  # build from a Hash object
108
128
  #
109
129
  def buildx( h)
110
130
 
111
- h.each_pair do |key, value|
131
+ puts 'buildx: ' + h.inspect if @debug
132
+ # the following statement prevents duplicate elements where 1 key is
133
+ # represented by a String and the other by a symbol.
134
+ #
135
+ h2 = h.map {|x| [x[0].to_sym, x[1]]}.to_h
136
+
137
+ h2.each_pair do |key, value|
112
138
 
113
139
  if value.is_a? Hash then
114
-
115
- self.send(key.to_sym) do
140
+ puts 'buildx found Hash' + value.inspect if @debug
141
+ self.send(key.to_sym) do
116
142
  buildx value
143
+ nil
117
144
  end
118
-
119
- elsif value.is_a? Array
120
-
145
+
146
+ elsif value.is_a?(Array) and value.first.is_a? Hash
147
+
148
+ puts 'buildx found Array' + value.inspect if @debug
149
+ puts 'key:' + key.inspect if @debug
150
+
121
151
  self.send(key.to_sym) do
122
-
123
- if value.first.is_a? Hash then
124
- value.map {|x| buildx x}
125
- else
126
- RexleArray.new value
152
+
153
+ r2= []
154
+ value.each do |x|
155
+
156
+ if x.is_a? Hash then
157
+ puts 'x:' + x.inspect if @debug
158
+ buildx x
159
+ nil
160
+ else
161
+ puts 'x2:' + x.inspect if @debug
162
+ r2 << x
163
+ end
164
+
127
165
  end
128
-
166
+
167
+ r2
129
168
  end
130
-
169
+
131
170
  else
132
-
133
- self.send(key.to_sym, value.to_s)
134
-
171
+
172
+ puts 'buildx found other' + value.inspect if @debug
173
+ if value.is_a? String then
174
+ self.send(key.to_sym, value.to_s)
175
+ else
176
+ self.send(key.to_sym) {[value]}
177
+ end
178
+
135
179
  end
136
180
  end
137
181
 
138
- end
182
+ end
139
183
 
140
184
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rexle-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,35 +10,36 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwNTAxMTgyMTU4WhcN
15
- MjEwNTAxMTgyMTU4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDXvcGF
17
- KAsFoSJW5WibJ3BCxoe5RyUNGARFsSo+Y755n9YmTEoL9jCNkxHCyZAPJSXeZJlV
18
- jM1LqYD6n9MW73o0B7vy9Rq1n49cWIliXYrkIvhLlS7qviVg+ij8/o36LVeK4/4d
19
- Z5d+jRyr6tovVn6Hlqs8qoMdI4lOj1f3yb2kFhbkW2Zx/O+4TMFvQT5/pc0/JcMM
20
- b4SjzEZ8/aamSpjBNCIfML4pu2NNIaD/Zt8fLAa8kXGxCG47YP1rrnPuggz5YaOh
21
- 0AgC4f2EKjfBqGcmgQ4QHOZ4GLf5pLPdILZk6dwCE6nwg3MLR+KDzuoHOppbzgpi
22
- bHBVJ2mJczOpK4b1GQ0h8fb5HzJtFUrw6iRBwiPTKtbrh9x2QHS+npbKLbDdpjvL
23
- b4u1krO1KazyhveIvcdScQ9+UbW5DxwYABoQ2VyRDplBn5c6+FTgSi5visvrrJTv
24
- oqG6wLRxiTU9KRN24d7yEO0jrZf4PvCCLEAs/OnNzvJphQ2UgECBSstkjxkCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUjwkszDfc
26
- EtAc5VTBGeONI5ddrI8wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
- c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAWAyU3Ht4sJy3dsUJ0EZTRTyamnWQk2p0Rb1SqqHp
29
- 2wM2KLZVluuyM5kQ9IsI4UCtB4C6uvFu9P4JX9dWF6JTU0UQKvsgbPH1i+7sXUUf
30
- gnBfsdfqWmmYU0y+m05DYgTYOOTPBY7nhM1Ms5zrkHfw7MdddTMIhPw/kuyqRHc6
31
- vP8mNUJD2sr4untuOFdOBrFVcjylY8IHTR/aVINbQOh53r1TD8ATROvB9MEaHbEQ
32
- LLr+c9+ti0wCZiHwd0o5jZBrH4hDrybFR9Dx61GZrLwaoDorq/nKnaIHikVGAUMX
33
- 7zfbefTm9GvWrDQTjESHOfLVzjvcVR3/lLdDy914oSbA3+v9a2xsyZzVXKYADidr
34
- LxGza+bzBCYgXoht0vSUR82d8uH+YdngvcK99G+3T8W53ikFDF2wS0l57yF9jfks
35
- rC7AiWdayhS+wLWd/i/UtpYL25JcgKdaq24E/7+vB1EPRzPsDJrx8AzYo759WDob
36
- o0Nd2o91GHfpqyL9snw6G3Dl
13
+ MIIEljCCAv6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTIyMDcyNDE5NTI0N1oXDTIzMDcyNDE5NTI0N1owSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoC
18
+ ggGBAPcD/W+g9XKq4ugEgFrJ0o3aMpOPQPMMTQYMqPdadoRFsCqj32619ryDKWrr
19
+ 5U1T3cf/I9Y/6Qh8sKKbdmqX8+H/hd5YgppWnPRjcThEAiR04Cek9MGH0I4qgztB
20
+ dNaanZNqeFWj3gPuAJq27wzOyPAzltnCeG2BW9hF6ZnDytfXFCv29Mtjhd+ZnLYu
21
+ /vCl7BVB8STrDEFz0IUACWZpBI7kfnKOiwUf97Akx24qWu8sVYovoxl5IwssG4Zb
22
+ Y3SYJRnMt+VpDj0NfMEJ3z6gsz+71dUrGfJgzra3xASpZfO1UnsJ2Y6r+CClFOkt
23
+ 2jSW3h/Dj1SPDXcxD8yA0VqA90Rf5c4tBUPgrHb3UHoXCFWMRRAfeBIhGKnjHk1p
24
+ UYhzIyzGPpTxFezsbqo19VsCGH+Fdix7s5x6U7GaCwNGtQQ/4ff1QEsxDgu30p2O
25
+ fE+bU0vLiPflUeMIekE7joRJsaMLIfU7L4WAdJDnlzW9FGG2diB/vJLvdG2HBt4F
26
+ weFa+QIDAQABo4GKMIGHMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
27
+ BBTf/hyUVRBhiJnLyS9ixjhp7e2dejAmBgNVHREEHzAdgRtnZW1tYXN0ZXJAamFt
28
+ ZXNyb2JlcnRzb24uZXUwJgYDVR0SBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
29
+ c29uLmV1MA0GCSqGSIb3DQEBCwUAA4IBgQANTkbRlCnyKnC93YfSYYZZIY2yG3w4
30
+ aMC5NdlJbJKqNS5iFJFGzQmQFh64qphNYS/ER71XjeUcpQmL3G8CStlE2/Pgmw3q
31
+ AxGZQicTWSz7oZy0YWeAXiHu+Z+H5N9ar7r6cbN7e1X7100rXJOIoRbV30/7X2nd
32
+ oqq/CmaXtg5Tbr+pV461riwkEd+zq98EhVw8Mud0YOZ7QBGY1i1xK6DpTLWgzsiI
33
+ dCDj3IztA2K8hUJpP5aNw5nAGcLc/FxxGDySI2cQc+fDsM6RfFjch8EUd125yvRe
34
+ ab0Xx0Rsvj2/Z63HLArC6rESIzZVpt4FAOBlCzOtMJEC9SMBMM7+sbMbwRxoTCKj
35
+ VmHj3sRQB3mQj4qN3dd241Ea4y2eTa/mML8gvkx84jAYr/nmQc8tRV64bnp2G01a
36
+ w7Z+7EzJFzhHpXYm4QBYR+qb81pB/ZX0LWtVs/2jjCWoCOOdIuH/jh+DzQk4Qhby
37
+ R02xW5SGXEOiylE3Q9SDqGfvomcQ8ENDYts=
37
38
  -----END CERTIFICATE-----
38
- date: 2020-06-22 00:00:00.000000000 Z
39
+ date: 2022-07-31 00:00:00.000000000 Z
39
40
  dependencies: []
40
41
  description:
41
- email: james@jamesrobertson.eu
42
+ email: digital.robertson@gmail.com
42
43
  executables: []
43
44
  extensions: []
44
45
  extra_rdoc_files: []
@@ -63,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  - !ruby/object:Gem::Version
64
65
  version: '0'
65
66
  requirements: []
66
- rubygems_version: 3.0.3
67
+ rubygems_version: 3.3.7
67
68
  signing_key:
68
69
  specification_version: 4
69
70
  summary: Generates XML, by producing an array of raw XML elements which can parsed
metadata.gz.sig CHANGED
Binary file