classiccms 0.3.0 → 0.3.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 (369) hide show
  1. data/lib/classiccms/application.rb +2 -3
  2. data/lib/classiccms/cli.rb +6 -0
  3. data/lib/classiccms/scaffold/Gemfile +4 -0
  4. data/lib/classiccms/{mongoid.yml → scaffold/config/mongoid.yml} +3 -4
  5. data/lib/classiccms/scaffold/spec/models/article_spec.rb +8 -0
  6. data/lib/classiccms/scaffold/spec/spec_helper.rb +24 -0
  7. data/lib/classiccms/version.rb +1 -1
  8. data/spec/cli_spec.rb +8 -0
  9. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/build/v8/libv8.a +0 -0
  10. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/build/v8/libv8preparser.a +0 -0
  11. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-debug.h +395 -0
  12. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-preparser.h +117 -0
  13. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-profiler.h +505 -0
  14. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-testing.h +104 -0
  15. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8.h +4124 -0
  16. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8stdint.h +53 -0
  17. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/version.rb +6 -0
  18. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8.rb +15 -0
  19. data/vendor/bundle/gems/sass-3.1.19/.yardopts +11 -0
  20. data/vendor/bundle/gems/sass-3.1.19/CONTRIBUTING +3 -0
  21. data/vendor/bundle/gems/sass-3.1.19/MIT-LICENSE +20 -0
  22. data/vendor/bundle/gems/sass-3.1.19/README.md +200 -0
  23. data/vendor/bundle/gems/sass-3.1.19/REVISION +1 -0
  24. data/vendor/bundle/gems/sass-3.1.19/Rakefile +339 -0
  25. data/vendor/bundle/gems/sass-3.1.19/VERSION +1 -0
  26. data/vendor/bundle/gems/sass-3.1.19/VERSION_NAME +1 -0
  27. data/vendor/bundle/gems/sass-3.1.19/bin/sass +8 -0
  28. data/vendor/bundle/gems/sass-3.1.19/bin/sass-convert +7 -0
  29. data/vendor/bundle/gems/sass-3.1.19/bin/scss +8 -0
  30. data/vendor/bundle/gems/sass-3.1.19/extra/update_watch.rb +13 -0
  31. data/vendor/bundle/gems/sass-3.1.19/init.rb +18 -0
  32. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/base.rb +86 -0
  33. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/chain.rb +33 -0
  34. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/filesystem.rb +61 -0
  35. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/memory.rb +47 -0
  36. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/null.rb +25 -0
  37. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores.rb +15 -0
  38. data/vendor/bundle/gems/sass-3.1.19/lib/sass/callbacks.rb +66 -0
  39. data/vendor/bundle/gems/sass-3.1.19/lib/sass/css.rb +390 -0
  40. data/vendor/bundle/gems/sass-3.1.19/lib/sass/engine.rb +880 -0
  41. data/vendor/bundle/gems/sass-3.1.19/lib/sass/environment.rb +180 -0
  42. data/vendor/bundle/gems/sass-3.1.19/lib/sass/error.rb +201 -0
  43. data/vendor/bundle/gems/sass-3.1.19/lib/sass/exec.rb +682 -0
  44. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers/base.rb +139 -0
  45. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers/filesystem.rb +149 -0
  46. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers.rb +22 -0
  47. data/vendor/bundle/gems/sass-3.1.19/lib/sass/less.rb +382 -0
  48. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger/base.rb +32 -0
  49. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger/log_level.rb +49 -0
  50. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger.rb +15 -0
  51. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/compiler.rb +384 -0
  52. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/configuration.rb +123 -0
  53. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/generic.rb +15 -0
  54. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/merb.rb +48 -0
  55. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/rack.rb +60 -0
  56. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/rails.rb +47 -0
  57. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/staleness_checker.rb +183 -0
  58. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin.rb +132 -0
  59. data/vendor/bundle/gems/sass-3.1.19/lib/sass/railtie.rb +9 -0
  60. data/vendor/bundle/gems/sass-3.1.19/lib/sass/repl.rb +57 -0
  61. data/vendor/bundle/gems/sass-3.1.19/lib/sass/root.rb +7 -0
  62. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/bool.rb +18 -0
  63. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/color.rb +475 -0
  64. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/css_lexer.rb +29 -0
  65. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/css_parser.rb +31 -0
  66. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/funcall.rb +175 -0
  67. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/functions.rb +1381 -0
  68. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/interpolation.rb +79 -0
  69. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/lexer.rb +337 -0
  70. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/list.rb +84 -0
  71. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/literal.rb +230 -0
  72. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/node.rb +99 -0
  73. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/number.rb +452 -0
  74. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/operation.rb +107 -0
  75. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/parser.rb +474 -0
  76. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/string.rb +51 -0
  77. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/string_interpolation.rb +103 -0
  78. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/unary_operation.rb +64 -0
  79. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/variable.rb +58 -0
  80. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script.rb +39 -0
  81. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/css_parser.rb +46 -0
  82. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/parser.rb +1055 -0
  83. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/rx.rb +137 -0
  84. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/sass_parser.rb +11 -0
  85. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/script_lexer.rb +15 -0
  86. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/script_parser.rb +25 -0
  87. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/static_parser.rb +40 -0
  88. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss.rb +17 -0
  89. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/abstract_sequence.rb +71 -0
  90. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/comma_sequence.rb +86 -0
  91. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/sequence.rb +296 -0
  92. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/simple.rb +119 -0
  93. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/simple_sequence.rb +154 -0
  94. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector.rb +373 -0
  95. data/vendor/bundle/gems/sass-3.1.19/lib/sass/shared.rb +76 -0
  96. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/charset_node.rb +22 -0
  97. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/comment_node.rb +90 -0
  98. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/debug_node.rb +18 -0
  99. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/directive_node.rb +28 -0
  100. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/each_node.rb +24 -0
  101. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/extend_node.rb +29 -0
  102. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/for_node.rb +36 -0
  103. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/function_node.rb +27 -0
  104. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/if_node.rb +52 -0
  105. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/import_node.rb +68 -0
  106. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/media_node.rb +32 -0
  107. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/mixin_def_node.rb +27 -0
  108. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/mixin_node.rb +32 -0
  109. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/node.rb +188 -0
  110. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/prop_node.rb +148 -0
  111. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/return_node.rb +18 -0
  112. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/root_node.rb +28 -0
  113. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/rule_node.rb +127 -0
  114. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/variable_node.rb +30 -0
  115. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/base.rb +75 -0
  116. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/check_nesting.rb +127 -0
  117. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/convert.rb +262 -0
  118. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/cssize.rb +206 -0
  119. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/deep_copy.rb +87 -0
  120. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/extend.rb +42 -0
  121. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/perform.rb +357 -0
  122. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/set_options.rb +97 -0
  123. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/to_css.rb +219 -0
  124. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/warn_node.rb +18 -0
  125. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/while_node.rb +18 -0
  126. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util/multibyte_string_scanner.rb +134 -0
  127. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util/subset_map.rb +101 -0
  128. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util.rb +800 -0
  129. data/vendor/bundle/gems/sass-3.1.19/lib/sass/version.rb +112 -0
  130. data/vendor/bundle/gems/sass-3.1.19/lib/sass.rb +73 -0
  131. data/vendor/bundle/gems/sass-3.1.19/rails/init.rb +1 -0
  132. data/vendor/bundle/gems/sass-3.1.19/test/Gemfile +4 -0
  133. data/vendor/bundle/gems/sass-3.1.19/test/sass/cache_test.rb +89 -0
  134. data/vendor/bundle/gems/sass-3.1.19/test/sass/callbacks_test.rb +61 -0
  135. data/vendor/bundle/gems/sass-3.1.19/test/sass/conversion_test.rb +1245 -0
  136. data/vendor/bundle/gems/sass-3.1.19/test/sass/css2sass_test.rb +397 -0
  137. data/vendor/bundle/gems/sass-3.1.19/test/sass/data/hsl-rgb.txt +319 -0
  138. data/vendor/bundle/gems/sass-3.1.19/test/sass/engine_test.rb +2730 -0
  139. data/vendor/bundle/gems/sass-3.1.19/test/sass/extend_test.rb +1663 -0
  140. data/vendor/bundle/gems/sass-3.1.19/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
  141. data/vendor/bundle/gems/sass-3.1.19/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
  142. data/vendor/bundle/gems/sass-3.1.19/test/sass/functions_test.rb +1047 -0
  143. data/vendor/bundle/gems/sass-3.1.19/test/sass/importer_test.rb +192 -0
  144. data/vendor/bundle/gems/sass-3.1.19/test/sass/less_conversion_test.rb +653 -0
  145. data/vendor/bundle/gems/sass-3.1.19/test/sass/logger_test.rb +58 -0
  146. data/vendor/bundle/gems/sass-3.1.19/test/sass/mock_importer.rb +49 -0
  147. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more1.css +9 -0
  148. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more1_with_line_comments.css +26 -0
  149. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more_import.css +29 -0
  150. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/_more_partial.sass +2 -0
  151. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/more1.sass +23 -0
  152. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/more_import.sass +11 -0
  153. data/vendor/bundle/gems/sass-3.1.19/test/sass/plugin_test.rb +496 -0
  154. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/alt.css +4 -0
  155. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/basic.css +9 -0
  156. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/compact.css +5 -0
  157. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/complex.css +86 -0
  158. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/compressed.css +1 -0
  159. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/expanded.css +19 -0
  160. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/if.css +3 -0
  161. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import.css +31 -0
  162. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset.css +5 -0
  163. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset_1_8.css +5 -0
  164. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset_ibm866.css +5 -0
  165. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/line_numbers.css +49 -0
  166. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/mixins.css +95 -0
  167. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/multiline.css +24 -0
  168. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/nested.css +22 -0
  169. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/options.css +1 -0
  170. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/parent_ref.css +13 -0
  171. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/script.css +16 -0
  172. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/scss_import.css +31 -0
  173. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/scss_importee.css +2 -0
  174. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  175. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/subdir/subdir.css +3 -0
  176. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/units.css +11 -0
  177. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/warn.css +0 -0
  178. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/warn_imported.css +0 -0
  179. data/vendor/bundle/gems/sass-3.1.19/test/sass/script_conversion_test.rb +285 -0
  180. data/vendor/bundle/gems/sass-3.1.19/test/sass/script_test.rb +519 -0
  181. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/css_test.rb +975 -0
  182. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/rx_test.rb +156 -0
  183. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/scss_test.rb +1308 -0
  184. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/test_helper.rb +37 -0
  185. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_double_import_loop2.sass +1 -0
  186. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_imported_charset_ibm866.sass +4 -0
  187. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_imported_charset_utf8.sass +4 -0
  188. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_partial.sass +2 -0
  189. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/alt.sass +16 -0
  190. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/basic.sass +23 -0
  191. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork1.sass +2 -0
  192. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork2.sass +2 -0
  193. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork3.sass +2 -0
  194. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork4.sass +2 -0
  195. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork5.sass +3 -0
  196. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/compact.sass +17 -0
  197. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/complex.sass +305 -0
  198. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/compressed.sass +15 -0
  199. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/double_import_loop1.sass +1 -0
  200. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/expanded.sass +17 -0
  201. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/if.sass +11 -0
  202. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import.sass +12 -0
  203. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset.sass +9 -0
  204. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset_1_8.sass +6 -0
  205. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset_ibm866.sass +11 -0
  206. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/importee.less +2 -0
  207. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/importee.sass +19 -0
  208. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/line_numbers.sass +13 -0
  209. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/mixin_bork.sass +5 -0
  210. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/mixins.sass +76 -0
  211. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/multiline.sass +20 -0
  212. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested.sass +25 -0
  213. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork1.sass +2 -0
  214. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork2.sass +2 -0
  215. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork3.sass +2 -0
  216. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork4.sass +2 -0
  217. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork5.sass +2 -0
  218. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_import.sass +2 -0
  219. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_mixin_bork.sass +6 -0
  220. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/options.sass +2 -0
  221. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/parent_ref.sass +25 -0
  222. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/script.sass +101 -0
  223. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/scss_import.scss +11 -0
  224. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/scss_importee.scss +1 -0
  225. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/single_import_loop.sass +1 -0
  226. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  227. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  228. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/subdir.sass +6 -0
  229. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/units.sass +11 -0
  230. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/warn.sass +3 -0
  231. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/warn_imported.sass +4 -0
  232. data/vendor/bundle/gems/sass-3.1.19/test/sass/test_helper.rb +8 -0
  233. data/vendor/bundle/gems/sass-3.1.19/test/sass/util/multibyte_string_scanner_test.rb +147 -0
  234. data/vendor/bundle/gems/sass-3.1.19/test/sass/util/subset_map_test.rb +91 -0
  235. data/vendor/bundle/gems/sass-3.1.19/test/sass/util_test.rb +282 -0
  236. data/vendor/bundle/gems/sass-3.1.19/test/test_helper.rb +70 -0
  237. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/CHANGELOG.md +90 -0
  238. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Gemfile +35 -0
  239. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Guardfile +8 -0
  240. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/LICENSE +20 -0
  241. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/README.md +312 -0
  242. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Rakefile +47 -0
  243. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Vagrantfile +96 -0
  244. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapter.rb +167 -0
  245. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/darwin.rb +84 -0
  246. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/linux.rb +110 -0
  247. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/polling.rb +66 -0
  248. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/windows.rb +81 -0
  249. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/directory_record.rb +317 -0
  250. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/listener.rb +203 -0
  251. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/multi_listener.rb +121 -0
  252. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/turnstile.rb +28 -0
  253. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/version.rb +3 -0
  254. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen.rb +38 -0
  255. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/listen.gemspec +26 -0
  256. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapter_spec.rb +142 -0
  257. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/darwin_spec.rb +31 -0
  258. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/linux_spec.rb +41 -0
  259. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
  260. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/windows_spec.rb +24 -0
  261. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/directory_record_spec.rb +1034 -0
  262. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/listener_spec.rb +155 -0
  263. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/multi_listener_spec.rb +156 -0
  264. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
  265. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen_spec.rb +73 -0
  266. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/spec_helper.rb +16 -0
  267. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/adapter_helper.rb +716 -0
  268. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/directory_record_helper.rb +55 -0
  269. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/fixtures_helper.rb +29 -0
  270. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/listeners_helper.rb +144 -0
  271. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/platform_helper.rb +11 -0
  272. data/vendor/bundle/gems/therubyracer-0.10.1/.gitignore +13 -0
  273. data/vendor/bundle/gems/therubyracer-0.10.1/.gitmodules +3 -0
  274. data/vendor/bundle/gems/therubyracer-0.10.1/.travis.yml +9 -0
  275. data/vendor/bundle/gems/therubyracer-0.10.1/.yardopts +1 -0
  276. data/vendor/bundle/gems/therubyracer-0.10.1/Changelog.md +196 -0
  277. data/vendor/bundle/gems/therubyracer-0.10.1/Gemfile +1 -0
  278. data/vendor/bundle/gems/therubyracer-0.10.1/README.md +167 -0
  279. data/vendor/bundle/gems/therubyracer-0.10.1/Rakefile +23 -0
  280. data/vendor/bundle/gems/therubyracer-0.10.1/bin/therubyracer +11 -0
  281. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/Makefile +213 -0
  282. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/extconf.rb +26 -0
  283. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/gem_make.out +156 -0
  284. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/rr.cpp +189 -0
  285. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/rr.h +41 -0
  286. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8.cpp +48 -0
  287. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_array.cpp +48 -0
  288. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_array.h +8 -0
  289. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_callbacks.cpp +81 -0
  290. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_callbacks.h +8 -0
  291. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_context.cpp +92 -0
  292. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_context.h +6 -0
  293. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_date.cpp +34 -0
  294. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_date.h +6 -0
  295. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_debug.cpp +17 -0
  296. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_debug.h +6 -0
  297. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_exception.cpp +133 -0
  298. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_exception.h +11 -0
  299. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_external.cpp +70 -0
  300. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_external.h +8 -0
  301. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_function.cpp +69 -0
  302. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_function.h +11 -0
  303. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_handle.cpp +186 -0
  304. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_handle.h +48 -0
  305. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_locker.cpp +139 -0
  306. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_locker.h +6 -0
  307. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_message.cpp +67 -0
  308. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_message.h +10 -0
  309. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_object.cpp +122 -0
  310. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_object.h +10 -0
  311. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_script.cpp +36 -0
  312. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_script.h +8 -0
  313. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_string.cpp +52 -0
  314. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_string.h +9 -0
  315. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_template.cpp +344 -0
  316. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_template.h +8 -0
  317. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_try_catch.cpp +70 -0
  318. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_try_catch.h +5 -0
  319. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_v8.cpp +35 -0
  320. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_v8.h +6 -0
  321. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_value.cpp +175 -0
  322. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_value.h +10 -0
  323. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_weakref.cpp +61 -0
  324. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_weakref.h +29 -0
  325. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/access.rb +87 -0
  326. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/array.rb +17 -0
  327. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/c/locker.rb +18 -0
  328. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/cli.rb +133 -0
  329. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/context.rb +111 -0
  330. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/error.rb +130 -0
  331. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/function.rb +44 -0
  332. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/object.rb +69 -0
  333. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/caller.rb +37 -0
  334. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/constructor.rb +98 -0
  335. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/function.rb +63 -0
  336. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/interceptors.rb +152 -0
  337. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/proxies.rb +151 -0
  338. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/templates.rb +73 -0
  339. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal.rb +86 -0
  340. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/stack.rb +66 -0
  341. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/tap.rb +9 -0
  342. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/version.rb +3 -0
  343. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8.rb +23 -0
  344. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/array_spec.rb +15 -0
  345. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/cxt_spec.rb +57 -0
  346. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/ext_spec_helper.rb +27 -0
  347. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/func_spec.rb +64 -0
  348. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/object_spec.rb +10 -0
  349. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/string_spec.rb +11 -0
  350. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/try_catch_spec.rb +60 -0
  351. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/.gitignore +1 -0
  352. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/README.txt +8 -0
  353. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/jsapi_spec.rb +922 -0
  354. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/loadme.js +1 -0
  355. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs_helper.rb +3 -0
  356. data/vendor/bundle/gems/therubyracer-0.10.1/spec/spec_helper.rb +9 -0
  357. data/vendor/bundle/gems/therubyracer-0.10.1/spec/v8/error_spec.rb +131 -0
  358. data/vendor/bundle/gems/therubyracer-0.10.1/spec/v8/portal/proxies_spec.rb +106 -0
  359. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/handle_memspec.rb +41 -0
  360. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/object_memspec.rb +14 -0
  361. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/proxies_memspec.rb +49 -0
  362. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/spec_helper.rb +24 -0
  363. data/vendor/bundle/gems/therubyracer-0.10.1/specthread/spec_helper.rb +2 -0
  364. data/vendor/bundle/gems/therubyracer-0.10.1/specthread/threading_spec.rb +13 -0
  365. data/vendor/bundle/gems/therubyracer-0.10.1/thefrontside.png +0 -0
  366. data/vendor/bundle/gems/therubyracer-0.10.1/therubyracer.gemspec +29 -0
  367. data/vendor/bundle/specifications/libv8-3.3.10.4-x86_64-darwin-11.gemspec +33 -0
  368. data/vendor/bundle/specifications/sass-3.1.19.gemspec +35 -0
  369. metadata +365 -3
@@ -0,0 +1,682 @@
1
+ require 'optparse'
2
+ require 'fileutils'
3
+
4
+ module Sass
5
+ # This module handles the various Sass executables (`sass` and `sass-convert`).
6
+ module Exec
7
+ # An abstract class that encapsulates the executable code for all three executables.
8
+ class Generic
9
+ # @param args [Array<String>] The command-line arguments
10
+ def initialize(args)
11
+ @args = args
12
+ @options = {}
13
+ end
14
+
15
+ # Parses the command-line arguments and runs the executable.
16
+ # Calls `Kernel#exit` at the end, so it never returns.
17
+ #
18
+ # @see #parse
19
+ def parse!
20
+ begin
21
+ parse
22
+ rescue Exception => e
23
+ raise e if @options[:trace] || e.is_a?(SystemExit)
24
+
25
+ $stderr.print "#{e.class}: " unless e.class == RuntimeError
26
+ $stderr.puts "#{e.message}"
27
+ $stderr.puts " Use --trace for backtrace."
28
+ exit 1
29
+ end
30
+ exit 0
31
+ end
32
+
33
+ # Parses the command-line arguments and runs the executable.
34
+ # This does not handle exceptions or exit the program.
35
+ #
36
+ # @see #parse!
37
+ def parse
38
+ @opts = OptionParser.new(&method(:set_opts))
39
+ @opts.parse!(@args)
40
+
41
+ process_result
42
+
43
+ @options
44
+ end
45
+
46
+ # @return [String] A description of the executable
47
+ def to_s
48
+ @opts.to_s
49
+ end
50
+
51
+ protected
52
+
53
+ # Finds the line of the source template
54
+ # on which an exception was raised.
55
+ #
56
+ # @param exception [Exception] The exception
57
+ # @return [String] The line number
58
+ def get_line(exception)
59
+ # SyntaxErrors have weird line reporting
60
+ # when there's trailing whitespace
61
+ return (exception.message.scan(/:(\d+)/).first || ["??"]).first if exception.is_a?(::SyntaxError)
62
+ (exception.backtrace[0].scan(/:(\d+)/).first || ["??"]).first
63
+ end
64
+
65
+ # Tells optparse how to parse the arguments
66
+ # available for all executables.
67
+ #
68
+ # This is meant to be overridden by subclasses
69
+ # so they can add their own options.
70
+ #
71
+ # @param opts [OptionParser]
72
+ def set_opts(opts)
73
+ opts.on('-s', '--stdin', :NONE, 'Read input from standard input instead of an input file') do
74
+ @options[:input] = $stdin
75
+ end
76
+
77
+ opts.on('--trace', :NONE, 'Show a full traceback on error') do
78
+ @options[:trace] = true
79
+ end
80
+
81
+ opts.on('--unix-newlines', 'Use Unix-style newlines in written files.') do
82
+ @options[:unix_newlines] = true if ::Sass::Util.windows?
83
+ end
84
+
85
+ opts.on_tail("-?", "-h", "--help", "Show this message") do
86
+ puts opts
87
+ exit
88
+ end
89
+
90
+ opts.on_tail("-v", "--version", "Print version") do
91
+ puts("Sass #{::Sass.version[:string]}")
92
+ exit
93
+ end
94
+ end
95
+
96
+ # Processes the options set by the command-line arguments.
97
+ # In particular, sets `@options[:input]` and `@options[:output]`
98
+ # to appropriate IO streams.
99
+ #
100
+ # This is meant to be overridden by subclasses
101
+ # so they can run their respective programs.
102
+ def process_result
103
+ input, output = @options[:input], @options[:output]
104
+ args = @args.dup
105
+ input ||=
106
+ begin
107
+ filename = args.shift
108
+ @options[:filename] = filename
109
+ open_file(filename) || $stdin
110
+ end
111
+ output ||= open_file(args.shift, 'w') || $stdout
112
+
113
+ @options[:input], @options[:output] = input, output
114
+ end
115
+
116
+ COLORS = { :red => 31, :green => 32, :yellow => 33 }
117
+
118
+ # Prints a status message about performing the given action,
119
+ # colored using the given color (via terminal escapes) if possible.
120
+ #
121
+ # @param name [#to_s] A short name for the action being performed.
122
+ # Shouldn't be longer than 11 characters.
123
+ # @param color [Symbol] The name of the color to use for this action.
124
+ # Can be `:red`, `:green`, or `:yellow`.
125
+ def puts_action(name, color, arg)
126
+ return if @options[:for_engine][:quiet]
127
+ printf color(color, "%11s %s\n"), name, arg
128
+ end
129
+
130
+ # Same as \{Kernel.puts}, but doesn't print anything if the `--quiet` option is set.
131
+ #
132
+ # @param args [Array] Passed on to \{Kernel.puts}
133
+ def puts(*args)
134
+ return if @options[:for_engine][:quiet]
135
+ Kernel.puts(*args)
136
+ end
137
+
138
+ # Wraps the given string in terminal escapes
139
+ # causing it to have the given color.
140
+ # If terminal esapes aren't supported on this platform,
141
+ # just returns the string instead.
142
+ #
143
+ # @param color [Symbol] The name of the color to use.
144
+ # Can be `:red`, `:green`, or `:yellow`.
145
+ # @param str [String] The string to wrap in the given color.
146
+ # @return [String] The wrapped string.
147
+ def color(color, str)
148
+ raise "[BUG] Unrecognized color #{color}" unless COLORS[color]
149
+
150
+ # Almost any real Unix terminal will support color,
151
+ # so we just filter for Windows terms (which don't set TERM)
152
+ # and not-real terminals, which aren't ttys.
153
+ return str if ENV["TERM"].nil? || ENV["TERM"].empty? || !STDOUT.tty?
154
+ return "\e[#{COLORS[color]}m#{str}\e[0m"
155
+ end
156
+
157
+ private
158
+
159
+ def open_file(filename, flag = 'r')
160
+ return if filename.nil?
161
+ flag = 'wb' if @options[:unix_newlines] && flag == 'w'
162
+ File.open(filename, flag)
163
+ end
164
+
165
+ def handle_load_error(err)
166
+ dep = err.message[/^no such file to load -- (.*)/, 1]
167
+ raise err if @options[:trace] || dep.nil? || dep.empty?
168
+ $stderr.puts <<MESSAGE
169
+ Required dependency #{dep} not found!
170
+ Run "gem install #{dep}" to get it.
171
+ Use --trace for backtrace.
172
+ MESSAGE
173
+ exit 1
174
+ end
175
+ end
176
+
177
+ # The `sass` executable.
178
+ class Sass < Generic
179
+ attr_reader :default_syntax
180
+
181
+ # @param args [Array<String>] The command-line arguments
182
+ def initialize(args)
183
+ super
184
+ @options[:for_engine] = {
185
+ :load_paths => ['.'] + (ENV['SASSPATH'] || '').split(File::PATH_SEPARATOR)
186
+ }
187
+ @default_syntax = :sass
188
+ end
189
+
190
+ protected
191
+
192
+ # Tells optparse how to parse the arguments.
193
+ #
194
+ # @param opts [OptionParser]
195
+ def set_opts(opts)
196
+ super
197
+
198
+ opts.banner = <<END
199
+ Usage: #{default_syntax} [options] [INPUT] [OUTPUT]
200
+
201
+ Description:
202
+ Converts SCSS or Sass files to CSS.
203
+
204
+ Options:
205
+ END
206
+
207
+ if @default_syntax == :sass
208
+ opts.on('--scss',
209
+ 'Use the CSS-superset SCSS syntax.') do
210
+ @options[:for_engine][:syntax] = :scss
211
+ end
212
+ else
213
+ opts.on('--sass',
214
+ 'Use the Indented syntax.') do
215
+ @options[:for_engine][:syntax] = :sass
216
+ end
217
+ end
218
+ opts.on('--watch', 'Watch files or directories for changes.',
219
+ 'The location of the generated CSS can be set using a colon:',
220
+ " #{@default_syntax} --watch input.#{@default_syntax}:output.css",
221
+ " #{@default_syntax} --watch input-dir:output-dir") do
222
+ @options[:watch] = true
223
+ end
224
+ opts.on('--update', 'Compile files or directories to CSS.',
225
+ 'Locations are set like --watch.') do
226
+ @options[:update] = true
227
+ end
228
+ opts.on('--stop-on-error', 'If a file fails to compile, exit immediately.',
229
+ 'Only meaningful for --watch and --update.') do
230
+ @options[:stop_on_error] = true
231
+ end
232
+ opts.on('-f', '--force', 'Recompile all Sass files, even if the CSS file is newer.',
233
+ 'Only meaningful for --update.') do
234
+ @options[:force] = true
235
+ end
236
+ opts.on('-c', '--check', "Just check syntax, don't evaluate.") do
237
+ require 'stringio'
238
+ @options[:check_syntax] = true
239
+ @options[:output] = StringIO.new
240
+ end
241
+ opts.on('-t', '--style NAME',
242
+ 'Output style. Can be nested (default), compact, compressed, or expanded.') do |name|
243
+ @options[:for_engine][:style] = name.to_sym
244
+ end
245
+ opts.on('--precision NUMBER_OF_DIGITS', Integer,
246
+ 'How many digits of precision to use when outputting decimal numbers. Defaults to 3.') do |precision|
247
+ ::Sass::Script::Number.precision = precision
248
+ end
249
+ opts.on('-q', '--quiet', 'Silence warnings and status messages during compilation.') do
250
+ @options[:for_engine][:quiet] = true
251
+ end
252
+ opts.on('--compass', 'Make Compass imports available and load project configuration.') do
253
+ @options[:compass] = true
254
+ end
255
+ opts.on('-g', '--debug-info',
256
+ 'Emit extra information in the generated CSS that can be used by the FireSass Firebug plugin.') do
257
+ @options[:for_engine][:debug_info] = true
258
+ end
259
+ opts.on('-l', '--line-numbers', '--line-comments',
260
+ 'Emit comments in the generated CSS indicating the corresponding source line.') do
261
+ @options[:for_engine][:line_numbers] = true
262
+ end
263
+ opts.on('-i', '--interactive',
264
+ 'Run an interactive SassScript shell.') do
265
+ @options[:interactive] = true
266
+ end
267
+ opts.on('-I', '--load-path PATH', 'Add a sass import path.') do |path|
268
+ @options[:for_engine][:load_paths] << path
269
+ end
270
+ opts.on('-r', '--require LIB', 'Require a Ruby library before running Sass.') do |lib|
271
+ require lib
272
+ end
273
+ opts.on('--cache-location PATH', 'The path to put cached Sass files. Defaults to .sass-cache.') do |loc|
274
+ @options[:for_engine][:cache_location] = loc
275
+ end
276
+ opts.on('-C', '--no-cache', "Don't cache to sassc files.") do
277
+ @options[:for_engine][:cache] = false
278
+ end
279
+
280
+ unless ::Sass::Util.ruby1_8?
281
+ opts.on('-E encoding', 'Specify the default encoding for Sass files.') do |encoding|
282
+ Encoding.default_external = encoding
283
+ end
284
+ end
285
+ end
286
+
287
+ # Processes the options set by the command-line arguments,
288
+ # and runs the Sass compiler appropriately.
289
+ def process_result
290
+ require 'sass'
291
+
292
+ if !@options[:update] && !@options[:watch] &&
293
+ @args.first && colon_path?(@args.first)
294
+ if @args.size == 1
295
+ @args = split_colon_path(@args.first)
296
+ else
297
+ @options[:update] = true
298
+ end
299
+ end
300
+ load_compass if @options[:compass]
301
+ return interactive if @options[:interactive]
302
+ return watch_or_update if @options[:watch] || @options[:update]
303
+ super
304
+ @options[:for_engine][:filename] = @options[:filename]
305
+
306
+ begin
307
+ input = @options[:input]
308
+ output = @options[:output]
309
+
310
+ @options[:for_engine][:syntax] ||= :scss if input.is_a?(File) && input.path =~ /\.scss$/
311
+ @options[:for_engine][:syntax] ||= @default_syntax
312
+ engine =
313
+ if input.is_a?(File) && !@options[:check_syntax]
314
+ ::Sass::Engine.for_file(input.path, @options[:for_engine])
315
+ else
316
+ # We don't need to do any special handling of @options[:check_syntax] here,
317
+ # because the Sass syntax checking happens alongside evaluation
318
+ # and evaluation doesn't actually evaluate any code anyway.
319
+ ::Sass::Engine.new(input.read(), @options[:for_engine])
320
+ end
321
+
322
+ input.close() if input.is_a?(File)
323
+
324
+ output.write(engine.render)
325
+ output.close() if output.is_a? File
326
+ rescue ::Sass::SyntaxError => e
327
+ raise e if @options[:trace]
328
+ raise e.sass_backtrace_str("standard input")
329
+ end
330
+ end
331
+
332
+ private
333
+
334
+ def load_compass
335
+ begin
336
+ require 'compass'
337
+ rescue LoadError
338
+ require 'rubygems'
339
+ begin
340
+ require 'compass'
341
+ rescue LoadError
342
+ puts "ERROR: Cannot load compass."
343
+ exit 1
344
+ end
345
+ end
346
+ Compass.add_project_configuration
347
+ Compass.configuration.project_path ||= Dir.pwd
348
+ @options[:for_engine][:load_paths] += Compass.configuration.sass_load_paths
349
+ end
350
+
351
+ def interactive
352
+ require 'sass/repl'
353
+ ::Sass::Repl.new(@options).run
354
+ end
355
+
356
+ def watch_or_update
357
+ require 'sass/plugin'
358
+ ::Sass::Plugin.options.merge! @options[:for_engine]
359
+ ::Sass::Plugin.options[:unix_newlines] = @options[:unix_newlines]
360
+
361
+ if @options[:force]
362
+ raise "The --force flag may only be used with --update." unless @options[:update]
363
+ ::Sass::Plugin.options[:always_update] = true
364
+ end
365
+
366
+ raise <<MSG if @args.empty?
367
+ What files should I watch? Did you mean something like:
368
+ #{@default_syntax} --watch input.#{@default_syntax}:output.css
369
+ #{@default_syntax} --watch input-dir:output-dir
370
+ MSG
371
+
372
+ if !colon_path?(@args[0]) && probably_dest_dir?(@args[1])
373
+ flag = @options[:update] ? "--update" : "--watch"
374
+ err =
375
+ if !File.exist?(@args[1])
376
+ "doesn't exist"
377
+ elsif @args[1] =~ /\.css$/
378
+ "is a CSS file"
379
+ end
380
+ raise <<MSG if err
381
+ File #{@args[1]} #{err}.
382
+ Did you mean: #{@default_syntax} #{flag} #{@args[0]}:#{@args[1]}
383
+ MSG
384
+ end
385
+
386
+ dirs, files = @args.map {|name| split_colon_path(name)}.
387
+ partition {|i, _| File.directory? i}
388
+ files.map! {|from, to| [from, to || from.gsub(/\.[^.]*?$/, '.css')]}
389
+ dirs.map! {|from, to| [from, to || from]}
390
+ ::Sass::Plugin.options[:template_location] = dirs
391
+
392
+ ::Sass::Plugin.on_updated_stylesheet do |_, css|
393
+ if File.exists? css
394
+ puts_action :overwrite, :yellow, css
395
+ else
396
+ puts_action :create, :green, css
397
+ end
398
+ end
399
+
400
+ had_error = false
401
+ ::Sass::Plugin.on_creating_directory {|dirname| puts_action :directory, :green, dirname}
402
+ ::Sass::Plugin.on_deleting_css {|filename| puts_action :delete, :yellow, filename}
403
+ ::Sass::Plugin.on_compilation_error do |error, _, _|
404
+ raise error unless error.is_a?(::Sass::SyntaxError) && !@options[:stop_on_error]
405
+ had_error = true
406
+ puts_action :error, :red, "#{error.sass_filename} (Line #{error.sass_line}: #{error.message})"
407
+ STDOUT.flush
408
+ end
409
+
410
+ if @options[:update]
411
+ ::Sass::Plugin.update_stylesheets(files)
412
+ exit 1 if had_error
413
+ return
414
+ end
415
+
416
+ puts ">>> Sass is watching for changes. Press Ctrl-C to stop."
417
+
418
+ ::Sass::Plugin.on_template_modified do |template|
419
+ puts ">>> Change detected to: #{template}"
420
+ STDOUT.flush
421
+ end
422
+ ::Sass::Plugin.on_template_created do |template|
423
+ puts ">>> New template detected: #{template}"
424
+ STDOUT.flush
425
+ end
426
+ ::Sass::Plugin.on_template_deleted do |template|
427
+ puts ">>> Deleted template detected: #{template}"
428
+ STDOUT.flush
429
+ end
430
+
431
+ ::Sass::Plugin.watch(files)
432
+ end
433
+
434
+ def colon_path?(path)
435
+ !split_colon_path(path)[1].nil?
436
+ end
437
+
438
+ def split_colon_path(path)
439
+ one, two = path.split(':', 2)
440
+ if one && two && ::Sass::Util.windows? &&
441
+ one =~ /\A[A-Za-z]\Z/ && two =~ /\A[\/\\]/
442
+ # If we're on Windows and we were passed a drive letter path,
443
+ # don't split on that colon.
444
+ one2, two = two.split(':', 2)
445
+ one = one + ':' + one2
446
+ end
447
+ return one, two
448
+ end
449
+
450
+ # Whether path is likely to be meant as the destination
451
+ # in a source:dest pair.
452
+ def probably_dest_dir?(path)
453
+ return false unless path
454
+ return false if colon_path?(path)
455
+ return ::Sass::Util.glob(File.join(path, "*.s[ca]ss")).empty?
456
+ end
457
+ end
458
+
459
+ class Scss < Sass
460
+ # @param args [Array<String>] The command-line arguments
461
+ def initialize(args)
462
+ super
463
+ @default_syntax = :scss
464
+ end
465
+ end
466
+
467
+ # The `sass-convert` executable.
468
+ class SassConvert < Generic
469
+ # @param args [Array<String>] The command-line arguments
470
+ def initialize(args)
471
+ super
472
+ require 'sass'
473
+ @options[:for_tree] = {}
474
+ @options[:for_engine] = {:cache => false, :read_cache => true}
475
+ end
476
+
477
+ # Tells optparse how to parse the arguments.
478
+ #
479
+ # @param opts [OptionParser]
480
+ def set_opts(opts)
481
+ opts.banner = <<END
482
+ Usage: sass-convert [options] [INPUT] [OUTPUT]
483
+
484
+ Description:
485
+ Converts between CSS, Sass, and SCSS files.
486
+ E.g. converts from SCSS to Sass,
487
+ or converts from CSS to SCSS (adding appropriate nesting).
488
+
489
+ Options:
490
+ END
491
+
492
+ opts.on('-F', '--from FORMAT',
493
+ 'The format to convert from. Can be css, scss, sass, less.',
494
+ 'By default, this is inferred from the input filename.',
495
+ 'If there is none, defaults to css.') do |name|
496
+ @options[:from] = name.downcase.to_sym
497
+ unless [:css, :scss, :sass, :less].include?(@options[:from])
498
+ raise "Unknown format for sass-convert --from: #{name}"
499
+ end
500
+ try_less_note if @options[:from] == :less
501
+ end
502
+
503
+ opts.on('-T', '--to FORMAT',
504
+ 'The format to convert to. Can be scss or sass.',
505
+ 'By default, this is inferred from the output filename.',
506
+ 'If there is none, defaults to sass.') do |name|
507
+ @options[:to] = name.downcase.to_sym
508
+ unless [:scss, :sass].include?(@options[:to])
509
+ raise "Unknown format for sass-convert --to: #{name}"
510
+ end
511
+ end
512
+
513
+ opts.on('-R', '--recursive',
514
+ 'Convert all the files in a directory. Requires --from and --to.') do
515
+ @options[:recursive] = true
516
+ end
517
+
518
+ opts.on('-i', '--in-place',
519
+ 'Convert a file to its own syntax.',
520
+ 'This can be used to update some deprecated syntax.') do
521
+ @options[:in_place] = true
522
+ end
523
+
524
+ opts.on('--dasherize', 'Convert underscores to dashes') do
525
+ @options[:for_tree][:dasherize] = true
526
+ end
527
+
528
+ opts.on('--old', 'Output the old-style ":prop val" property syntax.',
529
+ 'Only meaningful when generating Sass.') do
530
+ @options[:for_tree][:old] = true
531
+ end
532
+
533
+ opts.on('-C', '--no-cache', "Don't cache to sassc files.") do
534
+ @options[:for_engine][:read_cache] = false
535
+ end
536
+
537
+ unless ::Sass::Util.ruby1_8?
538
+ opts.on('-E encoding', 'Specify the default encoding for Sass and CSS files.') do |encoding|
539
+ Encoding.default_external = encoding
540
+ end
541
+ end
542
+
543
+ super
544
+ end
545
+
546
+ # Processes the options set by the command-line arguments,
547
+ # and runs the CSS compiler appropriately.
548
+ def process_result
549
+ require 'sass'
550
+
551
+ if @options[:recursive]
552
+ process_directory
553
+ return
554
+ end
555
+
556
+ super
557
+ input = @options[:input]
558
+ raise "Error: '#{input.path}' is a directory (did you mean to use --recursive?)" if File.directory?(input)
559
+ output = @options[:output]
560
+ output = input if @options[:in_place]
561
+ process_file(input, output)
562
+ end
563
+
564
+ private
565
+
566
+ def process_directory
567
+ unless input = @options[:input] = @args.shift
568
+ raise "Error: directory required when using --recursive."
569
+ end
570
+
571
+ output = @options[:output] = @args.shift
572
+ raise "Error: --from required when using --recursive." unless @options[:from]
573
+ raise "Error: --to required when using --recursive." unless @options[:to]
574
+ raise "Error: '#{@options[:input]}' is not a directory" unless File.directory?(@options[:input])
575
+ if @options[:output] && File.exists?(@options[:output]) && !File.directory?(@options[:output])
576
+ raise "Error: '#{@options[:output]}' is not a directory"
577
+ end
578
+ @options[:output] ||= @options[:input]
579
+
580
+ from = @options[:from]
581
+ if @options[:to] == @options[:from] && !@options[:in_place]
582
+ fmt = @options[:from]
583
+ raise "Error: converting from #{fmt} to #{fmt} without --in-place"
584
+ end
585
+
586
+ ext = @options[:from]
587
+ ::Sass::Util.glob("#{@options[:input]}/**/*.#{ext}") do |f|
588
+ output =
589
+ if @options[:in_place]
590
+ f
591
+ elsif @options[:output]
592
+ output_name = f.gsub(/\.(c|sa|sc|le)ss$/, ".#{@options[:to]}")
593
+ output_name[0...@options[:input].size] = @options[:output]
594
+ output_name
595
+ else
596
+ f.gsub(/\.(c|sa|sc|le)ss$/, ".#{@options[:to]}")
597
+ end
598
+
599
+ unless File.directory?(File.dirname(output))
600
+ puts_action :directory, :green, File.dirname(output)
601
+ FileUtils.mkdir_p(File.dirname(output))
602
+ end
603
+ puts_action :convert, :green, f
604
+ if File.exists?(output)
605
+ puts_action :overwrite, :yellow, output
606
+ else
607
+ puts_action :create, :green, output
608
+ end
609
+
610
+ input = open_file(f)
611
+ output = @options[:in_place] ? input : open_file(output, "w")
612
+ process_file(input, output)
613
+ end
614
+ end
615
+
616
+ def process_file(input, output)
617
+ if input.is_a?(File)
618
+ @options[:from] ||=
619
+ case input.path
620
+ when /\.scss$/; :scss
621
+ when /\.sass$/; :sass
622
+ when /\.less$/; :less
623
+ when /\.css$/; :css
624
+ end
625
+ elsif @options[:in_place]
626
+ raise "Error: the --in-place option requires a filename."
627
+ end
628
+
629
+ if output.is_a?(File)
630
+ @options[:to] ||=
631
+ case output.path
632
+ when /\.scss$/; :scss
633
+ when /\.sass$/; :sass
634
+ end
635
+ end
636
+
637
+ @options[:from] ||= :css
638
+ @options[:to] ||= :sass
639
+ @options[:for_engine][:syntax] = @options[:from]
640
+
641
+ out =
642
+ ::Sass::Util.silence_sass_warnings do
643
+ if @options[:from] == :css
644
+ require 'sass/css'
645
+ ::Sass::CSS.new(input.read, @options[:for_tree]).render(@options[:to])
646
+ elsif @options[:from] == :less
647
+ require 'sass/less'
648
+ try_less_note
649
+ input = input.read if input.is_a?(IO) && !input.is_a?(File) # Less is dumb
650
+ Less::Engine.new(input).to_tree.to_sass_tree.send("to_#{@options[:to]}", @options[:for_tree])
651
+ else
652
+ if input.is_a?(File)
653
+ ::Sass::Engine.for_file(input.path, @options[:for_engine])
654
+ else
655
+ ::Sass::Engine.new(input.read, @options[:for_engine])
656
+ end.to_tree.send("to_#{@options[:to]}", @options[:for_tree])
657
+ end
658
+ end
659
+
660
+ output = File.open(input.path, 'w') if @options[:in_place]
661
+ output.write(out)
662
+ rescue ::Sass::SyntaxError => e
663
+ raise e if @options[:trace]
664
+ file = " of #{e.sass_filename}" if e.sass_filename
665
+ raise "Error on line #{e.sass_line}#{file}: #{e.message}\n Use --trace for backtrace"
666
+ rescue LoadError => err
667
+ handle_load_error(err)
668
+ end
669
+
670
+ @@less_note_printed = false
671
+ def try_less_note
672
+ return if @@less_note_printed
673
+ @@less_note_printed = true
674
+ warn <<NOTE
675
+ * NOTE: Sass and Less are different languages, and they work differently.
676
+ * I'll do my best to translate, but some features -- especially mixins --
677
+ * should be checked by hand.
678
+ NOTE
679
+ end
680
+ end
681
+ end
682
+ end