guard 1.5.4 → 1.6.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.
@@ -57,7 +57,7 @@ module Guard
57
57
  # @return [Boolean] the availability status
58
58
  #
59
59
  def available?(silent = false)
60
- if RbConfig::CONFIG['host_os'] =~ /darwin|linux|freebsd|openbsd|sunos|solaris|mswin|mingw/
60
+ if RbConfig::CONFIG['host_os'] =~ /darwin|linux|freebsd|openbsd|sunos|solaris|mswin|mingw|cygwin/
61
61
  require 'ruby_gntp'
62
62
  true
63
63
 
@@ -1,8 +1,6 @@
1
1
  module Guard
2
2
  module Notifier
3
3
 
4
- # Default options for Tmux
5
-
6
4
  # Changes the color of the Tmux status bar and optionally
7
5
  # shows messages in the status bar.
8
6
  #
@@ -18,6 +16,7 @@ module Guard
18
16
  module Tmux
19
17
  extend self
20
18
 
19
+ # Default options for Tmux
21
20
  DEFAULTS = {
22
21
  :client => 'tmux',
23
22
  :tmux_environment => 'TMUX',
@@ -62,9 +61,10 @@ module Guard
62
61
  # @option options [Boolean] display_message whether to display a message or not
63
62
  #
64
63
  def notify(type, title, message, image, options = { })
65
- color = tmux_color type, options
64
+ color = tmux_color(type, options)
66
65
  color_location = options[:color_location] || DEFAULTS[:color_location]
67
- system("#{ DEFAULTS[:client] } set -g #{ color_location } #{ color }")
66
+
67
+ system("#{ DEFAULTS[:client] } set #{ color_location } #{ color }")
68
68
 
69
69
  show_message = options[:display_message] || DEFAULTS[:display_message]
70
70
  display_message(type, title, message, options) if show_message
@@ -121,6 +121,62 @@ module Guard
121
121
  options[:default] || DEFAULTS[:default]
122
122
  end
123
123
  end
124
+
125
+ # Notification starting, save the current Tmux settings
126
+ # and quiet the Tmux output.
127
+ #
128
+ def turn_on(options = { })
129
+ unless @options_stored
130
+ reset_options_store
131
+
132
+ `#{ DEFAULTS[:client] } show`.each_line do |line|
133
+ option, _, setting = line.chomp.partition(' ')
134
+ @options_store[option] = setting
135
+ end
136
+
137
+ @options_stored = true
138
+ end
139
+
140
+ system("#{ DEFAULTS[:client] } set quiet on")
141
+ end
142
+
143
+ # Notification stopping. Restore the previous Tmux state
144
+ # if available (existing options are restored, new options
145
+ # are unset) and unquite the Tmux output.
146
+ #
147
+ def turn_off(options = { })
148
+ if @options_stored
149
+ @options_store.each do |key, value|
150
+ if value
151
+ system("#{ DEFAULTS[:client] } set #{ key } #{ value }")
152
+ else
153
+ system("#{ DEFAULTS[:client] } set -u #{ key }")
154
+ end
155
+ end
156
+
157
+ reset_options_store
158
+ end
159
+
160
+ system("#{ DEFAULTS[:client] } set quiet off")
161
+ end
162
+
163
+ private
164
+
165
+ # Reset the internal Tmux options store defaults.
166
+ #
167
+ def reset_options_store
168
+ @options_stored = false
169
+ @options_store = {
170
+ 'status-left-bg' => nil,
171
+ 'status-right-bg' => nil,
172
+ 'status-left-fg' => nil,
173
+ 'status-right-fg' => nil,
174
+ 'message-bg' => nil,
175
+ 'message-fg' => nil,
176
+ 'display-time' => nil
177
+ }
178
+ end
179
+
124
180
  end
125
181
  end
126
182
  end
data/lib/guard/runner.rb CHANGED
@@ -7,7 +7,7 @@ module Guard
7
7
  require 'guard'
8
8
  require 'guard/ui'
9
9
  require 'guard/watcher'
10
-
10
+
11
11
  require 'lumberjack'
12
12
 
13
13
  # Deprecation message for the `run_on_change` method
@@ -153,18 +153,23 @@ module Guard
153
153
 
154
154
  # Loop through all groups and run the given task for each Guard plugin.
155
155
  #
156
+ # If no scope is supplied, the global Guard scope is taken into account.
157
+ # If both a plugin and a group scope is given, then only the plugin scope
158
+ # is used.
159
+ #
156
160
  # Stop the task run for the all Guard plugins within a group if one Guard
157
161
  # throws `:task_has_failed`.
158
162
  #
159
- # @param [Hash] scopes hash with a Guard plugin or a group scope
163
+ # @param [Hash] scopes hash with plugins or a groups scope
160
164
  # @yield the task to run
161
165
  #
162
166
  def scoped_guards(scopes = {})
163
- if guard = scopes[:guard]
164
- yield(guard)
167
+ if guards = current_plugins_scope(scopes)
168
+ guards.each do |guard|
169
+ yield(guard)
170
+ end
165
171
  else
166
- groups = scopes[:group] ? [scopes[:group]] : ::Guard.groups
167
- groups.each do |group|
172
+ current_groups_scope(scopes).each do |group|
168
173
  catch :task_has_failed do
169
174
  ::Guard.guards(:group => group.name).each do |guard|
170
175
  yield(guard)
@@ -188,5 +193,42 @@ module Guard
188
193
  (REMOVAL_TASKS.any? { |task| guard.respond_to?(task) } && !removed_paths.empty?)
189
194
  end
190
195
 
196
+ # Returns the current plugins scope.
197
+ # Local plugins scope wins over global plugins scope.
198
+ # If no plugins scope is found, then NO plugins are returned.
199
+ #
200
+ # @param [Hash] scopes hash with a local plugins or a groups scope
201
+ # @return [Array<Guard::Guard>] the plugins to scope to
202
+ #
203
+ def current_plugins_scope(scopes)
204
+ if scopes[:plugins] && !scopes[:plugins].empty?
205
+ scopes[:plugins]
206
+
207
+ elsif !::Guard.scope[:plugins].empty?
208
+ ::Guard.scope[:plugins]
209
+
210
+ else
211
+ nil
212
+ end
213
+ end
214
+
215
+ # Returns the current groups scope.
216
+ # Local groups scope wins over global groups scope.
217
+ # If no groups scope is found, then ALL groups are returned.
218
+ #
219
+ # @param [Hash] scopes hash with a local plugins or a groups scope
220
+ # @return [Array<Guard::Group>] the groups to scope to
221
+ #
222
+ def current_groups_scope(scopes)
223
+ if scopes[:groups] && !scopes[:groups].empty?
224
+ scopes[:groups]
225
+
226
+ elsif !::Guard.scope[:groups].empty?
227
+ ::Guard.scope[:groups]
228
+
229
+ else
230
+ ::Guard.groups
231
+ end
232
+ end
191
233
  end
192
234
  end
data/lib/guard/ui.rb CHANGED
@@ -10,7 +10,7 @@ module Guard
10
10
  # processing, please just write it to STDOUT with `puts`.
11
11
  #
12
12
  module UI
13
-
13
+
14
14
  class << self
15
15
 
16
16
  # Get the Guard::UI logger instance
@@ -18,7 +18,7 @@ module Guard
18
18
  def logger
19
19
  @logger ||= Lumberjack::Logger.new($stderr, self.options)
20
20
  end
21
-
21
+
22
22
  # Get the logger options
23
23
  #
24
24
  # @return [Hash] the logger options
@@ -131,27 +131,35 @@ module Guard
131
131
  # @param [Hash] scopes hash with a guard or a group scope
132
132
  #
133
133
  def action_with_scopes(action, scopes)
134
- scope_message ||= scopes[:guard]
135
- scope_message ||= scopes[:group]
134
+ plugins = scopes[:plugins] || []
135
+ groups = scopes[:groups] || []
136
+
137
+ if plugins.empty? && groups.empty?
138
+ plugins = ::Guard.scope[:plugins] || []
139
+ groups = ::Guard.scope[:groups] || []
140
+ end
141
+
142
+ scope_message ||= plugins.join(',') unless plugins.empty?
143
+ scope_message ||= groups.join(',') unless groups.empty?
136
144
  scope_message ||= 'all'
137
145
 
138
- info "#{action} #{scope_message}"
146
+ info "#{ action } #{ scope_message }"
139
147
  end
140
148
 
141
149
  private
142
-
150
+
143
151
  # Filters log messages depending on either the
144
152
  # `:only`` or `:except` option.
145
153
  #
146
154
  # @param [String] plugin the calling plugin name
147
155
  # @yield When the message should be logged
148
- # @yieldparam [String] param the calling plugin name
156
+ # @yieldparam [String] param the calling plugin name
149
157
  #
150
158
  def filter(plugin)
151
159
  only = self.options[:only]
152
160
  except = self.options[:except]
153
161
  plugin = plugin || calling_plugin_name
154
-
162
+
155
163
  if (!only && !except) || (only && only.match(plugin)) || (except && !except.match(plugin))
156
164
  yield plugin
157
165
  end
data/lib/guard/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Guard
2
2
  # The current gem version of Guard
3
- VERSION = '1.5.4'
3
+ VERSION = '1.6.0'
4
4
  end
data/man/guard.1 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "GUARD" "1" "July 2012" "" ""
4
+ .TH "GUARD" "1" "December 2012" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBguard\fR \- Guard keeps an eye on your file modifications\.
@@ -30,7 +30,10 @@ The following options are available:
30
30
  \fB\-d\fR, \fB\-\-debug\fR Runs Guard in debug mode\.
31
31
  .
32
32
  .P
33
- \fB\-g\fR, \fB\-\-group\fR \fIGROUP1\fR \fIGROUP2\fR\.\.\. Runs only the groups specified by GROUP1, GROUP2 etc\. Groups name should be separated by spaces\. Guards that don\'t belong to a group are considered global and are always run\.
33
+ \fB\-g\fR, \fB\-\-group\fR \fIGROUP1\fR \fIGROUP2\fR\.\.\. Scopes the Guard actions to the groups specified by GROUP1, GROUP2, etc\. Group names should be separated by spaces\. Plugins that don\'t belong to a group are considered global and are always run\.
34
+ .
35
+ .P
36
+ \fB\-P\fR, \fB\-\-plugin\fR \fIPLUGIN1\fR \fIPLUGIN2\fR\.\.\. Scopes the Guard actions to the plugins specified by PLUGIN1, PLUGIN2, etc\. Plugin names should be separated by spaces\.
34
37
  .
35
38
  .P
36
39
  \fB\-w\fR, \fB\-\-watchdir\fR \fIPATH\fR Tells Guard to watch PATH instead of \fB\./\fR\.
data/man/guard.1.html CHANGED
@@ -101,9 +101,13 @@
101
101
  Runs Guard in debug mode.</p>
102
102
 
103
103
  <p><code>-g</code>, <code>--group</code> <var>GROUP1</var> <var>GROUP2</var>...
104
- Runs only the groups specified by GROUP1, GROUP2 etc.
105
- Groups name should be separated by spaces.
106
- Guards that don't belong to a group are considered global and are always run.</p>
104
+ Scopes the Guard actions to the groups specified by GROUP1, GROUP2, etc.
105
+ Group names should be separated by spaces.
106
+ Plugins that don't belong to a group are considered global and are always run.</p>
107
+
108
+ <p><code>-P</code>, <code>--plugin</code> <var>PLUGIN1</var> <var>PLUGIN2</var>...
109
+ Scopes the Guard actions to the plugins specified by PLUGIN1, PLUGIN2, etc.
110
+ Plugin names should be separated by spaces.</p>
107
111
 
108
112
  <p><code>-w</code>, <code>--watchdir</code> <var>PATH</var>
109
113
  Tells Guard to watch PATH instead of <code>./</code>.</p>
@@ -181,7 +185,7 @@ https://github.com/guard/guard/blob/master/CHANGELOG.md</p>
181
185
 
182
186
  <ol class='man-decor man-foot man foot'>
183
187
  <li class='tl'></li>
184
- <li class='tc'>July 2012</li>
188
+ <li class='tc'>December 2012</li>
185
189
  <li class='tr'>guard(1)</li>
186
190
  </ol>
187
191
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.4
4
+ version: 1.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-09 00:00:00.000000000 Z
12
+ date: 2012-12-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: 0.4.2
37
+ version: 0.6.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: 0.4.2
45
+ version: 0.6.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: pry
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +98,7 @@ dependencies:
98
98
  requirements:
99
99
  - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 2.11.0
101
+ version: 2.12.0
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 2.11.0
109
+ version: 2.12.0
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: guard-rspec
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: 2.1.0
117
+ version: 2.3.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: 2.1.0
125
+ version: 2.3.0
126
126
  description: Guard is a command line tool to easily handle events on file system modifications.
127
127
  email:
128
128
  - thibaud@thibaud.me
@@ -142,6 +142,7 @@ files:
142
142
  - lib/guard/commands/notification.rb
143
143
  - lib/guard/commands/pause.rb
144
144
  - lib/guard/commands/reload.rb
145
+ - lib/guard/commands/scope.rb
145
146
  - lib/guard/commands/show.rb
146
147
  - lib/guard/dsl.rb
147
148
  - lib/guard/dsl_describer.rb
@@ -193,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
194
  version: 1.3.6
194
195
  requirements: []
195
196
  rubyforge_project: guard
196
- rubygems_version: 1.8.23
197
+ rubygems_version: 1.8.24
197
198
  signing_key:
198
199
  specification_version: 3
199
200
  summary: Guard keeps an eye on your file modifications