filewatcher 2.0.0 → 3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59a457d937b483f6b936e5741df3ac777ef58fe43983c36de2fc00f9475e3e32
4
- data.tar.gz: aca66c67a07d0d596afa06af04984a42f2d2fe83a6353bf84f11b34199e8379a
3
+ metadata.gz: 25f23553b187f2173b966b5a278bf7948f855390b5184196626b417b5ac1b190
4
+ data.tar.gz: 469558d39224bf9116d9b54a99ac962de9f6a22db295f28b5fae65c2f3808672
5
5
  SHA512:
6
- metadata.gz: 384400d7f817cd4d403b977a9f7a52eca5b331a217829c013c42227d468e673f462b8072fae057ca60bf0048a9505994278aab0449f41620172ea97f443ef141
7
- data.tar.gz: 17f903b43e2fd857d2b6b2f48bb81a51ebc175bb631089fda561ed082c29dda38e945ef9c6bbd21825310de9690f63021fc4c0bdce1aff132ce97d5323124871
6
+ metadata.gz: b044368afdc3d968e9ec27d726133e7fb64508411a2e15dba47c0492c059dc95bac3c6d3844c957d97f4dee815582efd5ca8dc75b535ad0040860600aadc1449
7
+ data.tar.gz: 1fd293c552bc6dfc32a3dbca59aae016b5b294a8012174b15a11ee44ca16e0cd1d0666ddd38b1449981b29c080531656865e19cde089d026b905c7d238f2797f
@@ -6,7 +6,8 @@ class Filewatcher
6
6
  # Class for snapshots of file system
7
7
  class Snapshot
8
8
  extend Forwardable
9
- def_delegators :@data, :[], :each, :keys
9
+
10
+ def_delegators :@data, :[], :each, :each_key, :keys
10
11
 
11
12
  def initialize(filenames)
12
13
  @data = filenames.each_with_object({}) do |filename, data|
@@ -21,7 +22,7 @@ class Filewatcher
21
22
  changes[filename] = snapshot_file - other[filename]
22
23
  end
23
24
 
24
- other.each do |filename, _snapshot_file|
25
+ other.each_key do |filename|
25
26
  changes[filename] = :deleted unless self[filename]
26
27
  end
27
28
 
@@ -36,18 +37,18 @@ class Filewatcher
36
37
  end
37
38
 
38
39
  def populate_stats(stats)
39
- defined?(super) ? super(stats) : stats
40
+ defined?(super) ? super : stats
40
41
  end
41
42
 
42
43
  def subtractions
43
44
  @subtractions ||= populate_subtractions(
44
- created: ->(other) { other.nil? },
45
+ created: lambda(&:nil?),
45
46
  updated: ->(other) { mtime && mtime > other.mtime }
46
47
  )
47
48
  end
48
49
 
49
50
  def populate_subtractions(hash)
50
- hash = super(hash) if defined?(super)
51
+ hash = super if defined?(super)
51
52
  hash
52
53
  end
53
54
  end
@@ -40,7 +40,7 @@ class Filewatcher
40
40
  end
41
41
 
42
42
  def wait(seconds: 1)
43
- super seconds: seconds, interval: filewatcher.interval
43
+ super(seconds: seconds, interval: filewatcher.interval)
44
44
  end
45
45
 
46
46
  private
@@ -1,24 +1,74 @@
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 = "#{Dir.getwd}/spec/tmp"
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".freeze
16
+
17
+ create_update_action = lambda do |change_file, change_data|
18
+ new_content = change_data.fetch(:content, 'content2')
19
+
20
+ FileUtils.mkdir_p File.dirname(change_file)
21
+
22
+ ## There is no `File.write` because of strange difference in parallel `File.mtime`
23
+ ## https://cirrus-ci.com/task/6107605053472768?command=test#L497-L511
24
+ system "echo '#{new_content}' > #{change_file}"
25
+
26
+ debug_file_mtime(change_file)
27
+ end.freeze
28
+
29
+ CHANGES = {
30
+ create: create_update_action,
31
+ update: create_update_action,
32
+ create_dir: ->(change_file, *_args) { FileUtils.mkdir_p(change_file) },
33
+ delete: ->(change_file, *_args) { FileUtils.remove(change_file) }
34
+ }.freeze
35
+
36
+ attr_reader :initial_files
10
37
 
11
- attr_reader :filename
38
+ ## Class methods for this and inherited modules
39
+ module ClassMethods
40
+ def transform_spec_files(file)
41
+ tmp_files_dir = File.join(Dir.getwd, TMP_FILES_DIR)
12
42
 
13
- def initialize(filename:, action:)
14
- @filename = filename.match?(%r{^(/|~|[A-Z]:)}) ? filename : File.join(TMP_DIR, filename)
15
- @action = action
16
- debug "action = #{action}"
43
+ return tmp_files_dir if file.to_s.empty?
44
+
45
+ return file if file.match?(%r{^(/|~|[A-Z]:)})
46
+
47
+ File.join(tmp_files_dir, file)
48
+ end
49
+ end
50
+
51
+ def initialize(initial_files:, changes:)
52
+ @initial_files = initial_files.transform_keys { |key| self.class.transform_spec_files(key) }
53
+
54
+ @changes = changes
55
+
56
+ debug "changes = #{@changes}"
17
57
  end
18
58
 
19
59
  def start
20
60
  debug 'start'
21
- File.write(@filename, 'content1') unless %i[create create_dir].include? @action
61
+
62
+ FileUtils.mkdir_p self.class::TMP_FILES_DIR
63
+
64
+ initial_files.each do |initial_file_path, initial_file_data|
65
+ File.write(
66
+ File.expand_path(initial_file_path),
67
+ initial_file_data.fetch(:content, 'content1')
68
+ )
69
+ end
70
+
71
+ debug "start initial_files = #{initial_files}"
22
72
 
23
73
  wait seconds: 1
24
74
  end
@@ -37,38 +87,31 @@ class Filewatcher
37
87
 
38
88
  def stop
39
89
  debug 'stop'
40
- FileUtils.rm_r(@filename) if File.exist?(@filename)
90
+ FileUtils.rm_r(self.class::TMP_FILES_DIR) if File.exist?(self.class::TMP_FILES_DIR)
41
91
  end
42
92
 
43
93
  private
44
94
 
45
- create_update_action = lambda do
46
- ## There is no `File.write` because of strange difference in parallel `File.mtime`
47
- ## https://cirrus-ci.com/task/6107605053472768?command=test#L497-L511
48
- system "echo 'content2' > #{@filename}"
49
- debug_file_mtime
50
- end.freeze
51
-
52
- ACTIONS = {
53
- create: create_update_action,
54
- update: create_update_action,
55
- create_dir: -> { FileUtils.mkdir_p(@filename) },
56
- delete: -> { FileUtils.remove(@filename) }
57
- }.freeze
58
-
59
95
  def make_changes
60
- debug "make changes, @action = #{@action}, @filename = #{@filename}"
96
+ @changes.each do |change_file, change_data|
97
+ debug "make changes, change_file = #{change_file}, change_data = #{change_data}"
61
98
 
62
- action = self.class::ACTIONS.fetch(@action) { raise "Unknown action `#{@action}`" }
99
+ change_event = change_data.fetch(:event, :update)
100
+ change_event = :create_dir if change_event == :create && change_data[:directory]
63
101
 
64
- instance_exec(&action)
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
- debug "stat #{@filename}: #{system_stat(@filename)}"
71
- debug "File.mtime = #{File.mtime(@filename).strftime('%F %T.%9N')}"
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
@@ -43,7 +43,7 @@ class Filewatcher
43
43
  end
44
44
  end
45
45
 
46
- def wait_with_block(seconds, interval, &_block)
46
+ def wait_with_block(seconds, interval, &)
47
47
  (seconds / interval).ceil.times do
48
48
  break if yield
49
49
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Filewatcher
4
- VERSION = '2.0.0'
4
+ VERSION = '3.0.0'
5
5
  end
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.00101 seconds |
4
+ ./spec/filewatcher/snapshot_spec.rb[1:2:1] | passed | 1 second |
5
+ ./spec/filewatcher/version_spec.rb[1:1] | passed | 0.00075 seconds |
6
+ ./spec/filewatcher_spec.rb[1:1:1] | passed | 0.01465 seconds |
7
+ ./spec/filewatcher_spec.rb[1:2:1:1:1] | passed | 6.01 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.01 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 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.61 seconds |
28
+ ./spec/filewatcher_spec.rb[1:7:1] | passed | 6.01 seconds |
@@ -6,15 +6,11 @@ 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
- Filewatcher::SpecHelper.wait seconds: 5, interval: 0.2 do
13
+ described_class::SpecHelper.wait seconds: 5, interval: 0.2 do
18
14
  !File.exist?(tmp_dir)
19
15
  end
20
16
  end
@@ -23,24 +19,46 @@ describe Filewatcher do
23
19
  described_class.new(path, options.merge(logger: logger))
24
20
  end
25
21
 
26
- let(:tmp_dir) { Filewatcher::SpecHelper::WatchRun::TMP_DIR }
27
- let(:logger) { Filewatcher::SpecHelper.logger }
22
+ def transform_spec_files(file)
23
+ ruby_watch_run_class.transform_spec_files(file)
24
+ end
25
+
26
+ let(:ruby_watch_run_class) { described_class::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 }
30
+ let(:logger) { described_class::SpecHelper.logger }
31
+
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
28
49
 
29
- let(:filename) { 'tmp_file.txt' }
30
- let(:action) { :update }
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
- Filewatcher::SpecHelper::RubyWatchRun.new(
43
- filename: filename, filewatcher: filewatcher, action: action
60
+ ruby_watch_run_class.new(
61
+ initial_files: initial_files, filewatcher: filewatcher, changes: changes
44
62
  )
45
63
  end
46
64
 
@@ -50,7 +68,7 @@ describe Filewatcher do
50
68
  subject(:method_call) { described_class.print_version }
51
69
 
52
70
  let(:ruby_version_regexp) { '(j|truffle)?ruby \d+\.\d+\.\d+.*' }
53
- let(:filewatcher_version_regexp) { "Filewatcher #{Filewatcher::VERSION}" }
71
+ let(:filewatcher_version_regexp) { "Filewatcher #{described_class::VERSION}" }
54
72
 
55
73
  it do
56
74
  expect { method_call }.to output(
@@ -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
- File.expand_path('spec/tmp/**/*'),
70
- exclude: File.expand_path('spec/tmp/**/*.txt')
87
+ filewatcher_files,
88
+ exclude: File.expand_path("#{tmp_files_dir}/**/*.txt")
71
89
  )
72
90
  end
73
91
 
@@ -75,39 +93,81 @@ describe Filewatcher do
75
93
  end
76
94
 
77
95
  context 'with absolute paths including globs' do
78
- let(:filewatcher) do
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 [{ watch_run.filename => :updated }] }
98
+ it { is_expected.to eq [{ result_transformed_filename => :updated }] }
85
99
  end
86
100
 
87
101
  context 'with globs' do
88
- let(:filewatcher) { initialize_filewatcher('spec/tmp/**/*') }
102
+ let(:filewatcher_files) { "#{tmp_files_dir}/**/*" }
89
103
 
90
- it { is_expected.to eq [{ watch_run.filename => :updated }] }
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(:filewatcher) { initialize_filewatcher('./spec/tmp/**/*') }
108
+ let(:filewatcher_files) { "./#{tmp_files_dir}/**/*" }
95
109
 
96
- it { is_expected.to eq [{ watch_run.filename => :updated }] }
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(:filewatcher) { initialize_filewatcher('./spec/tmp') }
114
+ let(:filewatcher_files) { "./#{tmp_files_dir}" }
101
115
 
102
- it { is_expected.to eq [{ watch_run.filename => :updated }] }
116
+ it { is_expected.to eq [{ result_transformed_filename => :updated }] }
103
117
  end
104
118
 
105
119
  context 'with tilde expansion' do
106
- let(:filename) { File.expand_path('~/file_watcher_1.txt') }
120
+ let(:filewatcher_files) { '~/file_watcher_1.txt' }
121
+ let(:raw_file_name) { File.expand_path('~/file_watcher_1.txt') }
107
122
 
108
- let(:filewatcher) { initialize_filewatcher('~/file_watcher_1.txt') }
123
+ it { is_expected.to eq [{ raw_file_name => :updated }] }
124
+ end
125
+
126
+ context 'with Array of paths' do
127
+ let(:initial_file) { 'tmp_initial_file.txt' }
128
+ let(:subdir) { 'subdir' }
129
+ let(:new_file) { "#{subdir}/tmp_new_file.txt" }
130
+
131
+ let(:filewatcher_files) do
132
+ ["#{tmp_files_dir}/#{initial_file}", "#{tmp_files_dir}/#{subdir}"]
133
+ end
134
+
135
+ let(:initial_files) do
136
+ {
137
+ initial_file => {}
138
+ }
139
+ end
140
+
141
+ let(:changes) do
142
+ initial_files.to_h { |key, _value| [transform_spec_files(key), { event: :update }] }
143
+ .merge(
144
+ transform_spec_files(new_file) => { event: :create }
145
+ )
146
+ end
109
147
 
110
- it { is_expected.to eq [{ filename => :updated }] }
148
+ let(:expected_changes) do
149
+ [
150
+ initial_files.to_h { |key, _value| [transform_spec_files(key), :updated] }
151
+ .merge(
152
+ expected_new_file_change
153
+ )
154
+ ]
155
+ end
156
+
157
+ let(:expected_new_file_change) do
158
+ {
159
+ transform_spec_files(new_file) => :created
160
+ }
161
+ end
162
+
163
+ specify do
164
+ ## For case when changes detected separately, in CI for example, probably just slowly
165
+ expect(processed).to eq(expected_changes)
166
+ .or contain_exactly(
167
+ *initial_files.map { |key, _value| { transform_spec_files(key) => :updated } },
168
+ expected_new_file_change
169
+ )
170
+ end
111
171
  end
112
172
  end
113
173
 
@@ -152,51 +212,56 @@ describe Filewatcher do
152
212
  end
153
213
 
154
214
  context 'when there are file deletions' do
155
- let(:action) { :delete }
215
+ let(:change_event) { :delete }
156
216
 
157
- it { is_expected.to eq [{ watch_run.filename => :deleted }] }
217
+ it { is_expected.to eq [{ result_transformed_filename => :deleted }] }
158
218
  end
159
219
 
160
220
  context 'when there are file additions' do
161
- let(:action) { :create }
221
+ let(:initial_files) { {} }
222
+ let(:changes) { { result_transformed_filename => { event: :create } } }
162
223
 
163
- it { is_expected.to eq [{ watch_run.filename => :created }] }
224
+ it { is_expected.to eq [{ result_transformed_filename => :created }] }
164
225
  end
165
226
 
166
227
  context 'when there are file updates' do
167
- let(:action) { :update }
228
+ let(:change_event) { :update }
168
229
 
169
- it { is_expected.to eq [{ watch_run.filename => :updated }] }
230
+ it { is_expected.to eq [{ result_transformed_filename => :updated }] }
170
231
  end
171
232
 
172
233
  context 'when there are new files in subdirectories' do
173
- let(:subdirectory) { File.expand_path('spec/tmp/new_sub_directory') }
234
+ let(:subdirectory) { File.expand_path("#{tmp_files_dir}/new_sub_directory") }
235
+
236
+ let(:initial_files) { {} }
237
+ let(:created_filename) { File.join(subdirectory, 'file.txt') }
238
+ let(:changes) { { created_filename => { event: :create } } }
174
239
 
175
- let(:filename) { File.join(subdirectory, 'file.txt') }
176
- let(:action) { :create }
177
240
  let(:every) { true }
178
241
  ## https://github.com/filewatcher/filewatcher/pull/115#issuecomment-674581595
179
242
  let(:interval) { 0.4 }
180
243
 
181
244
  it do
182
245
  expect(processed).to eq [
183
- { subdirectory => :updated, watch_run.filename => :created }
246
+ { subdirectory => :updated, created_filename => :created }
184
247
  ]
185
248
  end
186
249
  end
187
250
 
188
251
  context 'when there are new subdirectories' do
189
- let(:filename) { 'new_sub_directory' }
190
- let(:action) { :create_dir }
252
+ let(:initial_files) { {} }
253
+ let(:raw_file_name) { 'new_sub_directory' }
254
+ let(:change_event) { :create }
255
+ let(:change_directory) { true }
191
256
 
192
- it { is_expected.to eq [{ watch_run.filename => :created }] }
257
+ it { is_expected.to eq [{ result_transformed_filename => :created }] }
193
258
  end
194
259
  end
195
260
 
196
261
  context 'when action is unknown' do
197
- let(:action) { :foo }
262
+ let(:change_event) { :foo }
198
263
 
199
- specify { expect { watch_run.run }.to raise_error(RuntimeError, 'Unknown action `foo`') }
264
+ specify { expect { watch_run.run }.to raise_error(RuntimeError, 'Unknown change `foo`') }
200
265
  end
201
266
  end
202
267
 
@@ -214,11 +279,10 @@ describe Filewatcher do
214
279
  def write_tmp_files(range)
215
280
  logger.debug "#{__method__} #{range}"
216
281
 
217
- directory = 'spec/tmp'
218
- FileUtils.mkdir_p directory
282
+ FileUtils.mkdir_p tmp_files_dir
219
283
 
220
284
  range.to_a.map do |n|
221
- File.write(file = "#{directory}/file#{n}.txt", "content#{n}")
285
+ File.write(file = "#{tmp_files_dir}/file#{n}.txt", "content#{n}")
222
286
 
223
287
  Filewatcher::SpecHelper.wait seconds: 1
224
288
 
@@ -236,7 +300,7 @@ describe Filewatcher do
236
300
  logger.debug 'filewatcher.pause'
237
301
  watch_run.filewatcher.pause
238
302
 
239
- Filewatcher::SpecHelper.wait seconds: 1
303
+ described_class::SpecHelper.wait seconds: 1
240
304
 
241
305
  write_tmp_files 1..4
242
306
  end
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['CODECOV_TOKEN']
7
- require 'codecov'
8
- SimpleCov.formatter = SimpleCov::Formatter::Codecov
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,142 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filewatcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Flemming
8
8
  - Alexander Popov
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2022-09-08 00:00:00.000000000 Z
11
+ date: 2026-02-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: bundler
14
+ name: logger
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
17
  - - "~>"
19
18
  - !ruby/object:Gem::Version
20
- version: '2.0'
21
- type: :development
19
+ version: '1.7'
20
+ type: :runtime
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
24
  - - "~>"
26
25
  - !ruby/object:Gem::Version
27
- version: '2.0'
26
+ version: '1.7'
28
27
  - !ruby/object:Gem::Dependency
29
- name: bundler-audit
28
+ name: module_methods
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - "~>"
33
32
  - !ruby/object:Gem::Version
34
- version: 0.9.0
35
- type: :development
33
+ version: 0.1.0
34
+ type: :runtime
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
38
  - - "~>"
40
39
  - !ruby/object:Gem::Version
41
- version: 0.9.0
42
- - !ruby/object:Gem::Dependency
43
- name: gem_toys
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - "~>"
47
- - !ruby/object:Gem::Version
48
- version: 0.12.1
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - "~>"
54
- - !ruby/object:Gem::Version
55
- version: 0.12.1
56
- - !ruby/object:Gem::Dependency
57
- name: toys
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: 0.13.0
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: 0.13.0
70
- - !ruby/object:Gem::Dependency
71
- name: codecov
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: 0.6.0
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: 0.6.0
84
- - !ruby/object:Gem::Dependency
85
- name: rspec
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - "~>"
89
- - !ruby/object:Gem::Version
90
- version: '3.8'
91
- type: :development
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - "~>"
96
- - !ruby/object:Gem::Version
97
- version: '3.8'
98
- - !ruby/object:Gem::Dependency
99
- name: rubocop
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - "~>"
103
- - !ruby/object:Gem::Version
104
- version: 1.36.0
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - "~>"
110
- - !ruby/object:Gem::Version
111
- version: 1.36.0
112
- - !ruby/object:Gem::Dependency
113
- name: rubocop-performance
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - "~>"
117
- - !ruby/object:Gem::Version
118
- version: '1.5'
119
- type: :development
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - "~>"
124
- - !ruby/object:Gem::Version
125
- version: '1.5'
126
- - !ruby/object:Gem::Dependency
127
- name: rubocop-rspec
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - "~>"
131
- - !ruby/object:Gem::Version
132
- version: '2.0'
133
- type: :development
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - "~>"
138
- - !ruby/object:Gem::Version
139
- version: '2.0'
40
+ version: 0.1.0
140
41
  description: Detect changes in file system. Works anywhere.
141
42
  email:
142
43
  - thomas.flemming@gmail.com
@@ -153,6 +54,7 @@ files:
153
54
  - lib/filewatcher/spec_helper/ruby_watch_run.rb
154
55
  - lib/filewatcher/spec_helper/watch_run.rb
155
56
  - lib/filewatcher/version.rb
57
+ - spec/examples.txt
156
58
  - spec/filewatcher/snapshot_spec.rb
157
59
  - spec/filewatcher/version_spec.rb
158
60
  - spec/filewatcher_spec.rb
@@ -162,7 +64,6 @@ licenses:
162
64
  - MIT
163
65
  metadata:
164
66
  rubygems_mfa_required: 'true'
165
- post_install_message:
166
67
  rdoc_options: []
167
68
  require_paths:
168
69
  - lib
@@ -170,18 +71,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
71
  requirements:
171
72
  - - ">="
172
73
  - !ruby/object:Gem::Version
173
- version: '2.6'
74
+ version: '3.2'
174
75
  - - "<"
175
76
  - !ruby/object:Gem::Version
176
- version: '4'
77
+ version: '5'
177
78
  required_rubygems_version: !ruby/object:Gem::Requirement
178
79
  requirements:
179
80
  - - ">="
180
81
  - !ruby/object:Gem::Version
181
82
  version: '0'
182
83
  requirements: []
183
- rubygems_version: 3.3.7
184
- signing_key:
84
+ rubygems_version: 3.6.2
185
85
  specification_version: 4
186
86
  summary: Lightweight filewatcher.
187
87
  test_files: []