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 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.