Class: Listen::Silencer

Inherits:
Object
  • Object
show all
Includes:
Celluloid
Defined in:
lib/listen/silencer.rb

Constant Summary collapse

DEFAULT_IGNORED_DIRECTORIES =

The default list of directories that get ignored.

%w[.bundle .git .hg .rbx .svn bundle log tmp vendor/ruby vendor/bundle]
DEFAULT_IGNORED_EXTENSIONS =

The default list of files that get ignored.

%w[.DS_Store .tmp]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(listener) ⇒ Silencer

Returns a new instance of Silencer.



13
14
15
16
17
# File 'lib/listen/silencer.rb', line 13

def initialize(listener)
  @listener = listener
  _init_only_patterns
  _init_ignore_patterns
end

Instance Attribute Details

#ignore_patternsObject

Returns the value of attribute ignore_patterns.



11
12
13
# File 'lib/listen/silencer.rb', line 11

def ignore_patterns
  @ignore_patterns
end

#listenerObject

Returns the value of attribute listener.



11
12
13
# File 'lib/listen/silencer.rb', line 11

def listener
  @listener
end

#only_patternsObject

Returns the value of attribute only_patterns.



11
12
13
# File 'lib/listen/silencer.rb', line 11

def only_patterns
  @only_patterns
end

Instance Method Details

#_default_ignore_patternsObject (private)



45
46
47
# File 'lib/listen/silencer.rb', line 45

def _default_ignore_patterns
  [_default_ignored_directories_patterns, _default_ignored_extensions_patterns]
end

#_default_ignored_directories_patternsObject (private)



49
50
51
52
# File 'lib/listen/silencer.rb', line 49

def _default_ignored_directories_patterns
  ignored_directories = DEFAULT_IGNORED_DIRECTORIES.map { |d| Regexp.escape(d) }
  %r{^(?:#{ignored_directories.join('|')})(/|$)}
end

#_default_ignored_extensions_patternsObject (private)



54
55
56
57
# File 'lib/listen/silencer.rb', line 54

def _default_ignored_extensions_patterns
  ignored_extensions = DEFAULT_IGNORED_EXTENSIONS.map { |e| Regexp.escape(e) }
  %r{(?:#{ignored_extensions.join('|')})$}
end

#_init_ignore_patternsObject (private)



37
38
39
40
41
42
43
# File 'lib/listen/silencer.rb', line 37

def _init_ignore_patterns
  @ignore_patterns = []
  @ignore_patterns << _default_ignore_patterns unless listener.options[:ignore!]
  @ignore_patterns << listener.options[:ignore] << listener.options[:ignore!]
  @ignore_patterns.compact!
  @ignore_patterns.flatten!
end

#_init_only_patternsObject (private)



31
32
33
34
35
# File 'lib/listen/silencer.rb', line 31

def _init_only_patterns
  if listener.options[:only]
    @only_patterns = Array(listener.options[:only])
  end
end

#_relative_path(path) ⇒ Object (private)



59
60
61
62
# File 'lib/listen/silencer.rb', line 59

def _relative_path(path)
  relative_paths = listener.directories.map { |dir| path.relative_path_from(dir).to_s }
  relative_paths.detect { |path| !path.start_with?('../') }
end

#silenced?(path, type = 'Unknown') ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
22
23
24
25
26
27
# File 'lib/listen/silencer.rb', line 19

def silenced?(path, type = 'Unknown')
  silenced = false

  if only_patterns && type == 'File'
    silenced = !only_patterns.any? { |pattern| _relative_path(path) =~ pattern }
  end

  silenced ||= ignore_patterns.any? { |pattern| _relative_path(path) =~ pattern }
end