listen 2.0.0.beta.1 → 2.0.0.beta.2

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: e5eb3d853fcddc242d96e4e0295b3966b6349119
4
- data.tar.gz: aa33f0a0e2d623d76027f758b78463ae2c052573
3
+ metadata.gz: b3c0d6aa22397845dc50777764501d381ec45bdb
4
+ data.tar.gz: 6cbfc75ffc6dde9be05a619696939f2ff2e90bbc
5
5
  SHA512:
6
- metadata.gz: ce58ba37a3bdee68cb69dcff3b3a583dec582cb1ccb680e81c6e14d33fea0d5a0d99fcf16e4346c91d56786d31f0e694c671c52de3eab4269e48409bfce3d3c5
7
- data.tar.gz: 9e6856329957aeedb9415eaf26255b373ff60d288128bd82a2ca8cbd9c7e9fe075a74c055e0ddcb7afd6fc68d6781262c94d7bde8005e6b0a765834e1ce79ec0
6
+ metadata.gz: 6ae4ce1cab4d08a3edba293614e20b82b112c1821f3f0e15f653e37b1f8d4ba6a14eb6f65727622faf7651dcf1f347e4f6f0fbae7a52e7359b3f47bc38cbc9a8
7
+ data.tar.gz: 6b657af0772fe26bf87916534247b52a22ba17afe80d9f515db139a6ef100d6764e6c19ed9bbeafcd0f95d5d6951a2a3578515b17d24d40c43e5a69e25dbf0bc
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Listen [![Gem Version](https://badge.fury.io/rb/listen.png)](http://badge.fury.io/rb/listen) [![Build Status](https://secure.travis-ci.org/guard/listen.png?branch=master)](http://travis-ci.org/guard/listen) [![Dependency Status](https://gemnasium.com/guard/listen.png)](https://gemnasium.com/guard/listen) [![Code Climate](https://codeclimate.com/github/guard/listen.png)](https://codeclimate.com/github/guard/listen) [![Coverage Status](https://coveralls.io/repos/guard/listen/badge.png?branch=master)](https://coveralls.io/r/guard/listen)
1
+ # Listen [![Gem Version](https://badge.fury.io/rb/listen.png)](http://badge.fury.io/rb/listen) [![Build Status](https://travis-ci.org/guard/listen.png)](https://travis-ci.org/guard/listen) [![Dependency Status](https://gemnasium.com/guard/listen.png)](https://gemnasium.com/guard/listen) [![Code Climate](https://codeclimate.com/github/guard/listen.png)](https://codeclimate.com/github/guard/listen) [![Coverage Status](https://coveralls.io/repos/guard/listen/badge.png?branch=master)](https://coveralls.io/r/guard/listen)
2
2
 
3
3
  The Listen gem listens to file modifications and notifies you about the changes.
4
4
 
@@ -66,6 +66,18 @@ listener.unpause # start listening to changes again
66
66
  listener.stop # stop completely the listener
67
67
  ```
68
68
 
69
+ ### Ignore / ignore!
70
+
71
+ Liste ignore some folder and extensions by default (See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::Silencer), you can add ignoring patterns with the `ignore` option/method or overwrite default with `ignore!` option/method.
72
+
73
+ ``` ruby
74
+ listener = Listen.to('dir/path/to/listen', ignore: /\.txt/) { |modified, added, removed| # ... }
75
+ listener.start
76
+ listener.ignore! /\.pkg/ # overwrite all patterns and only ignore pkg extension.
77
+ listener.ignore /\.rb/ # ignore rb extension in addition of pkg.
78
+ sleep
79
+ ``
80
+
69
81
  ## Changes callback
70
82
 
71
83
  Changes to the listened-to directories gets reported back to the user in a callback.
@@ -40,6 +40,7 @@ module Listen
40
40
  # the directories passed to the adapter.
41
41
  #
42
42
  # @return [INotify::Notifier] initialized kqueue
43
+ #
43
44
  def _init_worker
44
45
  KQueue::Queue.new.tap do |queue|
45
46
  _directories_path.each do |path|
@@ -42,6 +42,7 @@ module Listen
42
42
  # each directory passed to the adapter.
43
43
  #
44
44
  # @return [INotify::Notifier] initialized worker
45
+ #
45
46
  def _init_worker
46
47
  INotify::Notifier.new.tap do |worker|
47
48
  _directories_path.each { |path| worker.watch(path, *EVENTS, &_worker_callback) }
@@ -33,6 +33,7 @@ module Listen
33
33
  # each directory passed to the adapter.
34
34
  #
35
35
  # @return [WDM::Monitor] initialized worker
36
+ #
36
37
  def _init_worker
37
38
  WDM::Monitor.new.tap do |worker|
38
39
  _directories_path.each { |path| worker.watch_recursively(path, &_worker_callback) }
data/lib/listen/change.rb CHANGED
@@ -1,20 +1,18 @@
1
1
  require 'listen/file'
2
2
  require 'listen/directory'
3
- require 'listen/silencer'
4
3
 
5
4
  module Listen
6
5
  class Change
7
6
  include Celluloid
8
7
 
9
- attr_accessor :listener, :silencer
8
+ attr_accessor :listener
10
9
 
11
10
  def initialize(listener)
12
11
  @listener = listener
13
- @silencer = Silencer.new(listener.options)
14
12
  end
15
13
 
16
14
  def change(path, options)
17
- return if silencer.silenced?(path)
15
+ return if _silencer.silenced?(path)
18
16
  if change = options[:change]
19
17
  _notify_listener(change, path)
20
18
  else
@@ -38,5 +36,10 @@ module Listen
38
36
  def _notify_listener(change, path)
39
37
  listener.changes << { change => path }
40
38
  end
39
+
40
+ def _silencer
41
+ Celluloid::Actor[:listen_silencer]
42
+ end
43
+
41
44
  end
42
45
  end
@@ -1,10 +1,11 @@
1
1
  require 'listen/adapter'
2
2
  require 'listen/change'
3
3
  require 'listen/record'
4
+ require 'listen/silencer'
4
5
 
5
6
  module Listen
6
7
  class Listener
7
- attr_accessor :options, :directories, :paused, :changes, :block
8
+ attr_accessor :options, :directories, :paused, :changes, :block, :thread
8
9
 
9
10
  RELATIVE_PATHS_WITH_MULTIPLE_DIRECTORIES_WARNING_MESSAGE = "The relative_paths option doesn't work when listening to multiple diretories."
10
11
 
@@ -34,40 +35,66 @@ module Listen
34
35
  _signals_trap
35
36
  _init_actors
36
37
  unpause
37
- adapter.async.start
38
+ Celluloid::Actor[:listen_adapter].async.start
38
39
  @thread = Thread.new { _wait_for_changes }
39
40
  end
40
41
 
42
+ # Terminates all Listen actors and kill the adapter.
43
+ #
41
44
  def stop
42
- Celluloid::Actor.kill(adapter)
45
+ thread.kill
46
+ Celluloid::Actor.kill(Celluloid::Actor[:listen_adapter])
47
+ Celluloid::Actor[:listen_silencer].terminate
43
48
  Celluloid::Actor[:listen_change_pool].terminate
44
- record && record.terminate
45
- @thread && @thread.kill
49
+ Celluloid::Actor[:listen_record].terminate
46
50
  end
47
51
 
52
+ # Pauses listening callback (adapter still running)
53
+ #
48
54
  def pause
49
55
  @paused = true
50
56
  end
51
57
 
58
+ # Unpauses listening callback
59
+ #
52
60
  def unpause
53
- _build_record_if_needed
61
+ Celluloid::Actor[:listen_record].build
54
62
  @paused = false
55
63
  end
56
64
 
65
+ # Returns true if Listener is paused
66
+ #
67
+ # @return [Boolean]
68
+ #
57
69
  def paused?
58
70
  @paused == true
59
71
  end
60
72
 
73
+ # Returns true if Listener is not paused
74
+ #
75
+ # @return [Boolean]
76
+ #
61
77
  def listen?
62
78
  @paused == false
63
79
  end
64
80
 
65
- def adapter
66
- Celluloid::Actor[:listen_adapter]
81
+ # Adds ignore patterns to the existing one (See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::Silencer)
82
+ #
83
+ # @param [Regexp, Hash<Regexp>] new ignoring patterns.
84
+ #
85
+ def ignore(regexps)
86
+ options[:ignore] = [options[:ignore], regexps]
87
+ Celluloid::Actor[:listen_silencer] = Silencer.new(options)
67
88
  end
68
89
 
69
- def record
70
- Celluloid::Actor[:listen_record]
90
+ # Overwrites ignore patterns (See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::Silencer)
91
+ #
92
+ # @param [Regexp, Hash<Regexp>] new ignoring patterns.
93
+ #
94
+ def ignore!(regexps)
95
+ options.delete(:ignore)
96
+ options[:ignore!] = regexps
97
+ Celluloid::Actor[:listen_silencer] = Silencer.new(options)
71
98
  end
72
99
 
73
100
  private
@@ -89,6 +116,7 @@ module Listen
89
116
 
90
117
  def _init_actors
91
118
  cores = Celluloid.cores || 2
119
+ Celluloid::Actor[:listen_silencer] = Silencer.new(options)
92
120
  Celluloid::Actor[:listen_change_pool] = Change.pool(size: cores, args: self)
93
121
  Celluloid::Actor[:listen_adapter] = Adapter.new(self)
94
122
  Celluloid::Actor[:listen_record] = Record.new(self)
@@ -100,18 +128,11 @@ module Listen
100
128
  end
101
129
  end
102
130
 
103
- def _build_record_if_needed
104
- record && record.build
105
- end
106
-
107
131
  def _wait_for_changes
108
132
  loop do
109
133
  changes = _pop_changes
110
- unless changes.values.all?(&:empty?)
111
- block.call(
112
- changes[:modified].uniq,
113
- changes[:added].uniq,
114
- changes[:removed].uniq)
134
+ unless changes.all? { |_,v| v.empty? }
135
+ block.call(changes[:modified], changes[:added], changes[:removed])
115
136
  end
116
137
  sleep 0.1
117
138
  end
@@ -126,7 +147,7 @@ module Listen
126
147
  change = @changes.pop
127
148
  change.each { |k, v| changes[k] << v.to_s }
128
149
  end
129
- changes
150
+ changes.each { |_, v| v.uniq! }
130
151
  end
131
152
  end
132
153
  end
@@ -1,7 +1,9 @@
1
1
  module Listen
2
2
  class Silencer
3
+ include Celluloid
4
+
3
5
  # The default list of directories that get ignored.
4
- DEFAULT_IGNORED_DIRECTORIES = %w[.rbx .bundle .git .svn .hg bundle log tmp vendor]
6
+ DEFAULT_IGNORED_DIRECTORIES = %w[.rbx .bundle .git .svn .hg bundle log tmp vendor/ruby]
5
7
 
6
8
  # The default list of files that get ignored.
7
9
  DEFAULT_IGNORED_EXTENSIONS = %w[.DS_Store]
@@ -14,7 +16,7 @@ module Listen
14
16
  end
15
17
 
16
18
  def silenced?(path)
17
- patterns.any? { |pattern| pattern =~ path.to_s }
19
+ patterns.any? { |pattern| path.to_s =~ pattern }
18
20
  end
19
21
 
20
22
  private
@@ -23,7 +25,7 @@ module Listen
23
25
  @patterns = []
24
26
  @patterns << _default_patterns unless options[:ignore!]
25
27
  @patterns << options[:ignore] << options[:ignore!]
26
- @patterns.compact
28
+ @patterns.compact!
27
29
  @patterns.flatten!
28
30
  end
29
31
 
@@ -1,3 +1,3 @@
1
1
  module Listen
2
- VERSION = "2.0.0.beta.1"
2
+ VERSION = "2.0.0.beta.2"
3
3
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: listen
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta.1
4
+ version: 2.0.0.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thibaud Guillaume-Gentil
8
- - Maher Sallam
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-14 00:00:00.000000000 Z
11
+ date: 2013-09-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: celluloid
@@ -97,9 +96,7 @@ dependencies:
97
96
  version: '0'
98
97
  description: The Listen gem listens to file modifications and notifies you about the
99
98
  changes. Works everywhere!
100
- email:
101
- - thibaud@thibaud.me
102
- - maher@sallam.me
99
+ email: thibaud@thibaud.me
103
100
  executables: []
104
101
  extensions: []
105
102
  extra_rdoc_files: []