dxlite 0.2.4 → 0.3.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 +4 -4
- checksums.yaml.gz.sig +3 -1
- data.tar.gz.sig +2 -1
- data/lib/dxlite.rb +149 -55
- metadata +10 -10
- 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: 90e750d486323e8a58475cb5471ce9724fb1e74c723aade42c9ed8e8b8eeb146
|
4
|
+
data.tar.gz: 1fa49e26bd6b74fcbc68cfde7a7ff38746adb1227de26bd7241ff2c494eb2127
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7fc7a7fe58be371ba3ae9120cba0cad446917c55c8e5e438ebe9be4b74eefca0f2bf36b48813683d406fda740c45b1de9aed0b773a1815c624344b8d978f6bc7
|
7
|
+
data.tar.gz: c82bde55b5410360b3e2114750e24bf8ce6b7747913b6e9dbcc6e38e47549407171ea836cfcc251d0025d6a91bd6b8c160109711d69687e2d975898fbdf57fe7
|
checksums.yaml.gz.sig
CHANGED
@@ -1 +1,3 @@
|
|
1
|
-
|
1
|
+
&�ar��r��]k����N��f'V�h'�a�T��=��A�}�h������J��>U���
|
2
|
+
�F�>ǭU�D��� d�ߛl2�|�2ukE�uQ�)��{���7���Kʵ%�3���D۠o��{h4)���w�J��}K���v?�u��� %u?��x�|���u.���ֱ֏S�(�?iȺ���B�zG�7�U���A)9w'@��JJ̞j
|
3
|
+
Aq/��'L֗ͯ�R� X��e������rʛ2A=:q2,������lD6$EYz.f��eL�z]��2e��ѫQ6��ҠJ*������P��bPW��c��q����]FcD�(ʗ ��l��?�
|
data.tar.gz.sig
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
~3�����N��;�q���t�p55��s�Qs��C>��#�v���Hhj~VV96�az�#�!��:-�y���ScbD
|
2
|
+
yr.�_x��|O29��w4�0�<?�¥��v�J�J�a���ե��Ӭ�މ����t��x�ק�3��T�s�F�t~,��l�Po@��L�����ֈA�N�C~�Tلz"�k������L�����sU�Y;��xM����ff��>�E��Y)���<e���9J�?�
|
data/lib/dxlite.rb
CHANGED
@@ -14,81 +14,59 @@ class DxLite
|
|
14
14
|
attr_accessor :summary
|
15
15
|
attr_reader :records
|
16
16
|
|
17
|
-
def initialize(s,
|
17
|
+
def initialize(s=nil, autosave: false, debug: false)
|
18
18
|
|
19
|
-
@
|
19
|
+
@autosave, @debug = autosave, debug
|
20
20
|
|
21
|
+
return unless s
|
21
22
|
buffer, type = RXFHelper.read(s)
|
22
|
-
puts 'type: ' + type.inspect if @debug
|
23
23
|
|
24
|
+
@filepath = s if type == :file or type == :dfs
|
25
|
+
|
26
|
+
puts 'type: ' + type.inspect if @debug
|
27
|
+
puts 'buffer: ' + buffer.inspect if @debug
|
28
|
+
|
29
|
+
@records = []
|
30
|
+
|
24
31
|
case type
|
25
32
|
|
26
33
|
when :file
|
27
34
|
|
28
|
-
|
29
|
-
puts 'h1:' + h1.inspect if @debug
|
30
|
-
@filepath = s
|
31
|
-
|
32
|
-
h = h1[h1.keys.first]
|
35
|
+
read buffer
|
33
36
|
|
34
|
-
@summary = h[:summary]
|
35
|
-
@records = h[:records]
|
36
|
-
|
37
37
|
when :text
|
38
38
|
|
39
39
|
@summary = {schema: s}
|
40
|
-
|
40
|
+
|
41
|
+
|
42
|
+
when :url
|
43
|
+
|
44
|
+
read buffer
|
41
45
|
|
42
46
|
end
|
43
47
|
|
48
|
+
puts '@summary: ' + @summary.inspect
|
44
49
|
@schema = @summary[:schema]
|
45
50
|
|
46
51
|
summary_attributes = {
|
47
52
|
recordx_type: 'dynarex',
|
48
|
-
default_key: @schema[/(?<=\()\w+/]
|
53
|
+
default_key: @schema[/(?<=\()\w+/]
|
49
54
|
}
|
50
|
-
|
55
|
+
|
56
|
+
puts 'before merge' if @debug
|
51
57
|
@summary.merge!(summary_attributes)
|
52
58
|
|
53
59
|
summary = @summary[:schema][/(?<=\[)[^\]]+/]
|
54
60
|
|
55
61
|
if summary then
|
56
|
-
@summary.merge! summary.split(',').map {|x|[x.strip, nil] }.to_h
|
57
|
-
end
|
58
|
-
|
59
|
-
# for each summary item create get and set methods
|
60
|
-
|
61
|
-
@summary.each do |key, value|
|
62
|
-
|
63
|
-
define_singleton_method(key) { @summary[key] }
|
64
|
-
|
65
|
-
define_singleton_method (key.to_s + '=').to_sym do |value|
|
66
|
-
@summary[key] = value
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
@fields = @summary[:schema][/(?<=\()[^\)]+/].split(',').map(&:strip)
|
72
|
-
|
73
|
-
@fields.each do |x|
|
74
62
|
|
75
|
-
|
76
|
-
|
77
|
-
@records.select do |rec|
|
78
|
-
value.is_a?(Regexp) ? rec[x.to_sym] =~ value : rec[x.to_sym] == value
|
79
|
-
end
|
80
|
-
|
63
|
+
summary.split(/ *, */).each do |x|
|
64
|
+
@summary[x] = nil unless @summary[x]
|
81
65
|
end
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
value.is_a?(Regexp) ? rec[x.to_sym] =~ value : rec[x.to_sym] == value
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
make_methods()
|
92
70
|
|
93
71
|
end
|
94
72
|
|
@@ -105,14 +83,27 @@ class DxLite
|
|
105
83
|
|
106
84
|
def delete(id)
|
107
85
|
found = @records.find {|x| x[:id] == id}
|
108
|
-
|
86
|
+
|
87
|
+
if found then
|
88
|
+
@records.delete found
|
89
|
+
save() if @autosave
|
90
|
+
end
|
91
|
+
|
109
92
|
end
|
110
93
|
|
111
|
-
def create(
|
94
|
+
def create(rawh, id: nil, custom_attributes: {created: Time.now})
|
112
95
|
|
113
96
|
id ||= @records.map {|x| x[:id].to_i}.max.to_i + 1
|
114
97
|
h2 = custom_attributes
|
115
|
-
|
98
|
+
h = fields.map {|x| [x.to_sym, nil] }.to_h.merge(rawh)
|
99
|
+
@records << {id: id.to_s, created: h2[:created], last_modified: nil,
|
100
|
+
body: h}
|
101
|
+
|
102
|
+
save() if @autosave
|
103
|
+
end
|
104
|
+
|
105
|
+
def fields()
|
106
|
+
@fields
|
116
107
|
end
|
117
108
|
|
118
109
|
def inspect()
|
@@ -132,7 +123,7 @@ class DxLite
|
|
132
123
|
end
|
133
124
|
|
134
125
|
obj.each do |x|
|
135
|
-
puts 'x: ' + x.inspect if @debug
|
126
|
+
#puts 'x: ' + x.inspect if @debug
|
136
127
|
self.create x, id: nil
|
137
128
|
end
|
138
129
|
|
@@ -142,12 +133,48 @@ class DxLite
|
|
142
133
|
end
|
143
134
|
|
144
135
|
alias import parse
|
136
|
+
|
137
|
+
def parse_xml(buffer)
|
138
|
+
|
139
|
+
doc = Rexle.new(buffer)
|
140
|
+
|
141
|
+
asummary = doc.root.xpath('summary/*').map do |node|
|
142
|
+
puts 'node: ' + node.xml.inspect if @debug
|
143
|
+
[node.name, node.text.to_s]
|
144
|
+
end
|
145
|
+
|
146
|
+
summary = Hash[asummary]
|
147
|
+
summary[:schema] = summary['schema']
|
148
|
+
%w(recordx_type format_mask schema).each {|x| summary.delete x}
|
149
|
+
|
150
|
+
schema = summary[:schema]
|
151
|
+
puts 'schema: ' + schema.inspect if @debug
|
152
|
+
|
153
|
+
@fields = schema[/\(([^\)]+)/,1].split(/ *, +/)
|
154
|
+
puts 'fields: ' + @fields.inspect if @debug
|
155
|
+
|
156
|
+
a = doc.root.xpath('records/*').each do |node|
|
157
|
+
|
158
|
+
h = Hash[@fields.map {|field| [field.to_sym, node.text(field).to_s] }]
|
159
|
+
self.create h, id: nil
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
@summary = summary
|
164
|
+
|
165
|
+
end
|
145
166
|
|
146
167
|
def save(file=@filepath)
|
147
|
-
|
168
|
+
|
169
|
+
return unless file
|
170
|
+
|
171
|
+
s = File.extname(file) == '.json' ? to_json() : to_xml()
|
172
|
+
File.write file, s
|
148
173
|
end
|
149
174
|
|
150
|
-
|
175
|
+
def to_a()
|
176
|
+
@records.map {|x| x[:body]}
|
177
|
+
end
|
151
178
|
|
152
179
|
def to_h()
|
153
180
|
|
@@ -208,7 +235,74 @@ class DxLite
|
|
208
235
|
end
|
209
236
|
|
210
237
|
r = @records.find {|x| x[:id] == id}
|
211
|
-
|
238
|
+
|
239
|
+
if r then
|
240
|
+
|
241
|
+
r[:body].merge!(obj)
|
242
|
+
save() if @autosave
|
243
|
+
|
244
|
+
end
|
245
|
+
|
246
|
+
end
|
247
|
+
|
248
|
+
private
|
249
|
+
|
250
|
+
def find_record(rec, value, x)
|
251
|
+
value.is_a?(Regexp) ? rec[x.to_sym] =~ value : rec[x.to_sym] == value
|
252
|
+
end
|
253
|
+
|
254
|
+
def make_methods()
|
255
|
+
|
256
|
+
# for each summary item create get and set methods
|
257
|
+
|
258
|
+
@summary.each do |key, value|
|
259
|
+
|
260
|
+
define_singleton_method(key) { @summary[key] }
|
261
|
+
|
262
|
+
define_singleton_method (key.to_s + '=').to_sym do |value|
|
263
|
+
@summary[key] = value
|
264
|
+
end
|
265
|
+
|
266
|
+
end
|
267
|
+
|
268
|
+
@fields = @summary[:schema][/(?<=\()[^\)]+/].split(',').map(&:strip)
|
269
|
+
|
270
|
+
@fields.each do |x|
|
271
|
+
|
272
|
+
define_singleton_method ('find_all_by_' + x).to_sym do |value|
|
273
|
+
|
274
|
+
@records.select {|rec| find_record(rec[:body], value, x) }
|
275
|
+
|
276
|
+
end
|
277
|
+
|
278
|
+
define_singleton_method ('find_by_' + x).to_sym do |value|
|
279
|
+
|
280
|
+
@records.find {|rec| find_record(rec[:body], value, x) }
|
281
|
+
|
282
|
+
end
|
283
|
+
|
284
|
+
end
|
285
|
+
|
286
|
+
end
|
287
|
+
|
288
|
+
def read(buffer)
|
289
|
+
|
290
|
+
if buffer[0] == '<' then
|
291
|
+
|
292
|
+
parse_xml buffer
|
293
|
+
|
294
|
+
else
|
295
|
+
|
296
|
+
h1 = JSON.parse(buffer, symbolize_names: true)
|
297
|
+
#puts 'h1:' + h1.inspect if @debug
|
298
|
+
|
299
|
+
h = h1[h1.keys.first]
|
300
|
+
|
301
|
+
@summary = h[:summary]
|
302
|
+
@records = h[:records].map {|x| x[x.keys.first]}
|
303
|
+
|
304
|
+
end
|
305
|
+
|
212
306
|
end
|
213
307
|
|
214
308
|
end
|
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.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
dwbAN6/wokoLVZAiMRG1vZlI6RhtSOTHvFHbfBE5JI9rhjRtui8yeV+t8iI8G4Zs
|
36
36
|
2NszuYzdlVfzlrUiPWY5jL9P
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2021-01-27 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: recordx
|
@@ -61,22 +61,22 @@ dependencies:
|
|
61
61
|
name: rxfhelper
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
-
- - ">="
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: 1.0.0
|
67
64
|
- - "~>"
|
68
65
|
- !ruby/object:Gem::Version
|
69
|
-
version: '1.
|
66
|
+
version: '1.1'
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.1.3
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - ">="
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: 1.0.0
|
77
74
|
- - "~>"
|
78
75
|
- !ruby/object:Gem::Version
|
79
|
-
version: '1.
|
76
|
+
version: '1.1'
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.1.3
|
80
80
|
description:
|
81
81
|
email: james@jamesrobertson.eu
|
82
82
|
executables: []
|
metadata.gz.sig
CHANGED
Binary file
|