haml 3.0.21 → 3.0.22

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of haml might be problematic. Click here for more details.

Files changed (195) hide show
  1. data/Rakefile +1 -41
  2. data/VERSION +1 -1
  3. data/lib/haml/precompiler.rb +8 -6
  4. data/lib/haml/template/plugin.rb +16 -6
  5. data/lib/sass/less.rb +31 -12
  6. data/lib/sass/script/funcall.rb +2 -1
  7. data/lib/sass/script/operation.rb +10 -5
  8. data/lib/sass/script/parser.rb +9 -0
  9. data/test/haml/engine_test.rb +25 -0
  10. data/test/sass/less_conversion_test.rb +24 -3
  11. data/test/sass/script_conversion_test.rb +60 -0
  12. metadata +243 -426
  13. data/vendor/sass/CONTRIBUTING +0 -3
  14. data/vendor/sass/MIT-LICENSE +0 -20
  15. data/vendor/sass/README.md +0 -201
  16. data/vendor/sass/Rakefile +0 -363
  17. data/vendor/sass/TODO +0 -39
  18. data/vendor/sass/VERSION +0 -1
  19. data/vendor/sass/VERSION_NAME +0 -1
  20. data/vendor/sass/bin/css2sass +0 -13
  21. data/vendor/sass/bin/sass +0 -8
  22. data/vendor/sass/bin/sass-convert +0 -7
  23. data/vendor/sass/doc-src/FAQ.md +0 -35
  24. data/vendor/sass/doc-src/INDENTED_SYNTAX.md +0 -210
  25. data/vendor/sass/doc-src/SASS_CHANGELOG.md +0 -1870
  26. data/vendor/sass/doc-src/SASS_REFERENCE.md +0 -1713
  27. data/vendor/sass/doc-src/SCSS_FOR_SASS_USERS.md +0 -155
  28. data/vendor/sass/ext/extconf.rb +0 -10
  29. data/vendor/sass/extra/update_watch.rb +0 -13
  30. data/vendor/sass/init.rb +0 -18
  31. data/vendor/sass/lib/sass.rb +0 -71
  32. data/vendor/sass/lib/sass/cache_store.rb +0 -208
  33. data/vendor/sass/lib/sass/callbacks.rb +0 -66
  34. data/vendor/sass/lib/sass/css.rb +0 -294
  35. data/vendor/sass/lib/sass/engine.rb +0 -792
  36. data/vendor/sass/lib/sass/environment.rb +0 -143
  37. data/vendor/sass/lib/sass/error.rb +0 -201
  38. data/vendor/sass/lib/sass/exec.rb +0 -619
  39. data/vendor/sass/lib/sass/importers.rb +0 -22
  40. data/vendor/sass/lib/sass/importers/base.rb +0 -138
  41. data/vendor/sass/lib/sass/importers/filesystem.rb +0 -121
  42. data/vendor/sass/lib/sass/less.rb +0 -363
  43. data/vendor/sass/lib/sass/plugin.rb +0 -126
  44. data/vendor/sass/lib/sass/plugin/compiler.rb +0 -346
  45. data/vendor/sass/lib/sass/plugin/configuration.rb +0 -123
  46. data/vendor/sass/lib/sass/plugin/generic.rb +0 -15
  47. data/vendor/sass/lib/sass/plugin/merb.rb +0 -48
  48. data/vendor/sass/lib/sass/plugin/rack.rb +0 -47
  49. data/vendor/sass/lib/sass/plugin/rails.rb +0 -41
  50. data/vendor/sass/lib/sass/plugin/staleness_checker.rb +0 -145
  51. data/vendor/sass/lib/sass/railtie.rb +0 -8
  52. data/vendor/sass/lib/sass/repl.rb +0 -58
  53. data/vendor/sass/lib/sass/root.rb +0 -7
  54. data/vendor/sass/lib/sass/script.rb +0 -63
  55. data/vendor/sass/lib/sass/script/bool.rb +0 -18
  56. data/vendor/sass/lib/sass/script/color.rb +0 -491
  57. data/vendor/sass/lib/sass/script/css_lexer.rb +0 -29
  58. data/vendor/sass/lib/sass/script/css_parser.rb +0 -31
  59. data/vendor/sass/lib/sass/script/funcall.rb +0 -79
  60. data/vendor/sass/lib/sass/script/functions.rb +0 -852
  61. data/vendor/sass/lib/sass/script/interpolation.rb +0 -70
  62. data/vendor/sass/lib/sass/script/lexer.rb +0 -337
  63. data/vendor/sass/lib/sass/script/literal.rb +0 -236
  64. data/vendor/sass/lib/sass/script/node.rb +0 -101
  65. data/vendor/sass/lib/sass/script/number.rb +0 -423
  66. data/vendor/sass/lib/sass/script/operation.rb +0 -92
  67. data/vendor/sass/lib/sass/script/parser.rb +0 -392
  68. data/vendor/sass/lib/sass/script/string.rb +0 -67
  69. data/vendor/sass/lib/sass/script/string_interpolation.rb +0 -93
  70. data/vendor/sass/lib/sass/script/unary_operation.rb +0 -57
  71. data/vendor/sass/lib/sass/script/variable.rb +0 -48
  72. data/vendor/sass/lib/sass/scss.rb +0 -17
  73. data/vendor/sass/lib/sass/scss/css_parser.rb +0 -51
  74. data/vendor/sass/lib/sass/scss/parser.rb +0 -838
  75. data/vendor/sass/lib/sass/scss/rx.rb +0 -126
  76. data/vendor/sass/lib/sass/scss/sass_parser.rb +0 -11
  77. data/vendor/sass/lib/sass/scss/script_lexer.rb +0 -15
  78. data/vendor/sass/lib/sass/scss/script_parser.rb +0 -25
  79. data/vendor/sass/lib/sass/scss/static_parser.rb +0 -40
  80. data/vendor/sass/lib/sass/selector.rb +0 -361
  81. data/vendor/sass/lib/sass/selector/abstract_sequence.rb +0 -62
  82. data/vendor/sass/lib/sass/selector/comma_sequence.rb +0 -82
  83. data/vendor/sass/lib/sass/selector/sequence.rb +0 -236
  84. data/vendor/sass/lib/sass/selector/simple.rb +0 -113
  85. data/vendor/sass/lib/sass/selector/simple_sequence.rb +0 -135
  86. data/vendor/sass/lib/sass/shared.rb +0 -78
  87. data/vendor/sass/lib/sass/tree/comment_node.rb +0 -128
  88. data/vendor/sass/lib/sass/tree/debug_node.rb +0 -36
  89. data/vendor/sass/lib/sass/tree/directive_node.rb +0 -75
  90. data/vendor/sass/lib/sass/tree/extend_node.rb +0 -65
  91. data/vendor/sass/lib/sass/tree/for_node.rb +0 -67
  92. data/vendor/sass/lib/sass/tree/if_node.rb +0 -81
  93. data/vendor/sass/lib/sass/tree/import_node.rb +0 -124
  94. data/vendor/sass/lib/sass/tree/mixin_def_node.rb +0 -60
  95. data/vendor/sass/lib/sass/tree/mixin_node.rb +0 -123
  96. data/vendor/sass/lib/sass/tree/node.rb +0 -490
  97. data/vendor/sass/lib/sass/tree/prop_node.rb +0 -220
  98. data/vendor/sass/lib/sass/tree/root_node.rb +0 -125
  99. data/vendor/sass/lib/sass/tree/rule_node.rb +0 -273
  100. data/vendor/sass/lib/sass/tree/variable_node.rb +0 -39
  101. data/vendor/sass/lib/sass/tree/warn_node.rb +0 -42
  102. data/vendor/sass/lib/sass/tree/while_node.rb +0 -48
  103. data/vendor/sass/lib/sass/util.rb +0 -700
  104. data/vendor/sass/lib/sass/util/subset_map.rb +0 -101
  105. data/vendor/sass/lib/sass/version.rb +0 -109
  106. data/vendor/sass/rails/init.rb +0 -1
  107. data/vendor/sass/sass.gemspec +0 -32
  108. data/vendor/sass/test/sass/cache_test.rb +0 -74
  109. data/vendor/sass/test/sass/callbacks_test.rb +0 -61
  110. data/vendor/sass/test/sass/conversion_test.rb +0 -1210
  111. data/vendor/sass/test/sass/css2sass_test.rb +0 -364
  112. data/vendor/sass/test/sass/data/hsl-rgb.txt +0 -319
  113. data/vendor/sass/test/sass/engine_test.rb +0 -2283
  114. data/vendor/sass/test/sass/extend_test.rb +0 -1348
  115. data/vendor/sass/test/sass/functions_test.rb +0 -565
  116. data/vendor/sass/test/sass/importer_test.rb +0 -104
  117. data/vendor/sass/test/sass/less_conversion_test.rb +0 -632
  118. data/vendor/sass/test/sass/mock_importer.rb +0 -49
  119. data/vendor/sass/test/sass/more_results/more1.css +0 -9
  120. data/vendor/sass/test/sass/more_results/more1_with_line_comments.css +0 -26
  121. data/vendor/sass/test/sass/more_results/more_import.css +0 -29
  122. data/vendor/sass/test/sass/more_templates/_more_partial.sass +0 -2
  123. data/vendor/sass/test/sass/more_templates/more1.sass +0 -23
  124. data/vendor/sass/test/sass/more_templates/more_import.sass +0 -11
  125. data/vendor/sass/test/sass/plugin_test.rb +0 -430
  126. data/vendor/sass/test/sass/results/alt.css +0 -4
  127. data/vendor/sass/test/sass/results/basic.css +0 -9
  128. data/vendor/sass/test/sass/results/compact.css +0 -5
  129. data/vendor/sass/test/sass/results/complex.css +0 -86
  130. data/vendor/sass/test/sass/results/compressed.css +0 -1
  131. data/vendor/sass/test/sass/results/expanded.css +0 -19
  132. data/vendor/sass/test/sass/results/import.css +0 -31
  133. data/vendor/sass/test/sass/results/line_numbers.css +0 -49
  134. data/vendor/sass/test/sass/results/mixins.css +0 -95
  135. data/vendor/sass/test/sass/results/multiline.css +0 -24
  136. data/vendor/sass/test/sass/results/nested.css +0 -22
  137. data/vendor/sass/test/sass/results/options.css +0 -1
  138. data/vendor/sass/test/sass/results/parent_ref.css +0 -13
  139. data/vendor/sass/test/sass/results/script.css +0 -16
  140. data/vendor/sass/test/sass/results/scss_import.css +0 -31
  141. data/vendor/sass/test/sass/results/scss_importee.css +0 -2
  142. data/vendor/sass/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  143. data/vendor/sass/test/sass/results/subdir/subdir.css +0 -3
  144. data/vendor/sass/test/sass/results/units.css +0 -11
  145. data/vendor/sass/test/sass/results/warn.css +0 -0
  146. data/vendor/sass/test/sass/results/warn_imported.css +0 -0
  147. data/vendor/sass/test/sass/script_conversion_test.rb +0 -254
  148. data/vendor/sass/test/sass/script_test.rb +0 -470
  149. data/vendor/sass/test/sass/scss/css_test.rb +0 -897
  150. data/vendor/sass/test/sass/scss/rx_test.rb +0 -156
  151. data/vendor/sass/test/sass/scss/scss_test.rb +0 -1088
  152. data/vendor/sass/test/sass/scss/test_helper.rb +0 -37
  153. data/vendor/sass/test/sass/templates/_partial.sass +0 -2
  154. data/vendor/sass/test/sass/templates/alt.sass +0 -16
  155. data/vendor/sass/test/sass/templates/basic.sass +0 -23
  156. data/vendor/sass/test/sass/templates/bork1.sass +0 -2
  157. data/vendor/sass/test/sass/templates/bork2.sass +0 -2
  158. data/vendor/sass/test/sass/templates/bork3.sass +0 -2
  159. data/vendor/sass/test/sass/templates/bork4.sass +0 -2
  160. data/vendor/sass/test/sass/templates/compact.sass +0 -17
  161. data/vendor/sass/test/sass/templates/complex.sass +0 -305
  162. data/vendor/sass/test/sass/templates/compressed.sass +0 -15
  163. data/vendor/sass/test/sass/templates/expanded.sass +0 -17
  164. data/vendor/sass/test/sass/templates/import.sass +0 -12
  165. data/vendor/sass/test/sass/templates/importee.less +0 -2
  166. data/vendor/sass/test/sass/templates/importee.sass +0 -19
  167. data/vendor/sass/test/sass/templates/line_numbers.sass +0 -13
  168. data/vendor/sass/test/sass/templates/mixin_bork.sass +0 -5
  169. data/vendor/sass/test/sass/templates/mixins.sass +0 -76
  170. data/vendor/sass/test/sass/templates/multiline.sass +0 -20
  171. data/vendor/sass/test/sass/templates/nested.sass +0 -25
  172. data/vendor/sass/test/sass/templates/nested_bork1.sass +0 -2
  173. data/vendor/sass/test/sass/templates/nested_bork2.sass +0 -2
  174. data/vendor/sass/test/sass/templates/nested_bork3.sass +0 -2
  175. data/vendor/sass/test/sass/templates/nested_bork4.sass +0 -2
  176. data/vendor/sass/test/sass/templates/nested_mixin_bork.sass +0 -6
  177. data/vendor/sass/test/sass/templates/options.sass +0 -2
  178. data/vendor/sass/test/sass/templates/parent_ref.sass +0 -25
  179. data/vendor/sass/test/sass/templates/script.sass +0 -101
  180. data/vendor/sass/test/sass/templates/scss_import.scss +0 -11
  181. data/vendor/sass/test/sass/templates/scss_importee.scss +0 -1
  182. data/vendor/sass/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  183. data/vendor/sass/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  184. data/vendor/sass/test/sass/templates/subdir/subdir.sass +0 -6
  185. data/vendor/sass/test/sass/templates/units.sass +0 -11
  186. data/vendor/sass/test/sass/templates/warn.sass +0 -3
  187. data/vendor/sass/test/sass/templates/warn_imported.sass +0 -4
  188. data/vendor/sass/test/sass/test_helper.rb +0 -8
  189. data/vendor/sass/test/sass/util/subset_map_test.rb +0 -91
  190. data/vendor/sass/test/sass/util_test.rb +0 -275
  191. data/vendor/sass/test/test_helper.rb +0 -64
  192. data/vendor/sass/yard/callbacks.rb +0 -29
  193. data/vendor/sass/yard/default/fulldoc/html/css/common.sass +0 -26
  194. data/vendor/sass/yard/default/layout/html/footer.erb +0 -12
  195. data/vendor/sass/yard/inherited_hash.rb +0 -41
@@ -1,3 +0,0 @@
1
- Contributions are welcomed. Please see the following sites for guidelines:
2
-
3
- http://sass-lang.com/development.html#contributing
@@ -1,20 +0,0 @@
1
- Copyright (c) 2006-2009 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
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.
@@ -1,201 +0,0 @@
1
- # Sass
2
-
3
- **Sass makes CSS fun again**. Sass is an extension of CSS3,
4
- adding nested rules, variables, mixins, selector inheritance, and more.
5
- It's translated to well-formatted, standard CSS
6
- using the command line tool or a web-framework plugin.
7
-
8
- Sass has two syntaxes. The new main syntax (as of Sass 3)
9
- is known as "SCSS" (for "Sassy CSS"),
10
- and is a superset of CSS3's syntax.
11
- This means that every valid CSS3 stylesheet is valid SCSS as well.
12
- SCSS files use the extension `.scss`.
13
-
14
- The second, older syntax is known as the indented syntax (or just "Sass").
15
- Inspired by Haml's terseness, it's intended for people
16
- who prefer conciseness over similarity to CSS.
17
- Instead of brackets and semicolons,
18
- it uses the indentation of lines to specify blocks.
19
- Although no longer the primary syntax,
20
- the indented syntax will continue to be supported.
21
- Files in the indented syntax use the extension `.sass`.
22
-
23
- ## Using
24
-
25
- Sass can be used from the command line
26
- or as part of a web framework.
27
- The first step is to install the gem:
28
-
29
- gem install sass
30
-
31
- After you convert some CSS to Sass, you can run
32
-
33
- sass style.scss
34
-
35
- to compile it back to CSS.
36
- For more information on these commands, check out
37
-
38
- sass --help
39
-
40
- To install Sass in Rails 2,
41
- just add `config.gem "sass"` to `config/environment.rb`.
42
- In Rails 3, add `gem "sass"` to your Gemfile instead.
43
- `.sass` or `.scss` files should be placed in `public/stylesheets/sass`,
44
- where they'll be automatically compiled
45
- to corresponding CSS files in `public/stylesheets` when needed
46
- (the Sass template directory is customizable...
47
- see [the Sass reference](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#template_location-option) for details).
48
-
49
- Sass can also be used with any Rack-enabled web framework.
50
- To do so, just add
51
-
52
- require 'sass/plugin/rack'
53
- use Sass::Plugin::Rack
54
-
55
- to `config.ru`.
56
- Then any Sass files in `public/stylesheets/sass`
57
- will be compiled CSS files in `public/stylesheets` on every request.
58
-
59
- To use Sass programatically,
60
- check out the [YARD documentation](http://sass-lang.com/docs/yardoc/).
61
-
62
- ## Formatting
63
-
64
- Sass is an extension of CSS
65
- that adds power and elegance to the basic language.
66
- It allows you to use [variables][vars], [nested rules][nested],
67
- [mixins][mixins], [inline imports][imports],
68
- and more, all with a fully CSS-compatible syntax.
69
- Sass helps keep large stylesheets well-organized,
70
- and get small stylesheets up and running quickly,
71
- particularly with the help of
72
- [the Compass style library](http://compass-style.org).
73
-
74
- [vars]: http://beta.sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#variables_
75
- [nested]: http://beta.sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#nested_rules_
76
- [mixins]: http://beta.sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#mixins
77
- [imports]: http://beta.sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#import
78
-
79
- Sass has two syntaxes.
80
- The one presented here, known as "SCSS" (for "Sassy CSS"),
81
- is fully CSS-compatible.
82
- The other (older) syntax, known as the indented syntax or just "Sass",
83
- is whitespace-sensitive and indentation-based.
84
- For more information, see the [reference documentation][syntax].
85
-
86
- [syntax]: http://beta.sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#syntax
87
-
88
- To run the following examples and see the CSS they produce,
89
- put them in a file called `test.scss` and run `sass test.scss`.
90
-
91
- ### Nesting
92
-
93
- Sass avoids repetition by nesting selectors within one another.
94
- The same thing works for properties.
95
-
96
- table.hl {
97
- margin: 2em 0;
98
- td.ln { text-align: right; }
99
- }
100
-
101
- li {
102
- font: {
103
- family: serif;
104
- weight: bold;
105
- size: 1.2em;
106
- }
107
- }
108
-
109
- ### Variables
110
-
111
- Use the same color all over the place?
112
- Need to do some math with height and width and text size?
113
- Sass supports variables, math operations, and many useful functions.
114
-
115
- $blue: #3bbfce;
116
- $margin: 16px;
117
-
118
- .content_navigation {
119
- border-color: $blue;
120
- color: darken($blue, 10%);
121
- }
122
-
123
- .border {
124
- padding: $margin / 2;
125
- margin: $margin / 2;
126
- border-color: $blue;
127
- }
128
-
129
- ### Mixins
130
-
131
- Even more powerful than variables,
132
- mixins allow you to re-use whole chunks of CSS,
133
- properties or selectors.
134
- You can even give them arguments.
135
-
136
- @mixin table-scaffolding {
137
- th {
138
- text-align: center;
139
- font-weight: bold;
140
- }
141
- td, th { padding: 2px; }
142
- }
143
-
144
- @mixin left($dist) {
145
- float: left;
146
- margin-left: $dist;
147
- }
148
-
149
- #data {
150
- @include left(10px);
151
- @include table-scaffolding;
152
- }
153
-
154
- A comprehensive list of features is available
155
- in the [Sass reference](http://beta.sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html).
156
-
157
- ## Executables
158
-
159
- The Sass gem includes several executables that are useful
160
- for dealing with Sass from the command line.
161
-
162
- ### `sass`
163
-
164
- The `sass` executable transforms a source Sass file into CSS.
165
- See `sass --help` for further information and options.
166
-
167
- ### `sass-convert`
168
-
169
- The `sass-convert` executable converts between CSS, Sass, and SCSS.
170
- When converting from CSS to Sass or SCSS,
171
- nesting is applied where appropriate.
172
- See `sass-convert --help` for further information and options.
173
-
174
- ## Authors
175
-
176
- Sass was envisioned by [Hampton Catlin](http://hamptoncatlin.com) (hcatlin).
177
- However, Hampton doesn't even know his way around the code anymore and now
178
- occasionally consults on the language issues. Hampton lives in Jacksonville,
179
- Florida and is the lead mobile developer for Wikimedia.
180
-
181
- [Nathan Weizenbaum](http://nex-3.com) is the primary developer and architect of
182
- Sass. His hard work has kept the project alive by endlessly answering forum
183
- posts, fixing bugs, refactoring, finding speed improvements, writing
184
- documentation, implementing new features, and getting Hampton coffee (a fitting
185
- task for a boy-genius). Nathan lives in Seattle, Washington and while not being
186
- a student at the University of Washington or working at an internship, he
187
- consults for Unspace Interactive.
188
-
189
- [Chris Eppstein](http://acts-as-architect.blogspot.com) is a core contributor to
190
- Sass and the creator of Compass, the first Sass-based framework. Chris focuses
191
- on making Sass more powerful, easy to use, and on ways to speed its adoption
192
- through the web development community. Chris lives in San Jose, California with
193
- his wife and daughter. He is the Software Architect for
194
- [Caring.com](http://caring.com), a website devoted to the 34 Million caregivers
195
- whose parents are sick or elderly, that uses Haml and Sass.
196
-
197
- If you use this software, you must pay Hampton a compliment. And
198
- buy Nathan some jelly beans. Maybe pet a kitten. Yeah. Pet that kitty.
199
-
200
- Beyond that, the implementation is licensed under the MIT License.
201
- Okay, fine, I guess that means compliments aren't __required__.
@@ -1,363 +0,0 @@
1
- # ----- Utility Functions -----
2
-
3
- def scope(path)
4
- File.join(File.dirname(__FILE__), path)
5
- end
6
-
7
- # ----- Default: Testing ------
8
-
9
- task :default => :test
10
-
11
- require 'rake/testtask'
12
-
13
- Rake::TestTask.new do |t|
14
- t.libs << 'lib'
15
- test_files = FileList[scope('test/**/*_test.rb')]
16
- test_files.exclude(scope('test/rails/*'))
17
- test_files.exclude(scope('test/plugins/*'))
18
- t.test_files = test_files
19
- t.verbose = true
20
- end
21
-
22
- # ----- Packaging -----
23
-
24
- # Don't use Rake::GemPackageTast because we want prerequisites to run
25
- # before we load the gemspec.
26
- desc "Build all the packages."
27
- task :package => [:permissions, :revision_file, :submodules] do
28
- load scope('sass.gemspec')
29
- Gem::Builder.new(SASS_GEMSPEC).build
30
- pkg = "#{SASS_GEMSPEC.name}-#{SASS_GEMSPEC.version}"
31
- mkdir_p "pkg"
32
- verbose(true) {mv "#{pkg}.gem", "pkg/#{pkg}.gem"}
33
-
34
- sh %{rm -f pkg/#{pkg}.tar.gz}
35
- verbose(false) {SASS_GEMSPEC.files.each {|f| sh %{tar rf pkg/#{pkg}.tar #{f}}}}
36
- sh %{gzip pkg/#{pkg}.tar}
37
- end
38
-
39
- task :permissions do
40
- sh %{chmod -R a+rx bin}
41
- sh %{chmod -R a+r .}
42
- require 'shellwords'
43
- Dir.glob('test/**/*_test.rb') do |file|
44
- next if file =~ %r{^test/haml/spec/}
45
- sh %{chmod a+rx #{file}}
46
- end
47
- end
48
-
49
- task :revision_file do
50
- require 'lib/sass'
51
-
52
- release = Rake.application.top_level_tasks.include?('release') || File.exist?(scope('EDGE_GEM_VERSION'))
53
- if Sass.version[:rev] && !release
54
- File.open(scope('REVISION'), 'w') { |f| f.puts Sass.version[:rev] }
55
- elsif release
56
- File.open(scope('REVISION'), 'w') { |f| f.puts "(release)" }
57
- else
58
- File.open(scope('REVISION'), 'w') { |f| f.puts "(unknown)" }
59
- end
60
- end
61
-
62
- # We also need to get rid of this file after packaging.
63
- at_exit { File.delete(scope('REVISION')) rescue nil }
64
-
65
- desc "Install Sass as a gem. Use SUDO=1 to install with sudo."
66
- task :install => [:package] do
67
- gem = RUBY_PLATFORM =~ /java/ ? 'jgem' : 'gem'
68
- sh %{#{'sudo ' if ENV["SUDO"]}#{gem} install --no-ri pkg/sass-#{File.read(scope('VERSION')).strip}}
69
- end
70
-
71
- desc "Release a new Sass package to Rubyforge."
72
- task :release => [:check_release, :package] do
73
- name = File.read(scope("VERSION_NAME")).strip
74
- version = File.read(scope("VERSION")).strip
75
- sh %{rubyforge add_release sass sass "#{name} (v#{version})" pkg/sass-#{version}.gem}
76
- sh %{rubyforge add_file sass sass "#{name} (v#{version})" pkg/sass-#{version}.tar.gz}
77
- sh %{gem push pkg/sass-#{version}.gem}
78
- end
79
-
80
- # Ensures that the VERSION file has been updated for a new release.
81
- task :check_release do
82
- version = File.read(scope("VERSION")).strip
83
- raise "There have been changes since current version (#{version})" if changed_since?(version)
84
- raise "VERSION_NAME must not be 'Bleeding Edge'" if File.read(scope("VERSION_NAME")) == "Bleeding Edge"
85
- end
86
-
87
- # Reads a password from the command line.
88
- #
89
- # @param name [String] The prompt to use to read the password
90
- def read_password(prompt)
91
- require 'readline'
92
- system "stty -echo"
93
- Readline.readline("#{prompt}: ").strip
94
- ensure
95
- system "stty echo"
96
- puts
97
- end
98
-
99
- # Returns whether or not the repository, or specific files,
100
- # has/have changed since a given revision.
101
- #
102
- # @param rev [String] The revision to check against
103
- # @param files [Array<String>] The files to check.
104
- # If this is empty, checks the entire repository
105
- def changed_since?(rev, *files)
106
- IO.popen("git diff --exit-code #{rev} #{files.join(' ')}") {}
107
- return !$?.success?
108
- end
109
-
110
- task :submodules do
111
- if File.exist?(File.dirname(__FILE__) + "/.git")
112
- sh %{git submodule sync}
113
- sh %{git submodule update --init}
114
- elsif !File.exist?(File.dirname(__FILE__) + "/vendor/fssm/lib")
115
- warn <<WARN
116
- WARNING: vendor/fssm doesn't exist, and this isn't a git repository so
117
- I can't get it automatically!
118
- WARN
119
- end
120
- end
121
-
122
- task :release_edge do
123
- ensure_git_cleanup do
124
- puts "#{'=' * 50} Running rake release_edge"
125
-
126
- sh %{git checkout edge-gem}
127
- sh %{git reset --hard origin/edge-gem}
128
- sh %{git merge origin/master}
129
-
130
- unless edge_version = bump_edge_version
131
- puts "master is already a prerelease version, no use building an edge gem"
132
- next
133
- end
134
-
135
- File.open(scope('EDGE_GEM_VERSION'), 'w') {|f| f.puts(edge_version)}
136
- sh %{git commit -m "Bump edge gem version to #{edge_version}." EDGE_GEM_VERSION}
137
- sh %{git push origin edge-gem}
138
-
139
- # Package the edge gem with the proper version
140
- File.open(scope('VERSION'), 'w') {|f| f.puts(edge_version)}
141
- sh %{rake package}
142
- sh %{git checkout VERSION}
143
-
144
- sh %{rubyforge add_release sass sass "Bleeding Edge (v#{edge_version})" pkg/sass-#{edge_version}.gem}
145
- sh %{gem push pkg/sass-#{edge_version}.gem}
146
- end
147
- end
148
-
149
- # Reads the master version and the edge gem version,
150
- # bump the latter, and return it.
151
- #
152
- # Returns nil if the current master version is already a non-alpha prerelease.
153
- def bump_edge_version
154
- # Get the current master branch version
155
- version = File.read(scope('VERSION')).strip.split('.')
156
- version.map! {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
157
- unless version.size == 5 # prerelease
158
- raise "master version #{version.join('.')} is not a prerelease version"
159
- end
160
-
161
- # Bump the edge gem version
162
- edge_version = File.read(scope('EDGE_GEM_VERSION')).strip.split('.')
163
- edge_version.map! {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
164
-
165
- if version[3] != "alpha"
166
- return
167
- elsif edge_version[0..2] != version[0..2]
168
- # A new master branch version was released, reset the edge gem version
169
- edge_version[0..2] = version[0..2]
170
- edge_version[4] = 1
171
- else
172
- # Just bump the teeny version
173
- edge_version[4] += 1
174
- end
175
-
176
- edge_version.join('.')
177
- end
178
-
179
- task :watch_for_update do
180
- sh %{ruby extra/update_watch.rb}
181
- end
182
-
183
- # ----- Documentation -----
184
-
185
- task :rdoc do
186
- puts '=' * 100, <<END, '=' * 100
187
- Sass uses the YARD documentation system (http://github.com/lsegal/yard).
188
- Install the yard gem and then run "rake doc".
189
- END
190
- end
191
-
192
- begin
193
- require 'yard'
194
-
195
- namespace :doc do
196
- task :sass do
197
- require scope('lib/sass')
198
- Dir[scope("yard/default/**/*.sass")].each do |sass|
199
- File.open(sass.gsub(/sass$/, 'css'), 'w') do |f|
200
- f.write(Sass::Engine.new(File.read(sass)).render)
201
- end
202
- end
203
- end
204
-
205
- desc "List all undocumented methods and classes."
206
- task :undocumented do
207
- opts = ENV["YARD_OPTS"] || ""
208
- ENV["YARD_OPTS"] = opts.dup + <<OPTS
209
- --list --query "
210
- object.docstring.blank? &&
211
- !(object.type == :method && object.is_alias?)"
212
- OPTS
213
- Rake::Task['yard'].execute
214
- end
215
- end
216
-
217
- YARD::Rake::YardocTask.new do |t|
218
- t.files = FileList.new(scope('lib/**/*.rb')) do |list|
219
- list.exclude('lib/sass/plugin/merb.rb')
220
- list.exclude('lib/sass/plugin/rails.rb')
221
- list.exclude('lib/sass/less.rb')
222
- end.to_a
223
- t.options << '--incremental' if Rake.application.top_level_tasks.include?('redoc')
224
- t.options += FileList.new(scope('yard/*.rb')).to_a.map {|f| ['-e', f]}.flatten
225
- files = FileList.new(scope('doc-src/*')).to_a.sort_by {|s| s.size} + %w[MIT-LICENSE VERSION]
226
- t.options << '--files' << files.join(',')
227
- t.options << '--template-path' << scope('yard')
228
- t.options << '--title' << ENV["YARD_TITLE"] if ENV["YARD_TITLE"]
229
-
230
- t.before = lambda do
231
- if ENV["YARD_OPTS"]
232
- require 'shellwords'
233
- t.options.concat(Shellwords.shellwords(ENV["YARD_OPTS"]))
234
- end
235
- end
236
- end
237
- Rake::Task['yard'].prerequisites.insert(0, 'doc:sass')
238
- Rake::Task['yard'].instance_variable_set('@comment', nil)
239
-
240
- desc "Generate Documentation"
241
- task :doc => :yard
242
- task :redoc => :yard
243
- rescue LoadError
244
- desc "Generate Documentation"
245
- task :doc => :rdoc
246
- task :yard => :rdoc
247
- end
248
-
249
- task :pages do
250
- ensure_git_cleanup do
251
- puts "#{'=' * 50} Running rake pages"
252
- sh %{git checkout sass-pages}
253
- sh %{git reset --hard origin/sass-pages}
254
-
255
- Dir.chdir("/var/www/sass-pages") do
256
- sh %{git fetch origin}
257
-
258
- sh %{git checkout stable}
259
- sh %{git reset --hard origin/stable}
260
-
261
- sh %{git checkout sass-pages}
262
- sh %{git reset --hard origin/sass-pages}
263
- sh %{rake build --trace}
264
- sh %{mkdir -p tmp}
265
- sh %{touch tmp/restart.txt}
266
- end
267
- end
268
- end
269
-
270
- # ----- Coverage -----
271
-
272
- begin
273
- require 'rcov/rcovtask'
274
-
275
- Rcov::RcovTask.new do |t|
276
- t.test_files = FileList[scope('test/**/*_test.rb')]
277
- t.rcov_opts << '-x' << '"^\/"'
278
- if ENV['NON_NATIVE']
279
- t.rcov_opts << "--no-rcovrt"
280
- end
281
- t.verbose = true
282
- end
283
- rescue LoadError; end
284
-
285
- # ----- Profiling -----
286
-
287
- begin
288
- require 'ruby-prof'
289
-
290
- desc <<END
291
- Run a profile of sass.
292
- TIMES=n sets the number of runs. Defaults to 1000.
293
- FILE=str sets the file to profile. Defaults to 'complex'.
294
- OUTPUT=str sets the ruby-prof output format.
295
- Can be Flat, CallInfo, or Graph. Defaults to Flat. Defaults to Flat.
296
- END
297
- task :profile do
298
- times = (ENV['TIMES'] || '1000').to_i
299
- file = ENV['FILE']
300
-
301
- require 'lib/sass'
302
-
303
- file = File.read(scope("test/sass/templates/#{file || 'complex'}.sass"))
304
- result = RubyProf.profile { times.times { Sass::Engine.new(file).render } }
305
-
306
- RubyProf.const_get("#{(ENV['OUTPUT'] || 'Flat').capitalize}Printer").new(result).print
307
- end
308
- rescue LoadError; end
309
-
310
- # ----- Handling Updates -----
311
-
312
- def email_on_error
313
- yield
314
- rescue Exception => e
315
- IO.popen("sendmail nex342@gmail.com", "w") do |sm|
316
- sm << "From: nex3@nex-3.com\n" <<
317
- "To: nex342@gmail.com\n" <<
318
- "Subject: Exception when running rake #{Rake.application.top_level_tasks.join(', ')}\n" <<
319
- e.message << "\n\n" <<
320
- e.backtrace.join("\n")
321
- end
322
- ensure
323
- raise e if e
324
- end
325
-
326
- def ensure_git_cleanup
327
- email_on_error {yield}
328
- ensure
329
- sh %{git reset --hard HEAD}
330
- sh %{git clean -xdf}
331
- sh %{git checkout master}
332
- end
333
-
334
- task :handle_update do
335
- email_on_error do
336
- unless ENV["REF"] =~ %r{^refs/heads/(master|stable|sass-pages)$}
337
- puts "#{'=' * 20} Ignoring rake handle_update REF=#{ENV["REF"].inspect}"
338
- next
339
- end
340
- branch = $1
341
-
342
- puts
343
- puts
344
- puts '=' * 150
345
- puts "Running rake handle_update REF=#{ENV["REF"].inspect}"
346
-
347
- sh %{git fetch origin}
348
- sh %{git checkout stable}
349
- sh %{git reset --hard origin/stable}
350
- sh %{git checkout master}
351
- sh %{git reset --hard origin/master}
352
-
353
- case branch
354
- when "master"
355
- sh %{rake release_edge --trace}
356
- when "stable", "sass-pages"
357
- sh %{rake pages --trace}
358
- end
359
-
360
- puts 'Done running handle_update'
361
- puts '=' * 150
362
- end
363
- end