dir-to-xml 1.0.8 → 1.1.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/dir-to-xml.rb +162 -211
- data.tar.gz.sig +2 -3
- 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: 6fd07741c205b9a10af1d80c5f9a298b36337acbe4fa6e3bfc15e53164eee0b8
|
4
|
+
data.tar.gz: 51f7acd3e7bc86fed507088781e576478ef846828ac050d35fbd30b0111aa738
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
@dx = nil
|
19
|
-
@activity = {new: [], modified: []}
|
32
|
+
class DirToXML
|
33
|
+
using ColouredText
|
20
34
|
|
21
|
-
|
35
|
+
attr_reader :new_files, :deleted_files, :dx, :latest_files, :latest_file
|
22
36
|
|
23
|
-
|
24
|
-
|
25
|
-
@object = @a
|
37
|
+
def initialize(obj= '.', index: 'dir.json', recursive: false,
|
38
|
+
verbose: true, debug: false)
|
26
39
|
|
27
|
-
|
40
|
+
if verbose then
|
41
|
+
puts
|
42
|
+
puts 'DirToXML at your service!'.highlight
|
43
|
+
puts
|
44
|
+
puts
|
28
45
|
end
|
29
46
|
|
30
|
-
|
47
|
+
@index, @recursive, @verbose, @debug = index, recursive, verbose, debug
|
31
48
|
|
32
|
-
|
49
|
+
if File.basename(obj) == index then
|
33
50
|
|
34
|
-
|
35
|
-
|
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
|
-
|
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
|
-
|
56
|
-
puts 'before Dir.glob'
|
57
|
-
puts '_path: ' + File.join(path, "*").inspect
|
58
|
-
end
|
64
|
+
end
|
59
65
|
|
60
|
-
|
61
|
-
|
66
|
+
def activity()
|
67
|
+
{
|
68
|
+
new: @new_files,
|
69
|
+
deleted: @deleted_files,
|
70
|
+
modified: @latest_files
|
71
|
+
}
|
72
|
+
end
|
62
73
|
|
63
|
-
|
74
|
+
alias changes activity
|
64
75
|
|
65
|
-
|
76
|
+
def directories()
|
77
|
+
@dx.all.select {|x| x.type == 'directory'}.map(&:name)
|
78
|
+
end
|
66
79
|
|
67
|
-
|
80
|
+
def find_all_by_ext(s)
|
81
|
+
@dx.find_all_by_ext(s)
|
82
|
+
end
|
68
83
|
|
69
|
-
|
84
|
+
def find_by_filename(s)
|
85
|
+
@dx.find_by_filename(s)
|
86
|
+
end
|
70
87
|
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
102
|
-
|
103
|
-
|
104
|
-
end
|
98
|
+
t = Time.now
|
99
|
+
records = scan_dir @path
|
100
|
+
puts 'new_scan() records: ' + records.inspect if @debug
|
105
101
|
|
106
|
-
|
102
|
+
a = records.map {|x| x[:name]}
|
107
103
|
|
108
|
-
|
104
|
+
if File.exists? File.join(@path, @index) then
|
109
105
|
|
110
|
-
|
106
|
+
@dx = read()
|
111
107
|
|
112
|
-
|
108
|
+
old_records = @dx.to_a
|
109
|
+
a2 = old_records.map {|x| x[:name]}
|
113
110
|
|
114
|
-
|
111
|
+
# delete any old files
|
112
|
+
#
|
113
|
+
@deleted_files = a2 - a
|
115
114
|
|
116
|
-
|
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
|
-
|
121
|
-
|
122
|
-
|
117
|
+
@deleted_files.each do |filename|
|
118
|
+
record = @dx.find_by_name filename
|
119
|
+
record.delete if record
|
120
|
+
end
|
123
121
|
|
124
|
-
|
122
|
+
end
|
125
123
|
|
126
|
-
|
127
|
-
|
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
|
-
|
132
|
-
|
133
|
-
end
|
133
|
+
find_latest(select_records)
|
134
134
|
|
135
|
+
# Add any new files
|
136
|
+
#
|
137
|
+
@new_files = a - a2
|
135
138
|
|
136
|
-
|
139
|
+
if @new_files.any? then
|
137
140
|
|
138
|
-
|
139
|
-
|
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
|
-
|
146
|
+
@dx.last_modified = Time.now.to_s if @deleted_files.any?
|
144
147
|
|
145
|
-
|
148
|
+
else
|
146
149
|
|
147
|
-
|
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
|
-
|
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
|
160
|
+
def read(index=@index)
|
159
161
|
|
160
|
-
|
162
|
+
t = Time.now
|
163
|
+
puts 'read path: ' + File.join(@path, index).inspect if @Debug
|
161
164
|
|
162
|
-
|
165
|
+
dx = DxLite.new(File.join(@path, index), autosave: true)
|
163
166
|
|
164
|
-
|
165
|
-
@
|
166
|
-
end
|
167
|
+
t2 = Time.now - t
|
168
|
+
puts ("%s read in %.2f seconds" % [@index, t2]).info if @verbose
|
167
169
|
|
168
|
-
|
170
|
+
return dx
|
169
171
|
|
170
|
-
|
172
|
+
end
|
171
173
|
|
172
|
-
|
173
|
-
pattern_match = x[:name] =~ pattern
|
174
|
+
private
|
174
175
|
|
175
|
-
|
176
|
-
ext_match = ext ? x[:ext] == ext.to_s : true
|
176
|
+
def find_latest(files)
|
177
177
|
|
178
|
-
|
178
|
+
@latest_files = files.sort_by {|file| file[:mtime]}
|
179
|
+
puts '@latest_files: ' + @latest_files.inspect if @debug
|
179
180
|
|
180
|
-
|
181
|
+
@latest_file = @latest_files[-1]
|
182
|
+
puts ':@latest_file: ' + @latest_file.inspect if @debug
|
181
183
|
|
182
|
-
|
184
|
+
dir_list = directories()
|
183
185
|
|
184
|
-
|
185
|
-
@dx.import @object
|
186
|
+
if dir_list.any? then
|
186
187
|
|
187
|
-
|
188
|
+
dir_latest = dir_list.map do |dir|
|
188
189
|
|
189
|
-
|
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
|
-
|
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
|
-
|
196
|
-
@dx.all.find {|item| item.name == s}
|
197
|
-
end
|
197
|
+
puts 'dir_latest: ' + dir_latest.inspect if @debug
|
198
198
|
|
199
|
-
|
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
|
-
|
204
|
+
dir_latest.last[:path] = File.join(@path, dir_latest.first)
|
205
|
+
dir_latest.last
|
202
206
|
|
203
|
-
|
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
|
-
|
209
|
+
latest_file[:path] = @path
|
210
|
+
latest_file
|
208
211
|
|
209
|
-
|
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
|
-
|
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
|
257
|
-
sort_by :mtime
|
258
|
-
end
|
220
|
+
def getfile_info(filename)
|
259
221
|
|
260
|
-
|
222
|
+
x = File.join(@path, filename)
|
223
|
+
puts 'x: ' + x.inspect if @debug
|
261
224
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
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
|
-
|
236
|
+
def new_index(records)
|
279
237
|
|
280
|
-
|
238
|
+
dx = DxLite.new('directory[title, file_path, ' +
|
239
|
+
'last_modified, description]/file(name, ' +
|
240
|
+
'type, ext, mtime, description)')
|
281
241
|
|
282
|
-
|
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
|
-
|
285
|
-
@dx.import a
|
286
|
-
@dx.save File.join(@path, @index)
|
249
|
+
return dx
|
287
250
|
|
288
251
|
end
|
289
252
|
|
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
|
253
|
+
def scan_dir(path)
|
305
254
|
|
306
|
-
|
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
|
-
|
2
|
-
|
3
|
-
VI�v79���I���^�LE��e#�X:�Z�5v5�g[L��դ�۹"
|
1
|
+
Ha>ݏA��6������&�z���ħ�|J����|_��H�0z����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
|
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
|
-
|
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-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.
|
66
|
+
version: '0.5'
|
47
67
|
- - ">="
|
48
68
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.
|
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.
|
76
|
+
version: '0.5'
|
57
77
|
- - ">="
|
58
78
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.
|
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:
|
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
|