classiccms 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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,186 @@
1
+
2
+ #include "rr.h"
3
+ #include "v8_handle.h"
4
+
5
+ using namespace v8;
6
+
7
+ /**
8
+ * Creates a new Persistent storage cell for `handle`
9
+ * so that we can reference it from Ruby. Ruby metadat
10
+ * is contained on the handle object, and then the actual
11
+ * v8 references are contain in an instance of `Payload`
12
+ */
13
+ v8_handle::v8_handle(Handle<void> object) {
14
+ this->weakref_callback = Qnil;
15
+ this->weakref_callback_parameters = Qnil;
16
+ this->dead = false;
17
+ this->payload = new Payload(object);
18
+ }
19
+
20
+ v8_handle::~v8_handle() {}
21
+
22
+ /**
23
+ * Construct a new handle payload.
24
+ *
25
+ * Each payload contains a Ruby object wrapper so that it
26
+ * can be enqueued for V8 GC (the GC queue is a ruby Array)
27
+ * the wrapper is pre-allocated at payload creation time
28
+ * so that no Ruby objects are allocated during Ruby GC.
29
+ */
30
+ v8_handle::Payload::Payload(Handle<void> object) {
31
+ rb_gc_register_address(&wrapper);
32
+ handle = Persistent<void>::New(object);
33
+ wrapper = Data_Wrap_Struct(rb_cObject, 0, destroy, this);
34
+ }
35
+
36
+ v8_handle::Payload::~Payload() {
37
+ rb_gc_unregister_address(&wrapper);
38
+ }
39
+
40
+ void v8_handle::Payload::release() {
41
+ handle.Dispose();
42
+ handle.Clear();
43
+ }
44
+
45
+ void v8_handle::Payload::destroy(v8_handle::Payload* payload) {
46
+ delete payload;
47
+ }
48
+
49
+ namespace {
50
+ /**
51
+ * Holds dead references, that are no longer being held in Ruby, so that they can be garbage collected
52
+ * inside of V8
53
+ */
54
+ VALUE handle_queue;
55
+
56
+ /**
57
+ * Invoked by the Ruby garbage collector whenever it determines that this handle is
58
+ * still reachable. We in turn, mark our weak callback parameters, so that it knows
59
+ * they are reachable too.
60
+ */
61
+ void v8_handle_mark(v8_handle* handle) {
62
+ rb_gc_mark(handle->weakref_callback);
63
+ rb_gc_mark(handle->weakref_callback_parameters);
64
+ }
65
+
66
+ /**
67
+ * Whenver a V8::C::Handle becomes garbage collected, we do not free it immediately.
68
+ * instead, we put them into a "zombie" queue, where its corresponding V8 storage cell
69
+ * can be released safely while the V8 engine is running. A zombie Ruby object is
70
+ * created to wrap it so that it can be stored in the queue.
71
+ */
72
+ void v8_handle_enqueue(v8_handle* handle) {
73
+ handle->dead = true;
74
+ rb_ary_unshift(handle_queue, handle->payload->wrapper);
75
+ }
76
+
77
+ /**
78
+ * Drains the dead handle queue, and releases them from V8
79
+ *
80
+ * This implements the V8 `GCPrologueCallback` and is registered to run before
81
+ * each invocation of the V8 garbage collector. It empties the queue of dead handles
82
+ * and disposes of them. It is important to do this operations inside V8 so that
83
+ * Ruby garbage collection is never locked, and never touches V8.
84
+ */
85
+ void v8_handle_dequeue(GCType type, GCCallbackFlags flags) {
86
+ for (VALUE handle = rb_ary_pop(handle_queue); RTEST(handle); handle = rb_ary_pop(handle_queue)) {
87
+ v8_handle::Payload* payload = NULL;
88
+ Data_Get_Struct(handle, struct v8_handle::Payload, payload);
89
+ payload->release();
90
+ }
91
+ }
92
+
93
+ VALUE New(VALUE self, VALUE handle) {
94
+ if (RTEST(handle)) {
95
+ Persistent<void> that = rr_v8_handle<void>(handle);
96
+ return rr_v8_handle_new(self, that);
97
+ } else {
98
+ return rr_v8_handle_new(self, Handle<void>());
99
+ }
100
+ }
101
+
102
+ VALUE IsEmpty(VALUE self) {
103
+ return rr_v82rb(rr_v8_handle<void>(self).IsEmpty());
104
+ }
105
+
106
+ VALUE Clear(VALUE self) {
107
+ rr_v8_handle<void>(self).Clear();
108
+ return Qnil;
109
+ }
110
+
111
+ VALUE Dispose(VALUE self) {
112
+ rr_v8_handle<void>(self).Dispose();
113
+ return Qnil;
114
+ }
115
+
116
+ void RubyWeakReferenceCallback(Persistent<Value> value, void* parameter) {
117
+ VALUE self = (VALUE)parameter;
118
+ v8_handle* handle = rr_v8_handle_raw(self);
119
+ VALUE callback = handle->weakref_callback;
120
+ VALUE parameters = handle->weakref_callback_parameters;
121
+ if (RTEST(callback)) {
122
+ rb_funcall(callback, rb_intern("call"), 2, self, parameters);
123
+ }
124
+ value.Dispose();
125
+ handle->payload->release();
126
+ handle->dead = true;
127
+
128
+ }
129
+
130
+ VALUE MakeWeak(VALUE self, VALUE parameters, VALUE callback) {
131
+ v8_handle* handle = rr_v8_handle_raw(self);
132
+ handle->weakref_callback = callback;
133
+ handle->weakref_callback_parameters = parameters;
134
+ rr_v8_handle<void>(self).MakeWeak((void*)self, RubyWeakReferenceCallback);
135
+ return Qnil;
136
+ }
137
+
138
+ VALUE ClearWeak(VALUE self) {
139
+ rr_v8_handle<void>(self).ClearWeak();
140
+ return Qnil;
141
+ }
142
+
143
+ VALUE IsNearDeath(VALUE self) {
144
+ return rr_v82rb(rr_v8_handle<void>(self).IsNearDeath());
145
+ }
146
+
147
+ VALUE IsWeak(VALUE self) {
148
+ return rr_v82rb(rr_v8_handle<void>(self).IsWeak());
149
+ }
150
+
151
+ VALUE dead_p(VALUE self) {
152
+ return rr_v8_handle_raw(self)->dead ? Qtrue : Qfalse;
153
+ }
154
+ }
155
+
156
+ void rr_init_handle() {
157
+ VALUE HandleClass = rr_define_class("Handle");
158
+ rr_define_method(HandleClass, "dead?", dead_p, 0);
159
+ rr_define_singleton_method(HandleClass, "New", New, 1);
160
+ rr_define_method(HandleClass, "IsEmpty", IsEmpty, 0);
161
+ rr_define_method(HandleClass, "Clear", Clear, 0);
162
+ rr_define_method(HandleClass, "Dispose", Dispose, 0);
163
+ rr_define_method(HandleClass, "MakeWeak", MakeWeak, 2);
164
+ rr_define_method(HandleClass, "ClearWeak", ClearWeak, 0);
165
+ rr_define_method(HandleClass, "IsNearDeath", IsNearDeath, 0);
166
+ rr_define_method(HandleClass, "IsWeak", IsWeak, 0);
167
+
168
+ rb_gc_register_address(&handle_queue);
169
+ handle_queue = rb_ary_new();
170
+ V8::AddGCPrologueCallback(v8_handle_dequeue);
171
+ }
172
+
173
+ VALUE rr_v8_handle_new(VALUE klass, v8::Handle<void> handle) {
174
+ v8_handle* new_handle = new v8_handle(handle);
175
+ return Data_Wrap_Struct(klass, v8_handle_mark, v8_handle_enqueue, new_handle);
176
+ }
177
+
178
+ VALUE rr_v8_handle_class() {
179
+ return rr_define_class("Handle");
180
+ }
181
+
182
+ v8_handle* rr_v8_handle_raw(VALUE value) {
183
+ v8_handle* handle = 0;
184
+ Data_Get_Struct(value, struct v8_handle, handle);
185
+ return handle;
186
+ }
@@ -0,0 +1,48 @@
1
+ #ifndef _RR_V8_HANDLE_
2
+ #define _RR_V8_HANDLE_
3
+
4
+ #include <v8.h>
5
+ #include "ruby.h"
6
+
7
+ /**
8
+ * Holds a reference to a V8 heap object. This serves as the base
9
+ * class for all of the low-level proxies that reference into V8.
10
+ */
11
+ struct v8_handle {
12
+
13
+ /**
14
+ * Contains the *actual* V8 references. This object is kept
15
+ * separate so that it can be "detached" from the handle when
16
+ * it is garbage collected, and enqueued separately and
17
+ * collected in the context of a V8 thread.
18
+ */
19
+
20
+ struct Payload {
21
+ Payload(v8::Handle<void> object);
22
+ virtual ~Payload();
23
+ void release();
24
+ static void destroy(v8_handle::Payload* payload);
25
+ v8::Persistent<void> handle;
26
+ VALUE wrapper;
27
+ };
28
+
29
+ v8_handle(v8::Handle<void> object);
30
+ virtual ~v8_handle();
31
+
32
+ Payload* payload;
33
+ bool dead;
34
+ VALUE weakref_callback;
35
+ VALUE weakref_callback_parameters;
36
+ };
37
+
38
+ void rr_init_handle();
39
+
40
+ v8_handle* rr_v8_handle_raw(VALUE value);
41
+
42
+ template <class T> v8::Persistent<T>& rr_v8_handle(VALUE value) {
43
+ return (v8::Persistent<T>&)(rr_v8_handle_raw(value)->payload->handle);
44
+ }
45
+ VALUE rr_v8_handle_new(VALUE rbclass, v8::Handle<void> handle);
46
+ VALUE rr_v8_handle_class();
47
+
48
+ #endif
@@ -0,0 +1,139 @@
1
+ #include "rr.h"
2
+ #include "v8_locker.h"
3
+
4
+ using namespace v8;
5
+
6
+ namespace {
7
+ namespace Lock {
8
+
9
+ /**
10
+ * Document-method: V8::C::Locker#new
11
+ *
12
+ * Allocates and returns a new `v8::Locker` object. The thread that instantiated
13
+ * this object will hold the V8 interpreter lock until it is released with a
14
+ * corresponding call to {#delete}.
15
+ *
16
+ * It critical that you call {#delete} to deallocate it, preferably within the same method.
17
+ * If you don't, two bad things will happen:
18
+ *
19
+ * 1. You'll leak the underlying C++ object
20
+ * 1. Worse, you'll leave the V8 vm locked to this thread forever
21
+ *
22
+ * It's dangerous! Be sure to `ensure`.
23
+ *
24
+ * for detailed semantics see the locking {API http://izs.me/v8-docs/classv8_1_1Unlocker.html}
25
+ *
26
+ * @return [V8::C::Locker] the new locker
27
+ */
28
+
29
+ VALUE New(VALUE LockerClass) {
30
+ Locker* locker = new Locker();
31
+ return Data_Wrap_Struct(LockerClass, 0, 0, (void*)locker);
32
+ }
33
+
34
+ /**
35
+ * Document-method: V8::C::Locker#delete
36
+ *
37
+ * Pop this lock off the stack for this thread. For a full run down of V8 locking
38
+ * semantics see the locking {API http://izs.me/v8-docs/classv8_1_1Unlocker.html}
39
+ * @return nil
40
+ */
41
+ VALUE Delete(VALUE self) {
42
+ Locker* locker = 0;
43
+ Data_Get_Struct(self, class Locker, locker);
44
+ delete locker;
45
+ }
46
+ }
47
+
48
+ namespace Unlock {
49
+ /**
50
+ * Document-method: V8::C::Unlocker#new
51
+ *
52
+ * Allocates and returns a new `v8::UnLocker` object, temporarily releasing any locks that
53
+ * this thread is holding. It will reaquire all of the locksto {#delete}.
54
+ *
55
+ * This is a great thing to do when you want to call out to some code that might do some
56
+ * waiting, sleeping, and you want to politely let other threads use this VM.
57
+ *
58
+ * It critical that you call {#delete} to deallocate it, preferably within the same method.
59
+ * If you don't, two bad things will happen:
60
+ *
61
+ * 1. You'll leak the underlying C++ object
62
+ * 1. You won't restore the locks to your current thread, and will mess things up horribly
63
+ *
64
+ * It's dangerous! Be sure to `ensure`.
65
+ *
66
+ * For details on V8 locking semantics, see the locking {API http://izs.me/v8-docs/classv8_1_1Unlocker.html}
67
+ * @return [V8::C::Unocker] the new locker
68
+ */
69
+ VALUE New(VALUE UnlockerClass) {
70
+ Unlocker* unlocker = new Unlocker();
71
+ return Data_Wrap_Struct(UnlockerClass, 0, 0, (void*)unlocker);
72
+ }
73
+
74
+ /**
75
+ * Document-method: V8::C::Unlocker#delete
76
+ *
77
+ * Restore any locks to the stack that were temporarily removed by this `Unlocker`.
78
+ * For a full run down, see semantics see the locking {API http://izs.me/v8-docs/classv8_1_1Unlocker.html}
79
+ * @return nil
80
+ */
81
+ VALUE Delete(VALUE self) {
82
+ Unlocker* unlocker;
83
+ Data_Get_Struct(self, class Unlocker, unlocker);
84
+ delete unlocker;
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Document-method: V8::C::Locker#StartPreemption
90
+ * Start preemption.
91
+ * When preemption is started, a timer is fired every n milli seconds that will switch between
92
+ * multiple threads that are in contention for the V8 lock.
93
+ *
94
+ * @param [Integer] every_n_ms
95
+ * @return nil
96
+ */
97
+ VALUE StartPreemption(VALUE self, VALUE every_n_ms) {
98
+ Locker::StartPreemption(NUM2INT(rb_to_int(every_n_ms)));
99
+ return Qnil;
100
+ }
101
+
102
+ /**
103
+ * Document-method: V8::C::Locker#StartPreemption
104
+ * Stop preemption
105
+ */
106
+ VALUE StopPreemption(VALUE self) {
107
+ Locker::StopPreemption();
108
+ return Qnil;
109
+ }
110
+
111
+ /**
112
+ * Document-method: V8::C::Locker#IsLocked
113
+ * Returns whether or not the locker is locked by the current thread.
114
+ */
115
+ VALUE IsLocked(VALUE self) {
116
+ return rr_v82rb(Locker::IsLocked());
117
+ }
118
+
119
+ /**
120
+ * Document-method: V8::C::Locker#IsActive
121
+ * Returns whether v8::Locker is being used by this V8 instance.
122
+ */
123
+ VALUE IsActive(VALUE self) {
124
+ return rr_v82rb(Locker::IsActive());
125
+ }
126
+ }
127
+
128
+ void rr_init_v8_locker() {
129
+ VALUE LockerClass = rr_define_class("Locker");
130
+ VALUE UnlockerClass = rr_define_class("Unlocker");
131
+ rr_define_singleton_method(LockerClass, "new", Lock::New, 0);
132
+ rr_define_method(LockerClass, "delete", Lock::Delete, 0);
133
+ rr_define_singleton_method(UnlockerClass, "new", Unlock::New, 0);
134
+ rr_define_method(UnlockerClass, "delete", Unlock::Delete, 0);
135
+ rr_define_singleton_method(LockerClass, "StartPreemption", StartPreemption, 1);
136
+ rr_define_singleton_method(LockerClass, "StopPreemption", StopPreemption, 0);
137
+ rr_define_singleton_method(LockerClass, "IsLocked", IsLocked, 0);
138
+ rr_define_singleton_method(LockerClass, "IsActive", IsActive, 0);
139
+ }
@@ -0,0 +1,6 @@
1
+ #ifndef _RUBY_V8_LOCKER
2
+ #define _RUBY_V8_LOCKER
3
+
4
+ void rr_init_v8_locker();
5
+
6
+ #endif
@@ -0,0 +1,67 @@
1
+ #include "v8_message.h"
2
+ #include "v8_handle.h"
3
+
4
+ using namespace v8;
5
+
6
+ namespace {
7
+ VALUE MessageClass;
8
+
9
+ Persistent<Message>& unwrap(VALUE self) {
10
+ return rr_v8_handle<Message>(self);
11
+ }
12
+
13
+ VALUE Get(VALUE self) {
14
+ return rr_v82rb(unwrap(self)->Get());
15
+ }
16
+
17
+ VALUE GetSourceLine(VALUE self) {
18
+ return rr_v82rb(unwrap(self)->GetSourceLine());
19
+ }
20
+
21
+ VALUE GetScriptResourceName(VALUE self) {
22
+ return rr_v82rb(unwrap(self)->GetScriptResourceName());
23
+ }
24
+
25
+ VALUE GetStackTrace(VALUE self) {
26
+ Handle<StackTrace> trace = unwrap(self)->GetStackTrace();
27
+ return trace.IsEmpty() ? Qnil : rr_v82rb(trace);
28
+ }
29
+
30
+ VALUE GetLineNumber(VALUE self) {
31
+ return rr_v82rb(unwrap(self)->GetLineNumber());
32
+ }
33
+
34
+ VALUE GetStartPosition(VALUE self) {
35
+ return rr_v82rb(unwrap(self)->GetStartPosition());
36
+ }
37
+
38
+ VALUE GetEndPosition(VALUE self) {
39
+ return rr_v82rb(unwrap(self)->GetEndPosition());
40
+ }
41
+
42
+ VALUE GetStartColumn(VALUE self) {
43
+ return rr_v82rb(unwrap(self)->GetStartColumn());
44
+ }
45
+
46
+ VALUE GetEndColumn(VALUE self) {
47
+ return rr_v82rb(unwrap(self)->GetEndColumn());
48
+ }
49
+ }
50
+
51
+ void rr_init_message() {
52
+ MessageClass = rr_define_class("Message", rr_v8_handle_class());
53
+ rr_define_method(MessageClass, "Get", Get, 0);
54
+ rr_define_method(MessageClass, "GetSourceLine", GetSourceLine, 0);
55
+ rr_define_method(MessageClass, "GetScriptResourceName", GetScriptResourceName, 0);
56
+ rr_define_method(MessageClass, "GetStackTrace", GetStackTrace, 0);
57
+ rr_define_method(MessageClass, "GetLineNumber", GetLineNumber, 0);
58
+ rr_define_method(MessageClass, "GetStartPosition", GetStartPosition, 0);
59
+ rr_define_method(MessageClass, "GetEndPosition", GetEndPosition, 0);
60
+ rr_define_method(MessageClass, "GetStartColumn", GetStartColumn, 0);
61
+ rr_define_method(MessageClass, "GetEndColumn", GetEndColumn, 0);
62
+ }
63
+
64
+ VALUE rr_reflect_v8_message(Handle<Message> value) {
65
+ return rr_v8_handle_new(MessageClass, value);
66
+ }
67
+
@@ -0,0 +1,10 @@
1
+ #ifndef _RUBY_V8_MESSAGE_
2
+ #define _RUBY_V8_MESSAGE_
3
+
4
+ #include "v8.h"
5
+ #include "rr.h"
6
+
7
+ void rr_init_message();
8
+ VALUE rr_reflect_v8_message(v8::Handle<v8::Message> value);
9
+
10
+ #endif
@@ -0,0 +1,122 @@
1
+ #include "v8_handle.h"
2
+ #include "v8_weakref.h"
3
+ #include "v8_object.h"
4
+ #include "v8_value.h"
5
+ #include "v8_template.h"
6
+ #include "v8_external.h"
7
+
8
+ using namespace v8;
9
+
10
+ #include <cstdio>
11
+
12
+ namespace {
13
+
14
+ VALUE ObjectClass;
15
+
16
+ Persistent<Object>& unwrap(VALUE object) {
17
+ return rr_v8_handle<Object>(object);
18
+ }
19
+
20
+ VALUE Get(VALUE self, VALUE key) {
21
+ HandleScope handles;
22
+ Persistent<Object> obj(unwrap(self));
23
+ if (rb_obj_is_kind_of(key, rb_cNumeric)) {
24
+ return rr_v82rb(obj->Get(NUM2UINT(key)));
25
+ } else {
26
+ return rr_v82rb(obj->Get(rr_rb2v8(key)->ToString()));
27
+ }
28
+ }
29
+
30
+ VALUE New(VALUE rbclass) {
31
+ HandleScope handles;
32
+ if (!Context::InContext()) {
33
+ rb_raise(rb_eScriptError, "Object::New() called without an entered Context");
34
+ return Qnil;
35
+ }
36
+ return rr_v8_handle_new(rbclass, Object::New());
37
+ }
38
+
39
+ VALUE Set(VALUE self, VALUE key, VALUE value) {
40
+ HandleScope handles;
41
+ Persistent<Object> obj = unwrap(self);
42
+ if (rb_obj_is_kind_of(key, rb_cNumeric)) {
43
+ return rr_v82rb(obj->Set(NUM2UINT(key), rr_rb2v8(value)));
44
+ } else {
45
+ return rr_v82rb(obj->Set(rr_rb2v8(key), rr_rb2v8(value)));
46
+ }
47
+ }
48
+
49
+ VALUE GetPropertyNames(VALUE self) {
50
+ HandleScope handles;
51
+ Persistent<Object> object = unwrap(self);
52
+ Local<Value> names = object->GetPropertyNames();
53
+ return rr_v82rb(names);
54
+ }
55
+ VALUE GetIdentityHash(VALUE self) {
56
+ return rr_v82rb(unwrap(self)->GetIdentityHash());
57
+ }
58
+ VALUE SetHiddenValue(VALUE self, VALUE key, VALUE value) {
59
+ HandleScope scope;
60
+ if (Context::InContext()) {
61
+ unwrap(self)->SetHiddenValue(rr_rb2v8(key)->ToString(), rr_rb2v8(value));
62
+ } else {
63
+ rb_raise(rb_eScriptError, "Object::SetHiddenValue() called without an entered Context");
64
+ }
65
+ return Qnil;
66
+ }
67
+ VALUE GetHiddenValue(VALUE self, VALUE key) {
68
+ HandleScope scope;
69
+ return rr_v82rb(unwrap(self)->GetHiddenValue(rr_rb2v8(key)->ToString()));
70
+ }
71
+ VALUE GetPrototype(VALUE self) {
72
+ HandleScope scope;
73
+ return rr_v82rb(unwrap(self)->GetPrototype());
74
+ }
75
+ VALUE SetPrototype(VALUE self, VALUE prototype) {
76
+ HandleScope scope;
77
+ Handle<Value> proto(rr_rb2v8(prototype));
78
+ return rr_v82rb(unwrap(self)->SetPrototype(rr_rb2v8(prototype)));
79
+ }
80
+ }
81
+
82
+ VALUE rr_v8_object_class() {
83
+ return ObjectClass;
84
+ }
85
+
86
+ void rr_init_object() {
87
+ ObjectClass = rr_define_class("Object", rr_v8_value_class());
88
+ rr_define_singleton_method(ObjectClass, "New", New, 0);
89
+ rr_define_method(ObjectClass, "Get", Get, 1);
90
+ rr_define_method(ObjectClass, "Set", Set, 2);
91
+ rr_define_method(ObjectClass, "GetPropertyNames", GetPropertyNames, 0);
92
+ rr_define_method(ObjectClass, "GetIdentityHash", GetIdentityHash, 0);
93
+ rr_define_method(ObjectClass, "GetHiddenValue", GetHiddenValue, 1);
94
+ rr_define_method(ObjectClass, "SetHiddenValue", SetHiddenValue, 2);
95
+ rr_define_method(ObjectClass, "GetPrototype", GetPrototype, 0);
96
+ rr_define_method(ObjectClass, "SetPrototype", SetPrototype, 1);
97
+ }
98
+
99
+ VALUE rr_reflect_v8_object_as(Handle<Value> value, VALUE ruby_class) {
100
+ Handle<Object> object = Handle<Object>::Cast(value);
101
+ VALUE handle;
102
+ v8_weakref* backref;
103
+ Local<Value> holder = object->GetHiddenValue(String::NewSymbol("TheRubyRacer::Backref"));
104
+ if (holder.IsEmpty()) {
105
+ handle = rr_v8_handle_new(ruby_class, object);
106
+ backref = new v8_weakref(handle);
107
+ object->SetHiddenValue(String::NewSymbol("TheRubyRacer::Backref"), backref->external);
108
+ } else {
109
+ backref = (v8_weakref*)External::Unwrap(holder);
110
+ handle = backref->get();
111
+ if (!RTEST(handle)) {
112
+ handle = rr_v8_handle_new(ruby_class, object);
113
+ backref->set(handle);
114
+ }
115
+ }
116
+ return handle;
117
+ }
118
+
119
+ VALUE rr_reflect_v8_object(Handle<Value> value) {
120
+ return rr_reflect_v8_object_as(value, ObjectClass);
121
+ }
122
+
@@ -0,0 +1,10 @@
1
+ #ifndef _RUBY_V8_OBJECT_
2
+ #define _RUBY_V8_OBJECT_
3
+
4
+ #include "rr.h"
5
+
6
+ void rr_init_object();
7
+ VALUE rr_v8_object_class();
8
+ VALUE rr_reflect_v8_object(v8::Handle<v8::Value> value);
9
+ VALUE rr_reflect_v8_object_as(v8::Handle<v8::Value> object, VALUE ruby_class);
10
+ #endif
@@ -0,0 +1,36 @@
1
+ #include "v8.h"
2
+ #include "v8_handle.h"
3
+ #include "v8_script.h"
4
+
5
+ using namespace v8;
6
+
7
+ namespace {
8
+
9
+ VALUE New(VALUE self, VALUE source, VALUE source_name) {
10
+ HandleScope scope;
11
+ Local<String> src(rr_rb2v8(source)->ToString());
12
+ Local<String> src_name(rr_rb2v8(source_name)->ToString());
13
+ return rr_v8_handle_new(self, Script::Compile(src, src_name));
14
+ }
15
+
16
+ VALUE Compile(VALUE self, VALUE source, VALUE source_name) {
17
+ HandleScope scope;
18
+ Local<String> src(rr_rb2v8(source)->ToString());
19
+ Local<String> src_name(rr_rb2v8(source_name)->ToString());
20
+ return rr_v8_handle_new(self, Script::Compile(src, src_name));
21
+ }
22
+
23
+ VALUE Run(VALUE self) {
24
+ HandleScope scope;
25
+ Persistent<Script> script(rr_v8_handle<Script>(self));
26
+ Local<Value> result(script->Run());
27
+ return result.IsEmpty() ? Qnil : rr_v82rb(result);
28
+ }
29
+ }
30
+
31
+ void rr_init_script() {
32
+ VALUE ScriptClass = rr_define_class("Script", rr_v8_handle_class());
33
+ rr_define_singleton_method(ScriptClass, "New", New, 2);
34
+ rr_define_singleton_method(ScriptClass, "Compile", Compile, 2);
35
+ rr_define_method(ScriptClass, "Run", Run, 0);
36
+ }
@@ -0,0 +1,8 @@
1
+ #ifndef _RUBY_V8_SCRIPT_
2
+ #define _RUBY_V8_SCRIPT_
3
+
4
+ #include "rr.h"
5
+
6
+ void rr_init_script();
7
+
8
+ #endif
@@ -0,0 +1,52 @@
1
+
2
+ #include "v8.h"
3
+ #include "v8_handle.h"
4
+ #include "v8_value.h"
5
+ #include "v8_string.h"
6
+
7
+ using namespace v8;
8
+
9
+ namespace {
10
+ VALUE StringClass;
11
+
12
+ Persistent<String>& unwrap(VALUE value) {
13
+ return rr_v8_handle<String>(value);
14
+ }
15
+ VALUE New(VALUE string_class, VALUE data) {
16
+ HandleScope handles;
17
+ VALUE str = rb_funcall(data, rb_intern("to_s"), 0);
18
+ return rr_v8_handle_new(string_class, String::New(RSTRING_PTR(str), RSTRING_LEN(str)));
19
+ }
20
+ VALUE NewSymbol(VALUE string_class, VALUE data) {
21
+ HandleScope scope;
22
+ VALUE str = rb_funcall(data, rb_intern("to_s"), 0);
23
+ return rr_v8_handle_new(string_class, String::NewSymbol(RSTRING_PTR(str), RSTRING_LEN(str)));
24
+ }
25
+ VALUE Utf8Value(VALUE self) {
26
+ HandleScope handles;
27
+ Handle<String> str = unwrap(self);
28
+ return rb_str_new(*String::Utf8Value(str), str->Utf8Length());
29
+ }
30
+ VALUE Utf16Value(VALUE self) {
31
+ //How are UTF16 strings represented in ruby 1.8, 1.9
32
+ return Qnil;
33
+ }
34
+ VALUE AsciiValue(VALUE self) {
35
+ HandleScope handles;
36
+ Handle<String> str = unwrap(self);
37
+ return rb_str_new(*String::AsciiValue(str), str->Length());
38
+ }
39
+ }
40
+
41
+ VALUE rr_reflect_v8_string(Handle<Value> value) {
42
+ return rr_v8_handle_new(StringClass, Handle<String>::Cast(value));
43
+ }
44
+
45
+ void rr_init_string() {
46
+ StringClass = rr_define_class("String", rr_v8_value_class());
47
+ rr_define_singleton_method(StringClass, "New", New, 1);
48
+ rr_define_singleton_method(StringClass, "NewSymbol", NewSymbol, 1);
49
+ rr_define_method(StringClass, "Utf8Value", Utf8Value, 0);
50
+ rr_define_method(StringClass, "Utf16Value", Utf16Value, 0);
51
+ rr_define_method(StringClass, "AsciiValue", AsciiValue, 0);
52
+ }