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]
KATE_TEMP_FILES =

The default list of files that get ignored.

/\..*[a-z]\d+\.new/
DEFAULT_IGNORED_EXTENSIONS =
%w(.DS_Store .tmp ~) + [KATE_TEMP_FILES]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(listener) ⇒ Silencer

Returns a new instance of Silencer.



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

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

Instance Attribute Details

#ignore_patternsObject

Returns the value of attribute ignore_patterns.



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

def ignore_patterns
  @ignore_patterns
end

#listenerObject

Returns the value of attribute listener.



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

def listener
  @listener
end

#only_patternsObject

Returns the value of attribute only_patterns.



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

def only_patterns
  @only_patterns
end

Instance Method Details

#_default_ignore_patternsObject (private)



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

def _default_ignore_patterns
  [_default_ignored_directories_patterns, _default_ignored_extensions_patterns]
end

#_default_ignored_directories_patternsObject (private)



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

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)



55
56
57
58
59
60
61
# File 'lib/listen/silencer.rb', line 55

def _default_ignored_extensions_patterns
  ignored_extensions = DEFAULT_IGNORED_EXTENSIONS.map do
    |e| e.is_a?(Regexp) ? e : Regexp.escape(e)
  end

  %r{(?:#{ignored_extensions.join('|')})$}
end

#_init_ignore_patternsObject (private)



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

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)



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

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

#_relative_path(path) ⇒ Object (private)



63
64
65
66
# File 'lib/listen/silencer.rb', line 63

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)


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

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