listen 2.7.4 → 2.7.5

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +232 -0
  3. data/.travis.yml +6 -3
  4. data/Gemfile +9 -1
  5. data/Guardfile +6 -1
  6. data/README.md +17 -4
  7. data/lib/listen.rb +9 -4
  8. data/lib/listen/adapter.rb +5 -7
  9. data/lib/listen/adapter/base.rb +8 -5
  10. data/lib/listen/adapter/bsd.rb +58 -21
  11. data/lib/listen/adapter/darwin.rb +2 -4
  12. data/lib/listen/adapter/linux.rb +20 -10
  13. data/lib/listen/adapter/polling.rb +0 -2
  14. data/lib/listen/adapter/tcp.rb +6 -5
  15. data/lib/listen/adapter/windows.rb +8 -6
  16. data/lib/listen/change.rb +1 -2
  17. data/lib/listen/cli.rb +25 -22
  18. data/lib/listen/directory.rb +8 -6
  19. data/lib/listen/listener.rb +25 -19
  20. data/lib/listen/record.rb +4 -2
  21. data/lib/listen/silencer.rb +55 -25
  22. data/lib/listen/tcp.rb +9 -0
  23. data/lib/listen/tcp/broadcaster.rb +0 -2
  24. data/lib/listen/tcp/listener.rb +13 -8
  25. data/lib/listen/tcp/message.rb +0 -2
  26. data/lib/listen/version.rb +1 -1
  27. data/listen.gemspec +4 -3
  28. data/spec/acceptance/listen_spec.rb +190 -109
  29. data/spec/acceptance/tcp_spec.rb +28 -26
  30. data/spec/lib/listen/adapter/base_spec.rb +14 -12
  31. data/spec/lib/listen/adapter/bsd_spec.rb +5 -2
  32. data/spec/lib/listen/adapter/darwin_spec.rb +5 -2
  33. data/spec/lib/listen/adapter/linux_spec.rb +40 -25
  34. data/spec/lib/listen/adapter/polling_spec.rb +29 -14
  35. data/spec/lib/listen/adapter/tcp_spec.rb +24 -6
  36. data/spec/lib/listen/adapter/windows_spec.rb +5 -2
  37. data/spec/lib/listen/adapter_spec.rb +20 -17
  38. data/spec/lib/listen/change_spec.rb +36 -26
  39. data/spec/lib/listen/directory_spec.rb +128 -71
  40. data/spec/lib/listen/file_spec.rb +67 -34
  41. data/spec/lib/listen/listener_spec.rb +135 -105
  42. data/spec/lib/listen/record_spec.rb +32 -29
  43. data/spec/lib/listen/silencer_spec.rb +78 -56
  44. data/spec/lib/listen/tcp/broadcaster_spec.rb +3 -2
  45. data/spec/lib/listen/tcp/listener_spec.rb +17 -11
  46. data/spec/lib/listen/tcp/message_spec.rb +1 -1
  47. data/spec/lib/listen_spec.rb +18 -6
  48. data/spec/spec_helper.rb +5 -1
  49. data/spec/support/acceptance_helper.rb +3 -3
  50. data/spec/support/fixtures_helper.rb +10 -9
  51. metadata +17 -15
@@ -3,83 +3,111 @@ require 'spec_helper'
3
3
  describe Listen::File do
4
4
  let(:registry) { double(Celluloid::Registry) }
5
5
  let(:listener) { double(Listen::Listener, registry: registry, options: {}) }
6
- let(:record) { double(Listen::Record, async: double(set_path: true, unset_path: true)) }
6
+
7
+ let(:record) do
8
+ double(Listen::Record, async: double(set_path: true, unset_path: true))
9
+ end
10
+
7
11
  let(:path) { Pathname.new(Dir.pwd) }
8
- around { |example| fixtures { |path| example.run } }
12
+ around { |example| fixtures { example.run } }
9
13
  before { registry.stub(:[]).with(:record) { record } }
10
14
 
11
- describe "#change" do
15
+ describe '#change' do
12
16
  let(:file_path) { path.join('file.rb') }
13
17
  let(:file) { Listen::File.new(listener, file_path) }
14
- let(:expected_data) { { type: 'File', mtime: kind_of(Float), mode: kind_of(Integer) } }
15
18
 
16
- context "path present in record" do
19
+ let(:expected_data) do
20
+ { type: 'File', mtime: kind_of(Float), mode: kind_of(Integer) }
21
+ end
22
+
23
+ context 'path present in record' do
17
24
  let(:record_mtime) { nil }
18
25
  let(:record_md5) { nil }
19
26
  let(:record_mode) { nil }
20
- let(:record_data) { { type: 'File', mtime: record_mtime, md5: record_md5, mode: record_mode } }
21
- before { record.stub_chain(:future, :file_data) { double(value: record_data) } }
22
27
 
23
- context "non-existing path" do
24
- it "returns added" do
28
+ let(:record_data) do
29
+ { type: 'File',
30
+ mtime: record_mtime,
31
+ md5: record_md5,
32
+ mode: record_mode }
33
+ end
34
+
35
+ before do
36
+ record.stub_chain(:future, :file_data) { double(value: record_data) }
37
+ end
38
+
39
+ context 'non-existing path' do
40
+ it 'returns added' do
25
41
  expect(file.change).to eq :removed
26
42
  end
27
- it "sets path in record" do
43
+ it 'sets path in record' do
28
44
  expect(record.async).to receive(:unset_path).with(file_path)
29
45
  file.change
30
46
  end
31
47
  end
32
48
 
33
- context "existing path" do
34
- around { |example| touch file_path; example.run }
49
+ context 'existing path' do
50
+ around do |example|
51
+ touch file_path
52
+ example.run
53
+ end
35
54
 
36
- context "old record path mtime" do
55
+ context 'old record path mtime' do
37
56
  let(:record_mtime) { (Time.now - 1).to_f }
38
57
 
39
- it "returns modified" do
58
+ it 'returns modified' do
40
59
  expect(file.change).to eq :modified
41
60
  end
42
61
 
43
- it "sets path in record with expected data" do
44
- expect(record.async).to receive(:set_path).with(file_path, expected_data)
62
+ it 'sets path in record with expected data' do
63
+ expect(record.async).to receive(:set_path).
64
+ with(file_path, expected_data)
65
+
45
66
  file.change
46
67
  end
47
68
  end
48
69
 
49
- context "same record path mtime" do
70
+ context 'same record path mtime' do
50
71
  let(:record_mtime) { ::File.lstat(file_path).mtime.to_f }
51
72
  let(:record_mode) { ::File.lstat(file_path).mode }
52
73
 
53
- context "same record path mode" do
54
- it "returns nil" do
74
+ context 'same record path mode' do
75
+ it 'returns nil' do
55
76
  expect(file.change).to be_nil
56
77
  end
57
78
  end
58
79
 
59
- context "diferent record path mode" do
80
+ context 'diferent record path mode' do
60
81
  let(:record_mode) { 'foo' }
61
82
 
62
- it "returns modified" do
83
+ it 'returns modified' do
63
84
  expect(file.change).to eq :modified
64
85
  end
65
86
  end
66
87
 
67
- context "same record path md5" do
68
- it "returns nil" do
88
+ context 'same record path md5' do
89
+ it 'returns nil' do
69
90
  expect(file.change).to be_nil
70
91
  end
71
92
  end
72
93
 
73
94
  if darwin?
74
- context "different record path md5" do
95
+ context 'different record path md5' do
75
96
  let(:record_md5) { 'foo' }
76
- let(:expected_data) { { type: 'File', mtime: kind_of(Float), mode: kind_of(Integer), md5: kind_of(String) } }
97
+ let(:expected_data) do
98
+ { type: 'File',
99
+ mtime: kind_of(Float),
100
+ mode: kind_of(Integer),
101
+ md5: kind_of(String) }
102
+ end
77
103
 
78
- it "returns modified" do
104
+ it 'returns modified' do
79
105
  expect(file.change).to eq :modified
80
106
  end
81
- it "sets path in record with expected data" do
82
- expect(record.async).to receive(:set_path).with(file_path, expected_data)
107
+ it 'sets path in record with expected data' do
108
+ expect(record.async).to receive(:set_path).
109
+ with(file_path, expected_data)
110
+
83
111
  file.change
84
112
  end
85
113
  end
@@ -89,18 +117,23 @@ describe Listen::File do
89
117
  end
90
118
  end
91
119
 
92
- context "path not present in record" do
120
+ context 'path not present in record' do
93
121
  before { record.stub_chain(:future, :file_data) { double(value: {}) } }
94
122
 
95
- context "existing path" do
96
- around { |example| touch file_path; example.run }
123
+ context 'existing path' do
124
+ around do |example|
125
+ touch file_path
126
+ example.run
127
+ end
97
128
 
98
- it "returns added" do
129
+ it 'returns added' do
99
130
  expect(file.change).to eq :added
100
131
  end
101
132
 
102
- it "sets path in record with expected data" do
103
- expect(record.async).to receive(:set_path).with(file_path, expected_data)
133
+ it 'sets path in record with expected data' do
134
+ expect(record.async).to receive(:set_path).
135
+ with(file_path, expected_data)
136
+
104
137
  file.change
105
138
  end
106
139
  end
@@ -4,13 +4,20 @@ describe Listen::Listener do
4
4
  let(:listener) { Listen::Listener.new(options) }
5
5
  let(:options) { {} }
6
6
  let(:registry) { double(Celluloid::Registry, :[]= => true) }
7
- let(:supervisor) { double(Celluloid::SupervisionGroup, add: true, pool: true) }
7
+
8
+ let(:supervisor) do
9
+ double(Celluloid::SupervisionGroup,
10
+ add: true,
11
+ pool: true)
12
+ end
13
+
8
14
  let(:record) { double(Listen::Record, terminate: true, build: true) }
9
15
  let(:silencer) { double(Listen::Silencer, terminate: true) }
10
- let(:adapter) { double(Listen::Adapter::Base) }
16
+ let(:adapter_class) { double(:adapter_class, local_fs?: true) }
17
+ let(:adapter) { double(Listen::Adapter::Base, class: adapter_class) }
11
18
  let(:change_pool) { double(Listen::Change, terminate: true) }
12
19
  let(:change_pool_async) { double('ChangePoolAsync') }
13
- before {
20
+ before do
14
21
  Celluloid::Registry.stub(:new) { registry }
15
22
  Celluloid::SupervisionGroup.stub(:run!) { supervisor }
16
23
  registry.stub(:[]).with(:silencer) { silencer }
@@ -18,98 +25,110 @@ describe Listen::Listener do
18
25
  registry.stub(:[]).with(:record) { record }
19
26
  registry.stub(:[]).with(:change_pool) { change_pool }
20
27
 
21
- }
28
+ end
22
29
 
23
- describe "initialize" do
24
- it "sets paused to false" do
30
+ describe 'initialize' do
31
+ it 'sets paused to false' do
25
32
  expect(listener).not_to be_paused
26
33
  end
27
34
 
28
- it "sets block" do
29
- block = Proc.new { |modified, added, removed| }
35
+ it 'sets block' do
36
+ block = proc {}
30
37
  listener = Listen::Listener.new('lib', &block)
31
38
  expect(listener.block).not_to be_nil
32
39
  end
33
40
 
34
- it "sets directories with realpath" do
41
+ it 'sets directories with realpath' do
35
42
  listener = Listen::Listener.new('lib', 'spec')
36
- expect(listener.directories).to eq [Pathname.new("#{Dir.pwd}/lib"), Pathname.new("#{Dir.pwd}/spec")]
43
+ expected = %w(lib spec).map { |dir| Pathname.pwd.join(dir) }
44
+ expect(listener.directories).to eq expected
37
45
  end
38
46
  end
39
47
 
40
- describe "options" do
41
- it "sets default options" do
42
- expect(listener.options).to eq({
43
- debug: false,
44
- latency: nil,
45
- wait_for_delay: 0.1,
46
- force_polling: false,
47
- polling_fallback_message: nil })
48
- end
49
-
50
- it "sets new options on initialize" do
51
- listener = Listen::Listener.new('lib', latency: 1.234, wait_for_delay: 0.85)
52
- expect(listener.options).to eq({
53
- debug: false,
54
- latency: 1.234,
55
- wait_for_delay: 0.85,
56
- force_polling: false,
57
- polling_fallback_message: nil })
48
+ describe 'options' do
49
+ it 'sets default options' do
50
+ expect(listener.options).to eq(
51
+ debug: false,
52
+ latency: nil,
53
+ wait_for_delay: 0.1,
54
+ force_polling: false,
55
+ polling_fallback_message: nil)
56
+ end
57
+
58
+ it 'sets new options on initialize' do
59
+ listener = Listen::Listener.new('lib',
60
+ latency: 1.234,
61
+ wait_for_delay: 0.85)
62
+
63
+ expect(listener.options).to eq(
64
+ debug: false,
65
+ latency: 1.234,
66
+ wait_for_delay: 0.85,
67
+ force_polling: false,
68
+ polling_fallback_message: nil)
58
69
  end
59
70
  end
60
71
 
61
- describe "#start" do
62
- before {
72
+ describe '#start' do
73
+ before do
63
74
  adapter.stub_chain(:async, :start)
64
75
  silencer.stub(:silenced?) { false }
65
- }
76
+ end
77
+
78
+ it 'registers silencer' do
79
+ expect(supervisor).to receive(:add).
80
+ with(Listen::Silencer, as: :silencer, args: listener)
66
81
 
67
- it "registers silencer" do
68
- expect(supervisor).to receive(:add).with(Listen::Silencer, as: :silencer, args: listener)
69
82
  listener.start
70
83
  end
71
84
 
72
- it "supervises change_pool" do
73
- expect(supervisor).to receive(:pool).with(Listen::Change, as: :change_pool, args: listener)
85
+ it 'supervises change_pool' do
86
+ expect(supervisor).to receive(:pool).
87
+ with(Listen::Change, as: :change_pool, args: listener)
88
+
74
89
  listener.start
75
90
  end
76
91
 
77
- it "supervises adaper" do
92
+ it 'supervises adaper' do
78
93
  Listen::Adapter.stub(:select) { Listen::Adapter::Polling }
79
- expect(supervisor).to receive(:add).with(Listen::Adapter::Polling, as: :adapter, args: listener)
94
+ expect(supervisor).to receive(:add).
95
+ with(Listen::Adapter::Polling, as: :adapter, args: listener)
96
+
80
97
  listener.start
81
98
  end
82
99
 
83
- it "supervises record" do
84
- expect(supervisor).to receive(:add).with(Listen::Record, as: :record, args: listener)
100
+ it 'supervises record' do
101
+ expect(supervisor).to receive(:add).
102
+ with(Listen::Record, as: :record, args: listener)
103
+
85
104
  listener.start
86
105
  end
87
106
 
88
- it "builds record" do
107
+ it 'builds record' do
89
108
  expect(record).to receive(:build)
90
109
  listener.start
91
110
  end
92
111
 
93
- it "sets paused to false" do
112
+ it 'sets paused to false' do
94
113
  listener.start
95
114
  expect(listener.paused).to be_false
96
115
  end
97
116
 
98
- it "starts adapter asynchronously" do
117
+ it 'starts adapter asynchronously' do
99
118
  async_stub = double
100
119
  expect(adapter).to receive(:async) { async_stub }
101
120
  expect(async_stub).to receive(:start)
102
121
  listener.start
103
122
  end
104
123
 
105
- it "starts adapter asynchronously" do
124
+ it 'starts adapter asynchronously' do
106
125
  async_stub = double
107
126
  expect(adapter).to receive(:async) { async_stub }
108
127
  expect(async_stub).to receive(:start)
109
128
  listener.start
110
129
  end
111
130
 
112
- it "calls block on changes" do
131
+ it 'calls block on changes' do
113
132
  foo = double(Pathname, to_s: 'foo', exist?: true, directory?: false)
114
133
  listener.changes = [{ modified: foo }]
115
134
  block_stub = double('block')
@@ -120,96 +139,96 @@ describe Listen::Listener do
120
139
  end
121
140
  end
122
141
 
123
- describe "#stop" do
124
- it "terminates supervisor" do
142
+ describe '#stop' do
143
+ it 'terminates supervisor' do
125
144
  listener.supervisor = supervisor
126
145
  expect(supervisor).to receive(:terminate)
127
146
  listener.stop
128
147
  end
129
148
  end
130
149
 
131
- describe "#pause" do
132
- it "sets paused to true" do
150
+ describe '#pause' do
151
+ it 'sets paused to true' do
133
152
  listener.pause
134
153
  expect(listener.paused).to be_true
135
154
  end
136
155
  end
137
156
 
138
- describe "#unpause" do
139
- it "builds record" do
157
+ describe '#unpause' do
158
+ it 'builds record' do
140
159
  expect(record).to receive(:build)
141
160
  listener.unpause
142
161
  end
143
162
 
144
- it "sets paused to false" do
163
+ it 'sets paused to false' do
145
164
  record.stub(:build)
146
165
  listener.unpause
147
166
  expect(listener.paused).to be_false
148
167
  end
149
168
  end
150
169
 
151
- describe "#paused?" do
152
- it "returns true when paused" do
170
+ describe '#paused?' do
171
+ it 'returns true when paused' do
153
172
  listener.paused = true
154
173
  expect(listener).to be_paused
155
174
  end
156
- it "returns false when not paused (nil)" do
175
+ it 'returns false when not paused (nil)' do
157
176
  listener.paused = nil
158
177
  expect(listener).not_to be_paused
159
178
  end
160
- it "returns false when not paused (false)" do
179
+ it 'returns false when not paused (false)' do
161
180
  listener.paused = false
162
181
  expect(listener).not_to be_paused
163
182
  end
164
183
  end
165
184
 
166
- describe "#listen?" do
167
- it "returns true when not paused (false)" do
185
+ describe '#listen?' do
186
+ it 'returns true when not paused (false)' do
168
187
  listener.paused = false
169
188
  listener.stopping = false
170
189
  expect(listener.listen?).to be_true
171
190
  end
172
- it "returns false when not paused (nil)" do
191
+ it 'returns false when not paused (nil)' do
173
192
  listener.paused = nil
174
193
  listener.stopping = false
175
194
  expect(listener.listen?).to be_false
176
195
  end
177
- it "returns false when paused" do
196
+ it 'returns false when paused' do
178
197
  listener.paused = true
179
198
  listener.stopping = false
180
199
  expect(listener.listen?).to be_false
181
200
  end
182
- it "returns false when stopped" do
201
+ it 'returns false when stopped' do
183
202
  listener.paused = false
184
203
  listener.stopping = true
185
204
  expect(listener.listen?).to be_false
186
205
  end
187
206
  end
188
207
 
189
- describe "#ignore" do
208
+ describe '#ignore' do
190
209
  let(:new_silencer) { double(Listen::Silencer) }
191
210
  before { Celluloid::Actor.stub(:[]=) }
192
211
 
193
- it "resets silencer actor" do
212
+ it 'resets silencer actor' do
194
213
  expect(Listen::Silencer).to receive(:new).with(listener) { new_silencer }
195
214
  expect(registry).to receive(:[]=).with(:silencer, new_silencer)
196
215
  listener.ignore(/foo/)
197
216
  end
198
217
 
199
- context "with existing ignore options" do
218
+ context 'with existing ignore options' do
200
219
  let(:options) { { ignore: /bar/ } }
201
220
 
202
- it "adds up to existing ignore options" do
221
+ it 'adds up to existing ignore options' do
203
222
  expect(Listen::Silencer).to receive(:new).with(listener)
204
223
  listener.ignore(/foo/)
205
224
  expect(listener.options).to include(ignore: [/bar/, /foo/])
206
225
  end
207
226
  end
208
227
 
209
- context "with existing ignore options (array)" do
228
+ context 'with existing ignore options (array)' do
210
229
  let(:options) { { ignore: [/bar/] } }
211
230
 
212
- it "adds up to existing ignore options" do
231
+ it 'adds up to existing ignore options' do
213
232
  expect(Listen::Silencer).to receive(:new).with(listener)
214
233
  listener.ignore(/foo/)
215
234
  expect(listener.options).to include(ignore: [[/bar/], /foo/])
@@ -217,31 +236,31 @@ describe Listen::Listener do
217
236
  end
218
237
  end
219
238
 
220
- describe "#ignore!" do
239
+ describe '#ignore!' do
221
240
  let(:new_silencer) { double(Listen::Silencer) }
222
241
  before { Celluloid::Actor.stub(:[]=) }
223
242
 
224
- it "resets silencer actor" do
243
+ it 'resets silencer actor' do
225
244
  expect(Listen::Silencer).to receive(:new).with(listener) { new_silencer }
226
245
  expect(registry).to receive(:[]=).with(:silencer, new_silencer)
227
246
  listener.ignore!(/foo/)
228
247
  expect(listener.options).to include(ignore!: /foo/)
229
248
  end
230
249
 
231
- context "with existing ignore! options" do
250
+ context 'with existing ignore! options' do
232
251
  let(:options) { { ignore!: /bar/ } }
233
252
 
234
- it "overwrites existing ignore options" do
253
+ it 'overwrites existing ignore options' do
235
254
  expect(Listen::Silencer).to receive(:new).with(listener)
236
255
  listener.ignore!([/foo/])
237
256
  expect(listener.options).to include(ignore!: [/foo/])
238
257
  end
239
258
  end
240
259
 
241
- context "with existing ignore options" do
260
+ context 'with existing ignore options' do
242
261
  let(:options) { { ignore: /bar/ } }
243
262
 
244
- it "deletes ignore options" do
263
+ it 'deletes ignore options' do
245
264
  expect(Listen::Silencer).to receive(:new).with(listener)
246
265
  listener.ignore!([/foo/])
247
266
  expect(listener.options).to_not include(ignore: /bar/)
@@ -249,20 +268,20 @@ describe Listen::Listener do
249
268
  end
250
269
  end
251
270
 
252
- describe "#only" do
271
+ describe '#only' do
253
272
  let(:new_silencer) { double(Listen::Silencer) }
254
273
  before { Celluloid::Actor.stub(:[]=) }
255
274
 
256
- it "resets silencer actor" do
275
+ it 'resets silencer actor' do
257
276
  expect(Listen::Silencer).to receive(:new).with(listener) { new_silencer }
258
277
  expect(registry).to receive(:[]=).with(:silencer, new_silencer)
259
278
  listener.only(/foo/)
260
279
  end
261
280
 
262
- context "with existing only options" do
281
+ context 'with existing only options' do
263
282
  let(:options) { { only: /bar/ } }
264
283
 
265
- it "overwrites existing ignore options" do
284
+ it 'overwrites existing ignore options' do
266
285
  expect(Listen::Silencer).to receive(:new).with(listener)
267
286
  listener.only([/foo/])
268
287
  expect(listener.options).to include(only: [/foo/])
@@ -275,28 +294,31 @@ describe Listen::Listener do
275
294
  silencer.stub(:silenced?) { false }
276
295
 
277
296
  fake_time = 0
278
- listener.stub(:sleep) { |sec| fake_time += sec; listener.stopping = true if fake_time > 1 }
297
+ listener.stub(:sleep) do |sec|
298
+ fake_time += sec
299
+ listener.stopping = true if fake_time > 1
300
+ end
279
301
 
280
- listener.block = proc { |modified, added, removed|
302
+ listener.block = proc do |modified, added, _|
281
303
  expect(modified).to eql(['foo.txt'])
282
304
  expect(added).to eql(['bar.txt'])
283
- }
305
+ end
284
306
 
285
307
  foo = double(Pathname, to_s: 'foo.txt', exist?: true, directory?: false)
286
308
  bar = double(Pathname, to_s: 'bar.txt', exist?: true, directory?: false)
287
309
 
288
310
  i = 0
289
311
  listener.stub(:_pop_changes) do
290
- i+=1
312
+ i += 1
291
313
  case i
292
- when 1
293
- []
294
- when 2
295
- [{modified: foo}]
296
- when 3
297
- [{added: bar}]
298
- else
299
- []
314
+ when 1
315
+ []
316
+ when 2
317
+ [{ modified: foo }]
318
+ when 3
319
+ [{ added: bar }]
320
+ else
321
+ []
300
322
  end
301
323
  end
302
324
 
@@ -343,14 +365,12 @@ describe Listen::Listener do
343
365
  expect(smooshed).to eq(modified: ['foo'], added: [], removed: [])
344
366
  end
345
367
 
346
- context "with cookie" do
368
+ context 'with cookie' do
347
369
 
348
370
  it 'recognizes single moved_to as add' do
349
371
  foo = double(Pathname, to_s: 'foo', exist?: true, directory?: false)
350
- changes = [
351
- { moved_to: foo , cookie: 4321 },
352
- ]
353
- expect(silencer).to receive(:silenced?).with(foo, 'File').and_return(false)
372
+ changes = [{ moved_to: foo , cookie: 4321 }]
373
+ expect(silencer).to receive(:silenced?).with(foo, 'File') { false }
354
374
  smooshed = listener.send :_smoosh_changes, changes
355
375
  expect(smooshed).to eq(modified: [], added: ['foo'], removed: [])
356
376
  end
@@ -360,35 +380,45 @@ describe Listen::Listener do
360
380
  bar = double(:bar, to_s: 'bar', exist?: true, directory?: false)
361
381
  changes = [
362
382
  { moved_from: foo , cookie: 4321 },
363
- { moved_to: bar, cookie: 4321 },
383
+ { moved_to: bar, cookie: 4321 }
364
384
  ]
365
- expect(silencer).to receive(:silenced?).twice.with(foo, 'File').and_return(false)
366
- expect(silencer).to receive(:silenced?).with(bar, 'File').and_return(false)
385
+
386
+ expect(silencer).to receive(:silenced?).
387
+ twice.with(foo, 'File') { false }
388
+
389
+ expect(silencer).to receive(:silenced?).with(bar, 'File') { false }
367
390
  smooshed = listener.send :_smoosh_changes, changes
368
391
  expect(smooshed).to eq(modified: [], added: ['bar'], removed: [])
369
392
  end
370
393
 
371
394
  # Scenario with workaround for editors using rename()
372
395
  it 'recognizes related moved_to with ignored moved_from as modify' do
373
- ignored = double(Pathname, to_s: 'foo', exist?: true, directory?: false)
396
+
397
+ ignored = double(Pathname,
398
+ to_s: 'foo',
399
+ exist?: true,
400
+ directory?: false)
401
+
374
402
  foo = double(Pathname, to_s: 'foo', exist?: true, directory?: false)
375
403
  changes = [
376
404
  { moved_from: ignored, cookie: 4321 },
377
- { moved_to: foo , cookie: 4321 },
405
+ { moved_to: foo , cookie: 4321 }
378
406
  ]
379
- expect(silencer).to receive(:silenced?).with(ignored, 'File').and_return(true)
380
- expect(silencer).to receive(:silenced?).with(foo, 'File').and_return(false)
407
+ expect(silencer).to receive(:silenced?).with(ignored, 'File') { true }
408
+ expect(silencer).to receive(:silenced?).with(foo, 'File') { false }
381
409
  smooshed = listener.send :_smoosh_changes, changes
382
410
  expect(smooshed).to eq(modified: ['foo'], added: [], removed: [])
383
411
  end
384
412
  end
385
413
 
386
- context "with no cookie" do
414
+ context 'with no cookie' do
387
415
  it 'recognizes properly ignores files' do
388
- ignored = double(Pathname, to_s: 'foo', exist?: true, directory?: false)
389
- changes = [
390
- { modified: ignored },
391
- ]
416
+ ignored = double(Pathname,
417
+ to_s: 'foo',
418
+ exist?: true,
419
+ directory?: false)
420
+
421
+ changes = [{ modified: ignored }]
392
422
  expect(silencer).to receive(:silenced?).with(ignored, 'File') { true }
393
423
  smooshed = listener.send :_smoosh_changes, changes
394
424
  expect(smooshed).to eq(modified: [], added: [], removed: [])