filewatcher 2.0.0 → 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/lib/filewatcher/spec_helper/watch_run.rb +63 -20
- data/lib/filewatcher/version.rb +1 -1
- data/spec/examples.txt +28 -0
- data/spec/filewatcher_spec.rb +110 -48
- data/spec/spec_helper.rb +9 -4
- metadata +50 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f152abad4db37d701c171c006aa348be75d484a57b5dad570fdb7f9fa9f8e613
|
4
|
+
data.tar.gz: 3ac3b63272cee0295bac2eaefbf131a0933aeea5d0749d61cd8b3d214786a2ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 944582ed2ecdc9ccd42d562be7ea38a8a242bef6e9798b14d1b93f900926c7ceb0014afabbe39ea41af4d398fd5331ccc378bcb5d0d910aecbe68af60d4b0226
|
7
|
+
data.tar.gz: f772e16b48e71a6e0dfc433cb9b50286e742c753dfc7564fe6eaf367d17b03542e3377acd4943fe5ae440d6079053de5b964f5e6224d5f5ff9124925e1dc9af5
|
@@ -1,24 +1,55 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'module_methods'
|
4
|
+
|
3
5
|
class Filewatcher
|
4
6
|
module SpecHelper
|
5
7
|
## Base module for Filewatcher runners in specs
|
6
8
|
module WatchRun
|
9
|
+
extend ::ModuleMethods::Extension
|
10
|
+
|
7
11
|
include Filewatcher::SpecHelper
|
8
12
|
|
9
|
-
TMP_DIR =
|
13
|
+
TMP_DIR = 'spec/tmp'
|
14
|
+
## It's requried to split modifying files from result files like CLI dumpers
|
15
|
+
TMP_FILES_DIR = "#{TMP_DIR}/files"
|
16
|
+
|
17
|
+
attr_reader :initial_files
|
18
|
+
|
19
|
+
## Class methods for this and inherited modules
|
20
|
+
module ClassMethods
|
21
|
+
def transform_spec_files(file)
|
22
|
+
tmp_files_dir = File.join(Dir.getwd, TMP_FILES_DIR)
|
23
|
+
|
24
|
+
return tmp_files_dir if file.to_s.empty?
|
25
|
+
|
26
|
+
return file if file.match?(%r{^(/|~|[A-Z]:)})
|
27
|
+
|
28
|
+
File.join(tmp_files_dir, file)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(initial_files:, changes:)
|
33
|
+
@initial_files = initial_files.transform_keys { |key| self.class.transform_spec_files(key) }
|
10
34
|
|
11
|
-
|
35
|
+
@changes = changes
|
12
36
|
|
13
|
-
|
14
|
-
@filename = filename.match?(%r{^(/|~|[A-Z]:)}) ? filename : File.join(TMP_DIR, filename)
|
15
|
-
@action = action
|
16
|
-
debug "action = #{action}"
|
37
|
+
debug "changes = #{@changes}"
|
17
38
|
end
|
18
39
|
|
19
40
|
def start
|
20
41
|
debug 'start'
|
21
|
-
|
42
|
+
|
43
|
+
FileUtils.mkdir_p self.class::TMP_FILES_DIR
|
44
|
+
|
45
|
+
initial_files.each do |initial_file_path, initial_file_data|
|
46
|
+
File.write(
|
47
|
+
File.expand_path(initial_file_path),
|
48
|
+
initial_file_data.fetch(:content, 'content1')
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
debug "start initial_files = #{initial_files}"
|
22
53
|
|
23
54
|
wait seconds: 1
|
24
55
|
end
|
@@ -37,38 +68,50 @@ class Filewatcher
|
|
37
68
|
|
38
69
|
def stop
|
39
70
|
debug 'stop'
|
40
|
-
FileUtils.rm_r(
|
71
|
+
FileUtils.rm_r(self.class::TMP_FILES_DIR) if File.exist?(self.class::TMP_FILES_DIR)
|
41
72
|
end
|
42
73
|
|
43
74
|
private
|
44
75
|
|
45
|
-
create_update_action = lambda do
|
76
|
+
create_update_action = lambda do |change_file, change_data|
|
77
|
+
new_content = change_data.fetch(:content, 'content2')
|
78
|
+
|
79
|
+
FileUtils.mkdir_p File.dirname(change_file)
|
80
|
+
|
46
81
|
## There is no `File.write` because of strange difference in parallel `File.mtime`
|
47
82
|
## https://cirrus-ci.com/task/6107605053472768?command=test#L497-L511
|
48
|
-
system "echo '
|
49
|
-
|
83
|
+
system "echo '#{new_content}' > #{change_file}"
|
84
|
+
|
85
|
+
debug_file_mtime(change_file)
|
50
86
|
end.freeze
|
51
87
|
|
52
|
-
|
88
|
+
CHANGES = {
|
53
89
|
create: create_update_action,
|
54
90
|
update: create_update_action,
|
55
|
-
create_dir: -> { FileUtils.mkdir_p(
|
56
|
-
delete: -> { FileUtils.remove(
|
91
|
+
create_dir: ->(change_file, *_args) { FileUtils.mkdir_p(change_file) },
|
92
|
+
delete: ->(change_file, *_args) { FileUtils.remove(change_file) }
|
57
93
|
}.freeze
|
58
94
|
|
59
95
|
def make_changes
|
60
|
-
|
96
|
+
@changes.each do |change_file, change_data|
|
97
|
+
debug "make changes, change_file = #{change_file}, change_data = #{change_data}"
|
61
98
|
|
62
|
-
|
99
|
+
change_event = change_data.fetch(:event, :update)
|
100
|
+
change_event = :create_dir if change_event == :create && change_data[:directory]
|
63
101
|
|
64
|
-
|
102
|
+
change_block =
|
103
|
+
self.class::CHANGES.fetch(change_event) { raise "Unknown change `#{change_event}`" }
|
104
|
+
|
105
|
+
instance_exec(change_file, change_data, &change_block)
|
106
|
+
end
|
65
107
|
|
66
108
|
wait seconds: 1
|
67
109
|
end
|
68
110
|
|
69
|
-
def debug_file_mtime
|
70
|
-
|
71
|
-
debug "
|
111
|
+
def debug_file_mtime(file)
|
112
|
+
file = File.expand_path file
|
113
|
+
debug "stat #{file}: #{system_stat(file)}"
|
114
|
+
debug "File.mtime = #{File.mtime(file).strftime('%F %T.%9N')}"
|
72
115
|
end
|
73
116
|
end
|
74
117
|
end
|
data/lib/filewatcher/version.rb
CHANGED
data/spec/examples.txt
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
example_id | status | run_time |
|
2
|
+
------------------------------------------ | ------ | --------------- |
|
3
|
+
./spec/filewatcher/snapshot_spec.rb[1:1:1] | passed | 0.00075 seconds |
|
4
|
+
./spec/filewatcher/snapshot_spec.rb[1:2:1] | passed | 1 second |
|
5
|
+
./spec/filewatcher/version_spec.rb[1:1] | passed | 0.00079 seconds |
|
6
|
+
./spec/filewatcher_spec.rb[1:1:1] | passed | 0.01153 seconds |
|
7
|
+
./spec/filewatcher_spec.rb[1:2:1:1:1] | passed | 6.02 seconds |
|
8
|
+
./spec/filewatcher_spec.rb[1:2:1:2:1] | passed | 5.01 seconds |
|
9
|
+
./spec/filewatcher_spec.rb[1:2:1:3:1] | passed | 5.01 seconds |
|
10
|
+
./spec/filewatcher_spec.rb[1:2:1:4:1] | passed | 5.01 seconds |
|
11
|
+
./spec/filewatcher_spec.rb[1:2:1:5:1] | passed | 5.01 seconds |
|
12
|
+
./spec/filewatcher_spec.rb[1:2:1:6:1] | passed | 5.02 seconds |
|
13
|
+
./spec/filewatcher_spec.rb[1:2:1:7:1] | passed | 5.02 seconds |
|
14
|
+
./spec/filewatcher_spec.rb[1:2:2:1:1] | passed | 2 seconds |
|
15
|
+
./spec/filewatcher_spec.rb[1:2:2:1:2:1] | passed | 2 seconds |
|
16
|
+
./spec/filewatcher_spec.rb[1:2:2:2:1] | passed | 2 seconds |
|
17
|
+
./spec/filewatcher_spec.rb[1:2:2:2:2:1] | passed | 2 seconds |
|
18
|
+
./spec/filewatcher_spec.rb[1:3:1:1:1] | passed | 5.01 seconds |
|
19
|
+
./spec/filewatcher_spec.rb[1:3:1:2:1] | passed | 5.02 seconds |
|
20
|
+
./spec/filewatcher_spec.rb[1:3:1:3:1] | passed | 5.01 seconds |
|
21
|
+
./spec/filewatcher_spec.rb[1:3:1:4:1] | passed | 5.01 seconds |
|
22
|
+
./spec/filewatcher_spec.rb[1:3:1:5:1] | passed | 5.01 seconds |
|
23
|
+
./spec/filewatcher_spec.rb[1:3:2:1] | passed | 2.01 seconds |
|
24
|
+
./spec/filewatcher_spec.rb[1:4:1] | passed | 2 seconds |
|
25
|
+
./spec/filewatcher_spec.rb[1:5:1] | passed | 7.21 seconds |
|
26
|
+
./spec/filewatcher_spec.rb[1:6:1:1] | passed | 7.41 seconds |
|
27
|
+
./spec/filewatcher_spec.rb[1:6:2:1] | passed | 11.41 seconds |
|
28
|
+
./spec/filewatcher_spec.rb[1:7:1] | passed | 6.01 seconds |
|
data/spec/filewatcher_spec.rb
CHANGED
@@ -6,13 +6,9 @@ require_relative '../lib/filewatcher'
|
|
6
6
|
describe Filewatcher do
|
7
7
|
subject(:processed) { watch_run.processed }
|
8
8
|
|
9
|
-
before do
|
10
|
-
FileUtils.mkdir_p tmp_dir
|
11
|
-
end
|
12
|
-
|
13
9
|
after do
|
14
10
|
logger.debug "FileUtils.rm_r #{tmp_dir}"
|
15
|
-
FileUtils.rm_r tmp_dir
|
11
|
+
FileUtils.rm_r tmp_dir if File.exist?(tmp_dir)
|
16
12
|
|
17
13
|
Filewatcher::SpecHelper.wait seconds: 5, interval: 0.2 do
|
18
14
|
!File.exist?(tmp_dir)
|
@@ -23,24 +19,46 @@ describe Filewatcher do
|
|
23
19
|
described_class.new(path, options.merge(logger: logger))
|
24
20
|
end
|
25
21
|
|
26
|
-
|
22
|
+
def transform_spec_files(file)
|
23
|
+
ruby_watch_run_class.transform_spec_files(file)
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:ruby_watch_run_class) { Filewatcher::SpecHelper::RubyWatchRun }
|
27
|
+
|
28
|
+
let(:tmp_dir) { ruby_watch_run_class::TMP_DIR }
|
29
|
+
let(:tmp_files_dir) { ruby_watch_run_class::TMP_FILES_DIR }
|
27
30
|
let(:logger) { Filewatcher::SpecHelper.logger }
|
28
31
|
|
29
|
-
let(:
|
30
|
-
let(:
|
32
|
+
let(:raw_file_name) { 'tmp_file.txt' }
|
33
|
+
let(:initial_files) { { raw_file_name => {} } }
|
34
|
+
|
35
|
+
let(:change_event) { :update }
|
36
|
+
let(:change_directory) { false }
|
37
|
+
|
38
|
+
let(:changes) do
|
39
|
+
files = Array(initial_files.keys)
|
40
|
+
files << raw_file_name if files.empty?
|
41
|
+
files.to_h do |file|
|
42
|
+
[transform_spec_files(file), { event: change_event, directory: change_directory }]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
let(:result_transformed_filename) do
|
47
|
+
transform_spec_files(initial_files.any? ? initial_files.keys.first : raw_file_name)
|
48
|
+
end
|
49
|
+
|
31
50
|
## TODO: Check its needless
|
32
51
|
let(:every) { false }
|
33
52
|
let(:immediate) { false }
|
34
53
|
let(:interval) { 0.2 }
|
54
|
+
let(:filewatcher_files) { File.expand_path("#{tmp_files_dir}/**/*") }
|
35
55
|
let(:filewatcher) do
|
36
|
-
initialize_filewatcher
|
37
|
-
File.join(tmp_dir, '**', '*'), interval: interval, every: every, immediate: immediate
|
38
|
-
)
|
56
|
+
initialize_filewatcher filewatcher_files, interval: interval, every: every, immediate: immediate
|
39
57
|
end
|
40
58
|
|
41
59
|
let(:watch_run) do
|
42
|
-
|
43
|
-
|
60
|
+
ruby_watch_run_class.new(
|
61
|
+
initial_files: initial_files, filewatcher: filewatcher, changes: changes
|
44
62
|
)
|
45
63
|
end
|
46
64
|
|
@@ -66,8 +84,8 @@ describe Filewatcher do
|
|
66
84
|
context 'with excluding selected file patterns' do
|
67
85
|
let(:filewatcher) do
|
68
86
|
initialize_filewatcher(
|
69
|
-
|
70
|
-
exclude: File.expand_path(
|
87
|
+
filewatcher_files,
|
88
|
+
exclude: File.expand_path("#{tmp_files_dir}/**/*.txt")
|
71
89
|
)
|
72
90
|
end
|
73
91
|
|
@@ -75,39 +93,79 @@ describe Filewatcher do
|
|
75
93
|
end
|
76
94
|
|
77
95
|
context 'with absolute paths including globs' do
|
78
|
-
let(:
|
79
|
-
initialize_filewatcher(
|
80
|
-
File.expand_path('spec/tmp/**/*')
|
81
|
-
)
|
82
|
-
end
|
96
|
+
let(:filewatcher_files) { File.expand_path("#{tmp_files_dir}/**/*") }
|
83
97
|
|
84
|
-
it { is_expected.to eq [{
|
98
|
+
it { is_expected.to eq [{ result_transformed_filename => :updated }] }
|
85
99
|
end
|
86
100
|
|
87
101
|
context 'with globs' do
|
88
|
-
let(:
|
102
|
+
let(:filewatcher_files) { "#{tmp_files_dir}/**/*" }
|
89
103
|
|
90
|
-
it { is_expected.to eq [{
|
104
|
+
it { is_expected.to eq [{ result_transformed_filename => :updated }] }
|
91
105
|
end
|
92
106
|
|
93
107
|
context 'with explicit relative paths with globs' do
|
94
|
-
let(:
|
108
|
+
let(:filewatcher_files) { "./#{tmp_files_dir}/**/*" }
|
95
109
|
|
96
|
-
it { is_expected.to eq [{
|
110
|
+
it { is_expected.to eq [{ result_transformed_filename => :updated }] }
|
97
111
|
end
|
98
112
|
|
99
113
|
context 'with explicit relative paths' do
|
100
|
-
let(:
|
114
|
+
let(:filewatcher_files) { "./#{tmp_files_dir}" }
|
101
115
|
|
102
|
-
it { is_expected.to eq [{
|
116
|
+
it { is_expected.to eq [{ result_transformed_filename => :updated }] }
|
103
117
|
end
|
104
118
|
|
105
119
|
context 'with tilde expansion' do
|
106
|
-
let(:
|
120
|
+
let(:filewatcher_files) { '~/file_watcher_1.txt' }
|
121
|
+
let(:raw_file_name) { File.expand_path('~/file_watcher_1.txt') }
|
122
|
+
|
123
|
+
it { is_expected.to eq [{ raw_file_name => :updated }] }
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'with Array of paths' do
|
127
|
+
let(:file_1) { 'tmp_file_1.txt' }
|
128
|
+
let(:subdir) { 'subdir' }
|
129
|
+
let(:file_2) { "#{subdir}/tmp_file_2.txt" }
|
107
130
|
|
108
|
-
let(:
|
131
|
+
let(:filewatcher_files) { ["#{tmp_files_dir}/#{file_1}", "#{tmp_files_dir}/#{subdir}"] }
|
132
|
+
|
133
|
+
let(:initial_files) do
|
134
|
+
{
|
135
|
+
file_1 => {}
|
136
|
+
}
|
137
|
+
end
|
138
|
+
|
139
|
+
let(:changes) do
|
140
|
+
initial_files.to_h { |key, _value| [transform_spec_files(key), { event: :update }] }
|
141
|
+
.merge(
|
142
|
+
transform_spec_files(file_2) => { event: :create }
|
143
|
+
)
|
144
|
+
end
|
109
145
|
|
110
|
-
|
146
|
+
let(:expected_changes) do
|
147
|
+
[
|
148
|
+
initial_files.to_h { |key, _value| [transform_spec_files(key), :updated] }
|
149
|
+
.merge(
|
150
|
+
expected_file_2_change
|
151
|
+
)
|
152
|
+
]
|
153
|
+
end
|
154
|
+
|
155
|
+
let(:expected_file_2_change) do
|
156
|
+
{
|
157
|
+
transform_spec_files(file_2) => :created
|
158
|
+
}
|
159
|
+
end
|
160
|
+
|
161
|
+
specify do
|
162
|
+
## For case when changes detected separately, in CI for example, probably just slowly
|
163
|
+
expect(processed).to eq(expected_changes)
|
164
|
+
.or contain_exactly(
|
165
|
+
*initial_files.map { |key, _value| { transform_spec_files(key) => :updated } },
|
166
|
+
expected_file_2_change
|
167
|
+
)
|
168
|
+
end
|
111
169
|
end
|
112
170
|
end
|
113
171
|
|
@@ -152,51 +210,56 @@ describe Filewatcher do
|
|
152
210
|
end
|
153
211
|
|
154
212
|
context 'when there are file deletions' do
|
155
|
-
let(:
|
213
|
+
let(:change_event) { :delete }
|
156
214
|
|
157
|
-
it { is_expected.to eq [{
|
215
|
+
it { is_expected.to eq [{ result_transformed_filename => :deleted }] }
|
158
216
|
end
|
159
217
|
|
160
218
|
context 'when there are file additions' do
|
161
|
-
let(:
|
219
|
+
let(:initial_files) { {} }
|
220
|
+
let(:changes) { { result_transformed_filename => { event: :create } } }
|
162
221
|
|
163
|
-
it { is_expected.to eq [{
|
222
|
+
it { is_expected.to eq [{ result_transformed_filename => :created }] }
|
164
223
|
end
|
165
224
|
|
166
225
|
context 'when there are file updates' do
|
167
|
-
let(:
|
226
|
+
let(:change_event) { :update }
|
168
227
|
|
169
|
-
it { is_expected.to eq [{
|
228
|
+
it { is_expected.to eq [{ result_transformed_filename => :updated }] }
|
170
229
|
end
|
171
230
|
|
172
231
|
context 'when there are new files in subdirectories' do
|
173
|
-
let(:subdirectory) { File.expand_path(
|
232
|
+
let(:subdirectory) { File.expand_path("#{tmp_files_dir}/new_sub_directory") }
|
233
|
+
|
234
|
+
let(:initial_files) { {} }
|
235
|
+
let(:created_filename) { File.join(subdirectory, 'file.txt') }
|
236
|
+
let(:changes) { { created_filename => { event: :create } } }
|
174
237
|
|
175
|
-
let(:filename) { File.join(subdirectory, 'file.txt') }
|
176
|
-
let(:action) { :create }
|
177
238
|
let(:every) { true }
|
178
239
|
## https://github.com/filewatcher/filewatcher/pull/115#issuecomment-674581595
|
179
240
|
let(:interval) { 0.4 }
|
180
241
|
|
181
242
|
it do
|
182
243
|
expect(processed).to eq [
|
183
|
-
{ subdirectory => :updated,
|
244
|
+
{ subdirectory => :updated, created_filename => :created }
|
184
245
|
]
|
185
246
|
end
|
186
247
|
end
|
187
248
|
|
188
249
|
context 'when there are new subdirectories' do
|
189
|
-
let(:
|
190
|
-
let(:
|
250
|
+
let(:initial_files) { {} }
|
251
|
+
let(:raw_file_name) { 'new_sub_directory' }
|
252
|
+
let(:change_event) { :create }
|
253
|
+
let(:change_directory) { true }
|
191
254
|
|
192
|
-
it { is_expected.to eq [{
|
255
|
+
it { is_expected.to eq [{ result_transformed_filename => :created }] }
|
193
256
|
end
|
194
257
|
end
|
195
258
|
|
196
259
|
context 'when action is unknown' do
|
197
|
-
let(:
|
260
|
+
let(:change_event) { :foo }
|
198
261
|
|
199
|
-
specify { expect { watch_run.run }.to raise_error(RuntimeError, 'Unknown
|
262
|
+
specify { expect { watch_run.run }.to raise_error(RuntimeError, 'Unknown change `foo`') }
|
200
263
|
end
|
201
264
|
end
|
202
265
|
|
@@ -214,11 +277,10 @@ describe Filewatcher do
|
|
214
277
|
def write_tmp_files(range)
|
215
278
|
logger.debug "#{__method__} #{range}"
|
216
279
|
|
217
|
-
|
218
|
-
FileUtils.mkdir_p directory
|
280
|
+
FileUtils.mkdir_p tmp_files_dir
|
219
281
|
|
220
282
|
range.to_a.map do |n|
|
221
|
-
File.write(file = "#{
|
283
|
+
File.write(file = "#{tmp_files_dir}/file#{n}.txt", "content#{n}")
|
222
284
|
|
223
285
|
Filewatcher::SpecHelper.wait seconds: 1
|
224
286
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'simplecov'
|
4
|
-
SimpleCov.start
|
5
4
|
|
6
|
-
if ENV['
|
7
|
-
require '
|
8
|
-
SimpleCov.formatter = SimpleCov::Formatter::
|
5
|
+
if ENV['CI']
|
6
|
+
require 'simplecov-cobertura'
|
7
|
+
SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
|
9
8
|
end
|
10
9
|
|
10
|
+
SimpleCov.start
|
11
|
+
|
11
12
|
require_relative '../lib/filewatcher/spec_helper'
|
12
13
|
|
14
|
+
RSpec.configure do |config|
|
15
|
+
config.example_status_persistence_file_path = "#{__dir__}/examples.txt"
|
16
|
+
end
|
17
|
+
|
13
18
|
## For case when required from dumpers
|
14
19
|
if Object.const_defined?(:RSpec)
|
15
20
|
RSpec::Matchers.define :include_all_files do |expected|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filewatcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Flemming
|
@@ -9,8 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: module_methods
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.1.0
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.1.0
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: bundler
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,14 +73,14 @@ dependencies:
|
|
59
73
|
requirements:
|
60
74
|
- - "~>"
|
61
75
|
- !ruby/object:Gem::Version
|
62
|
-
version: 0.
|
76
|
+
version: 0.14.2
|
63
77
|
type: :development
|
64
78
|
prerelease: false
|
65
79
|
version_requirements: !ruby/object:Gem::Requirement
|
66
80
|
requirements:
|
67
81
|
- - "~>"
|
68
82
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.
|
83
|
+
version: 0.14.2
|
70
84
|
- !ruby/object:Gem::Dependency
|
71
85
|
name: codecov
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,20 +109,48 @@ dependencies:
|
|
95
109
|
- - "~>"
|
96
110
|
- !ruby/object:Gem::Version
|
97
111
|
version: '3.8'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: simplecov
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 0.21.0
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.21.0
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: simplecov-cobertura
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '2.1'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '2.1'
|
98
140
|
- !ruby/object:Gem::Dependency
|
99
141
|
name: rubocop
|
100
142
|
requirement: !ruby/object:Gem::Requirement
|
101
143
|
requirements:
|
102
144
|
- - "~>"
|
103
145
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.
|
146
|
+
version: 1.39.0
|
105
147
|
type: :development
|
106
148
|
prerelease: false
|
107
149
|
version_requirements: !ruby/object:Gem::Requirement
|
108
150
|
requirements:
|
109
151
|
- - "~>"
|
110
152
|
- !ruby/object:Gem::Version
|
111
|
-
version: 1.
|
153
|
+
version: 1.39.0
|
112
154
|
- !ruby/object:Gem::Dependency
|
113
155
|
name: rubocop-performance
|
114
156
|
requirement: !ruby/object:Gem::Requirement
|
@@ -153,6 +195,7 @@ files:
|
|
153
195
|
- lib/filewatcher/spec_helper/ruby_watch_run.rb
|
154
196
|
- lib/filewatcher/spec_helper/watch_run.rb
|
155
197
|
- lib/filewatcher/version.rb
|
198
|
+
- spec/examples.txt
|
156
199
|
- spec/filewatcher/snapshot_spec.rb
|
157
200
|
- spec/filewatcher/version_spec.rb
|
158
201
|
- spec/filewatcher_spec.rb
|
@@ -180,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
223
|
- !ruby/object:Gem::Version
|
181
224
|
version: '0'
|
182
225
|
requirements: []
|
183
|
-
rubygems_version: 3.3.
|
226
|
+
rubygems_version: 3.0.3.1
|
184
227
|
signing_key:
|
185
228
|
specification_version: 4
|
186
229
|
summary: Lightweight filewatcher.
|