sass 3.4.25 → 3.5.0

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 (135) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/Rakefile +2 -117
  4. data/VERSION +1 -1
  5. data/VERSION_DATE +1 -1
  6. data/VERSION_NAME +1 -1
  7. data/lib/sass/cache_stores/filesystem.rb +1 -1
  8. data/lib/sass/css.rb +1 -2
  9. data/lib/sass/engine.rb +38 -20
  10. data/lib/sass/environment.rb +26 -5
  11. data/lib/sass/error.rb +2 -2
  12. data/lib/sass/exec/base.rb +2 -11
  13. data/lib/sass/features.rb +1 -0
  14. data/lib/sass/importers/filesystem.rb +2 -2
  15. data/lib/sass/plugin/compiler.rb +20 -50
  16. data/lib/sass/plugin/configuration.rb +2 -2
  17. data/lib/sass/railtie.rb +1 -1
  18. data/lib/sass/script/functions.rb +235 -43
  19. data/lib/sass/script/lexer.rb +13 -2
  20. data/lib/sass/script/parser.rb +69 -67
  21. data/lib/sass/script/tree/funcall.rb +35 -30
  22. data/lib/sass/script/tree/list_literal.rb +23 -8
  23. data/lib/sass/script/tree/map_literal.rb +2 -2
  24. data/lib/sass/script/tree/node.rb +0 -8
  25. data/lib/sass/script/tree/operation.rb +0 -7
  26. data/lib/sass/script/value/arg_list.rb +1 -1
  27. data/lib/sass/script/value/base.rb +17 -0
  28. data/lib/sass/script/value/callable.rb +25 -0
  29. data/lib/sass/script/value/color.rb +5 -0
  30. data/lib/sass/script/value/function.rb +19 -0
  31. data/lib/sass/script/value/helpers.rb +29 -9
  32. data/lib/sass/script/value/list.rb +35 -14
  33. data/lib/sass/script/value/map.rb +2 -2
  34. data/lib/sass/script/value/number.rb +1 -1
  35. data/lib/sass/script/value.rb +2 -0
  36. data/lib/sass/scss/parser.rb +99 -40
  37. data/lib/sass/scss/rx.rb +4 -10
  38. data/lib/sass/scss/static_parser.rb +5 -24
  39. data/lib/sass/selector/abstract_sequence.rb +7 -6
  40. data/lib/sass/selector/comma_sequence.rb +7 -4
  41. data/lib/sass/selector/pseudo.rb +19 -2
  42. data/lib/sass/selector/sequence.rb +35 -6
  43. data/lib/sass/selector/simple.rb +9 -2
  44. data/lib/sass/selector/simple_sequence.rb +8 -4
  45. data/lib/sass/selector.rb +4 -0
  46. data/lib/sass/source/map.rb +2 -2
  47. data/lib/sass/stack.rb +21 -1
  48. data/lib/sass/tree/charset_node.rb +1 -1
  49. data/lib/sass/tree/prop_node.rb +45 -53
  50. data/lib/sass/tree/rule_node.rb +3 -2
  51. data/lib/sass/tree/visitors/check_nesting.rb +1 -1
  52. data/lib/sass/tree/visitors/convert.rb +2 -3
  53. data/lib/sass/tree/visitors/cssize.rb +4 -15
  54. data/lib/sass/tree/visitors/deep_copy.rb +1 -1
  55. data/lib/sass/tree/visitors/extend.rb +2 -8
  56. data/lib/sass/tree/visitors/perform.rb +21 -9
  57. data/lib/sass/tree/visitors/set_options.rb +1 -1
  58. data/lib/sass/tree/visitors/to_css.rb +47 -13
  59. data/lib/sass/util/multibyte_string_scanner.rb +127 -131
  60. data/lib/sass/util/normalized_map.rb +1 -8
  61. data/lib/sass/util.rb +12 -290
  62. data/lib/sass/version.rb +0 -2
  63. data/lib/sass.rb +0 -7
  64. data/test/sass/cache_test.rb +0 -1
  65. data/test/sass/callbacks_test.rb +0 -1
  66. data/test/sass/compiler_test.rb +4 -15
  67. data/test/sass/conversion_test.rb +113 -163
  68. data/test/sass/css2sass_test.rb +16 -19
  69. data/test/sass/css_variable_test.rb +176 -71
  70. data/test/sass/encoding_test.rb +2 -33
  71. data/test/sass/engine_test.rb +71 -19
  72. data/test/sass/exec_test.rb +0 -1
  73. data/test/sass/extend_test.rb +37 -92
  74. data/test/sass/functions_test.rb +58 -14
  75. data/test/sass/importer_test.rb +2 -3
  76. data/test/sass/logger_test.rb +0 -1
  77. data/test/sass/plugin_test.rb +6 -10
  78. data/test/sass/results/script.css +1 -1
  79. data/test/sass/results/units.css +2 -2
  80. data/test/sass/script_conversion_test.rb +10 -2
  81. data/test/sass/script_test.rb +22 -24
  82. data/test/sass/scss/css_test.rb +3 -18
  83. data/test/sass/scss/rx_test.rb +0 -1
  84. data/test/sass/scss/scss_test.rb +49 -16
  85. data/test/sass/source_map_test.rb +13 -16
  86. data/test/sass/superselector_test.rb +0 -1
  87. data/test/sass/util/multibyte_string_scanner_test.rb +121 -124
  88. data/test/sass/util/normalized_map_test.rb +0 -1
  89. data/test/sass/util/subset_map_test.rb +0 -1
  90. data/test/sass/util_test.rb +4 -39
  91. data/test/sass/value_helpers_test.rb +0 -1
  92. data/test/sass-spec.yml +1 -1
  93. data/test/test_helper.rb +39 -0
  94. metadata +19 -44
  95. data/lib/sass/script/css_variable_warning.rb +0 -52
  96. data/lib/sass/util/cross_platform_random.rb +0 -19
  97. data/lib/sass/util/ordered_hash.rb +0 -192
  98. data/test/sass/results/import_charset_1_8.css +0 -5
  99. data/test/sass/templates/import_charset_1_8.sass +0 -6
  100. data/vendor/listen/CHANGELOG.md +0 -1
  101. data/vendor/listen/CONTRIBUTING.md +0 -38
  102. data/vendor/listen/Gemfile +0 -20
  103. data/vendor/listen/Guardfile +0 -8
  104. data/vendor/listen/LICENSE +0 -20
  105. data/vendor/listen/README.md +0 -349
  106. data/vendor/listen/Rakefile +0 -5
  107. data/vendor/listen/Vagrantfile +0 -96
  108. data/vendor/listen/lib/listen/adapter.rb +0 -327
  109. data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
  110. data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
  111. data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
  112. data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
  113. data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
  114. data/vendor/listen/lib/listen/directory_record.rb +0 -406
  115. data/vendor/listen/lib/listen/listener.rb +0 -323
  116. data/vendor/listen/lib/listen/turnstile.rb +0 -32
  117. data/vendor/listen/lib/listen/version.rb +0 -3
  118. data/vendor/listen/lib/listen.rb +0 -54
  119. data/vendor/listen/listen.gemspec +0 -28
  120. data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
  121. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
  122. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
  123. data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
  124. data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  125. data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
  126. data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
  127. data/vendor/listen/spec/listen/listener_spec.rb +0 -258
  128. data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  129. data/vendor/listen/spec/listen_spec.rb +0 -67
  130. data/vendor/listen/spec/spec_helper.rb +0 -25
  131. data/vendor/listen/spec/support/adapter_helper.rb +0 -666
  132. data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
  133. data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  134. data/vendor/listen/spec/support/listeners_helper.rb +0 -179
  135. data/vendor/listen/spec/support/platform_helper.rb +0 -15
@@ -1,57 +0,0 @@
1
- # Prepares a record for the test and fetches changes
2
- # afterwards.
3
- #
4
- # @param [String] root_path the path to watch
5
- # @param [Hash] options
6
- # @option options [Array<string>] :paths optional paths fetch changes for
7
- # @option options [Boolean] :use_last_record allow the use of an already
8
- # created record, handy for ordered tests.
9
- #
10
- # @return [Array, Array, Array] the changes
11
- #
12
- def changes(root_path, options = {})
13
- unless @record || options[:use_last_record]
14
- @record = Listen::DirectoryRecord.new(root_path)
15
- @record.filter(options.delete(:filter)) if options[:filter]
16
- @record.ignore(options.delete(:ignore)) if options[:ignore]
17
-
18
- # Build the record after adding the filtering and ignoring patterns
19
- @record.build
20
- end
21
-
22
- yield if block_given?
23
-
24
- paths = options.delete(:paths) || [root_path]
25
- options[:recursive] = true if options[:recursive].nil?
26
-
27
- changes = @record.fetch_changes(paths, { :relative_paths => true }.merge(options))
28
-
29
- [changes[:modified], changes[:added], changes[:removed]]
30
- end
31
-
32
- # Generates a small time difference before performing a time sensitive
33
- # task (like comparing mtimes of files).
34
- #
35
- # @note Modification time for files only includes the milliseconds on Linux with MRI > 1.9.2
36
- # and platform that support it (OS X 10.8 not included),
37
- # that's why we generate a difference that's greater than 1 second.
38
- #
39
- def small_time_difference
40
- t = Time.now
41
- diff = t.to_f - t.to_i
42
-
43
- sleep(1.05 - diff)
44
- end
45
-
46
- # Ensures that the test runs at almost the same second at which
47
- # changes are being checked.
48
- #
49
- def ensure_same_second
50
- t = Time.now
51
- diff = t.to_f - t.to_i
52
-
53
- # We are not at the end of a second
54
- if diff >= (1 - Listen::Adapter::DEFAULT_LATENCY)
55
- sleep(1.05 - diff)
56
- end
57
- end
@@ -1,29 +0,0 @@
1
- require 'tmpdir'
2
-
3
- include FileUtils
4
-
5
- # Prepares temporary fixture-directories and
6
- # cleans them afterwards.
7
- #
8
- # @param [Fixnum] number_of_directories the number of fixture-directories to make
9
- #
10
- # @yield [path1, path2, ...] the empty fixture-directories
11
- # @yieldparam [String] path the path to a fixture directory
12
- #
13
- def fixtures(number_of_directories = 1)
14
- current_pwd = pwd
15
- paths = 1.upto(number_of_directories).map do
16
- File.expand_path(File.join(pwd, "spec/.fixtures/#{Time.now.to_f.to_s.sub('.', '') + rand(9999).to_s}"))
17
- end
18
-
19
- # Create the dirs
20
- paths.each { |p| mkdir_p(p) }
21
-
22
- cd(paths.first) if number_of_directories == 1
23
-
24
- yield(*paths)
25
-
26
- ensure
27
- cd current_pwd
28
- paths.map { |p| rm_rf(p) if File.exists?(p) }
29
- end
@@ -1,179 +0,0 @@
1
- shared_examples_for 'a listener to changes on a file-system' do
2
- describe '#start' do
3
- before do
4
- subject.stub(:initialize_adapter) { adapter }
5
- end
6
-
7
- it 'starts the adapter' do
8
- adapter.should_receive(:start)
9
- subject.start
10
- end
11
-
12
- context 'with the blocking deprecated param set to true' do
13
- it 'displays a deprecation notice' do
14
- Kernel.should_receive(:warn).with(/#{Listen::Listener::BLOCKING_PARAMETER_DEPRECATION_MESSAGE}/)
15
- subject.start(true)
16
- end
17
- end
18
-
19
- context 'with the blocking deprecated param set to false' do
20
- it 'displays a deprecation notice' do
21
- Kernel.should_receive(:warn).with(/#{Listen::Listener::BLOCKING_PARAMETER_DEPRECATION_MESSAGE}/)
22
- subject.start(false)
23
- end
24
- end
25
- end
26
-
27
- describe '#start!' do
28
- before do
29
- subject.stub(:initialize_adapter) { adapter }
30
- end
31
-
32
- it 'starts the adapter' do
33
- adapter.should_receive(:start!)
34
- subject.start!
35
- end
36
-
37
- it 'passes the blocking param to the adapter' do
38
- adapter.should_receive(:start!)
39
- subject.start!
40
- end
41
- end
42
-
43
- context 'with a started listener' do
44
- before do
45
- subject.start
46
- end
47
-
48
- describe '#stop' do
49
- it "stops adapter" do
50
- adapter.should_receive(:stop)
51
- subject.stop
52
- end
53
- end
54
-
55
- describe '#pause' do
56
- it 'sets adapter.paused to true' do
57
- adapter.should_receive(:pause)
58
- subject.pause
59
- end
60
-
61
- it 'returns the same listener to allow chaining' do
62
- subject.pause.should equal subject
63
- end
64
- end
65
-
66
- describe '#unpause' do
67
- it 'sets adapter.paused to false' do
68
- adapter.should_receive(:unpause)
69
- subject.unpause
70
- end
71
-
72
- it 'returns the same listener to allow chaining' do
73
- subject.unpause.should equal subject
74
- end
75
- end
76
-
77
- describe '#paused?' do
78
- it 'returns false when there is no adapter' do
79
- subject.instance_variable_set(:@adapter, nil)
80
- subject.should_not be_paused
81
- end
82
-
83
- it 'returns true when adapter is paused' do
84
- adapter.should_receive(:paused?) { true }
85
- subject.should be_paused
86
- end
87
-
88
- it 'returns false when adapter is not paused' do
89
- adapter.should_receive(:paused?) { false }
90
- subject.should_not be_paused
91
- end
92
- end
93
- end
94
-
95
- describe '#change' do
96
- it 'sets the callback block' do
97
- callback = lambda { |modified, added, removed| }
98
- subject.change(&callback)
99
- subject.instance_variable_get(:@block).should eq callback
100
- end
101
-
102
- it 'returns the same listener to allow chaining' do
103
- subject.change(&Proc.new{}).should equal subject
104
- end
105
- end
106
-
107
- describe '#ignore' do
108
- it 'returns the same listener to allow chaining' do
109
- subject.ignore('some_directory').should equal subject
110
- end
111
- end
112
-
113
- describe '#ignore!' do
114
- it 'returns the same listener to allow chaining' do
115
- subject.ignore!('some_directory').should equal subject
116
- end
117
- end
118
-
119
- describe '#filter' do
120
- it 'returns the same listener to allow chaining' do
121
- subject.filter(/\.txt$/).should equal subject
122
- end
123
- end
124
-
125
- describe '#filter!' do
126
- it 'returns the same listener to allow chaining' do
127
- subject.filter!(/\.txt$/).should equal subject
128
- end
129
- end
130
-
131
- describe '#latency' do
132
- it 'sets the latency to @adapter_options' do
133
- subject.latency(0.7)
134
- subject.instance_variable_get(:@adapter_options).should eq(:latency => 0.7)
135
- end
136
-
137
- it 'returns the same listener to allow chaining' do
138
- subject.latency(0.7).should equal subject
139
- end
140
- end
141
-
142
- describe '#force_polling' do
143
- it 'sets force_polling to @adapter_options' do
144
- subject.force_polling(false)
145
- subject.instance_variable_get(:@adapter_options).should eq(:force_polling => false)
146
- end
147
-
148
- it 'returns the same listener to allow chaining' do
149
- subject.force_polling(true).should equal subject
150
- end
151
- end
152
-
153
- describe '#relative_paths' do
154
- it 'sets the relative paths option for paths in the callback' do
155
- subject.relative_paths(true)
156
- subject.instance_variable_get(:@use_relative_paths).should be_true
157
- end
158
-
159
- it 'returns the same listener to allow chaining' do
160
- subject.relative_paths(true).should equal subject
161
- end
162
- end
163
-
164
- describe '#polling_fallback_message' do
165
- it 'sets custom polling fallback message to @adapter_options' do
166
- subject.polling_fallback_message('custom message')
167
- subject.instance_variable_get(:@adapter_options).should eq(:polling_fallback_message => 'custom message')
168
- end
169
-
170
- it 'sets polling fallback message to false in @adapter_options' do
171
- subject.polling_fallback_message(false)
172
- subject.instance_variable_get(:@adapter_options).should eq(:polling_fallback_message => false)
173
- end
174
-
175
- it 'returns the same listener to allow chaining' do
176
- subject.polling_fallback_message('custom message').should equal subject
177
- end
178
- end
179
- end
@@ -1,15 +0,0 @@
1
- def mac?
2
- RbConfig::CONFIG['target_os'] =~ /darwin/i
3
- end
4
-
5
- def linux?
6
- RbConfig::CONFIG['target_os'] =~ /linux/i
7
- end
8
-
9
- def bsd?
10
- RbConfig::CONFIG['target_os'] =~ /freebsd/i
11
- end
12
-
13
- def windows?
14
- RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
15
- end