guard 2.7.2 → 2.7.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a56573a032fe19caaec716bce14a5e8c31c861b
4
- data.tar.gz: bd96b08fbe6d1df7dc92147104de03a8fdf9fc66
3
+ metadata.gz: 7fe4d02f1b032eb80f48d28b9e2a96cedc706a8d
4
+ data.tar.gz: 8835c817d58724daa4838a98688300cbde8c6118
5
5
  SHA512:
6
- metadata.gz: 14b5197e11d01da9c1313fb06801df0533144f08cdfebd292d7f9c69db7b64ddc7deabfb638735f651d0f64a4c062de436e2c7bc2b301085e16d650fec570e6c
7
- data.tar.gz: 58cfe1bd2aa5e666cf42c0ee118f02d9d288706d5713ef122fb0ebc43a1f03f81434d9df3e23f2050175fe719f59db7aa63e992305425fcfcbe39b836fb14393
6
+ metadata.gz: 42b4e420d55c5344df40f26ca6005da64cce67014d4dc06cbb08db146231fcb56c28a2b2c8a89434c3921e83cf3e946c8dcf3c821281fc948b038c5feb2a962c
7
+ data.tar.gz: 793aa5c2052dd4d37778b6361ceddd42a1e50d8ad4cd7eac1b4434955dfc6d7afadc94cdf6f96a2e0895fd2f26b05e138ab05d25cacf83d36a664221b3469215
data/lib/guard.rb.orig ADDED
@@ -0,0 +1,213 @@
1
+ require "rbconfig"
2
+
3
+ require "guard/commander"
4
+ require "guard/deprecated_methods"
5
+ require "guard/deprecator"
6
+ require "guard/dsl"
7
+ require "guard/group"
8
+ require "guard/guardfile"
9
+ require "guard/interactor"
10
+ require "guard/notifier"
11
+ require "guard/plugin_util"
12
+ require "guard/runner"
13
+ require "guard/setuper"
14
+ require "guard/sheller"
15
+ require "guard/ui"
16
+ require "guard/watcher"
17
+ require "guard/reevaluator"
18
+
19
+ # Guard is the main module for all Guard related modules and classes.
20
+ # Also Guard plugins should use this namespace.
21
+ #
22
+ module Guard
23
+ DEV_NULL = Gem.win_platform? ? "NUL" : "/dev/null"
24
+
25
+ extend Commander
26
+ extend DeprecatedMethods
27
+ extend Setuper
28
+
29
+ class << self
30
+ # Called by Pry scope command
31
+
32
+ def scope=(new_scope)
33
+ @scope = new_scope
34
+ @scope.dup.freeze
35
+ end
36
+
37
+ def scope
38
+ <<<<<<< HEAD
39
+ fail "::Guard.setup() not called" if @scope.nil?
40
+ =======
41
+ >>>>>>> origin/api_safe_refactoring
42
+ @scope.dup.freeze
43
+ end
44
+ attr_reader :runner, :listener
45
+
46
+ # Smart accessor for retrieving specific plugins at once.
47
+ #
48
+ # @see Guard.plugin
49
+ # @see Guard.group
50
+ # @see Guard.groups
51
+ #
52
+ # @example Filter plugins by String or Symbol
53
+ # Guard.plugins('rspec')
54
+ # Guard.plugins(:rspec)
55
+ #
56
+ # @example Filter plugins by Regexp
57
+ # Guard.plugins(/rsp.+/)
58
+ #
59
+ # @example Filter plugins by Hash
60
+ # Guard.plugins(name: 'rspec', group: 'backend')
61
+ #
62
+ # @param [String, Symbol, Regexp, Hash] filter the filter to apply to the
63
+ # plugins
64
+ # @return [Plugin, Array<Plugin>] the filtered plugin(s)
65
+ #
66
+ def plugins(filter = nil)
67
+ @plugins ||= []
68
+
69
+ return @plugins if filter.nil?
70
+
71
+ filtered_plugins = case filter
72
+ when String, Symbol
73
+ @plugins.select do |plugin|
74
+ plugin.name == filter.to_s.downcase.gsub("-", "")
75
+ end
76
+ when Regexp
77
+ @plugins.select do |plugin|
78
+ plugin.name =~ filter
79
+ end
80
+ when Hash
81
+ @plugins.select do |plugin|
82
+ filter.all? do |k, v|
83
+ case k
84
+ when :name
85
+ plugin.name == v.to_s.downcase.gsub("-", "")
86
+ when :group
87
+ plugin.group.name == v.to_sym
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ filtered_plugins
94
+ end
95
+
96
+ # Smart accessor for retrieving a specific plugin.
97
+ #
98
+ # @see Guard.plugins
99
+ # @see Guard.group
100
+ # @see Guard.groups
101
+ #
102
+ # @example Find a plugin by String or Symbol
103
+ # Guard.plugin('rspec')
104
+ # Guard.plugin(:rspec)
105
+ #
106
+ # @example Find a plugin by Regexp
107
+ # Guard.plugin(/rsp.+/)
108
+ #
109
+ # @example Find a plugin by Hash
110
+ # Guard.plugin(name: 'rspec', group: 'backend')
111
+ #
112
+ # @param [String, Symbol, Regexp, Hash] filter the filter for finding the
113
+ # plugin the Guard plugin
114
+ # @return [Plugin, nil] the plugin found, nil otherwise
115
+ #
116
+ def plugin(filter)
117
+ plugins(filter).first
118
+ end
119
+
120
+ # Smart accessor for retrieving specific groups at once.
121
+ #
122
+ # @see Guard.plugin
123
+ # @see Guard.plugins
124
+ # @see Guard.group
125
+ #
126
+ # @example Filter groups by String or Symbol
127
+ # Guard.groups('backend')
128
+ # Guard.groups(:backend)
129
+ #
130
+ # @example Filter groups by Regexp
131
+ # Guard.groups(/(back|front)end/)
132
+ #
133
+ # @param [String, Symbol, Regexp] filter the filter to apply to the Groups
134
+ # @return [Array<Group>] the filtered group(s)
135
+ #
136
+ def groups(filter = nil)
137
+ @groups ||= []
138
+
139
+ return @groups if filter.nil?
140
+
141
+ case filter
142
+ when String, Symbol
143
+ @groups.select { |group| group.name == filter.to_sym }
144
+ when Regexp
145
+ @groups.select { |group| group.name.to_s =~ filter }
146
+ else
147
+ fail "Invalid filter: #{filter.inspect}"
148
+ end
149
+ end
150
+
151
+ # Smart accessor for retrieving a specific group.
152
+ #
153
+ # @see Guard.plugin
154
+ # @see Guard.plugins
155
+ # @see Guard.groups
156
+ #
157
+ # @example Find a group by String or Symbol
158
+ # Guard.group('backend')
159
+ # Guard.group(:backend)
160
+ #
161
+ # @example Find a group by Regexp
162
+ # Guard.group(/(back|front)end/)
163
+ #
164
+ # @param [String, Symbol, Regexp] filter the filter for finding the group
165
+ # @return [Group] the group found, nil otherwise
166
+ #
167
+ def group(filter)
168
+ groups(filter).first
169
+ end
170
+
171
+ # Add a Guard plugin to use.
172
+ #
173
+ # @param [String] name the Guard name
174
+ # @param [Hash] options the plugin options (see Plugin documentation)
175
+ # @option options [String] group the group to which the plugin belongs
176
+ # @option options [Array<Watcher>] watchers the list of declared watchers
177
+ # @option options [Array<Hash>] callbacks the list of callbacks
178
+ # @return [Plugin] the added Guard plugin
179
+ # @see Plugin
180
+ #
181
+ def add_plugin(name, options = {})
182
+ instance = ::Guard::PluginUtil.new(name).initialize_plugin(options)
183
+ @plugins << instance
184
+ instance
185
+ end
186
+
187
+ # Used by runner to remove a failed plugin
188
+ def remove_plugin(plugin)
189
+ # TODO: coverage/aruba
190
+ @plugins.delete(plugin)
191
+ end
192
+
193
+ # Add a Guard plugin group.
194
+ #
195
+ # @param [String] name the group name
196
+ # @option options [Boolean] halt_on_fail if a task execution
197
+ # should be halted for all Guard plugins in this group if
198
+ # one Guard throws `:task_has_failed`
199
+ # @return [Group] the group added (or retrieved from the `@groups`
200
+ # variable if already present)
201
+ #
202
+ # @see Group
203
+ #
204
+ def add_group(name, options = {})
205
+ unless (group = group(name))
206
+ group = ::Guard::Group.new(name, options)
207
+ @groups << group
208
+ end
209
+
210
+ group
211
+ end
212
+ end
213
+ end
data/lib/guard/cli.rb CHANGED
@@ -171,8 +171,15 @@ module Guard
171
171
  ::Guard.reset_options(options) # Since UI.deprecated uses config
172
172
  ::Guard.reset_evaluator(options) # for initialize_all_templates
173
173
 
174
+ # This is messed up (deprecated, etc) and will be fixed later
174
175
  ::Guard::Guardfile.create_guardfile(abort_on_existence: options[:bare])
175
176
 
177
+ # Note: this reset "hack" will be fixed after refactoring
178
+ ::Guard.reset_plugins
179
+
180
+ # Evaluate because it might have existed and creating was skipped
181
+ ::Guard.evaluator.evaluate_guardfile
182
+
176
183
  return if options[:bare]
177
184
 
178
185
  if plugin_names.empty?
@@ -0,0 +1,218 @@
1
+ require "thor"
2
+
3
+ require "guard"
4
+ require "guard/version"
5
+ require "guard/dsl_describer"
6
+ require "guard/guardfile"
7
+
8
+ module Guard
9
+ # Facade for the Guard command line interface managed by
10
+ # [Thor](https://github.com/wycats/thor).
11
+ #
12
+ # This is the main interface to Guard that is called by the Guard binary
13
+ # `bin/guard`. Do not put any logic in here, create a class and delegate
14
+ # instead.
15
+ #
16
+ class CLI < Thor
17
+ default_task :start
18
+
19
+ desc "start", "Starts Guard"
20
+
21
+ method_option :clear,
22
+ type: :boolean,
23
+ default: false,
24
+ aliases: "-c",
25
+ banner: "Auto clear shell before each action"
26
+
27
+ method_option :notify,
28
+ type: :boolean,
29
+ default: true,
30
+ aliases: "-n",
31
+ banner: "Notifications feature"
32
+
33
+ method_option :debug,
34
+ type: :boolean,
35
+ default: false,
36
+ aliases: "-d",
37
+ banner: "Show debug information"
38
+
39
+ method_option :group,
40
+ type: :array,
41
+ default: [],
42
+ aliases: "-g",
43
+ banner: "Run only the passed groups"
44
+
45
+ method_option :plugin,
46
+ type: :array,
47
+ default: [],
48
+ aliases: "-P",
49
+ banner: "Run only the passed plugins"
50
+
51
+ method_option :watchdir,
52
+ type: :array,
53
+ aliases: "-w",
54
+ banner: "Specify the directories to watch"
55
+
56
+ method_option :guardfile,
57
+ type: :string,
58
+ aliases: "-G",
59
+ banner: "Specify a Guardfile"
60
+
61
+ method_option :no_interactions,
62
+ type: :boolean,
63
+ default: false,
64
+ aliases: "-i",
65
+ banner: "Turn off completely any Guard terminal interactions"
66
+
67
+ method_option :no_bundler_warning,
68
+ type: :boolean,
69
+ default: false,
70
+ aliases: "-B",
71
+ banner: "Turn off warning when Bundler is not present"
72
+
73
+ method_option :show_deprecations,
74
+ type: :boolean,
75
+ default: false,
76
+ banner: "Turn on deprecation warnings"
77
+
78
+ # Listen options
79
+ method_option :latency,
80
+ type: :numeric,
81
+ aliases: "-l",
82
+ banner: 'Overwrite Listen\'s default latency'
83
+
84
+ method_option :force_polling,
85
+ type: :boolean,
86
+ default: false,
87
+ aliases: "-p",
88
+ banner: "Force usage of the Listen polling listener"
89
+
90
+ method_option :wait_for_delay,
91
+ type: :numeric,
92
+ aliases: "-y",
93
+ banner: 'Overwrite Listen\'s default wait_for_delay'
94
+
95
+ method_option :listen_on,
96
+ type: :string,
97
+ aliases: "-o",
98
+ default: false,
99
+ banner: "Specify a network address to Listen on for "\
100
+ "file change events (e.g. for use in VMs)"
101
+
102
+ # Start Guard by initializing the defined Guard plugins and watch the file
103
+ # system.
104
+ #
105
+ # This is the default task, so calling `guard` is the same as calling
106
+ # `guard start`.
107
+ #
108
+ # @see Guard.start
109
+ #
110
+ def start
111
+ _verify_bundler_presence unless options[:no_bundler_warning]
112
+ ::Guard.start(options)
113
+ end
114
+
115
+ desc "list", "Lists Guard plugins that can be used with init"
116
+
117
+ # List the Guard plugins that are available for use in your system and
118
+ # marks those that are currently used in your `Guardfile`.
119
+ #
120
+ # @see Guard::DslDescriber.list
121
+ #
122
+ def list
123
+ ::Guard::DslDescriber.new(options).list
124
+ end
125
+
126
+ desc "notifiers", "Lists notifiers and its options"
127
+
128
+ # List the Notifiers for use in your system.
129
+ #
130
+ # @see Guard::DslDescriber.notifiers
131
+ #
132
+ def notifiers
133
+ ::Guard::DslDescriber.new(options).notifiers
134
+ end
135
+
136
+ desc "version", "Show the Guard version"
137
+ map %w(-v --version) => :version
138
+
139
+ # Shows the current version of Guard.
140
+ #
141
+ # @see Guard::VERSION
142
+ #
143
+ def version
144
+ $stdout.puts "Guard version #{ ::Guard::VERSION }"
145
+ end
146
+
147
+ desc "init [GUARDS]", "Generates a Guardfile at the current directory"\
148
+ " (if it is not already there) and adds all installed Guard plugins"\
149
+ " or the given GUARDS into it"
150
+
151
+ method_option :bare,
152
+ type: :boolean,
153
+ default: false,
154
+ aliases: "-b",
155
+ banner: "Generate a bare Guardfile without adding any"\
156
+ " installed plugin into it"
157
+
158
+ # Initializes the templates of all installed Guard plugins and adds them
159
+ # to the `Guardfile` when no Guard name is passed. When passing
160
+ # Guard plugin names it does the same but only for those Guard plugins.
161
+ #
162
+ # @see Guard::Guardfile.initialize_template
163
+ # @see Guard::Guardfile.initialize_all_templates
164
+ #
165
+ # @param [Array<String>] plugin_names the name of the Guard plugins to
166
+ # initialize
167
+ #
168
+ def init(*plugin_names)
169
+ _verify_bundler_presence unless options[:no_bundler_warning]
170
+
171
+ ::Guard.reset_options(options) # Since UI.deprecated uses config
172
+ ::Guard.reset_evaluator(options) # for initialize_all_templates
173
+
174
+ ::Guard::Guardfile.create_guardfile(abort_on_existence: options[:bare])
175
+
176
+ return if options[:bare]
177
+
178
+ if plugin_names.empty?
179
+ ::Guard::Guardfile.initialize_all_templates
180
+ else
181
+ plugin_names.each do |plugin_name|
182
+ ::Guard::Guardfile.initialize_template(plugin_name)
183
+ end
184
+ end
185
+ end
186
+
187
+ desc "show", "Show all defined Guard plugins and their options"
188
+ map %w(-T) => :show
189
+
190
+ # Shows all Guard plugins and their options that are defined in
191
+ # the `Guardfile`
192
+ #
193
+ # @see Guard::DslDescriber.show
194
+ #
195
+ def show
196
+ ::Guard::DslDescriber.new(options).show
197
+ end
198
+
199
+ private
200
+
201
+ # Verifies if Guard is run with `bundle exec` and
202
+ # shows a hint to do so if not.
203
+ #
204
+ def _verify_bundler_presence
205
+ return unless File.exist?("Gemfile")
206
+ return if ENV["BUNDLE_GEMFILE"] || ENV["RUBYGEMS_GEMDEPS"]
207
+
208
+ ::Guard::UI.info <<EOF
209
+
210
+ Guard here! It looks like your project has a Gemfile, yet you are running
211
+ `guard` outside of Bundler. If this is your intent, feel free to ignore this
212
+ message. Otherwise, consider using `bundle exec guard` to ensure your
213
+ dependencies are loaded correctly.
214
+ (You can run `guard` with --no-bundler-warning to get rid of this message.)
215
+ EOF
216
+ end
217
+ end
218
+ end