kvx 1.1.1 → 1.1.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/kvx.rb +134 -134
- data.tar.gz.sig +0 -0
- metadata +5 -5
- 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: 7f4470d45e160be12a005f238aa279f1fbee524685577307ae63bf5092395b89
|
|
4
|
+
data.tar.gz: e2dc7d72fb2905b14d44e1707296fd91584964f7d0790ab2c922566c02b13e6d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c3815f945237a18b5c3d6e6c659b04cf6fed79218c7584113918c6668abc2d017d59f426dcdbae67cb39ece6ce7f68b7d4ad43b686557df16bdce83f2b7cf83
|
|
7
|
+
data.tar.gz: d561ab4b23680593408bc67033d38e9d03fc3e0f67c3af5662934adbd13b5db4bffcb85de7a1067b0b63dcbf34ad42c7089a6d5a97789d36ff2d674240bf4328
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/lib/kvx.rb
CHANGED
|
@@ -16,7 +16,7 @@ hkey_gems
|
|
|
16
16
|
require kvx
|
|
17
17
|
class Kvx
|
|
18
18
|
media_type kvx
|
|
19
|
-
'
|
|
19
|
+
'
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
@@ -40,19 +40,19 @@ class Kvx
|
|
|
40
40
|
@identifier = 'kvx'
|
|
41
41
|
@summary, @body = summary, body
|
|
42
42
|
@ignore_blank_lines ||= false
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
@attributes, @debug = attributes, debug
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
h = {
|
|
47
|
-
hash: :passthru,
|
|
48
|
-
:'rexle::element' => :xml_to_h,
|
|
47
|
+
hash: :passthru,
|
|
48
|
+
:'rexle::element' => :xml_to_h,
|
|
49
49
|
string: :parse_string,
|
|
50
50
|
rexle: :doc_to_h,
|
|
51
51
|
:"rexle::element::value" => :parse_string
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
if x then
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
sym = h[x.class.to_s.downcase.to_sym]
|
|
57
57
|
puts 'sym: ' + sym.inspect if @debug
|
|
58
58
|
@body = method(sym).call x
|
|
@@ -62,127 +62,127 @@ class Kvx
|
|
|
62
62
|
methodize(@body)
|
|
63
63
|
|
|
64
64
|
end
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
def import(s)
|
|
67
67
|
@body = parse_string(s)
|
|
68
68
|
methodize(@body)
|
|
69
69
|
end
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
def item()
|
|
72
72
|
@body
|
|
73
73
|
end
|
|
74
|
-
|
|
75
|
-
alias body item
|
|
76
|
-
|
|
74
|
+
|
|
75
|
+
alias body item
|
|
76
|
+
|
|
77
77
|
def save(filename)
|
|
78
78
|
FileX.write filename, self.to_s
|
|
79
79
|
end
|
|
80
|
-
|
|
81
|
-
# flattening is helpful when passing the Hash object to
|
|
80
|
+
|
|
81
|
+
# flattening is helpful when passing the Hash object to
|
|
82
82
|
# RecordX as a new record
|
|
83
83
|
#
|
|
84
84
|
def to_h(flatten: false)
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
if @summary.empty? then
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
deep_clone @body
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
else
|
|
91
|
-
|
|
91
|
+
|
|
92
92
|
if flatten then
|
|
93
93
|
@summary.merge @body
|
|
94
94
|
else
|
|
95
95
|
{summary: deep_clone(@summary), body: deep_clone(@body)}
|
|
96
96
|
end
|
|
97
|
-
|
|
97
|
+
|
|
98
98
|
end
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
end
|
|
101
|
-
|
|
101
|
+
|
|
102
102
|
def to_doc()
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
a = if @summary.empty? then
|
|
105
|
-
|
|
106
|
-
[self.class.to_s.downcase, @attributes, '', *make_xml(@body)]
|
|
107
|
-
|
|
105
|
+
|
|
106
|
+
[self.class.to_s.downcase, @attributes, '', *make_xml(@body)]
|
|
107
|
+
|
|
108
108
|
else
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
summary = make_xml(@summary)
|
|
111
|
-
|
|
111
|
+
|
|
112
112
|
tags_found = summary.assoc(:tags)
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
if tags_found then
|
|
115
115
|
tags = tags_found.pop
|
|
116
|
-
tags_found.push *tags.split.map {|x| [:tag,{},x]}
|
|
116
|
+
tags_found.push *tags.split.map {|x| [:tag,{},x]}
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
summary = [:summary, {}, *summary]
|
|
120
|
-
|
|
120
|
+
|
|
121
121
|
# -- use the nested description Hash object if there are multiple lines
|
|
122
122
|
h = {}
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
@body.each do |key, value|
|
|
125
|
-
|
|
125
|
+
|
|
126
126
|
h[key] = value.is_a?(String) ? value : value[:description]
|
|
127
|
-
|
|
127
|
+
|
|
128
128
|
end
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
body = [:body, {}, *make_xml(h)]
|
|
131
|
-
[self.class.to_s.downcase, @attributes, '', summary, body]
|
|
132
|
-
|
|
133
|
-
end
|
|
134
|
-
|
|
131
|
+
[self.class.to_s.downcase, @attributes, '', summary, body]
|
|
132
|
+
|
|
133
|
+
end
|
|
134
|
+
|
|
135
135
|
puts 'a: ' + a.inspect if @debug
|
|
136
136
|
doc = Rexle.new a
|
|
137
137
|
doc.instructions = @instructions || []
|
|
138
138
|
doc
|
|
139
|
-
|
|
139
|
+
|
|
140
140
|
end
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
def to_s()
|
|
143
|
-
|
|
143
|
+
|
|
144
144
|
header = ''
|
|
145
|
-
|
|
145
|
+
|
|
146
146
|
if @header or (@summary and @summary.any?) then
|
|
147
|
-
|
|
147
|
+
|
|
148
148
|
attr = @attributes ? ' ' + @attributes\
|
|
149
149
|
.map {|x| "%s='%s'" % x }.join(' ') : ''
|
|
150
150
|
header = '<?' + @identifier
|
|
151
151
|
header += attr
|
|
152
152
|
header += "?>\n"
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
if @summary and @summary.any? then
|
|
155
155
|
header += scan_to_s @summary
|
|
156
156
|
header += "\n----------------------------------\n\n"
|
|
157
157
|
end
|
|
158
|
-
|
|
158
|
+
|
|
159
159
|
end
|
|
160
160
|
|
|
161
161
|
# -- use the nested description Hash object if there are multiple lines
|
|
162
162
|
h = {}
|
|
163
|
-
|
|
163
|
+
|
|
164
164
|
@body.each do |key, value|
|
|
165
|
-
|
|
165
|
+
|
|
166
166
|
h[key] = if value.is_a?(String) then
|
|
167
|
-
|
|
167
|
+
|
|
168
168
|
if value.lines.length < 2 then
|
|
169
|
-
value
|
|
169
|
+
value
|
|
170
170
|
else
|
|
171
|
-
"\n" + value.lines.map {|x| ' ' + x }.join
|
|
171
|
+
"\n" + value.lines.map {|x| ' ' + x }.join
|
|
172
172
|
end
|
|
173
|
-
|
|
173
|
+
|
|
174
174
|
else
|
|
175
175
|
"\n" + value[:description].lines.map {|x| ' ' + x }.join
|
|
176
176
|
end
|
|
177
|
-
|
|
178
|
-
end
|
|
179
|
-
|
|
177
|
+
|
|
178
|
+
end
|
|
179
|
+
|
|
180
180
|
header + scan_to_s(h)
|
|
181
181
|
|
|
182
|
-
end
|
|
182
|
+
end
|
|
183
183
|
|
|
184
184
|
def to_xml(options={pretty: true})
|
|
185
|
-
|
|
185
|
+
|
|
186
186
|
doc = self.to_doc
|
|
187
187
|
doc.xml(options)
|
|
188
188
|
|
|
@@ -243,7 +243,7 @@ s = "
|
|
|
243
243
|
"
|
|
244
244
|
|
|
245
245
|
end
|
|
246
|
-
|
|
246
|
+
|
|
247
247
|
# used by RecordX to update a KVX record
|
|
248
248
|
# id is unnecssary because there is only 1 record mapped to RecordX
|
|
249
249
|
#
|
|
@@ -252,9 +252,9 @@ s = "
|
|
|
252
252
|
end
|
|
253
253
|
|
|
254
254
|
private
|
|
255
|
-
|
|
255
|
+
|
|
256
256
|
def deep_clone(h)
|
|
257
|
-
|
|
257
|
+
|
|
258
258
|
h.inject({}) do |r, x|
|
|
259
259
|
|
|
260
260
|
h2 = if x.last.is_a? Hash then
|
|
@@ -264,31 +264,31 @@ s = "
|
|
|
264
264
|
end
|
|
265
265
|
r.merge h2[0] => h2[1]
|
|
266
266
|
end
|
|
267
|
-
|
|
268
|
-
end
|
|
269
|
-
|
|
267
|
+
|
|
268
|
+
end
|
|
269
|
+
|
|
270
270
|
def doc_to_h(doc)
|
|
271
271
|
xml_to_h(doc.root)
|
|
272
272
|
end
|
|
273
273
|
|
|
274
274
|
def get_attributes(raw_attributes)
|
|
275
|
-
#
|
|
275
|
+
#
|
|
276
276
|
r1 = /([\w\-:]+\='[^']*)'/
|
|
277
277
|
r2 = /([\w\-:]+\="[^"]*)"/
|
|
278
|
-
|
|
278
|
+
|
|
279
279
|
r = raw_attributes.scan(/#{r1}|#{r2}/).map(&:compact)\
|
|
280
280
|
.flatten.inject(Attributes.new) do |r, x|
|
|
281
|
-
attr_name, raw_val = x.split(/=/,2)
|
|
281
|
+
attr_name, raw_val = x.split(/=/,2)
|
|
282
282
|
val = attr_name != 'class' ? raw_val[1..-1] : raw_val[1..-1].split
|
|
283
283
|
r.merge(attr_name.to_sym => val)
|
|
284
284
|
end
|
|
285
285
|
|
|
286
286
|
return r
|
|
287
287
|
end
|
|
288
|
-
|
|
288
|
+
|
|
289
289
|
def hashify(e)
|
|
290
290
|
|
|
291
|
-
v = if e.has_elements? then
|
|
291
|
+
v = if e.has_elements? then
|
|
292
292
|
e.elements.inject({}) do |r, x|
|
|
293
293
|
r.merge hashify(x)
|
|
294
294
|
end
|
|
@@ -297,17 +297,17 @@ s = "
|
|
|
297
297
|
end
|
|
298
298
|
|
|
299
299
|
{e.name.to_sym => v}
|
|
300
|
-
end
|
|
300
|
+
end
|
|
301
301
|
|
|
302
302
|
def make_xml(h)
|
|
303
|
-
|
|
303
|
+
|
|
304
304
|
puts 'inside make_xml: ' + h.inspect if @debug
|
|
305
305
|
h2 = h.clone
|
|
306
306
|
h2.each {|key,value| value.delete :items if value.is_a?(Hash) }
|
|
307
307
|
|
|
308
308
|
RexleBuilder.new(h2, debug: false).to_a[3..-1]
|
|
309
309
|
end
|
|
310
|
-
|
|
310
|
+
|
|
311
311
|
def parse_string(s)
|
|
312
312
|
|
|
313
313
|
buffer, type = RXFReader.read(s)
|
|
@@ -327,9 +327,9 @@ s = "
|
|
|
327
327
|
end
|
|
328
328
|
|
|
329
329
|
end
|
|
330
|
-
|
|
330
|
+
|
|
331
331
|
def methodize(h)
|
|
332
|
-
|
|
332
|
+
|
|
333
333
|
h.each do |k,v|
|
|
334
334
|
|
|
335
335
|
define_singleton_method(k){v} unless self.methods.include? k
|
|
@@ -338,68 +338,68 @@ s = "
|
|
|
338
338
|
define_singleton_method((k.to_s + '=').to_sym){|x| h[k] = x}
|
|
339
339
|
end
|
|
340
340
|
|
|
341
|
-
end
|
|
342
|
-
|
|
341
|
+
end
|
|
342
|
+
|
|
343
343
|
end
|
|
344
344
|
|
|
345
345
|
def parse_to_h(s, header_pattern: %r(^<\?kvx[\s\?]))
|
|
346
346
|
|
|
347
347
|
raw_txt, _ = RXFReader.read(s)
|
|
348
348
|
|
|
349
|
-
# does the raw_txt contain header information?
|
|
349
|
+
# does the raw_txt contain header information?
|
|
350
350
|
a = s.strip.lines
|
|
351
351
|
|
|
352
352
|
txt = if a[0] =~ header_pattern then
|
|
353
|
-
|
|
353
|
+
|
|
354
354
|
raw_header = a.shift
|
|
355
355
|
attr = get_attributes(raw_header)
|
|
356
|
-
|
|
356
|
+
|
|
357
357
|
if attr[:created] then
|
|
358
358
|
attr[:last_modified] = Time.now.to_s
|
|
359
359
|
else
|
|
360
|
-
attr[:created] = Time.now.to_s
|
|
360
|
+
attr[:created] = Time.now.to_s
|
|
361
361
|
end
|
|
362
|
-
|
|
362
|
+
|
|
363
363
|
@attributes.merge! attr
|
|
364
364
|
@header = true
|
|
365
|
-
body, summary = a.join.strip.split(/^----*$/).reverse
|
|
365
|
+
body, summary = a.join.strip.split(/^----*$/).reverse
|
|
366
366
|
@summary = scan_to_h summary if summary
|
|
367
|
-
|
|
367
|
+
|
|
368
368
|
body
|
|
369
369
|
else
|
|
370
370
|
raw_txt
|
|
371
371
|
end
|
|
372
|
-
|
|
372
|
+
|
|
373
373
|
scan_to_h(txt)
|
|
374
374
|
end
|
|
375
375
|
|
|
376
376
|
def passthru(x)
|
|
377
|
-
|
|
377
|
+
|
|
378
378
|
if x[:summary] and x[:body]
|
|
379
379
|
@summary = deep_clone x[:summary]
|
|
380
380
|
deep_clone x[:body]
|
|
381
|
-
else
|
|
381
|
+
else
|
|
382
382
|
deep_clone x
|
|
383
383
|
end
|
|
384
|
-
|
|
384
|
+
|
|
385
385
|
end
|
|
386
|
-
|
|
386
|
+
|
|
387
387
|
def pretty_print(a, indent='')
|
|
388
|
-
|
|
389
|
-
a.map do |x|
|
|
388
|
+
|
|
389
|
+
a.map do |x|
|
|
390
390
|
(x.is_a?(String) or x.nil?) ? x.to_s : pretty_print(x, indent + ' ')
|
|
391
391
|
end.join("\n" + indent)
|
|
392
|
-
|
|
392
|
+
|
|
393
393
|
end
|
|
394
|
-
|
|
395
|
-
|
|
394
|
+
|
|
395
|
+
|
|
396
396
|
def scan_to_h(txt)
|
|
397
|
-
|
|
397
|
+
|
|
398
398
|
txt.gsub!(/^\w+:(?=$)/,'\0 ')
|
|
399
399
|
puts 'txt:' + txt.inspect if @debug
|
|
400
|
-
|
|
400
|
+
|
|
401
401
|
# auto indent any multiline values which aren't already indented
|
|
402
|
-
|
|
402
|
+
|
|
403
403
|
indent = ''
|
|
404
404
|
|
|
405
405
|
lines = txt.gsub(/^-+$/m,'').lines.map do |line|
|
|
@@ -411,89 +411,89 @@ s = "
|
|
|
411
411
|
line
|
|
412
412
|
end
|
|
413
413
|
|
|
414
|
-
end
|
|
414
|
+
end
|
|
415
415
|
puts ('lines: ' + lines.inspect).debug if @debug
|
|
416
|
-
|
|
416
|
+
|
|
417
417
|
puts ('inside scan_to_h').info if @debug
|
|
418
|
-
raw_a = LineTree.new(lines.join.gsub(/(^-*$)|(?<=\S) +#.*/,'').strip,
|
|
418
|
+
raw_a = LineTree.new(lines.join.gsub(/(^-*$)|(?<=\S) +#.*/,'').strip,
|
|
419
419
|
ignore_blank_lines: @ignore_blank_lines).to_a
|
|
420
420
|
puts ('raw_a: ' + raw_a.inspect).debug if @debug
|
|
421
|
-
|
|
422
|
-
# if there are any orphan lines which aren't nested underneath a
|
|
421
|
+
|
|
422
|
+
# if there are any orphan lines which aren't nested underneath a
|
|
423
423
|
# label, they will be fixed using the following statement
|
|
424
|
-
|
|
424
|
+
|
|
425
425
|
a = raw_a.chunk {|x| x[0][/^[^:]+:/]}.inject([]) do |r,y|
|
|
426
426
|
|
|
427
|
-
|
|
427
|
+
|
|
428
428
|
puts 'r: ' + r.inspect if @debug
|
|
429
|
-
|
|
429
|
+
|
|
430
430
|
if r.last and !y.first[/[^:]+:/] then
|
|
431
431
|
r.last << y.last[-1]
|
|
432
432
|
else
|
|
433
433
|
puts 'y: ' + y.inspect if @debug
|
|
434
434
|
r << y.last[-1]
|
|
435
435
|
end
|
|
436
|
-
|
|
436
|
+
|
|
437
437
|
r
|
|
438
|
-
|
|
438
|
+
|
|
439
439
|
end
|
|
440
440
|
|
|
441
441
|
@body = a.inject({}) do |r, line|
|
|
442
|
-
|
|
442
|
+
|
|
443
443
|
s = line.shift
|
|
444
444
|
puts ('s: ' + s.inspect).debug if @debug
|
|
445
|
-
|
|
445
|
+
|
|
446
446
|
if line.join.length > 0 then
|
|
447
|
-
|
|
447
|
+
|
|
448
448
|
puts 'line: ' + line.inspect if @debug
|
|
449
|
-
|
|
450
|
-
padding = line[0].length < 2 ? "\n" : "\n "
|
|
449
|
+
|
|
450
|
+
padding = line[0].length < 2 ? "\n" : "\n "
|
|
451
451
|
s10 = line.map{|x| x.join(padding)}.join("\n")
|
|
452
|
-
|
|
452
|
+
|
|
453
453
|
r2 = if s10[/^ *\w+:[\n ]/] then
|
|
454
|
-
|
|
454
|
+
|
|
455
455
|
scan_to_h(s10)
|
|
456
|
-
|
|
456
|
+
|
|
457
457
|
else
|
|
458
458
|
|
|
459
|
-
desc = pretty_print(line).split(/\n(?=\w+: )/)
|
|
459
|
+
desc = pretty_print(line).split(/\n(?=\w+: )/)
|
|
460
460
|
|
|
461
461
|
txt2, remaining = desc
|
|
462
462
|
|
|
463
|
-
h = txt2.lines.inject([]) do |r, x|
|
|
463
|
+
h = txt2.lines.inject([]) do |r, x|
|
|
464
464
|
x.chomp!
|
|
465
465
|
x.length > 0 ? r << x : r
|
|
466
466
|
end
|
|
467
|
-
|
|
468
|
-
r3 = {description: txt2, items:
|
|
467
|
+
|
|
468
|
+
r3 = {description: txt2, items: LineTree.new(txt2).to_a(normalize: true)}
|
|
469
469
|
|
|
470
470
|
if remaining then
|
|
471
471
|
r3.merge!(scan_to_h remaining + "\n ")
|
|
472
472
|
end
|
|
473
|
-
|
|
473
|
+
|
|
474
474
|
r3
|
|
475
475
|
end
|
|
476
476
|
|
|
477
477
|
r.merge({s[/[^:]+/].to_sym => r2})
|
|
478
|
-
|
|
478
|
+
|
|
479
479
|
else
|
|
480
|
-
|
|
480
|
+
|
|
481
481
|
value, name = s.split(/: */,2).reverse
|
|
482
|
-
name ||= 'description'
|
|
482
|
+
name ||= 'description'
|
|
483
483
|
v = value =~ /^\{\s*\}$/ ? {} : value.to_s
|
|
484
|
-
|
|
484
|
+
|
|
485
485
|
r.merge({name.to_sym => v})
|
|
486
|
-
end
|
|
486
|
+
end
|
|
487
487
|
|
|
488
488
|
end
|
|
489
|
-
|
|
489
|
+
|
|
490
490
|
puts ('@body: ' + @body.inspect).debug if @debug
|
|
491
491
|
@body
|
|
492
492
|
|
|
493
|
-
end
|
|
494
|
-
|
|
495
|
-
def scan_to_s(h, indent='')
|
|
496
|
-
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
def scan_to_s(h, indent='')
|
|
496
|
+
|
|
497
497
|
a = h.inject([]) do |r, x|
|
|
498
498
|
if x.last.is_a? Hash then
|
|
499
499
|
r << x.first.to_s + ":\n" + scan_to_s(x.last, ' ')
|
|
@@ -501,27 +501,27 @@ s = "
|
|
|
501
501
|
r << "%s%s: %s" % [indent, *x]
|
|
502
502
|
end
|
|
503
503
|
end
|
|
504
|
-
|
|
504
|
+
|
|
505
505
|
@to_s = a.join("\n")
|
|
506
506
|
end
|
|
507
|
-
|
|
507
|
+
|
|
508
508
|
def xml_to_h(node)
|
|
509
|
-
|
|
509
|
+
|
|
510
510
|
puts 'node: ' + node.xml.inspect if @debug
|
|
511
511
|
@attributes = node.attributes.to_h
|
|
512
|
-
|
|
512
|
+
|
|
513
513
|
summary = node.element('summary')
|
|
514
|
-
|
|
514
|
+
|
|
515
515
|
if summary then
|
|
516
516
|
|
|
517
517
|
etags = summary.element 'tags'
|
|
518
|
-
|
|
518
|
+
|
|
519
519
|
if etags then
|
|
520
520
|
|
|
521
521
|
tags = etags.xpath('tag/text()')
|
|
522
522
|
etags.delete 'tag'
|
|
523
523
|
etags.text = tags.join(' ') if tags.any?
|
|
524
|
-
|
|
524
|
+
|
|
525
525
|
end
|
|
526
526
|
|
|
527
527
|
@summary = hashify(summary)[:summary]
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kvx
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- James Robertson
|
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
|
35
35
|
kHNn+ERume1+043nzGdoGxJEUVUPYjRHDzWB1QG7OyRO+e9RZvsTQyTp2+EWVCPD
|
|
36
36
|
haPJ+LVlPvQPLLPI124YDQp8
|
|
37
37
|
-----END CERTIFICATE-----
|
|
38
|
-
date: 2022-
|
|
38
|
+
date: 2022-09-20 00:00:00.000000000 Z
|
|
39
39
|
dependencies:
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: line-tree
|
|
@@ -46,7 +46,7 @@ dependencies:
|
|
|
46
46
|
version: '0.9'
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: 0.9.
|
|
49
|
+
version: 0.9.4
|
|
50
50
|
type: :runtime
|
|
51
51
|
prerelease: false
|
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -56,7 +56,7 @@ dependencies:
|
|
|
56
56
|
version: '0.9'
|
|
57
57
|
- - ">="
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: 0.9.
|
|
59
|
+
version: 0.9.4
|
|
60
60
|
- !ruby/object:Gem::Dependency
|
|
61
61
|
name: rxfreadwrite
|
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
104
|
version: '0'
|
|
105
105
|
requirements: []
|
|
106
|
-
rubygems_version: 3.
|
|
106
|
+
rubygems_version: 3.3.7
|
|
107
107
|
signing_key:
|
|
108
108
|
specification_version: 4
|
|
109
109
|
summary: Kvx (Keys, Values, and XML) makes it convenient to store and retrieve the
|
metadata.gz.sig
CHANGED
|
Binary file
|