dir-to-xml 1.0.8 → 1.1.0

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/dir-to-xml.rb +162 -211
  4. data.tar.gz.sig +2 -3
  5. metadata +49 -29
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfe35ab7508e85463cf2aeb0105e30e38372912a8a47f7d90a298caa702ff0dd
4
- data.tar.gz: fff6e43ea00d6a697e0b4aaa7aedbd5ef7d38645756b01329b0f9095edea3b11
3
+ metadata.gz: 6fd07741c205b9a10af1d80c5f9a298b36337acbe4fa6e3bfc15e53164eee0b8
4
+ data.tar.gz: 51f7acd3e7bc86fed507088781e576478ef846828ac050d35fbd30b0111aa738
5
5
  SHA512:
6
- metadata.gz: 06ee8ffb01712045e85717db1c74f67ccd68e526ee74e18d1905800eea6d55d75e634badb9f13b00f36d5eac1204d1ea62961db5f84ad03ae49bd9f1c36dae86
7
- data.tar.gz: 8243bee16134b8a3d41de944b37eff432fcd7b785f83703537ff156d4e6f127cc17c59c858e957b942fc21e24b1805d24fa0608e1f539f7226d3a16f0f4235b4
6
+ metadata.gz: a226d2e9028066bca47aee5b9dee85ef21531d6d947fb725f8ab09295bd41cf889378637c811c6eb3a6db8889339bc8f9fedbaa0316422f437515bc1ecb02e0a
7
+ data.tar.gz: 596a4e62fa36e4930151b7d2ee2c17b11d45e1c0606fa2e4783f24c80ff824940144d66c63004e4750de2cf88702c7be47553a8729c19496f2e6713198d48849
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/dir-to-xml.rb CHANGED
@@ -2,308 +2,259 @@
2
2
 
3
3
  # file: dir-to-xml.rb
4
4
 
5
+ require 'c32'
5
6
  require 'dxlite'
6
7
 
7
8
 
8
- class DirToXML
9
-
10
- attr_reader :dx, :activity
11
-
12
- def initialize(x= '.', recursive: false, index: 'dir.xml', debug: false)
9
+ # How dir-to-xml should work
10
+ #
11
+ # if the dir.xml file doesn't exist then
12
+ #
13
+ # generate the dir.xml file
14
+ #
15
+ # else
16
+ #
17
+ # # the dir.xml file does exist
18
+ #
19
+ # # check for one of the following:
20
+ # # 1 or more new files
21
+ # # 1 or more removed files
22
+ # # 1 or more modified files
23
+ #
24
+ # note: Ideally The index needs to be stored and retrieved the fastest way possible.
25
+ # This is why it's saved as a .json file rather .xml
26
+ #
27
+ # tested:
28
+ # * finding the latest file in the current directory
29
+ # * finding the latest file in a sub-directory (using recursive: true)
13
30
 
14
- super()
15
31
 
16
- @debug = debug
17
-
18
- @dx = nil
19
- @activity = {new: [], modified: []}
32
+ class DirToXML
33
+ using ColouredText
20
34
 
21
- if x.is_a? DxLite then
35
+ attr_reader :new_files, :deleted_files, :dx, :latest_files, :latest_file
22
36
 
23
- @dx = x
24
- @a = @dx.to_a
25
- @object = @a
37
+ def initialize(obj= '.', index: 'dir.json', recursive: false,
38
+ verbose: true, debug: false)
26
39
 
27
- return self
40
+ if verbose then
41
+ puts
42
+ puts 'DirToXML at your service!'.highlight
43
+ puts
44
+ puts
28
45
  end
29
46
 
30
- path = x
47
+ @index, @recursive, @verbose, @debug = index, recursive, verbose, debug
31
48
 
32
- @path, @index, @recursive = path, index, recursive
49
+ if File.basename(obj) == index then
33
50
 
34
- raise "Directory not found." unless File.exists? path
35
- filepath = File.join(path, index)
51
+ #read the index file
52
+ @path = File.dirname(obj)
53
+ puts 'intialize() @path: ' + @path.inspect if @debug
36
54
 
37
-
38
- if File.exists? filepath then
39
-
40
- @dx = DxLite.new(File.join(@path, @index), debug: @debug)
55
+ @dx = read(obj)
41
56
 
42
57
  else
58
+ @path = obj
59
+ puts 'intialize() @path: ' + @path.inspect if @debug
43
60
 
44
- @dx = DxLite.new('directory[title, file_path, last_modified, ' + \
45
- 'description]/file(name, type, ext, ctime, mtime, atime, ' + \
46
- 'description, owner, group, permissions)')
47
-
48
- puts 'before title' if @debug
49
- @dx.title = 'Index of ' + File.expand_path(@path)
50
- @dx.file_path = File.expand_path(@path)
51
- @dx.last_modified = ''
52
-
61
+ new_scan()
53
62
  end
54
63
 
55
- if @debug then
56
- puts 'before Dir.glob'
57
- puts '_path: ' + File.join(path, "*").inspect
58
- end
64
+ end
59
65
 
60
- a = Dir.glob(File.join(path, "*")).map{|x| File.basename(x) }.sort
61
- puts 'a: ' + a.inspect if @debug
66
+ def activity()
67
+ {
68
+ new: @new_files,
69
+ deleted: @deleted_files,
70
+ modified: @latest_files
71
+ }
72
+ end
62
73
 
63
- a.delete index
74
+ alias changes activity
64
75
 
65
- return if a.empty?
76
+ def directories()
77
+ @dx.all.select {|x| x.type == 'directory'}.map(&:name)
78
+ end
66
79
 
67
- a2 = a.inject([]) do |r, filename|
80
+ def find_all_by_ext(s)
81
+ @dx.find_all_by_ext(s)
82
+ end
68
83
 
69
- x = File.join(path, filename)
84
+ def find_by_filename(s)
85
+ @dx.find_by_filename(s)
86
+ end
70
87
 
71
- begin
72
- r << {
73
- name: filename,
74
- type: File::ftype(x),
75
- ext: File.extname(x),
76
- ctime: File::ctime(x),
77
- mtime: File::mtime(x),
78
- atime: File::atime(x)
79
- }
80
- rescue
81
- r
82
- end
88
+ def latest()
83
89
 
90
+ if @latest_file then
91
+ File.join(@latest_file[:path], @latest_file[:name])
84
92
  end
85
93
 
86
- # has the directory been modified since last time?
87
- #
88
- if @dx and @dx.respond_to? :last_modified and \
89
- @dx.last_modified.length > 0 then
90
-
91
- puts 'nothing to do' if @debug
92
- puts 'a2: ' + a2.inspect if @debug
93
- file = a2.max_by {|x| x[:mtime]}
94
+ end
94
95
 
95
- if @debug then
96
- puts 'file: ' + file.inspect
97
- puts 'd1: ' + Time.parse(@dx.last_modified).inspect
98
- puts 'd2: ' + (file[:mtime]).inspect
99
- end
96
+ def new_scan()
100
97
 
101
- if Time.parse(@dx.last_modified) >= file[:mtime] then
102
- @a = @dx.to_a
103
- return
104
- end
98
+ t = Time.now
99
+ records = scan_dir @path
100
+ puts 'new_scan() records: ' + records.inspect if @debug
105
101
 
106
- end
102
+ a = records.map {|x| x[:name]}
107
103
 
108
- puts 'stage 2' if @debug
104
+ if File.exists? File.join(@path, @index) then
109
105
 
110
- if @dx and @dx.respond_to? :last_modified then
106
+ @dx = read()
111
107
 
112
- if @dx.last_modified.length > 0 then
108
+ old_records = @dx.to_a
109
+ a2 = old_records.map {|x| x[:name]}
113
110
 
114
- t = Time.parse(@dx.last_modified)
111
+ # delete any old files
112
+ #
113
+ @deleted_files = a2 - a
115
114
 
116
- # find the most recently modified cur_files
117
- recent = a2.select {|x| x[:mtime] > t }.map {|x| x[:name]} \
118
- - %w(dir.xml dir.json)
115
+ if @deleted_files.any? then
119
116
 
120
- # is it a new file or recently modified?
121
- new_files = recent - @dx.to_a.map {|x| x[:name]}
122
- modified = recent - new_files
117
+ @deleted_files.each do |filename|
118
+ record = @dx.find_by_name filename
119
+ record.delete if record
120
+ end
123
121
 
124
- else
122
+ end
125
123
 
126
- new_files = a2.select {|x| x[:type] == 'file'}.map {|x| x[:name]}
127
- modified = []
124
+ # check for newly modified files
125
+ # compare the file date with index file last modified date
126
+ #
127
+ dtx_last_modified = Time.parse(@dx.last_modified)
128
128
 
129
+ select_records = records.select do |file|
130
+ file[:mtime] > dtx_last_modified
129
131
  end
130
132
 
131
- @activity = {modified: modified, new: new_files}
132
-
133
- end
133
+ find_latest(select_records)
134
134
 
135
+ # Add any new files
136
+ #
137
+ @new_files = a - a2
135
138
 
136
- command = File.exists?(File.join(path, index)) ? :refresh : :dxify
139
+ if @new_files.any? then
137
140
 
138
- self.method(command).call a2
139
- puts '@dx: ' + @dx.inspect if @debug
140
- puts '@dx.last_modified: ' + @dx.last_modified.inspect if @debug
141
+ @dx.last_modified = Time.now.to_s
142
+ @dx.import @new_files.map {|filename| getfile_info(filename) }
141
143
 
144
+ end
142
145
 
143
- @a = @dx.to_a
146
+ @dx.last_modified = Time.now.to_s if @deleted_files.any?
144
147
 
145
- if recursive then
148
+ else
146
149
 
147
- self.filter_by(type: :directory).to_a.each do |x|
150
+ @dx = new_index(records)
151
+ find_latest(records)
148
152
 
149
- path2 = File.join(path, x[:name])
150
- DirToXML.new(path2, recursive: true)
151
- end
152
153
  end
153
154
 
154
- @object = @a
155
+ t2 = Time.now - t
156
+ puts ("directory scanned in %.2f seconds" % t2).info if @verbose
155
157
 
156
158
  end
157
159
 
158
- def directories(&blk)
160
+ def read(index=@index)
159
161
 
160
- self.to_dx.all.select {|x| x.type == 'directory'}.map(&:name)
162
+ t = Time.now
163
+ puts 'read path: ' + File.join(@path, index).inspect if @Debug
161
164
 
162
- end
165
+ dx = DxLite.new(File.join(@path, index), autosave: true)
163
166
 
164
- def filter(&blk)
165
- @dx.filter &blk
166
- end
167
+ t2 = Time.now - t
168
+ puts ("%s read in %.2f seconds" % [@index, t2]).info if @verbose
167
169
 
168
- def filter_by(pattern=/.*/, type: nil, ext: nil, &blk)
170
+ return dx
169
171
 
170
- @object = @a.select do |x|
172
+ end
171
173
 
172
- puts '_x: ' + x.inspect if @debug
173
- pattern_match = x[:name] =~ pattern
174
+ private
174
175
 
175
- type_match = type ? x[:type] == type.to_s : true
176
- ext_match = ext ? x[:ext] == ext.to_s : true
176
+ def find_latest(files)
177
177
 
178
- pattern_match and type_match and ext_match
178
+ @latest_files = files.sort_by {|file| file[:mtime]}
179
+ puts '@latest_files: ' + @latest_files.inspect if @debug
179
180
 
180
- end
181
+ @latest_file = @latest_files[-1]
182
+ puts ':@latest_file: ' + @latest_file.inspect if @debug
181
183
 
182
- return if @object.empty?
184
+ dir_list = directories()
183
185
 
184
- @dx = DxLite.new
185
- @dx.import @object
186
+ if dir_list.any? then
186
187
 
187
- block_given? ? @dx.all.map(&:name).each(&blk) : self
188
+ dir_latest = dir_list.map do |dir|
188
189
 
189
- end
190
+ puts 'dir: ' + dir.inspect if @debug
191
+ dtx2 = DirToXML.new(File.join(@path, dir), index: @index,
192
+ recursive: true, verbose: false, debug: @debug)
193
+ [dir, dtx2.latest_file]
190
194
 
191
- def find_all_by_ext(s)
192
- @dx.all.select {|item| item.ext == s}
193
- end
195
+ end.reject {|_,latest| latest.nil? }.sort_by {|_, x| x[:mtime]}.last
194
196
 
195
- def find_by_filename(s)
196
- @dx.all.find {|item| item.name == s}
197
- end
197
+ puts 'dir_latest: ' + dir_latest.inspect if @debug
198
198
 
199
- alias find_by_file find_by_filename
199
+ @latest_file = if dir_latest and \
200
+ ((dir_latest.last[:mtime] > latest_file[:mtime]) \
201
+ or latest_file.nil? \
202
+ or latest_file[:type] == 'directory') then
200
203
 
201
- def last_modified(ext=nil)
204
+ dir_latest.last[:path] = File.join(@path, dir_latest.first)
205
+ dir_latest.last
202
206
 
203
- if ext and ext != '*' then
204
- @object = @a.select{|x| x[:ext][/#{ext}/] or x[:type] == 'directory'}
205
- end
207
+ elsif latest_file and latest_file[:type] == 'file'
206
208
 
207
- a = sort_by :mtime
209
+ latest_file[:path] = @path
210
+ latest_file
208
211
 
209
- lm = a[-1]
212
+ end
210
213
 
211
- if @recursive and lm[:type] == 'directory' then
212
- return [lm, DirToXML.new(File.join(@path, lm[:name])).last_modified]
213
214
  else
214
- lm
215
+ return
215
216
  end
216
- end
217
-
218
- def save()
219
- @dx.save File.join(@path, @index)
220
- end
221
-
222
- def select_by_ext(ext, &blk)
223
-
224
- @a = @dx.to_a unless @a
225
-
226
- @object = ext != '*' ? @a.select{|x| x[:ext][/#{ext}$/]} : @a
227
- return if @object.empty?
228
-
229
- dx = DxLite.new
230
- dx.import @object
231
- dtx = DirToXML.new(dx)
232
- block_given? ? dtx.dx.all.map(&:name).each(&blk) : dtx
233
- end
234
-
235
- def sort_by(sym)
236
-
237
- puts 'inside sort_by' if @debug
238
- procs = [
239
- [
240
- :mtime,
241
- lambda do |obj|
242
- obj.sort_by do |x|
243
- x[:mtime].is_a?(String) ? Time.parse(x[:mtime]) : x[:mtime]
244
- end
245
- end
246
- ]
247
- ]
248
- proc1 = procs.assoc(sym).last
249
-
250
- puts '@object: ' + @object.inspect if @debug
251
- @object = @a = @dx.to_a if @object.nil?
252
- proc1.call(@object)
253
217
 
254
218
  end
255
219
 
256
- def sort_by_last_modified()
257
- sort_by :mtime
258
- end
220
+ def getfile_info(filename)
259
221
 
260
- alias sort_by_lastmodified sort_by_last_modified
222
+ x = File.join(@path, filename)
223
+ puts 'x: ' + x.inspect if @debug
261
224
 
262
- def to_a
263
- @object || @a
264
- end
265
-
266
- def to_h()
267
- self.to_a.inject({}){|r,x| r.merge(x[:name] => x)}
268
- end
269
-
270
- def to_xml(options=nil)
271
- @dx.to_xml options
272
- end
273
-
274
- def to_dynarex
275
- @dx.clone
225
+ begin
226
+ {
227
+ name: filename,
228
+ type: File::ftype(x),
229
+ ext: File.extname(x),
230
+ mtime: File::mtime(x),
231
+ description: ''
232
+ }
233
+ end
276
234
  end
277
235
 
278
- alias to_dx to_dynarex
236
+ def new_index(records)
279
237
 
280
- private
238
+ dx = DxLite.new('directory[title, file_path, ' +
239
+ 'last_modified, description]/file(name, ' +
240
+ 'type, ext, mtime, description)')
281
241
 
282
- def dxify(a)
242
+ puts 'before title' if @debug
243
+ dx.title = 'Index of ' + @path
244
+ dx.file_path = @path
245
+ dx.last_modified = Time.now
246
+ dx.import records.reverse
247
+ dx.save File.join(@path, @index)
283
248
 
284
- @dx.last_modified = Time.now.to_s if @dx.respond_to? :last_modified
285
- @dx.import a
286
- @dx.save File.join(@path, @index)
249
+ return dx
287
250
 
288
251
  end
289
252
 
290
- def refresh(cur_files)
291
-
292
- puts 'inside refresh' if @debug
293
-
294
- prev_files = @dx.to_a
295
-
296
- #puts 'prev_files: ' + prev_files.inspect
297
- #puts 'cur_files: ' + cur_files.inspect
298
-
299
- cur_files.each do |x|
300
-
301
- file = prev_files.find {|item| item[:name] == x[:name] }
302
- #puts 'found : ' + file.inspect if @debug
303
- x[:description] = file[:description] if file and file[:description]
304
- end
253
+ def scan_dir(path)
305
254
 
306
- dxify(cur_files)
255
+ a = Dir.glob(File.join(path, "*")).map {|x| File.basename(x) }
256
+ a.delete @index
257
+ a.map {|filename| getfile_info(filename) }
307
258
 
308
259
  end
309
260
 
data.tar.gz.sig CHANGED
@@ -1,3 +1,2 @@
1
- ?�uHI%�93�1ݝҼ�ɡ�ꂈ+��h�$�nj~F��0Rʂ֍��:��-ؠ��2��;}��->i9 7�-as��ϗ���
2
- �闎�&Cz�|�w���y��vt]f7��}̚c���.�p�Ub�loTA �ؑ��,}��� �k�u�c�o� +�Ud$��J�JY�������nDS�xz�UQ�,�G�9f'�A��p��SS���ԹB5��Ut�T��a�K�TJ^��Km�����hI�o���i�D�K9^?!ە8X�c^��;J
3
- VI�v79���I���^�LE��e#�X:� Z�5v5�g[L��դ�۹"
1
+ Ha>ݏA��6������&�z���ħ�|J����|_��H0z����C���v��N�#��1�״$���^&KW�e���*!�/�Ւe@:e;�c����R=�?&'�'�O�[��N���Q�p��#���f}�
2
+ {1��>��ӟ
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dir-to-xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,52 +11,72 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwMTIzMTgwNTQ4WhcN
15
- MjIwMTIzMTgwNTQ4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC3/Li6
17
- /b2XI6+wLVA57zxSEu6RtQqu94GlPisH87ziQS+xYDYq8MqrlqHwA2O6GyK+dnCS
18
- V0pdXagOSMj27drmy9j6AhdOGxZTvB4M+q2uxxSt1AU8jAlKVBhRiKt15sbSF43K
19
- 3cY/PrccN4XpJT1YD44WU4+FwaGatFwcAsHtPpxYZgYMZj1sY+wnlKklqBrcWo6H
20
- 21+fRAVgHi5dqypH6Yez5Rc2rUKEg72OIU76iSjyx9XP8CiX4sxSqw+HRwyCkjKx
21
- d5Onb6vhlSyWpBwRmPRP1bbiztxho4Pla28HM+qVvLIqHpCYoWZi2xmKBoJ5oKPx
22
- cUj1ThI5nucnixrbg5dUjhJF9Ews4PukHtG2uIc/7WG+vCbZHn2CZNqH4HfB8cW5
23
- yoeD4sBFEJwzK8nfGZuAwJ0yOi8yZTqcW8HyK/IVXH+fqC1NsQVEL5yYhnaCCVvx
24
- ShG2g5rh48kNN5CsIQb87WP3J/YnsXhIz3+dwJPmLt+QuWE6sI1NkGWHQFECAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUEmUqvmku
26
- azMk41rHySinmAUmae8wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwMjEwMTcwNzMwWhcN
15
+ MjMwMjEwMTcwNzMwWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCjKYHi
17
+ pAa4sq7iRTV7XB75YoxA+OKNh8nqMnSNeOw3lJ3UYW4ulFKOvD+2LddRH1DD3CrP
18
+ 0AYx2MI56Pu/UgtLZkze5pMf6CqLn8MCvonuSjNTj01bDi+fq8xAKu85LwG3xVP3
19
+ kqMCppRwlf7wtkc8tkC6vjc+GhggwTda8z7quTtiVpy2r3JJUs4QXDTqzfKNC+la
20
+ dueojDyI3m6mmaGyoT3k3LpTc0Vjg3JeiYsyWxGvK6R0JWqZiv7uwlxtzvuK/v5h
21
+ 1iMhim2hB/6pFZalAddVfzvPCQiRek7nDKxPgvMDze2GIzvrpOapntu18nC1FYnO
22
+ kAC8vIStaFxmYzZYMB5h8C5q2xhJ3u6uGdyhpMuwvQOkhq4jdvI8SJ04eBhQH0DI
23
+ ta8OyiPQoqwegXXhBGU35/yZczB6QFswBaw7jTFcya1YKFDvXmLWOl0g6UOFnl66
24
+ QXnaC/xwRBh48VGALRPCgHuSf0Ag5LP+rv52s6Fbbs5B6syj059gNLO+DKkCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU/5KH1BIb
26
+ QxZC8hteME4fAEsveW8wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAUyL0Sh3Ld6sK0fldg057McECcaOIyB/nKJApz1er
29
- ET9qYthBvhpcaNNo19NFuf9W9UyaE6RI9Eb07DvGYyVP/b0yTrIKyzXzSAwFmrek
30
- 3VUVAhdqOIrIrf16Zpm4NoOGTOst+6sXZ9KQ52DPPwxdLbRCL7HkUFBMIVf2x2LV
31
- XflA8IOlSUPH2vmHJnE0yfs7Lzd5+xYpKeOzQSHo0p+SBDzIim3mOZ3ryf4IZQhv
32
- wh0fYGJ2iC/w3rPA78Awm6FNPlGCPjgPIz4mliMicRI/sZmFQvn8+2HYWEzDDOO8
33
- zYvUB7rkjDGXYqN1Ft3N6EOuNworOFjUlcPrDFCQHf4UgPjD6Z8WbYkI9c7LWtjc
34
- HJCyl/PVyS0Srbl8IPn7JsgUCS7S02KOnVzukQ7PTc1wBlAZ4mNb7N9EOp90GP9a
35
- YSREEphg3phQsU9LV4Dlc2Id4gB3W+//c1Ek6TFieKoVemKMkbtB1lgqsEpTCfwh
36
- oNUg84DlSmZ2z9LKagBVAlDy
28
+ BgkqhkiG9w0BAQsFAAOCAYEAXGQs4E7LZmG5OckxSpsJVhHaRYXp7ZghKTbn/K6X
29
+ fEtU8x781gphdo4wNOg8XA4MGAmZTBRi+7x9JE/NmxkC8KtqMSR89ynUtlhRldkF
30
+ +4uiJNtUSn9Ya3RyfUADF7gJ9OM4WpjXbpXBLtHe+GETjwl3EfDGQ6SNiUCRRaH+
31
+ DXthsMNrME6QFQ+n2IW7E2nn6ElLACWRUA1lqyRSC6doomKS3BIOmMmZ4aBrtIlB
32
+ 3zBEnu2eXHgd2OkfIiFO+DU2wVF2cs01V41lk575rciiWKGfybmDT3+CQu3kTUHz
33
+ PkegIP3JOdHPhLsfzgycgbjOaNSEX21SDhPwmLmSng0oNn56N9Po1qFKUG0+XxvA
34
+ qkFeIsspayVS94HDHTs68XQx4XsZJHfV/H9Sw331V1H7QJkXdbmEDVHXa5D+lI4g
35
+ m7hEq9GAsvYejQNMhcxlvi+e70d3QiEg+2SVsBHaUGURzv0LjycCOjOaUxQA5swC
36
+ JKGINad8xoEL7XIDoO6EnBcY
37
37
  -----END CERTIFICATE-----
38
- date: 2022-01-15 00:00:00.000000000 Z
38
+ date: 2022-02-10 00:00:00.000000000 Z
39
39
  dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: c32
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.3.0
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.3'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.3.0
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.3'
40
60
  - !ruby/object:Gem::Dependency
41
61
  name: dxlite
42
62
  requirement: !ruby/object:Gem::Requirement
43
63
  requirements:
44
64
  - - "~>"
45
65
  - !ruby/object:Gem::Version
46
- version: '0.4'
66
+ version: '0.5'
47
67
  - - ">="
48
68
  - !ruby/object:Gem::Version
49
- version: 0.4.1
69
+ version: 0.5.1
50
70
  type: :runtime
51
71
  prerelease: false
52
72
  version_requirements: !ruby/object:Gem::Requirement
53
73
  requirements:
54
74
  - - "~>"
55
75
  - !ruby/object:Gem::Version
56
- version: '0.4'
76
+ version: '0.5'
57
77
  - - ">="
58
78
  - !ruby/object:Gem::Version
59
- version: 0.4.1
79
+ version: 0.5.1
60
80
  description:
61
81
  email: digital.robertson@gmail.com
62
82
  executables: []
@@ -76,7 +96,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
96
  requirements:
77
97
  - - ">="
78
98
  - !ruby/object:Gem::Version
79
- version: 2.5.3
99
+ version: 3.0.2
80
100
  required_rubygems_version: !ruby/object:Gem::Requirement
81
101
  requirements:
82
102
  - - ">="
metadata.gz.sig CHANGED
Binary file