sass 3.1.16 → 3.1.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,59 +0,0 @@
1
- # A wrapper around the Listen gem. Adds support for listening to individual
2
- # files, as well as a somewhat cleaner event dispatch API.
3
- #
4
- # @private
5
- class Sass::Plugin::Listener
6
- def initialize
7
- @directories = {}
8
- yield self
9
- begin
10
- start!
11
- rescue Exception => e
12
- raise e unless e.is_a?(Interrupt)
13
- end
14
- end
15
-
16
- def directory(path, events)
17
- (@directories[path] ||= []) << events
18
- end
19
-
20
- def file(path, events)
21
- file_base = File.basename(path)
22
- directory(File.dirname(path), {
23
- :modified => file_event_fn(events[:modified], file_base),
24
- :added => file_event_fn(events[:added], file_base),
25
- :removed => file_event_fn(events[:removed], file_base)
26
- })
27
- end
28
-
29
- def start!
30
- listener = Listen::MultiListener.new(*@directories.keys) do |modified, added, removed|
31
- modified = modified.group_by {|path| File.dirname(path)}
32
- added = added.group_by {|path| File.dirname(path)}
33
- removed = removed.group_by {|path| File.dirname(path)}
34
-
35
- @directories.each do |dir, events|
36
- events.each do |e|
37
- run_events(modified[dir], e[:modified], dir)
38
- run_events(added[dir], e[:added], dir)
39
- run_events(removed[dir], e[:removed], dir)
40
- end
41
- end
42
- end.start
43
- end
44
-
45
- private
46
-
47
- def file_event_fn(event, file_base)
48
- lambda do |dir, base|
49
- next unless event
50
- next unless base == file_base
51
- event.call
52
- end
53
- end
54
-
55
- def run_events(paths, event, path)
56
- return if paths.nil? || event.nil?
57
- paths.each {|p| event[File.dirname(p), File.basename(p)]}
58
- end
59
- end