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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59a457d937b483f6b936e5741df3ac777ef58fe43983c36de2fc00f9475e3e32
4
- data.tar.gz: aca66c67a07d0d596afa06af04984a42f2d2fe83a6353bf84f11b34199e8379a
3
+ metadata.gz: f152abad4db37d701c171c006aa348be75d484a57b5dad570fdb7f9fa9f8e613
4
+ data.tar.gz: 3ac3b63272cee0295bac2eaefbf131a0933aeea5d0749d61cd8b3d214786a2ee
5
5
  SHA512:
6
- metadata.gz: 384400d7f817cd4d403b977a9f7a52eca5b331a217829c013c42227d468e673f462b8072fae057ca60bf0048a9505994278aab0449f41620172ea97f443ef141
7
- data.tar.gz: 17f903b43e2fd857d2b6b2f48bb81a51ebc175bb631089fda561ed082c29dda38e945ef9c6bbd21825310de9690f63021fc4c0bdce1aff132ce97d5323124871
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 = "#{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"
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
- attr_reader :filename
35
+ @changes = changes
12
36
 
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}"
37
+ debug "changes = #{@changes}"
17
38
  end
18
39
 
19
40
  def start
20
41
  debug 'start'
21
- File.write(@filename, 'content1') unless %i[create create_dir].include? @action
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(@filename) if File.exist?(@filename)
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 'content2' > #{@filename}"
49
- debug_file_mtime
83
+ system "echo '#{new_content}' > #{change_file}"
84
+
85
+ debug_file_mtime(change_file)
50
86
  end.freeze
51
87
 
52
- ACTIONS = {
88
+ CHANGES = {
53
89
  create: create_update_action,
54
90
  update: create_update_action,
55
- create_dir: -> { FileUtils.mkdir_p(@filename) },
56
- delete: -> { FileUtils.remove(@filename) }
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
- 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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Filewatcher
4
- VERSION = '2.0.0'
4
+ VERSION = '2.1.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.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 |
@@ -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
- let(:tmp_dir) { Filewatcher::SpecHelper::WatchRun::TMP_DIR }
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(:filename) { 'tmp_file.txt' }
30
- let(:action) { :update }
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
- 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
 
@@ -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,79 @@ 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') }
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(:filewatcher) { initialize_filewatcher('~/file_watcher_1.txt') }
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
- it { is_expected.to eq [{ filename => :updated }] }
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(:action) { :delete }
213
+ let(:change_event) { :delete }
156
214
 
157
- it { is_expected.to eq [{ watch_run.filename => :deleted }] }
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(:action) { :create }
219
+ let(:initial_files) { {} }
220
+ let(:changes) { { result_transformed_filename => { event: :create } } }
162
221
 
163
- it { is_expected.to eq [{ watch_run.filename => :created }] }
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(:action) { :update }
226
+ let(:change_event) { :update }
168
227
 
169
- it { is_expected.to eq [{ watch_run.filename => :updated }] }
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('spec/tmp/new_sub_directory') }
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, watch_run.filename => :created }
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(:filename) { 'new_sub_directory' }
190
- let(:action) { :create_dir }
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 [{ watch_run.filename => :created }] }
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(:action) { :foo }
260
+ let(:change_event) { :foo }
198
261
 
199
- specify { expect { watch_run.run }.to raise_error(RuntimeError, 'Unknown action `foo`') }
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
- directory = 'spec/tmp'
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 = "#{directory}/file#{n}.txt", "content#{n}")
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['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,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filewatcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
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-09-08 00:00:00.000000000 Z
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.13.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.13.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.36.0
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.36.0
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.7
226
+ rubygems_version: 3.0.3.1
184
227
  signing_key:
185
228
  specification_version: 4
186
229
  summary: Lightweight filewatcher.