file_scanner 2.0.4 → 2.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
- data/README.md +20 -3
- data/lib/file_scanner/version.rb +1 -1
- data/lib/file_scanner/worker.rb +24 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b97bb23d5031571dadb1bbc7d3230fc6d05a1973
|
4
|
+
data.tar.gz: 0d042f4d231a4aa1e8f462cdc7cbd3c523bc313f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3fc550fd7fcf6f346b8fec40942dca5049f1fa1b00a24e696dcf38bffff3d7960cd5f17594482acb61ea932e3caae24c89b0c9eb54d3f82cac2612b75b0d2f2
|
7
|
+
data.tar.gz: ba4bc0f86eee6d8997e053ca0d00f5d58fa93f76a4d5f043728924630f53a8ea75261bc9ce696d4f2bef441e649a5e9ac98211ef9cd8e374a2f434d499f1fc5d
|
data/README.md
CHANGED
@@ -9,7 +9,9 @@
|
|
9
9
|
* [Defaults](#defaults)
|
10
10
|
* [Custom](#custom)
|
11
11
|
* [Worker](#worker)
|
12
|
+
* [Mode](#mode)
|
12
13
|
* [Batches](#batches)
|
14
|
+
* [Limit](#limit)
|
13
15
|
* [Enumerator](#enumerator)
|
14
16
|
* [Logger](#logger)
|
15
17
|
* [Factory](#factory)
|
@@ -48,7 +50,6 @@ loader = FileScanner::Loader.new(path: ENV["HOME"], extensions: %w[html txt])
|
|
48
50
|
|
49
51
|
### Filters
|
50
52
|
The second step is to provide the filters list to select file paths for which the `call` method is *truthy*.
|
51
|
-
Selection is done with the `any?` predicate, so also one matching filter will do the selection.
|
52
53
|
|
53
54
|
#### Defaults
|
54
55
|
If you specify no filters the default ones are loaded, selecting files by:
|
@@ -79,6 +80,13 @@ worker.call do |paths|
|
|
79
80
|
end
|
80
81
|
```
|
81
82
|
|
83
|
+
### Mode
|
84
|
+
By default the worker will select paths by applying any of the matching filters: this is it, it suffice just one of the specified filters to be true to grab the path.
|
85
|
+
In case you want restrict paths selection by all matching filters, just specify it:
|
86
|
+
```ruby
|
87
|
+
worker = FileScanner::Worker.new(loader: loader, filters: filters, all: true)
|
88
|
+
```
|
89
|
+
|
82
90
|
#### Batches
|
83
91
|
In case you are going to scan a large number of files, it is suggested to work in batches.
|
84
92
|
The `Worker` constructor accepts a `slice` attribute to give you a chance to distribute loading:
|
@@ -89,6 +97,15 @@ worker.call do |slice|
|
|
89
97
|
end
|
90
98
|
```
|
91
99
|
|
100
|
+
#### Limit
|
101
|
+
In case you are still concerned about the selected paths number, you can limit it before applying the slicing (if any):
|
102
|
+
```ruby
|
103
|
+
worker = FileScanner::Worker.new(loader: loader, slice: 1000, limit: 7500)
|
104
|
+
worker.call do |slice|
|
105
|
+
# perform action 1000 paths per time till reaching the specified limit
|
106
|
+
end
|
107
|
+
```
|
108
|
+
|
92
109
|
#### Enumerator
|
93
110
|
In case you want access the sliced enumerator directly, just do not pass a block to the method:
|
94
111
|
```ruby
|
@@ -119,8 +136,8 @@ end
|
|
119
136
|
#### Factory
|
120
137
|
You can create loader and worker instances at once by using the available factory:
|
121
138
|
```ruby
|
122
|
-
worker = FileScanner::Worker.factory(path: ENV["HOME"], extensions: %w[html txt], filters: filters,
|
139
|
+
worker = FileScanner::Worker.factory(path: ENV["HOME"], extensions: %w[html txt], filters: filters, all: true, slice: 1000, limit: 7500, logger: my_logger)
|
123
140
|
worker.call do |slice, logger|
|
124
|
-
# perform action 1000 paths per time
|
141
|
+
# perform action 1000 paths per time till reaching the specified limit
|
125
142
|
end
|
126
143
|
```
|
data/lib/file_scanner/version.rb
CHANGED
data/lib/file_scanner/worker.rb
CHANGED
@@ -4,23 +4,19 @@ require "file_scanner/loader"
|
|
4
4
|
|
5
5
|
module FileScanner
|
6
6
|
class Worker
|
7
|
-
def self.
|
8
|
-
Logger.new(nil).tap do |logger|
|
9
|
-
logger.level = Logger::ERROR
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.factory(path:, extensions: [], filters: [], logger: default_logger, slice: nil)
|
7
|
+
def self.factory(path:, extensions: [], filters: [], all: false, slice: nil, limit: -1, logger: Logger.new(nil))
|
14
8
|
loader = Loader.new(path: path, extensions: extensions)
|
15
|
-
new(loader: loader, filters: filters,
|
9
|
+
new(loader: loader, filters: filters, slice: slice, all: all, limit: limit, logger: logger)
|
16
10
|
end
|
17
11
|
|
18
12
|
attr_reader :loader, :filters
|
19
13
|
|
20
|
-
def initialize(loader:, filters: Filters::defaults,
|
14
|
+
def initialize(loader:, filters: Filters::defaults, all: false, slice: nil, limit: -1, logger: Logger.new(nil))
|
21
15
|
@loader = loader
|
22
16
|
@filters = filters
|
17
|
+
@all = !!all
|
23
18
|
@slice = slice.to_i
|
19
|
+
@limit = limit.to_i
|
24
20
|
@logger = logger
|
25
21
|
end
|
26
22
|
|
@@ -34,21 +30,36 @@ module FileScanner
|
|
34
30
|
raise e
|
35
31
|
end
|
36
32
|
|
33
|
+
private def fetch_mode(mode)
|
34
|
+
return :any? unless @filters.respond_to?(mode)
|
35
|
+
mode
|
36
|
+
end
|
37
|
+
|
37
38
|
private def files
|
38
39
|
paths = @loader.call
|
39
40
|
paths.select! { |file| filter(file) } || paths
|
40
41
|
end
|
41
42
|
|
43
|
+
private def limit
|
44
|
+
return files if @limit <= 0
|
45
|
+
files.first(@limit)
|
46
|
+
end
|
47
|
+
|
48
|
+
private def mode
|
49
|
+
return :all? if @all
|
50
|
+
:any?
|
51
|
+
end
|
52
|
+
|
42
53
|
private def filter(file)
|
43
|
-
@filters.
|
44
|
-
@logger.debug { "
|
54
|
+
@filters.send(mode) do |filter|
|
55
|
+
@logger.debug { "selecting by \e[33m#{mode}\e[0m with filter \e[33m#{filter}\e[0m on #{File.basename(file)}" }
|
45
56
|
filter.call(file)
|
46
57
|
end
|
47
58
|
end
|
48
59
|
|
49
60
|
private def slices
|
50
|
-
return [
|
51
|
-
|
61
|
+
return [limit] if @slice.zero?
|
62
|
+
limit.each_slice(@slice)
|
52
63
|
end
|
53
64
|
end
|
54
65
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: file_scanner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- costajob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|