guard 1.8.3 → 2.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +68 -10
  3. data/README.md +54 -33
  4. data/lib/guard.rb +133 -483
  5. data/lib/guard/cli.rb +78 -82
  6. data/lib/guard/commander.rb +121 -0
  7. data/lib/guard/commands/all.rb +1 -1
  8. data/lib/guard/commands/reload.rb +1 -1
  9. data/lib/guard/deprecated_methods.rb +59 -0
  10. data/lib/guard/deprecator.rb +107 -0
  11. data/lib/guard/dsl.rb +143 -329
  12. data/lib/guard/dsl_describer.rb +101 -57
  13. data/lib/guard/group.rb +27 -8
  14. data/lib/guard/guard.rb +25 -150
  15. data/lib/guard/guardfile.rb +35 -85
  16. data/lib/guard/guardfile/evaluator.rb +245 -0
  17. data/lib/guard/guardfile/generator.rb +89 -0
  18. data/lib/guard/interactor.rb +147 -163
  19. data/lib/guard/notifier.rb +83 -137
  20. data/lib/guard/notifiers/base.rb +220 -0
  21. data/lib/guard/notifiers/emacs.rb +39 -37
  22. data/lib/guard/notifiers/file_notifier.rb +29 -25
  23. data/lib/guard/notifiers/gntp.rb +68 -75
  24. data/lib/guard/notifiers/growl.rb +49 -52
  25. data/lib/guard/notifiers/growl_notify.rb +51 -56
  26. data/lib/guard/notifiers/libnotify.rb +41 -48
  27. data/lib/guard/notifiers/notifysend.rb +58 -38
  28. data/lib/guard/notifiers/rb_notifu.rb +54 -54
  29. data/lib/guard/notifiers/terminal_notifier.rb +48 -36
  30. data/lib/guard/notifiers/terminal_title.rb +23 -19
  31. data/lib/guard/notifiers/tmux.rb +110 -93
  32. data/lib/guard/options.rb +21 -0
  33. data/lib/guard/plugin.rb +66 -0
  34. data/lib/guard/plugin/base.rb +178 -0
  35. data/lib/guard/plugin/hooker.rb +123 -0
  36. data/lib/guard/plugin_util.rb +158 -0
  37. data/lib/guard/rake_task.rb +47 -0
  38. data/lib/guard/runner.rb +62 -82
  39. data/lib/guard/setuper.rb +248 -0
  40. data/lib/guard/ui.rb +24 -80
  41. data/lib/guard/ui/colors.rb +60 -0
  42. data/lib/guard/version.rb +1 -2
  43. data/lib/guard/watcher.rb +30 -30
  44. data/man/guard.1 +4 -4
  45. data/man/guard.1.html +6 -4
  46. metadata +25 -11
  47. data/lib/guard/hook.rb +0 -120
@@ -1,86 +1,130 @@
1
1
  # encoding: utf-8
2
+ require 'formatador'
3
+
4
+ require 'guard/guardfile/evaluator'
5
+ require 'guard/ui'
2
6
 
3
7
  module Guard
4
8
 
5
- # The DslDescriber overrides methods to create an internal structure
6
- # of the Guardfile that is used in some inspection utility methods
7
- # like the CLI commands `show` and `list`.
9
+ # The DslDescriber evaluates the Guardfile and creates an internal structure
10
+ # of it that is used in some inspection utility methods like the CLI commands
11
+ # `show` and `list`.
8
12
  #
9
13
  # @see Guard::Dsl
10
14
  # @see Guard::CLI
11
15
  #
12
- class DslDescriber < Dsl
13
-
14
- require 'guard/dsl'
15
- require 'guard/ui'
16
-
17
- require 'formatador'
18
-
19
- class << self
16
+ class DslDescriber
17
+
18
+ attr_reader :options
19
+
20
+ # Initializes a new DslDescriber object.
21
+ #
22
+ # @option options [String] guardfile the path to a valid Guardfile
23
+ # @option options [String] guardfile_contents a string representing the content of a valid Guardfile
24
+ #
25
+ # @see Guard::Guardfile::Evaluator#initialize
26
+ #
27
+ def initialize(options = {})
28
+ @options = options
29
+ ::Guard.reset_groups
30
+ ::Guard.reset_plugins
31
+ end
20
32
 
21
- # Setups groups and plugins state and evaluates the DSL methods in the `Guardfile`.
22
- #
23
- # @option options [Array<Symbol,String>] groups the groups to evaluate
24
- # @option options [String] guardfile the path to a valid Guardfile
25
- # @option options [String] guardfile_contents a string representing the content of a valid Guardfile
26
- # @raise [ArgumentError] when options are not a Hash
27
- #
28
- def evaluate_guardfile(options = { })
29
- ::Guard.options = { :plugin => [], :group => [] }
30
- ::Guard.setup_groups
31
- ::Guard.setup_guards
33
+ # List the Guard plugins that are available for use in your system and marks
34
+ # those that are currently used in your `Guardfile`.
35
+ #
36
+ # @see CLI#list
37
+ #
38
+ def list
39
+ _evaluate_guardfile
32
40
 
33
- super options
41
+ rows = ::Guard::PluginUtil.plugin_names.sort.uniq.inject([]) do |rows, name|
42
+ rows << { Plugin: name.capitalize, Guardfile: ::Guard.plugins(name) ? '✔' : '✘' }
34
43
  end
35
44
 
36
- # List the Guard plugins that are available for use in your system and marks
37
- # those that are currently used in your `Guardfile`.
38
- #
39
- # @param [Hash] options the Guard options
40
- #
41
- def list(options)
42
- evaluate_guardfile(options)
45
+ Formatador.display_compact_table(rows, [:Plugin, :Guardfile])
46
+ end
43
47
 
44
- rows = ::Guard.guard_gem_names.sort.uniq.inject([]) do |rows, name|
45
- rows << { :Plugin => name.capitalize, :Guardfile => ::Guard.guards(name) ? '✔' : '✘' }
48
+ # Shows all Guard plugins and their options that are defined in
49
+ # the `Guardfile`.
50
+ #
51
+ # @see CLI#show
52
+ #
53
+ def show
54
+ _evaluate_guardfile
55
+
56
+ rows = ::Guard.groups.inject([]) do |rows, group|
57
+ Array(::Guard.plugins(group: group.name)).each do |plugin|
58
+ options = plugin.options.inject({}) { |o, (k, v)| o[k.to_s] = v; o }.sort
59
+
60
+ if options.empty?
61
+ rows << :split
62
+ rows << { Group: group.title, Plugin: plugin.title, Option: '', Value: '' }
63
+ else
64
+ options.each_with_index do |(option, value), index|
65
+ if index == 0
66
+ rows << :split
67
+ rows << { Group: group.title, Plugin: plugin.title, Option: option.to_s, Value: value.inspect }
68
+ else
69
+ rows << { Group: '', Plugin: '', Option: option.to_s, Value: value.inspect }
70
+ end
71
+ end
72
+ end
46
73
  end
47
74
 
48
- Formatador.display_compact_table(rows, [:Plugin, :Guardfile])
75
+ rows
49
76
  end
50
77
 
51
- # Shows all Guard plugins and their options that are defined in
52
- # the `Guardfile`.
53
- #
54
- # @param [Hash] options the Guard options
55
- #
56
- def show(options)
57
- evaluate_guardfile(options)
58
-
59
- rows = ::Guard.groups.inject([]) do |rows, group|
60
- ::Guard.guards({ :group => group.name }).each do |plugin|
61
- options = plugin.options.inject({}) { |o, (k, v)| o[k.to_s] = v; o }.sort
78
+ Formatador.display_compact_table(rows.drop(1), [:Group, :Plugin, :Option, :Value])
79
+ end
62
80
 
63
- if options.empty?
81
+ # Shows all notifiers and their options that are defined in
82
+ # the `Guardfile`.
83
+ #
84
+ # @see CLI#show
85
+ #
86
+ def notifiers
87
+ _evaluate_guardfile
88
+
89
+ rows = ::Guard::Notifier::NOTIFIERS.inject(:merge).inject([]) do |rows, definition|
90
+ name = definition[0]
91
+ clazz = definition[1]
92
+ available = clazz.available?(silent: true) ? '✔' : '✘'
93
+ notifier = ::Guard::Notifier.notifiers.find{ |n| n[:name] == name }
94
+ used = notifier ? '✔' : '✘'
95
+ options = notifier ? notifier[:options] : {}
96
+ defaults = clazz.const_defined?(:DEFAULTS) ? clazz.const_get(:DEFAULTS) : {}
97
+ options = defaults.merge(options)
98
+ options.delete(:silent)
99
+
100
+ if options.empty?
101
+ rows << :split
102
+ rows << { Name: name, Available: available, Used: used, Option: '', Value: '' }
103
+ else
104
+ options.each_with_index do |(option, value), index|
105
+ if index == 0
64
106
  rows << :split
65
- rows << { :Group => group.to_s, :Plugin => plugin.to_s, :Option => '', :Value => '' }
107
+ rows << { Name: name, Available: available, Used: used, Option: option.to_s, Value: value.inspect }
66
108
  else
67
- options.each_with_index do |(option, value), index|
68
- if index == 0
69
- rows << :split
70
- rows << { :Group => group.to_s, :Plugin => plugin.to_s, :Option => option.to_s, :Value => value.inspect }
71
- else
72
- rows << { :Group => '', :Plugin => '', :Option => option.to_s, :Value => value.inspect }
73
- end
74
- end
109
+ rows << { Name: '', Available: '', Used: '', Option: option.to_s, Value: value.inspect }
75
110
  end
76
111
  end
77
-
78
- rows
79
112
  end
80
113
 
81
- Formatador.display_compact_table(rows.drop(1), [:Group, :Plugin, :Option, :Value])
114
+ rows
82
115
  end
83
116
 
117
+ Formatador.display_compact_table(rows.drop(1), [:Name, :Available, :Used, :Option, :Value])
84
118
  end
119
+
120
+ private
121
+
122
+ # Evaluates the `Guardfile` by delegating to
123
+ # {Guard::Guardfile::Evaluator#evaluate_guardfile}.
124
+ #
125
+ def _evaluate_guardfile
126
+ ::Guard::Guardfile::Evaluator.new(options).evaluate_guardfile
127
+ end
128
+
85
129
  end
86
130
  end
@@ -1,14 +1,17 @@
1
1
  module Guard
2
2
 
3
- # A group of Guard plugins. There are two reasons why you want to group your guards:
3
+ # A group of Guard plugins. There are two reasons why you want to group your
4
+ # Guard plugins:
4
5
  #
5
- # - You can start only certain Groups from the command line by passing the `--group` option.
6
- # - Abort task execution chain on failure within a group.
6
+ # * You can start only certain groups from the command line by passing the
7
+ # `--group` option to `guard start`.
8
+ # * Abort task execution chain on failure within a group with the
9
+ # `:halt_on_fail` option.
7
10
  #
8
11
  # @example Group that aborts on failure
9
12
  #
10
- # group :frontend, :halt_on_fail => true do
11
- # guard 'coffeescript', :input => 'spec/coffeescripts', :output => 'spec/javascripts'
13
+ # group :frontend, halt_on_fail: true do
14
+ # guard 'coffeescript', input: 'spec/coffeescripts', output: 'spec/javascripts'
12
15
  # guard 'jasmine-headless-webkit' do
13
16
  # watch(%r{^spec/javascripts/(.*)\..*}) { |m| newest_js_file("spec/javascripts/#{m[1]}_spec") }
14
17
  # end
@@ -32,12 +35,28 @@ module Guard
32
35
  @options = options
33
36
  end
34
37
 
35
- # String representation of the Guard group.
38
+ # Returns the group title.
36
39
  #
37
- # @return [String] the group name
40
+ # @example Title for a group named 'backend'
41
+ # > Guard::Group.new('backend').title
42
+ # => "Backend"
43
+ #
44
+ # @return [String]
45
+ #
46
+ def title
47
+ @title ||= name.to_s.capitalize
48
+ end
49
+
50
+ # String representation of the group.
51
+ #
52
+ # @example String representation of a group named 'backend'
53
+ # > Guard::Group.new('backend').to_s
54
+ # => "#<Guard::Group @name=backend @options={}>"
55
+ #
56
+ # @return [String] the string representation
38
57
  #
39
58
  def to_s
40
- @name.to_s.capitalize
59
+ "#<#{self.class} @name=#{name} @options=#{options}>"
41
60
  end
42
61
 
43
62
  end
@@ -1,167 +1,42 @@
1
+ require 'guard/plugin/base'
2
+
1
3
  module Guard
2
4
 
3
- # Base class that every Guard plugin implementation must inherit from.
4
- #
5
- # Guard will trigger the `start`, `stop`, `reload`, `run_all` and `run_on_changes`
6
- # (`run_on_additions`, `run_on_modifications` and `run_on_removals`) task methods
7
- # depending on user interaction and file modification.
8
- #
9
- # `run_on_changes` could be implemented to handle all the changes task case (additions,
10
- # modifications, removals) in once, or each task can be implemented separately with a
11
- # specific behavior.
12
- #
13
- # In each of these Guard task methods you have to implement some work when you want to
14
- # support this kind of task. The return value of each Guard task method is not evaluated
15
- # by Guard, but it'll be passed to the "_end" hook for further evaluation. You can
16
- # throw `:task_has_failed` to indicate that your Guard plugin method was not successful,
17
- # and successive Guard plugin tasks will be aborted when the group has set the `:halt_on_fail`
18
- # option.
19
- #
20
- # @see Guard::Hook
21
- # @see Guard::Group
22
- #
23
- # @example Throw :task_has_failed
24
- #
25
- # def run_all
26
- # if !runner.run(['all'])
27
- # throw :task_has_failed
28
- # end
29
- # end
5
+ # @deprecated Inheriting from `Guard::Guard` is deprecated, please inherit
6
+ # from {Plugin} instead. Please note that the constructor signature has
7
+ # changed from `Guard::Guard#initialize(watchers = [], options = {})` to
8
+ # `Guard::Plugin#initialize(options = {})`.
30
9
  #
31
- # Each Guard plugin should provide a template Guardfile located within the Gem
32
- # at `lib/guard/guard-name/templates/Guardfile`.
33
- #
34
- # By default all watchers for a Guard plugin have to return strings of paths to the
35
- # Guard, but if your Guard plugin wants to allow any return value from a watcher,
36
- # you can set the `any_return` option to true.
37
- #
38
- # If one of those methods raise an exception other than `:task_has_failed`,
39
- # the Guard::GuardName instance will be removed from the active guards.
10
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
11
+ # upgrade for Guard 2.0
40
12
  #
41
13
  class Guard
42
- require 'guard/hook'
43
- require 'guard/ui'
44
-
45
- include ::Guard::Hook
14
+ include ::Guard::Plugin::Base
46
15
 
47
- attr_accessor :watchers, :options, :group
48
-
49
- # Initializes a Guard plugin.
50
- # Don't do any work here, especially as Guard plugins get initialized even if they are not in an active group!
16
+ # @deprecated Inheriting from `Guard::Guard` is deprecated, please inherit
17
+ # from {Plugin} instead. Please note that the constructor signature
18
+ # has changed from `Guard::Guard#initialize(watchers = [], options = {})`
19
+ # to `Guard::Plugin#initialize(options = {})`.
20
+ #
21
+ # Initializes a Guard plugin. Don't do any work here,
22
+ # especially as Guard plugins get initialized even if they are not in an
23
+ # active group!
24
+ #
25
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
26
+ # upgrade for Guard 2.0
51
27
  #
52
28
  # @param [Array<Guard::Watcher>] watchers the Guard plugin file watchers
53
29
  # @param [Hash] options the custom Guard plugin options
54
30
  # @option options [Symbol] group the group this Guard plugin belongs to
55
- # @option options [Boolean] any_return allow any object to be returned from a watcher
31
+ # @option options [Boolean] any_return allow any object to be returned from
32
+ # a watcher
56
33
  #
57
34
  def initialize(watchers = [], options = {})
58
- @group = options[:group] ? options.delete(:group).to_sym : :default
59
- @watchers, @options = watchers, options
60
- end
35
+ ::Guard::UI.deprecation(::Guard::Deprecator::GUARD_GUARD_DEPRECATION % title)
61
36
 
62
- # Specify the source for the Guardfile template.
63
- # Each Guard plugin can redefine this method to add its own logic.
64
- #
65
- # @param [String] The plugin name
66
- #
67
- def self.template(name)
68
- File.read("#{ ::Guard.locate_guard(name) }/lib/guard/#{ name }/templates/Guardfile")
69
- end
70
-
71
- # Initialize the Guard plugin. This will copy the Guardfile template inside the Guard plugin Gem.
72
- # The template Guardfile must be located within the Gem at `lib/guard/guard-name/templates/Guardfile`.
73
- #
74
- # @param [String] name the name of the Guard plugin
75
- #
76
- def self.init(name)
77
- if ::Guard::Dsl.guardfile_include?(name)
78
- ::Guard::UI.info "Guardfile already includes #{ name } guard"
79
- else
80
- content = File.read('Guardfile')
81
- guard = template(name)
82
-
83
- File.open('Guardfile', 'wb') do |f|
84
- f.puts(content)
85
- f.puts("")
86
- f.puts(guard)
87
- end
88
-
89
- ::Guard::UI.info "#{ name } guard added to Guardfile, feel free to edit it"
90
- end
91
- end
92
-
93
- # Called once when Guard starts. Please override initialize method to init stuff.
94
- #
95
- # @raise [:task_has_failed] when start has failed
96
- # @return [Object] the task result
97
- #
98
- # @!method start
99
-
100
- # Called when `stop|quit|exit|s|q|e + enter` is pressed (when Guard quits).
101
- #
102
- # @raise [:task_has_failed] when stop has failed
103
- # @return [Object] the task result
104
- #
105
- # @!method stop
106
-
107
- # Called when `reload|r|z + enter` is pressed.
108
- # This method should be mainly used for "reload" (really!) actions like reloading passenger/spork/bundler/...
109
- #
110
- # @raise [:task_has_failed] when reload has failed
111
- # @return [Object] the task result
112
- #
113
- # @!method reload
114
-
115
- # Called when just `enter` is pressed
116
- # This method should be principally used for long action like running all specs/tests/...
117
- #
118
- # @raise [:task_has_failed] when run_all has failed
119
- # @return [Object] the task result
120
- #
121
- # @!method run_all
122
-
123
- # Default behaviour on file(s) changes that the Guard plugin watches.
124
- #
125
- # @param [Array<String>] paths the changes files or paths
126
- # @raise [:task_has_failed] when run_on_changes has failed
127
- # @return [Object] the task result
128
- #
129
- # @!method run_on_changes(paths)
130
-
131
- # Called on file(s) additions that the Guard plugin watches.
132
- #
133
- # @param [Array<String>] paths the changes files or paths
134
- # @raise [:task_has_failed] when run_on_additions has failed
135
- # @return [Object] the task result
136
- #
137
- # @!method run_on_additions(paths)
138
-
139
- # Called on file(s) modifications that the Guard plugin watches.
140
- #
141
- # @param [Array<String>] paths the changes files or paths
142
- # @raise [:task_has_failed] when run_on_modifications has failed
143
- # @return [Object] the task result
144
- #
145
- # @!method run_on_modifications(paths)
146
-
147
- # Called on file(s) removals that the Guard plugin watches.
148
- #
149
- # @param [Array<String>] paths the changes files or paths
150
- # @raise [:task_has_failed] when run_on_removals has failed
151
- # @return [Object] the task result
152
- #
153
- # @!method run_on_removals(paths)
154
-
155
- # Convert plugin to string representation. The
156
- # default just uses the plugin class name and
157
- # removes the Guard module name.
158
- #
159
- # @return [String] the string representation
160
- #
161
- def to_s
162
- self.class.to_s.downcase.sub('guard::', '').capitalize
37
+ _set_instance_variables_from_options(options.merge(watchers: watchers))
38
+ _register_callbacks
163
39
  end
164
40
 
165
41
  end
166
-
167
42
  end
@@ -1,94 +1,44 @@
1
+ require 'guard/guardfile/evaluator'
2
+ require 'guard/guardfile/generator'
3
+ require 'guard/ui'
4
+
1
5
  module Guard
2
6
 
3
- # The Guardfile is responsible for generating the Guardfile
4
- # and adding guards' template into it.
7
+ # @deprecated Use instance methods of {Guardfile::Evaluator} and
8
+ # {Guardfile::Generator} instead.
5
9
  #
6
- # @see Guard::CLI
10
+ # @see Guardfile::Evaluator
11
+ # @see Guardfile::Generator
7
12
  #
8
- class Guardfile
9
-
10
- require 'guard'
11
- require 'guard/ui'
12
-
13
- class << self
14
-
15
- # Creates the initial Guardfile template when it does not
16
- # already exist.
17
- #
18
- # @see Guard::CLI.init
19
- #
20
- # @param [Hash] options The options for creating a Guardfile
21
- # @option options [Boolean] :abort_on_existence Whether to abort or not when a Guardfile already exists
22
- #
23
- def create_guardfile(options = {})
24
- if !File.exist?('Guardfile')
25
- ::Guard::UI.info "Writing new Guardfile to #{ Dir.pwd }/Guardfile"
26
- FileUtils.cp(GUARDFILE_TEMPLATE, 'Guardfile')
27
- elsif options[:abort_on_existence]
28
- ::Guard::UI.error "Guardfile already exists at #{ Dir.pwd }/Guardfile"
29
- abort
30
- end
31
- end
32
-
33
- # Opens an existing guardfile and searches for redundant definitions
34
- # if extraneous defintions are found, it warns the user
35
- #
36
- # @see Guard::CLI.init
37
- #
38
- # @param [String] class name of gem definition that you would like to search for in the Guardfile
39
- # @param [String] contents of existing guardfile
40
- #
41
- def duplicate_definitions?(guard_class, guard_file)
42
- matches = guard_file.to_s.scan(/guard\s[\'|\"]#{guard_class}[\'|\"]\sdo/)
43
- if matches.count > 1
44
- ::Guard::UI.info "There are #{matches.count.to_s} definitions in your Guardfile for '#{guard_class}', you may want to clean up your Guardfile as this could cause issues."
45
- return true
46
- else
47
- return false
48
- end
49
- end
50
-
51
- # Adds the Guardfile template of a Guard implementation
52
- # to an existing Guardfile.
53
- #
54
- # @see Guard::CLI.init
55
- #
56
- # @param [String] guard_name the name of the Guard or template to initialize
57
- #
58
- def initialize_template(guard_name)
59
- guard_class = ::Guard.get_guard_class(guard_name, true)
60
-
61
- if guard_class
62
- guard_class.init(guard_name)
63
- guardfile_name = 'Guardfile'
64
- guard_file = File.read(guardfile_name) if File.exists?(guardfile_name)
65
- duplicate_definitions?(guard_name, guard_file)
66
- elsif File.exist?(File.join(HOME_TEMPLATES, guard_name))
67
- content = File.read('Guardfile')
68
- template = File.read(File.join(HOME_TEMPLATES, guard_name))
69
-
70
- File.open('Guardfile', 'wb') do |f|
71
- f.puts(content)
72
- f.puts('')
73
- f.puts(template)
74
- end
75
-
76
- ::Guard::UI.info "#{ guard_name } template added to Guardfile, feel free to edit it"
77
- else
78
- const_name = guard_name.downcase.gsub('-', '')
79
- UI.error "Could not load 'guard/#{ guard_name.downcase }' or '~/.guard/templates/#{ guard_name.downcase }' or find class Guard::#{ const_name.capitalize }"
80
- end
81
- end
13
+ module Guardfile
14
+
15
+ # @deprecated Use {Guardfile::Generator#create_guardfile} instead.
16
+ #
17
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to upgrade for Guard 2.0
18
+ #
19
+ def self.create_guardfile(options = {})
20
+ ::Guard::UI.deprecation(::Guard::Deprecator::CREATE_GUARDFILE_DEPRECATION)
21
+ Generator.new(options).create_guardfile
22
+ end
82
23
 
83
- # Adds the templates of all installed Guard implementations
84
- # to an existing Guardfile.
85
- #
86
- # @see Guard::CLI.init
87
- #
88
- def initialize_all_templates
89
- ::Guard.guard_gem_names.each { |g| initialize_template(g) }
90
- end
24
+ # @deprecated Use {Guardfile::Generator#initialize_template} instead.
25
+ #
26
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to upgrade for Guard 2.0
27
+ #
28
+ def self.initialize_template(plugin_name)
29
+ ::Guard::UI.deprecation(::Guard::Deprecator::INITIALIZE_TEMPLATE_DEPRECATION)
30
+ Generator.new.initialize_template(plugin_name)
31
+ end
91
32
 
33
+ # @deprecated Use {Guardfile::Generator#initialize_all_templates} instead.
34
+ #
35
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to upgrade for Guard 2.0
36
+ #
37
+ def self.initialize_all_templates
38
+ ::Guard::UI.deprecation(::Guard::Deprecator::INITIALIZE_ALL_TEMPLATES_DEPRECATION)
39
+ Generator.new.initialize_all_templates
92
40
  end
41
+
93
42
  end
43
+
94
44
  end