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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/dir-to-xml.rb +166 -210
- data.tar.gz.sig +0 -0
- metadata +49 -29
- 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: c0d019bf13b52e143181d63f55ecb59d4afd6d0528316f8eabc98dad63d7701e
|
4
|
+
data.tar.gz: 706dfd39b2ec9a414394374736bc390a9fc786243181ccdc65ca4c7b42f16f90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@activity = {new: [], modified: []}
|
32
|
+
class DirToXML
|
33
|
+
using ColouredText
|
34
|
+
include RXFHelperModule
|
20
35
|
|
21
|
-
|
36
|
+
attr_reader :new_files, :deleted_files, :dx, :latest_files, :latest_file
|
22
37
|
|
23
|
-
|
24
|
-
|
25
|
-
@object = @a
|
38
|
+
def initialize(obj= '.', index: 'dir.json', recursive: false,
|
39
|
+
verbose: true, debug: false)
|
26
40
|
|
27
|
-
|
41
|
+
if verbose then
|
42
|
+
puts
|
43
|
+
puts 'DirToXML at your service!'.highlight
|
44
|
+
puts
|
45
|
+
puts
|
28
46
|
end
|
29
47
|
|
30
|
-
|
48
|
+
@index, @recursive, @verbose, @debug = index, recursive, verbose, debug
|
31
49
|
|
32
|
-
|
50
|
+
if File.basename(obj) == index then
|
33
51
|
|
34
|
-
|
35
|
-
|
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
|
-
|
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
|
-
|
56
|
-
puts 'before Dir.glob'
|
57
|
-
puts '_path: ' + File.join(path, "*").inspect
|
58
|
-
end
|
65
|
+
end
|
59
66
|
|
60
|
-
|
61
|
-
|
67
|
+
def activity()
|
68
|
+
{
|
69
|
+
new: @new_files,
|
70
|
+
deleted: @deleted_files,
|
71
|
+
modified: @latest_files
|
72
|
+
}
|
73
|
+
end
|
62
74
|
|
63
|
-
|
75
|
+
alias changes activity
|
64
76
|
|
65
|
-
|
77
|
+
def directories()
|
78
|
+
@dx.all.select {|x| x.type == 'directory'}.map(&:name)
|
79
|
+
end
|
66
80
|
|
67
|
-
|
81
|
+
def find_all_by_ext(s)
|
82
|
+
@dx.find_all_by_ext(s)
|
83
|
+
end
|
68
84
|
|
69
|
-
|
85
|
+
def find_by_filename(s)
|
86
|
+
@dx.find_by_filename(s)
|
87
|
+
end
|
70
88
|
|
71
|
-
|
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
|
-
|
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
|
-
|
97
|
+
def new_scan()
|
107
98
|
|
108
|
-
|
99
|
+
t = Time.now
|
100
|
+
records = scan_dir @path
|
101
|
+
puts 'new_scan() records: ' + records.inspect if @debug
|
109
102
|
|
110
|
-
|
103
|
+
a = records.map {|x| x[:name]}
|
111
104
|
|
112
|
-
|
105
|
+
if FileX.exists? File.join(@path, @index) then
|
113
106
|
|
114
|
-
|
107
|
+
@dx = read()
|
115
108
|
|
116
|
-
|
117
|
-
|
118
|
-
- %w(dir.xml dir.json)
|
109
|
+
old_records = @dx.to_a
|
110
|
+
a2 = old_records.map {|x| x[:name]}
|
119
111
|
|
120
|
-
|
121
|
-
|
122
|
-
|
112
|
+
# delete any old files
|
113
|
+
#
|
114
|
+
@deleted_files = a2 - a
|
123
115
|
|
124
|
-
|
116
|
+
if @deleted_files.any? then
|
125
117
|
|
126
|
-
|
127
|
-
|
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
|
-
|
132
|
-
|
133
|
-
|
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
|
-
|
132
|
+
file[:mtime] > dtx_last_modified or file[:type] == 'directory'
|
137
133
|
|
138
|
-
|
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
|
-
|
139
|
+
# Add any new files
|
140
|
+
#
|
141
|
+
@new_files = a - a2
|
144
142
|
|
145
|
-
|
143
|
+
if @new_files.any? then
|
146
144
|
|
147
|
-
|
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
|
-
|
150
|
+
@dx.last_modified = Time.now.to_s if @deleted_files.any?
|
155
151
|
|
156
|
-
|
152
|
+
else
|
157
153
|
|
158
|
-
|
154
|
+
@dx = new_index(records)
|
155
|
+
find_latest(records)
|
159
156
|
|
160
|
-
|
157
|
+
end
|
161
158
|
|
162
|
-
|
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
|
164
|
+
def read(index=@index)
|
169
165
|
|
170
|
-
|
166
|
+
t = Time.now
|
167
|
+
puts 'read path: ' + File.join(@path, index).inspect if @Debug
|
171
168
|
|
172
|
-
|
173
|
-
pattern_match = x[:name] =~ pattern
|
169
|
+
dx = DxLite.new(File.join(@path, index), autosave: true)
|
174
170
|
|
175
|
-
|
176
|
-
|
171
|
+
t2 = Time.now - t
|
172
|
+
puts ("%s read in %.2f seconds" % [@index, t2]).info if @verbose
|
177
173
|
|
178
|
-
|
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
|
-
|
200
|
-
|
201
|
-
def last_modified(ext=nil)
|
178
|
+
private
|
202
179
|
|
203
|
-
|
204
|
-
@object = @a.select{|x| x[:ext][/#{ext}/] or x[:type] == 'directory'}
|
205
|
-
end
|
180
|
+
def find_latest(files)
|
206
181
|
|
207
|
-
|
182
|
+
@latest_files = files.sort_by {|file| file[:mtime]}
|
183
|
+
puts '@latest_files: ' + @latest_files.inspect if @debug
|
208
184
|
|
209
|
-
|
185
|
+
@latest_file = @latest_files[-1]
|
186
|
+
@latest_file[:path] = @path
|
187
|
+
puts ':@latest_file: ' + @latest_file.inspect if @debug
|
210
188
|
|
211
|
-
|
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
|
-
|
219
|
-
@dx.save File.join(@path, @index)
|
220
|
-
end
|
191
|
+
if dir_list.any? then
|
221
192
|
|
222
|
-
|
193
|
+
dir_latest = dir_list.map do |dir|
|
223
194
|
|
224
|
-
|
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
|
-
|
227
|
-
return if @object.empty?
|
200
|
+
end.reject {|_,latest| latest.nil? }.sort_by {|_, x| x[:mtime]}.last
|
228
201
|
|
229
|
-
|
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
|
-
|
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
|
-
|
238
|
-
|
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
|
-
|
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
|
-
|
214
|
+
latest_file[:path] = File.expand_path(@path)
|
215
|
+
latest_file
|
255
216
|
|
256
|
-
|
257
|
-
sort_by :mtime
|
258
|
-
end
|
217
|
+
end
|
259
218
|
|
260
|
-
|
219
|
+
else
|
220
|
+
return
|
221
|
+
end
|
261
222
|
|
262
|
-
def to_a
|
263
|
-
@object || @a
|
264
223
|
end
|
265
224
|
|
266
|
-
def
|
267
|
-
self.to_a.inject({}){|r,x| r.merge(x[:name] => x)}
|
268
|
-
end
|
225
|
+
def getfile_info(filename)
|
269
226
|
|
270
|
-
|
271
|
-
|
272
|
-
end
|
227
|
+
x = File.join(@path, filename)
|
228
|
+
puts 'x: ' + x.inspect if @debug
|
273
229
|
|
274
|
-
|
275
|
-
|
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
|
-
|
241
|
+
def new_index(records)
|
279
242
|
|
280
|
-
|
243
|
+
dx = DxLite.new('directory[title, file_path, ' +
|
244
|
+
'last_modified, description]/file(name, ' +
|
245
|
+
'type, ext, mtime, description)')
|
281
246
|
|
282
|
-
|
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
|
-
|
285
|
-
@dx.import a
|
286
|
-
@dx.save File.join(@path, @index)
|
254
|
+
return dx
|
287
255
|
|
288
256
|
end
|
289
257
|
|
290
|
-
def
|
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
|
-
|
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.
|
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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-
|
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.
|
66
|
+
version: '0.5'
|
47
67
|
- - ">="
|
48
68
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.
|
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.
|
76
|
+
version: '0.5'
|
57
77
|
- - ">="
|
58
78
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.
|
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:
|
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
|