sass-listen 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,51 @@
1
+ module Listen
2
+ # @private api
3
+ class Record
4
+ # Represents a directory entry (dir or file)
5
+ class Entry
6
+ # file: "/home/me/watched_dir", "app/models", "foo.rb"
7
+ # dir, "/home/me/watched_dir", "."
8
+ def initialize(root, relative, name = nil)
9
+ @root, @relative, @name = root, relative, name
10
+ end
11
+
12
+ attr_reader :root, :relative, :name
13
+
14
+ def children
15
+ child_relative = _join
16
+ (Dir.entries(sys_path) - %w(. ..)).map do |name|
17
+ Entry.new(@root, child_relative, name)
18
+ end
19
+ end
20
+
21
+ def meta
22
+ lstat = ::File.lstat(sys_path)
23
+ { mtime: lstat.mtime.to_f, mode: lstat.mode }
24
+ end
25
+
26
+ # record hash is e.g.
27
+ # if @record["/home/me/watched_dir"]["project/app/models"]["foo.rb"]
28
+ # if @record["/home/me/watched_dir"]["project/app"]["models"]
29
+ # record_dir_key is "project/app/models"
30
+ def record_dir_key
31
+ ::File.join(*[@relative, @name].compact)
32
+ end
33
+
34
+ def sys_path
35
+ # Use full path in case someone uses chdir
36
+ ::File.join(*[@root, @relative, @name].compact)
37
+ end
38
+
39
+ def real_path
40
+ @real_path ||= ::File.realpath(sys_path)
41
+ end
42
+
43
+ private
44
+
45
+ def _join
46
+ args = [@relative, @name].compact
47
+ args.empty? ? nil : ::File.join(*args)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,39 @@
1
+ require 'set'
2
+
3
+ module Listen
4
+ # @private api
5
+ class Record
6
+ class SymlinkDetector
7
+ WIKI = 'https://github.com/guard/listen/wiki/Duplicate-directory-errors'
8
+
9
+ SYMLINK_LOOP_ERROR = <<-EOS
10
+ ** ERROR: directory is already being watched! **
11
+
12
+ Directory: %s
13
+
14
+ is already being watched through: %s
15
+
16
+ MORE INFO: #{WIKI}
17
+ EOS
18
+
19
+ class Error < RuntimeError
20
+ end
21
+
22
+ def initialize
23
+ @real_dirs = Set.new
24
+ end
25
+
26
+ def verify_unwatched!(entry)
27
+ real_path = entry.real_path
28
+ @real_dirs.add?(real_path) || _fail(entry.sys_path, real_path)
29
+ end
30
+
31
+ private
32
+
33
+ def _fail(symlinked, real_path)
34
+ STDERR.puts format(SYMLINK_LOOP_ERROR, symlinked, real_path)
35
+ fail Error, 'Failed due to looped symlinks'
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,97 @@
1
+ module Listen
2
+ class Silencer
3
+ # The default list of directories that get ignored.
4
+ DEFAULT_IGNORED_DIRECTORIES = %r{^(?:
5
+ \.git
6
+ | \.svn
7
+ | \.hg
8
+ | \.rbx
9
+ | \.bundle
10
+ | bundle
11
+ | vendor/bundle
12
+ | log
13
+ | tmp
14
+ |vendor/ruby
15
+ )(/|$)}x
16
+
17
+ # The default list of files that get ignored.
18
+ DEFAULT_IGNORED_EXTENSIONS = /(?:
19
+ # Kate's tmp\/swp files
20
+ \..*\d+\.new
21
+ | \.kate-swp
22
+
23
+ # Gedit tmp files
24
+ | \.goutputstream-.{6}
25
+
26
+ # Intellij files
27
+ | ___jb_bak___
28
+ | ___jb_old___
29
+
30
+ # Vim swap files and write test
31
+ | \.sw[px]
32
+ | \.swpx
33
+ | ^4913
34
+
35
+ # Sed temporary files - but without actual words, like 'sedatives'
36
+ | (?:^
37
+ sed
38
+
39
+ (?:
40
+ [a-zA-Z0-9]{0}[A-Z]{1}[a-zA-Z0-9]{5} |
41
+ [a-zA-Z0-9]{1}[A-Z]{1}[a-zA-Z0-9]{4} |
42
+ [a-zA-Z0-9]{2}[A-Z]{1}[a-zA-Z0-9]{3} |
43
+ [a-zA-Z0-9]{3}[A-Z]{1}[a-zA-Z0-9]{2} |
44
+ [a-zA-Z0-9]{4}[A-Z]{1}[a-zA-Z0-9]{1} |
45
+ [a-zA-Z0-9]{5}[A-Z]{1}[a-zA-Z0-9]{0}
46
+ )
47
+ )
48
+
49
+ # other files
50
+ | \.DS_Store
51
+ | \.tmp
52
+ | ~
53
+ )$/x
54
+
55
+ attr_accessor :only_patterns, :ignore_patterns
56
+
57
+ def initialize
58
+ configure({})
59
+ end
60
+
61
+ def configure(options)
62
+ @only_patterns = options[:only] ? Array(options[:only]) : nil
63
+ @ignore_patterns = _init_ignores(options[:ignore], options[:ignore!])
64
+ end
65
+
66
+ # Note: relative_path is temporarily expected to be a relative Pathname to
67
+ # make refactoring easier (ideally, it would take a string)
68
+
69
+ # TODO: switch type and path places - and verify
70
+ def silenced?(relative_path, type)
71
+ path = relative_path.to_s
72
+
73
+ if only_patterns && type == :file
74
+ return true unless only_patterns.any? { |pattern| path =~ pattern }
75
+ end
76
+
77
+ ignore_patterns.any? { |pattern| path =~ pattern }
78
+ end
79
+
80
+ private
81
+
82
+ attr_reader :options
83
+
84
+ def _init_ignores(ignores, overrides)
85
+ patterns = []
86
+ unless overrides
87
+ patterns << DEFAULT_IGNORED_DIRECTORIES
88
+ patterns << DEFAULT_IGNORED_EXTENSIONS
89
+ end
90
+
91
+ patterns << ignores
92
+ patterns << overrides
93
+
94
+ patterns.compact.flatten
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,48 @@
1
+ module Listen
2
+ class Silencer
3
+ class Controller
4
+ def initialize(silencer, default_options)
5
+ @silencer = silencer
6
+
7
+ opts = default_options
8
+
9
+ @prev_silencer_options = {}
10
+ rules = [:only, :ignore, :ignore!].map do |option|
11
+ [option, opts[option]] if opts.key? option
12
+ end
13
+
14
+ _reconfigure_silencer(Hash[rules.compact])
15
+ end
16
+
17
+ def append_ignores(*regexps)
18
+ prev_ignores = Array(@prev_silencer_options[:ignore])
19
+ _reconfigure_silencer(ignore: [prev_ignores + regexps])
20
+ end
21
+
22
+ def replace_with_bang_ignores(regexps)
23
+ _reconfigure_silencer(ignore!: regexps)
24
+ end
25
+
26
+ def replace_with_only(regexps)
27
+ _reconfigure_silencer(only: regexps)
28
+ end
29
+
30
+ private
31
+
32
+ def _reconfigure_silencer(extra_options)
33
+ opts = extra_options.dup
34
+ opts = opts.map do |key, value|
35
+ [key, Array(value).flatten.compact]
36
+ end
37
+ opts = Hash[opts]
38
+
39
+ if opts.key?(:ignore) && opts[:ignore].empty?
40
+ opts.delete(:ignore)
41
+ end
42
+
43
+ @prev_silencer_options = opts
44
+ @silencer.configure(@prev_silencer_options.dup.freeze)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,3 @@
1
+ module Listen
2
+ VERSION = '3.0.7'
3
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sass-listen
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.7
5
+ platform: ruby
6
+ authors:
7
+ - Thibaud Guillaume-Gentil
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rb-fsevent
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: rb-inotify
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.3.5
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.3.5
55
+ description: This fork of guard/listen provides a stable API for users of the ruby
56
+ Sass CLI
57
+ email: thibaud@thibaud.gg
58
+ executables:
59
+ - listen
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - CHANGELOG.md
64
+ - CONTRIBUTING.md
65
+ - LICENSE.txt
66
+ - README.md
67
+ - bin/listen
68
+ - lib/listen.rb
69
+ - lib/listen/adapter.rb
70
+ - lib/listen/adapter/base.rb
71
+ - lib/listen/adapter/bsd.rb
72
+ - lib/listen/adapter/config.rb
73
+ - lib/listen/adapter/darwin.rb
74
+ - lib/listen/adapter/linux.rb
75
+ - lib/listen/adapter/polling.rb
76
+ - lib/listen/adapter/windows.rb
77
+ - lib/listen/backend.rb
78
+ - lib/listen/change.rb
79
+ - lib/listen/cli.rb
80
+ - lib/listen/directory.rb
81
+ - lib/listen/event/config.rb
82
+ - lib/listen/event/loop.rb
83
+ - lib/listen/event/processor.rb
84
+ - lib/listen/event/queue.rb
85
+ - lib/listen/file.rb
86
+ - lib/listen/fsm.rb
87
+ - lib/listen/internals/thread_pool.rb
88
+ - lib/listen/listener.rb
89
+ - lib/listen/listener/config.rb
90
+ - lib/listen/logger.rb
91
+ - lib/listen/options.rb
92
+ - lib/listen/queue_optimizer.rb
93
+ - lib/listen/record.rb
94
+ - lib/listen/record/entry.rb
95
+ - lib/listen/record/symlink_detector.rb
96
+ - lib/listen/silencer.rb
97
+ - lib/listen/silencer/controller.rb
98
+ - lib/listen/version.rb
99
+ homepage: https://github.com/sass/listen
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 1.9.3
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.5.1
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Fork of guard/listen
123
+ test_files: []
124
+ has_rdoc: