xml-registry 0.6.0 → 0.8.0
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/xml-registry.rb +65 -62
- data.tar.gz.sig +0 -0
- metadata +30 -31
- 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: 280ac5c817560aa72e83c93eabf4358d1a169781717442b7b4e2c7ee95ca1ec0
|
4
|
+
data.tar.gz: 0a8a32baea55901636b3a28ef6b585393883f4717107b17af84a46365a0c8658
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af319f07195089806be005eb10b42267e359a65c6f668ccda8ba618b3b36019c433abede751bf10e5d7dadfdb1c3719309538db765bb56c1e7933fc528f42a56
|
7
|
+
data.tar.gz: a5bddd352a8865dc253cda635dde28a6ba8b66c1ad094c9b2cf5368bb1e74b32164cc8c7e2e9240be7e4e9f25d047a5ffcf1d1ed395ba748dbdf2498a376aca2
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/xml-registry.rb
CHANGED
@@ -2,32 +2,35 @@
|
|
2
2
|
|
3
3
|
# file: xml-registry.rb
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
require 'rexle'
|
6
|
+
require 'kvx'
|
7
|
+
require 'ostruct'
|
7
8
|
require 'simple-config'
|
9
|
+
require 'rxfreadwrite'
|
8
10
|
|
9
11
|
|
10
12
|
module NumberCheck
|
11
|
-
|
13
|
+
|
12
14
|
refine String do
|
13
|
-
|
15
|
+
|
14
16
|
def is_number?
|
15
17
|
self.to_i.to_s == self
|
16
18
|
end
|
17
|
-
|
19
|
+
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
23
|
class XMLRegistry
|
22
24
|
using NumberCheck
|
25
|
+
include RXFReadWriteModule
|
23
26
|
|
24
27
|
attr_reader :doc
|
25
|
-
|
28
|
+
|
26
29
|
def initialize(template = '<root></root>', debug: false)
|
27
|
-
|
30
|
+
|
28
31
|
@debug = debug
|
29
32
|
super()
|
30
|
-
@template, _ =
|
33
|
+
@template, _ = RXFReader.read(template)
|
31
34
|
@doc = Rexle.new(@template)
|
32
35
|
end
|
33
36
|
|
@@ -49,21 +52,21 @@ class XMLRegistry
|
|
49
52
|
# if the 1st element doesn't exist create it
|
50
53
|
e = path.split('/',2).first
|
51
54
|
@doc.root.add_element Rexle::Element.new(e) unless @doc.root.element e
|
52
|
-
create_path = find_path(path)
|
55
|
+
create_path = find_path(path)
|
53
56
|
|
54
57
|
if not create_path.empty? then
|
55
58
|
parent_path = (path.split('/') - create_path.reverse).join('/')
|
56
59
|
key_builder(parent_path, create_path)
|
57
60
|
end
|
58
|
-
|
59
|
-
add_value(path, value)
|
61
|
+
|
62
|
+
add_value(path, value)
|
60
63
|
end
|
61
64
|
|
62
65
|
def []=(path, val)
|
63
66
|
s = path.split('/').map {|x| x[0].is_number? ? x.prepend('x') : x}.join '/'
|
64
67
|
self.set_key(s, val)
|
65
68
|
end
|
66
|
-
|
69
|
+
|
67
70
|
# get the key value by passing the path
|
68
71
|
# example: get_key('app/gtd/funday').value #=> 'friday'
|
69
72
|
#
|
@@ -73,13 +76,13 @@ class XMLRegistry
|
|
73
76
|
|
74
77
|
key = @doc.root.element path
|
75
78
|
raise ("xml-registry: key %s not found" % path) unless key
|
76
|
-
|
77
|
-
key.instance_eval {
|
78
|
-
@path = path
|
79
|
+
|
80
|
+
key.instance_eval {
|
81
|
+
@path = path
|
79
82
|
|
80
83
|
def to_h(e)
|
81
84
|
|
82
|
-
v = if e.has_elements? then
|
85
|
+
v = if e.has_elements? then
|
83
86
|
e.elements.inject({}) do |r, x|
|
84
87
|
r.merge to_h(x)
|
85
88
|
end
|
@@ -88,24 +91,24 @@ class XMLRegistry
|
|
88
91
|
end
|
89
92
|
|
90
93
|
{e.name => v}
|
91
|
-
end
|
92
|
-
|
93
|
-
def to_config()
|
94
|
+
end
|
95
|
+
|
96
|
+
def to_config()
|
94
97
|
SimpleConfig.new(to_h(self), attributes: {key: @path})
|
95
|
-
end
|
96
|
-
|
97
|
-
def to_kvx()
|
98
|
+
end
|
99
|
+
|
100
|
+
def to_kvx()
|
98
101
|
Kvx.new(to_h(self), attributes: {key: @path})
|
99
|
-
end
|
100
|
-
|
102
|
+
end
|
103
|
+
|
101
104
|
def to_os()
|
102
105
|
OpenStruct.new(to_h(self).first.last)
|
103
106
|
end
|
104
107
|
}
|
105
|
-
|
108
|
+
|
106
109
|
key
|
107
110
|
end
|
108
|
-
|
111
|
+
|
109
112
|
# get several keys using a Rexle XPath
|
110
113
|
# example: get_keys('//funday') #=> [<funday>tuesday</funday>,<funday>friday</funday>]
|
111
114
|
#
|
@@ -113,7 +116,7 @@ class XMLRegistry
|
|
113
116
|
#
|
114
117
|
def get_keys(path)
|
115
118
|
@doc.root.xpath(path)
|
116
|
-
end
|
119
|
+
end
|
117
120
|
|
118
121
|
def [](path)
|
119
122
|
s = path.split('/').map {|x| x.is_number? ? x.prepend('x') : x}.join '/'
|
@@ -125,7 +128,7 @@ class XMLRegistry
|
|
125
128
|
#
|
126
129
|
#
|
127
130
|
def delete_key(path)
|
128
|
-
@doc.root.delete path
|
131
|
+
@doc.root.delete path
|
129
132
|
end
|
130
133
|
|
131
134
|
# return the registry as an XML document
|
@@ -136,22 +139,22 @@ class XMLRegistry
|
|
136
139
|
end
|
137
140
|
|
138
141
|
alias :display_xml :to_xml
|
139
|
-
|
142
|
+
|
140
143
|
def xml(options={})
|
141
144
|
@doc.root.xml options
|
142
|
-
end
|
145
|
+
end
|
143
146
|
|
144
147
|
# load a new registry xml document replacing the existing registry
|
145
148
|
#
|
146
|
-
def load_xml(s='')
|
147
|
-
@doc = Rexle.new(
|
149
|
+
def load_xml(s='')
|
150
|
+
@doc = Rexle.new(RXFReader.read(s)[0].force_encoding("UTF-8"))
|
148
151
|
self
|
149
152
|
end
|
150
153
|
|
151
154
|
# save the registry to the specified file path
|
152
155
|
#
|
153
156
|
def save(s)
|
154
|
-
|
157
|
+
FileX.write s, @doc.xml(pretty: true)
|
155
158
|
end
|
156
159
|
|
157
160
|
# import a registry hive from a string in registry format
|
@@ -168,70 +171,70 @@ class XMLRegistry
|
|
168
171
|
#"pin-no"="4321"
|
169
172
|
#REG
|
170
173
|
#
|
171
|
-
#reg = XMLRegistry.new
|
172
|
-
#reg.import s
|
174
|
+
#reg = XMLRegistry.new
|
175
|
+
#reg.import s
|
173
176
|
#
|
174
|
-
def import(s)
|
175
|
-
|
176
|
-
r =
|
177
|
+
def import(s)
|
178
|
+
|
179
|
+
r = RXFReader.read(s)
|
177
180
|
reg_buffer = r.first
|
178
181
|
raise "read file error" unless reg_buffer
|
179
182
|
|
180
183
|
if reg_buffer.strip[/^\[/] then
|
181
184
|
|
182
|
-
reg_items = reg_buffer.gsub(/\n/,'').split(/(?=\[.[^\]]+\])/).map do |x|
|
185
|
+
reg_items = reg_buffer.gsub(/\n/,'').split(/(?=\[.[^\]]+\])/).map do |x|
|
183
186
|
[x[/^\[(.[^\]]+)\]/,1], Hash[*($').scan(/"([^"]+)"="(.[^"]*)"/).flatten]]
|
184
187
|
end
|
185
|
-
|
186
|
-
elsif reg_buffer.strip.lines.grep(/^\s+\w/).any?
|
188
|
+
|
189
|
+
elsif reg_buffer.strip.lines.grep(/^\s+\w/).any?
|
187
190
|
|
188
191
|
puts 'hierachical import' if @debug
|
189
192
|
doc = LineTree.new(reg_buffer).to_doc
|
190
|
-
|
193
|
+
|
191
194
|
reg_items = []
|
192
|
-
|
195
|
+
|
193
196
|
doc.root.each_recursive do |e|
|
194
|
-
|
197
|
+
|
195
198
|
puts 'e: ' + e.inspect if @debug
|
196
199
|
if e.is_a?(Rexle::Element) and e.children.length < 2 then
|
197
|
-
|
200
|
+
|
198
201
|
reg_items << [e.backtrack.to_xpath.sub(/^root\//,'')\
|
199
202
|
.sub(/\/[^\/]+$/,''), {e.name => e.text }]
|
200
|
-
|
203
|
+
|
201
204
|
end
|
202
|
-
|
203
|
-
end
|
204
|
-
|
205
|
+
|
206
|
+
end
|
207
|
+
|
205
208
|
else
|
206
209
|
|
207
210
|
reg_items = reg_buffer.split(/(?=^[^:]+$)/).map do |raw_section|
|
208
211
|
|
209
212
|
lines = raw_section.lines.to_a
|
210
213
|
next if lines.first.strip.empty?
|
211
|
-
path = lines.shift.
|
214
|
+
path = lines.shift.rstrip
|
212
215
|
[path, Hash[lines.map{|x| x.split(':',2).map(&:strip)}]]
|
213
216
|
end
|
214
|
-
|
217
|
+
|
215
218
|
reg_items.compact!
|
216
|
-
|
219
|
+
|
217
220
|
end
|
218
221
|
|
219
222
|
puts 'reg_items: ' + reg_items.inspect if @debug
|
220
223
|
reg_items.each do |path, items|
|
221
224
|
items.each {|k,value| self.set_key("%s/%s" % [path,k], value)}
|
222
225
|
end
|
223
|
-
|
226
|
+
|
224
227
|
:import
|
225
228
|
end
|
226
229
|
|
227
|
-
# Export the registry to file if the filepath is specified. Regardless,
|
228
|
-
# the registry will be returned as a string in the registry
|
230
|
+
# Export the registry to file if the filepath is specified. Regardless,
|
231
|
+
# the registry will be returned as a string in the registry
|
229
232
|
# export format.
|
230
233
|
#
|
231
234
|
def export(s=nil)
|
232
235
|
reg = print_scan(@doc.root).join("\n")
|
233
236
|
# jr 250118 File.open(s){|f| f.write reg} if s
|
234
|
-
|
237
|
+
FileX.write(s, reg) if s
|
235
238
|
reg
|
236
239
|
end
|
237
240
|
|
@@ -267,21 +270,21 @@ class XMLRegistry
|
|
267
270
|
|
268
271
|
def print_scan(node, parent=[])
|
269
272
|
out = []
|
270
|
-
parent << node.name
|
273
|
+
parent << node.name
|
271
274
|
items = []
|
272
275
|
|
273
276
|
node.elements.each do |e|
|
274
277
|
if e.has_elements? then
|
275
|
-
out << print_scan(e, parent.clone)
|
278
|
+
out << print_scan(e, parent.clone)
|
276
279
|
else
|
277
280
|
items << [e.name, e.text]
|
278
281
|
end
|
279
|
-
end
|
282
|
+
end
|
280
283
|
if parent.length > 1 and items.length > 0 then
|
281
|
-
out << "[%s]\n%s\n" % [parent[1..-1].join("/"),
|
282
|
-
items.map {|x| "\"%s\"=\"%s\"" % x}.join("\n")]
|
284
|
+
out << "[%s]\n%s\n" % [parent[1..-1].join("/"),
|
285
|
+
items.map {|x| "\"%s\"=\"%s\"" % x}.join("\n")]
|
283
286
|
end
|
284
|
-
out
|
287
|
+
out
|
285
288
|
end
|
286
289
|
|
287
290
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xml-registry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -11,31 +11,31 @@ cert_chain:
|
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
13
|
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwMjE2MTgwNzIwWhcN
|
15
|
+
MjMwMjE2MTgwNzIwWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCv4BVt
|
17
|
+
KmxkdjLW52PT4ZpVyDRfU5n/5KT/SUpKglcEix9tF6khOYvkMv1p/vLIdDliIJUD
|
18
|
+
q+VsQ+2sSn59ueuP9Cp3O3ccgPfC6+gKR/biRSsxwgH4+bik77520XkroRR6bz2c
|
19
|
+
Zj1D1y2iE8TJ15LL25wumPkr6qL9eEL7TnrS+kGTRHbTC3IphSHDuryJlevTcNa4
|
20
|
+
F7dgNiAA5rsSWoqwnu+Em3zvcP5eb/+s0EhXIpccMXskztj0tZyXdH79HFGrtNwF
|
21
|
+
UygeIsPRnQrD0JQBGFxsNrWJdayqQGRnrISTvcMqE3HpRnPPIesliGFK/ykxcPJa
|
22
|
+
Pz+RfQPug9TI83zu/jDjBtITm5pLzRSCgwljUFy1JbnL6M0YYqTTbbr3GjwOBWJI
|
23
|
+
cpjB/njMf4CYsDI+SSd8POLdfSjGIeJt306JG9pJb+nKSuQ8V/omEXiKBOyxn510
|
24
|
+
81gTyE55i5SLFewxgfK6L22A3Ld3OVQbv9LgK25Np1xQm5mzQaVlgXWAuMcCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUZm0OEWeE
|
26
|
+
ugAXkDkxz1rhI3H97jswJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
27
|
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEAlxjvjTEJuVVf7sNEtVkj2iPnmMYboSAdwt6vzQdR
|
29
|
+
kdwTQwbS83bzwtgMva+34LZYD1Rukfo8TlKi8jspSd6vMnU1KNicsiMphKgjPFZ/
|
30
|
+
IQOF/zOcQevEmPeis9/I8q8krX4515jaQAy/B1umRAAaBZ5HaG6RP//RfgFXiP7N
|
31
|
+
O+o7cMXuG5mtSBZiDsWFJbnm/jxYxsu2/KP0nptKacfGYuJ1AhbzbXcIuBDQPPds
|
32
|
+
iLOmzi+BcvbB5CS3COOQ3/ZfxXlpeq+SXZMd0tMuSXAi+iMQxR+L/siByoDXKzPw
|
33
|
+
7ipnNUzjevQz/sMYRKQIGsIn6AkJc34WtKQMxFKXvgeHlfkEinrviwxHm4dSh3Hi
|
34
|
+
ye5NuslP3b2U0cAcVuw3vXAufZEezb0TGxNQUFio52UGCFfj371cxj4u7VNnB55q
|
35
|
+
qQ7EyBaXak1o/nkw5pybDKSbUjVOvQpzjla62Xe4FzHerw4+UYRKyq6OjeDckoJD
|
36
|
+
qwMwsoB0WJMRTqSZ4g1aEmfr
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2022-02-22 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: simple-config
|
@@ -43,22 +43,22 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '0.
|
46
|
+
version: '0.7'
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.
|
49
|
+
version: 0.7.2
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '0.
|
56
|
+
version: '0.7'
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.
|
59
|
+
version: 0.7.2
|
60
60
|
description:
|
61
|
-
email:
|
61
|
+
email: digital.robertson@gmail.com
|
62
62
|
executables: []
|
63
63
|
extensions: []
|
64
64
|
extra_rdoc_files: []
|
@@ -83,8 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
requirements: []
|
86
|
-
|
87
|
-
rubygems_version: 2.7.6
|
86
|
+
rubygems_version: 3.2.22
|
88
87
|
signing_key:
|
89
88
|
specification_version: 4
|
90
89
|
summary: The XML registry can be used to store or retrieve app settings etc. in an
|
metadata.gz.sig
CHANGED
Binary file
|