driskell-listen 3.0.6.10
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1 -0
- data/CONTRIBUTING.md +38 -0
- data/LICENSE.txt +22 -0
- data/README.md +293 -0
- data/bin/driskell-listen +12 -0
- data/lib/driskell-listen.rb +61 -0
- data/lib/driskell-listen/adapter.rb +44 -0
- data/lib/driskell-listen/adapter/base.rb +147 -0
- data/lib/driskell-listen/adapter/bsd.rb +106 -0
- data/lib/driskell-listen/adapter/config.rb +26 -0
- data/lib/driskell-listen/adapter/darwin.rb +71 -0
- data/lib/driskell-listen/adapter/linux.rb +96 -0
- data/lib/driskell-listen/adapter/polling.rb +37 -0
- data/lib/driskell-listen/adapter/simulated_darwin.rb +65 -0
- data/lib/driskell-listen/adapter/windows.rb +99 -0
- data/lib/driskell-listen/backend.rb +45 -0
- data/lib/driskell-listen/change.rb +80 -0
- data/lib/driskell-listen/cli.rb +65 -0
- data/lib/driskell-listen/directory.rb +83 -0
- data/lib/driskell-listen/event/config.rb +59 -0
- data/lib/driskell-listen/event/loop.rb +117 -0
- data/lib/driskell-listen/event/processor.rb +122 -0
- data/lib/driskell-listen/event/queue.rb +56 -0
- data/lib/driskell-listen/file.rb +80 -0
- data/lib/driskell-listen/fsm.rb +131 -0
- data/lib/driskell-listen/internals/thread_pool.rb +21 -0
- data/lib/driskell-listen/listener.rb +132 -0
- data/lib/driskell-listen/listener/config.rb +45 -0
- data/lib/driskell-listen/logger.rb +32 -0
- data/lib/driskell-listen/options.rb +23 -0
- data/lib/driskell-listen/queue_optimizer.rb +132 -0
- data/lib/driskell-listen/record.rb +104 -0
- data/lib/driskell-listen/record/entry.rb +56 -0
- data/lib/driskell-listen/silencer.rb +97 -0
- data/lib/driskell-listen/silencer/controller.rb +48 -0
- data/lib/driskell-listen/version.rb +5 -0
- metadata +126 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
module Driskell::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, :name
|
13
|
+
|
14
|
+
def relative
|
15
|
+
return '.' if @relative.nil?
|
16
|
+
@relative
|
17
|
+
end
|
18
|
+
|
19
|
+
def children
|
20
|
+
child_relative = _join
|
21
|
+
(Dir.entries(sys_path) - %w(. ..)).map do |name|
|
22
|
+
Entry.new(@root, child_relative, name)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def meta
|
27
|
+
lstat = ::File.lstat(sys_path)
|
28
|
+
{ mtime: lstat.mtime.to_f, mode: lstat.mode }
|
29
|
+
end
|
30
|
+
|
31
|
+
# record hash is e.g.
|
32
|
+
# if @record["/home/me/watched_dir"]["project/app/models"]["foo.rb"]
|
33
|
+
# if @record["/home/me/watched_dir"]["project/app"]["models"]
|
34
|
+
# record_dir_key is "project/app/models"
|
35
|
+
def record_dir_key
|
36
|
+
::File.join(*[@relative, @name].compact)
|
37
|
+
end
|
38
|
+
|
39
|
+
def sys_path
|
40
|
+
# Use full path in case someone uses chdir
|
41
|
+
::File.join(*[@root, @relative, @name].compact)
|
42
|
+
end
|
43
|
+
|
44
|
+
def real_path
|
45
|
+
@real_path ||= ::File.realpath(sys_path)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def _join
|
51
|
+
args = [@relative, @name].compact
|
52
|
+
args.empty? ? nil : ::File.join(*args)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Driskell::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 Driskell::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
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: driskell-listen
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.6.10
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thibaud Guillaume-Gentil (With modifications by Jason Woods)
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-22 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: The Listen gem listens to file modifications and notifies you about the
|
56
|
+
changes. Works everywhere!This version contains modifications by Jason Woods to
|
57
|
+
workeven better on OS X. Mostly an alpha test as tests need updating!Further contributions
|
58
|
+
to help get this stable for merge will be welcome!
|
59
|
+
email: devel@jasonwoods.me.uk
|
60
|
+
executables:
|
61
|
+
- driskell-listen
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- CHANGELOG.md
|
66
|
+
- CONTRIBUTING.md
|
67
|
+
- LICENSE.txt
|
68
|
+
- README.md
|
69
|
+
- bin/driskell-listen
|
70
|
+
- lib/driskell-listen.rb
|
71
|
+
- lib/driskell-listen/adapter.rb
|
72
|
+
- lib/driskell-listen/adapter/base.rb
|
73
|
+
- lib/driskell-listen/adapter/bsd.rb
|
74
|
+
- lib/driskell-listen/adapter/config.rb
|
75
|
+
- lib/driskell-listen/adapter/darwin.rb
|
76
|
+
- lib/driskell-listen/adapter/linux.rb
|
77
|
+
- lib/driskell-listen/adapter/polling.rb
|
78
|
+
- lib/driskell-listen/adapter/simulated_darwin.rb
|
79
|
+
- lib/driskell-listen/adapter/windows.rb
|
80
|
+
- lib/driskell-listen/backend.rb
|
81
|
+
- lib/driskell-listen/change.rb
|
82
|
+
- lib/driskell-listen/cli.rb
|
83
|
+
- lib/driskell-listen/directory.rb
|
84
|
+
- lib/driskell-listen/event/config.rb
|
85
|
+
- lib/driskell-listen/event/loop.rb
|
86
|
+
- lib/driskell-listen/event/processor.rb
|
87
|
+
- lib/driskell-listen/event/queue.rb
|
88
|
+
- lib/driskell-listen/file.rb
|
89
|
+
- lib/driskell-listen/fsm.rb
|
90
|
+
- lib/driskell-listen/internals/thread_pool.rb
|
91
|
+
- lib/driskell-listen/listener.rb
|
92
|
+
- lib/driskell-listen/listener/config.rb
|
93
|
+
- lib/driskell-listen/logger.rb
|
94
|
+
- lib/driskell-listen/options.rb
|
95
|
+
- lib/driskell-listen/queue_optimizer.rb
|
96
|
+
- lib/driskell-listen/record.rb
|
97
|
+
- lib/driskell-listen/record/entry.rb
|
98
|
+
- lib/driskell-listen/silencer.rb
|
99
|
+
- lib/driskell-listen/silencer/controller.rb
|
100
|
+
- lib/driskell-listen/version.rb
|
101
|
+
homepage: https://github.com/driskell/listen
|
102
|
+
licenses:
|
103
|
+
- MIT
|
104
|
+
metadata: {}
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: 1.9.3
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 2.4.2
|
122
|
+
signing_key:
|
123
|
+
specification_version: 4
|
124
|
+
summary: Listen to file modifications (OS X improved)
|
125
|
+
test_files: []
|
126
|
+
has_rdoc:
|