guard 2.8.0 → 2.8.1

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: 0b526a83a981a77336113761579089329aad8a71
4
- data.tar.gz: 66bee09b0f816bbd18092b115ca7e402c6df6382
3
+ metadata.gz: eba722e0d98149098d042a096e5df4dc7abd495b
4
+ data.tar.gz: 76421bb7bdc9c176c22ba3207460104d37090439
5
5
  SHA512:
6
- metadata.gz: 2845651127734112e666e48c11dbeba3d1a2b88ac350441f9b5fc9a40213bbfc3c9307a8982cf57a522001d8567a6ca14e5b419736806bcaa365d58135712ac1
7
- data.tar.gz: 023b5f58b9a20b19d566b49e413b71b12195c4432bba7bb66321f98e3aa1a146235e20ce6ae9fbd5aa9c4349ae6b8d68bd1962f979bacfb4313bf061c1af13b4
6
+ metadata.gz: c4f95478bc1293ff711721d8d8ed42b6a81b15daf2d17a3dcffa4f72dca1e6bbdfdbdf881e5f6993b3c5955bf08a5b8d608f3985650ad39248dfd2bf28e59b2c
7
+ data.tar.gz: 7a8cdcd97b6619ddc3c9ecf219229710107bf5fb58ebccbd457888711af57053f424998a82d5ffe92de72f3c40658535edd396890c64a948ef09390ed785f833
@@ -0,0 +1,66 @@
1
+ # Because it's used by Sheller
2
+ require "open3"
3
+
4
+ require "guard/ui"
5
+
6
+ require "guard/internals/tracing"
7
+
8
+ module Guard
9
+ # @private api
10
+ module Internals
11
+ class Debugging
12
+ class << self
13
+ TRACES = [
14
+ [Kernel, :system],
15
+ [Kernel, :`],
16
+ [Open3, :popen3]
17
+ ]
18
+
19
+ # Sets up debugging:
20
+ #
21
+ # * aborts on thread exceptions
22
+ # * Set the logging level to `:debug`
23
+ # * traces execution of Kernel.system and backtick calls
24
+ def start
25
+ return if @started ||= false
26
+ @started = true
27
+
28
+ Thread.abort_on_exception = true
29
+
30
+ ::Guard::UI.level = Logger::DEBUG
31
+
32
+ TRACES.each { |mod, meth| _trace(mod, meth, &method(:_notify)) }
33
+ @traced = true
34
+ end
35
+
36
+ def stop
37
+ return unless @started ||= false
38
+ ::Guard::UI.level = Logger::INFO
39
+ _reset
40
+ end
41
+
42
+ private
43
+
44
+ def _notify(*args)
45
+ ::Guard::UI.debug "Command execution: #{args.join(" ")}"
46
+ end
47
+
48
+ # reset singleton - called by tests
49
+ def _reset
50
+ @started = false
51
+ return unless @traced
52
+ TRACES.each { |mod, meth| _untrace(mod, meth) }
53
+ @traced = false
54
+ end
55
+
56
+ def _trace(mod, meth, &block)
57
+ ::Guard::Internals::Tracing.trace(mod, meth, &block)
58
+ end
59
+
60
+ def _untrace(mod, meth)
61
+ ::Guard::Internals::Tracing.untrace(mod, meth)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
File without changes
@@ -0,0 +1,33 @@
1
+ module Guard
2
+ module Internals
3
+ module Tracing
4
+ def self.trace(mod, meth)
5
+ meta = (class << mod; self; end)
6
+ original_meth = "original_#{meth}".to_sym
7
+
8
+ if mod.respond_to?(original_meth)
9
+ fail "ALREADY TRACED: #{mod}.#{meth}"
10
+ end
11
+
12
+ meta.send(:alias_method, original_meth, meth)
13
+ meta.send(:define_method, meth) do |*args, &block|
14
+ yield(*args) if block_given?
15
+ mod.send original_meth, *args, &block
16
+ end
17
+ end
18
+
19
+ def self.untrace(mod, meth)
20
+ meta = (class << mod; self; end)
21
+ original_meth = "original_#{meth}".to_sym
22
+
23
+ unless mod.respond_to?(original_meth)
24
+ fail "NOT TRACED: #{mod}.#{meth} (no method: #{original_meth})"
25
+ end
26
+
27
+ meta.send(:remove_method, meth)
28
+ meta.send(:alias_method, meth, original_meth)
29
+ meta.send(:undef_method, original_meth)
30
+ end
31
+ end
32
+ end
33
+ end
File without changes
@@ -55,7 +55,6 @@ module Guard
55
55
 
56
56
  next unless (task = tasks.detect { |meth| plugin.respond_to?(meth) })
57
57
  _supervise(plugin, task, match_result)
58
- ::Guard::UI.clearable
59
58
  end
60
59
  end
61
60
  end
@@ -2,6 +2,8 @@ require "thread"
2
2
  require "listen"
3
3
  require "guard/options"
4
4
 
5
+ require "guard/internals/debugging"
6
+
5
7
  module Guard
6
8
  # Sets up initial variables and options
7
9
  module Setuper
@@ -43,16 +45,20 @@ module Guard
43
45
  # so ideally there should be a guard "instance"
44
46
  # object that can be created anew between tests
45
47
  def setup(opts = {})
48
+ # NOTE: must be set before anything calls Guard.options
46
49
  reset_options(opts)
50
+
51
+ # NOTE: must be set before anything calls Guard::UI.debug
52
+ ::Guard::Internals::Debugging.start if options[:debug]
53
+
47
54
  reset_evaluator(opts)
48
55
 
49
56
  @queue = Queue.new
50
57
  @runner = ::Guard::Runner.new
51
58
  @watchdirs = _setup_watchdirs
52
59
 
53
- ::Guard::UI.setup(options)
60
+ ::Guard::UI.reset_and_clear
54
61
 
55
- _setup_debug if options[:debug]
56
62
  @listener = _setup_listener
57
63
  _setup_signal_traps
58
64
 
@@ -174,20 +180,6 @@ module Guard
174
180
 
175
181
  private
176
182
 
177
- # Sets up various debug behaviors:
178
- #
179
- # * Abort threads on exception;
180
- # * Set the logging level to `:debug`;
181
- # * Modify the system and ` methods to log themselves before being executed
182
- #
183
- # @see #_debug_command_execution
184
- #
185
- def _setup_debug
186
- Thread.abort_on_exception = true
187
- ::Guard::UI.options[:level] = :debug
188
- _debug_command_execution
189
- end
190
-
191
183
  # Initializes the listener and registers a callback for changes.
192
184
  #
193
185
  def _setup_listener
@@ -252,23 +244,6 @@ module Guard
252
244
  end
253
245
  end
254
246
 
255
- # Adds a command logger in debug mode. This wraps common command
256
- # execution functions and logs the executed command before execution.
257
- #
258
- def _debug_command_execution
259
- Kernel.send(:alias_method, :original_system, :system)
260
- Kernel.send(:define_method, :system) do |command, *args|
261
- ::Guard::UI.debug "Command execution: #{ command } #{ args.join(" ") }"
262
- Kernel.send :original_system, command, *args
263
- end
264
-
265
- Kernel.send(:alias_method, :original_backtick, :'`')
266
- Kernel.send(:define_method, :'`') do |command|
267
- ::Guard::UI.debug "Command execution: #{ command }"
268
- Kernel.send :original_backtick, command
269
- end
270
- end
271
-
272
247
  # TODO: Guard::Watch or Guard::Scope should provide this
273
248
  def _scoped_watchers
274
249
  watchers = []
@@ -53,10 +53,16 @@ module Guard
53
53
  # @option options [String] template the logger template
54
54
  # @option options [String] time_format the time format
55
55
  #
56
+ # TODO: deprecate?
56
57
  def options=(options)
57
58
  @options = ::Guard::Options.new(options)
58
59
  end
59
60
 
61
+ # Assigns a log level
62
+ def level=(new_level)
63
+ logger.level = new_level
64
+ end
65
+
60
66
  # Show an info message.
61
67
  #
62
68
  # @param [String] message the message to show
@@ -135,7 +141,8 @@ module Guard
135
141
  end
136
142
 
137
143
  # TODO: arguments: UI uses Guard::options anyway
138
- def setup(_options)
144
+ # @private api
145
+ def reset_and_clear
139
146
  @clearable = false
140
147
  clear(force: true)
141
148
  end
@@ -1,3 +1,3 @@
1
1
  module Guard
2
- VERSION = "2.8.0"
2
+ VERSION = "2.8.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.8.1
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: 2014-11-04 00:00:00.000000000 Z
11
+ date: 2014-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -129,6 +129,10 @@ files:
129
129
  - lib/guard/guardfile/evaluator.rb.orig
130
130
  - lib/guard/guardfile/generator.rb
131
131
  - lib/guard/interactor.rb
132
+ - lib/guard/internals/debugging.rb
133
+ - lib/guard/internals/debugging.rb.orig
134
+ - lib/guard/internals/tracing.rb
135
+ - lib/guard/internals/tracing.rb.orig
132
136
  - lib/guard/jobs/base.rb
133
137
  - lib/guard/jobs/pry_wrapper.rb
134
138
  - lib/guard/jobs/sleep.rb