dir-to-xml 1.0.8 → 1.1.3

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 +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