sass 3.4.25 → 3.7.4

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