dxlite 0.3.4 → 0.5.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 +2 -4
- data/lib/dxlite.rb +187 -141
- data.tar.gz.sig +0 -0
- metadata +35 -35
- 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: 26b439376d323ebf252c80b4beb705a078b4aafae6a8c454eade112ff2bafef1
|
4
|
+
data.tar.gz: 89a361d248390fed5cd385f2cb1ff9025dbd6e13df64b05413eab830eef0e454
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8348c12d469466b5915a9178e7fb15076bd2345768e4440a6ce99d1fee79ec1423754d65e922c03dac6f4a875ecb16dd23f7e3a477d73e4c1adb30b16f98a127
|
7
|
+
data.tar.gz: 57a73d0c80ea752eb8f79dbb99e04bb757ffa48fd0c389c48402a9387905f67a6fab637ea9e1074e9e53d09eb2c5902ca168c279297216bb6e78cebc0ea2a373
|
checksums.yaml.gz.sig
CHANGED
@@ -1,4 +1,2 @@
|
|
1
|
-
|
2
|
-
��
|
3
|
-
��Rj4�Kl�: �����Yϖ?g���kiF�n�����~ܞ({y3��eL�l�K�ЎVF7����߰z��w�(�"�"c�3p�&u�>e<���6�B��\�˲�(-+�P��ϐ��g���>�jb�j�r����%�`,��}��,��a�ot'.&_&82���\�]>�{bo .�o%���Ĝ7���ҙ
|
4
|
-
���X��-������ڇ���dIl�X�n�!�i?�Ɇ�aQ���4
|
1
|
+
S$C��9t��|�J���8Ua�M+5�����^62l�G�B�;��w�����}�yE�j+
|
2
|
+
�k�1��2��j�LE��q��rQ�=t���c����G-d�JL�b��s 7��n�-�ih�2��b���@j��ɠ�jh�I��p9w����'C��3Xh��y��n��$%H���:�!ŷ�
|
data/lib/dxlite.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# file: dxlite.rb
|
4
4
|
|
5
5
|
require 'c32'
|
6
|
+
require 'kvx'
|
6
7
|
require 'json'
|
7
8
|
require 'recordx'
|
8
9
|
require 'rxfhelper'
|
@@ -12,7 +13,7 @@ class DxLite
|
|
12
13
|
using ColouredText
|
13
14
|
|
14
15
|
attr_accessor :summary, :filepath
|
15
|
-
attr_reader :records
|
16
|
+
attr_reader :records, :schema
|
16
17
|
|
17
18
|
def initialize(s=nil, autosave: false, debug: false)
|
18
19
|
|
@@ -20,171 +21,188 @@ class DxLite
|
|
20
21
|
|
21
22
|
return unless s
|
22
23
|
buffer, type = RXFHelper.read(s)
|
23
|
-
|
24
|
+
|
24
25
|
@filepath = s if type == :file or type == :dfs
|
25
|
-
|
26
|
+
|
26
27
|
puts 'type: ' + type.inspect if @debug
|
27
28
|
puts 'buffer: ' + buffer.inspect if @debug
|
28
29
|
|
29
30
|
@records = []
|
30
|
-
|
31
|
+
|
31
32
|
case type
|
32
|
-
|
33
|
+
|
34
|
+
when :dfs
|
35
|
+
|
36
|
+
read buffer
|
37
|
+
|
33
38
|
when :file
|
34
|
-
|
39
|
+
|
35
40
|
read buffer
|
36
|
-
|
41
|
+
|
37
42
|
when :text
|
38
|
-
|
39
|
-
@summary = {schema: s}
|
40
43
|
|
41
|
-
|
42
|
-
when :url
|
43
|
-
|
44
|
-
read buffer
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
puts '@summary: ' + @summary.inspect
|
49
|
-
@schema = @summary[:schema]
|
50
|
-
|
51
|
-
summary_attributes = {
|
52
|
-
recordx_type: 'dynarex',
|
53
|
-
default_key: @schema[/(?<=\()\w+/]
|
54
|
-
}
|
44
|
+
new_summary(s)
|
55
45
|
|
56
|
-
|
57
|
-
@summary.merge!(summary_attributes)
|
46
|
+
when :url
|
58
47
|
|
59
|
-
|
60
|
-
|
61
|
-
if summary then
|
48
|
+
read buffer
|
62
49
|
|
63
|
-
|
64
|
-
@summary[x] = nil unless @summary[x]
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
make_methods()
|
50
|
+
end
|
70
51
|
|
71
|
-
end
|
52
|
+
end
|
72
53
|
|
73
54
|
def all()
|
74
55
|
|
75
56
|
@records.map do |h|
|
76
|
-
|
57
|
+
|
77
58
|
puts 'h: ' + h.inspect if @debug
|
78
|
-
RecordX.new(h[:body], self, h[:id], h[:created],
|
59
|
+
RecordX.new(h[:body], self, h[:id], h[:created],
|
79
60
|
h[:last_modified])
|
80
61
|
end
|
81
62
|
|
82
|
-
end
|
83
|
-
|
63
|
+
end
|
64
|
+
|
84
65
|
def delete(id)
|
85
66
|
found = @records.find {|x| x[:id] == id}
|
86
|
-
|
67
|
+
|
87
68
|
if found then
|
88
|
-
@records.delete found
|
69
|
+
@records.delete found
|
89
70
|
save() if @autosave
|
90
71
|
end
|
91
|
-
|
72
|
+
|
92
73
|
end
|
93
|
-
|
74
|
+
|
94
75
|
def create(rawh, id: nil, custom_attributes: {created: Time.now})
|
95
|
-
|
96
|
-
|
76
|
+
|
77
|
+
if @debug then
|
78
|
+
puts 'create:: rawh: ' + rawh.inspect
|
79
|
+
puts 'custom_attributes: ' + custom_attributes.inspect
|
80
|
+
end
|
81
|
+
|
82
|
+
key = @summary[:default_key]
|
83
|
+
|
84
|
+
if key then
|
85
|
+
|
86
|
+
r = records.find {|x| x[:body][key.to_sym] == rawh[key.to_sym]}
|
87
|
+
if r then
|
88
|
+
r[:last_modified] = Time.now.to_s
|
89
|
+
return false
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
if id.nil? then
|
95
|
+
|
96
|
+
puts '@records: ' + @records.inspect if @debug
|
97
|
+
|
98
|
+
if @records then
|
99
|
+
id = @records.map {|x| x[:id].to_i}.max.to_i + 1
|
100
|
+
else
|
101
|
+
@records = []
|
102
|
+
id = 1
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
97
107
|
h2 = custom_attributes
|
108
|
+
|
109
|
+
fields = rawh.keys
|
110
|
+
puts 'fields: ' + fields.inspect if @debug
|
111
|
+
|
98
112
|
h3 = fields.map {|x| [x.to_sym, nil] }.to_h.merge(rawh)
|
99
113
|
h = {id: id.to_s, created: h2[:created], last_modified: nil, body: h3}
|
100
114
|
@records << h
|
101
|
-
|
115
|
+
|
102
116
|
save() if @autosave
|
103
|
-
|
117
|
+
|
104
118
|
RecordX.new(h[:body], self, h[:id], h[:created], h[:last_modified])
|
105
|
-
|
119
|
+
|
106
120
|
end
|
107
|
-
|
121
|
+
|
108
122
|
def fields()
|
109
123
|
@fields
|
110
124
|
end
|
111
|
-
|
125
|
+
|
112
126
|
def inspect()
|
113
|
-
"#<DxLite:%s @debug=%s, @summary=%s, ...>" % [object_id, @debug,
|
127
|
+
"#<DxLite:%s @debug=%s, @summary=%s, ...>" % [object_id, @debug,
|
114
128
|
@summary.inspect]
|
115
129
|
end
|
116
|
-
|
130
|
+
|
117
131
|
# Parses 1 or more lines of text to create or update existing records.
|
118
132
|
|
119
133
|
def parse(obj=nil)
|
120
|
-
|
134
|
+
|
135
|
+
@records ||= []
|
136
|
+
|
121
137
|
if obj.is_a? Array then
|
122
|
-
|
138
|
+
|
123
139
|
unless schema() then
|
124
|
-
|
125
|
-
|
140
|
+
puts 'obj.first: ' + obj.first.inspect if @debug
|
141
|
+
cols = obj.first.keys.map {|c| c == 'id' ? 'uid' : c}
|
142
|
+
puts 'after cols' if @debug
|
143
|
+
new_summary "items/item(%s)" % cols.join(', ')
|
126
144
|
end
|
127
|
-
|
145
|
+
|
128
146
|
obj.each do |x|
|
129
147
|
#puts 'x: ' + x.inspect if @debug
|
130
148
|
self.create x, id: nil
|
131
149
|
end
|
132
|
-
|
133
|
-
return self
|
134
|
-
|
135
|
-
end
|
150
|
+
|
151
|
+
return self
|
152
|
+
|
153
|
+
end
|
136
154
|
end
|
137
|
-
|
155
|
+
|
138
156
|
alias import parse
|
139
|
-
|
157
|
+
|
140
158
|
def parse_xml(buffer)
|
141
|
-
|
159
|
+
|
142
160
|
doc = Rexle.new(buffer)
|
143
|
-
|
161
|
+
|
144
162
|
asummary = doc.root.xpath('summary/*').map do |node|
|
145
163
|
puts 'node: ' + node.xml.inspect if @debug
|
146
164
|
[node.name, node.text.to_s]
|
147
165
|
end
|
148
|
-
|
166
|
+
|
149
167
|
summary = Hash[asummary]
|
150
168
|
summary[:schema] = summary['schema']
|
151
169
|
%w(recordx_type format_mask schema).each {|x| summary.delete x}
|
152
|
-
|
153
|
-
schema = summary[:schema]
|
170
|
+
|
171
|
+
@schema = summary[:schema]
|
154
172
|
puts 'schema: ' + schema.inspect if @debug
|
155
|
-
|
156
|
-
@fields = schema[/\(([^\)]+)/,1].split(/ *, +/)
|
173
|
+
|
174
|
+
@fields = @schema[/\(([^\)]+)/,1].split(/ *, +/)
|
157
175
|
puts 'fields: ' + @fields.inspect if @debug
|
158
|
-
|
176
|
+
|
177
|
+
@summary = summary
|
178
|
+
|
159
179
|
a = doc.root.xpath('records/*').each do |node|
|
160
|
-
|
180
|
+
|
161
181
|
h = Hash[@fields.map {|field| [field.to_sym, node.text(field).to_s] }]
|
162
|
-
self.create h, id: nil
|
163
|
-
|
182
|
+
self.create h, id: nil, custom_attributes: node.attributes
|
183
|
+
|
164
184
|
end
|
165
185
|
|
166
|
-
@summary = summary
|
167
|
-
|
168
186
|
end
|
169
187
|
|
170
188
|
def save(file=@filepath)
|
171
|
-
|
189
|
+
|
172
190
|
return unless file
|
173
191
|
@filepath = file
|
174
|
-
|
192
|
+
|
175
193
|
s = File.extname(file) == '.json' ? to_json() : to_xml()
|
176
194
|
File.write file, s
|
177
195
|
end
|
178
|
-
|
196
|
+
|
179
197
|
def to_a()
|
180
198
|
@records.map {|x| x[:body]}
|
181
199
|
end
|
182
|
-
|
200
|
+
|
183
201
|
def to_h()
|
184
|
-
|
202
|
+
|
185
203
|
root_name = schema()[/^\w+/]
|
186
204
|
record_name = schema()[/(?<=\/)[^\(]+/]
|
187
|
-
|
205
|
+
|
188
206
|
h = {
|
189
207
|
root_name.to_sym =>
|
190
208
|
{
|
@@ -192,139 +210,167 @@ class DxLite
|
|
192
210
|
records: @records.map {|h| {record_name.to_sym => h} }
|
193
211
|
}
|
194
212
|
}
|
195
|
-
|
213
|
+
|
196
214
|
end
|
197
|
-
|
215
|
+
|
198
216
|
def to_json(pretty: true)
|
199
217
|
pretty ? JSON.pretty_generate(to_h()) : to_h()
|
200
218
|
end
|
201
|
-
|
219
|
+
|
202
220
|
def to_xml()
|
203
|
-
|
221
|
+
|
204
222
|
root_name = schema()[/^\w+/]
|
205
223
|
record_name = schema()[/(?<=\/)[^\(]+/]
|
206
|
-
|
224
|
+
|
207
225
|
a = RexleBuilder.build do |xml|
|
208
|
-
|
226
|
+
|
209
227
|
xml.send(root_name.to_sym) do
|
210
228
|
xml.summary({}, @summary)
|
211
229
|
xml.records do
|
212
|
-
|
230
|
+
|
213
231
|
all().each do |x|
|
214
|
-
|
215
|
-
h = {id: x.id, created: x.created, last_modified: x.last_modified}
|
232
|
+
|
233
|
+
h = {id: x.id, created: x.created, last_modified: x.last_modified}
|
216
234
|
puts 'x.to_h: ' + x.to_h.inspect if @debug
|
217
235
|
xml.send(record_name.to_sym, h, x.to_h)
|
218
|
-
|
236
|
+
|
219
237
|
end
|
220
|
-
|
238
|
+
|
221
239
|
end
|
222
240
|
end
|
223
241
|
end
|
224
242
|
|
225
|
-
Rexle.new(a).xml pretty: true
|
226
|
-
|
227
|
-
|
243
|
+
Rexle.new(a).xml pretty: true
|
244
|
+
|
245
|
+
|
228
246
|
end
|
229
|
-
|
247
|
+
|
230
248
|
# Updates a record from an id and a hash containing field name and field value.
|
231
|
-
# dynarex.update 4, name: Jeff, age: 38
|
232
|
-
|
249
|
+
# dynarex.update 4, name: Jeff, age: 38
|
250
|
+
|
233
251
|
def update(id, obj)
|
234
|
-
|
252
|
+
|
235
253
|
if @debug then
|
236
254
|
puts 'inside update'.info
|
237
255
|
puts ('id: ' + id.inspect).debug
|
238
256
|
puts ('obj.class: ' + obj.class.inspect).debug
|
239
257
|
end
|
240
|
-
|
258
|
+
|
241
259
|
r = @records.find {|x| x[:id] == id}
|
242
|
-
|
260
|
+
|
243
261
|
if r then
|
244
|
-
|
262
|
+
|
245
263
|
r[:body].merge!(obj)
|
246
264
|
save() if @autosave
|
247
|
-
|
265
|
+
|
248
266
|
end
|
249
|
-
|
267
|
+
|
250
268
|
end
|
251
|
-
|
269
|
+
|
252
270
|
private
|
253
|
-
|
271
|
+
|
254
272
|
def find_record(rec, value, x)
|
255
|
-
r = value.is_a?(Regexp) ? rec[x.to_sym] =~ value : rec[x.to_sym] == value
|
273
|
+
r = value.is_a?(Regexp) ? rec[x.to_sym] =~ value : rec[x.to_sym] == value
|
256
274
|
end
|
257
|
-
|
275
|
+
|
258
276
|
def make_methods()
|
259
|
-
|
277
|
+
|
260
278
|
# for each summary item create get and set methods
|
261
|
-
|
279
|
+
|
262
280
|
@summary.each do |key, value|
|
263
|
-
|
281
|
+
|
264
282
|
define_singleton_method(key) { @summary[key] }
|
265
|
-
|
283
|
+
|
266
284
|
define_singleton_method (key.to_s + '=').to_sym do |value|
|
267
285
|
@summary[key] = value
|
268
|
-
end
|
269
|
-
|
286
|
+
end
|
287
|
+
|
270
288
|
end
|
271
|
-
|
289
|
+
|
272
290
|
@fields = @summary[:schema][/(?<=\()[^\)]+/].split(',').map(&:strip)
|
273
291
|
|
274
292
|
@fields.each do |x|
|
275
293
|
|
276
294
|
define_singleton_method ('find_all_by_' + x).to_sym do |value|
|
277
|
-
|
295
|
+
|
278
296
|
a = @records.select {|rec| find_record(rec[:body], value, x) }
|
279
|
-
|
297
|
+
|
280
298
|
a.map do |h|
|
281
299
|
RecordX.new(h[:body], self, h[:id], h[:created], h[:last_modified])
|
282
300
|
end
|
283
|
-
|
301
|
+
|
284
302
|
end
|
285
303
|
|
286
304
|
define_singleton_method ('find_by_' + x).to_sym do |value|
|
287
|
-
|
305
|
+
|
288
306
|
h = @records.find {|rec| find_record(rec[:body], value, x) }
|
289
307
|
return nil unless h
|
290
|
-
|
291
|
-
RecordX.new(h[:body], self, h[:id], h[:created], h[:last_modified])
|
292
|
-
|
308
|
+
|
309
|
+
RecordX.new(h[:body], self, h[:id], h[:created], h[:last_modified])
|
310
|
+
|
293
311
|
end
|
294
312
|
|
295
313
|
end
|
296
|
-
|
314
|
+
|
297
315
|
end
|
298
|
-
|
316
|
+
|
317
|
+
def new_summary(schema)
|
318
|
+
|
319
|
+
@summary = {schema: schema}
|
320
|
+
|
321
|
+
puts '@summary: ' + @summary.inspect if @debug
|
322
|
+
@schema = @summary[:schema]
|
323
|
+
|
324
|
+
summary_attributes = {
|
325
|
+
recordx_type: 'dynarex',
|
326
|
+
default_key: schema[/(?<=\()\w+/]
|
327
|
+
}
|
328
|
+
|
329
|
+
puts 'before merge' if @debug
|
330
|
+
@summary.merge!(summary_attributes)
|
331
|
+
|
332
|
+
summary = @summary[:schema][/(?<=\[)[^\]]+/]
|
333
|
+
|
334
|
+
if summary then
|
335
|
+
|
336
|
+
summary.split(/ *, */).each do |x|
|
337
|
+
@summary[x] = nil unless @summary[x]
|
338
|
+
end
|
339
|
+
|
340
|
+
end
|
341
|
+
|
342
|
+
make_methods()
|
343
|
+
end
|
344
|
+
|
299
345
|
def read(buffer)
|
300
|
-
|
346
|
+
|
301
347
|
if buffer[0] == '<' then
|
302
|
-
|
348
|
+
|
303
349
|
parse_xml buffer
|
304
|
-
|
350
|
+
|
305
351
|
else
|
306
|
-
|
352
|
+
|
307
353
|
h1 = JSON.parse(buffer, symbolize_names: true)
|
308
|
-
|
309
|
-
|
354
|
+
puts 'h1:' + h1.inspect if @debug
|
355
|
+
|
310
356
|
h = h1[h1.keys.first]
|
311
|
-
|
357
|
+
|
312
358
|
@summary = {}
|
313
|
-
|
359
|
+
|
314
360
|
h[:summary].each do |key, value|
|
315
|
-
|
361
|
+
|
316
362
|
if %i(recordx_type format_mask schema).include? key then
|
317
363
|
@summary[key] = value
|
318
|
-
else
|
364
|
+
else
|
319
365
|
@summary[key.to_s] = value
|
320
366
|
end
|
321
|
-
|
367
|
+
|
322
368
|
end
|
323
|
-
|
369
|
+
|
324
370
|
@records = h[:records].map {|x| x[x.keys.first]}
|
325
|
-
|
371
|
+
|
326
372
|
end
|
327
|
-
|
373
|
+
|
328
374
|
end
|
329
|
-
|
375
|
+
|
330
376
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dxlite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -11,74 +11,74 @@ 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
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjExMjE0MTkxMzA1WhcN
|
15
|
+
MjIxMjE0MTkxMzA1WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDr8u3b
|
17
|
+
GnmbKxnrbY0y31GqwbhURpvc6bArdtA+PLcVgPHAVPUbPxoriPsyUQKcnXD/Ema+
|
18
|
+
QYUqHzph0SxI2PYrFdskTIVKQwXdUFGy6eYSW3CHvsXV4e5gg+zmSoW93tm2sd+w
|
19
|
+
7lxgkkxri7KhguwmXpWsTHCfMBHyBXxP/2E2IGaEuyATjUposENy9Mfe7BKDMMAf
|
20
|
+
e3k7o6AJx16OmLRKAch0BkEYd0M9TqdYSYjcvKbX/BxSwm3zfz+T0erG56h3D425
|
21
|
+
ljBig7CZxCNXJqq2wSzmnVMoattGhCDLCNa9+JMN/G4bGqswnjk/MupSYhTV608s
|
22
|
+
jXrQ8yk9YIGrYi3+KW1hT25aS7HEqeFdrPax5/M/2TLyPJ+Yz+2vCm89T92rW6e5
|
23
|
+
IMDkjsQZjomhgOFjiTjn81wtr+4jfYCyclV+dFpNP+GHTXes9GtL0wzrSBMtfPkJ
|
24
|
+
AE5YlIKE6m2a40k+hhp6v3sRqPldu07L9yWxLGuz7ugiQyLc08jh7ApmnqUCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUxW2m/eFG
|
26
|
+
Ic5LrIOJvXpDgkUIXfUwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
27
|
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEANUi0iJeImMVeBp8DW0SYTE7fi64K55TzV82BUWTx
|
29
|
+
kGmMfNyBDXkRPVqfZeubCNOUBhpe3zpziO26TIzZ+7lqXkTOWDNkGdYVNMp2rbLd
|
30
|
+
exukFDYOuLStjGnAl5KUfIj3fTKC9T9HGDvSaJec2KwnY2RIQhal8FGicLX5kkUx
|
31
|
+
BO3X5S9uHFZP2HY0VZq4CpGvuhz3ikCWxRLSVfypsJR9EXod8SkPpHhtP9JHUfAV
|
32
|
+
7+dqSt7LPuHaYoiEWezPyfaZEn0oHFTFkLaDPtUDN1UvkMNaDwIQ9UBeQrscz3rm
|
33
|
+
8tXnf5YUbiM9Ngft4jVa4FjEqjARjRB/l4OlO8cxIHZG+7KU7PhlbsqT/2ISjo+f
|
34
|
+
k0RwIfy2uAZ/no0qaVtnTkbeFBw4JKNnH5jrNEMUyEsbWkkeSg67vCHjZ+YLxdgn
|
35
|
+
9pK+pqislEMFrWscGeMsc6YMS7ALxEujTuwTWyxmWAXnYft4ff2O1Zh2sPmdOlgf
|
36
|
+
camg7d8q+VZZzAtz0cFc4pip
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2022-02-04 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
|
-
name:
|
41
|
+
name: kvx
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '0
|
46
|
+
version: '1.0'
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.
|
49
|
+
version: 1.0.1
|
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: '1.0'
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.
|
59
|
+
version: 1.0.1
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
|
-
name:
|
61
|
+
name: recordx
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - "~>"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
66
|
+
version: '0.5'
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 0.5.5
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
76
|
+
version: '0.5'
|
77
77
|
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version:
|
79
|
+
version: 0.5.5
|
80
80
|
description:
|
81
|
-
email:
|
81
|
+
email: digital.robertson@gmail.com
|
82
82
|
executables: []
|
83
83
|
extensions: []
|
84
84
|
extra_rdoc_files: []
|
metadata.gz.sig
CHANGED
Binary file
|