filewatcher 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|