listen 2.0.4 → 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
  SHA1:
3
- metadata.gz: 55c535918103e5c68a1ea42d8cb360db013ea539
4
- data.tar.gz: 44764113825c9c554731d7141a7bcf1adeee0a06
3
+ metadata.gz: b358ff4d6b7a68de70fe803dfc173fe5b8c52ed8
4
+ data.tar.gz: 59d00886af43fd6d7ee5c72d9cbdd865713ee041
5
5
  SHA512:
6
- metadata.gz: 7259fce77dca1a6ff722521e34680ada567d4e7a948c85b09614787ed717ada197ad1b254d44222d6002b522066220365c99832468955d1a1201fc12d24234e2
7
- data.tar.gz: 1ebb8207f946f7b2544466f0543164c872fc715f4cb8535579ca7e4944eb44d332b6415d95c2a0b1aec908d1fd091a080dd276f86af3de28020da2ad27ff8941
6
+ metadata.gz: 36e89ba4d2df71211e6ece83b8f27384273a4c68b8efa85a0adf751d486f0a2579a5d0480c2e0022a0534ae44f52361d09477cce0619daf7e58e1d8fad8e8ad6
7
+ data.tar.gz: b1414149c17f0cd68af1d9c5ed181d0d477095cb6cf6719c3cbd0f2e1d32221fd2729df3c171cbe3340188eb3f2b42d8d68ed3aa22199945651678b5d4a3a16c
data/.travis.yml CHANGED
@@ -4,14 +4,16 @@ rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
6
  - jruby-19mode
7
+ - jruby-head
7
8
  - rbx-19mode
9
+ - rbx-head
8
10
  matrix:
9
11
  allow_failures:
10
12
  - rvm: jruby-19mode
13
+ - rvm: jruby-head
11
14
  - rvm: rbx-19mode
15
+ - rvm: rbx-head
12
16
  notifications:
13
17
  recipients:
14
18
  - thibaud@thibaud.me
15
19
  - remy@rymai.me
16
- - michi@netzpiraten.ch
17
- - maher@sallam.me
data/README.md CHANGED
@@ -70,6 +70,8 @@ listener.ignore /\.rb/ # ignore rb extension in addition of pkg.
70
70
  sleep
71
71
  ```
72
72
 
73
+ Note: Ignoring regexp patterns are evaluated against relative paths.
74
+
73
75
  ## Changes callback
74
76
 
75
77
  Changes to the listened-to directories gets reported back to the user in a callback.
@@ -18,7 +18,7 @@ module Listen
18
18
  private
19
19
 
20
20
  def self._select(options)
21
- return Polling if options[:force_polling] || not_mri?
21
+ return Polling if options[:force_polling]
22
22
  return _usable_adapter_class if _usable_adapter_class
23
23
 
24
24
  _warn_polling_fallback(options)
@@ -36,9 +36,5 @@ module Listen
36
36
  warning = options.fetch(:polling_fallback_message, POLLING_FALLBACK_MESSAGE)
37
37
  Kernel.warn "[Listen warning]:\n#{warning.gsub(/^(.*)/, ' \1')}"
38
38
  end
39
-
40
- def self.not_mri?
41
- RUBY_ENGINE != 'ruby'
42
- end
43
39
  end
44
40
  end
@@ -25,8 +25,9 @@ module Listen
25
25
  require 'find'
26
26
  true
27
27
  end
28
- rescue Gem::LoadError
28
+ rescue LoadError
29
29
  Kernel.warn BUNDLER_DECLARE_GEM
30
+ false
30
31
  end
31
32
 
32
33
  def start
@@ -18,8 +18,9 @@ module Listen
18
18
  require 'wdm'
19
19
  true
20
20
  end
21
- rescue Gem::LoadError
21
+ rescue LoadError
22
22
  Kernel.warn BUNDLER_DECLARE_GEM
23
+ false
23
24
  end
24
25
 
25
26
  def start
@@ -81,8 +81,8 @@ module Listen
81
81
  # @param [Regexp, Hash<Regexp>] new ignoring patterns.
82
82
  #
83
83
  def ignore(regexps)
84
- options[:ignore] = [options[:ignore], regexps]
85
- Celluloid::Actor[:listen_silencer] = Silencer.new(options)
84
+ @options[:ignore] = [options[:ignore], regexps]
85
+ Celluloid::Actor[:listen_silencer] = Silencer.new(self)
86
86
  end
87
87
 
88
88
  # Overwrites ignore patterns (See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::Silencer)
@@ -90,9 +90,9 @@ module Listen
90
90
  # @param [Regexp, Hash<Regexp>] new ignoring patterns.
91
91
  #
92
92
  def ignore!(regexps)
93
- options.delete(:ignore)
94
- options[:ignore!] = regexps
95
- Celluloid::Actor[:listen_silencer] = Silencer.new(options)
93
+ @options.delete(:ignore)
94
+ @options[:ignore!] = regexps
95
+ Celluloid::Actor[:listen_silencer] = Silencer.new(self)
96
96
  end
97
97
 
98
98
  private
@@ -113,13 +113,14 @@ module Listen
113
113
  end
114
114
 
115
115
  def _init_actors
116
- Celluloid::Actor[:listen_silencer] = Silencer.new(options)
116
+ Celluloid::Actor[:listen_silencer] = Silencer.new(self)
117
117
  Celluloid::Actor[:listen_change_pool] = Change.pool(args: self)
118
118
  Celluloid::Actor[:listen_adapter] = Adapter.new(self)
119
119
  Celluloid::Actor[:listen_record] = Record.new(self)
120
120
  end
121
121
 
122
122
  def _signals_trap
123
+ return if defined?(JRUBY_VERSION)
123
124
  if Signal.list.keys.include?('INT')
124
125
  Signal.trap('INT') { stop }
125
126
  end
@@ -8,23 +8,23 @@ module Listen
8
8
  # The default list of files that get ignored.
9
9
  DEFAULT_IGNORED_EXTENSIONS = %w[.DS_Store]
10
10
 
11
- attr_accessor :options, :patterns
11
+ attr_accessor :listener, :patterns
12
12
 
13
- def initialize(options = {})
14
- @options = options
13
+ def initialize(listener)
14
+ @listener = listener
15
15
  _init_patterns
16
16
  end
17
17
 
18
18
  def silenced?(path)
19
- patterns.any? { |pattern| path.to_s =~ pattern }
19
+ patterns.any? { |pattern| _relative_path(path) =~ pattern }
20
20
  end
21
21
 
22
22
  private
23
23
 
24
24
  def _init_patterns
25
25
  @patterns = []
26
- @patterns << _default_patterns unless options[:ignore!]
27
- @patterns << options[:ignore] << options[:ignore!]
26
+ @patterns << _default_patterns unless listener.options[:ignore!]
27
+ @patterns << listener.options[:ignore] << listener.options[:ignore!]
28
28
  @patterns.compact!
29
29
  @patterns.flatten!
30
30
  end
@@ -35,12 +35,17 @@ module Listen
35
35
 
36
36
  def _default_ignored_directories_patterns
37
37
  ignored_directories = DEFAULT_IGNORED_DIRECTORIES.map { |d| Regexp.escape(d) }
38
- %r{/(?:#{ignored_directories.join('|')})(/|$)}
38
+ %r{^(?:#{ignored_directories.join('|')})(/|$)}
39
39
  end
40
40
 
41
41
  def _default_ignored_extensions_patterns
42
42
  ignored_extensions = DEFAULT_IGNORED_EXTENSIONS.map { |e| Regexp.escape(e) }
43
43
  %r{(?:#{ignored_extensions.join('|')})$}
44
44
  end
45
+
46
+ def _relative_path(path)
47
+ relative_paths = listener.directories.map { |dir| path.relative_path_from(dir).to_s }
48
+ relative_paths.detect { |path| !path.start_with?('../') }
49
+ end
45
50
  end
46
51
  end
@@ -1,3 +1,3 @@
1
1
  module Listen
2
- VERSION = "2.0.4"
2
+ VERSION = '2.1.0'
3
3
  end
@@ -16,62 +16,54 @@ describe Listen::Adapter do
16
16
  expect(adapter).to be_kind_of Listen::Adapter::Polling
17
17
  end
18
18
 
19
- it "returns Polling adapter if not on MRI" do
20
- stub_const("RUBY_ENGINE", 'foo')
19
+ it "returns BSD adapter when usable" do
20
+ Listen::Adapter::BSD.stub(:usable?) { true }
21
+ expect(Listen::Adapter::BSD).to receive(:new)
22
+ adapter
23
+ end
24
+
25
+ it "returns Darwin adapter when usable" do
26
+ Listen::Adapter::Darwin.stub(:usable?) { true }
27
+ expect(Listen::Adapter::Darwin).to receive(:new)
28
+ adapter
29
+ end
30
+
31
+ it "returns Linux adapter when usable" do
21
32
  Listen::Adapter::Linux.stub(:usable?) { true }
22
- expect(adapter).to be_kind_of Listen::Adapter::Polling
33
+ expect(Listen::Adapter::Linux).to receive(:new)
34
+ adapter
23
35
  end
24
36
 
25
- if RUBY_ENGINE == 'ruby'
26
- it "returns BSD adapter when usable" do
27
- Listen::Adapter::BSD.stub(:usable?) { true }
28
- expect(Listen::Adapter::BSD).to receive(:new)
29
- adapter
30
- end
37
+ it "returns Windows adapter when usable" do
38
+ Listen::Adapter::Windows.stub(:usable?) { true }
39
+ expect(Listen::Adapter::Windows).to receive(:new)
40
+ adapter
41
+ end
31
42
 
32
- it "returns Darwin adapter when usable" do
33
- Listen::Adapter::Darwin.stub(:usable?) { true }
34
- expect(Listen::Adapter::Darwin).to receive(:new)
35
- adapter
43
+ context "no usable adapters" do
44
+ before { Kernel.stub(:warn) }
45
+
46
+ it "returns Polling adapter" do
47
+ expect(adapter).to be_kind_of Listen::Adapter::Polling
36
48
  end
37
49
 
38
- it "returns Linux adapter when usable" do
39
- Listen::Adapter::Linux.stub(:usable?) { true }
40
- expect(Listen::Adapter::Linux).to receive(:new)
50
+ it "warns polling fallback with default message" do
51
+ expect(Kernel).to receive(:warn).with("[Listen warning]:\n #{described_class::POLLING_FALLBACK_MESSAGE}")
41
52
  adapter
42
53
  end
43
54
 
44
- it "returns Windows adapter when usable" do
45
- Listen::Adapter::Windows.stub(:usable?) { true }
46
- expect(Listen::Adapter::Windows).to receive(:new)
55
+ it "doesn't warn if polling_fallback_message is false" do
56
+ listener.stub(:options) { { polling_fallback_message: false } }
57
+ expect(Kernel).to_not receive(:warn)
47
58
  adapter
48
59
  end
49
60
 
50
- context "no usable adapters" do
51
- before { Kernel.stub(:warn) }
52
-
53
- it "returns Polling adapter" do
54
- expect(adapter).to be_kind_of Listen::Adapter::Polling
55
- end
56
-
57
- it "warns polling fallback with default message" do
58
- expect(Kernel).to receive(:warn).with("[Listen warning]:\n #{described_class::POLLING_FALLBACK_MESSAGE}")
59
- adapter
60
- end
61
-
62
- it "doesn't warn if polling_fallback_message is false" do
63
- listener.stub(:options) { { polling_fallback_message: false } }
64
- expect(Kernel).to_not receive(:warn)
65
- adapter
66
- end
67
-
68
- it "warns polling fallback with custom message if set" do
69
- listener.stub(:options) { { polling_fallback_message: 'custom fallback message' } }
70
- expect(Kernel).to receive(:warn).with("[Listen warning]:\n custom fallback message")
71
- adapter
72
- end
61
+ it "warns polling fallback with custom message if set" do
62
+ listener.stub(:options) { { polling_fallback_message: 'custom fallback message' } }
63
+ expect(Kernel).to receive(:warn).with("[Listen warning]:\n custom fallback message")
64
+ adapter
73
65
  end
74
66
  end
75
- end
67
+ end
76
68
 
77
69
  end
@@ -68,7 +68,7 @@ describe Listen::Listener do
68
68
  end
69
69
 
70
70
  it "registers silencer" do
71
- expect(Listen::Silencer).to receive(:new).with(listener.options) { silencer }
71
+ expect(Listen::Silencer).to receive(:new).with(listener) { silencer }
72
72
  expect(Celluloid::Actor).to receive(:[]=).with(:listen_silencer, silencer)
73
73
  listener.start
74
74
  end
@@ -190,7 +190,7 @@ describe Listen::Listener do
190
190
  before { Celluloid::Actor.stub(:[]=) }
191
191
 
192
192
  it "resets silencer actor with new pattern" do
193
- expect(Listen::Silencer).to receive(:new).with(hash_including(ignore: [nil, /foo/])) { new_silencer }
193
+ expect(Listen::Silencer).to receive(:new).with(listener) { new_silencer }
194
194
  expect(Celluloid::Actor).to receive(:[]=).with(:listen_silencer, new_silencer)
195
195
  listener.ignore(/foo/)
196
196
  end
@@ -199,8 +199,9 @@ describe Listen::Listener do
199
199
  let(:options) { { ignore: /bar/ } }
200
200
 
201
201
  it "adds up to existing ignore options" do
202
- expect(Listen::Silencer).to receive(:new).with(hash_including(ignore: [/bar/, /foo/]))
202
+ expect(Listen::Silencer).to receive(:new).with(listener)
203
203
  listener.ignore(/foo/)
204
+ expect(listener.options).to include(ignore: [/bar/, /foo/])
204
205
  end
205
206
  end
206
207
 
@@ -208,8 +209,9 @@ describe Listen::Listener do
208
209
  let(:options) { { ignore: [/bar/] } }
209
210
 
210
211
  it "adds up to existing ignore options" do
211
- expect(Listen::Silencer).to receive(:new).with(hash_including(ignore: [[/bar/], /foo/]))
212
+ expect(Listen::Silencer).to receive(:new).with(listener)
212
213
  listener.ignore(/foo/)
214
+ expect(listener.options).to include(ignore: [[/bar/], /foo/])
213
215
  end
214
216
  end
215
217
  end
@@ -219,17 +221,19 @@ describe Listen::Listener do
219
221
  before { Celluloid::Actor.stub(:[]=) }
220
222
 
221
223
  it "resets silencer actor with new pattern" do
222
- expect(Listen::Silencer).to receive(:new).with(hash_including(ignore!: /foo/)) { new_silencer }
224
+ expect(Listen::Silencer).to receive(:new).with(listener) { new_silencer }
223
225
  expect(Celluloid::Actor).to receive(:[]=).with(:listen_silencer, new_silencer)
224
226
  listener.ignore!(/foo/)
227
+ expect(listener.options).to include(ignore!: /foo/)
225
228
  end
226
229
 
227
230
  context "with existing ignore! options" do
228
231
  let(:options) { { ignore!: /bar/ } }
229
232
 
230
233
  it "overwrites existing ignore options" do
231
- expect(Listen::Silencer).to receive(:new).with(hash_including(ignore!: [/foo/]))
234
+ expect(Listen::Silencer).to receive(:new).with(listener)
232
235
  listener.ignore!([/foo/])
236
+ expect(listener.options).to include(ignore!: [/foo/])
233
237
  end
234
238
  end
235
239
 
@@ -237,8 +241,9 @@ describe Listen::Listener do
237
241
  let(:options) { { ignore: /bar/ } }
238
242
 
239
243
  it "deletes ignore options" do
240
- expect(Listen::Silencer).to receive(:new).with(hash_not_including(ignore: /bar/))
244
+ expect(Listen::Silencer).to receive(:new).with(listener)
241
245
  listener.ignore!([/foo/])
246
+ expect(listener.options).to_not include(ignore: /bar/)
242
247
  end
243
248
  end
244
249
  end
@@ -1,10 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Listen::Silencer do
4
- let(:silencer) { Listen::Silencer.new(options) }
4
+ let(:options) { {} }
5
+ let(:listener) { double(Listen::Listener,
6
+ directories: [Pathname.new(Dir.pwd), Pathname.new("/Users/Shared/")],
7
+ options: options
8
+ ) }
9
+ let(:silencer) { Listen::Silencer.new(listener) }
5
10
 
6
11
  describe "#silenced?" do
7
- let(:options) { {} }
8
12
  let(:pwd) { Pathname.new(Dir.pwd) }
9
13
 
10
14
  context "default ignore" do
@@ -46,7 +50,7 @@ describe Listen::Silencer do
46
50
  end
47
51
 
48
52
  context "with ignore options" do
49
- let(:options) { { ignore: [%r{foo/bar}, /\.pid$/] } }
53
+ let(:options) { { ignore: [%r{^foo/bar}, /\.pid$/] } }
50
54
 
51
55
  it "silences custom ignored directory" do
52
56
  path = pwd.join('foo', 'bar')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: listen
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thibaud Guillaume-Gentil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-10 00:00:00.000000000 Z
11
+ date: 2013-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -181,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
181
  version: '0'
182
182
  requirements: []
183
183
  rubyforge_project:
184
- rubygems_version: 2.1.3
184
+ rubygems_version: 2.1.8
185
185
  signing_key:
186
186
  specification_version: 4
187
187
  summary: Listen to file modifications