xml-registry 0.5.4 → 0.7.1
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/lib/xml-registry.rb +73 -50
- data.tar.gz.sig +0 -0
- metadata +34 -30
- metadata.gz.sig +1 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 667bdd8cb557aaca4ea00df166d7bf0f8542a0c6d2faedeabc14c26dba83d6a0
|
4
|
+
data.tar.gz: 8a1ecbca36cee8fe8bf5e31612265f4dc384642d4c53a4d042bf324114b1a8a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3f73f6a72768069389584be2e733f2ad85494088bd4ad95ff98f6f86fd183e0f38152777971e1633fc3e59ec4e8e3fcbae9a76161039b8c48ff9be1d3c3f2c1
|
7
|
+
data.tar.gz: fb077f993036fe580363abeb6e00300e6fee9989ec18b928f95c2e5d390c39e5df1e6fc100fcbb527d8045fba896f7dd1b9130fe29d982ee1e419a06275dc6f0
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/xml-registry.rb
CHANGED
@@ -8,13 +8,13 @@ require 'simple-config'
|
|
8
8
|
|
9
9
|
|
10
10
|
module NumberCheck
|
11
|
-
|
11
|
+
|
12
12
|
refine String do
|
13
|
-
|
13
|
+
|
14
14
|
def is_number?
|
15
15
|
self.to_i.to_s == self
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -22,8 +22,10 @@ class XMLRegistry
|
|
22
22
|
using NumberCheck
|
23
23
|
|
24
24
|
attr_reader :doc
|
25
|
-
|
26
|
-
def initialize(template = '<root></root>')
|
25
|
+
|
26
|
+
def initialize(template = '<root></root>', debug: false)
|
27
|
+
|
28
|
+
@debug = debug
|
27
29
|
super()
|
28
30
|
@template, _ = RXFHelper.read(template)
|
29
31
|
@doc = Rexle.new(@template)
|
@@ -47,21 +49,21 @@ class XMLRegistry
|
|
47
49
|
# if the 1st element doesn't exist create it
|
48
50
|
e = path.split('/',2).first
|
49
51
|
@doc.root.add_element Rexle::Element.new(e) unless @doc.root.element e
|
50
|
-
create_path = find_path(path)
|
52
|
+
create_path = find_path(path)
|
51
53
|
|
52
54
|
if not create_path.empty? then
|
53
55
|
parent_path = (path.split('/') - create_path.reverse).join('/')
|
54
56
|
key_builder(parent_path, create_path)
|
55
57
|
end
|
56
|
-
|
57
|
-
add_value(path, value)
|
58
|
+
|
59
|
+
add_value(path, value)
|
58
60
|
end
|
59
61
|
|
60
62
|
def []=(path, val)
|
61
63
|
s = path.split('/').map {|x| x[0].is_number? ? x.prepend('x') : x}.join '/'
|
62
64
|
self.set_key(s, val)
|
63
65
|
end
|
64
|
-
|
66
|
+
|
65
67
|
# get the key value by passing the path
|
66
68
|
# example: get_key('app/gtd/funday').value #=> 'friday'
|
67
69
|
#
|
@@ -71,13 +73,13 @@ class XMLRegistry
|
|
71
73
|
|
72
74
|
key = @doc.root.element path
|
73
75
|
raise ("xml-registry: key %s not found" % path) unless key
|
74
|
-
|
75
|
-
key.instance_eval {
|
76
|
-
@path = path
|
76
|
+
|
77
|
+
key.instance_eval {
|
78
|
+
@path = path
|
77
79
|
|
78
80
|
def to_h(e)
|
79
81
|
|
80
|
-
v = if e.has_elements? then
|
82
|
+
v = if e.has_elements? then
|
81
83
|
e.elements.inject({}) do |r, x|
|
82
84
|
r.merge to_h(x)
|
83
85
|
end
|
@@ -86,24 +88,24 @@ class XMLRegistry
|
|
86
88
|
end
|
87
89
|
|
88
90
|
{e.name => v}
|
89
|
-
end
|
90
|
-
|
91
|
-
def to_config()
|
91
|
+
end
|
92
|
+
|
93
|
+
def to_config()
|
92
94
|
SimpleConfig.new(to_h(self), attributes: {key: @path})
|
93
|
-
end
|
94
|
-
|
95
|
-
def to_kvx()
|
95
|
+
end
|
96
|
+
|
97
|
+
def to_kvx()
|
96
98
|
Kvx.new(to_h(self), attributes: {key: @path})
|
97
|
-
end
|
98
|
-
|
99
|
+
end
|
100
|
+
|
99
101
|
def to_os()
|
100
102
|
OpenStruct.new(to_h(self).first.last)
|
101
103
|
end
|
102
104
|
}
|
103
|
-
|
105
|
+
|
104
106
|
key
|
105
107
|
end
|
106
|
-
|
108
|
+
|
107
109
|
# get several keys using a Rexle XPath
|
108
110
|
# example: get_keys('//funday') #=> [<funday>tuesday</funday>,<funday>friday</funday>]
|
109
111
|
#
|
@@ -111,7 +113,7 @@ class XMLRegistry
|
|
111
113
|
#
|
112
114
|
def get_keys(path)
|
113
115
|
@doc.root.xpath(path)
|
114
|
-
end
|
116
|
+
end
|
115
117
|
|
116
118
|
def [](path)
|
117
119
|
s = path.split('/').map {|x| x.is_number? ? x.prepend('x') : x}.join '/'
|
@@ -123,7 +125,7 @@ class XMLRegistry
|
|
123
125
|
#
|
124
126
|
#
|
125
127
|
def delete_key(path)
|
126
|
-
@doc.root.delete path
|
128
|
+
@doc.root.delete path
|
127
129
|
end
|
128
130
|
|
129
131
|
# return the registry as an XML document
|
@@ -134,22 +136,22 @@ class XMLRegistry
|
|
134
136
|
end
|
135
137
|
|
136
138
|
alias :display_xml :to_xml
|
137
|
-
|
139
|
+
|
138
140
|
def xml(options={})
|
139
141
|
@doc.root.xml options
|
140
|
-
end
|
142
|
+
end
|
141
143
|
|
142
144
|
# load a new registry xml document replacing the existing registry
|
143
145
|
#
|
144
|
-
def load_xml(s='')
|
145
|
-
@doc = Rexle.new(RXFHelper.read(s)[0])
|
146
|
+
def load_xml(s='')
|
147
|
+
@doc = Rexle.new(RXFHelper.read(s)[0].force_encoding("UTF-8"))
|
146
148
|
self
|
147
149
|
end
|
148
150
|
|
149
151
|
# save the registry to the specified file path
|
150
152
|
#
|
151
153
|
def save(s)
|
152
|
-
|
154
|
+
RXFHelper.write s, @doc.xml(pretty: true)
|
153
155
|
end
|
154
156
|
|
155
157
|
# import a registry hive from a string in registry format
|
@@ -166,49 +168,70 @@ class XMLRegistry
|
|
166
168
|
#"pin-no"="4321"
|
167
169
|
#REG
|
168
170
|
#
|
169
|
-
#reg = XMLRegistry.new
|
170
|
-
#reg.import s
|
171
|
+
#reg = XMLRegistry.new
|
172
|
+
#reg.import s
|
171
173
|
#
|
172
|
-
def import(s)
|
173
|
-
|
174
|
+
def import(s)
|
175
|
+
|
174
176
|
r = RXFHelper.read(s)
|
175
177
|
reg_buffer = r.first
|
176
178
|
raise "read file error" unless reg_buffer
|
177
179
|
|
178
180
|
if reg_buffer.strip[/^\[/] then
|
179
181
|
|
180
|
-
reg_items = reg_buffer.gsub(/\n/,'').split(/(?=\[.[^\]]+\])/).map do |x|
|
182
|
+
reg_items = reg_buffer.gsub(/\n/,'').split(/(?=\[.[^\]]+\])/).map do |x|
|
181
183
|
[x[/^\[(.[^\]]+)\]/,1], Hash[*($').scan(/"([^"]+)"="(.[^"]*)"/).flatten]]
|
182
184
|
end
|
183
|
-
|
185
|
+
|
186
|
+
elsif reg_buffer.strip.lines.grep(/^\s+\w/).any?
|
187
|
+
|
188
|
+
puts 'hierachical import' if @debug
|
189
|
+
doc = LineTree.new(reg_buffer).to_doc
|
190
|
+
|
191
|
+
reg_items = []
|
192
|
+
|
193
|
+
doc.root.each_recursive do |e|
|
194
|
+
|
195
|
+
puts 'e: ' + e.inspect if @debug
|
196
|
+
if e.is_a?(Rexle::Element) and e.children.length < 2 then
|
197
|
+
|
198
|
+
reg_items << [e.backtrack.to_xpath.sub(/^root\//,'')\
|
199
|
+
.sub(/\/[^\/]+$/,''), {e.name => e.text }]
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
end
|
204
|
+
|
184
205
|
else
|
185
206
|
|
186
207
|
reg_items = reg_buffer.split(/(?=^[^:]+$)/).map do |raw_section|
|
187
208
|
|
188
209
|
lines = raw_section.lines.to_a
|
189
210
|
next if lines.first.strip.empty?
|
190
|
-
path = lines.shift.
|
211
|
+
path = lines.shift.rstrip
|
191
212
|
[path, Hash[lines.map{|x| x.split(':',2).map(&:strip)}]]
|
192
213
|
end
|
193
|
-
|
214
|
+
|
194
215
|
reg_items.compact!
|
195
|
-
|
216
|
+
|
196
217
|
end
|
197
218
|
|
219
|
+
puts 'reg_items: ' + reg_items.inspect if @debug
|
198
220
|
reg_items.each do |path, items|
|
199
221
|
items.each {|k,value| self.set_key("%s/%s" % [path,k], value)}
|
200
222
|
end
|
201
|
-
|
223
|
+
|
202
224
|
:import
|
203
225
|
end
|
204
226
|
|
205
|
-
# Export the registry to file if the filepath is specified. Regardless,
|
206
|
-
# the registry will be returned as a string in the registry
|
227
|
+
# Export the registry to file if the filepath is specified. Regardless,
|
228
|
+
# the registry will be returned as a string in the registry
|
207
229
|
# export format.
|
208
230
|
#
|
209
231
|
def export(s=nil)
|
210
232
|
reg = print_scan(@doc.root).join("\n")
|
211
|
-
File.open(s){|f| f.write reg} if s
|
233
|
+
# jr 250118 File.open(s){|f| f.write reg} if s
|
234
|
+
RXFHelper.write(s, reg) if s
|
212
235
|
reg
|
213
236
|
end
|
214
237
|
|
@@ -244,21 +267,21 @@ class XMLRegistry
|
|
244
267
|
|
245
268
|
def print_scan(node, parent=[])
|
246
269
|
out = []
|
247
|
-
parent << node.name
|
270
|
+
parent << node.name
|
248
271
|
items = []
|
249
272
|
|
250
273
|
node.elements.each do |e|
|
251
274
|
if e.has_elements? then
|
252
|
-
out << print_scan(e, parent.clone)
|
275
|
+
out << print_scan(e, parent.clone)
|
253
276
|
else
|
254
277
|
items << [e.name, e.text]
|
255
278
|
end
|
256
|
-
end
|
279
|
+
end
|
257
280
|
if parent.length > 1 and items.length > 0 then
|
258
|
-
out << "[%s]\n%s\n" % [parent[1..-1].join("/"),
|
259
|
-
items.map {|x| "\"%s\"=\"%s\"" % x}.join("\n")]
|
281
|
+
out << "[%s]\n%s\n" % [parent[1..-1].join("/"),
|
282
|
+
items.map {|x| "\"%s\"=\"%s\"" % x}.join("\n")]
|
260
283
|
end
|
261
|
-
out
|
284
|
+
out
|
262
285
|
end
|
263
286
|
|
264
|
-
end
|
287
|
+
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.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -10,28 +10,32 @@ 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
|
-
|
32
|
-
|
13
|
+
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
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
|
+
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
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
|
33
37
|
-----END CERTIFICATE-----
|
34
|
-
date:
|
38
|
+
date: 2022-02-16 00:00:00.000000000 Z
|
35
39
|
dependencies:
|
36
40
|
- !ruby/object:Gem::Dependency
|
37
41
|
name: simple-config
|
@@ -39,22 +43,22 @@ dependencies:
|
|
39
43
|
requirements:
|
40
44
|
- - "~>"
|
41
45
|
- !ruby/object:Gem::Version
|
42
|
-
version: '0.
|
46
|
+
version: '0.7'
|
43
47
|
- - ">="
|
44
48
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.
|
49
|
+
version: 0.7.2
|
46
50
|
type: :runtime
|
47
51
|
prerelease: false
|
48
52
|
version_requirements: !ruby/object:Gem::Requirement
|
49
53
|
requirements:
|
50
54
|
- - "~>"
|
51
55
|
- !ruby/object:Gem::Version
|
52
|
-
version: '0.
|
56
|
+
version: '0.7'
|
53
57
|
- - ">="
|
54
58
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.
|
59
|
+
version: 0.7.2
|
56
60
|
description:
|
57
|
-
email:
|
61
|
+
email: digital.robertson@gmail.com
|
58
62
|
executables: []
|
59
63
|
extensions: []
|
60
64
|
extra_rdoc_files: []
|
@@ -79,9 +83,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
83
|
- !ruby/object:Gem::Version
|
80
84
|
version: '0'
|
81
85
|
requirements: []
|
82
|
-
|
83
|
-
rubygems_version: 2.6.8
|
86
|
+
rubygems_version: 3.2.22
|
84
87
|
signing_key:
|
85
88
|
specification_version: 4
|
86
|
-
summary:
|
89
|
+
summary: The XML registry can be used to store or retrieve app settings etc. in an
|
90
|
+
XML document.
|
87
91
|
test_files: []
|
metadata.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
������%�n:7�R���|�_�1Q�tm��B͜��\İ�%5�}_'ʮ�k��@���Y&9LP?�3���q�F%��p�GV�����ծ-��$w��]�5f7�k}�����
|
1
|
+
8���
|