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