guard 2.6.1 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +73 -58
  3. data/bin/guard +2 -2
  4. data/lib/guard.rb +64 -59
  5. data/lib/guard/cli.rb +66 -60
  6. data/lib/guard/cli.rb.orig +215 -0
  7. data/lib/guard/commander.rb +45 -69
  8. data/lib/guard/commands/all.rb +21 -19
  9. data/lib/guard/commands/change.rb +17 -22
  10. data/lib/guard/commands/notification.rb +15 -16
  11. data/lib/guard/commands/pause.rb +14 -15
  12. data/lib/guard/commands/reload.rb +19 -20
  13. data/lib/guard/commands/scope.rb +23 -19
  14. data/lib/guard/commands/show.rb +13 -16
  15. data/lib/guard/deprecated_methods.rb +6 -10
  16. data/lib/guard/deprecator.rb +52 -37
  17. data/lib/guard/dsl.rb +55 -33
  18. data/lib/guard/dsl_describer.rb +83 -31
  19. data/lib/guard/dsl_describer.rb.orig +184 -0
  20. data/lib/guard/group.rb +7 -6
  21. data/lib/guard/guard.rb +4 -4
  22. data/lib/guard/guard.rb.orig +42 -0
  23. data/lib/guard/guardfile.rb +12 -13
  24. data/lib/guard/guardfile/evaluator.rb +77 -55
  25. data/lib/guard/guardfile/evaluator.rb.orig +275 -0
  26. data/lib/guard/guardfile/generator.rb +25 -20
  27. data/lib/guard/interactor.rb +52 -293
  28. data/lib/guard/interactor.rb.orig +85 -0
  29. data/lib/guard/jobs/base.rb +21 -0
  30. data/lib/guard/jobs/pry_wrapper.rb +290 -0
  31. data/lib/guard/jobs/pry_wrapper.rb.orig +293 -0
  32. data/lib/guard/jobs/sleep.rb +25 -0
  33. data/lib/guard/notifier.rb +42 -39
  34. data/lib/guard/notifiers/base.rb +25 -24
  35. data/lib/guard/notifiers/emacs.rb +30 -24
  36. data/lib/guard/notifiers/file_notifier.rb +3 -7
  37. data/lib/guard/notifiers/gntp.rb +22 -22
  38. data/lib/guard/notifiers/growl.rb +16 -15
  39. data/lib/guard/notifiers/libnotify.rb +7 -10
  40. data/lib/guard/notifiers/notifysend.rb +15 -14
  41. data/lib/guard/notifiers/rb_notifu.rb +8 -10
  42. data/lib/guard/notifiers/terminal_notifier.rb +15 -11
  43. data/lib/guard/notifiers/terminal_title.rb +4 -8
  44. data/lib/guard/notifiers/tmux.rb +104 -71
  45. data/lib/guard/options.rb +1 -5
  46. data/lib/guard/plugin.rb +1 -3
  47. data/lib/guard/plugin/base.rb +12 -9
  48. data/lib/guard/plugin/hooker.rb +1 -5
  49. data/lib/guard/plugin_util.rb +46 -25
  50. data/lib/guard/plugin_util.rb.orig +178 -0
  51. data/lib/guard/rake_task.rb +4 -7
  52. data/lib/guard/reevaluator.rb +13 -0
  53. data/lib/guard/runner.rb +50 -78
  54. data/lib/guard/runner.rb.orig +200 -0
  55. data/lib/guard/setuper.rb +199 -130
  56. data/lib/guard/setuper.rb.orig +348 -0
  57. data/lib/guard/sheller.rb +107 -0
  58. data/lib/guard/tags +367 -0
  59. data/lib/guard/ui.rb +50 -38
  60. data/lib/guard/ui.rb.orig +254 -0
  61. data/lib/guard/ui/colors.rb +17 -21
  62. data/lib/guard/version.rb +1 -1
  63. data/lib/guard/version.rb.orig +3 -0
  64. data/lib/guard/watcher.rb +49 -62
  65. metadata +21 -4
  66. data/lib/guard/notifiers/growl_notify.rb +0 -93
@@ -1,27 +1,26 @@
1
- require 'guard/notifier'
1
+ require "pry"
2
2
 
3
- module Guard
4
- class Interactor
5
-
6
- NOTIFICATION = Pry::CommandSet.new do
7
- create_command 'notification' do
8
-
9
- group 'Guard'
10
- description 'Toggles the notifications.'
3
+ require "guard/notifier"
11
4
 
12
- banner <<-BANNER
5
+ module Guard
6
+ module Commands
7
+ class Notification
8
+ def self.import
9
+ Pry::Commands.create_command "notification" do
10
+ group "Guard"
11
+ description "Toggles the notifications."
12
+
13
+ banner <<-BANNER
13
14
  Usage: notification
14
15
 
15
16
  Toggles the notifications on and off.
16
- BANNER
17
+ BANNER
17
18
 
18
- def process
19
- ::Guard::Notifier.toggle
19
+ def process
20
+ ::Guard::Notifier.toggle
21
+ end
20
22
  end
21
23
  end
22
24
  end
23
-
24
25
  end
25
26
  end
26
-
27
- Pry.commands.import ::Guard::Interactor::NOTIFICATION
@@ -1,28 +1,27 @@
1
- module Guard
2
- class Interactor
3
-
4
- PAUSE = Pry::CommandSet.new do
5
- create_command 'pause' do
6
-
7
- group 'Guard'
8
- description 'Toggles the file listener.'
1
+ require "pry"
9
2
 
10
- banner <<-BANNER
3
+ module Guard
4
+ module Commands
5
+ class Pause
6
+ def self.import
7
+ Pry::Commands.create_command "pause" do
8
+ group "Guard"
9
+ description "Toggles the file listener."
10
+
11
+ banner <<-BANNER
11
12
  Usage: pause
12
13
 
13
14
  Toggles the file listener on and off.
14
15
 
15
16
  When the file listener is paused, the default Guard Pry
16
17
  prompt will show the pause sign `[p]`.
17
- BANNER
18
+ BANNER
18
19
 
19
- def process
20
- ::Guard.pause
20
+ def process
21
+ ::Guard.async_queue_add([:guard_pause])
22
+ end
21
23
  end
22
24
  end
23
25
  end
24
-
25
26
  end
26
27
  end
27
-
28
- Pry.commands.import ::Guard::Interactor::PAUSE
@@ -1,35 +1,34 @@
1
- module Guard
2
- class Interactor
3
-
4
- RELOAD = Pry::CommandSet.new do
5
- create_command 'reload' do
1
+ require "pry"
6
2
 
7
- group 'Guard'
8
- description 'Reload all plugins.'
9
-
10
- banner <<-BANNER
3
+ module Guard
4
+ module Commands
5
+ class Reload
6
+ def self.import
7
+ Pry::Commands.create_command "reload" do
8
+ group "Guard"
9
+ description "Reload all plugins."
10
+
11
+ banner <<-BANNER
11
12
  Usage: reload <scope>
12
13
 
13
14
  Run the Guard plugin `reload` action.
14
15
 
15
16
  You may want to specify an optional scope to the action,
16
17
  either the name of a Guard plugin or a plugin group.
17
- BANNER
18
+ BANNER
18
19
 
19
- def process(*entries)
20
- scopes, rest = ::Guard::Interactor.convert_scope(entries)
20
+ def process(*entries)
21
+ scopes, unknown = ::Guard::Interactor.convert_scope(entries)
21
22
 
22
- if rest.empty?
23
- ::Guard.reload scopes
24
- else
25
- output.puts "Unknown scope #{ rest.join(', ') }"
23
+ unless unknown.empty?
24
+ output.puts "Unknown scopes: #{ unknown.join(", ") }"
25
+ return
26
+ end
27
+
28
+ ::Guard.async_queue_add([:guard_reload, scopes])
26
29
  end
27
30
  end
28
-
29
31
  end
30
32
  end
31
-
32
33
  end
33
34
  end
34
-
35
- Pry.commands.import ::Guard::Interactor::RELOAD
@@ -1,32 +1,36 @@
1
- module Guard
2
- class Interactor
3
-
4
- SCOPE = Pry::CommandSet.new do
5
- create_command 'scope' do
6
-
7
- group 'Guard'
8
- description 'Scope Guard actions to groups and plugins.'
1
+ require "pry"
9
2
 
10
- banner <<-BANNER
3
+ module Guard
4
+ module Commands
5
+ class Scope
6
+ def self.import
7
+ Pry::Commands.create_command "scope" do
8
+ group "Guard"
9
+ description "Scope Guard actions to groups and plugins."
10
+
11
+ banner <<-BANNER
11
12
  Usage: scope <scope>
12
13
 
13
14
  Set the global Guard scope.
14
- BANNER
15
+ BANNER
16
+
17
+ def process(*entries)
18
+ scope, unknown = ::Guard::Interactor.convert_scope(entries)
15
19
 
16
- def process(*entries)
17
- scope, rest = ::Guard::Interactor.convert_scope(entries)
20
+ unless unknown.empty?
21
+ output.puts "Unknown scopes: #{unknown.join(",") }"
22
+ return
23
+ end
24
+
25
+ if scope[:plugins].empty? && scope[:groups].empty?
26
+ output.puts "Usage: scope <scope>"
27
+ return
28
+ end
18
29
 
19
- if scope[:plugins].empty? && scope[:groups].empty?
20
- output.puts 'Usage: scope <scope>'
21
- else
22
30
  ::Guard.scope = scope
23
31
  end
24
32
  end
25
-
26
33
  end
27
34
  end
28
-
29
35
  end
30
36
  end
31
-
32
- Pry.commands.import ::Guard::Interactor::SCOPE
@@ -1,27 +1,24 @@
1
- require 'guard/dsl_describer'
1
+ require "pry"
2
2
 
3
3
  module Guard
4
- class Interactor
5
-
6
- SHOW = Pry::CommandSet.new do
7
- create_command 'show' do
8
-
9
- group 'Guard'
10
- description 'Show all Guard plugins.'
11
-
12
- banner <<-BANNER
4
+ module Commands
5
+ class Show
6
+ def self.import
7
+ Pry::Commands.create_command "show" do
8
+ group "Guard"
9
+ description "Show all Guard plugins."
10
+
11
+ banner <<-BANNER
13
12
  Usage: show
14
13
 
15
14
  Show all defined Guard plugins and their options.
16
- BANNER
15
+ BANNER
17
16
 
18
- def process
19
- ::Guard::DslDescriber.new(::Guard.options).show
17
+ def process
18
+ ::Guard.async_queue_add([:guard_show])
19
+ end
20
20
  end
21
21
  end
22
22
  end
23
-
24
23
  end
25
24
  end
26
-
27
- Pry.commands.import ::Guard::Interactor::SHOW
@@ -1,7 +1,5 @@
1
1
  module Guard
2
-
3
2
  module DeprecatedMethods
4
-
5
3
  # @deprecated Use `Guard.plugins(filter)` instead.
6
4
  #
7
5
  # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
@@ -30,8 +28,8 @@ module Guard
30
28
  # upgrade for Guard 2.0
31
29
  #
32
30
  def get_guard_class(name, fail_gracefully = false)
33
- ::Guard::UI.deprecation(::Guard::Deprecator::GET_GUARD_CLASS_DEPRECATION)
34
- ::Guard::PluginUtil.new(name).plugin_class(fail_gracefully: fail_gracefully)
31
+ UI.deprecation(Deprecator::GET_GUARD_CLASS_DEPRECATION)
32
+ PluginUtil.new(name).plugin_class(fail_gracefully: fail_gracefully)
35
33
  end
36
34
 
37
35
  # @deprecated Use `Guard::PluginUtil.new(name).plugin_location` instead.
@@ -40,8 +38,8 @@ module Guard
40
38
  # upgrade for Guard 2.0
41
39
  #
42
40
  def locate_guard(name)
43
- ::Guard::UI.deprecation(::Guard::Deprecator::LOCATE_GUARD_DEPRECATION)
44
- ::Guard::PluginUtil.new(name).plugin_location
41
+ UI.deprecation(Deprecator::LOCATE_GUARD_DEPRECATION)
42
+ PluginUtil.new(name).plugin_location
45
43
  end
46
44
 
47
45
  # @deprecated Use `Guard::PluginUtil.plugin_names` instead.
@@ -50,10 +48,8 @@ module Guard
50
48
  # upgrade for Guard 2.0
51
49
  #
52
50
  def guard_gem_names
53
- ::Guard::UI.deprecation(::Guard::Deprecator::GUARD_GEM_NAMES_DEPRECATION)
54
- ::Guard::PluginUtil.plugin_names
51
+ UI.deprecation(Deprecator::GUARD_GEM_NAMES_DEPRECATION)
52
+ PluginUtil.plugin_names
55
53
  end
56
-
57
54
  end
58
-
59
55
  end
@@ -1,107 +1,122 @@
1
- require 'guard/ui'
1
+ require "guard/ui"
2
2
 
3
3
  module Guard
4
4
  class Deprecator
5
+ UPGRADE_WIKI = "https://github.com/guard/guard/wiki"\
6
+ "/Upgrade-guide-for-existing-guards-to-Guard-v1.1"
5
7
 
6
- MORE_INFO_ON_UPGRADING_TO_GUARD_1_1 = <<-EOS.gsub(/^\s*/, '')
7
- For more information on how to update existing Guard plugins, please head over
8
- to: https://github.com/guard/guard/wiki/Upgrade-guide-for-existing-guards-to-Guard-v1.1
8
+ MORE_INFO_ON_UPGRADING_TO_GUARD_1_1 = <<-EOS.gsub(/^\s*/, "")
9
+ For more information on how to update existing Guard plugins, please head
10
+ over to:
11
+ #{UPGRADE_WIKI}
9
12
  EOS
10
13
 
11
- MORE_INFO_ON_UPGRADING_TO_GUARD_2 = <<-EOS.gsub(/^\s*/, '')
14
+ MORE_INFO_ON_UPGRADING_TO_GUARD_2 = <<-EOS.gsub(/^\s*/, "")
12
15
  For more information on how to upgrade for Guard 2.0, please head over
13
16
  to: https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0%s
14
17
  EOS
15
18
 
16
- ADD_GUARD_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
17
- Starting with Guard 2.0 'Guard.add_guard(name, options = {})' is deprecated.
19
+ ADD_GUARD_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
20
+ Starting with Guard 2.0 'Guard.add_guard(name, options = {})' is
21
+ deprecated.
18
22
 
19
23
  Please use 'Guard.add_plugin(name, options = {})' instead.
20
24
 
21
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
25
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods"}
22
26
  EOS
23
27
 
24
- GUARDS_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
28
+ GUARDS_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
25
29
  Starting with Guard 2.0 'Guard.guards(filter)' is deprecated.
26
30
 
27
31
  Please use 'Guard.plugins(filter)' instead.
28
32
 
29
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
33
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods"}
30
34
  EOS
31
35
 
32
36
  # Deprecator message for the `Guard.get_guard_class` method
33
- GET_GUARD_CLASS_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
37
+ GET_GUARD_CLASS_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
34
38
  Starting with Guard 2.0 'Guard.get_guard_class(name, fail_gracefully =
35
39
  false)' is deprecated and is now always on.
36
40
 
37
41
  Please use 'Guard::PluginUtil.new(name).plugin_class(fail_gracefully:
38
42
  fail_gracefully)' instead.
39
43
 
40
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
44
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods"}
41
45
  EOS
42
46
 
43
47
  # Deprecator message for the `Guard.locate_guard` method
44
- LOCATE_GUARD_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
48
+ LOCATE_GUARD_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
45
49
  Starting with Guard 2.0 'Guard.locate_guard(name)' is deprecated.
46
50
 
47
51
  Please use 'Guard::PluginUtil.new(name).plugin_location' instead.
48
52
 
49
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
53
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods"}
50
54
  EOS
51
55
 
52
56
  # Deprecator message for the `Guard.guard_gem_names` method
53
- GUARD_GEM_NAMES_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
57
+ GUARD_GEM_NAMES_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
54
58
  Starting with Guard 2.0 'Guard.guard_gem_names' is deprecated.
55
59
 
56
60
  Please use 'Guard::PluginUtil.plugin_names' instead.
57
61
 
58
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
62
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods"}
59
63
  EOS
60
64
 
61
65
  # Deprecator message for the `Guard::Dsl.evaluate_guardfile` method
62
- EVALUATE_GUARDFILE_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
63
- Starting with Guard 2.0 'Guard::Dsl.evaluate_guardfile(options)' is deprecated.
66
+ EVALUATE_GUARDFILE_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
67
+ Starting with Guard 2.0 'Guard::Dsl.evaluate_guardfile(options)' is
68
+ deprecated.
64
69
 
65
- Please use 'Guard::Guardfile::Evaluator.new(options).evaluate_guardfile' instead.
70
+ Please use 'Guard::Guardfile::Evaluator.new(options).evaluate_guardfile'
71
+ instead.
66
72
 
67
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods-1'}
73
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods-1"}
68
74
  EOS
69
75
 
70
76
  # Deprecator message for the `Guardfile.create_guardfile` method
71
- CREATE_GUARDFILE_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
72
- Starting with Guard 2.0 'Guard::Guardfile.create_guardfile(options)' is deprecated.
77
+ CREATE_GUARDFILE_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
78
+ Starting with Guard 2.0 'Guard::Guardfile.create_guardfile(options)' is
79
+ deprecated.
73
80
 
74
- Please use 'Guard::Guardfile::Generator.new(options).create_guardfile' instead.
81
+ Please use 'Guard::Guardfile::Generator.new(options).create_guardfile'
82
+ instead.
75
83
 
76
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods-2'}
84
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods-2"}
77
85
  EOS
78
86
 
79
87
  # Deprecator message for the `Guardfile.initialize_template` method
80
- INITIALIZE_TEMPLATE_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
81
- Starting with Guard 2.0 'Guard::Guardfile.initialize_template(plugin_name)' is deprecated.
88
+ INITIALIZE_TEMPLATE_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
89
+ Starting with Guard 2.0
90
+ 'Guard::Guardfile.initialize_template(plugin_name)' is deprecated.
82
91
 
83
- Please use 'Guard::Guardfile::Generator.new.initialize_template(plugin_name)' instead.
92
+ Please use
93
+ 'Guard::Guardfile::Generator.new.initialize_template(plugin_name)'
94
+ instead.
84
95
 
85
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods-2'}
96
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods-2"}
86
97
  EOS
87
98
 
88
99
  # Deprecator message for the `Guardfile.initialize_all_templates` method
89
- INITIALIZE_ALL_TEMPLATES_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
90
- Starting with Guard 2.0 'Guard::Guardfile.initialize_all_templates' is deprecated.
100
+ INITIALIZE_ALL_TEMPLATES_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
101
+ Starting with Guard 2.0 'Guard::Guardfile.initialize_all_templates' is
102
+ deprecated.
91
103
 
92
- Please use 'Guard::Guardfile::Generator.new.initialize_all_templates' instead.
104
+ Please use 'Guard::Guardfile::Generator.new.initialize_all_templates'
105
+ instead.
93
106
 
94
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods-2'}
107
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods-2"}
95
108
  EOS
96
109
 
97
110
  # Deprecator message for when a Guard plugin inherits from Guard::Guard
98
- GUARD_GUARD_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
99
- Starting with Guard 2.0, Guard::%s should inherit from Guard::Plugin instead of Guard::Guard.
111
+ GUARD_GUARD_DEPRECATION = <<-EOS.gsub(/^\s*/, "")
112
+ Starting with Guard 2.0, Guard::%s should inherit from Guard::Plugin
113
+ instead of Guard::Guard.
100
114
 
101
- Please note that the constructor signature has changed from Guard::Guard#initialize(watchers = [], options = {}) to Guard::Plugin#initialize(options = {}).
115
+ Please note that the constructor signature has changed from
116
+ Guard::Guard#initialize(watchers = [], options = {}) to
117
+ Guard::Plugin#initialize(options = {}).
102
118
 
103
- #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#changes-in-guardguard'}
119
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#changes-in-guardguard"}
104
120
  EOS
105
-
106
121
  end
107
122
  end
data/lib/guard/dsl.rb CHANGED
@@ -1,11 +1,10 @@
1
- require 'guard/guardfile'
2
- require 'guard/interactor'
3
- require 'guard/notifier'
4
- require 'guard/ui'
5
- require 'guard/watcher'
1
+ require "guard/guardfile"
2
+ require "guard/interactor"
3
+ require "guard/notifier"
4
+ require "guard/ui"
5
+ require "guard/watcher"
6
6
 
7
7
  module Guard
8
-
9
8
  # The Dsl class provides the methods that are used in each `Guardfile` to
10
9
  # describe the behaviour of Guard.
11
10
  #
@@ -44,6 +43,11 @@ module Guard
44
43
  # @see https://github.com/guard/guard/wiki/Guardfile-examples
45
44
  #
46
45
  class Dsl
46
+ WARN_INVALID_LOG_LEVEL = "Invalid log level `%s` ignored. "\
47
+ "Please use either :debug, :info, :warn or :error."
48
+
49
+ WARN_INVALID_LOG_OPTIONS = "You cannot specify the logger options"\
50
+ " :only and :except at the same time."
47
51
 
48
52
  # @deprecated Use
49
53
  # `Guard::Guardfile::Evaluator.new(options).evaluate_guardfile` instead.
@@ -52,8 +56,8 @@ module Guard
52
56
  # upgrade for Guard 2.0
53
57
  #
54
58
  def self.evaluate_guardfile(options = {})
55
- ::Guard::UI.deprecation(::Guard::Deprecator::EVALUATE_GUARDFILE_DEPRECATION)
56
- ::Guard::Guardfile::Evaluator.new(options).evaluate_guardfile
59
+ UI.deprecation(Deprecator::EVALUATE_GUARDFILE_DEPRECATION)
60
+ Guardfile::Evaluator.new(options).evaluate_guardfile
57
61
  end
58
62
 
59
63
  # Set notification options for the system notifications.
@@ -62,7 +66,7 @@ module Guard
62
66
  # You can also pass `:off` as library to turn off notifications.
63
67
  #
64
68
  # @example Define multiple notifications
65
- # notification :growl_notify
69
+ # notification :ruby_gntp
66
70
  # notification :ruby_gntp, host: '192.168.1.5'
67
71
  #
68
72
  # @param [Symbol, String] notifier the name of the notifier to use
@@ -71,7 +75,7 @@ module Guard
71
75
  # @see Guard::Notifier for available notifier and its options.
72
76
  #
73
77
  def notification(notifier, options = {})
74
- ::Guard::Notifier.add_notifier(notifier.to_sym, options.merge(silent: false))
78
+ Notifier.add_notifier(notifier.to_sym, options.merge(silent: false))
75
79
  end
76
80
 
77
81
  # Sets the interactor options or disable the interactor.
@@ -108,7 +112,8 @@ module Guard
108
112
  # guard :livereload
109
113
  # end
110
114
  #
111
- # @param [Symbol, String, Array<Symbol, String>] name the group name called from the CLI
115
+ # @param [Symbol, String, Array<Symbol, String>] name the group name called
116
+ # from the CLI
112
117
  # @param [Hash] options the options accepted by the group
113
118
  # @yield a block where you can declare several Guard plugins
114
119
  #
@@ -121,7 +126,8 @@ module Guard
121
126
  groups = args
122
127
 
123
128
  groups.each do |group|
124
- raise ArgumentError, "'all' is not an allowed group name!" if group.to_sym == :all
129
+ next unless group.to_sym == :all
130
+ fail ArgumentError, "'all' is not an allowed group name!"
125
131
  end
126
132
 
127
133
  if block_given?
@@ -136,7 +142,9 @@ module Guard
136
142
 
137
143
  @current_groups.pop
138
144
  else
139
- ::Guard::UI.error "No Guard plugins found in the group '#{ groups.join(', ') }', please add at least one."
145
+ ::Guard::UI.error \
146
+ "No Guard plugins found in the group '#{ groups.join(", ") }',"\
147
+ " please add at least one."
140
148
  end
141
149
  end
142
150
 
@@ -169,6 +177,7 @@ module Guard
169
177
 
170
178
  yield if block_given?
171
179
 
180
+ @current_groups ||= []
172
181
  groups = @current_groups && @current_groups.last || [:default]
173
182
  groups.each do |group|
174
183
  ::Guard.add_plugin(name, @plugin_options.merge(group: group))
@@ -177,22 +186,28 @@ module Guard
177
186
  @plugin_options = nil
178
187
  end
179
188
 
180
- # Defines a pattern to be watched in order to run actions on file modification.
189
+ # Defines a pattern to be watched in order to run actions on file
190
+ # modification.
181
191
  #
182
192
  # @example Declare watchers for a Guard
183
193
  # guard :rspec do
184
194
  # watch('spec/spec_helper.rb')
185
195
  # watch(%r{^.+_spec.rb})
186
- # watch(%r{^app/controllers/(.+).rb}) { |m| 'spec/acceptance/#{m[1]}s_spec.rb' }
196
+ # watch(%r{^app/controllers/(.+).rb}) do |m|
197
+ # 'spec/acceptance/#{m[1]}s_spec.rb'
198
+ # end
187
199
  # end
188
200
  #
189
201
  # @example Declare global watchers outside of a Guard
190
202
  # watch(%r{^(.+)$}) { |m| puts "#{m[1]} changed." }
191
203
  #
192
- # @param [String, Regexp] pattern the pattern that Guard must watch for modification
204
+ # @param [String, Regexp] pattern the pattern that Guard must watch for
205
+ # modification
206
+ #
193
207
  # @yield a block to be run when the pattern is matched
194
208
  # @yieldparam [MatchData] m matches of the pattern
195
- # @yieldreturn a directory, a filename, an array of directories / filenames, or nothing (can be an arbitrary command)
209
+ # @yieldreturn a directory, a filename, an array of
210
+ # directories / filenames, or nothing (can be an arbitrary command)
196
211
  #
197
212
  # @see Guard::Watcher
198
213
  # @see #guard
@@ -200,6 +215,7 @@ module Guard
200
215
  def watch(pattern, &action)
201
216
  # Allow watches in the global scope (to execute arbitrary commands) by
202
217
  # building a generic Guard::Plugin.
218
+ @plugin_options ||= nil
203
219
  return guard(:plugin) { watch(pattern, &action) } unless @plugin_options
204
220
 
205
221
  @plugin_options[:watchers] << ::Guard::Watcher.new(pattern, action)
@@ -213,8 +229,13 @@ module Guard
213
229
  # @example Define a callback that'll be called before the `reload` action.
214
230
  # callback(:reload_begin) { puts "Let's reload!" }
215
231
  #
216
- # @example Define a callback that'll be called before the `start` and `stop` actions.
217
- # my_lambda = lambda { |plugin, event, *args| puts "Let's #{event} #{plugin} with #{args}!" }
232
+ # @example Define a callback that'll be called before the `start` and
233
+ # `stop` actions.
234
+ #
235
+ # my_lambda = lambda do |plugin, event, *args|
236
+ # puts "Let's #{event} #{plugin} with #{args}!"
237
+ # end
238
+ #
218
239
  # callback(my_lambda, [:start_begin, :start_end])
219
240
  #
220
241
  # @param [Array] args the callback arguments
@@ -223,15 +244,16 @@ module Guard
223
244
  # @see Guard::Hooker
224
245
  #
225
246
  def callback(*args, &block)
247
+ @plugin_options ||= nil
226
248
  fail "callback must be called within a guard block" unless @plugin_options
227
249
 
228
250
  block, events = if args.size > 1
229
- # block must be the first argument in that case, the yielded block is
230
- # ignored
231
- args
232
- else
233
- [block, args[0]]
234
- end
251
+ # block must be the first argument in that case, the
252
+ # yielded block is ignored
253
+ args
254
+ else
255
+ [block, args[0]]
256
+ end
235
257
  @plugin_options[:callbacks] << { events: events, listener: block }
236
258
  end
237
259
 
@@ -299,13 +321,13 @@ module Guard
299
321
  options[:level] = options[:level].to_sym
300
322
 
301
323
  unless [:debug, :info, :warn, :error].include? options[:level]
302
- ::Guard::UI.warning "Invalid log level `#{ options[:level] }` ignored. Please use either :debug, :info, :warn or :error."
324
+ UI.warning WARN_INVALID_LOG_LEVEL % [options[:level]]
303
325
  options.delete :level
304
326
  end
305
327
  end
306
328
 
307
329
  if options[:only] && options[:except]
308
- ::Guard::UI.warning 'You cannot specify the logger options :only and :except at the same time.'
330
+ UI.warning WARN_INVALID_LOG_OPTIONS
309
331
 
310
332
  options.delete :only
311
333
  options.delete :except
@@ -313,10 +335,13 @@ module Guard
313
335
 
314
336
  # Convert the :only and :except options to a regular expression
315
337
  [:only, :except].each do |name|
316
- if options[name]
317
- list = [].push(options[name]).flatten.map { |plugin| Regexp.escape(plugin.to_s) }.join('|')
318
- options[name] = Regexp.new(list, Regexp::IGNORECASE)
338
+ next unless options[name]
339
+
340
+ list = [].push(options[name]).flatten.map do |plugin|
341
+ Regexp.escape(plugin.to_s)
319
342
  end
343
+
344
+ options[name] = Regexp.new(list.join("|"), Regexp::IGNORECASE)
320
345
  end
321
346
 
322
347
  ::Guard::UI.options.merge!(options)
@@ -339,10 +364,7 @@ module Guard
339
364
  # @param [Hash] scopes the scope for the groups and plugins
340
365
  #
341
366
  def scope(scope = {})
342
- scope[:plugins] = Array(scope[:plugins] || scope[:plugin] || [])
343
- scope[:groups] = Array(scope[:groups] || scope[:group] || [])
344
367
  ::Guard.setup_scope(scope)
345
368
  end
346
-
347
369
  end
348
370
  end