haml_ejs 0.0.1

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 (358) hide show
  1. data/.yardopts +11 -0
  2. data/CONTRIBUTING +3 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +68 -0
  5. data/Rakefile +419 -0
  6. data/VERSION +1 -0
  7. data/VERSION_NAME +1 -0
  8. data/bin/haml +9 -0
  9. data/bin/html2haml +7 -0
  10. data/extra/update_watch.rb +13 -0
  11. data/init.rb +18 -0
  12. data/lib/haml.rb +49 -0
  13. data/lib/haml/buffer.rb +297 -0
  14. data/lib/haml/compiler.rb +486 -0
  15. data/lib/haml/engine.rb +312 -0
  16. data/lib/haml/error.rb +22 -0
  17. data/lib/haml/exec.rb +362 -0
  18. data/lib/haml/filters.rb +388 -0
  19. data/lib/haml/haml_ejs.rb +57 -0
  20. data/lib/haml/helpers.rb +608 -0
  21. data/lib/haml/helpers/action_view_extensions.rb +57 -0
  22. data/lib/haml/helpers/action_view_mods.rb +257 -0
  23. data/lib/haml/helpers/xss_mods.rb +165 -0
  24. data/lib/haml/html.rb +412 -0
  25. data/lib/haml/html/erb.rb +141 -0
  26. data/lib/haml/parser.rb +760 -0
  27. data/lib/haml/railtie.rb +19 -0
  28. data/lib/haml/root.rb +7 -0
  29. data/lib/haml/shared.rb +78 -0
  30. data/lib/haml/template.rb +99 -0
  31. data/lib/haml/template/options.rb +16 -0
  32. data/lib/haml/template/patch.rb +58 -0
  33. data/lib/haml/template/plugin.rb +123 -0
  34. data/lib/haml/util.rb +842 -0
  35. data/lib/haml/version.rb +109 -0
  36. data/lib/sass.rb +8 -0
  37. data/lib/sass/plugin.rb +10 -0
  38. data/lib/sass/rails2_shim.rb +9 -0
  39. data/lib/sass/rails3_shim.rb +16 -0
  40. data/rails/init.rb +1 -0
  41. data/test/benchmark.rb +91 -0
  42. data/test/gemfiles/Gemfile.rails-2.0.x +8 -0
  43. data/test/gemfiles/Gemfile.rails-2.0.x.lock +38 -0
  44. data/test/gemfiles/Gemfile.rails-2.1.x +8 -0
  45. data/test/gemfiles/Gemfile.rails-2.1.x.lock +38 -0
  46. data/test/gemfiles/Gemfile.rails-2.2.x +8 -0
  47. data/test/gemfiles/Gemfile.rails-2.2.x.lock +38 -0
  48. data/test/gemfiles/Gemfile.rails-2.3.x +8 -0
  49. data/test/gemfiles/Gemfile.rails-2.3.x.lock +40 -0
  50. data/test/gemfiles/Gemfile.rails-3.0.x +8 -0
  51. data/test/gemfiles/Gemfile.rails-3.0.x.lock +85 -0
  52. data/test/gemfiles/Gemfile.rails-3.1.x +8 -0
  53. data/test/gemfiles/Gemfile.rails-3.1.x.lock +98 -0
  54. data/test/gemfiles/Gemfile.rails-xss-2.3.x +9 -0
  55. data/test/gemfiles/Gemfile.rails-xss-2.3.x.lock +42 -0
  56. data/test/haml-ejs/haml-ejs_test.rb +22 -0
  57. data/test/haml-ejs/templates/conditional.input +3 -0
  58. data/test/haml-ejs/templates/conditional.output +3 -0
  59. data/test/haml-ejs/templates/conditional_and_interpolation.input +2 -0
  60. data/test/haml-ejs/templates/conditional_and_interpolation.output +3 -0
  61. data/test/haml-ejs/templates/conditional_else.input +5 -0
  62. data/test/haml-ejs/templates/conditional_else.output +5 -0
  63. data/test/haml-ejs/templates/conditional_else_elsif.input +7 -0
  64. data/test/haml-ejs/templates/conditional_else_elsif.output +7 -0
  65. data/test/haml-ejs/templates/conditional_elsif.input +5 -0
  66. data/test/haml-ejs/templates/conditional_elsif.output +5 -0
  67. data/test/haml-ejs/templates/conditional_unless.input +3 -0
  68. data/test/haml-ejs/templates/conditional_unless.output +3 -0
  69. data/test/haml-ejs/templates/conditional_unless_else.input +5 -0
  70. data/test/haml-ejs/templates/conditional_unless_else.output +5 -0
  71. data/test/haml-ejs/templates/conditional_unless_elsif_else.input +5 -0
  72. data/test/haml-ejs/templates/conditional_unless_elsif_else.output +5 -0
  73. data/test/haml-ejs/templates/interpolation.input +2 -0
  74. data/test/haml-ejs/templates/interpolation.output +1 -0
  75. data/test/haml-ejs/templates/iteration.input +2 -0
  76. data/test/haml-ejs/templates/iteration.output +3 -0
  77. data/test/haml-ejs/templates/suite.input +26 -0
  78. data/test/haml-ejs/templates/suite.output +27 -0
  79. data/test/haml/engine_test.rb +1925 -0
  80. data/test/haml/erb/_av_partial_1.erb +12 -0
  81. data/test/haml/erb/_av_partial_2.erb +8 -0
  82. data/test/haml/erb/action_view.erb +62 -0
  83. data/test/haml/erb/standard.erb +55 -0
  84. data/test/haml/helper_test.rb +454 -0
  85. data/test/haml/html2haml/erb_tests.rb +440 -0
  86. data/test/haml/html2haml_test.rb +336 -0
  87. data/test/haml/markaby/standard.mab +52 -0
  88. data/test/haml/mocks/article.rb +6 -0
  89. data/test/haml/results/content_for_layout.xhtml +12 -0
  90. data/test/haml/results/eval_suppressed.xhtml +9 -0
  91. data/test/haml/results/filters.xhtml +62 -0
  92. data/test/haml/results/helpers.xhtml +70 -0
  93. data/test/haml/results/helpful.xhtml +10 -0
  94. data/test/haml/results/just_stuff.xhtml +70 -0
  95. data/test/haml/results/list.xhtml +12 -0
  96. data/test/haml/results/nuke_inner_whitespace.xhtml +40 -0
  97. data/test/haml/results/nuke_outer_whitespace.xhtml +148 -0
  98. data/test/haml/results/original_engine.xhtml +20 -0
  99. data/test/haml/results/partial_layout.xhtml +5 -0
  100. data/test/haml/results/partials.xhtml +21 -0
  101. data/test/haml/results/render_layout.xhtml +3 -0
  102. data/test/haml/results/silent_script.xhtml +74 -0
  103. data/test/haml/results/standard.xhtml +162 -0
  104. data/test/haml/results/tag_parsing.xhtml +23 -0
  105. data/test/haml/results/very_basic.xhtml +5 -0
  106. data/test/haml/results/whitespace_handling.xhtml +89 -0
  107. data/test/haml/spec/README.md +97 -0
  108. data/test/haml/spec/lua_haml_spec.lua +30 -0
  109. data/test/haml/spec/ruby_haml_test.rb +19 -0
  110. data/test/haml/spec/tests.json +534 -0
  111. data/test/haml/spec_test.rb +44 -0
  112. data/test/haml/template_test.rb +419 -0
  113. data/test/haml/templates/_av_partial_1.haml +9 -0
  114. data/test/haml/templates/_av_partial_1_ugly.haml +9 -0
  115. data/test/haml/templates/_av_partial_2.haml +5 -0
  116. data/test/haml/templates/_av_partial_2_ugly.haml +5 -0
  117. data/test/haml/templates/_layout.erb +3 -0
  118. data/test/haml/templates/_layout_for_partial.haml +3 -0
  119. data/test/haml/templates/_partial.haml +8 -0
  120. data/test/haml/templates/_text_area.haml +3 -0
  121. data/test/haml/templates/action_view.haml +47 -0
  122. data/test/haml/templates/action_view_ugly.haml +47 -0
  123. data/test/haml/templates/breakage.haml +8 -0
  124. data/test/haml/templates/content_for_layout.haml +8 -0
  125. data/test/haml/templates/eval_suppressed.haml +11 -0
  126. data/test/haml/templates/filters.haml +66 -0
  127. data/test/haml/templates/helpers.haml +55 -0
  128. data/test/haml/templates/helpful.haml +11 -0
  129. data/test/haml/templates/just_stuff.haml +85 -0
  130. data/test/haml/templates/list.haml +12 -0
  131. data/test/haml/templates/nuke_inner_whitespace.haml +32 -0
  132. data/test/haml/templates/nuke_outer_whitespace.haml +144 -0
  133. data/test/haml/templates/original_engine.haml +17 -0
  134. data/test/haml/templates/partial_layout.haml +10 -0
  135. data/test/haml/templates/partialize.haml +1 -0
  136. data/test/haml/templates/partials.haml +12 -0
  137. data/test/haml/templates/render_layout.haml +2 -0
  138. data/test/haml/templates/silent_script.haml +40 -0
  139. data/test/haml/templates/standard.haml +43 -0
  140. data/test/haml/templates/standard_ugly.haml +43 -0
  141. data/test/haml/templates/tag_parsing.haml +21 -0
  142. data/test/haml/templates/very_basic.haml +4 -0
  143. data/test/haml/templates/whitespace_handling.haml +87 -0
  144. data/test/haml/util_test.rb +300 -0
  145. data/test/linked_rails.rb +42 -0
  146. data/test/test_helper.rb +75 -0
  147. data/vendor/sass/CONTRIBUTING +3 -0
  148. data/vendor/sass/MIT-LICENSE +20 -0
  149. data/vendor/sass/README.md +201 -0
  150. data/vendor/sass/Rakefile +339 -0
  151. data/vendor/sass/TODO +39 -0
  152. data/vendor/sass/VERSION +1 -0
  153. data/vendor/sass/VERSION_NAME +1 -0
  154. data/vendor/sass/bin/sass +8 -0
  155. data/vendor/sass/bin/sass-convert +7 -0
  156. data/vendor/sass/bin/scss +8 -0
  157. data/vendor/sass/doc-src/FAQ.md +35 -0
  158. data/vendor/sass/doc-src/INDENTED_SYNTAX.md +210 -0
  159. data/vendor/sass/doc-src/SASS_CHANGELOG.md +2214 -0
  160. data/vendor/sass/doc-src/SASS_REFERENCE.md +1957 -0
  161. data/vendor/sass/doc-src/SCSS_FOR_SASS_USERS.md +155 -0
  162. data/vendor/sass/ext/extconf.rb +10 -0
  163. data/vendor/sass/extra/update_watch.rb +13 -0
  164. data/vendor/sass/init.rb +18 -0
  165. data/vendor/sass/lib/sass.rb +72 -0
  166. data/vendor/sass/lib/sass/cache_stores.rb +15 -0
  167. data/vendor/sass/lib/sass/cache_stores/base.rb +84 -0
  168. data/vendor/sass/lib/sass/cache_stores/chain.rb +33 -0
  169. data/vendor/sass/lib/sass/cache_stores/filesystem.rb +58 -0
  170. data/vendor/sass/lib/sass/cache_stores/memory.rb +47 -0
  171. data/vendor/sass/lib/sass/cache_stores/null.rb +25 -0
  172. data/vendor/sass/lib/sass/callbacks.rb +66 -0
  173. data/vendor/sass/lib/sass/css.rb +294 -0
  174. data/vendor/sass/lib/sass/engine.rb +862 -0
  175. data/vendor/sass/lib/sass/environment.rb +155 -0
  176. data/vendor/sass/lib/sass/error.rb +201 -0
  177. data/vendor/sass/lib/sass/exec.rb +659 -0
  178. data/vendor/sass/lib/sass/importers.rb +22 -0
  179. data/vendor/sass/lib/sass/importers/base.rb +138 -0
  180. data/vendor/sass/lib/sass/importers/filesystem.rb +144 -0
  181. data/vendor/sass/lib/sass/less.rb +382 -0
  182. data/vendor/sass/lib/sass/plugin.rb +136 -0
  183. data/vendor/sass/lib/sass/plugin/compiler.rb +358 -0
  184. data/vendor/sass/lib/sass/plugin/configuration.rb +125 -0
  185. data/vendor/sass/lib/sass/plugin/generic.rb +15 -0
  186. data/vendor/sass/lib/sass/plugin/merb.rb +48 -0
  187. data/vendor/sass/lib/sass/plugin/rack.rb +60 -0
  188. data/vendor/sass/lib/sass/plugin/rails.rb +47 -0
  189. data/vendor/sass/lib/sass/plugin/staleness_checker.rb +173 -0
  190. data/vendor/sass/lib/sass/railtie.rb +9 -0
  191. data/vendor/sass/lib/sass/repl.rb +58 -0
  192. data/vendor/sass/lib/sass/root.rb +7 -0
  193. data/vendor/sass/lib/sass/script.rb +40 -0
  194. data/vendor/sass/lib/sass/script/bool.rb +18 -0
  195. data/vendor/sass/lib/sass/script/color.rb +480 -0
  196. data/vendor/sass/lib/sass/script/css_lexer.rb +29 -0
  197. data/vendor/sass/lib/sass/script/css_parser.rb +31 -0
  198. data/vendor/sass/lib/sass/script/funcall.rb +162 -0
  199. data/vendor/sass/lib/sass/script/functions.rb +1343 -0
  200. data/vendor/sass/lib/sass/script/interpolation.rb +70 -0
  201. data/vendor/sass/lib/sass/script/lexer.rb +334 -0
  202. data/vendor/sass/lib/sass/script/list.rb +76 -0
  203. data/vendor/sass/lib/sass/script/literal.rb +245 -0
  204. data/vendor/sass/lib/sass/script/node.rb +91 -0
  205. data/vendor/sass/lib/sass/script/number.rb +429 -0
  206. data/vendor/sass/lib/sass/script/operation.rb +91 -0
  207. data/vendor/sass/lib/sass/script/parser.rb +467 -0
  208. data/vendor/sass/lib/sass/script/string.rb +51 -0
  209. data/vendor/sass/lib/sass/script/string_interpolation.rb +94 -0
  210. data/vendor/sass/lib/sass/script/unary_operation.rb +57 -0
  211. data/vendor/sass/lib/sass/script/variable.rb +54 -0
  212. data/vendor/sass/lib/sass/scss.rb +17 -0
  213. data/vendor/sass/lib/sass/scss/css_parser.rb +46 -0
  214. data/vendor/sass/lib/sass/scss/parser.rb +920 -0
  215. data/vendor/sass/lib/sass/scss/rx.rb +127 -0
  216. data/vendor/sass/lib/sass/scss/sass_parser.rb +11 -0
  217. data/vendor/sass/lib/sass/scss/script_lexer.rb +15 -0
  218. data/vendor/sass/lib/sass/scss/script_parser.rb +25 -0
  219. data/vendor/sass/lib/sass/scss/static_parser.rb +40 -0
  220. data/vendor/sass/lib/sass/selector.rb +361 -0
  221. data/vendor/sass/lib/sass/selector/abstract_sequence.rb +62 -0
  222. data/vendor/sass/lib/sass/selector/comma_sequence.rb +81 -0
  223. data/vendor/sass/lib/sass/selector/sequence.rb +233 -0
  224. data/vendor/sass/lib/sass/selector/simple.rb +113 -0
  225. data/vendor/sass/lib/sass/selector/simple_sequence.rb +134 -0
  226. data/vendor/sass/lib/sass/shared.rb +78 -0
  227. data/vendor/sass/lib/sass/tree/charset_node.rb +22 -0
  228. data/vendor/sass/lib/sass/tree/comment_node.rb +77 -0
  229. data/vendor/sass/lib/sass/tree/debug_node.rb +18 -0
  230. data/vendor/sass/lib/sass/tree/directive_node.rb +23 -0
  231. data/vendor/sass/lib/sass/tree/each_node.rb +24 -0
  232. data/vendor/sass/lib/sass/tree/extend_node.rb +29 -0
  233. data/vendor/sass/lib/sass/tree/for_node.rb +36 -0
  234. data/vendor/sass/lib/sass/tree/function_node.rb +27 -0
  235. data/vendor/sass/lib/sass/tree/if_node.rb +65 -0
  236. data/vendor/sass/lib/sass/tree/import_node.rb +68 -0
  237. data/vendor/sass/lib/sass/tree/media_node.rb +32 -0
  238. data/vendor/sass/lib/sass/tree/mixin_def_node.rb +27 -0
  239. data/vendor/sass/lib/sass/tree/mixin_node.rb +32 -0
  240. data/vendor/sass/lib/sass/tree/node.rb +204 -0
  241. data/vendor/sass/lib/sass/tree/prop_node.rb +155 -0
  242. data/vendor/sass/lib/sass/tree/return_node.rb +18 -0
  243. data/vendor/sass/lib/sass/tree/root_node.rb +28 -0
  244. data/vendor/sass/lib/sass/tree/rule_node.rb +129 -0
  245. data/vendor/sass/lib/sass/tree/variable_node.rb +30 -0
  246. data/vendor/sass/lib/sass/tree/visitors/base.rb +75 -0
  247. data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +134 -0
  248. data/vendor/sass/lib/sass/tree/visitors/convert.rb +255 -0
  249. data/vendor/sass/lib/sass/tree/visitors/cssize.rb +175 -0
  250. data/vendor/sass/lib/sass/tree/visitors/perform.rb +301 -0
  251. data/vendor/sass/lib/sass/tree/visitors/to_css.rb +216 -0
  252. data/vendor/sass/lib/sass/tree/warn_node.rb +18 -0
  253. data/vendor/sass/lib/sass/tree/while_node.rb +18 -0
  254. data/vendor/sass/lib/sass/util.rb +669 -0
  255. data/vendor/sass/lib/sass/util/subset_map.rb +101 -0
  256. data/vendor/sass/lib/sass/version.rb +112 -0
  257. data/vendor/sass/rails/init.rb +1 -0
  258. data/vendor/sass/sass.gemspec +32 -0
  259. data/vendor/sass/test/sass/cache_test.rb +74 -0
  260. data/vendor/sass/test/sass/callbacks_test.rb +61 -0
  261. data/vendor/sass/test/sass/conversion_test.rb +1203 -0
  262. data/vendor/sass/test/sass/css2sass_test.rb +364 -0
  263. data/vendor/sass/test/sass/data/hsl-rgb.txt +319 -0
  264. data/vendor/sass/test/sass/engine_test.rb +2469 -0
  265. data/vendor/sass/test/sass/extend_test.rb +1348 -0
  266. data/vendor/sass/test/sass/functions_test.rb +1025 -0
  267. data/vendor/sass/test/sass/importer_test.rb +82 -0
  268. data/vendor/sass/test/sass/less_conversion_test.rb +653 -0
  269. data/vendor/sass/test/sass/mock_importer.rb +49 -0
  270. data/vendor/sass/test/sass/more_results/more1.css +9 -0
  271. data/vendor/sass/test/sass/more_results/more1_with_line_comments.css +26 -0
  272. data/vendor/sass/test/sass/more_results/more_import.css +29 -0
  273. data/vendor/sass/test/sass/more_templates/_more_partial.sass +2 -0
  274. data/vendor/sass/test/sass/more_templates/more1.sass +23 -0
  275. data/vendor/sass/test/sass/more_templates/more_import.sass +11 -0
  276. data/vendor/sass/test/sass/plugin_test.rb +469 -0
  277. data/vendor/sass/test/sass/results/alt.css +4 -0
  278. data/vendor/sass/test/sass/results/basic.css +9 -0
  279. data/vendor/sass/test/sass/results/compact.css +5 -0
  280. data/vendor/sass/test/sass/results/complex.css +86 -0
  281. data/vendor/sass/test/sass/results/compressed.css +1 -0
  282. data/vendor/sass/test/sass/results/expanded.css +19 -0
  283. data/vendor/sass/test/sass/results/if.css +3 -0
  284. data/vendor/sass/test/sass/results/import.css +31 -0
  285. data/vendor/sass/test/sass/results/import_charset.css +4 -0
  286. data/vendor/sass/test/sass/results/import_charset_1_8.css +4 -0
  287. data/vendor/sass/test/sass/results/import_charset_ibm866.css +4 -0
  288. data/vendor/sass/test/sass/results/line_numbers.css +49 -0
  289. data/vendor/sass/test/sass/results/mixins.css +95 -0
  290. data/vendor/sass/test/sass/results/multiline.css +24 -0
  291. data/vendor/sass/test/sass/results/nested.css +22 -0
  292. data/vendor/sass/test/sass/results/options.css +1 -0
  293. data/vendor/sass/test/sass/results/parent_ref.css +13 -0
  294. data/vendor/sass/test/sass/results/script.css +16 -0
  295. data/vendor/sass/test/sass/results/scss_import.css +31 -0
  296. data/vendor/sass/test/sass/results/scss_importee.css +2 -0
  297. data/vendor/sass/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  298. data/vendor/sass/test/sass/results/subdir/subdir.css +3 -0
  299. data/vendor/sass/test/sass/results/units.css +11 -0
  300. data/vendor/sass/test/sass/results/warn.css +0 -0
  301. data/vendor/sass/test/sass/results/warn_imported.css +0 -0
  302. data/vendor/sass/test/sass/script_conversion_test.rb +283 -0
  303. data/vendor/sass/test/sass/script_test.rb +496 -0
  304. data/vendor/sass/test/sass/scss/css_test.rb +916 -0
  305. data/vendor/sass/test/sass/scss/rx_test.rb +156 -0
  306. data/vendor/sass/test/sass/scss/scss_test.rb +1249 -0
  307. data/vendor/sass/test/sass/scss/test_helper.rb +37 -0
  308. data/vendor/sass/test/sass/templates/_imported_charset_ibm866.sass +4 -0
  309. data/vendor/sass/test/sass/templates/_imported_charset_utf8.sass +4 -0
  310. data/vendor/sass/test/sass/templates/_partial.sass +2 -0
  311. data/vendor/sass/test/sass/templates/alt.sass +16 -0
  312. data/vendor/sass/test/sass/templates/basic.sass +23 -0
  313. data/vendor/sass/test/sass/templates/bork1.sass +2 -0
  314. data/vendor/sass/test/sass/templates/bork2.sass +2 -0
  315. data/vendor/sass/test/sass/templates/bork3.sass +2 -0
  316. data/vendor/sass/test/sass/templates/bork4.sass +2 -0
  317. data/vendor/sass/test/sass/templates/compact.sass +17 -0
  318. data/vendor/sass/test/sass/templates/complex.sass +305 -0
  319. data/vendor/sass/test/sass/templates/compressed.sass +15 -0
  320. data/vendor/sass/test/sass/templates/expanded.sass +17 -0
  321. data/vendor/sass/test/sass/templates/if.sass +11 -0
  322. data/vendor/sass/test/sass/templates/import.sass +12 -0
  323. data/vendor/sass/test/sass/templates/import_charset.sass +7 -0
  324. data/vendor/sass/test/sass/templates/import_charset_1_8.sass +4 -0
  325. data/vendor/sass/test/sass/templates/import_charset_ibm866.sass +9 -0
  326. data/vendor/sass/test/sass/templates/importee.less +2 -0
  327. data/vendor/sass/test/sass/templates/importee.sass +19 -0
  328. data/vendor/sass/test/sass/templates/line_numbers.sass +13 -0
  329. data/vendor/sass/test/sass/templates/mixin_bork.sass +5 -0
  330. data/vendor/sass/test/sass/templates/mixins.sass +76 -0
  331. data/vendor/sass/test/sass/templates/multiline.sass +20 -0
  332. data/vendor/sass/test/sass/templates/nested.sass +25 -0
  333. data/vendor/sass/test/sass/templates/nested_bork1.sass +2 -0
  334. data/vendor/sass/test/sass/templates/nested_bork2.sass +2 -0
  335. data/vendor/sass/test/sass/templates/nested_bork3.sass +2 -0
  336. data/vendor/sass/test/sass/templates/nested_bork4.sass +2 -0
  337. data/vendor/sass/test/sass/templates/nested_import.sass +2 -0
  338. data/vendor/sass/test/sass/templates/nested_mixin_bork.sass +6 -0
  339. data/vendor/sass/test/sass/templates/options.sass +2 -0
  340. data/vendor/sass/test/sass/templates/parent_ref.sass +25 -0
  341. data/vendor/sass/test/sass/templates/script.sass +101 -0
  342. data/vendor/sass/test/sass/templates/scss_import.scss +11 -0
  343. data/vendor/sass/test/sass/templates/scss_importee.scss +1 -0
  344. data/vendor/sass/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  345. data/vendor/sass/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  346. data/vendor/sass/test/sass/templates/subdir/subdir.sass +6 -0
  347. data/vendor/sass/test/sass/templates/units.sass +11 -0
  348. data/vendor/sass/test/sass/templates/warn.sass +3 -0
  349. data/vendor/sass/test/sass/templates/warn_imported.sass +4 -0
  350. data/vendor/sass/test/sass/test_helper.rb +8 -0
  351. data/vendor/sass/test/sass/util/subset_map_test.rb +91 -0
  352. data/vendor/sass/test/sass/util_test.rb +254 -0
  353. data/vendor/sass/test/test_helper.rb +69 -0
  354. data/vendor/sass/yard/callbacks.rb +29 -0
  355. data/vendor/sass/yard/default/fulldoc/html/css/common.sass +26 -0
  356. data/vendor/sass/yard/default/layout/html/footer.erb +12 -0
  357. data/vendor/sass/yard/inherited_hash.rb +41 -0
  358. metadata +458 -0
@@ -0,0 +1,49 @@
1
+ class MockImporter < Sass::Importers::Base
2
+ def initialize(name = "mock")
3
+ @name = name
4
+ @imports = Hash.new({})
5
+ end
6
+
7
+ def find_relative(uri, base, options)
8
+ nil
9
+ end
10
+
11
+ def find(uri, options)
12
+ contents = @imports[uri][:contents]
13
+ return unless contents
14
+ options[:syntax] = @imports[uri][:syntax]
15
+ options[:filename] = uri
16
+ options[:importer] = self
17
+ @imports[uri][:engine] = Sass::Engine.new(contents, options)
18
+ end
19
+
20
+ def mtime(uri, options)
21
+ @imports[uri][:mtime]
22
+ end
23
+
24
+ def key(uri, options)
25
+ ["mock", uri]
26
+ end
27
+
28
+ def to_s
29
+ @name
30
+ end
31
+
32
+ # Methods for testing
33
+
34
+ def add_import(uri, contents, syntax = :scss, mtime = Time.now - 10)
35
+ @imports[uri] = {
36
+ :contents => contents,
37
+ :mtime => mtime,
38
+ :syntax => syntax
39
+ }
40
+ end
41
+
42
+ def touch(uri)
43
+ @imports[uri][:mtime] = Time.now
44
+ end
45
+
46
+ def engine(uri)
47
+ @imports[uri][:engine]
48
+ end
49
+ end
@@ -0,0 +1,9 @@
1
+ body { font: Arial; background: blue; }
2
+
3
+ #page { width: 700px; height: 100; }
4
+ #page #header { height: 300px; }
5
+ #page #header h1 { font-size: 50px; color: blue; }
6
+
7
+ #content.user.show #container.top #column.left { width: 100px; }
8
+ #content.user.show #container.top #column.right { width: 600px; }
9
+ #content.user.show #container.bottom { background: brown; }
@@ -0,0 +1,26 @@
1
+ /* line 3, ../more_templates/more1.sass */
2
+ body {
3
+ font: Arial;
4
+ background: blue; }
5
+
6
+ /* line 7, ../more_templates/more1.sass */
7
+ #page {
8
+ width: 700px;
9
+ height: 100; }
10
+ /* line 10, ../more_templates/more1.sass */
11
+ #page #header {
12
+ height: 300px; }
13
+ /* line 12, ../more_templates/more1.sass */
14
+ #page #header h1 {
15
+ font-size: 50px;
16
+ color: blue; }
17
+
18
+ /* line 18, ../more_templates/more1.sass */
19
+ #content.user.show #container.top #column.left {
20
+ width: 100px; }
21
+ /* line 20, ../more_templates/more1.sass */
22
+ #content.user.show #container.top #column.right {
23
+ width: 600px; }
24
+ /* line 22, ../more_templates/more1.sass */
25
+ #content.user.show #container.bottom {
26
+ background: brown; }
@@ -0,0 +1,29 @@
1
+ imported { otherconst: hello; myconst: goodbye; pre-mixin: here; }
2
+
3
+ body { font: Arial; background: blue; }
4
+
5
+ #page { width: 700px; height: 100; }
6
+ #page #header { height: 300px; }
7
+ #page #header h1 { font-size: 50px; color: blue; }
8
+
9
+ #content.user.show #container.top #column.left { width: 100px; }
10
+ #content.user.show #container.top #column.right { width: 600px; }
11
+ #content.user.show #container.bottom { background: brown; }
12
+
13
+ midrule { inthe: middle; }
14
+
15
+ body { font: Arial; background: blue; }
16
+
17
+ #page { width: 700px; height: 100; }
18
+ #page #header { height: 300px; }
19
+ #page #header h1 { font-size: 50px; color: blue; }
20
+
21
+ #content.user.show #container.top #column.left { width: 100px; }
22
+ #content.user.show #container.top #column.right { width: 600px; }
23
+ #content.user.show #container.bottom { background: brown; }
24
+
25
+ @import url(basic.css);
26
+ @import url(../results/complex.css);
27
+ #foo { background-color: #bbaaff; }
28
+
29
+ nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
@@ -0,0 +1,2 @@
1
+ #foo
2
+ :background-color #baf
@@ -0,0 +1,23 @@
1
+
2
+
3
+ body
4
+ :font Arial
5
+ :background blue
6
+
7
+ #page
8
+ :width 700px
9
+ :height 100
10
+ #header
11
+ :height 300px
12
+ h1
13
+ :font-size 50px
14
+ :color blue
15
+
16
+ #content.user.show
17
+ #container.top
18
+ #column.left
19
+ :width 100px
20
+ #column.right
21
+ :width 600px
22
+ #container.bottom
23
+ :background brown
@@ -0,0 +1,11 @@
1
+ $preconst: hello
2
+
3
+ =premixin
4
+ pre-mixin: here
5
+
6
+ @import importee, basic, basic.css, ../results/complex.css, more_partial
7
+
8
+ nonimported
9
+ :myconst $preconst
10
+ :otherconst $postconst
11
+ +postmixin
@@ -0,0 +1,469 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require File.dirname(__FILE__) + '/test_helper'
4
+ require 'sass/plugin'
5
+ require 'fileutils'
6
+
7
+ class SassPluginTest < Test::Unit::TestCase
8
+ @@templates = %w{
9
+ complex script parent_ref import scss_import alt
10
+ subdir/subdir subdir/nested_subdir/nested_subdir
11
+ options
12
+ }
13
+ @@templates += %w[import_charset import_charset_ibm866] unless Sass::Util.ruby1_8?
14
+ @@templates << 'import_charset_1_8' if Sass::Util.ruby1_8?
15
+
16
+ @@cache_store = Sass::CacheStores::Memory.new
17
+
18
+ def setup
19
+ FileUtils.mkdir_p tempfile_loc
20
+ FileUtils.mkdir_p tempfile_loc(nil,"more_")
21
+ set_plugin_opts
22
+ check_for_updates!
23
+ reset_mtimes
24
+ end
25
+
26
+ def teardown
27
+ clean_up_sassc
28
+ Sass::Plugin.reset!
29
+ FileUtils.rm_r tempfile_loc
30
+ FileUtils.rm_r tempfile_loc(nil,"more_")
31
+ end
32
+
33
+ @@templates.each do |name|
34
+ define_method("test_template_renders_correctly (#{name})") do
35
+ assert_renders_correctly(name)
36
+ end
37
+ end
38
+
39
+ def test_no_update
40
+ File.delete(tempfile_loc('basic'))
41
+ assert_needs_update 'basic'
42
+ check_for_updates!
43
+ assert_stylesheet_updated 'basic'
44
+ end
45
+
46
+ def test_update_needed_when_modified
47
+ touch 'basic'
48
+ assert_needs_update 'basic'
49
+ check_for_updates!
50
+ assert_stylesheet_updated 'basic'
51
+ end
52
+
53
+ def test_update_needed_when_dependency_modified
54
+ touch 'basic'
55
+ assert_needs_update 'import'
56
+ check_for_updates!
57
+ assert_stylesheet_updated 'basic'
58
+ assert_stylesheet_updated 'import'
59
+ end
60
+
61
+ def test_update_needed_when_scss_dependency_modified
62
+ touch 'scss_importee'
63
+ assert_needs_update 'import'
64
+ check_for_updates!
65
+ assert_stylesheet_updated 'scss_importee'
66
+ assert_stylesheet_updated 'import'
67
+ end
68
+
69
+ def test_scss_update_needed_when_dependency_modified
70
+ touch 'basic'
71
+ assert_needs_update 'scss_import'
72
+ check_for_updates!
73
+ assert_stylesheet_updated 'basic'
74
+ assert_stylesheet_updated 'scss_import'
75
+ end
76
+
77
+ def test_update_needed_when_nested_import_dependency_modified
78
+ touch 'basic'
79
+ assert_needs_update 'nested_import'
80
+ check_for_updates!
81
+ assert_stylesheet_updated 'basic'
82
+ assert_stylesheet_updated 'scss_import'
83
+ end
84
+
85
+ def test_no_updates_when_always_check_and_always_update_both_false
86
+ Sass::Plugin.options[:always_update] = false
87
+ Sass::Plugin.options[:always_check] = false
88
+
89
+ touch 'basic'
90
+ assert_needs_update 'basic'
91
+ check_for_updates!
92
+
93
+ # Check it's still stale
94
+ assert_needs_update 'basic'
95
+ end
96
+
97
+ def test_full_exception_handling
98
+ File.delete(tempfile_loc('bork1'))
99
+ check_for_updates!
100
+ File.open(tempfile_loc('bork1')) do |file|
101
+ assert_equal(<<CSS.strip, file.read.split("\n")[0...6].join("\n"))
102
+ /*
103
+ Syntax error: Undefined variable: "$bork".
104
+ on line 2 of #{template_loc('bork1')}
105
+
106
+ 1: bork
107
+ 2: :bork $bork
108
+ CSS
109
+ end
110
+ File.delete(tempfile_loc('bork1'))
111
+ end
112
+
113
+ def test_nonfull_exception_handling
114
+ old_full_exception = Sass::Plugin.options[:full_exception]
115
+ Sass::Plugin.options[:full_exception] = false
116
+
117
+ File.delete(tempfile_loc('bork1'))
118
+ assert_raise(Sass::SyntaxError) {check_for_updates!}
119
+ ensure
120
+ Sass::Plugin.options[:full_exception] = old_full_exception
121
+ end
122
+
123
+ def test_two_template_directories
124
+ set_plugin_opts :template_location => {
125
+ template_loc => tempfile_loc,
126
+ template_loc(nil,'more_') => tempfile_loc(nil,'more_')
127
+ }
128
+ check_for_updates!
129
+ ['more1', 'more_import'].each { |name| assert_renders_correctly(name, :prefix => 'more_') }
130
+ end
131
+
132
+ def test_two_template_directories_with_line_annotations
133
+ set_plugin_opts :line_comments => true,
134
+ :style => :nested,
135
+ :template_location => {
136
+ template_loc => tempfile_loc,
137
+ template_loc(nil,'more_') => tempfile_loc(nil,'more_')
138
+ }
139
+ check_for_updates!
140
+ assert_renders_correctly('more1_with_line_comments', 'more1', :prefix => 'more_')
141
+ end
142
+
143
+ def test_doesnt_render_partials
144
+ assert !File.exists?(tempfile_loc('_partial'))
145
+ end
146
+
147
+ def test_template_location_array
148
+ assert_equal [[template_loc, tempfile_loc]], Sass::Plugin.template_location_array
149
+ end
150
+
151
+ def test_add_template_location
152
+ Sass::Plugin.add_template_location(template_loc(nil, "more_"), tempfile_loc(nil, "more_"))
153
+ assert_equal(
154
+ [[template_loc, tempfile_loc], [template_loc(nil, "more_"), tempfile_loc(nil, "more_")]],
155
+ Sass::Plugin.template_location_array)
156
+
157
+ touch 'more1', 'more_'
158
+ touch 'basic'
159
+ assert_needs_update "more1", "more_"
160
+ assert_needs_update "basic"
161
+ check_for_updates!
162
+ assert_doesnt_need_update "more1", "more_"
163
+ assert_doesnt_need_update "basic"
164
+ end
165
+
166
+ def test_remove_template_location
167
+ Sass::Plugin.add_template_location(template_loc(nil, "more_"), tempfile_loc(nil, "more_"))
168
+ Sass::Plugin.remove_template_location(template_loc, tempfile_loc)
169
+ assert_equal(
170
+ [[template_loc(nil, "more_"), tempfile_loc(nil, "more_")]],
171
+ Sass::Plugin.template_location_array)
172
+
173
+ touch 'more1', 'more_'
174
+ touch 'basic'
175
+ assert_needs_update "more1", "more_"
176
+ assert_needs_update "basic"
177
+ check_for_updates!
178
+ assert_doesnt_need_update "more1", "more_"
179
+ assert_needs_update "basic"
180
+ end
181
+
182
+ # Callbacks
183
+
184
+ def test_updating_stylesheets_callback
185
+ # Should run even when there's nothing to update
186
+ assert_callback :updating_stylesheets, []
187
+ end
188
+
189
+ def test_updating_stylesheets_callback_with_individual_files
190
+ files = [[template_loc("basic"), tempfile_loc("basic")]]
191
+ assert_callback(:updating_stylesheets, files) {Sass::Util.silence_sass_warnings{Sass::Plugin.update_stylesheets(files)}}
192
+ end
193
+
194
+ def test_updating_stylesheets_callback_with_never_update
195
+ Sass::Plugin.options[:never_update] = true
196
+ assert_no_callback :updating_stylesheets
197
+ end
198
+
199
+ def test_updating_stylesheet_callback_for_updated_template
200
+ Sass::Plugin.options[:always_update] = false
201
+ touch 'basic'
202
+ assert_no_callback :updating_stylesheet, template_loc("complex"), tempfile_loc("complex") do
203
+ assert_callbacks(
204
+ [:updating_stylesheet, template_loc("basic"), tempfile_loc("basic")],
205
+ [:updating_stylesheet, template_loc("import"), tempfile_loc("import")])
206
+ end
207
+ end
208
+
209
+ def test_updating_stylesheet_callback_for_fresh_template
210
+ Sass::Plugin.options[:always_update] = false
211
+ assert_no_callback :updating_stylesheet
212
+ end
213
+
214
+ def test_updating_stylesheet_callback_for_error_template
215
+ Sass::Plugin.options[:always_update] = false
216
+ touch 'bork1'
217
+ assert_no_callback :updating_stylesheet
218
+ end
219
+
220
+ def test_not_updating_stylesheet_callback_for_fresh_template
221
+ Sass::Plugin.options[:always_update] = false
222
+ assert_callback :not_updating_stylesheet, template_loc("basic"), tempfile_loc("basic")
223
+ end
224
+
225
+ def test_not_updating_stylesheet_callback_for_updated_template
226
+ Sass::Plugin.options[:always_update] = false
227
+ assert_callback :not_updating_stylesheet, template_loc("complex"), tempfile_loc("complex") do
228
+ assert_no_callbacks(
229
+ [:updating_stylesheet, template_loc("basic"), tempfile_loc("basic")],
230
+ [:updating_stylesheet, template_loc("import"), tempfile_loc("import")])
231
+ end
232
+ end
233
+
234
+ def test_not_updating_stylesheet_callback_with_never_update
235
+ Sass::Plugin.options[:never_update] = true
236
+ assert_no_callback :not_updating_stylesheet
237
+ end
238
+
239
+ def test_not_updating_stylesheet_callback_for_partial
240
+ Sass::Plugin.options[:always_update] = false
241
+ assert_no_callback :not_updating_stylesheet, template_loc("_partial"), tempfile_loc("_partial")
242
+ end
243
+
244
+ def test_not_updating_stylesheet_callback_for_error
245
+ Sass::Plugin.options[:always_update] = false
246
+ touch 'bork1'
247
+ assert_no_callback :not_updating_stylesheet, template_loc("bork1"), tempfile_loc("bork1")
248
+ end
249
+
250
+ def test_compilation_error_callback
251
+ Sass::Plugin.options[:always_update] = false
252
+ touch 'bork1'
253
+ assert_callback(:compilation_error,
254
+ lambda {|e| e.message == 'Undefined variable: "$bork".'},
255
+ template_loc("bork1"), tempfile_loc("bork1"))
256
+ end
257
+
258
+ def test_compilation_error_callback_for_file_access
259
+ Sass::Plugin.options[:always_update] = false
260
+ assert_callback(:compilation_error,
261
+ lambda {|e| e.is_a?(Errno::ENOENT)},
262
+ template_loc("nonexistent"), tempfile_loc("nonexistent")) do
263
+ Sass::Plugin.update_stylesheets([[template_loc("nonexistent"), tempfile_loc("nonexistent")]])
264
+ end
265
+ end
266
+
267
+ def test_creating_directory_callback
268
+ Sass::Plugin.options[:always_update] = false
269
+ dir = File.join(tempfile_loc, "subdir", "nested_subdir")
270
+ FileUtils.rm_r dir
271
+ assert_callback :creating_directory, dir
272
+ end
273
+
274
+ ## Regression
275
+
276
+ def test_cached_dependencies_update
277
+ FileUtils.mv(template_loc("basic"), template_loc("basic", "more_"))
278
+ set_plugin_opts :load_paths => [template_loc(nil, "more_")]
279
+
280
+ touch 'basic', 'more_'
281
+ assert_needs_update "import"
282
+ check_for_updates!
283
+ assert_renders_correctly("import")
284
+ ensure
285
+ FileUtils.mv(template_loc("basic", "more_"), template_loc("basic"))
286
+ end
287
+
288
+ def test_cached_relative_import
289
+ old_always_update = Sass::Plugin.options[:always_update]
290
+ Sass::Plugin.options[:always_update] = true
291
+ check_for_updates!
292
+ assert_renders_correctly('subdir/subdir')
293
+ ensure
294
+ Sass::Plugin.options[:always_update] = old_always_update
295
+ end
296
+
297
+ def test_cached_if
298
+ set_plugin_opts :cache_store => Sass::CacheStores::Filesystem.new(tempfile_loc + '/cache')
299
+ check_for_updates!
300
+ assert_renders_correctly 'if'
301
+ check_for_updates!
302
+ assert_renders_correctly 'if'
303
+ ensure
304
+ set_plugin_opts :cache_store => @@cache_store
305
+ end
306
+
307
+ private
308
+
309
+ def assert_renders_correctly(*arguments)
310
+ options = arguments.last.is_a?(Hash) ? arguments.pop : {}
311
+ prefix = options[:prefix]
312
+ result_name = arguments.shift
313
+ tempfile_name = arguments.shift || result_name
314
+
315
+ expected_str = File.read(result_loc(result_name, prefix))
316
+ actual_str = File.read(tempfile_loc(tempfile_name, prefix))
317
+ unless Sass::Util.ruby1_8?
318
+ expected_str = expected_str.force_encoding('IBM866') if result_name == 'import_charset_ibm866'
319
+ actual_str = actual_str.force_encoding('IBM866') if tempfile_name == 'import_charset_ibm866'
320
+ end
321
+ expected_lines = expected_str.split("\n")
322
+ actual_lines = actual_str.split("\n")
323
+
324
+ if actual_lines.first == "/*" && expected_lines.first != "/*"
325
+ assert(false, actual_lines[0..Sass::Util.enum_with_index(actual_lines).find {|l, i| l == "*/"}.last].join("\n"))
326
+ end
327
+
328
+ expected_lines.zip(actual_lines).each_with_index do |pair, line|
329
+ message = "template: #{result_name}\nline: #{line + 1}"
330
+ assert_equal(pair.first, pair.last, message)
331
+ end
332
+ if expected_lines.size < actual_lines.size
333
+ assert(false, "#{actual_lines.size - expected_lines.size} Trailing lines found in #{tempfile_name}.css: #{actual_lines[expected_lines.size..-1].join('\n')}")
334
+ end
335
+ end
336
+
337
+ def assert_stylesheet_updated(name)
338
+ assert_doesnt_need_update name
339
+
340
+ # Make sure it isn't an exception
341
+ expected_lines = File.read(result_loc(name)).split("\n")
342
+ actual_lines = File.read(tempfile_loc(name)).split("\n")
343
+ if actual_lines.first == "/*" && expected_lines.first != "/*"
344
+ assert(false, actual_lines[0..actual_lines.enum_with_index.find {|l, i| l == "*/"}.last].join("\n"))
345
+ end
346
+ end
347
+
348
+ def assert_callback(name, *expected_args)
349
+ run = false
350
+ Sass::Plugin.send("on_#{name}") do |*args|
351
+ run ||= expected_args.zip(args).all? do |ea, a|
352
+ ea.respond_to?(:call) ? ea.call(a) : ea == a
353
+ end
354
+ end
355
+
356
+ if block_given?
357
+ yield
358
+ else
359
+ check_for_updates!
360
+ end
361
+
362
+ assert run, "Expected #{name} callback to be run with arguments:\n #{expected_args.inspect}"
363
+ end
364
+
365
+ def assert_no_callback(name, *unexpected_args)
366
+ Sass::Plugin.send("on_#{name}") do |*a|
367
+ next unless unexpected_args.empty? || a == unexpected_args
368
+
369
+ msg = "Expected #{name} callback not to be run"
370
+ if !unexpected_args.empty?
371
+ msg << " with arguments #{unexpected_args.inspect}"
372
+ elsif !a.empty?
373
+ msg << ",\n was run with arguments #{a.inspect}"
374
+ end
375
+
376
+ flunk msg
377
+ end
378
+
379
+ if block_given?
380
+ yield
381
+ else
382
+ check_for_updates!
383
+ end
384
+ end
385
+
386
+ def assert_callbacks(*args)
387
+ return check_for_updates! if args.empty?
388
+ assert_callback(*args.pop) {assert_callbacks(*args)}
389
+ end
390
+
391
+ def assert_no_callbacks(*args)
392
+ return check_for_updates! if args.empty?
393
+ assert_no_callback(*args.pop) {assert_no_callbacks(*args)}
394
+ end
395
+
396
+ def check_for_updates!
397
+ Sass::Util.silence_sass_warnings do
398
+ Sass::Plugin.check_for_updates
399
+ end
400
+ end
401
+
402
+ def assert_needs_update(*args)
403
+ assert(Sass::Plugin::StalenessChecker.stylesheet_needs_update?(tempfile_loc(*args), template_loc(*args)),
404
+ "Expected #{template_loc(*args)} to need an update.")
405
+ end
406
+
407
+ def assert_doesnt_need_update(*args)
408
+ assert(!Sass::Plugin::StalenessChecker.stylesheet_needs_update?(tempfile_loc(*args), template_loc(*args)),
409
+ "Expected #{template_loc(*args)} not to need an update.")
410
+ end
411
+
412
+ def touch(*args)
413
+ FileUtils.touch(template_loc(*args))
414
+ end
415
+
416
+ def reset_mtimes
417
+ Sass::Plugin::StalenessChecker.dependencies_cache = {}
418
+ atime = Time.now
419
+ mtime = Time.now - 5
420
+ Dir["{#{template_loc},#{tempfile_loc}}/**/*.{css,sass,scss}"].each {|f| File.utime(atime, mtime, f)}
421
+ end
422
+
423
+ def template_loc(name = nil, prefix = nil)
424
+ if name
425
+ scss = absolutize "#{prefix}templates/#{name}.scss"
426
+ File.exists?(scss) ? scss : absolutize("#{prefix}templates/#{name}.sass")
427
+ else
428
+ absolutize "#{prefix}templates"
429
+ end
430
+ end
431
+
432
+ def tempfile_loc(name = nil, prefix = nil)
433
+ if name
434
+ absolutize "#{prefix}tmp/#{name}.css"
435
+ else
436
+ absolutize "#{prefix}tmp"
437
+ end
438
+ end
439
+
440
+ def result_loc(name = nil, prefix = nil)
441
+ if name
442
+ absolutize "#{prefix}results/#{name}.css"
443
+ else
444
+ absolutize "#{prefix}results"
445
+ end
446
+ end
447
+
448
+ def set_plugin_opts(overrides = {})
449
+ Sass::Plugin.options.merge!(
450
+ :template_location => template_loc,
451
+ :css_location => tempfile_loc,
452
+ :style => :compact,
453
+ :always_update => true,
454
+ :never_update => false,
455
+ :full_exception => true,
456
+ :cache_store => @@cache_store
457
+ )
458
+ Sass::Plugin.options.merge!(overrides)
459
+ end
460
+ end
461
+
462
+ class Sass::Engine
463
+ alias_method :old_render, :render
464
+
465
+ def render
466
+ raise "bork bork bork!" if @template[0] == "{bork now!}"
467
+ old_render
468
+ end
469
+ end