dxlite 0.3.5 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/dxlite.rb +177 -147
  4. data.tar.gz.sig +0 -0
  5. metadata +35 -35
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 52a6f519b3142ed9207a881bf65f9df9afceed0bc0eccdb258aa46b61988f20e
4
- data.tar.gz: 1df9a6b682dc8a05fea3d88152c2d8fdb6042cc75aa246731fa69374568bacfd
3
+ metadata.gz: b148c28af592acb924e4ff94ea19a1b0cc85d84c03c948942fb2f156fdca1504
4
+ data.tar.gz: 17d5cd22ba53cc5fb4c650f0df7f396591118b8c75865ad82ee8c10641291793
5
5
  SHA512:
6
- metadata.gz: 641a55501dcada49b36db49c38cbbaf66d94283b9c96f5572a7cfce098b651e899d0d3cdede7561cd2b0ce53b42f3a0b1c97518e39cf12ed75b0ca4ead920cef
7
- data.tar.gz: 1b5abceae389e71fd4f813e6cc841abf212eab8db0a56800dc1f627452b454593cf4b86ced042b8ce14a33c6ae34908f3ef90b968f39979fb268cf1feb2781f0
6
+ metadata.gz: 8116413a89279f69d23d2bb2552786846014f11da6d00c18b63852ab8a58b678e064f7401b391cc6194a62baf6f812bf127e504e2c7f44eafadf4a355e915f27
7
+ data.tar.gz: 587433a7d25d395348d36a1dbb685bc549e78111c9683a92d9dad99a9208a41e8c797fc3ce31118d5c36ba305b2c5e9b79e4c481996835771d77dd82c2020a6c
checksums.yaml.gz.sig CHANGED
Binary file
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'
@@ -11,8 +12,8 @@ require 'rxfhelper'
11
12
  class DxLite
12
13
  using ColouredText
13
14
 
14
- attr_accessor :summary, :filepath, :schema
15
- attr_reader :records
15
+ attr_accessor :summary, :filepath
16
+ attr_reader :records, :schema
16
17
 
17
18
  def initialize(s=nil, autosave: false, debug: false)
18
19
 
@@ -20,189 +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
- puts 'before merge' if @debug
57
- @summary.merge!(summary_attributes)
46
+ when :url
58
47
 
59
- summary = @summary[:schema][/(?<=\[)[^\]]+/]
60
-
61
- if summary then
48
+ read buffer
62
49
 
63
- summary.split(/ *, */).each do |x|
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
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
+
96
94
  if id.nil? then
97
-
95
+
98
96
  puts '@records: ' + @records.inspect if @debug
99
-
97
+
100
98
  if @records then
101
99
  id = @records.map {|x| x[:id].to_i}.max.to_i + 1
102
100
  else
103
101
  @records = []
104
102
  id = 1
105
103
  end
106
-
104
+
107
105
  end
108
-
106
+
109
107
  h2 = custom_attributes
110
-
111
- fields = rawh.keys
112
- puts 'fields: ' + fields.inspect if @debug
108
+
109
+ fields = rawh.keys
110
+ puts 'fields: ' + fields.inspect if @debug
113
111
 
114
112
  h3 = fields.map {|x| [x.to_sym, nil] }.to_h.merge(rawh)
115
113
  h = {id: id.to_s, created: h2[:created], last_modified: nil, body: h3}
116
114
  @records << h
117
-
115
+
118
116
  save() if @autosave
119
-
117
+
120
118
  RecordX.new(h[:body], self, h[:id], h[:created], h[:last_modified])
121
-
119
+
122
120
  end
123
-
121
+
124
122
  def fields()
125
123
  @fields
126
124
  end
127
-
125
+
128
126
  def inspect()
129
- "#<DxLite:%s @debug=%s, @summary=%s, ...>" % [object_id, @debug,
127
+ "#<DxLite:%s @debug=%s, @summary=%s, ...>" % [object_id, @debug,
130
128
  @summary.inspect]
131
129
  end
132
-
130
+
133
131
  # Parses 1 or more lines of text to create or update existing records.
134
132
 
135
133
  def parse(obj=nil)
136
-
134
+
135
+ @records ||= []
136
+
137
137
  if obj.is_a? Array then
138
-
138
+
139
139
  unless schema() then
140
140
  puts 'obj.first: ' + obj.first.inspect if @debug
141
- cols = obj.first.keys.map {|c| c == 'id' ? 'uid' : c}
141
+ cols = obj.first.keys.map {|c| c == 'id' ? 'uid' : c}
142
142
  puts 'after cols' if @debug
143
- self.schema = "items/item(%s)" % cols.join(', ')
143
+ new_summary "items/item(%s)" % cols.join(', ')
144
144
  end
145
-
145
+
146
146
  obj.each do |x|
147
147
  #puts 'x: ' + x.inspect if @debug
148
148
  self.create x, id: nil
149
149
  end
150
-
151
- return self
152
-
153
- end
150
+
151
+ return self
152
+
153
+ end
154
154
  end
155
-
155
+
156
156
  alias import parse
157
-
157
+
158
158
  def parse_xml(buffer)
159
-
159
+
160
160
  doc = Rexle.new(buffer)
161
-
161
+
162
162
  asummary = doc.root.xpath('summary/*').map do |node|
163
163
  puts 'node: ' + node.xml.inspect if @debug
164
164
  [node.name, node.text.to_s]
165
165
  end
166
-
166
+
167
167
  summary = Hash[asummary]
168
168
  summary[:schema] = summary['schema']
169
169
  %w(recordx_type format_mask schema).each {|x| summary.delete x}
170
-
171
- schema = summary[:schema]
170
+
171
+ @schema = summary[:schema]
172
172
  puts 'schema: ' + schema.inspect if @debug
173
-
174
- @fields = schema[/\(([^\)]+)/,1].split(/ *, +/)
173
+
174
+ @fields = @schema[/\(([^\)]+)/,1].split(/ *, +/)
175
175
  puts 'fields: ' + @fields.inspect if @debug
176
-
176
+
177
+ @summary = summary
178
+
177
179
  a = doc.root.xpath('records/*').each do |node|
178
-
180
+
179
181
  h = Hash[@fields.map {|field| [field.to_sym, node.text(field).to_s] }]
180
- self.create h, id: nil
181
-
182
+ self.create h, id: nil, custom_attributes: node.attributes
183
+
182
184
  end
183
185
 
184
- @summary = summary
185
-
186
186
  end
187
187
 
188
188
  def save(file=@filepath)
189
-
189
+
190
190
  return unless file
191
191
  @filepath = file
192
-
192
+
193
193
  s = File.extname(file) == '.json' ? to_json() : to_xml()
194
194
  File.write file, s
195
195
  end
196
-
196
+
197
197
  def to_a()
198
198
  @records.map {|x| x[:body]}
199
199
  end
200
-
200
+
201
201
  def to_h()
202
-
202
+
203
203
  root_name = schema()[/^\w+/]
204
204
  record_name = schema()[/(?<=\/)[^\(]+/]
205
-
205
+
206
206
  h = {
207
207
  root_name.to_sym =>
208
208
  {
@@ -210,139 +210,169 @@ class DxLite
210
210
  records: @records.map {|h| {record_name.to_sym => h} }
211
211
  }
212
212
  }
213
-
213
+
214
214
  end
215
-
215
+
216
216
  def to_json(pretty: true)
217
217
  pretty ? JSON.pretty_generate(to_h()) : to_h()
218
218
  end
219
-
219
+
220
220
  def to_xml()
221
-
221
+
222
222
  root_name = schema()[/^\w+/]
223
223
  record_name = schema()[/(?<=\/)[^\(]+/]
224
-
224
+
225
225
  a = RexleBuilder.build do |xml|
226
-
226
+
227
227
  xml.send(root_name.to_sym) do
228
228
  xml.summary({}, @summary)
229
229
  xml.records do
230
-
230
+
231
231
  all().each do |x|
232
-
233
- 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}
234
234
  puts 'x.to_h: ' + x.to_h.inspect if @debug
235
235
  xml.send(record_name.to_sym, h, x.to_h)
236
-
236
+
237
237
  end
238
-
238
+
239
239
  end
240
240
  end
241
241
  end
242
242
 
243
- Rexle.new(a).xml pretty: true
244
-
245
-
243
+ Rexle.new(a).xml pretty: true
244
+
245
+
246
246
  end
247
-
247
+
248
248
  # Updates a record from an id and a hash containing field name and field value.
249
- # dynarex.update 4, name: Jeff, age: 38
250
-
249
+ # dynarex.update 4, name: Jeff, age: 38
250
+
251
251
  def update(id, obj)
252
-
252
+
253
253
  if @debug then
254
254
  puts 'inside update'.info
255
255
  puts ('id: ' + id.inspect).debug
256
256
  puts ('obj.class: ' + obj.class.inspect).debug
257
257
  end
258
-
258
+
259
259
  r = @records.find {|x| x[:id] == id}
260
-
260
+
261
261
  if r then
262
-
262
+
263
263
  r[:body].merge!(obj)
264
264
  save() if @autosave
265
-
265
+
266
266
  end
267
-
267
+
268
268
  end
269
-
269
+
270
270
  private
271
-
271
+
272
272
  def find_record(rec, value, x)
273
- 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
274
274
  end
275
-
275
+
276
276
  def make_methods()
277
-
277
+
278
278
  # for each summary item create get and set methods
279
-
279
+
280
280
  @summary.each do |key, value|
281
-
281
+
282
282
  define_singleton_method(key) { @summary[key] }
283
-
283
+
284
284
  define_singleton_method (key.to_s + '=').to_sym do |value|
285
285
  @summary[key] = value
286
- end
287
-
286
+ end
287
+
288
288
  end
289
-
289
+
290
290
  @fields = @summary[:schema][/(?<=\()[^\)]+/].split(',').map(&:strip)
291
291
 
292
292
  @fields.each do |x|
293
293
 
294
294
  define_singleton_method ('find_all_by_' + x).to_sym do |value|
295
-
295
+
296
296
  a = @records.select {|rec| find_record(rec[:body], value, x) }
297
-
297
+
298
298
  a.map do |h|
299
299
  RecordX.new(h[:body], self, h[:id], h[:created], h[:last_modified])
300
300
  end
301
-
301
+
302
302
  end
303
303
 
304
304
  define_singleton_method ('find_by_' + x).to_sym do |value|
305
-
305
+
306
306
  h = @records.find {|rec| find_record(rec[:body], value, x) }
307
307
  return nil unless h
308
-
309
- RecordX.new(h[:body], self, h[:id], h[:created], h[:last_modified])
310
-
308
+
309
+ RecordX.new(h[:body], self, h[:id], h[:created], h[:last_modified])
310
+
311
+ end
312
+
313
+ end
314
+
315
+ end
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]
311
338
  end
312
339
 
313
340
  end
314
-
341
+
342
+ make_methods()
315
343
  end
316
-
344
+
317
345
  def read(buffer)
318
-
346
+
319
347
  if buffer[0] == '<' then
320
-
348
+
321
349
  parse_xml buffer
322
-
350
+
323
351
  else
324
-
352
+
325
353
  h1 = JSON.parse(buffer, symbolize_names: true)
326
- #puts 'h1:' + h1.inspect if @debug
327
-
354
+ puts 'h1:' + h1.inspect if @debug
355
+
328
356
  h = h1[h1.keys.first]
329
-
357
+
330
358
  @summary = {}
331
-
359
+
332
360
  h[:summary].each do |key, value|
333
-
361
+
334
362
  if %i(recordx_type format_mask schema).include? key then
335
363
  @summary[key] = value
336
- else
364
+ else
337
365
  @summary[key.to_s] = value
338
366
  end
339
-
367
+
340
368
  end
341
-
369
+
342
370
  @records = h[:records].map {|x| x[x.keys.first]}
343
-
371
+
344
372
  end
345
-
373
+
374
+ make_methods()
375
+
346
376
  end
347
-
377
+
348
378
  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.3.5
4
+ version: 0.5.1
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
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwNjIwMDk1OTIyWhcN
15
- MjEwNjIwMDk1OTIyWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnuff
17
- 5MVmDII05CloWme8XkTcCkGTFTCGqacPAa5803163oHfU0CovEbdSR8KNVXQ0mVz
18
- ZkE1kEi/xlAbZHKZTgJNjzXKcTfW0zNI/1l9Jyz59fjOUgO26oWgEJX1iJBUkzAx
19
- 1jHBvCGvAgKi1gmPovfrnPkXJ4e39Kklay4mrsfRO1qAkyfoUCn8TOc4/xVyB9UV
20
- zpSfryHT41gM3vUyVyfkLsC8St6oI2j6R45YJIL2Hz1UBZsFk8ICn8MKL84b+nyX
21
- YiW3BoOhB5x4M+tORhMqIYwSW///P3ztFVuZCoZsZm7KDlmZ5Q+kbtg2O6WJqOeX
22
- 2CLAag6UYpWUJd9SBDOOLvNAzdzKHOlD/tJQnHrLTJzNSQQZcCLa7xjAob2vooFi
23
- zO7nNoPnRb7MFAdnjEgIPra6GZ6BxSzeWKmkXX6vFCs8Uy8N0ijHyWg4NKDlgHzl
24
- VCS9RW6U/gIhciP3kabmxcu2R67I79UDJU4tf8fYN+7tZLfU7g5S0QLQfrsCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUDodJj5qi
26
- akKU2hOApwE0BzK8lGswJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
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
- BgkqhkiG9w0BAQsFAAOCAYEAAp+SekW1hEJtEVytkrrwQlx/7umkgPsiQS18ch7v
29
- sRZBRxLXwFdG0LLmqo1rP0vd+JMDq0DXZVR6bluBGp2NEsFD9XyBs7Rsz/+4SEQ4
30
- 4eLGxTkU8+expljNlWRAFZdyt1RPHbs0LScrjBZaVzfBJtLXLcl8CWhyqM4OPTHv
31
- R18J5Arlbd4O0PfYXQ08UtoSsNrqf77o24nPuXMXKMwPhmaCpuj0Lo4zBkha9EO8
32
- geBYBisigKBlddJirP391twfnfQS0Qx/j7LgkYgXAuD3Z0Ma1Z9E3HzuTvXernzM
33
- sECCiG3ji+1NriaIv8rb6mG/Zbdjv8ydoFAj+M+0qbE+ZARNlBHKI7F7lYQJc0cT
34
- vsTqpllA3ZpXxVzmfiJMahAv08eTnWbgCSRNbCm6mq6I4hyAiudbxcc+DPzLbrxx
35
- dwbAN6/wokoLVZAiMRG1vZlI6RhtSOTHvFHbfBE5JI9rhjRtui8yeV+t8iI8G4Zs
36
- 2NszuYzdlVfzlrUiPWY5jL9P
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: 2021-02-20 00:00:00.000000000 Z
38
+ date: 2022-02-09 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
- name: recordx
41
+ name: kvx
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.5'
46
+ version: '1.0'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.5.5
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.5'
56
+ version: '1.0'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 0.5.5
59
+ version: 1.0.1
60
60
  - !ruby/object:Gem::Dependency
61
- name: rxfhelper
61
+ name: recordx
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: '1.1'
66
+ version: '0.5'
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 1.1.3
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: '1.1'
76
+ version: '0.5'
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 1.1.3
79
+ version: 0.5.5
80
80
  description:
81
- email: james@jamesrobertson.eu
81
+ email: digital.robertson@gmail.com
82
82
  executables: []
83
83
  extensions: []
84
84
  extra_rdoc_files: []
metadata.gz.sig CHANGED
Binary file