dir-to-xml 0.9.2 → 1.0.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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/dir-to-xml.rb +62 -18
- metadata +38 -34
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6d3847feaade1ff658c8dda0403e10b0a98c6350333b01fc4048e97d86cdcd0d
|
4
|
+
data.tar.gz: 99a0cad18703df51c90405b585a2aeab5820dca22b52d27acba5dc96dc5e1bb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37bee8d677c8a5801715d92d2d0617be2d8b559244d4f58b0d0b6fb0cef37f0e803d1a76214dcc92b09012a6fe5d15b51bfe0949feb0bdaa3af6d9e53721d515
|
7
|
+
data.tar.gz: 60d691388d4e8f46f15307b50e01f4358fad88ced3f6656d29b8be9e1fa408a256f20f641146b8d375041800952818ed752d78043b79d03e4bae93868781d979
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/dir-to-xml.rb
CHANGED
@@ -2,18 +2,20 @@
|
|
2
2
|
|
3
3
|
# file: dir-to-xml.rb
|
4
4
|
|
5
|
-
require '
|
5
|
+
require 'dxlite'
|
6
6
|
|
7
7
|
|
8
8
|
class DirToXML
|
9
9
|
|
10
|
-
attr_reader :dx
|
10
|
+
attr_reader :dx, :activity
|
11
11
|
|
12
|
-
def initialize(x= '.', recursive: false, index: 'dir.xml')
|
13
|
-
|
12
|
+
def initialize(x= '.', recursive: false, index: 'dir.xml', debug: false)
|
13
|
+
|
14
14
|
super()
|
15
15
|
|
16
|
-
|
16
|
+
@debug = debug
|
17
|
+
|
18
|
+
if x.is_a? DxLite then
|
17
19
|
|
18
20
|
@dx = x
|
19
21
|
@a = @dx.to_a
|
@@ -27,9 +29,20 @@ class DirToXML
|
|
27
29
|
@path, @index, @recursive = path, index, recursive
|
28
30
|
|
29
31
|
raise "Directory not found." unless File.exists? path
|
32
|
+
|
33
|
+
@dx = DxLite.new(File.join(@path, @index), debug: @debug)
|
30
34
|
|
35
|
+
# has the directory been modified since last time?
|
36
|
+
#
|
37
|
+
if @dx.respond_to? :last_modified and @dx.last_modified.length > 0 then
|
38
|
+
return if Time.parse(@dx.last_modified) >= \
|
39
|
+
File.mtime(File.expand_path(path))
|
40
|
+
end
|
41
|
+
|
42
|
+
puts 'before Dir.glob' if @debug
|
43
|
+
|
31
44
|
a = Dir.glob(File.join(path, "*")).map{|x| File.basename(x) }.sort
|
32
|
-
|
45
|
+
|
33
46
|
a.delete index
|
34
47
|
|
35
48
|
a2 = a.inject([]) do |r, filename|
|
@@ -50,6 +63,23 @@ class DirToXML
|
|
50
63
|
end
|
51
64
|
|
52
65
|
end
|
66
|
+
|
67
|
+
if @dx.respond_to? :last_modified and @dx.last_modified.length > 0 then
|
68
|
+
|
69
|
+
t = Time.parse(@dx.last_modified)
|
70
|
+
|
71
|
+
# find the most recently modified cur_files
|
72
|
+
recent = a2.select {|x| x[:mtime] > t }.map {|x| x[:name]} \
|
73
|
+
- %w(dir.xml dir.json)
|
74
|
+
|
75
|
+
# is it a new file or recently modified?
|
76
|
+
new_files = recent - @dx.to_a.map {|x| x[:name]}
|
77
|
+
modified = recent - new_files
|
78
|
+
|
79
|
+
@activity = {modified: modified, new: new_files}
|
80
|
+
|
81
|
+
end
|
82
|
+
|
53
83
|
|
54
84
|
command = File.exists?(File.join(path, index)) ? :refresh : :dxify
|
55
85
|
|
@@ -74,15 +104,19 @@ class DirToXML
|
|
74
104
|
@dx.filter &blk
|
75
105
|
end
|
76
106
|
|
77
|
-
def filter_by(pattern=/.*/, type: nil)
|
107
|
+
def filter_by(pattern=/.*/, type: nil, ext: nil)
|
78
108
|
|
79
109
|
@object = @a.select do |x|
|
80
110
|
|
81
111
|
pattern_match = x[:name] =~ pattern
|
112
|
+
|
82
113
|
type_match = type ? x[:type] == type.to_s : true
|
114
|
+
ext_match = ext ? x[:ext] == ext.to_s : true
|
115
|
+
|
116
|
+
pattern_match and type_match and ext_match
|
83
117
|
|
84
118
|
end
|
85
|
-
|
119
|
+
|
86
120
|
self
|
87
121
|
end
|
88
122
|
|
@@ -113,12 +147,15 @@ class DirToXML
|
|
113
147
|
@dx.save File.join(@path, @index)
|
114
148
|
end
|
115
149
|
|
116
|
-
def select_by_ext(ext)
|
150
|
+
def select_by_ext(ext, &blk)
|
151
|
+
|
152
|
+
@object = ext != '*' ? @a.select{|x| x[:ext][/#{ext}$/]} : @a
|
153
|
+
return if @object.empty?
|
117
154
|
|
118
|
-
|
119
|
-
dx = Dynarex.new json_out: false
|
155
|
+
dx = DxLite.new
|
120
156
|
dx.import @object
|
121
|
-
DirToXML.new(dx)
|
157
|
+
dtx = DirToXML.new(dx)
|
158
|
+
block_given? ? dtx.dx.all.map(&:name).each(&blk) : dtx
|
122
159
|
end
|
123
160
|
|
124
161
|
def sort_by(sym)
|
@@ -149,17 +186,20 @@ class DirToXML
|
|
149
186
|
@dx.clone
|
150
187
|
end
|
151
188
|
|
189
|
+
alias to_dx to_dynarex
|
190
|
+
|
152
191
|
private
|
153
192
|
|
154
193
|
def dxify(a)
|
155
194
|
|
156
|
-
dx =
|
195
|
+
dx = DxLite.new('directory[title, file_path, last_modified, description]/file(name, ' + \
|
157
196
|
'type, ext, ctime, mtime, atime, description, owner, ' + \
|
158
|
-
'group, permissions)'
|
197
|
+
'group, permissions)')
|
159
198
|
|
160
199
|
dx.title = 'Index of ' + File.expand_path(@path)
|
161
200
|
dx.file_path = File.expand_path(@path)
|
162
|
-
|
201
|
+
dx.last_modified = Time.now.to_s
|
202
|
+
|
163
203
|
dx.import a
|
164
204
|
|
165
205
|
dx.save File.join(@path, @index)
|
@@ -170,14 +210,18 @@ class DirToXML
|
|
170
210
|
|
171
211
|
def refresh(cur_files)
|
172
212
|
|
173
|
-
|
213
|
+
puts 'inside refresh' if @debug
|
214
|
+
|
174
215
|
|
175
|
-
prev_files = dx.to_a
|
216
|
+
prev_files = @dx.to_a
|
217
|
+
|
218
|
+
#puts 'prev_files: ' + prev_files.inspect
|
219
|
+
#puts 'cur_files: ' + cur_files.inspect
|
176
220
|
|
177
221
|
cur_files.each do |x|
|
178
222
|
|
179
223
|
file = prev_files.find {|item| item[:name] == x[:name] }
|
180
|
-
|
224
|
+
#puts 'found : ' + file.inspect if @debug
|
181
225
|
x[:description] = file[:description] if file and file[:description]
|
182
226
|
end
|
183
227
|
|
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: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -10,51 +10,55 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
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
|
33
37
|
-----END CERTIFICATE-----
|
34
|
-
date:
|
38
|
+
date: 2021-01-24 00:00:00.000000000 Z
|
35
39
|
dependencies:
|
36
40
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
41
|
+
name: dxlite
|
38
42
|
requirement: !ruby/object:Gem::Requirement
|
39
43
|
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '1.7'
|
43
44
|
- - ">="
|
44
45
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
+
version: 0.3.0
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.3'
|
46
50
|
type: :runtime
|
47
51
|
prerelease: false
|
48
52
|
version_requirements: !ruby/object:Gem::Requirement
|
49
53
|
requirements:
|
50
|
-
- - "~>"
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: '1.7'
|
53
54
|
- - ">="
|
54
55
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
56
|
+
version: 0.3.0
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.3'
|
56
60
|
description:
|
57
|
-
email:
|
61
|
+
email: digital.robertson@gmail.com
|
58
62
|
executables: []
|
59
63
|
extensions: []
|
60
64
|
extra_rdoc_files: []
|
@@ -72,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
72
76
|
requirements:
|
73
77
|
- - ">="
|
74
78
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2.
|
79
|
+
version: 2.5.3
|
76
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
81
|
requirements:
|
78
82
|
- - ">="
|
@@ -80,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
84
|
version: '0'
|
81
85
|
requirements: []
|
82
86
|
rubyforge_project:
|
83
|
-
rubygems_version: 2.
|
87
|
+
rubygems_version: 2.7.10
|
84
88
|
signing_key:
|
85
89
|
specification_version: 4
|
86
90
|
summary: Dir-to-xml saves a directory listing in the Dynarex XML format
|
metadata.gz.sig
CHANGED
Binary file
|