dir-to-xml 1.0.8 → 1.1.3

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/dir-to-xml.rb +166 -210
  4. data.tar.gz.sig +0 -0
  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: c0d019bf13b52e143181d63f55ecb59d4afd6d0528316f8eabc98dad63d7701e
4
+ data.tar.gz: 706dfd39b2ec9a414394374736bc390a9fc786243181ccdc65ca4c7b42f16f90
5
5
  SHA512:
6
- metadata.gz: 06ee8ffb01712045e85717db1c74f67ccd68e526ee74e18d1905800eea6d55d75e634badb9f13b00f36d5eac1204d1ea62961db5f84ad03ae49bd9f1c36dae86
7
- data.tar.gz: 8243bee16134b8a3d41de944b37eff432fcd7b785f83703537ff156d4e6f127cc17c59c858e957b942fc21e24b1805d24fa0608e1f539f7226d3a16f0f4235b4
6
+ metadata.gz: 761c9d38635ad4b9391a8b532713c2c8aa0c3b7e08172d811bf60772135392e4e8fbfc477239083cae926255c005aa689963d03b13aa5965b6a32804f7270067
7
+ data.tar.gz: d067ed9b1577125f7bc3b6cf8527531f9ced333a687486e65576307b4462d8ce27f2216042121147d64561e107e5f97d18d82b42a3e6cb4e732ddcbd4f1e9b61
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/dir-to-xml.rb CHANGED
@@ -2,308 +2,264 @@
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
34
+ include RXFHelperModule
20
35
 
21
- if x.is_a? DxLite then
36
+ attr_reader :new_files, :deleted_files, :dx, :latest_files, :latest_file
22
37
 
23
- @dx = x
24
- @a = @dx.to_a
25
- @object = @a
38
+ def initialize(obj= '.', index: 'dir.json', recursive: false,
39
+ verbose: true, debug: false)
26
40
 
27
- return self
41
+ if verbose then
42
+ puts
43
+ puts 'DirToXML at your service!'.highlight
44
+ puts
45
+ puts
28
46
  end
29
47
 
30
- path = x
48
+ @index, @recursive, @verbose, @debug = index, recursive, verbose, debug
31
49
 
32
- @path, @index, @recursive = path, index, recursive
50
+ if File.basename(obj) == index then
33
51
 
34
- raise "Directory not found." unless File.exists? path
35
- filepath = File.join(path, index)
52
+ #read the index file
53
+ @path = File.dirname(obj)
54
+ puts 'intialize() @path: ' + @path.inspect if @debug
36
55
 
37
-
38
- if File.exists? filepath then
39
-
40
- @dx = DxLite.new(File.join(@path, @index), debug: @debug)
56
+ @dx = read(obj)
41
57
 
42
58
  else
59
+ @path = obj
60
+ puts 'intialize() @path: ' + @path.inspect if @debug
43
61
 
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
-
62
+ new_scan()
53
63
  end
54
64
 
55
- if @debug then
56
- puts 'before Dir.glob'
57
- puts '_path: ' + File.join(path, "*").inspect
58
- end
65
+ end
59
66
 
60
- a = Dir.glob(File.join(path, "*")).map{|x| File.basename(x) }.sort
61
- puts 'a: ' + a.inspect if @debug
67
+ def activity()
68
+ {
69
+ new: @new_files,
70
+ deleted: @deleted_files,
71
+ modified: @latest_files
72
+ }
73
+ end
62
74
 
63
- a.delete index
75
+ alias changes activity
64
76
 
65
- return if a.empty?
77
+ def directories()
78
+ @dx.all.select {|x| x.type == 'directory'}.map(&:name)
79
+ end
66
80
 
67
- a2 = a.inject([]) do |r, filename|
81
+ def find_all_by_ext(s)
82
+ @dx.find_all_by_ext(s)
83
+ end
68
84
 
69
- x = File.join(path, filename)
85
+ def find_by_filename(s)
86
+ @dx.find_by_filename(s)
87
+ end
70
88
 
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
89
+ def latest()
83
90
 
91
+ if @latest_file then
92
+ File.join(@latest_file[:path], @latest_file[:name])
84
93
  end
85
94
 
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
-
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
100
-
101
- if Time.parse(@dx.last_modified) >= file[:mtime] then
102
- @a = @dx.to_a
103
- return
104
- end
95
+ end
105
96
 
106
- end
97
+ def new_scan()
107
98
 
108
- puts 'stage 2' if @debug
99
+ t = Time.now
100
+ records = scan_dir @path
101
+ puts 'new_scan() records: ' + records.inspect if @debug
109
102
 
110
- if @dx and @dx.respond_to? :last_modified then
103
+ a = records.map {|x| x[:name]}
111
104
 
112
- if @dx.last_modified.length > 0 then
105
+ if FileX.exists? File.join(@path, @index) then
113
106
 
114
- t = Time.parse(@dx.last_modified)
107
+ @dx = read()
115
108
 
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)
109
+ old_records = @dx.to_a
110
+ a2 = old_records.map {|x| x[:name]}
119
111
 
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
112
+ # delete any old files
113
+ #
114
+ @deleted_files = a2 - a
123
115
 
124
- else
116
+ if @deleted_files.any? then
125
117
 
126
- new_files = a2.select {|x| x[:type] == 'file'}.map {|x| x[:name]}
127
- modified = []
118
+ @deleted_files.each do |filename|
119
+ record = @dx.find_by_name filename
120
+ record.delete if record
121
+ end
128
122
 
129
123
  end
130
124
 
131
- @activity = {modified: modified, new: new_files}
132
-
133
- end
125
+ # check for newly modified files
126
+ # compare the file date with index file last modified date
127
+ #
128
+ dtx_last_modified = Time.parse(@dx.last_modified)
134
129
 
130
+ select_records = records.select do |file|
135
131
 
136
- command = File.exists?(File.join(path, index)) ? :refresh : :dxify
132
+ file[:mtime] > dtx_last_modified or file[:type] == 'directory'
137
133
 
138
- self.method(command).call a2
139
- puts '@dx: ' + @dx.inspect if @debug
140
- puts '@dx.last_modified: ' + @dx.last_modified.inspect if @debug
134
+ end
141
135
 
136
+ puts 'select_records: ' + select_records.inspect if @debug
137
+ find_latest(select_records) if select_records.any?
142
138
 
143
- @a = @dx.to_a
139
+ # Add any new files
140
+ #
141
+ @new_files = a - a2
144
142
 
145
- if recursive then
143
+ if @new_files.any? then
146
144
 
147
- self.filter_by(type: :directory).to_a.each do |x|
145
+ @dx.last_modified = Time.now.to_s
146
+ @dx.import @new_files.map {|filename| getfile_info(filename) }
148
147
 
149
- path2 = File.join(path, x[:name])
150
- DirToXML.new(path2, recursive: true)
151
148
  end
152
- end
153
149
 
154
- @object = @a
150
+ @dx.last_modified = Time.now.to_s if @deleted_files.any?
155
151
 
156
- end
152
+ else
157
153
 
158
- def directories(&blk)
154
+ @dx = new_index(records)
155
+ find_latest(records)
159
156
 
160
- self.to_dx.all.select {|x| x.type == 'directory'}.map(&:name)
157
+ end
161
158
 
162
- end
159
+ t2 = Time.now - t
160
+ puts ("directory scanned in %.2f seconds" % t2).info if @verbose
163
161
 
164
- def filter(&blk)
165
- @dx.filter &blk
166
162
  end
167
163
 
168
- def filter_by(pattern=/.*/, type: nil, ext: nil, &blk)
164
+ def read(index=@index)
169
165
 
170
- @object = @a.select do |x|
166
+ t = Time.now
167
+ puts 'read path: ' + File.join(@path, index).inspect if @Debug
171
168
 
172
- puts '_x: ' + x.inspect if @debug
173
- pattern_match = x[:name] =~ pattern
169
+ dx = DxLite.new(File.join(@path, index), autosave: true)
174
170
 
175
- type_match = type ? x[:type] == type.to_s : true
176
- ext_match = ext ? x[:ext] == ext.to_s : true
171
+ t2 = Time.now - t
172
+ puts ("%s read in %.2f seconds" % [@index, t2]).info if @verbose
177
173
 
178
- pattern_match and type_match and ext_match
174
+ return dx
179
175
 
180
- end
181
-
182
- return if @object.empty?
183
-
184
- @dx = DxLite.new
185
- @dx.import @object
186
-
187
- block_given? ? @dx.all.map(&:name).each(&blk) : self
188
-
189
- end
190
-
191
- def find_all_by_ext(s)
192
- @dx.all.select {|item| item.ext == s}
193
- end
194
-
195
- def find_by_filename(s)
196
- @dx.all.find {|item| item.name == s}
197
176
  end
198
177
 
199
- alias find_by_file find_by_filename
200
-
201
- def last_modified(ext=nil)
178
+ private
202
179
 
203
- if ext and ext != '*' then
204
- @object = @a.select{|x| x[:ext][/#{ext}/] or x[:type] == 'directory'}
205
- end
180
+ def find_latest(files)
206
181
 
207
- a = sort_by :mtime
182
+ @latest_files = files.sort_by {|file| file[:mtime]}
183
+ puts '@latest_files: ' + @latest_files.inspect if @debug
208
184
 
209
- lm = a[-1]
185
+ @latest_file = @latest_files[-1]
186
+ @latest_file[:path] = @path
187
+ puts ':@latest_file: ' + @latest_file.inspect if @debug
210
188
 
211
- if @recursive and lm[:type] == 'directory' then
212
- return [lm, DirToXML.new(File.join(@path, lm[:name])).last_modified]
213
- else
214
- lm
215
- end
216
- end
189
+ dir_list = directories()
217
190
 
218
- def save()
219
- @dx.save File.join(@path, @index)
220
- end
191
+ if dir_list.any? then
221
192
 
222
- def select_by_ext(ext, &blk)
193
+ dir_latest = dir_list.map do |dir|
223
194
 
224
- @a = @dx.to_a unless @a
195
+ puts 'dir: ' + dir.inspect if @debug
196
+ dtx2 = DirToXML.new(File.join(@path, dir), index: @index,
197
+ recursive: true, verbose: false, debug: @debug)
198
+ [dir, dtx2.latest_file]
225
199
 
226
- @object = ext != '*' ? @a.select{|x| x[:ext][/#{ext}$/]} : @a
227
- return if @object.empty?
200
+ end.reject {|_,latest| latest.nil? }.sort_by {|_, x| x[:mtime]}.last
228
201
 
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
202
+ puts 'dir_latest: ' + dir_latest.inspect if @debug
234
203
 
235
- def sort_by(sym)
204
+ @latest_file = if dir_latest and \
205
+ ((dir_latest.last[:mtime] > latest_file[:mtime]) \
206
+ or latest_file.nil? \
207
+ or latest_file[:type] == 'directory') then
236
208
 
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
209
+ dir_latest.last[:path] = File.expand_path(File.join(@path, dir_latest.first))
210
+ dir_latest.last
249
211
 
250
- puts '@object: ' + @object.inspect if @debug
251
- @object = @a = @dx.to_a if @object.nil?
252
- proc1.call(@object)
212
+ elsif latest_file and latest_file[:type] == 'file'
253
213
 
254
- end
214
+ latest_file[:path] = File.expand_path(@path)
215
+ latest_file
255
216
 
256
- def sort_by_last_modified()
257
- sort_by :mtime
258
- end
217
+ end
259
218
 
260
- alias sort_by_lastmodified sort_by_last_modified
219
+ else
220
+ return
221
+ end
261
222
 
262
- def to_a
263
- @object || @a
264
223
  end
265
224
 
266
- def to_h()
267
- self.to_a.inject({}){|r,x| r.merge(x[:name] => x)}
268
- end
225
+ def getfile_info(filename)
269
226
 
270
- def to_xml(options=nil)
271
- @dx.to_xml options
272
- end
227
+ x = File.join(@path, filename)
228
+ puts 'x: ' + x.inspect if @debug
273
229
 
274
- def to_dynarex
275
- @dx.clone
230
+ begin
231
+ {
232
+ name: filename,
233
+ type: File::ftype(x),
234
+ ext: File.extname(x),
235
+ mtime: File::mtime(x),
236
+ description: ''
237
+ }
238
+ end
276
239
  end
277
240
 
278
- alias to_dx to_dynarex
241
+ def new_index(records)
279
242
 
280
- private
243
+ dx = DxLite.new('directory[title, file_path, ' +
244
+ 'last_modified, description]/file(name, ' +
245
+ 'type, ext, mtime, description)')
281
246
 
282
- def dxify(a)
247
+ puts 'before title' if @debug
248
+ dx.title = 'Index of ' + @path
249
+ dx.file_path = @path
250
+ dx.last_modified = Time.now
251
+ dx.import records.reverse
252
+ dx.save File.join(@path, @index)
283
253
 
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)
254
+ return dx
287
255
 
288
256
  end
289
257
 
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
258
+ def scan_dir(path)
305
259
 
306
- dxify(cur_files)
260
+ a = DirX.glob(File.join(path, "*")).map {|x| File.basename(x) }
261
+ a.delete @index
262
+ a.map {|filename| getfile_info(filename) }
307
263
 
308
264
  end
309
265
 
data.tar.gz.sig CHANGED
Binary file
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.3
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-15 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.2
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.2
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