dir-to-xml 1.0.7 → 1.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3383c2c66c62fb7de0316da47639a9416de37ac18907c12dbba947603237ffa
4
- data.tar.gz: 5886daf349f5ac8b0fa13c1ddaa37cf76890a7a8a9117de5495f01642f2fe516
3
+ metadata.gz: bfe35ab7508e85463cf2aeb0105e30e38372912a8a47f7d90a298caa702ff0dd
4
+ data.tar.gz: fff6e43ea00d6a697e0b4aaa7aedbd5ef7d38645756b01329b0f9095edea3b11
5
5
  SHA512:
6
- metadata.gz: 978914ab049ad0660a667295c63bf994f26358fd975e10fbd7390a063322caee77a30d645bfc672598da58b8d3ed87385412dda8643d18809b55424669513c75
7
- data.tar.gz: ce2768f88448e621d886f01aadc6964b16a1d9deab82879482e56d95e72dec36d724cc6a557e0b05b376e69e22b88a136624cff7b3536b39fdc7b8513edc46b9
6
+ metadata.gz: 06ee8ffb01712045e85717db1c74f67ccd68e526ee74e18d1905800eea6d55d75e634badb9f13b00f36d5eac1204d1ea62961db5f84ad03ae49bd9f1c36dae86
7
+ data.tar.gz: 8243bee16134b8a3d41de944b37eff432fcd7b785f83703537ff156d4e6f127cc17c59c858e957b942fc21e24b1805d24fa0608e1f539f7226d3a16f0f4235b4
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/dir-to-xml.rb CHANGED
@@ -8,39 +8,39 @@ require 'dxlite'
8
8
  class DirToXML
9
9
 
10
10
  attr_reader :dx, :activity
11
-
11
+
12
12
  def initialize(x= '.', recursive: false, index: 'dir.xml', debug: false)
13
-
13
+
14
14
  super()
15
-
15
+
16
16
  @debug = debug
17
-
17
+
18
18
  @dx = nil
19
19
  @activity = {new: [], modified: []}
20
-
20
+
21
21
  if x.is_a? DxLite then
22
-
23
- @dx = x
24
- @a = @dx.to_a
25
- @object = @a
26
-
22
+
23
+ @dx = x
24
+ @a = @dx.to_a
25
+ @object = @a
26
+
27
27
  return self
28
28
  end
29
-
29
+
30
30
  path = x
31
-
31
+
32
32
  @path, @index, @recursive = path, index, recursive
33
-
33
+
34
34
  raise "Directory not found." unless File.exists? path
35
35
  filepath = File.join(path, index)
36
-
37
-
36
+
37
+
38
38
  if File.exists? filepath then
39
-
39
+
40
40
  @dx = DxLite.new(File.join(@path, @index), debug: @debug)
41
-
41
+
42
42
  else
43
-
43
+
44
44
  @dx = DxLite.new('directory[title, file_path, last_modified, ' + \
45
45
  'description]/file(name, type, ext, ctime, mtime, atime, ' + \
46
46
  'description, owner, group, permissions)')
@@ -49,19 +49,25 @@ class DirToXML
49
49
  @dx.title = 'Index of ' + File.expand_path(@path)
50
50
  @dx.file_path = File.expand_path(@path)
51
51
  @dx.last_modified = ''
52
-
53
- end
54
-
55
- puts 'before Dir.glob' if @debug
56
-
52
+
53
+ end
54
+
55
+ if @debug then
56
+ puts 'before Dir.glob'
57
+ puts '_path: ' + File.join(path, "*").inspect
58
+ end
59
+
57
60
  a = Dir.glob(File.join(path, "*")).map{|x| File.basename(x) }.sort
58
-
61
+ puts 'a: ' + a.inspect if @debug
62
+
59
63
  a.delete index
60
64
 
65
+ return if a.empty?
66
+
61
67
  a2 = a.inject([]) do |r, filename|
62
68
 
63
69
  x = File.join(path, filename)
64
-
70
+
65
71
  begin
66
72
  r << {
67
73
  name: filename,
@@ -75,64 +81,67 @@ class DirToXML
75
81
  r
76
82
  end
77
83
 
78
- end
79
-
84
+ end
85
+
80
86
  # has the directory been modified since last time?
81
87
  #
82
88
  if @dx and @dx.respond_to? :last_modified and \
83
89
  @dx.last_modified.length > 0 then
84
-
90
+
85
91
  puts 'nothing to do' if @debug
86
-
92
+ puts 'a2: ' + a2.inspect if @debug
87
93
  file = a2.max_by {|x| x[:mtime]}
88
-
94
+
89
95
  if @debug then
90
- puts 'file: ' + file.inspect
96
+ puts 'file: ' + file.inspect
91
97
  puts 'd1: ' + Time.parse(@dx.last_modified).inspect
92
98
  puts 'd2: ' + (file[:mtime]).inspect
93
99
  end
94
-
95
- return if Time.parse(@dx.last_modified) >= file[:mtime]
96
-
97
- end
98
-
99
- puts 'stage 2'
100
-
100
+
101
+ if Time.parse(@dx.last_modified) >= file[:mtime] then
102
+ @a = @dx.to_a
103
+ return
104
+ end
105
+
106
+ end
107
+
108
+ puts 'stage 2' if @debug
109
+
101
110
  if @dx and @dx.respond_to? :last_modified then
102
-
111
+
103
112
  if @dx.last_modified.length > 0 then
104
-
113
+
105
114
  t = Time.parse(@dx.last_modified)
106
-
115
+
107
116
  # find the most recently modified cur_files
108
117
  recent = a2.select {|x| x[:mtime] > t }.map {|x| x[:name]} \
109
118
  - %w(dir.xml dir.json)
110
-
119
+
111
120
  # is it a new file or recently modified?
112
121
  new_files = recent - @dx.to_a.map {|x| x[:name]}
113
122
  modified = recent - new_files
114
-
123
+
115
124
  else
116
-
125
+
117
126
  new_files = a2.select {|x| x[:type] == 'file'}.map {|x| x[:name]}
118
127
  modified = []
119
-
128
+
120
129
  end
121
-
130
+
122
131
  @activity = {modified: modified, new: new_files}
123
-
132
+
124
133
  end
125
-
134
+
126
135
 
127
136
  command = File.exists?(File.join(path, index)) ? :refresh : :dxify
128
137
 
129
138
  self.method(command).call a2
130
139
  puts '@dx: ' + @dx.inspect if @debug
131
140
  puts '@dx.last_modified: ' + @dx.last_modified.inspect if @debug
132
-
133
-
134
- @a = @dx.to_a
135
-
141
+
142
+
143
+ @a = @dx.to_a
144
+
136
145
  if recursive then
137
146
 
138
147
  self.filter_by(type: :directory).to_a.each do |x|
@@ -141,21 +150,28 @@ class DirToXML
141
150
  DirToXML.new(path2, recursive: true)
142
151
  end
143
152
  end
144
-
153
+
145
154
  @object = @a
146
155
 
147
156
  end
148
-
157
+
158
+ def directories(&blk)
159
+
160
+ self.to_dx.all.select {|x| x.type == 'directory'}.map(&:name)
161
+
162
+ end
163
+
149
164
  def filter(&blk)
150
165
  @dx.filter &blk
151
166
  end
152
-
153
- def filter_by(pattern=/.*/, type: nil, ext: nil)
154
-
155
- @object = @a.select do |x|
156
-
167
+
168
+ def filter_by(pattern=/.*/, type: nil, ext: nil, &blk)
169
+
170
+ @object = @a.select do |x|
171
+
172
+ puts '_x: ' + x.inspect if @debug
157
173
  pattern_match = x[:name] =~ pattern
158
-
174
+
159
175
  type_match = type ? x[:type] == type.to_s : true
160
176
  ext_match = ext ? x[:ext] == ext.to_s : true
161
177
 
@@ -163,89 +179,108 @@ class DirToXML
163
179
 
164
180
  end
165
181
 
166
- self
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
+
167
189
  end
168
-
190
+
191
+ def find_all_by_ext(s)
192
+ @dx.all.select {|item| item.ext == s}
193
+ end
194
+
169
195
  def find_by_filename(s)
170
196
  @dx.all.find {|item| item.name == s}
171
197
  end
172
-
198
+
173
199
  alias find_by_file find_by_filename
174
-
200
+
175
201
  def last_modified(ext=nil)
176
202
 
177
203
  if ext and ext != '*' then
178
204
  @object = @a.select{|x| x[:ext][/#{ext}/] or x[:type] == 'directory'}
179
205
  end
180
-
206
+
181
207
  a = sort_by :mtime
182
208
 
183
209
  lm = a[-1]
184
-
210
+
185
211
  if @recursive and lm[:type] == 'directory' then
186
212
  return [lm, DirToXML.new(File.join(@path, lm[:name])).last_modified]
187
213
  else
188
214
  lm
189
215
  end
190
216
  end
191
-
217
+
192
218
  def save()
193
219
  @dx.save File.join(@path, @index)
194
220
  end
195
-
221
+
196
222
  def select_by_ext(ext, &blk)
197
-
223
+
198
224
  @a = @dx.to_a unless @a
199
-
225
+
200
226
  @object = ext != '*' ? @a.select{|x| x[:ext][/#{ext}$/]} : @a
201
227
  return if @object.empty?
202
-
228
+
203
229
  dx = DxLite.new
204
230
  dx.import @object
205
231
  dtx = DirToXML.new(dx)
206
232
  block_given? ? dtx.dx.all.map(&:name).each(&blk) : dtx
207
233
  end
208
-
234
+
209
235
  def sort_by(sym)
210
-
236
+
211
237
  puts 'inside sort_by' if @debug
212
- procs = [[:mtime, lambda{|obj| obj.sort_by{|x| Time.parse(x[:mtime])}}]]
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
+ ]
213
248
  proc1 = procs.assoc(sym).last
214
-
249
+
215
250
  puts '@object: ' + @object.inspect if @debug
216
251
  @object = @a = @dx.to_a if @object.nil?
217
252
  proc1.call(@object)
218
-
253
+
219
254
  end
220
-
255
+
221
256
  def sort_by_last_modified()
222
257
  sort_by :mtime
223
258
  end
224
-
259
+
225
260
  alias sort_by_lastmodified sort_by_last_modified
226
-
261
+
227
262
  def to_a
228
263
  @object || @a
229
264
  end
230
-
265
+
231
266
  def to_h()
232
267
  self.to_a.inject({}){|r,x| r.merge(x[:name] => x)}
233
268
  end
234
-
269
+
235
270
  def to_xml(options=nil)
236
271
  @dx.to_xml options
237
272
  end
238
-
273
+
239
274
  def to_dynarex
240
275
  @dx.clone
241
276
  end
242
-
277
+
243
278
  alias to_dx to_dynarex
244
-
279
+
245
280
  private
246
-
281
+
247
282
  def dxify(a)
248
-
283
+
249
284
  @dx.last_modified = Time.now.to_s if @dx.respond_to? :last_modified
250
285
  @dx.import a
251
286
  @dx.save File.join(@path, @index)
@@ -254,13 +289,13 @@ class DirToXML
254
289
 
255
290
  def refresh(cur_files)
256
291
 
257
- puts 'inside refresh' if @debug
292
+ puts 'inside refresh' if @debug
258
293
 
259
294
  prev_files = @dx.to_a
260
-
295
+
261
296
  #puts 'prev_files: ' + prev_files.inspect
262
297
  #puts 'cur_files: ' + cur_files.inspect
263
-
298
+
264
299
  cur_files.each do |x|
265
300
 
266
301
  file = prev_files.find {|item| item[:name] == x[:name] }
@@ -269,7 +304,7 @@ class DirToXML
269
304
  end
270
305
 
271
306
  dxify(cur_files)
272
-
307
+
273
308
  end
274
-
309
+
275
310
  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.7
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,7 +35,7 @@ cert_chain:
35
35
  YSREEphg3phQsU9LV4Dlc2Id4gB3W+//c1Ek6TFieKoVemKMkbtB1lgqsEpTCfwh
36
36
  oNUg84DlSmZ2z9LKagBVAlDy
37
37
  -----END CERTIFICATE-----
38
- date: 2021-02-21 00:00:00.000000000 Z
38
+ date: 2022-01-15 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: dxlite
@@ -43,20 +43,20 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.3'
46
+ version: '0.4'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.3.2
49
+ version: 0.4.1
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '0.3'
56
+ version: '0.4'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 0.3.2
59
+ version: 0.4.1
60
60
  description:
61
61
  email: digital.robertson@gmail.com
62
62
  executables: []
metadata.gz.sig CHANGED
Binary file