sass 3.4.24 → 3.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (244) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +1 -1
  3. data/CONTRIBUTING.md +3 -3
  4. data/README.md +17 -9
  5. data/VERSION +1 -1
  6. data/VERSION_DATE +1 -1
  7. data/VERSION_NAME +1 -1
  8. data/extra/sass-spec-ref.sh +9 -1
  9. data/lib/sass/cache_stores/filesystem.rb +1 -1
  10. data/lib/sass/css.rb +2 -3
  11. data/lib/sass/deprecation.rb +55 -0
  12. data/lib/sass/engine.rb +52 -34
  13. data/lib/sass/environment.rb +27 -6
  14. data/lib/sass/error.rb +2 -2
  15. data/lib/sass/exec/base.rb +2 -13
  16. data/lib/sass/exec/sass_scss.rb +1 -5
  17. data/lib/sass/features.rb +1 -0
  18. data/lib/sass/importers/filesystem.rb +6 -4
  19. data/lib/sass/logger/base.rb +11 -0
  20. data/lib/sass/plugin/compiler.rb +21 -51
  21. data/lib/sass/plugin/configuration.rb +2 -2
  22. data/lib/sass/plugin/rack.rb +2 -2
  23. data/lib/sass/plugin/staleness_checker.rb +1 -1
  24. data/lib/sass/plugin.rb +1 -1
  25. data/lib/sass/railtie.rb +1 -1
  26. data/lib/sass/script/css_parser.rb +4 -1
  27. data/lib/sass/script/functions.rb +310 -83
  28. data/lib/sass/script/lexer.rb +64 -10
  29. data/lib/sass/script/parser.rb +291 -121
  30. data/lib/sass/script/tree/funcall.rb +35 -34
  31. data/lib/sass/script/tree/interpolation.rb +0 -3
  32. data/lib/sass/script/tree/list_literal.rb +23 -8
  33. data/lib/sass/script/tree/map_literal.rb +2 -2
  34. data/lib/sass/script/tree/node.rb +1 -9
  35. data/lib/sass/script/tree/operation.rb +43 -23
  36. data/lib/sass/script/value/arg_list.rb +1 -1
  37. data/lib/sass/script/value/base.rb +18 -1
  38. data/lib/sass/script/value/callable.rb +25 -0
  39. data/lib/sass/script/value/color.rb +8 -2
  40. data/lib/sass/script/value/function.rb +19 -0
  41. data/lib/sass/script/value/helpers.rb +37 -11
  42. data/lib/sass/script/value/list.rb +35 -14
  43. data/lib/sass/script/value/map.rb +2 -2
  44. data/lib/sass/script/value/number.rb +3 -2
  45. data/lib/sass/script/value/string.rb +5 -12
  46. data/lib/sass/script/value.rb +2 -0
  47. data/lib/sass/script.rb +1 -1
  48. data/lib/sass/scss/css_parser.rb +6 -1
  49. data/lib/sass/scss/parser.rb +145 -56
  50. data/lib/sass/scss/rx.rb +5 -11
  51. data/lib/sass/scss/static_parser.rb +27 -42
  52. data/lib/sass/selector/abstract_sequence.rb +7 -6
  53. data/lib/sass/selector/comma_sequence.rb +21 -5
  54. data/lib/sass/selector/pseudo.rb +20 -3
  55. data/lib/sass/selector/sequence.rb +35 -10
  56. data/lib/sass/selector/simple.rb +10 -2
  57. data/lib/sass/selector/simple_sequence.rb +8 -4
  58. data/lib/sass/selector.rb +4 -0
  59. data/lib/sass/source/map.rb +2 -6
  60. data/lib/sass/stack.rb +21 -1
  61. data/lib/sass/tree/charset_node.rb +1 -1
  62. data/lib/sass/tree/node.rb +2 -2
  63. data/lib/sass/tree/prop_node.rb +45 -53
  64. data/lib/sass/tree/rule_node.rb +13 -6
  65. data/lib/sass/tree/visitors/check_nesting.rb +1 -1
  66. data/lib/sass/tree/visitors/convert.rb +2 -3
  67. data/lib/sass/tree/visitors/cssize.rb +4 -15
  68. data/lib/sass/tree/visitors/deep_copy.rb +2 -2
  69. data/lib/sass/tree/visitors/extend.rb +2 -8
  70. data/lib/sass/tree/visitors/perform.rb +26 -17
  71. data/lib/sass/tree/visitors/set_options.rb +1 -1
  72. data/lib/sass/tree/visitors/to_css.rb +49 -22
  73. data/lib/sass/util/multibyte_string_scanner.rb +127 -131
  74. data/lib/sass/util/normalized_map.rb +1 -8
  75. data/lib/sass/util.rb +72 -310
  76. data/lib/sass/version.rb +0 -4
  77. data/lib/sass.rb +3 -10
  78. metadata +60 -206
  79. data/Rakefile +0 -424
  80. data/lib/sass/script/css_variable_warning.rb +0 -52
  81. data/lib/sass/util/cross_platform_random.rb +0 -19
  82. data/lib/sass/util/ordered_hash.rb +0 -192
  83. data/test/sass/cache_test.rb +0 -131
  84. data/test/sass/callbacks_test.rb +0 -61
  85. data/test/sass/compiler_test.rb +0 -236
  86. data/test/sass/conversion_test.rb +0 -2188
  87. data/test/sass/css2sass_test.rb +0 -526
  88. data/test/sass/css_variable_test.rb +0 -132
  89. data/test/sass/data/hsl-rgb.txt +0 -319
  90. data/test/sass/encoding_test.rb +0 -219
  91. data/test/sass/engine_test.rb +0 -3441
  92. data/test/sass/exec_test.rb +0 -96
  93. data/test/sass/extend_test.rb +0 -1727
  94. data/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
  95. data/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
  96. data/test/sass/functions_test.rb +0 -1974
  97. data/test/sass/importer_test.rb +0 -421
  98. data/test/sass/logger_test.rb +0 -58
  99. data/test/sass/mock_importer.rb +0 -49
  100. data/test/sass/more_results/more1.css +0 -9
  101. data/test/sass/more_results/more1_with_line_comments.css +0 -26
  102. data/test/sass/more_results/more_import.css +0 -29
  103. data/test/sass/more_templates/_more_partial.sass +0 -2
  104. data/test/sass/more_templates/more1.sass +0 -23
  105. data/test/sass/more_templates/more_import.sass +0 -11
  106. data/test/sass/plugin_test.rb +0 -556
  107. data/test/sass/results/alt.css +0 -4
  108. data/test/sass/results/basic.css +0 -9
  109. data/test/sass/results/cached_import_option.css +0 -3
  110. data/test/sass/results/compact.css +0 -5
  111. data/test/sass/results/complex.css +0 -86
  112. data/test/sass/results/compressed.css +0 -1
  113. data/test/sass/results/expanded.css +0 -19
  114. data/test/sass/results/filename_fn.css +0 -3
  115. data/test/sass/results/if.css +0 -3
  116. data/test/sass/results/import.css +0 -31
  117. data/test/sass/results/import_charset.css +0 -5
  118. data/test/sass/results/import_charset_1_8.css +0 -5
  119. data/test/sass/results/import_charset_ibm866.css +0 -5
  120. data/test/sass/results/import_content.css +0 -1
  121. data/test/sass/results/line_numbers.css +0 -49
  122. data/test/sass/results/mixins.css +0 -95
  123. data/test/sass/results/multiline.css +0 -24
  124. data/test/sass/results/nested.css +0 -22
  125. data/test/sass/results/options.css +0 -1
  126. data/test/sass/results/parent_ref.css +0 -13
  127. data/test/sass/results/script.css +0 -16
  128. data/test/sass/results/scss_import.css +0 -31
  129. data/test/sass/results/scss_importee.css +0 -2
  130. data/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  131. data/test/sass/results/subdir/subdir.css +0 -3
  132. data/test/sass/results/units.css +0 -11
  133. data/test/sass/results/warn.css +0 -0
  134. data/test/sass/results/warn_imported.css +0 -0
  135. data/test/sass/script_conversion_test.rb +0 -357
  136. data/test/sass/script_test.rb +0 -1422
  137. data/test/sass/scss/css_test.rb +0 -1281
  138. data/test/sass/scss/rx_test.rb +0 -160
  139. data/test/sass/scss/scss_test.rb +0 -4190
  140. data/test/sass/scss/test_helper.rb +0 -37
  141. data/test/sass/source_map_test.rb +0 -1055
  142. data/test/sass/superselector_test.rb +0 -210
  143. data/test/sass/templates/_cached_import_option_partial.scss +0 -1
  144. data/test/sass/templates/_double_import_loop2.sass +0 -1
  145. data/test/sass/templates/_filename_fn_import.scss +0 -11
  146. data/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  147. data/test/sass/templates/_imported_charset_utf8.sass +0 -4
  148. data/test/sass/templates/_imported_content.sass +0 -3
  149. data/test/sass/templates/_partial.sass +0 -2
  150. data/test/sass/templates/_same_name_different_partiality.scss +0 -1
  151. data/test/sass/templates/alt.sass +0 -16
  152. data/test/sass/templates/basic.sass +0 -23
  153. data/test/sass/templates/bork1.sass +0 -2
  154. data/test/sass/templates/bork2.sass +0 -2
  155. data/test/sass/templates/bork3.sass +0 -2
  156. data/test/sass/templates/bork4.sass +0 -2
  157. data/test/sass/templates/bork5.sass +0 -3
  158. data/test/sass/templates/cached_import_option.scss +0 -3
  159. data/test/sass/templates/compact.sass +0 -17
  160. data/test/sass/templates/complex.sass +0 -305
  161. data/test/sass/templates/compressed.sass +0 -15
  162. data/test/sass/templates/double_import_loop1.sass +0 -1
  163. data/test/sass/templates/expanded.sass +0 -17
  164. data/test/sass/templates/filename_fn.scss +0 -18
  165. data/test/sass/templates/if.sass +0 -11
  166. data/test/sass/templates/import.sass +0 -12
  167. data/test/sass/templates/import_charset.sass +0 -9
  168. data/test/sass/templates/import_charset_1_8.sass +0 -6
  169. data/test/sass/templates/import_charset_ibm866.sass +0 -11
  170. data/test/sass/templates/import_content.sass +0 -4
  171. data/test/sass/templates/importee.less +0 -2
  172. data/test/sass/templates/importee.sass +0 -19
  173. data/test/sass/templates/line_numbers.sass +0 -13
  174. data/test/sass/templates/mixin_bork.sass +0 -5
  175. data/test/sass/templates/mixins.sass +0 -76
  176. data/test/sass/templates/multiline.sass +0 -20
  177. data/test/sass/templates/nested.sass +0 -25
  178. data/test/sass/templates/nested_bork1.sass +0 -2
  179. data/test/sass/templates/nested_bork2.sass +0 -2
  180. data/test/sass/templates/nested_bork3.sass +0 -2
  181. data/test/sass/templates/nested_bork4.sass +0 -2
  182. data/test/sass/templates/nested_import.sass +0 -2
  183. data/test/sass/templates/nested_mixin_bork.sass +0 -6
  184. data/test/sass/templates/options.sass +0 -2
  185. data/test/sass/templates/parent_ref.sass +0 -25
  186. data/test/sass/templates/same_name_different_ext.sass +0 -2
  187. data/test/sass/templates/same_name_different_ext.scss +0 -1
  188. data/test/sass/templates/same_name_different_partiality.scss +0 -1
  189. data/test/sass/templates/script.sass +0 -101
  190. data/test/sass/templates/scss_import.scss +0 -12
  191. data/test/sass/templates/scss_importee.scss +0 -1
  192. data/test/sass/templates/single_import_loop.sass +0 -1
  193. data/test/sass/templates/subdir/import_up1.scss +0 -1
  194. data/test/sass/templates/subdir/import_up2.scss +0 -1
  195. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  196. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  197. data/test/sass/templates/subdir/subdir.sass +0 -6
  198. data/test/sass/templates/units.sass +0 -11
  199. data/test/sass/templates/warn.sass +0 -3
  200. data/test/sass/templates/warn_imported.sass +0 -4
  201. data/test/sass/test_helper.rb +0 -8
  202. data/test/sass/util/multibyte_string_scanner_test.rb +0 -147
  203. data/test/sass/util/normalized_map_test.rb +0 -51
  204. data/test/sass/util/subset_map_test.rb +0 -91
  205. data/test/sass/util_test.rb +0 -438
  206. data/test/sass/value_helpers_test.rb +0 -179
  207. data/test/sass-spec.yml +0 -3
  208. data/test/test_helper.rb +0 -110
  209. data/vendor/listen/CHANGELOG.md +0 -1
  210. data/vendor/listen/CONTRIBUTING.md +0 -38
  211. data/vendor/listen/Gemfile +0 -20
  212. data/vendor/listen/Guardfile +0 -8
  213. data/vendor/listen/LICENSE +0 -20
  214. data/vendor/listen/README.md +0 -349
  215. data/vendor/listen/Rakefile +0 -5
  216. data/vendor/listen/Vagrantfile +0 -96
  217. data/vendor/listen/lib/listen/adapter.rb +0 -327
  218. data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
  219. data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
  220. data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
  221. data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
  222. data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
  223. data/vendor/listen/lib/listen/directory_record.rb +0 -406
  224. data/vendor/listen/lib/listen/listener.rb +0 -323
  225. data/vendor/listen/lib/listen/turnstile.rb +0 -32
  226. data/vendor/listen/lib/listen/version.rb +0 -3
  227. data/vendor/listen/lib/listen.rb +0 -54
  228. data/vendor/listen/listen.gemspec +0 -28
  229. data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
  230. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
  231. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
  232. data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
  233. data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  234. data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
  235. data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
  236. data/vendor/listen/spec/listen/listener_spec.rb +0 -258
  237. data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  238. data/vendor/listen/spec/listen_spec.rb +0 -67
  239. data/vendor/listen/spec/spec_helper.rb +0 -25
  240. data/vendor/listen/spec/support/adapter_helper.rb +0 -666
  241. data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
  242. data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  243. data/vendor/listen/spec/support/listeners_helper.rb +0 -179
  244. data/vendor/listen/spec/support/platform_helper.rb +0 -15
data/Rakefile DELETED
@@ -1,424 +0,0 @@
1
- require 'rubygems/package'
2
-
3
- # ----- Utility Functions -----
4
-
5
- def scope(path)
6
- File.join(File.dirname(__FILE__), path)
7
- end
8
-
9
- # ----- Default: Testing ------
10
-
11
- task :default => :test
12
-
13
- require 'rake/testtask'
14
-
15
- desc "Run all tests"
16
- task :test => ["test:ruby", "test:spec"]
17
-
18
- namespace :test do
19
- desc "Run the ruby tests (without sass-spec)"
20
- Rake::TestTask.new("ruby") do |t|
21
- t.libs << 'test'
22
- test_files = FileList[scope('test/**/*_test.rb')]
23
- test_files.exclude(scope('test/rails/*'))
24
- test_files.exclude(scope('test/plugins/*'))
25
- t.test_files = test_files
26
- t.warning = true
27
- t.verbose = true
28
- end
29
-
30
- desc "Run sass-spec tests against the local code."
31
- task :spec do
32
- require "yaml"
33
- sass_spec_options = YAML.load_file(scope("test/sass-spec.yml"))
34
- enabled = sass_spec_options.delete(:enabled)
35
- unless enabled
36
- puts "SassSpec tests are disabled."
37
- next
38
- end
39
- if ruby_version_at_least?("1.9.2")
40
- old_load_path = $:.dup
41
- begin
42
- $:.unshift(File.join(File.dirname(__FILE__), "lib"))
43
- begin
44
- require 'sass_spec'
45
- rescue LoadError
46
- puts "You probably forgot to run: bundle exec rake"
47
- raise
48
- end
49
- default_options = {
50
- :spec_directory => SassSpec::SPEC_DIR,
51
- :engine_adapter => SassEngineAdapter.new,
52
- :generate => false,
53
- :tap => false,
54
- :skip => false,
55
- :verbose => false,
56
- :filter => "",
57
- :limit => -1,
58
- :unexpected_pass => false,
59
- :nuke => false,
60
- }
61
- SassSpec::Runner.new(default_options.merge(sass_spec_options)).run || exit(1)
62
- ensure
63
- $:.replace(old_load_path)
64
- end
65
- else
66
- "Skipping sass-spec on ruby versions less than 1.9.2"
67
- end
68
- end
69
- end
70
-
71
- # ----- Code Style Enforcement -----
72
-
73
- def ruby_version_at_least?(version_string)
74
- ruby_version = Gem::Version.new(RUBY_VERSION.dup)
75
- version = Gem::Version.new(version_string)
76
- ruby_version >= version
77
- end
78
-
79
- if ruby_version_at_least?("2.2.0") &&
80
- (ENV.has_key?("RUBOCOP") && ENV["RUBOCOP"] == "true" ||
81
- !(ENV.has_key?("RUBOCOP") || ENV.has_key?("TEST")))
82
- require 'rubocop/rake_task'
83
- RuboCop = Rubocop unless defined?(RuboCop)
84
- RuboCop::RakeTask.new do |t|
85
- t.patterns = FileList["lib/**/*"]
86
- end
87
- else
88
- task :rubocop do
89
- puts "Skipping rubocop style check."
90
- next if ENV.has_key?("RUBOCOP") && ENV["RUBOCOP"] != "true"
91
- puts "Passing this check is required in order for your patch to be accepted."
92
- puts "Use Ruby 2.2 or greater and then run the style check with: rake rubocop"
93
- end
94
- end
95
-
96
- task :test => :rubocop
97
-
98
- # ----- Packaging -----
99
-
100
- # Don't use Rake::GemPackageTast because we want prerequisites to run
101
- # before we load the gemspec.
102
- desc "Build all the packages."
103
- task :package => [:revision_file, :date_file, :submodules, :permissions] do
104
- version = get_version
105
- File.open(scope('VERSION'), 'w') {|f| f.puts(version)}
106
- load scope('sass.gemspec')
107
- Gem::Package.build(SASS_GEMSPEC)
108
- sh %{git checkout VERSION}
109
-
110
- pkg = "#{SASS_GEMSPEC.name}-#{SASS_GEMSPEC.version}"
111
- mkdir_p "pkg"
112
- verbose(true) {mv "#{pkg}.gem", "pkg/#{pkg}.gem"}
113
-
114
- sh %{rm -f pkg/#{pkg}.tar.gz}
115
- verbose(false) {SASS_GEMSPEC.files.each {|f| sh %{tar rf pkg/#{pkg}.tar #{f}}}}
116
- sh %{gzip pkg/#{pkg}.tar}
117
- end
118
-
119
- task :permissions do
120
- sh %{chmod -R a+rx bin}
121
- sh %{chmod -R a+r .}
122
- require 'shellwords'
123
- Dir.glob('test/**/*_test.rb') do |file|
124
- next if file =~ %r{^test/haml/spec/}
125
- sh %{chmod a+rx #{file}}
126
- end
127
- end
128
-
129
- task :revision_file do
130
- require scope('lib/sass')
131
-
132
- release = Rake.application.top_level_tasks.include?('release') || File.exist?(scope('EDGE_GEM_VERSION'))
133
- if Sass.version[:rev] && !release
134
- File.open(scope('REVISION'), 'w') { |f| f.puts Sass.version[:rev] }
135
- elsif release
136
- File.open(scope('REVISION'), 'w') { |f| f.puts "(release)" }
137
- else
138
- File.open(scope('REVISION'), 'w') { |f| f.puts "(unknown)" }
139
- end
140
- end
141
-
142
- task :date_file do
143
- File.open(scope('VERSION_DATE'), 'w') do |f|
144
- f.puts Time.now.utc.strftime('%d %B %Y %T %Z')
145
- end
146
- end
147
-
148
- # We also need to get rid of this file after packaging.
149
- at_exit do
150
- File.delete(scope('REVISION')) rescue nil
151
- File.delete(scope('VERSION_DATE')) rescue nil
152
- end
153
-
154
- desc "Install Sass as a gem. Use SUDO=1 to install with sudo."
155
- task :install => [:package] do
156
- gem = RUBY_PLATFORM =~ /java/ ? 'jgem' : 'gem'
157
- sh %{#{'sudo ' if ENV["SUDO"]}#{gem} install --no-ri pkg/sass-#{get_version}}
158
- end
159
-
160
- desc "Release a new Sass package to RubyGems.org."
161
- task :release => [:check_release, :package] do
162
- version = File.read(scope("VERSION")).strip
163
- sh %{gem push pkg/sass-#{version}.gem}
164
- end
165
-
166
- # Ensures that the VERSION file has been updated for a new release.
167
- task :check_release do
168
- version = File.read(scope("VERSION")).strip
169
- raise "There have been changes since current version (#{version})" if changed_since?(version)
170
- raise "VERSION_NAME must not be 'Bleeding Edge'" if File.read(scope("VERSION_NAME")) == "Bleeding Edge"
171
- end
172
-
173
- # Reads a password from the command line.
174
- #
175
- # @param name [String] The prompt to use to read the password
176
- def read_password(prompt)
177
- require 'readline'
178
- system "stty -echo"
179
- Readline.readline("#{prompt}: ").strip
180
- ensure
181
- system "stty echo"
182
- puts
183
- end
184
-
185
- # Returns whether or not the repository, or specific files,
186
- # has/have changed since a given revision.
187
- #
188
- # @param rev [String] The revision to check against
189
- # @param files [Array<String>] The files to check.
190
- # If this is empty, checks the entire repository
191
- def changed_since?(rev, *files)
192
- IO.popen("git diff --exit-code #{rev} #{files.join(' ')}") {}
193
- return !$?.success?
194
- end
195
-
196
- task :submodules do
197
- if File.exist?(File.dirname(__FILE__) + "/.git")
198
- sh %{git submodule sync}
199
- sh %{git submodule update --init}
200
- elsif !File.exist?(File.dirname(__FILE__) + "/vendor/listen/lib")
201
- warn <<WARN
202
- WARNING: vendor/listen doesn't exist, and this isn't a git repository so
203
- I can't get it automatically!
204
- WARN
205
- end
206
- end
207
-
208
- task :release_edge do
209
- ensure_git_cleanup do
210
- puts "#{'=' * 50} Running rake release_edge"
211
-
212
- sh %{git checkout master}
213
- sh %{git reset --hard origin/master}
214
- sh %{rake package}
215
- version = get_version
216
- if version.include?('.rc.')
217
- puts "#{'=' * 20} Not releasing edge gem for RC version"
218
- next
219
- end
220
-
221
- sh %{gem push pkg/sass-#{version}.gem}
222
- end
223
- end
224
-
225
- # Get the version string. If this is being installed from Git,
226
- # this includes the proper prerelease version.
227
- def get_version
228
- written_version = File.read(scope('VERSION').strip)
229
- return written_version unless File.exist?(scope('.git'))
230
-
231
- # Get the current master branch version
232
- version = written_version.split('.')
233
- version.map! {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
234
- return written_version unless version.size == 5 && version[3] == "alpha" # prerelease
235
-
236
- return written_version if (commit_count = `git log --pretty=oneline HEAD ^stable | wc -l`).empty?
237
- version[4] = commit_count.strip
238
- version.join('.')
239
- end
240
-
241
- task :watch_for_update do
242
- sh %{ruby extra/update_watch.rb}
243
- end
244
-
245
- # ----- Documentation -----
246
-
247
- task :rdoc do
248
- puts '=' * 100, <<END, '=' * 100
249
- Sass uses the YARD documentation system (http://github.com/lsegal/yard).
250
- Install the yard gem and then run "rake doc".
251
- END
252
- end
253
-
254
- begin
255
- require 'yard'
256
-
257
- namespace :doc do
258
- task :sass do
259
- require scope('lib/sass')
260
- Dir[scope("yard/default/**/*.sass")].each do |sass|
261
- File.open(sass.gsub(/sass$/, 'css'), 'w') do |f|
262
- f.write(Sass::Engine.new(File.read(sass)).render)
263
- end
264
- end
265
- end
266
-
267
- desc "List all undocumented methods and classes."
268
- task :undocumented do
269
- opts = ENV["YARD_OPTS"] || ""
270
- ENV["YARD_OPTS"] = opts.dup + <<OPTS
271
- --list --tag comment --hide-tag comment --query "
272
- object.docstring.blank? &&
273
- !(object.type == :method && object.is_alias?)"
274
- OPTS
275
- Rake::Task['yard'].execute
276
- end
277
- end
278
-
279
- YARD::Rake::YardocTask.new do |t|
280
- t.files = FileList.new(scope('lib/**/*.rb')) do |list|
281
- list.exclude('lib/sass/plugin/merb.rb')
282
- list.exclude('lib/sass/plugin/rails.rb')
283
- end.to_a
284
- t.options << '--incremental' if Rake.application.top_level_tasks.include?('redoc')
285
- t.options += FileList.new(scope('yard/*.rb')).to_a.map {|f| ['-e', f]}.flatten
286
- files = FileList.new(scope('doc-src/*')).to_a.sort_by {|s| s.size} + %w[MIT-LICENSE VERSION]
287
- t.options << '--files' << files.join(',')
288
- t.options << '--template-path' << scope('yard')
289
- t.options << '--title' << ENV["YARD_TITLE"] if ENV["YARD_TITLE"]
290
-
291
- t.before = lambda do
292
- if ENV["YARD_OPTS"]
293
- require 'shellwords'
294
- t.options.concat(Shellwords.shellwords(ENV["YARD_OPTS"]))
295
- end
296
- end
297
- end
298
- Rake::Task['yard'].prerequisites.insert(0, 'doc:sass')
299
- Rake::Task['yard'].instance_variable_set('@comment', nil)
300
-
301
- desc "Generate Documentation"
302
- task :doc => :yard
303
- task :redoc => :yard
304
- rescue LoadError
305
- desc "Generate Documentation"
306
- task :doc => :rdoc
307
- task :yard => :rdoc
308
- end
309
-
310
- task :pages do
311
- ensure_git_cleanup do
312
- puts "#{'=' * 50} Running rake pages"
313
- sh %{git checkout sass-pages}
314
- sh %{git reset --hard origin/sass-pages}
315
-
316
- Dir.chdir("/var/www/sass-pages") do
317
- sh %{git fetch origin}
318
-
319
- sh %{git checkout stable}
320
- sh %{git reset --hard origin/stable}
321
-
322
- sh %{git checkout sass-pages}
323
- sh %{git reset --hard origin/sass-pages}
324
- sh %{rake build --trace}
325
- sh %{mkdir -p tmp}
326
- sh %{touch tmp/restart.txt}
327
- end
328
- end
329
- end
330
-
331
- # ----- Coverage -----
332
-
333
- begin
334
- require 'rcov/rcovtask'
335
-
336
- Rcov::RcovTask.new do |t|
337
- t.test_files = FileList[scope('test/**/*_test.rb')]
338
- t.rcov_opts << '-x' << '"^\/"'
339
- if ENV['NON_NATIVE']
340
- t.rcov_opts << "--no-rcovrt"
341
- end
342
- t.verbose = true
343
- end
344
- rescue LoadError; end
345
-
346
- # ----- Profiling -----
347
-
348
- begin
349
- require 'ruby-prof'
350
-
351
- desc <<END
352
- Run a profile of sass.
353
- TIMES=n sets the number of runs. Defaults to 1000.
354
- FILE=str sets the file to profile. Defaults to 'complex'.
355
- OUTPUT=str sets the ruby-prof output format.
356
- Can be Flat, CallInfo, or Graph. Defaults to Flat. Defaults to Flat.
357
- END
358
- task :profile do
359
- times = (ENV['TIMES'] || '1000').to_i
360
- file = ENV['FILE']
361
-
362
- require 'lib/sass'
363
-
364
- file = File.read(scope("test/sass/templates/#{file || 'complex'}.sass"))
365
- result = RubyProf.profile { times.times { Sass::Engine.new(file).render } }
366
-
367
- RubyProf.const_get("#{(ENV['OUTPUT'] || 'Flat').capitalize}Printer").new(result).print
368
- end
369
- rescue LoadError; end
370
-
371
- # ----- Handling Updates -----
372
-
373
- def email_on_error
374
- yield
375
- rescue Exception => e
376
- IO.popen("sendmail nex342@gmail.com", "w") do |sm|
377
- sm << "From: nex3@nex-3.com\n" <<
378
- "To: nex342@gmail.com\n" <<
379
- "Subject: Exception when running rake #{Rake.application.top_level_tasks.join(', ')}\n" <<
380
- e.message << "\n\n" <<
381
- e.backtrace.join("\n")
382
- end
383
- ensure
384
- raise e if e
385
- end
386
-
387
- def ensure_git_cleanup
388
- email_on_error {yield}
389
- ensure
390
- sh %{git reset --hard HEAD}
391
- sh %{git clean -xdf}
392
- sh %{git checkout master}
393
- end
394
-
395
- task :handle_update do
396
- email_on_error do
397
- unless ENV["REF"] =~ %r{^refs/heads/(master|stable|sass-pages)$}
398
- puts "#{'=' * 20} Ignoring rake handle_update REF=#{ENV["REF"].inspect}"
399
- next
400
- end
401
- branch = $1
402
-
403
- puts
404
- puts
405
- puts '=' * 150
406
- puts "Running rake handle_update REF=#{ENV["REF"].inspect}"
407
-
408
- sh %{git fetch origin}
409
- sh %{git checkout stable}
410
- sh %{git reset --hard origin/stable}
411
- sh %{git checkout master}
412
- sh %{git reset --hard origin/master}
413
-
414
- case branch
415
- when "master"
416
- sh %{rake release_edge --trace}
417
- when "stable", "sass-pages"
418
- sh %{rake pages --trace}
419
- end
420
-
421
- puts 'Done running handle_update'
422
- puts '=' * 150
423
- end
424
- end
@@ -1,52 +0,0 @@
1
- module Sass
2
- module Script
3
- # An object tracking whether a warning has been emitted for a given script
4
- # tree.
5
- #
6
- # This is shared among all objects in a script tree. Whenever any of those
7
- # objects encounters a situation in which it wouldn't produce semantically
8
- # identical CSS to its input, it calls \{#warn!\}. The first time \{#warn!}
9
- # is called for a given warning object, it prints a deprecation warning.
10
- class CssVariableWarning
11
- def initialize
12
- @warned = false
13
- @value = nil
14
- end
15
-
16
- # Sets the root of the script tree that this warning refers to.
17
- #
18
- # @param value [Sass::Script::Tree::Node]
19
- def value=(value)
20
- warn_called = @warned && !@value
21
- @value = value
22
- print_warning if warn_called
23
- end
24
-
25
- # The first time this is called, it prints a deprecation warning.
26
- #
27
- # This may be called before \{#value=}. If it is, the warning is emitted
28
- # once the script tree is set.
29
- def warn!
30
- return if @warned
31
- @warned = true
32
- return unless @value
33
-
34
- print_warning
35
- end
36
-
37
- private
38
-
39
- # Prints this node's warning.
40
- def print_warning
41
- of_filename = " of #{@value.filename}" if @value.filename
42
- Sass::Util.sass_warn(
43
- "DEPRECATION WARNING on line #{@value.line}#{of_filename}:\n" +
44
- "Sass 3.6 will change the way CSS variables are parsed. Instead of being parsed as\n" +
45
- "normal properties, they will not allow any Sass-specific behavior other than \#{}.\n" +
46
- "For forwards-compatibility, use \#{}:\n" +
47
- "\n" +
48
- " --variable: \#{#{@value.to_sass}};")
49
- end
50
- end
51
- end
52
- end
@@ -1,19 +0,0 @@
1
- module Sass
2
- module Util
3
- # Ruby 1.8 doesn't support an actual Random class with a settable seed.
4
- class CrossPlatformRandom
5
- def initialize(seed = nil)
6
- if Sass::Util.ruby1_8?
7
- srand(seed) if seed
8
- else
9
- @random = seed ? ::Random.new(seed) : ::Random.new
10
- end
11
- end
12
-
13
- def rand(*args)
14
- return @random.rand(*args) if @random
15
- Kernel.rand(*args)
16
- end
17
- end
18
- end
19
- end
@@ -1,192 +0,0 @@
1
- # Copyright (c) 2005-2013 David Heinemeier Hansson
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.
21
-
22
- # This class was copied from an old version of ActiveSupport.
23
- class OrderedHash < ::Hash
24
- # In MRI the Hash class is core and written in C. In particular, methods are
25
- # programmed with explicit C function calls and polymorphism is not honored.
26
- #
27
- # For example, []= is crucial in this implementation to maintain the @keys
28
- # array but hash.c invokes rb_hash_aset() originally. This prevents method
29
- # reuse through inheritance and forces us to reimplement stuff.
30
- #
31
- # For instance, we cannot use the inherited #merge! because albeit the algorithm
32
- # itself would work, our []= is not being called at all by the C code.
33
-
34
- def initialize(*args)
35
- super
36
- @keys = []
37
- end
38
-
39
- def self.[](*args)
40
- ordered_hash = new
41
-
42
- if args.length == 1 && args.first.is_a?(Array)
43
- args.first.each do |key_value_pair|
44
- next unless key_value_pair.is_a?(Array)
45
- ordered_hash[key_value_pair[0]] = key_value_pair[1]
46
- end
47
-
48
- return ordered_hash
49
- end
50
-
51
- unless args.size.even?
52
- raise ArgumentError.new("odd number of arguments for Hash")
53
- end
54
-
55
- args.each_with_index do |val, ind|
56
- next if ind.odd?
57
- ordered_hash[val] = args[ind + 1]
58
- end
59
-
60
- ordered_hash
61
- end
62
-
63
- def initialize_copy(other)
64
- super
65
- # make a deep copy of keys
66
- @keys = other.keys
67
- end
68
-
69
- def []=(key, value)
70
- @keys << key unless has_key?(key)
71
- super
72
- end
73
-
74
- def delete(key)
75
- if has_key? key
76
- index = @keys.index(key)
77
- @keys.delete_at index
78
- end
79
- super
80
- end
81
-
82
- def delete_if
83
- super
84
- sync_keys!
85
- self
86
- end
87
-
88
- def reject!
89
- super
90
- sync_keys!
91
- self
92
- end
93
-
94
- def reject
95
- dup.reject! {|h, k| yield h, k}
96
- end
97
-
98
- def keys
99
- @keys.dup
100
- end
101
-
102
- def values
103
- @keys.map {|key| self[key]}
104
- end
105
-
106
- def to_hash
107
- self
108
- end
109
-
110
- def to_a
111
- @keys.map {|key| [key, self[key]]}
112
- end
113
-
114
- def each_key
115
- return to_enum(:each_key) unless block_given?
116
- @keys.each {|key| yield key}
117
- self
118
- end
119
-
120
- def each_value
121
- return to_enum(:each_value) unless block_given?
122
- @keys.each {|key| yield self[key]}
123
- self
124
- end
125
-
126
- def each
127
- return to_enum(:each) unless block_given?
128
- @keys.each {|key| yield [key, self[key]]}
129
- self
130
- end
131
-
132
- def each_pair
133
- return to_enum(:each_pair) unless block_given?
134
- @keys.each {|key| yield key, self[key]}
135
- self
136
- end
137
-
138
- alias_method :select, :find_all
139
-
140
- def clear
141
- super
142
- @keys.clear
143
- self
144
- end
145
-
146
- def shift
147
- k = @keys.first
148
- v = delete(k)
149
- [k, v]
150
- end
151
-
152
- def merge!(other_hash)
153
- if block_given?
154
- other_hash.each {|k, v| self[k] = key?(k) ? yield(k, self[k], v) : v}
155
- else
156
- other_hash.each {|k, v| self[k] = v}
157
- end
158
- self
159
- end
160
-
161
- alias_method :update, :merge!
162
-
163
- def merge(other_hash)
164
- if block_given?
165
- dup.merge!(other_hash) {|k, v1, v2| yield k, v1, v2}
166
- else
167
- dup.merge!(other_hash)
168
- end
169
- end
170
-
171
- # When replacing with another hash, the initial order of our keys must come from the other hash --
172
- # ordered or not.
173
- def replace(other)
174
- super
175
- @keys = other.keys
176
- self
177
- end
178
-
179
- def invert
180
- OrderedHash[to_a.map! {|key_value_pair| key_value_pair.reverse}]
181
- end
182
-
183
- def inspect
184
- "#<OrderedHash #{super}>"
185
- end
186
-
187
- private
188
-
189
- def sync_keys!
190
- @keys.delete_if {|k| !has_key?(k)}
191
- end
192
- end