Class: Guard::Watcher
- Inherits:
-
Object
- Object
- Guard::Watcher
- Defined in:
- lib/guard/watcher.rb
Overview
The watcher defines a RegExp that will be matched against file system modifications. When a watcher matches a change, an optional action block is executed to enable processing the file system change result.
Instance Attribute Summary (collapse)
-
- (Object) action
Returns the value of attribute action.
-
- (Object) pattern
Returns the value of attribute pattern.
Class Method Summary (collapse)
-
+ (Array<Object>) match_files(guard, files)
Finds the files that matches a Guard.
-
+ (Boolean) match_files?(guards, files)
Test if a file would be matched by any of the Guards watchers.
-
+ (Boolean) match_guardfile?(files)
Test if any of the files is the Guardfile.
Instance Method Summary (collapse)
-
- (String) call_action(matches)
Executes a watcher action.
-
- (Watcher) initialize(pattern, action = nil)
constructor
Initialize a file watcher.
-
- (Array<String>) match(file)
Test the watchers pattern against a file.
-
- (Boolean) match_file?(file)
deprecated
Deprecated.
Use .match instead
Constructor Details
- (Watcher) initialize(pattern, action = nil)
Initialize a file watcher.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/guard/watcher.rb', line 16 def initialize(pattern, action = nil) @pattern, @action = pattern, action @@warning_printed ||= false # deprecation warning if @pattern.is_a?(String) && @pattern =~ /(^(\^))|(>?(\\\.)|(\.\*))|(\(.*\))|(\[.*\])|(\$$)/ unless @@warning_printed UI.info "*"*20 + "\nDEPRECATION WARNING!\n" + "*"*20 UI.info <<-MSG You have a string in your Guardfile watch patterns that seem to represent a Regexp. Guard matches String with == and Regexp with Regexp#match. You should either use plain String (without Regexp special characters) or real Regexp. MSG @@warning_printed = true end UI.info "\"#{@pattern}\" has been converted to #{ Regexp.new(@pattern).inspect }\n" @pattern = Regexp.new(@pattern) end end |
Instance Attribute Details
- (Object) action
Returns the value of attribute action
9 10 11 |
# File 'lib/guard/watcher.rb', line 9 def action @action end |
- (Object) pattern
Returns the value of attribute pattern
9 10 11 |
# File 'lib/guard/watcher.rb', line 9 def pattern @pattern end |
Class Method Details
+ (Array<Object>) match_files(guard, files)
Finds the files that matches a Guard.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/guard/watcher.rb', line 43 def self.match_files(guard, files) guard.watchers.inject([]) do |paths, watcher| files.each do |file| if matches = watcher.match(file) if watcher.action result = watcher.call_action(matches) if guard.[:any_return] paths << result elsif result.respond_to?(:empty?) && !result.empty? paths << Array(result) end else paths << matches[0] end end end guard.[:any_return] ? paths : paths.flatten.map { |p| p.to_s } end end |
+ (Boolean) match_files?(guards, files)
Test if a file would be matched by any of the Guards watchers.
70 71 72 73 74 75 76 |
# File 'lib/guard/watcher.rb', line 70 def self.match_files?(guards, files) guards.any? do |guard| guard.watchers.any? do |watcher| files.any? { |file| watcher.match(file) } end end end |
+ (Boolean) match_guardfile?(files)
Test if any of the files is the Guardfile.
110 111 112 |
# File 'lib/guard/watcher.rb', line 110 def self.match_guardfile?(files) files.any? { |file| "#{ Dir.pwd }/#{ file }" == Dsl.guardfile_path } end |
Instance Method Details
- (String) call_action(matches)
Executes a watcher action.
119 120 121 122 123 124 125 |
# File 'lib/guard/watcher.rb', line 119 def call_action(matches) begin @action.arity > 0 ? @action.call(matches) : @action.call rescue Exception => e UI.error "Problem with watch action!\n#{ e. }\n\n#{ e.backtrace.join("\n") }" end end |
- (Array<String>) match(file)
Test the watchers pattern against a file.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/guard/watcher.rb', line 90 def match(file) f = file deleted = file.start_with?('!') f = deleted ? f[1..-1] : f if @pattern.is_a?(Regexp) if m = f.match(@pattern) m = m.to_a m[0] = file m end else f == @pattern ? [file] : nil end end |
- (Boolean) match_file?(file)
Use .match instead
80 81 82 83 |
# File 'lib/guard/watcher.rb', line 80 def match_file?(file) UI.info "Guard::Watcher.match_file? is deprecated, please use Guard::Watcher.match instead." match(file) end |