sass 3.3.0.rc.6 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +5 -13
  2. data/VERSION +1 -1
  3. data/VERSION_DATE +1 -1
  4. data/lib/sass/exec.rb +2 -2
  5. data/lib/sass/importers/filesystem.rb +7 -7
  6. data/lib/sass/plugin/compiler.rb +1 -2
  7. data/lib/sass/selector/simple.rb +12 -2
  8. data/lib/sass/source/map.rb +2 -4
  9. data/lib/sass/tree/visitors/to_css.rb +9 -8
  10. data/lib/sass/util.rb +11 -0
  11. data/test/sass/extend_test.rb +10 -0
  12. data/vendor/listen/CHANGELOG.md +228 -0
  13. data/vendor/listen/CONTRIBUTING.md +38 -0
  14. data/vendor/listen/Gemfile +30 -0
  15. data/vendor/listen/Guardfile +8 -0
  16. data/vendor/listen/LICENSE +20 -0
  17. data/vendor/listen/README.md +315 -0
  18. data/vendor/listen/Rakefile +47 -0
  19. data/vendor/listen/Vagrantfile +96 -0
  20. data/vendor/listen/lib/listen.rb +40 -0
  21. data/vendor/listen/lib/listen/adapter.rb +214 -0
  22. data/vendor/listen/lib/listen/adapters/bsd.rb +112 -0
  23. data/vendor/listen/lib/listen/adapters/darwin.rb +85 -0
  24. data/vendor/listen/lib/listen/adapters/linux.rb +113 -0
  25. data/vendor/listen/lib/listen/adapters/polling.rb +67 -0
  26. data/vendor/listen/lib/listen/adapters/windows.rb +87 -0
  27. data/vendor/listen/lib/listen/dependency_manager.rb +126 -0
  28. data/vendor/listen/lib/listen/directory_record.rb +371 -0
  29. data/vendor/listen/lib/listen/listener.rb +225 -0
  30. data/vendor/listen/lib/listen/multi_listener.rb +143 -0
  31. data/vendor/listen/lib/listen/turnstile.rb +28 -0
  32. data/vendor/listen/lib/listen/version.rb +3 -0
  33. data/vendor/listen/listen.gemspec +22 -0
  34. data/vendor/listen/spec/listen/adapter_spec.rb +183 -0
  35. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +36 -0
  36. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +37 -0
  37. data/vendor/listen/spec/listen/adapters/linux_spec.rb +47 -0
  38. data/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
  39. data/vendor/listen/spec/listen/adapters/windows_spec.rb +30 -0
  40. data/vendor/listen/spec/listen/dependency_manager_spec.rb +107 -0
  41. data/vendor/listen/spec/listen/directory_record_spec.rb +1225 -0
  42. data/vendor/listen/spec/listen/listener_spec.rb +169 -0
  43. data/vendor/listen/spec/listen/multi_listener_spec.rb +174 -0
  44. data/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
  45. data/vendor/listen/spec/listen_spec.rb +73 -0
  46. data/vendor/listen/spec/spec_helper.rb +21 -0
  47. data/vendor/listen/spec/support/adapter_helper.rb +629 -0
  48. data/vendor/listen/spec/support/directory_record_helper.rb +55 -0
  49. data/vendor/listen/spec/support/fixtures_helper.rb +29 -0
  50. data/vendor/listen/spec/support/listeners_helper.rb +156 -0
  51. data/vendor/listen/spec/support/platform_helper.rb +15 -0
  52. metadata +275 -234
@@ -0,0 +1,38 @@
1
+ Contribute to Listen
2
+ ===================
3
+
4
+ File an issue
5
+ -------------
6
+
7
+ You can report bugs and feature requests to [GitHub Issues](https://github.com/guard/listen/issues).
8
+
9
+ **Please don't ask question in the issue tracker**, instead ask them in our
10
+ [Google group](http://groups.google.com/group/guard-dev) or on `#guard` (irc.freenode.net).
11
+
12
+ Try to figure out where the issue belongs to: Is it an issue with Listen itself or with Guard?
13
+
14
+ When you file a bug, please try to follow these simple rules if applicable:
15
+
16
+ * Make sure you run Listen with `bundle exec` first.
17
+ * Add your `Guardfile` (if used) and `Gemfile` to the issue.
18
+ * Make sure that the issue is reproducible with your description.
19
+
20
+ **It's most likely that your bug gets resolved faster if you provide as much information as possible!**
21
+
22
+ Development
23
+ -----------
24
+
25
+ * Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/listen/master/frames).
26
+ * Source hosted at [GitHub](https://github.com/guard/listen).
27
+
28
+ Pull requests are very welcome! Please try to follow these simple rules if applicable:
29
+
30
+ * Please create a topic branch for every separate change you make.
31
+ * Make sure your patches are well tested. All specs run with `rake spec` must pass.
32
+ * Update the [Yard](http://yardoc.org/) documentation.
33
+ * Update the [README](https://github.com/guard/listen/blob/master/README.md).
34
+ * Update the [CHANGELOG](https://github.com/guard/listen/blob/master/CHANGELOG.md) for noteworthy changes.
35
+ * Please **do not change** the version number.
36
+
37
+ For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on
38
+ `#guard` (irc.freenode.net).
@@ -0,0 +1,30 @@
1
+ require 'rbconfig'
2
+
3
+ source :rubygems
4
+
5
+ gemspec
6
+
7
+ gem 'rake'
8
+
9
+ gem 'rb-kqueue', '~> 0.2' if RbConfig::CONFIG['target_os'] =~ /freebsd/i
10
+ gem 'rb-fsevent', '~> 0.9.1' if RbConfig::CONFIG['target_os'] =~ /darwin(1.+)?$/i
11
+ gem 'rb-inotify', '~> 0.9.0' if RbConfig::CONFIG['target_os'] =~ /linux/i
12
+ gem 'wdm', '~> 0.0.3' if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
13
+
14
+ group :development do
15
+ platform :ruby do
16
+ gem 'coolline'
17
+ end
18
+
19
+ gem 'guard'
20
+ gem 'guard-rspec'
21
+ gem 'yard'
22
+ gem 'redcarpet'
23
+ gem 'pry'
24
+
25
+ gem 'vagrant'
26
+ end
27
+
28
+ group :test do
29
+ gem 'rspec'
30
+ end
@@ -0,0 +1,8 @@
1
+ guard :rspec, :all_on_start => false, :all_after_pass => false do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/support/adapter_helper.rb') { "spec/listen/adapters" }
5
+ watch('spec/support/listener_helper.rb') { "spec/listen/listener_spec.rb" }
6
+ watch('spec/support/fixtures_helper.rb') { "spec" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 Thibaud Guillaume-Gentil
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,315 @@
1
+ # Listen [![Build Status](https://secure.travis-ci.org/guard/listen.png?branch=master)](http://travis-ci.org/guard/listen)
2
+
3
+ The Listen gem listens to file modifications and notifies you about the changes.
4
+
5
+ ## Features
6
+
7
+ * Works everywhere!
8
+ * Supports watching multiple directories from a single listener.
9
+ * OS-specific adapters for Mac OS X 10.6+, Linux, *BSD and Windows.
10
+ * Automatic fallback to polling if OS-specific adapter doesn't work.
11
+ * Detects file modification, addition and removal.
12
+ * Checksum comparison for modifications made under the same second.
13
+ * Allows supplying regexp-patterns to ignore and filter paths for better results.
14
+ * Tested on all Ruby environments via [travis-ci](http://travis-ci.org/guard/listen).
15
+
16
+ ## Install
17
+
18
+ ``` bash
19
+ gem install listen
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ There are **two ways** to use Listen:
25
+
26
+ 1. Call `Listen.to` with either a single directory or multiple directories, then define the `change` callback in a block.
27
+ 2. Create a `listener` object and use it in an (ARel style) chainable way.
28
+
29
+ Feel free to give your feeback via [Listen issues](https://github.com/guard/listen/issues)
30
+
31
+ ### Block API
32
+
33
+ ``` ruby
34
+ # Listen to a single directory.
35
+ Listen.to('dir/path/to/listen', :filter => /\.rb$/, :ignore => %r{ignored/path/}) do |modified, added, removed|
36
+ # ...
37
+ end
38
+
39
+ # Listen to multiple directories.
40
+ Listen.to('dir/to/awesome_app', 'dir/to/other_app', :filter => /\.rb$/, :latency => 0.1) do |modified, added, removed|
41
+ # ...
42
+ end
43
+ ```
44
+
45
+ ### "Object" API
46
+
47
+ ``` ruby
48
+ listener = Listen.to('dir/path/to/listen')
49
+ listener = listener.ignore(%r{^ignored/path/})
50
+ listener = listener.filter(/\.rb$/)
51
+ listener = listener.latency(0.5)
52
+ listener = listener.force_polling(true)
53
+ listener = listener.polling_fallback_message(false)
54
+ listener = listener.change(&callback)
55
+ listener.start # blocks execution!
56
+ ```
57
+
58
+ ### Chainable
59
+
60
+ ``` ruby
61
+ Listen.to('dir/path/to/listen')
62
+ .ignore(%r{^ignored/path/})
63
+ .filter(/\.rb$/)
64
+ .latency(0.5)
65
+ .force_polling(true)
66
+ .polling_fallback_message('custom message')
67
+ .change(&callback)
68
+ .start # blocks execution!
69
+ ```
70
+
71
+ ### Pause/Unpause
72
+
73
+ Listener can also easily be paused/unpaused:
74
+
75
+ ``` ruby
76
+ listener = Listen.to('dir/path/to/listen')
77
+ listener.start(false) # non-blocking mode
78
+ listener.pause # stop listening to changes
79
+ listener.paused? # => true
80
+ listener.unpause
81
+ listener.stop
82
+ ```
83
+
84
+ ## Listening to changes on multiple directories
85
+
86
+ The Listen gem provides the `MultiListener` class to watch multiple directories and
87
+ handle their changes from a single listener:
88
+
89
+ ```ruby
90
+ listener = Listen::MultiListener.new('app/css', 'app/js')
91
+ listener.latency(0.5)
92
+
93
+ # Configure the listener to your needs...
94
+
95
+ listener.start # blocks execution!
96
+ ````
97
+
98
+ For an easier access, the `Listen.to` method can also be used to create a multi-listener:
99
+
100
+ ``` ruby
101
+ listener = Listen.to('app/css', 'app/js')
102
+ .ignore(%r{^vendor/}) # both js/vendor and css/vendor will be ignored
103
+ .change(&assets_callback)
104
+
105
+ listener.start # blocks execution!
106
+ ```
107
+
108
+ ## Changes callback
109
+
110
+ Changes to the listened-to directories gets reported back to the user in a callback.
111
+ The registered callback gets invoked, when there are changes, with **three** parameters:
112
+ `modified_paths`, `added_paths` and `removed_paths` in that particular order.
113
+
114
+ You can register a callback in two ways. The first way is by passing a block when calling
115
+ the `Listen.to` method or when initializing a listener object:
116
+
117
+ ```ruby
118
+ Listen.to('path/to/app') do |modified, added, removed|
119
+ # This block will be called when there are changes.
120
+ end
121
+
122
+ # or ...
123
+
124
+ listener = Listen::Listener.new('path/to/app') do |modified, added, removed|
125
+ # This block will be called when there are changes.
126
+ end
127
+
128
+ ```
129
+
130
+ The second way to register a callback is be calling the `change` method on any
131
+ listener passing it a block:
132
+
133
+ ```ruby
134
+ # Create a callback
135
+ callback = Proc.new do |modified, added, removed|
136
+ # This proc will be called when there are changes.
137
+ end
138
+
139
+ listener = Listen.to('dir')
140
+ listener.change(&callback) # convert the callback to a block and register it
141
+
142
+ listener.start # blocks execution
143
+ ```
144
+
145
+ ### Paths in callbacks
146
+
147
+ Listeners invoke callbacks passing them absolute paths by default:
148
+
149
+ ```ruby
150
+ # Assume someone changes the 'style.css' file in '/home/user/app/css' after creating
151
+ # the listener.
152
+ Listen.to('/home/user/app/css') do |modified, added, removed|
153
+ modified.inspect # => ['/home/user/app/css/style.css']
154
+ end
155
+ ```
156
+
157
+ #### Relative paths in callbacks
158
+
159
+ When creating a listener for a **single** path (more specifically a `Listen::Listener` instance),
160
+ you can pass `:relative_paths => true` as an option to get relative paths in
161
+ your callback:
162
+
163
+ ```ruby
164
+ # Assume someone changes the 'style.css' file in '/home/user/app/css' after creating
165
+ # the listener.
166
+ Listen.to('/home/user/app/css', :relative_paths => true) do |modified, added, removed|
167
+ modified.inspect # => ['style.css']
168
+ end
169
+ ```
170
+
171
+ Passing the `:relative_paths => true` option won't work when listeneing to multiple
172
+ directories:
173
+
174
+ ```ruby
175
+ # Assume someone changes the 'style.css' file in '/home/user/app/css' after creating
176
+ # the listener.
177
+ Listen.to('/home/user/app/css', '/home/user/app/js', :relative_paths => true) do |modified, added, removed|
178
+ modified.inspect # => ['/home/user/app/css/style.css']
179
+ end
180
+ ```
181
+
182
+ ## Options
183
+
184
+ These options can be set through `Listen.to` params or via methods (see the "Object" API)
185
+
186
+ ```ruby
187
+ :filter => /\.rb$/, /\.coffee$/ # Filter files to listen to via a regexps list.
188
+ # default: none
189
+
190
+ :ignore => %r{app/CMake/}, /\.pid$/ # Ignore a list of paths (root directory or sub-dir)
191
+ # default: See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::DirectoryRecord
192
+
193
+ :latency => 0.5 # Set the delay (**in seconds**) between checking for changes
194
+ # default: 0.25 sec (1.0 sec for polling)
195
+
196
+ :relative_paths => true # Enable the use of relative paths in the callback.
197
+ # default: false
198
+
199
+ :force_polling => true # Force the use of the polling adapter
200
+ # default: none
201
+
202
+ :polling_fallback_message => 'custom message' # Set a custom polling fallback message (or disable it with `false`)
203
+ # default: "WARNING: Listen fallen back to polling, learn more at https://github.com/guard/listen#fallback."
204
+ ```
205
+
206
+ ### The patterns for filtering and ignoring paths
207
+
208
+ Just like the unix convention of beginning absolute paths with the
209
+ directory-separator (forward slash `/` in unix) and with no prefix for relative paths,
210
+ Listen doesn't prefix relative paths (to the watched directory) with a directory-separator.
211
+
212
+ Therefore make sure _NOT_ to prefix your regexp-patterns for filtering or ignoring paths
213
+ with a directory-separator, otherwise they won't work as expected.
214
+
215
+ As an example: to ignore the `build` directory in a C-project, use `%r{build/}`
216
+ and not `%r{/build/}`.
217
+
218
+ Use `#filter!` and `#ignore!` methods to overwrites default patterns.
219
+
220
+ ### Non-blocking listening to changes
221
+
222
+ Starting a listener blocks the current thread by default. That means any code after the
223
+ `start` call won't be run until the listener is stopped (which needs to be done from another thread).
224
+
225
+ For advanced usage there is an option to disable this behavior and have the listener start working
226
+ in the background without blocking. To enable non-blocking listening the `start` method of
227
+ the listener (be it `Listener` or `MultiListener`) needs to be called with `false` as a parameter.
228
+
229
+ Here is an example of using a listener in the non-blocking mode:
230
+
231
+ ```ruby
232
+ listener = Listen.to('dir/path/to/listen')
233
+ listener.start(false) # doesn't block execution
234
+
235
+ # Code here will run immediately after starting the listener
236
+
237
+ ```
238
+
239
+ **note**: Using the `Listen.to` helper-method with a callback-block will always
240
+ block execution. See the "Block API" section for an example.
241
+
242
+ ## Listen adapters
243
+
244
+ The Listen gem has a set of adapters to notify it when there are changes.
245
+ There are 3 OS-specific adapters to support Mac, Linux, *BSD and Windows. These adapters are fast
246
+ as they use some system-calls to implement the notifying function.
247
+
248
+ There is also a polling adapter which is a cross-platform adapter and it will
249
+ work on any system. This adapter is unfortunately slower than the rest of the adapters.
250
+
251
+ The Listen gem will choose the best and working adapter for your machine automatically. If you
252
+ want to force the use of the polling adapter, either use the `:force_polling` option
253
+ while initializing the listener or call the `force_polling` method on your listener
254
+ before starting it.
255
+
256
+ ## Polling fallback
257
+
258
+ When a OS-specific adapter doesn't work the Listen gem automatically falls back to the polling adapter.
259
+ Here are some things you could try to avoid the polling fallback:
260
+
261
+ * [Update your Dropbox client](http://www.dropbox.com/downloading) (if used).
262
+ * Increase latency. (Please [open an issue](https://github.com/guard/listen/issues/new) if you think that default is too low.)
263
+ * Move or rename the listened folder.
264
+ * Update/reboot your OS.
265
+
266
+ If your application keeps using the polling-adapter and you can't figure out why, feel free to [open an issue](https://github.com/guard/listen/issues/new) (and be sure to give all the details).
267
+
268
+ ## Development [![Dependency Status](https://gemnasium.com/guard/listen.png?branch=master)](https://gemnasium.com/guard/listen)
269
+
270
+ * Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/listen/master/frames).
271
+ * Source hosted at [GitHub](https://github.com/guard/listen).
272
+
273
+ Pull requests are very welcome! Please try to follow these simple rules if applicable:
274
+
275
+ * Please create a topic branch for every separate change you make.
276
+ * Make sure your patches are well tested. All specs run with `rake spec:portability` must pass.
277
+ * Update the [Yard](http://yardoc.org/) documentation.
278
+ * Update the README.
279
+ * Update the CHANGELOG for noteworthy changes.
280
+ * Please **do not change** the version number.
281
+
282
+ For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on
283
+ `#guard` (irc.freenode.net).
284
+
285
+ ## Acknowledgment
286
+
287
+ * [Michael Kessler (netzpirat)][] for having written the [initial specs](https://github.com/guard/listen/commit/1e457b13b1bb8a25d2240428ce5ed488bafbed1f).
288
+ * [Travis Tilley (ttilley)][] for this awesome work on [fssm][] & [rb-fsevent][].
289
+ * [Nathan Weizenbaum (nex3)][] for [rb-inotify][], a thorough inotify wrapper.
290
+ * [Mathieu Arnold (mat813)][] for [rb-kqueue][], a simple kqueue wrapper.
291
+ * [stereobooster][] for [rb-fchange][], windows support wouldn't exist without him.
292
+ * [Yehuda Katz (wycats)][] for [vigilo][], that has been a great source of inspiration.
293
+
294
+ ## Authors
295
+
296
+ * [Thibaud Guillaume-Gentil][] ([@thibaudgg](http://twitter.com/thibaudgg))
297
+ * [Maher Sallam][] ([@mahersalam](http://twitter.com/mahersalam))
298
+
299
+ ## Contributors
300
+
301
+ [https://github.com/guard/listen/contributors](https://github.com/guard/listen/contributors)
302
+
303
+ [Thibaud Guillaume-Gentil]: https://github.com/thibaudgg
304
+ [Maher Sallam]: https://github.com/Maher4Ever
305
+ [Michael Kessler (netzpirat)]: https://github.com/netzpirat
306
+ [Travis Tilley (ttilley)]: https://github.com/ttilley
307
+ [fssm]: https://github.com/ttilley/fssm
308
+ [rb-fsevent]: https://github.com/thibaudgg/rb-fsevent
309
+ [Mathieu Arnold (mat813)]: https://github.com/mat813
310
+ [Nathan Weizenbaum (nex3)]: https://github.com/nex3
311
+ [rb-inotify]: https://github.com/nex3/rb-inotify
312
+ [stereobooster]: https://github.com/stereobooster
313
+ [rb-fchange]: https://github.com/stereobooster/rb-fchange
314
+ [Yehuda Katz (wycats)]: https://github.com/wycats
315
+ [vigilo]: https://github.com/wycats/vigilo
@@ -0,0 +1,47 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => :spec
6
+
7
+ require 'rbconfig'
8
+ namespace(:spec) do
9
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/i
10
+ desc "Run all specs on multiple ruby versions (requires pik)"
11
+ task(:portability) do
12
+ %w[187 192 161].each do |version|
13
+ system "cmd /c echo -----------#{version}------------ & " +
14
+ "pik use #{version} & " +
15
+ "bundle install & " +
16
+ "bundle exec rspec spec"
17
+ end
18
+ end
19
+ else
20
+ desc "Run all specs on multiple ruby versions (requires rvm)"
21
+ task(:portability) do
22
+ travis_config_file = File.expand_path("../.travis.yml", __FILE__)
23
+ begin
24
+ travis_options ||= YAML::load_file(travis_config_file)
25
+ rescue => ex
26
+ puts "Travis config file '#{travis_config_file}' could not be found: #{ex.message}"
27
+ return
28
+ end
29
+
30
+ travis_options['rvm'].each do |version|
31
+ system <<-BASH
32
+ bash -c 'source ~/.rvm/scripts/rvm;
33
+ rvm #{version};
34
+ ruby_version_string_size=`ruby -v | wc -m`
35
+ echo;
36
+ for ((c=1; c<$ruby_version_string_size; c++)); do echo -n "="; done
37
+ echo;
38
+ echo "`ruby -v`";
39
+ for ((c=1; c<$ruby_version_string_size; c++)); do echo -n "="; done
40
+ echo;
41
+ RBXOPT="-Xrbc.db" bundle install;
42
+ RBXOPT="-Xrbc.db" bundle exec rspec spec -f doc 2>&1;'
43
+ BASH
44
+ end
45
+ end
46
+ end
47
+ end