guard 1.4.0 → 2.18.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.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -677
  3. data/LICENSE +4 -2
  4. data/README.md +91 -753
  5. data/bin/_guard-core +11 -0
  6. data/bin/guard +108 -3
  7. data/lib/guard/aruba_adapter.rb +59 -0
  8. data/lib/guard/cli/environments/bundler.rb +22 -0
  9. data/lib/guard/cli/environments/evaluate_only.rb +35 -0
  10. data/lib/guard/cli/environments/valid.rb +69 -0
  11. data/lib/guard/cli.rb +129 -128
  12. data/lib/guard/commander.rb +104 -0
  13. data/lib/guard/commands/all.rb +37 -0
  14. data/lib/guard/commands/change.rb +31 -0
  15. data/lib/guard/commands/notification.rb +26 -0
  16. data/lib/guard/commands/pause.rb +29 -0
  17. data/lib/guard/commands/reload.rb +36 -0
  18. data/lib/guard/commands/scope.rb +38 -0
  19. data/lib/guard/commands/show.rb +24 -0
  20. data/lib/guard/config.rb +18 -0
  21. data/lib/guard/deprecated/dsl.rb +45 -0
  22. data/lib/guard/deprecated/evaluator.rb +39 -0
  23. data/lib/guard/deprecated/guard.rb +328 -0
  24. data/lib/guard/deprecated/guardfile.rb +84 -0
  25. data/lib/guard/deprecated/watcher.rb +27 -0
  26. data/lib/guard/dsl.rb +332 -363
  27. data/lib/guard/dsl_describer.rb +132 -122
  28. data/lib/guard/dsl_reader.rb +51 -0
  29. data/lib/guard/group.rb +34 -14
  30. data/lib/guard/guardfile/evaluator.rb +232 -0
  31. data/lib/guard/guardfile/generator.rb +128 -0
  32. data/lib/guard/guardfile.rb +24 -60
  33. data/lib/guard/interactor.rb +31 -255
  34. data/lib/guard/internals/debugging.rb +68 -0
  35. data/lib/guard/internals/groups.rb +40 -0
  36. data/lib/guard/internals/helpers.rb +13 -0
  37. data/lib/guard/internals/plugins.rb +53 -0
  38. data/lib/guard/internals/queue.rb +51 -0
  39. data/lib/guard/internals/scope.rb +121 -0
  40. data/lib/guard/internals/session.rb +180 -0
  41. data/lib/guard/internals/state.rb +25 -0
  42. data/lib/guard/internals/tracing.rb +33 -0
  43. data/lib/guard/internals/traps.rb +10 -0
  44. data/lib/guard/jobs/base.rb +21 -0
  45. data/lib/guard/jobs/pry_wrapper.rb +336 -0
  46. data/lib/guard/jobs/sleep.rb +26 -0
  47. data/lib/guard/notifier.rb +46 -212
  48. data/lib/guard/options.rb +22 -0
  49. data/lib/guard/plugin.rb +303 -0
  50. data/lib/guard/plugin_util.rb +191 -0
  51. data/lib/guard/rake_task.rb +42 -0
  52. data/lib/guard/runner.rb +80 -140
  53. data/lib/guard/templates/Guardfile +14 -0
  54. data/lib/guard/terminal.rb +13 -0
  55. data/lib/guard/ui/colors.rb +56 -0
  56. data/lib/guard/ui/config.rb +70 -0
  57. data/lib/guard/ui/logger.rb +30 -0
  58. data/lib/guard/ui.rb +163 -128
  59. data/lib/guard/version.rb +1 -2
  60. data/lib/guard/watcher/pattern/deprecated_regexp.rb +45 -0
  61. data/lib/guard/watcher/pattern/match_result.rb +18 -0
  62. data/lib/guard/watcher/pattern/matcher.rb +33 -0
  63. data/lib/guard/watcher/pattern/pathname_path.rb +15 -0
  64. data/lib/guard/watcher/pattern/simple_path.rb +23 -0
  65. data/lib/guard/watcher/pattern.rb +24 -0
  66. data/lib/guard/watcher.rb +52 -95
  67. data/lib/guard.rb +108 -376
  68. data/lib/tasks/releaser.rb +116 -0
  69. data/man/guard.1 +12 -9
  70. data/man/guard.1.html +18 -12
  71. metadata +148 -77
  72. data/images/guard.png +0 -0
  73. data/lib/guard/guard.rb +0 -156
  74. data/lib/guard/hook.rb +0 -120
  75. data/lib/guard/interactors/coolline.rb +0 -64
  76. data/lib/guard/interactors/helpers/completion.rb +0 -32
  77. data/lib/guard/interactors/helpers/terminal.rb +0 -46
  78. data/lib/guard/interactors/readline.rb +0 -94
  79. data/lib/guard/interactors/simple.rb +0 -19
  80. data/lib/guard/notifiers/emacs.rb +0 -69
  81. data/lib/guard/notifiers/gntp.rb +0 -118
  82. data/lib/guard/notifiers/growl.rb +0 -99
  83. data/lib/guard/notifiers/growl_notify.rb +0 -92
  84. data/lib/guard/notifiers/libnotify.rb +0 -96
  85. data/lib/guard/notifiers/notifysend.rb +0 -84
  86. data/lib/guard/notifiers/rb_notifu.rb +0 -102
  87. data/lib/guard/notifiers/terminal_notifier.rb +0 -66
  88. data/lib/guard/notifiers/tmux.rb +0 -69
  89. data/lib/guard/version.rbc +0 -130
data/lib/guard/hook.rb DELETED
@@ -1,120 +0,0 @@
1
- module Guard
2
-
3
- # Guard has a hook mechanism that allows you to insert callbacks for individual Guard plugins.
4
- # By default, each of the Guard plugin instance methods has a "_begin" and an "_end" hook.
5
- # For example, the Guard::Guard#start method has a :start_begin hook that is runs immediately
6
- # before Guard::Guard#start, and a :start_end hook that runs immediately after Guard::Guard#start.
7
- #
8
- # Read more about [hooks and callbacks on the wiki](https://github.com/guard/guard/wiki/Hooks-and-callbacks).
9
- #
10
- module Hook
11
-
12
- require 'guard/ui'
13
-
14
- # The Hook module gets included.
15
- #
16
- # @param [Class] base the class that includes the module
17
- #
18
- def self.included(base)
19
- base.send :include, InstanceMethods
20
- end
21
-
22
- # Instance methods that gets included in the base class.
23
- #
24
- module InstanceMethods
25
-
26
- # When event is a Symbol, {#hook} will generate a hook name
27
- # by concatenating the method name from where {#hook} is called
28
- # with the given Symbol.
29
- #
30
- # @example Add a hook with a Symbol
31
- #
32
- # def run_all
33
- # hook :foo
34
- # end
35
- #
36
- # Here, when {Guard::Guard#run_all} is called, {#hook} will notify callbacks
37
- # registered for the "run_all_foo" event.
38
- #
39
- # When event is a String, {#hook} will directly turn the String
40
- # into a Symbol.
41
- #
42
- # @example Add a hook with a String
43
- #
44
- # def run_all
45
- # hook "foo_bar"
46
- # end
47
- #
48
- # When {Guard::Guard#run_all} is called, {#hook} will notify callbacks
49
- # registered for the "foo_bar" event.
50
- #
51
- # @param [Symbol, String] event the name of the Guard event
52
- # @param [Array] args the parameters are passed as is to the callbacks registered for the given event.
53
- #
54
- def hook(event, *args)
55
- hook_name = if event.is_a? Symbol
56
- calling_method = caller[0][/`([^']*)'/, 1]
57
- "#{ calling_method }_#{ event }"
58
- else
59
- event
60
- end.to_sym
61
-
62
- ::Guard::UI.debug "Hook :#{ hook_name } executed for #{ self.class }"
63
-
64
- Hook.notify(self.class, hook_name, *args)
65
- end
66
- end
67
-
68
- class << self
69
-
70
- # Get all callbacks.
71
- #
72
- def callbacks
73
- @callbacks ||= Hash.new { |hash, key| hash[key] = [] }
74
- end
75
-
76
- # Add a callback.
77
- #
78
- # @param [Block] listener the listener to notify
79
- # @param [Guard::Guard] guard_class the Guard class to add the callback
80
- # @param [Array<Symbol>] events the events to register
81
- #
82
- def add_callback(listener, guard_class, events)
83
- _events = events.is_a?(Array) ? events : [events]
84
- _events.each do |event|
85
- callbacks[[guard_class, event]] << listener
86
- end
87
- end
88
-
89
- # Checks if a callback has been registered.
90
- #
91
- # @param [Block] listener the listener to notify
92
- # @param [Guard::Guard] guard_class the Guard class to add the callback
93
- # @param [Symbol] event the event to look for
94
- #
95
- def has_callback?(listener, guard_class, event)
96
- callbacks[[guard_class, event]].include?(listener)
97
- end
98
-
99
- # Notify a callback.
100
- #
101
- # @param [Guard::Guard] guard_class the Guard class to add the callback
102
- # @param [Symbol] event the event to trigger
103
- # @param [Array] args the arguments for the listener
104
- #
105
- def notify(guard_class, event, *args)
106
- callbacks[[guard_class, event]].each do |listener|
107
- listener.call(guard_class, event, *args)
108
- end
109
- end
110
-
111
- # Reset all callbacks.
112
- #
113
- def reset_callbacks!
114
- @callbacks = nil
115
- end
116
-
117
- end
118
-
119
- end
120
- end
@@ -1,64 +0,0 @@
1
- require 'guard'
2
- require 'guard/ui'
3
- require 'guard/interactor'
4
- require 'guard/interactors/helpers/terminal'
5
- require 'guard/interactors/helpers/completion'
6
-
7
- module Guard
8
-
9
- # Interactor that uses coolline for getting the user input.
10
- # This enables history support and auto-completion,
11
- #
12
- class CoollineInteractor < ::Guard::Interactor
13
- include ::Guard::CompletionHelper
14
- include ::Guard::TerminalHelper
15
-
16
- # Test if the Interactor is
17
- # available in the current environment?
18
- #
19
- # @param [Boolean] silent true if no error messages should be shown
20
- # @return [Boolean] the availability status
21
- #
22
- def self.available?(silent = false)
23
- if RbConfig::CONFIG['RUBY_PROGRAM_VERSION'] == '1.9.3'
24
- require 'coolline'
25
- true
26
- else
27
- ::Guard::UI.error 'The :coolline interactor runs only on Ruby 1.9.3.' unless silent
28
- false
29
- end
30
-
31
- rescue LoadError => e
32
- ::Guard::UI.error "Please add \"gem 'coolline'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
33
- false
34
- end
35
-
36
- # Read a line from stdin with Readline.
37
- #
38
- def read_line
39
- coolline = Coolline.new do |cool|
40
- cool.transform_proc = proc do
41
- cool.line
42
- end
43
-
44
- cool.completion_proc = proc do
45
- word = cool.completed_word
46
- auto_complete(word)
47
- end
48
- end
49
-
50
- while line = coolline.readline(prompt)
51
- process_input(line)
52
- end
53
- end
54
-
55
- # The current interactor prompt
56
- #
57
- # @return [String] the prompt to show
58
- #
59
- def prompt
60
- ::Guard.listener.paused? ? 'p> ' : '>> '
61
- end
62
-
63
- end
64
- end
@@ -1,32 +0,0 @@
1
- require 'guard'
2
-
3
- module Guard
4
-
5
- # Module for providing word completion to an interactor.
6
- #
7
- module CompletionHelper
8
-
9
- COMPLETION_ACTIONS = %w[help reload exit pause notification show]
10
-
11
- # Auto complete the given word.
12
- #
13
- # @param [String] word the partial word
14
- # @return [Array<String>] the matching words
15
- #
16
- def auto_complete(word)
17
- completion_list.grep(/^#{ Regexp.escape(word) }/)
18
- end
19
-
20
- # Get the auto completion list.
21
- #
22
- # @return [Array<String>] the list of words
23
- #
24
- def completion_list
25
- groups = ::Guard.groups.map { |group| group.name.to_s }
26
- guards = ::Guard.guards.map { |guard| guard.class.to_s.downcase.sub('guard::', '') }
27
-
28
- COMPLETION_ACTIONS + groups + guards - ['default']
29
- end
30
-
31
- end
32
- end
@@ -1,46 +0,0 @@
1
- module Guard
2
-
3
- # Module for resetting terminal options for an interactor.
4
- #
5
- module TerminalHelper
6
-
7
- # Start the interactor.
8
- #
9
- def start
10
- store_terminal_settings if stty_exists?
11
- super
12
- end
13
-
14
- # Stop the interactor.
15
- #
16
- def stop
17
- super
18
- restore_terminal_settings if stty_exists?
19
- end
20
-
21
- private
22
-
23
- # Detects whether or not the stty command exists
24
- # on the user machine.
25
- #
26
- # @return [Boolean] the status of stty
27
- #
28
- def stty_exists?
29
- @stty_exists ||= system('hash', 'stty')
30
- end
31
-
32
- # Stores the terminal settings so we can resore them
33
- # when stopping.
34
- #
35
- def store_terminal_settings
36
- @stty_save = `stty -g 2>/dev/null`.chomp
37
- end
38
-
39
- # Restore terminal settings
40
- #
41
- def restore_terminal_settings
42
- system("stty #{ @stty_save } 2>/dev/null") if @stty_save
43
- end
44
-
45
- end
46
- end
@@ -1,94 +0,0 @@
1
- require 'guard'
2
- require 'guard/ui'
3
- require 'guard/interactor'
4
- require 'guard/interactors/helpers/terminal'
5
- require 'guard/interactors/helpers/completion'
6
-
7
- module Guard
8
-
9
- # Interactor that used readline for getting the user input.
10
- # This enables history support and auto-completion, but is
11
- # broken on OS X without installing `rb-readline` or using JRuby.
12
- #
13
- # @see http://bugs.ruby-lang.org/issues/5539
14
- #
15
- class ReadlineInteractor < ::Guard::Interactor
16
- include ::Guard::CompletionHelper
17
- include ::Guard::TerminalHelper
18
-
19
- # Test if the Interactor is
20
- # available in the current environment?
21
- #
22
- # @param [Boolean] silent true if no error messages should be shown
23
- # @return [Boolean] the availability status
24
- #
25
- def self.available?(silent = false)
26
- require 'readline'
27
-
28
- if defined?(RbReadline) || defined?(JRUBY_VERSION) || RbConfig::CONFIG['target_os'] =~ /linux/i
29
- true
30
- else
31
- ::Guard::UI.error 'The :readline interactor runs only fine on JRuby, Linux or with the gem \'rb-readline\' installed.' unless silent
32
- false
33
- end
34
-
35
- rescue LoadError => e
36
- ::Guard::UI.error "Please install Ruby Readline support or add \"gem 'rb-readline'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
37
- false
38
- end
39
-
40
- # Initialize the interactor.
41
- #
42
- def initialize
43
- require 'readline'
44
-
45
- Readline.completion_proc = proc { |word| auto_complete(word) }
46
-
47
- begin
48
- Readline.completion_append_character = ' '
49
- rescue NotImplementedError
50
- # Ignore, we just don't support it then
51
- end
52
- end
53
-
54
- # Stop the interactor.
55
- #
56
- def stop
57
- # Erase the current line for Ruby Readline
58
- if Readline.respond_to?(:refresh_line) && !defined?(::JRUBY_VERSION)
59
- Readline.refresh_line
60
- end
61
-
62
- # Erase the current line for Rb-Readline
63
- if defined?(RbReadline) && RbReadline.rl_outstream
64
- RbReadline._rl_erase_entire_line
65
- end
66
-
67
- super
68
- end
69
-
70
- # Read a line from stdin with Readline.
71
- #
72
- def read_line
73
- require 'readline'
74
-
75
- while line = Readline.readline(prompt, true)
76
- line.gsub!(/^\W*/, '')
77
- if line =~ /^\s*$/ or Readline::HISTORY.to_a[-2] == line
78
- Readline::HISTORY.pop
79
- end
80
-
81
- process_input(line)
82
- end
83
- end
84
-
85
- # The current interactor prompt
86
- #
87
- # @return [String] the prompt to show
88
- #
89
- def prompt
90
- ::Guard.listener.paused? ? 'p> ' : '> '
91
- end
92
-
93
- end
94
- end
@@ -1,19 +0,0 @@
1
- require 'guard/interactor'
2
-
3
- module Guard
4
-
5
- # Simple interactor that that reads user
6
- # input from standard input.
7
- #
8
- class SimpleInteractor < ::Guard::Interactor
9
-
10
- # Read a line from stdin with Readline.
11
- #
12
- def read_line
13
- while line = $stdin.gets
14
- process_input(line.gsub(/^\W*/, '').chomp)
15
- end
16
- end
17
-
18
- end
19
- end
@@ -1,69 +0,0 @@
1
- require 'rbconfig'
2
-
3
- module Guard
4
- module Notifier
5
-
6
- # Default options for EmacsClient
7
- DEFAULTS = {
8
- :client => 'emacsclient',
9
- :success => 'ForestGreen',
10
- :failed => 'Firebrick',
11
- :default => 'Black',
12
- }
13
-
14
- # Send a notification to Emacs with emacsclient (http://www.emacswiki.org/emacs/EmacsClient).
15
- #
16
- # @example Add the `:emacs` notifier to your `Guardfile`
17
- # notification :emacs
18
- #
19
- module Emacs
20
- extend self
21
-
22
- # Test if Emacs with running server is available.
23
- #
24
- # @param [Boolean] silent true if no error messages should be shown
25
- # @return [Boolean] the availability status
26
- #
27
- def available?(silent = false)
28
- result = `#{ DEFAULTS[:client] } --eval '1' 2> /dev/null || echo 'N/A'`
29
-
30
- if result.chomp! == 'N/A'
31
- false
32
- else
33
- true
34
- end
35
- end
36
-
37
- # Show a system notification.
38
- #
39
- # @param [String] type the notification type. Either 'success', 'pending', 'failed' or 'notify'
40
- # @param [String] title the notification title
41
- # @param [String] message the notification message body
42
- # @param [String] image the path to the notification image
43
- # @param [Hash] options additional notification library options
44
- # @option options [Boolean] sticky make the notification sticky
45
- # @option options [String, Integer] priority specify an int or named key (default is 0)
46
- #
47
- def notify(type, title, message, image, options = { })
48
- system(%(#{ DEFAULTS[:client] } --eval "(set-face-background 'modeline \\"#{ emacs_color(type) }\\")"))
49
- end
50
-
51
- # Get the Emacs color for the notification type.
52
- # You can configure your own color by overwrite the defaults.
53
- #
54
- # @param [String] type the notification type
55
- # @return [String] the name of the emacs color
56
- #
57
- def emacs_color(type)
58
- case type
59
- when 'success'
60
- DEFAULTS[:success]
61
- when 'failed'
62
- DEFAULTS[:failed]
63
- else
64
- DEFAULTS[:default]
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,118 +0,0 @@
1
- require 'rbconfig'
2
- require 'guard/ui'
3
-
4
- module Guard
5
- module Notifier
6
-
7
- # System notifications using the [ruby_gntp](https://github.com/snaka/ruby_gntp) gem.
8
- #
9
- # This gem is available for OS X, Linux and Windows and sends system notifications to
10
- # the following system notification frameworks through the
11
- # [Growl Network Transport Protocol](http://www.growlforwindows.com/gfw/help/gntp.aspx):
12
- #
13
- # * [Growl](http://growl.info)
14
- # * [Growl for Windows](http://www.growlforwindows.com)
15
- # * [Growl for Linux](http://mattn.github.com/growl-for-linux)
16
- # * [Snarl](https://sites.google.com/site/snarlapp/)
17
- #
18
- # @example Add the `ruby_gntp` gem to your `Gemfile`
19
- # group :development
20
- # gem 'ruby_gntp'
21
- # end
22
- #
23
- # @example Add the `:gntp` notifier to your `Guardfile`
24
- # notification :gntp
25
- #
26
- # @example Add the `:gntp` notifier with configuration options to your `Guardfile`
27
- # notification :gntp, :sticky => true, :host => '192.168.1.5', :password => 'secret'
28
- #
29
- module GNTP
30
- extend self
31
-
32
- # Default options for the ruby gtnp gem
33
- DEFAULTS = {
34
- :sticky => false,
35
- :host => '127.0.0.1',
36
- :password => '',
37
- :port => 23053
38
- }
39
-
40
- # Is this notifier already registered
41
- #
42
- # @return [Boolean] registration status
43
- #
44
- def registered?
45
- @registered ||= false
46
- end
47
-
48
- # Mark the notifier as registered.
49
- #
50
- def registered!
51
- @registered = true
52
- end
53
-
54
- # Test if the notification library is available.
55
- #
56
- # @param [Boolean] silent true if no error messages should be shown
57
- # @return [Boolean] the availability status
58
- #
59
- def available?(silent = false)
60
- if RbConfig::CONFIG['host_os'] =~ /darwin|linux|freebsd|openbsd|sunos|solaris|mswin|mingw/
61
- require 'ruby_gntp'
62
- true
63
-
64
- else
65
- ::Guard::UI.error 'The :gntp notifier runs only on Mac OS X, Linux, FreeBSD, OpenBSD, Solaris and Windows.' unless silent
66
- false
67
- end
68
-
69
- rescue LoadError
70
- ::Guard::UI.error "Please add \"gem 'ruby_gntp'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
71
- false
72
- end
73
-
74
- # Show a system notification.
75
- #
76
- # @param [String] type the notification type. Either 'success', 'pending', 'failed' or 'notify'
77
- # @param [String] title the notification title
78
- # @param [String] message the notification message body
79
- # @param [String] image the path to the notification image
80
- # @param [Hash] options additional notification library options
81
- # @option options [String] host the hostname or IP address to which to send a remote notification
82
- # @option options [String] password the password used for remote notifications
83
- # @option options [Integer] port the port to send a remote notification
84
- # @option options [Boolean] sticky make the notification sticky
85
- #
86
- def notify(type, title, message, image, options = { })
87
- require 'ruby_gntp'
88
-
89
- options = DEFAULTS.merge(options)
90
-
91
- gntp = ::GNTP.new('Guard', options.delete(:host), options.delete(:password), options.delete(:port))
92
-
93
- unless registered?
94
- gntp.register({
95
- :app_icon => File.expand_path(File.join(__FILE__, '..', '..', '..', '..', 'images', 'guard.png')),
96
- :notifications => [
97
- { :name => 'notify', :enabled => true },
98
- { :name => 'failed', :enabled => true },
99
- { :name => 'pending', :enabled => true },
100
- { :name => 'success', :enabled => true }
101
- ]
102
- })
103
-
104
- registered!
105
- end
106
-
107
- gntp.notify(options.merge({
108
- :name => type,
109
- :title => title,
110
- :text => message,
111
- :icon => image
112
- }))
113
- end
114
-
115
- end
116
- end
117
- end
118
-
@@ -1,99 +0,0 @@
1
- require 'rbconfig'
2
- require 'guard/ui'
3
-
4
- module Guard
5
- module Notifier
6
-
7
- # System notifications using the [growl](https://github.com/visionmedia/growl) gem.
8
- #
9
- # This gem is available for OS X and sends system notifications to
10
- # [Growl](http://growl.info) through the [GrowlNotify](http://growl.info/downloads)
11
- # executable.
12
- #
13
- # The `growlnotify` executable must be installed manually or by using
14
- # [Homebrew](http://mxcl.github.com/homebrew/).
15
- #
16
- # Sending notifications with this notifier will not show the different
17
- # Guard notifications in the Growl preferences. Use the :gntp or :growl_notify
18
- # notifiers if you want to customize each notification type in Growl.
19
- #
20
- # @example Install `growlnotify` with Homebrew
21
- # brew install growlnotify
22
- #
23
- # @example Add the `growl` gem to your `Gemfile`
24
- # group :development
25
- # gem 'growl'
26
- # end
27
- #
28
- # @example Add the `:growl` notifier to your `Guardfile`
29
- # notification :growl
30
- #
31
- # @example Add the `:growl_notify` notifier with configuration options to your `Guardfile`
32
- # notification :growl, :sticky => true, :host => '192.168.1.5', :password => 'secret'
33
- #
34
- module Growl
35
- extend self
36
-
37
- # Default options for growl gem
38
- DEFAULTS = {
39
- :sticky => false,
40
- :priority => 0
41
- }
42
-
43
- # Test if the notification library is available.
44
- #
45
- # @param [Boolean] silent true if no error messages should be shown
46
- # @return [Boolean] the availability status
47
- #
48
- def available?(silent = false)
49
- if RbConfig::CONFIG['host_os'] =~ /darwin/
50
- require 'growl'
51
-
52
- if ::Growl.installed?
53
- true
54
- else
55
- ::Guard::UI.error "Please install the 'growlnotify' executable." unless silent
56
- false
57
- end
58
-
59
- else
60
- ::Guard::UI.error 'The :growl notifier runs only on Mac OS X.' unless silent
61
- false
62
- end
63
-
64
- rescue LoadError, NameError
65
- ::Guard::UI.error "Please add \"gem 'growl'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
66
- false
67
- end
68
-
69
- # Show a system notification.
70
- #
71
- # The documented options are for GrowlNotify 1.3, but the older options are
72
- # also supported. Please see `growlnotify --help`.
73
- #
74
- # Priority can be one of the following named keys: `Very Low`, `Moderate`, `Normal`,
75
- # `High`, `Emergency`. It can also be an int between -2 and 2.
76
- #
77
- # @param [String] type the notification type. Either 'success', 'pending', 'failed' or 'notify'
78
- # @param [String] title the notification title
79
- # @param [String] message the notification message body
80
- # @param [String] image the path to the notification image
81
- # @param [Hash] options additional notification library options
82
- # @option options [Boolean] sticky make the notification sticky
83
- # @option options [String, Integer] priority specify an int or named key (default is 0)
84
- # @option options [String] host the hostname or IP address to which to send a remote notification
85
- # @option options [String] password the password used for remote notifications
86
- #
87
- def notify(type, title, message, image, options = { })
88
- require 'growl'
89
-
90
- ::Growl.notify(message, DEFAULTS.merge(options).merge({
91
- :name => 'Guard',
92
- :title => title,
93
- :image => image
94
- }))
95
- end
96
-
97
- end
98
- end
99
- end