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.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -0
  3. data/CONTRIBUTING.md +38 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +293 -0
  6. data/bin/driskell-listen +12 -0
  7. data/lib/driskell-listen.rb +61 -0
  8. data/lib/driskell-listen/adapter.rb +44 -0
  9. data/lib/driskell-listen/adapter/base.rb +147 -0
  10. data/lib/driskell-listen/adapter/bsd.rb +106 -0
  11. data/lib/driskell-listen/adapter/config.rb +26 -0
  12. data/lib/driskell-listen/adapter/darwin.rb +71 -0
  13. data/lib/driskell-listen/adapter/linux.rb +96 -0
  14. data/lib/driskell-listen/adapter/polling.rb +37 -0
  15. data/lib/driskell-listen/adapter/simulated_darwin.rb +65 -0
  16. data/lib/driskell-listen/adapter/windows.rb +99 -0
  17. data/lib/driskell-listen/backend.rb +45 -0
  18. data/lib/driskell-listen/change.rb +80 -0
  19. data/lib/driskell-listen/cli.rb +65 -0
  20. data/lib/driskell-listen/directory.rb +83 -0
  21. data/lib/driskell-listen/event/config.rb +59 -0
  22. data/lib/driskell-listen/event/loop.rb +117 -0
  23. data/lib/driskell-listen/event/processor.rb +122 -0
  24. data/lib/driskell-listen/event/queue.rb +56 -0
  25. data/lib/driskell-listen/file.rb +80 -0
  26. data/lib/driskell-listen/fsm.rb +131 -0
  27. data/lib/driskell-listen/internals/thread_pool.rb +21 -0
  28. data/lib/driskell-listen/listener.rb +132 -0
  29. data/lib/driskell-listen/listener/config.rb +45 -0
  30. data/lib/driskell-listen/logger.rb +32 -0
  31. data/lib/driskell-listen/options.rb +23 -0
  32. data/lib/driskell-listen/queue_optimizer.rb +132 -0
  33. data/lib/driskell-listen/record.rb +104 -0
  34. data/lib/driskell-listen/record/entry.rb +56 -0
  35. data/lib/driskell-listen/silencer.rb +97 -0
  36. data/lib/driskell-listen/silencer/controller.rb +48 -0
  37. data/lib/driskell-listen/version.rb +5 -0
  38. 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
@@ -0,0 +1,5 @@
1
+ module Driskell
2
+ module Listen
3
+ VERSION = '3.0.6.10'
4
+ end
5
+ 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: