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