guard 0.7.0.rc1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,47 +1,47 @@
1
- module Guard
2
- class Darwin < Listener
3
-
4
- def initialize(*)
5
- super
6
- @fsevent = FSEvent.new
7
- end
8
-
9
- def worker
10
- @fsevent
11
- end
12
-
13
- def start
14
- super
15
- worker.run
16
- end
17
-
18
- def stop
19
- super
20
- worker.stop
21
- end
22
-
23
- def self.usable?
24
- require 'rb-fsevent'
25
- if !defined?(FSEvent::VERSION) || (defined?(Gem::Version) &&
26
- Gem::Version.new(FSEvent::VERSION) < Gem::Version.new('0.4.0'))
27
- UI.info "Please update rb-fsevent (>= 0.4.0)"
28
- false
29
- else
30
- true
31
- end
32
- rescue LoadError
33
- UI.info "Please install rb-fsevent gem for Mac OSX FSEvents support"
34
- false
35
- end
36
-
37
- private
38
-
39
- def watch(directory)
40
- worker.watch(directory) do |modified_dirs|
41
- files = modified_files(modified_dirs)
42
- @callback.call(files) unless files.empty?
43
- end
44
- end
45
-
46
- end
47
- end
1
+ module Guard
2
+ class Darwin < Listener
3
+
4
+ def initialize(*)
5
+ super
6
+ @fsevent = FSEvent.new
7
+ end
8
+
9
+ def worker
10
+ @fsevent
11
+ end
12
+
13
+ def start
14
+ super
15
+ worker.run
16
+ end
17
+
18
+ def stop
19
+ super
20
+ worker.stop
21
+ end
22
+
23
+ def self.usable?
24
+ require 'rb-fsevent'
25
+ if !defined?(FSEvent::VERSION) || (defined?(Gem::Version) &&
26
+ Gem::Version.new(FSEvent::VERSION) < Gem::Version.new('0.4.0'))
27
+ UI.info "Please update rb-fsevent (>= 0.4.0)"
28
+ false
29
+ else
30
+ true
31
+ end
32
+ rescue LoadError
33
+ UI.info "Please install rb-fsevent gem for Mac OSX FSEvents support"
34
+ false
35
+ end
36
+
37
+ private
38
+
39
+ def watch(directory)
40
+ worker.watch(directory) do |modified_dirs|
41
+ files = modified_files(modified_dirs)
42
+ @callback.call(files) unless files.empty?
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -1,74 +1,74 @@
1
- module Guard
2
- class Linux < Listener
3
-
4
- def initialize(*)
5
- super
6
- @inotify = INotify::Notifier.new
7
- @files = []
8
- @latency = 0.5
9
- end
10
-
11
- def start
12
- @stop = false
13
- super
14
- watch_change unless watch_change?
15
- end
16
-
17
- def stop
18
- super
19
- @stop = true
20
- sleep(@latency)
21
- end
22
-
23
- def self.usable?
24
- require 'rb-inotify'
25
- if !defined?(INotify::VERSION) || (defined?(Gem::Version) &&
26
- Gem::Version.new(INotify::VERSION.join('.')) < Gem::Version.new('0.8.5'))
27
- UI.info "Please update rb-inotify (>= 0.8.5)"
28
- false
29
- else
30
- true
31
- end
32
- rescue LoadError
33
- UI.info "Please install rb-inotify gem for Linux inotify support"
34
- false
35
- end
36
-
37
- def watch_change?
38
- !!@watch_change
39
- end
40
-
41
- private
42
-
43
- def worker
44
- @inotify
45
- end
46
-
47
- def watch(directory)
48
- # The event selection is based on https://github.com/guard/guard/wiki/Analysis-of-inotify-events-for-different-editors
49
- worker.watch(directory, :recursive, :attrib, :create, :move_self, :close_write) do |event|
50
- unless event.name == "" # Event on root directory
51
- @files << event.absolute_name
52
- end
53
- end
54
- rescue Interrupt
55
- end
56
-
57
- def watch_change
58
- @watch_change = true
59
- until @stop
60
- if RbConfig::CONFIG['build'] =~ /java/ || IO.select([worker.to_io], [], [], @latency)
61
- break if @stop
62
-
63
- sleep(@latency)
64
- worker.process
65
-
66
- files = modified_files(@files.shift(@files.size).map { |f| File.dirname(f) }.uniq)
67
- @callback.call(files) unless files.empty?
68
- end
69
- end
70
- @watch_change = false
71
- end
72
-
73
- end
74
- end
1
+ module Guard
2
+ class Linux < Listener
3
+
4
+ def initialize(*)
5
+ super
6
+ @inotify = INotify::Notifier.new
7
+ @files = []
8
+ @latency = 0.5
9
+ end
10
+
11
+ def start
12
+ @stop = false
13
+ super
14
+ watch_change unless watch_change?
15
+ end
16
+
17
+ def stop
18
+ super
19
+ @stop = true
20
+ sleep(@latency)
21
+ end
22
+
23
+ def self.usable?
24
+ require 'rb-inotify'
25
+ if !defined?(INotify::VERSION) || (defined?(Gem::Version) &&
26
+ Gem::Version.new(INotify::VERSION.join('.')) < Gem::Version.new('0.8.5'))
27
+ UI.info "Please update rb-inotify (>= 0.8.5)"
28
+ false
29
+ else
30
+ true
31
+ end
32
+ rescue LoadError
33
+ UI.info "Please install rb-inotify gem for Linux inotify support"
34
+ false
35
+ end
36
+
37
+ def watch_change?
38
+ !!@watch_change
39
+ end
40
+
41
+ private
42
+
43
+ def worker
44
+ @inotify
45
+ end
46
+
47
+ def watch(directory)
48
+ # The event selection is based on https://github.com/guard/guard/wiki/Analysis-of-inotify-events-for-different-editors
49
+ worker.watch(directory, :recursive, :attrib, :create, :move_self, :close_write) do |event|
50
+ unless event.name == "" # Event on root directory
51
+ @files << event.absolute_name
52
+ end
53
+ end
54
+ rescue Interrupt
55
+ end
56
+
57
+ def watch_change
58
+ @watch_change = true
59
+ until @stop
60
+ if RbConfig::CONFIG['build'] =~ /java/ || IO.select([worker.to_io], [], [], @latency)
61
+ break if @stop
62
+
63
+ sleep(@latency)
64
+ worker.process
65
+
66
+ files = modified_files(@files.shift(@files.size).map { |f| File.dirname(f) }.uniq)
67
+ @callback.call(files) unless files.empty?
68
+ end
69
+ end
70
+ @watch_change = false
71
+ end
72
+
73
+ end
74
+ end
@@ -1,37 +1,37 @@
1
- module Guard
2
- class Polling < Listener
3
-
4
- def initialize(*)
5
- super
6
- @latency = 1.5
7
- end
8
-
9
- def start
10
- @stop = false
11
- super
12
- watch_change
13
- end
14
-
15
- def stop
16
- super
17
- @stop = true
18
- end
19
-
20
- private
21
-
22
- def watch_change
23
- until @stop
24
- start = Time.now.to_f
25
- files = modified_files([@directory], :all => true)
26
- @callback.call(files) unless files.empty?
27
- nap_time = @latency - (Time.now.to_f - start)
28
- sleep(nap_time) if nap_time > 0
29
- end
30
- end
31
-
32
- def watch(directory)
33
- @existing = all_files
34
- end
35
-
36
- end
37
- end
1
+ module Guard
2
+ class Polling < Listener
3
+
4
+ def initialize(*)
5
+ super
6
+ @latency = 1.5
7
+ end
8
+
9
+ def start
10
+ @stop = false
11
+ super
12
+ watch_change
13
+ end
14
+
15
+ def stop
16
+ super
17
+ @stop = true
18
+ end
19
+
20
+ private
21
+
22
+ def watch_change
23
+ until @stop
24
+ start = Time.now.to_f
25
+ files = modified_files([@directory], :all => true)
26
+ @callback.call(files) unless files.empty?
27
+ nap_time = @latency - (Time.now.to_f - start)
28
+ sleep(nap_time) if nap_time > 0
29
+ end
30
+ end
31
+
32
+ def watch(directory)
33
+ @existing = all_files
34
+ end
35
+
36
+ end
37
+ end
@@ -1,42 +1,42 @@
1
- module Guard
2
- class Windows < Listener
3
-
4
- def initialize(*)
5
- super
6
- @fchange = FChange::Notifier.new
7
- end
8
-
9
- def start
10
- super
11
- worker.run
12
- end
13
-
14
- def stop
15
- super
16
- worker.stop
17
- end
18
-
19
- def self.usable?
20
- require 'rb-fchange'
21
- true
22
- rescue LoadError
23
- UI.info "Please install rb-fchange gem for Windows file events support"
24
- false
25
- end
26
-
27
- private
28
-
29
- def worker
30
- @fchange
31
- end
32
-
33
- def watch(directory)
34
- worker.watch(directory, :all_events, :recursive) do |event|
35
- paths = [File.expand_path(event.watcher.path)]
36
- files = modified_files(paths, :all => true)
37
- @callback.call(files) unless files.empty?
38
- end
39
- end
40
-
41
- end
42
- end
1
+ module Guard
2
+ class Windows < Listener
3
+
4
+ def initialize(*)
5
+ super
6
+ @fchange = FChange::Notifier.new
7
+ end
8
+
9
+ def start
10
+ super
11
+ worker.run
12
+ end
13
+
14
+ def stop
15
+ super
16
+ worker.stop
17
+ end
18
+
19
+ def self.usable?
20
+ require 'rb-fchange'
21
+ true
22
+ rescue LoadError
23
+ UI.info "Please install rb-fchange gem for Windows file events support"
24
+ false
25
+ end
26
+
27
+ private
28
+
29
+ def worker
30
+ @fchange
31
+ end
32
+
33
+ def watch(directory)
34
+ worker.watch(directory, :all_events, :recursive) do |event|
35
+ paths = [File.expand_path(event.watcher.path)]
36
+ files = modified_files(paths, :all => true)
37
+ @callback.call(files) unless files.empty?
38
+ end
39
+ end
40
+
41
+ end
42
+ end
@@ -1,136 +1,136 @@
1
- require 'rbconfig'
2
- require 'pathname'
3
- require 'guard/ui'
4
-
5
- module Guard
6
- module Notifier
7
- APPLICATION_NAME = "Guard"
8
-
9
- def self.turn_off
10
- ENV["GUARD_NOTIFY"] = 'false'
11
- end
12
-
13
- def self.turn_on
14
- ENV["GUARD_NOTIFY"] = 'true'
15
- case RbConfig::CONFIG['target_os']
16
- when /darwin/i
17
- require_growl
18
- when /linux/i
19
- require_libnotify
20
- when /mswin|mingw/i
21
- require_rbnotifu
22
- end
23
- end
24
-
25
- def self.notify(message, options = {})
26
- if enabled?
27
- image = options.delete(:image) || :success
28
- title = options.delete(:title) || "Guard"
29
-
30
- case RbConfig::CONFIG['target_os']
31
- when /darwin/i
32
- notify_mac(title, message, image, options)
33
- when /linux/i
34
- notify_linux(title, message, image, options)
35
- when /mswin|mingw/i
36
- notify_windows(title, message, image, options)
37
- end
38
- end
39
- end
40
-
41
- def self.enabled?
42
- ENV["GUARD_NOTIFY"] == 'true'
43
- end
44
-
45
- private
46
-
47
- def self.notify_mac(title, message, image, options)
48
- require_growl # need for guard-rspec formatter that is called out of guard scope
49
-
50
- default_options = { :title => title, :icon => image_path(image), :name => APPLICATION_NAME }
51
- default_options.merge!(options)
52
-
53
- if defined?(GrowlNotify)
54
- default_options[:description] = message
55
- default_options[:application_name] = APPLICATION_NAME
56
- default_options.delete(:name)
57
-
58
- GrowlNotify.send_notification(default_options) if enabled?
59
- else
60
- Growl.notify message, default_options.merge(options) if enabled?
61
- end
62
- end
63
-
64
- def self.notify_linux(title, message, image, options)
65
- require_libnotify # need for guard-rspec formatter that is called out of guard scope
66
- default_options = { :body => message, :summary => title, :icon_path => image_path(image), :transient => true }
67
- Libnotify.show default_options.merge(options) if enabled?
68
- end
69
-
70
- def self.notify_windows(title, message, image, options)
71
- require_rbnotifu # need for guard-rspec formatter that is called out of guard scope
72
- default_options = { :message => message, :title => title, :type => image_level(image), :time => 3 }
73
- Notifu.show default_options.merge(options) if enabled?
74
- end
75
-
76
- def self.image_path(image)
77
- images_path = Pathname.new(File.dirname(__FILE__)).join('../../images')
78
- case image
79
- when :failed
80
- images_path.join("failed.png").to_s
81
- when :pending
82
- images_path.join("pending.png").to_s
83
- when :success
84
- images_path.join("success.png").to_s
85
- else
86
- # path given
87
- image
88
- end
89
- end
90
-
91
- def self.image_level(image)
92
- case image
93
- when :failed
94
- :error
95
- when :pending
96
- :warn
97
- when :success
98
- :info
99
- else
100
- :info
101
- end
102
- end
103
-
104
- def self.require_growl
105
- begin
106
- require 'growl_notify'
107
-
108
- if GrowlNotify.application_name != APPLICATION_NAME
109
- GrowlNotify.config do |c|
110
- c.notifications = c.default_notifications = [ APPLICATION_NAME ]
111
- c.application_name = c.notifications.first
112
- end
113
- end
114
- rescue LoadError
115
- require 'growl'
116
- end
117
- rescue LoadError
118
- turn_off
119
- UI.info "Please install growl_notify or growl gem for Mac OS X notification support and add it to your Gemfile"
120
- end
121
-
122
- def self.require_libnotify
123
- require 'libnotify'
124
- rescue LoadError
125
- turn_off
126
- UI.info "Please install libnotify gem for Linux notification support and add it to your Gemfile"
127
- end
128
-
129
- def self.require_rbnotifu
130
- require 'rb-notifu'
131
- rescue LoadError
132
- turn_off
133
- UI.info "Please install rb-notifu gem for Windows notification support and add it to your Gemfile"
134
- end
135
- end
136
- end
1
+ require 'rbconfig'
2
+ require 'pathname'
3
+ require 'guard/ui'
4
+
5
+ module Guard
6
+ module Notifier
7
+ APPLICATION_NAME = "Guard"
8
+
9
+ def self.turn_off
10
+ ENV["GUARD_NOTIFY"] = 'false'
11
+ end
12
+
13
+ def self.turn_on
14
+ ENV["GUARD_NOTIFY"] = 'true'
15
+ case RbConfig::CONFIG['target_os']
16
+ when /darwin/i
17
+ require_growl
18
+ when /linux/i
19
+ require_libnotify
20
+ when /mswin|mingw/i
21
+ require_rbnotifu
22
+ end
23
+ end
24
+
25
+ def self.notify(message, options = {})
26
+ if enabled?
27
+ image = options.delete(:image) || :success
28
+ title = options.delete(:title) || "Guard"
29
+
30
+ case RbConfig::CONFIG['target_os']
31
+ when /darwin/i
32
+ notify_mac(title, message, image, options)
33
+ when /linux/i
34
+ notify_linux(title, message, image, options)
35
+ when /mswin|mingw/i
36
+ notify_windows(title, message, image, options)
37
+ end
38
+ end
39
+ end
40
+
41
+ def self.enabled?
42
+ ENV["GUARD_NOTIFY"] == 'true'
43
+ end
44
+
45
+ private
46
+
47
+ def self.notify_mac(title, message, image, options)
48
+ require_growl # need for guard-rspec formatter that is called out of guard scope
49
+
50
+ default_options = { :title => title, :icon => image_path(image), :name => APPLICATION_NAME }
51
+ default_options.merge!(options)
52
+
53
+ if defined?(GrowlNotify)
54
+ default_options[:description] = message
55
+ default_options[:application_name] = APPLICATION_NAME
56
+ default_options.delete(:name)
57
+
58
+ GrowlNotify.send_notification(default_options) if enabled?
59
+ else
60
+ Growl.notify message, default_options.merge(options) if enabled?
61
+ end
62
+ end
63
+
64
+ def self.notify_linux(title, message, image, options)
65
+ require_libnotify # need for guard-rspec formatter that is called out of guard scope
66
+ default_options = { :body => message, :summary => title, :icon_path => image_path(image), :transient => true }
67
+ Libnotify.show default_options.merge(options) if enabled?
68
+ end
69
+
70
+ def self.notify_windows(title, message, image, options)
71
+ require_rbnotifu # need for guard-rspec formatter that is called out of guard scope
72
+ default_options = { :message => message, :title => title, :type => image_level(image), :time => 3 }
73
+ Notifu.show default_options.merge(options) if enabled?
74
+ end
75
+
76
+ def self.image_path(image)
77
+ images_path = Pathname.new(File.dirname(__FILE__)).join('../../images')
78
+ case image
79
+ when :failed
80
+ images_path.join("failed.png").to_s
81
+ when :pending
82
+ images_path.join("pending.png").to_s
83
+ when :success
84
+ images_path.join("success.png").to_s
85
+ else
86
+ # path given
87
+ image
88
+ end
89
+ end
90
+
91
+ def self.image_level(image)
92
+ case image
93
+ when :failed
94
+ :error
95
+ when :pending
96
+ :warn
97
+ when :success
98
+ :info
99
+ else
100
+ :info
101
+ end
102
+ end
103
+
104
+ def self.require_growl
105
+ begin
106
+ require 'growl_notify'
107
+
108
+ if GrowlNotify.application_name != APPLICATION_NAME
109
+ GrowlNotify.config do |c|
110
+ c.notifications = c.default_notifications = [ APPLICATION_NAME ]
111
+ c.application_name = c.notifications.first
112
+ end
113
+ end
114
+ rescue LoadError
115
+ require 'growl'
116
+ end
117
+ rescue LoadError
118
+ turn_off
119
+ UI.info "Please install growl_notify or growl gem for Mac OS X notification support and add it to your Gemfile"
120
+ end
121
+
122
+ def self.require_libnotify
123
+ require 'libnotify'
124
+ rescue LoadError
125
+ turn_off
126
+ UI.info "Please install libnotify gem for Linux notification support and add it to your Gemfile"
127
+ end
128
+
129
+ def self.require_rbnotifu
130
+ require 'rb-notifu'
131
+ rescue LoadError
132
+ turn_off
133
+ UI.info "Please install rb-notifu gem for Windows notification support and add it to your Gemfile"
134
+ end
135
+ end
136
+ end