opal 0.2.2 → 0.3.0

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 (325) hide show
  1. data/.gitignore +5 -10
  2. data/LICENSE +75 -0
  3. data/README.md +55 -3
  4. data/Rakefile +62 -139
  5. data/bin/opal +7 -10
  6. data/gems/core/README.md +5 -0
  7. data/gems/core/Rakefile +7 -0
  8. data/gems/core/core.gemspec +13 -0
  9. data/gems/core/lib/core.rb +33 -0
  10. data/gems/core/lib/core/array.rb +1470 -0
  11. data/gems/core/lib/core/basic_object.rb +15 -0
  12. data/gems/core/lib/core/class.rb +31 -0
  13. data/gems/core/lib/core/dir.rb +26 -0
  14. data/gems/core/lib/core/error.rb +43 -0
  15. data/gems/core/lib/core/false_class.rb +21 -0
  16. data/gems/core/lib/core/file.rb +54 -0
  17. data/gems/core/lib/core/hash.rb +725 -0
  18. data/gems/core/lib/core/kernel.rb +240 -0
  19. data/gems/core/lib/core/module.rb +98 -0
  20. data/gems/core/lib/core/nil_class.rb +41 -0
  21. data/gems/core/lib/core/numeric.rb +370 -0
  22. data/gems/core/lib/core/proc.rb +11 -0
  23. data/gems/core/lib/core/range.rb +17 -0
  24. data/gems/core/lib/core/regexp.rb +18 -0
  25. data/gems/core/lib/core/string.rb +328 -0
  26. data/gems/core/lib/core/symbol.rb +15 -0
  27. data/gems/core/lib/core/top_self.rb +8 -0
  28. data/gems/core/lib/core/true_class.rb +20 -0
  29. data/gems/core/lib/core/vm.rb +16 -0
  30. data/{opals/opal/opal → gems/core}/spec/core/array/append_spec.rb +0 -0
  31. data/{opals/opal/opal → gems/core}/spec/core/array/assoc_spec.rb +0 -0
  32. data/{opals/opal/opal → gems/core}/spec/core/array/at_spec.rb +0 -0
  33. data/{opals/opal/opal → gems/core}/spec/core/array/clear_spec.rb +1 -1
  34. data/{opals/opal/opal → gems/core}/spec/core/array/collect_bang_spec.rb +0 -0
  35. data/{opals/opal/opal → gems/core}/spec/core/array/collect_spec.rb +0 -0
  36. data/gems/core/spec/core/array/compact_spec.rb +41 -0
  37. data/{opals/opal/opal → gems/core}/spec/core/array/concat_spec.rb +0 -0
  38. data/{opals/opal/opal → gems/core}/spec/core/array/constructor_spec.rb +0 -0
  39. data/{opals/opal/opal → gems/core}/spec/core/array/each_spec.rb +0 -0
  40. data/{opals/opal/opal → gems/core}/spec/core/array/element_reference_spec.rb +0 -0
  41. data/{opals/opal/opal → gems/core}/spec/core/array/first_spec.rb +1 -1
  42. data/{opals/opal/opal → gems/core}/spec/core/array/include_spec.rb +0 -0
  43. data/gems/core/spec/core/array/join_spec.rb +6 -0
  44. data/gems/core/spec/core/array/last_spec.rb +51 -0
  45. data/gems/core/spec/core/array/length_spec.rb +6 -0
  46. data/{opals/opal/opal → gems/core}/spec/core/array/map_spec.rb +2 -0
  47. data/gems/core/spec/core/array/reverse_spec.rb +6 -0
  48. data/{opals/opal/opal → gems/core}/spec/core/builtin_constants/builtin_constants_spec.rb +0 -0
  49. data/{opals/opal/opal → gems/core}/spec/core/false/and_spec.rb +0 -0
  50. data/{opals/opal/opal → gems/core}/spec/core/false/inspect_spec.rb +0 -0
  51. data/{opals/opal/opal → gems/core}/spec/core/false/or_spec.rb +0 -0
  52. data/{opals/opal/opal → gems/core}/spec/core/false/to_s_spec.rb +0 -0
  53. data/{opals/opal/opal → gems/core}/spec/core/false/xor_spec.rb +0 -0
  54. data/{opals/opal/opal → gems/core}/spec/core/file/join_spec.rb +1 -1
  55. data/gems/core/spec/core/hash/assoc_spec.rb +32 -0
  56. data/{opals/opal/opal → gems/core}/spec/core/kernel/instance_eval_spec.rb +0 -0
  57. data/{opals/opal/opal → gems/core}/spec/core/kernel/loop_spec.rb +0 -0
  58. data/{opals/opal/opal → gems/core}/spec/core/kernel/raise_spec.rb +0 -0
  59. data/{opals/opal/opal → gems/core}/spec/core/module/attr_accessor_spec.rb +0 -0
  60. data/{opals/opal/opal → gems/core}/spec/core/number/lt_spec.rb +0 -0
  61. data/gems/core/spec/core/string/sub_spec.rb +24 -0
  62. data/{opals/opal/opal → gems/core}/spec/core/true/and_spec.rb +0 -0
  63. data/{opals/opal/opal → gems/core}/spec/core/true/inspect_spec.rb +0 -0
  64. data/{opals/opal/opal → gems/core}/spec/core/true/or_spec.rb +0 -0
  65. data/{opals/opal/opal → gems/core}/spec/core/true/to_s_spec.rb +0 -0
  66. data/{opals/opal/opal → gems/core}/spec/core/true/xor_spec.rb +0 -0
  67. data/{opals/opal/opal → gems/core}/spec/language/and_spec.rb +2 -3
  68. data/{opals/opal/opal → gems/core}/spec/language/array_spec.rb +21 -5
  69. data/gems/core/spec/language/block_spec.rb +38 -0
  70. data/{opals/opal/opal → gems/core}/spec/language/break_spec.rb +0 -0
  71. data/gems/core/spec/language/case_spec.rb +103 -0
  72. data/{opals/opal/opal → gems/core}/spec/language/def_spec.rb +11 -1
  73. data/{opals/opal/opal → gems/core}/spec/language/eigenclass_spec.rb +0 -0
  74. data/gems/core/spec/language/file_spec.rb +13 -0
  75. data/gems/core/spec/language/fixtures/block.rb +21 -0
  76. data/gems/core/spec/language/fixtures/super.rb +293 -0
  77. data/{opals/opal/opal → gems/core}/spec/language/hash_spec.rb +0 -0
  78. data/{opals/opal/opal → gems/core}/spec/language/if_spec.rb +0 -0
  79. data/{opals/opal/opal → gems/core}/spec/language/loop_spec.rb +0 -0
  80. data/gems/core/spec/language/metaclass_spec.rb +21 -0
  81. data/{opals/opal/opal → gems/core}/spec/language/method_spec.rb +60 -0
  82. data/{opals/opal/opal → gems/core}/spec/language/next_spec.rb +0 -0
  83. data/{opals/opal/opal → gems/core}/spec/language/or_spec.rb +0 -0
  84. data/{opals/opal/opal → gems/core}/spec/language/redo_spec.rb +0 -0
  85. data/gems/core/spec/language/regexp_spec.rb +26 -0
  86. data/{opals/opal/opal → gems/core}/spec/language/rescue_spec.rb +0 -0
  87. data/{opals/opal/opal → gems/core}/spec/language/return_spec.rb +0 -0
  88. data/{opals/opal/opal → gems/core}/spec/language/string_spec.rb +0 -0
  89. data/gems/core/spec/language/super_spec.rb +32 -0
  90. data/{opals/opal/opal → gems/core}/spec/language/until_spec.rb +47 -47
  91. data/gems/core/spec/language/variables_spec.rb +155 -0
  92. data/{opals/opal/opal → gems/core}/spec/language/while_spec.rb +47 -47
  93. data/{opals/opal/opal → gems/core}/spec/spec_helper.rb +1 -1
  94. data/gems/core_fs/README.md +19 -0
  95. data/gems/dev/Rakefile +5 -0
  96. data/gems/dev/lib/dev.js +99 -0
  97. data/gems/dev/lib/dev/generator.js +1264 -0
  98. data/gems/dev/lib/dev/parser.js +979 -0
  99. data/gems/dev/lib/dev/ruby_parser.js +1088 -0
  100. data/gems/dev/lib/dev/ruby_parser.y +1267 -0
  101. data/gems/dev/lib/dev/string_scanner.js +38 -0
  102. data/gems/dev/tools/racc2js/README.md +39 -0
  103. data/gems/dev/tools/racc2js/math_parser.js +222 -0
  104. data/gems/dev/tools/racc2js/math_parser.rb +133 -0
  105. data/gems/dev/tools/racc2js/math_parser.y +28 -0
  106. data/gems/dev/tools/racc2js/parser.js +218 -0
  107. data/gems/dev/tools/racc2js/racc2js.rb +153 -0
  108. data/gems/json/README.md +4 -0
  109. data/gems/json/json.gemspec +14 -0
  110. data/gems/json/lib/json.rb +64 -0
  111. data/gems/json/lib/json/ext.rb +51 -0
  112. data/{opals/opal/browser/lib/browser/json_parse.js → gems/json/lib/json/json2.js} +197 -37
  113. data/gems/ospec/README.md +0 -0
  114. data/gems/ospec/lib/ospec.rb +6 -0
  115. data/gems/ospec/lib/ospec/autorun.rb +3 -0
  116. data/gems/ospec/lib/ospec/dsl.rb +15 -0
  117. data/gems/ospec/lib/ospec/example.rb +11 -0
  118. data/gems/ospec/lib/ospec/example/before_and_after_hooks.rb +56 -0
  119. data/gems/ospec/lib/ospec/example/errors.rb +17 -0
  120. data/gems/ospec/lib/ospec/example/example_group.rb +12 -0
  121. data/gems/ospec/lib/ospec/example/example_group_factory.rb +21 -0
  122. data/gems/ospec/lib/ospec/example/example_group_hierarchy.rb +20 -0
  123. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/example/example_group_methods.rb +26 -68
  124. data/gems/ospec/lib/ospec/example/example_group_proxy.rb +14 -0
  125. data/gems/ospec/lib/ospec/example/example_methods.rb +46 -0
  126. data/gems/ospec/lib/ospec/example/example_proxy.rb +18 -0
  127. data/gems/ospec/lib/ospec/expectations.rb +19 -0
  128. data/gems/ospec/lib/ospec/expectations/errors.rb +8 -0
  129. data/gems/ospec/lib/ospec/expectations/fail_with.rb +8 -0
  130. data/gems/ospec/lib/ospec/expectations/handler.rb +27 -0
  131. data/gems/ospec/lib/ospec/matchers.rb +24 -0
  132. data/{opals/opal/Rakefile → gems/ospec/lib/ospec/matchers/be.rb} +0 -0
  133. data/gems/ospec/lib/ospec/matchers/generated_descriptions.rb +20 -0
  134. data/gems/ospec/lib/ospec/matchers/operator_matcher.rb +52 -0
  135. data/gems/ospec/lib/ospec/runner.rb +40 -0
  136. data/gems/ospec/lib/ospec/runner/example_group_runner.rb +44 -0
  137. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/formatter/html_formatter.rb +31 -40
  138. data/gems/ospec/lib/ospec/runner/formatter/terminal_formatter.rb +48 -0
  139. data/gems/ospec/lib/ospec/runner/options.rb +36 -0
  140. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/reporter.rb +23 -55
  141. data/gems/ospec/ospec.gemspec +0 -0
  142. data/gems/rquery/README.md +9 -0
  143. data/gems/rquery/lib/rquery.rb +10 -0
  144. data/gems/rquery/lib/rquery/ajax.rb +4 -0
  145. data/gems/rquery/lib/rquery/css.rb +96 -0
  146. data/gems/rquery/lib/rquery/document.rb +25 -0
  147. data/gems/rquery/lib/rquery/element.rb +292 -0
  148. data/gems/rquery/lib/rquery/event.rb +108 -0
  149. data/gems/rquery/lib/rquery/jquery.js +8177 -0
  150. data/gems/rquery/lib/rquery/request.rb +138 -0
  151. data/gems/rquery/lib/rquery/response.rb +49 -0
  152. data/gems/rquery/rquery.gemspec +16 -0
  153. data/lib/opal.js +1597 -0
  154. data/lib/opal.rb +6 -69
  155. data/lib/opal/builder.rb +115 -0
  156. data/lib/opal/bundle.rb +131 -0
  157. data/lib/opal/command.rb +11 -0
  158. data/lib/opal/context.rb +69 -0
  159. data/lib/opal/context/console.rb +12 -0
  160. data/lib/opal/context/file_system.rb +19 -0
  161. data/lib/opal/context/loader.rb +117 -0
  162. data/lib/opal/gem.rb +153 -0
  163. data/lib/opal/ruby/nodes.rb +1302 -0
  164. data/lib/opal/ruby/parser.rb +780 -0
  165. data/lib/opal/ruby/ruby_parser.rb +5170 -0
  166. data/lib/opal/ruby/ruby_parser.y +1298 -0
  167. data/opal.gemspec +11 -256
  168. metadata +179 -240
  169. data/.gitmodules +0 -6
  170. data/Opalfile +0 -384
  171. data/VERSION +0 -1
  172. data/demos/apps/browser_demo/index.html +0 -11
  173. data/demos/apps/browser_demo/lib/browser_demo.rb +0 -31
  174. data/demos/apps/simple_opal/Opalfile +0 -13
  175. data/demos/apps/simple_opal/index.html +0 -11
  176. data/demos/apps/simple_opal/lib/app_controller.rb +0 -62
  177. data/demos/apps/simple_opal/lib/main_window.rb +0 -146
  178. data/demos/browser/request/index.html +0 -52
  179. data/demos/browser/request/request.rb +0 -48
  180. data/gen/browser/__PROJECT_NAME__/Rakefile +0 -12
  181. data/gen/browser/__PROJECT_NAME__/index.html +0 -11
  182. data/gen/browser/__PROJECT_NAME__/javascripts/opal.debug.js +0 -4687
  183. data/gen/browser/__PROJECT_NAME__/javascripts/opal.min.js +0 -175
  184. data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +0 -1
  185. data/lib/opal/builders/base.rb +0 -50
  186. data/lib/opal/builders/css.rb +0 -46
  187. data/lib/opal/builders/javascript.rb +0 -44
  188. data/lib/opal/builders/opal.rb +0 -79
  189. data/lib/opal/builders/ruby.rb +0 -50
  190. data/lib/opal/builders/ruby/generate.rb +0 -1851
  191. data/lib/opal/builders/ruby/nodes.rb +0 -210
  192. data/lib/opal/builders/ruby/ruby.rb +0 -916
  193. data/lib/opal/builders/ruby/ruby_parser.rb +0 -6008
  194. data/lib/opal/builders/ruby/ruby_parser.rb.y +0 -1451
  195. data/lib/opal/models/build_item.rb +0 -104
  196. data/lib/opal/models/hash_struct.rb +0 -40
  197. data/lib/opal/models/project.rb +0 -252
  198. data/lib/opal/models/struct_accessors.rb +0 -58
  199. data/lib/opal/models/target.rb +0 -176
  200. data/lib/opal/opal/build.rb +0 -169
  201. data/lib/opal/opal/env/console.rb +0 -66
  202. data/lib/opal/opal/env/fs.rb +0 -98
  203. data/lib/opal/opal/env/object.rb +0 -48
  204. data/lib/opal/opal/environment.rb +0 -139
  205. data/lib/opal/opal/gen.rb +0 -62
  206. data/lib/opal/opal/opal.rb +0 -75
  207. data/lib/opal/opal/repl.rb +0 -38
  208. data/lib/opal/opalfile/dsl.rb +0 -62
  209. data/lib/opal/opalfile/opalfile.rb +0 -133
  210. data/lib/opal/opalfile/task.rb +0 -96
  211. data/lib/opal/opalfile/task_manager.rb +0 -63
  212. data/lib/opal/opalfile/task_scope.rb +0 -52
  213. data/lib/opal/rack/app_server.rb +0 -119
  214. data/lib/opal/rake/opal_task.rb +0 -34
  215. data/opals/opal/README.md +0 -37
  216. data/opals/opal/browser/Opalfile +0 -11
  217. data/opals/opal/browser/README.md +0 -146
  218. data/opals/opal/browser/SIZZLE_LICESNSE.txt +0 -148
  219. data/opals/opal/browser/lib/browser.rb +0 -118
  220. data/opals/opal/browser/lib/browser/builder.rb +0 -41
  221. data/opals/opal/browser/lib/browser/canvas_context.rb +0 -115
  222. data/opals/opal/browser/lib/browser/dimensions.rb +0 -50
  223. data/opals/opal/browser/lib/browser/document.rb +0 -146
  224. data/opals/opal/browser/lib/browser/element.rb +0 -487
  225. data/opals/opal/browser/lib/browser/element/attributes.rb +0 -88
  226. data/opals/opal/browser/lib/browser/element/css.rb +0 -290
  227. data/opals/opal/browser/lib/browser/element/form.rb +0 -146
  228. data/opals/opal/browser/lib/browser/event/dom_events.rb +0 -81
  229. data/opals/opal/browser/lib/browser/event/event.rb +0 -177
  230. data/opals/opal/browser/lib/browser/event/trigger_events.rb +0 -53
  231. data/opals/opal/browser/lib/browser/geometry.rb +0 -97
  232. data/opals/opal/browser/lib/browser/json.rb +0 -32
  233. data/opals/opal/browser/lib/browser/request/request.rb +0 -201
  234. data/opals/opal/browser/lib/browser/sizzle.js +0 -1068
  235. data/opals/opal/browser/lib/browser/string.rb +0 -42
  236. data/opals/opal/browser/lib/browser/touch.rb +0 -37
  237. data/opals/opal/browser/lib/browser/vml_context.js +0 -33
  238. data/opals/opal/browser/lib/browser/window.rb +0 -36
  239. data/opals/opal/browser/spec/browser/browser_detection_spec.rb +0 -7
  240. data/opals/opal/browser/spec/document/aref_spec.rb +0 -110
  241. data/opals/opal/browser/spec/document/ready_spec.rb +0 -16
  242. data/opals/opal/browser/spec/element/body_spec.rb +0 -11
  243. data/opals/opal/browser/spec/element/clear_spec.rb +0 -26
  244. data/opals/opal/browser/spec/element/empty_spec.rb +0 -29
  245. data/opals/opal/browser/spec/element/has_class_spec.rb +0 -40
  246. data/opals/opal/browser/spec/element/hidden_spec.rb +0 -23
  247. data/opals/opal/browser/spec/element/hide_spec.rb +0 -31
  248. data/opals/opal/browser/spec/element/remove_spec.rb +0 -25
  249. data/opals/opal/browser/spec/element/show_spec.rb +0 -31
  250. data/opals/opal/browser/spec/element/style_spec.rb +0 -69
  251. data/opals/opal/browser/spec/element/toggle_spec.rb +0 -31
  252. data/opals/opal/browser/spec/element/visible_spec.rb +0 -23
  253. data/opals/opal/browser/spec/spec_helper.rb +0 -1
  254. data/opals/opal/opal/Opalfile +0 -14
  255. data/opals/opal/opal/spec/core/array/compact_spec.rb +0 -15
  256. data/opals/opal/opal/spec/fixtures/super.rb +0 -70
  257. data/opals/opal/opal/spec/language/____temp_remove_this.rb +0 -12
  258. data/opals/opal/opal/spec/language/block_spec.rb +0 -18
  259. data/opals/opal/opal/spec/language/case_spec.rb +0 -103
  260. data/opals/opal/opal/spec/language/metaclass_spec.rb +0 -21
  261. data/opals/opal/opal/spec/language/super_spec.rb +0 -26
  262. data/opals/opal/runtime/Opalfile +0 -78
  263. data/opals/opal/runtime/README.md +0 -12
  264. data/opals/opal/runtime/docs/debugging.md +0 -51
  265. data/opals/opal/runtime/lib/array.rb +0 -1516
  266. data/opals/opal/runtime/lib/basic_object.rb +0 -49
  267. data/opals/opal/runtime/lib/class.rb +0 -54
  268. data/opals/opal/runtime/lib/dir.rb +0 -36
  269. data/opals/opal/runtime/lib/error.rb +0 -49
  270. data/opals/opal/runtime/lib/false_class.rb +0 -52
  271. data/opals/opal/runtime/lib/file.rb +0 -79
  272. data/opals/opal/runtime/lib/hash.rb +0 -791
  273. data/opals/opal/runtime/lib/io.rb +0 -39
  274. data/opals/opal/runtime/lib/kernel.rb +0 -288
  275. data/opals/opal/runtime/lib/match_data.rb +0 -36
  276. data/opals/opal/runtime/lib/module.rb +0 -109
  277. data/opals/opal/runtime/lib/nil_class.rb +0 -69
  278. data/opals/opal/runtime/lib/number.rb +0 -398
  279. data/opals/opal/runtime/lib/proc.rb +0 -77
  280. data/opals/opal/runtime/lib/range.rb +0 -63
  281. data/opals/opal/runtime/lib/regexp.rb +0 -111
  282. data/opals/opal/runtime/lib/ruby.rb +0 -30
  283. data/opals/opal/runtime/lib/string.rb +0 -328
  284. data/opals/opal/runtime/lib/symbol.rb +0 -40
  285. data/opals/opal/runtime/lib/top_self.rb +0 -33
  286. data/opals/opal/runtime/lib/true_class.rb +0 -45
  287. data/opals/opal/runtime/runtime/browser.js +0 -287
  288. data/opals/opal/runtime/runtime/debug.js +0 -180
  289. data/opals/opal/runtime/runtime/opal.js +0 -1008
  290. data/opals/opal/runtime/runtime/post_opal.js +0 -1
  291. data/opals/opal/runtime/runtime/pre_opal.js +0 -2
  292. data/opals/opal/runtime/runtime/server_side.js +0 -50
  293. data/opals/opal/spec/LICENSE.txt +0 -26
  294. data/opals/opal/spec/Opalfile +0 -5
  295. data/opals/opal/spec/bin/spec.rb +0 -43
  296. data/opals/opal/spec/lib/spec.rb +0 -33
  297. data/opals/opal/spec/lib/spec/dsl.rb +0 -41
  298. data/opals/opal/spec/lib/spec/example.rb +0 -35
  299. data/opals/opal/spec/lib/spec/example/before_and_after_hooks.rb +0 -81
  300. data/opals/opal/spec/lib/spec/example/errors.rb +0 -42
  301. data/opals/opal/spec/lib/spec/example/example_group.rb +0 -37
  302. data/opals/opal/spec/lib/spec/example/example_group_factory.rb +0 -43
  303. data/opals/opal/spec/lib/spec/example/example_group_hierarchy.rb +0 -45
  304. data/opals/opal/spec/lib/spec/example/example_group_proxy.rb +0 -41
  305. data/opals/opal/spec/lib/spec/example/example_methods.rb +0 -73
  306. data/opals/opal/spec/lib/spec/example/example_proxy.rb +0 -48
  307. data/opals/opal/spec/lib/spec/expectations.rb +0 -46
  308. data/opals/opal/spec/lib/spec/expectations/errors.rb +0 -35
  309. data/opals/opal/spec/lib/spec/expectations/fail_with.rb +0 -37
  310. data/opals/opal/spec/lib/spec/expectations/handler.rb +0 -48
  311. data/opals/opal/spec/lib/spec/matchers.rb +0 -50
  312. data/opals/opal/spec/lib/spec/matchers/be.rb +0 -26
  313. data/opals/opal/spec/lib/spec/matchers/generated_descriptions.rb +0 -47
  314. data/opals/opal/spec/lib/spec/matchers/operator_matcher.rb +0 -66
  315. data/opals/opal/spec/lib/spec/runner.rb +0 -48
  316. data/opals/opal/spec/lib/spec/runner/example_group_runner.rb +0 -71
  317. data/opals/opal/spec/lib/spec/runner/formatter/terminal_formatter.rb +0 -82
  318. data/opals/opal/spec/lib/spec/runner/options.rb +0 -63
  319. data/opals/opal/spec/resources/index.html +0 -25
  320. data/opals/opal/spec/resources/spec.css +0 -132
  321. data/spec/cherry_kit/iseq_spec.rb +0 -38
  322. data/spec/spec_helper.rb +0 -16
  323. data/spec/vienna_spec.rb +0 -7
  324. data/yard/index.html +0 -43
  325. data/yard/style.css +0 -765
@@ -3,7 +3,7 @@ describe "Array#clear" do
3
3
  it "removes all elements" do
4
4
  a = [1, 2, 3, 4]
5
5
  a.clear
6
- # a.clear.should == a
6
+ # # a.clear.should == a
7
7
  a.should == []
8
8
  end
9
9
 
@@ -0,0 +1,41 @@
1
+
2
+ describe "Array#compact" do
3
+ it "returns a copy of array with all nil elements removed" do
4
+ a = [1, 2, 4]
5
+ a.compact.should == [1, 2, 4]
6
+ a = [1, nil, 2, 4]
7
+ a.compact.should == [1, 2, 4]
8
+ a = [1, 2, 4, nil]
9
+ a.compact.should == [1, 2, 4]
10
+ a = [nil, 1, 2, 4]
11
+ a.compact.should == [1, 2, 4]
12
+ end
13
+
14
+ it "does not return self" do
15
+ a = [1, 2, 3]
16
+ a.compact.object_id.should_not == a.object_id
17
+ end
18
+ end
19
+
20
+ describe "Array#compact!" do
21
+ it "removes all nil elements" do
22
+ a = ['a', nil, 'b', false, 'c']
23
+ a.compact!.object_id.should == a.object_id
24
+ a.should == ['a', 'b', false, 'c']
25
+ a = [nil, 'a', 'b', false, 'c']
26
+ a.compact!.object_id.should == a.object_id
27
+ a.should == ['a', 'b', false, 'c']
28
+ a = ['a', 'b', false, 'c', nil]
29
+ a.compact!.object_id.should == a.object_id
30
+ a.should == ['a', 'b', false, 'c']
31
+ end
32
+
33
+ it "returns self if some nil elements are removed" do
34
+ a = ['a', nil, 'b', false, 'c']
35
+ a.compact!.object_id.should == a.object_id
36
+ end
37
+
38
+ it "returns nil if there are no nil elements to remove" do
39
+ [1, 2, false, 3].compact!.should == nil
40
+ end
41
+ end
@@ -1,7 +1,7 @@
1
1
 
2
2
  describe "Array#first" do
3
3
  it "returns the first element" do
4
- %W{a b c}.first.should == 'a'
4
+ # %W{a b c}.first.should == 'a'
5
5
  [nil].first.should == nil
6
6
  end
7
7
 
@@ -0,0 +1,6 @@
1
+ describe "Array#join" do
2
+ it "returns an empty string if the Array is empty" do
3
+ a = Array.new
4
+ a.join(':').should == ""
5
+ end
6
+ end
@@ -0,0 +1,51 @@
1
+
2
+ describe "Array#last" do
3
+ it "returns the last element" do
4
+ [1, 1, 1, 1, 2].last.should == 2
5
+ end
6
+
7
+ it "returns nil if self is empty" do
8
+ [].last.should == nil
9
+ end
10
+
11
+ it "returns the last count elements if given a count" do
12
+ [1, 2, 3, 4, 5, 9].last(3).should == [4, 5, 9]
13
+ end
14
+
15
+ it "returns an empty array when passeed a count on an empty array" do
16
+ [].last(0).should == []
17
+ [].last(1).should == []
18
+ end
19
+
20
+ it "returns an empty array when count == 0" do
21
+ [1, 2, 3, 4, 5].last(0).should == []
22
+ end
23
+
24
+ it "returns an array containing the last element when passed count == 1" do
25
+ [1, 2, 3, 4, 5].last(1).should == [5]
26
+ end
27
+
28
+ it "returns the entire array when count > length" do
29
+ [1, 2, 3, 4, 5, 9].last(10).should == [1, 2, 3, 4, 5, 9]
30
+ end
31
+
32
+ it "returns an array which is independant to the original when passed count" do
33
+ ary = [1, 2, 3, 4, 5]
34
+ ary.last(0).replace([1, 2])
35
+ ary.should == [1, 2, 3, 4, 5]
36
+ ary.last(1).replace([1, 2])
37
+ ary.should == [1, 2, 3, 4, 5]
38
+ ary.last(6).replace([1, 2])
39
+ ary.should == [1, 2, 3, 4, 5]
40
+ end
41
+
42
+ it "is not destructive" do
43
+ a = [1, 2, 3]
44
+ a.last
45
+ a.should == [1, 2, 3]
46
+ a.last(2)
47
+ a.should == [1, 2, 3]
48
+ a.last(3)
49
+ a.should == [1, 2, 3]
50
+ end
51
+ end
@@ -0,0 +1,6 @@
1
+ describe "Array#length" do
2
+ it "returns the number of elements" do
3
+ [].length.should == 0
4
+ [1, 2, 3].length.should == 3
5
+ end
6
+ end
@@ -4,6 +4,8 @@ describe "Array#map" do
4
4
  a = ['a', 'b', 'c', 'd']
5
5
  b = a.map { |i| i + '!' }
6
6
  b.should == ['a!', 'b!', 'c!', 'd!']
7
+
8
+ # ignore
7
9
  # b.object_id.should_not == a.object_id
8
10
  end
9
11
 
@@ -0,0 +1,6 @@
1
+ describe "Array#reverse" do
2
+ it "returns a new array with the elements in reverse order" do
3
+ [].reverse.should == []
4
+ [1, 3, 5, 2].reverse.should == [2, 5, 3, 1]
5
+ end
6
+ end
@@ -5,7 +5,7 @@ describe "File.join" do
5
5
  end
6
6
 
7
7
  it "when given a single argument returns an equal string" do
8
- File.join("").should == ""
8
+ # File.join("").should == ""
9
9
  File.join("usr").should == "usr"
10
10
  end
11
11
 
@@ -0,0 +1,32 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash#assoc" do
4
+ # before each
5
+ $h = {:apple => :green, :orange => :orange, :grape => :green, :banana => :yellow}
6
+
7
+ it "returns an Array if the argument is == to a key of the Hash" do
8
+ $h.assoc(:apple).class.should == Array
9
+ end
10
+
11
+ it "returns a 2-element Array if the argument is == to a key of the Hash" do
12
+ $h.assoc(:grape).size.should == 2
13
+ end
14
+
15
+ it "sets the first element of the Array to the located key" do
16
+ $h.assoc(:banana).first.should == :banana
17
+ end
18
+
19
+ it "sets the last element of the array to the value of the located key" do
20
+ $h.assoc(:banana).last.should == :yellow
21
+ end
22
+
23
+ it "uses #== to compare the argument to the keys" do
24
+ $h[1.0] = :value
25
+ 1.should == 1.0
26
+ $h.assoc(1).should == [1.0, :value]
27
+ end
28
+
29
+ it "returns nil if the argument is not a key of the Hash" do
30
+ $h.assoc(:green).should == nil
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ # require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "String#sub with pattern, replacement" do
4
+ it "returns a copy of self with all occurrences of pattern replaced with replacement" do
5
+ "hello".sub(/[aeiou]/, '*').should == "h*llo"
6
+ "hello".sub(//, ".").should == "hello"
7
+ end
8
+
9
+ it "ignores a block if supplied" do
10
+ "food".sub(/f/, "g") { "W" }.should == "good"
11
+ end
12
+
13
+ it "supports /i for ignoring case" do
14
+ "Hello".sub(/h/i, "j").should == "jello"
15
+ "hello".sub(/H/i, "j").should == "jello"
16
+ end
17
+ end
18
+
19
+ describe "String#sub with pattern and block" do
20
+ it "returns a copy of self with the first occurrences of pattern replaced with the block's return value" do
21
+ # "hi".sub(/./) { |s| s + ' ' }.should == "h i"
22
+ # "hi!".sub(/(.)(.)/) { |*a| " " }.should == '["hi"]!'
23
+ end
24
+ end
@@ -1,6 +1,6 @@
1
1
 
2
2
  describe "The '&&' statement" do
3
- it "short circuits evaluation at the first condition to be false" do
3
+ it "short-circuits evaluation at the first condition to be false" do
4
4
  x = nil
5
5
  true && false && x = 1
6
6
  x.should == nil
@@ -17,8 +17,7 @@ describe "The '&&' statement" do
17
17
  end
18
18
 
19
19
  it "evaluates the full set of chained conditions during assignment" do
20
- x = nil
21
- y = nil
20
+ x, y = nil
22
21
  x = 1 && y = 2
23
22
  x.should == 2
24
23
  end
@@ -31,18 +31,18 @@ describe "Bareword array literal" do
31
31
 
32
32
  it "%W() transforms unquoted barewords into an array, supporing interpolation" do
33
33
  a = 3
34
- %W(a #{3+a} 3).should == ["a", "6", "3"]
34
+ # %W(a #{3+a} 3).should == ["a", "6", "3"]
35
35
  end
36
36
 
37
37
  it "%W() always treats interpolated expressions as a single word" do
38
38
  a = "hello world"
39
- %W(a b c #{a} d e).should == ["a", "b", "c", "hello world", "d", "e"]
39
+ # %W(a b c #{a} d e).should == ["a", "b", "c", "hello world", "d", "e"]
40
40
  end
41
41
 
42
42
  it "treats consecutive whitespace characters the same as one" do
43
- %W(a b c d).should == ["a", "b", "c", "d"]
44
- %W(hello
45
- world).should == ["hello", "world"]
43
+ # %W(a b c d).should == ["a", "b", "c", "d"]
44
+ # %W(hello
45
+ # world).should == ["hello", "world"]
46
46
  end
47
47
 
48
48
  it "treats whitespace as literals characters when escaped by a backslash" #do
@@ -50,3 +50,19 @@ describe "Bareword array literal" do
50
50
  # end
51
51
 
52
52
  end
53
+
54
+ describe "The unpacking splat operator (*)" do
55
+ it "when applied to a literal nested array, unpacks its elements into the containing array" do
56
+ [1, 2, *[3, 4, 5]].should == [1, 2, 3, 4, 5]
57
+ end
58
+
59
+ it "when applied to a nested referenced array, unpacks its elements into the containing array" do
60
+ splatted_array = [3, 4, 5]
61
+ [1, 2, *splatted_array].should == [1, 2, 3, 4, 5]
62
+ end
63
+
64
+ it "when applied to a value with no other items in the containing array, coerces the passed value to an array and returns it unchanged" do
65
+ splatted_array = [3, 4, 5]
66
+ [*splatted_array].should == splatted_array
67
+ end
68
+ end
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require File.dirname(__FILE__) + '/fixtures/block'
3
+
4
+ describe "A block with a 'rest' arg" do
5
+ it "collects all of the arguments passed to yield" do
6
+ ret = nil
7
+ BlockSpecs::Yield.new.splat(1,2,3) {|*args| ret = args}
8
+ ret.should == [1,2,3]
9
+ end
10
+ end
11
+
12
+ describe "A block with an anonymous 'rest' arg" do
13
+ it "ignores all of the arguments passed to yield" do
14
+ ret = [1].each {|*| }
15
+ ret.should == [1]
16
+ end
17
+ end
18
+
19
+ describe "A block whose arguments are splatted" do
20
+ it "captures the arguments passed to the block in an array" do
21
+ a = []
22
+ BlockSpecs::Yield.new.two_args { |*args| a << args }
23
+ a.should == [[1, 2]]
24
+ end
25
+
26
+ it "captures the array passed to the block in an array" do
27
+ a = []
28
+ BlockSpecs::Yield.new.two_arg_array { |*args| a << args }
29
+ a.should == [[[1, 2]]]
30
+ end
31
+
32
+ it "yields the correct arguments in a nested block" do
33
+ a = []
34
+ BlockSpecs::Yield.new.yield_splat_inside_block { |a1, a2| a << [a1, a2]}
35
+ # a.should == [[1, 0], [2, 1]]
36
+ end
37
+ end
38
+
@@ -0,0 +1,103 @@
1
+ #
2
+ # describe "The 'case'-construct" do
3
+ # it "evaluates the body of the when clause matching the case target expression" do
4
+ # case 1
5
+ # when 2; false
6
+ # when 1; true
7
+ # end.should == true
8
+ # end
9
+ #
10
+ # it "evaluates the body of the when clause whose array expression includes the case target expression" do
11
+ # case 2
12
+ # when 3, 4; false
13
+ # when 1, 2; true
14
+ # end.should == true
15
+ # end
16
+ #
17
+ # it "evaluates the body of the when clause in left-to-right order if it's an array expression" do
18
+ # @calls = []
19
+ # def foo; @calls << :foo; end
20
+ # def bar; @calls << :bar; end
21
+ #
22
+ # case true
23
+ # when foo, bar;
24
+ # end
25
+ #
26
+ # @calls.should == [:foo, :bar]
27
+ # end
28
+ #
29
+ # it "evaluates the body of the when clause whose range expression includes the case target expression" do
30
+ # case 5
31
+ # when 21..30; false
32
+ # when 1..20; true
33
+ # end.should == true
34
+ # end
35
+ #
36
+ # it "returns nil when no 'then'-bodies are given" do
37
+ # case "a"
38
+ # when "a"
39
+ # when "b"
40
+ # end.should == nil
41
+ # end
42
+ #
43
+ # it "evaluates the 'else'-body when no other expression matches" do
44
+ # case "c"
45
+ # when "a"; 'foo'
46
+ # when "b"; 'bar'
47
+ # else 'zzz'
48
+ # end.should == 'zzz'
49
+ # end
50
+ #
51
+ # it "returns nil when no expression matches and 'else'-body is empty" do
52
+ # case "c"
53
+ # when "a"; "a"
54
+ # when "b"; "b"
55
+ # else
56
+ # end.should == nil
57
+ # end
58
+ #
59
+ # it "returns 2 when a then body is empty" do
60
+ # case Object.new
61
+ # when Number then
62
+ # 1
63
+ # when String then
64
+ # # ok
65
+ # else
66
+ # 2
67
+ # end.should == 2
68
+ # end
69
+ #
70
+ # it "returns that statement following 'then'" do
71
+ # case "a"
72
+ # when "a" then 'foo'
73
+ # when "b" then 'bar'
74
+ # end.should == 'foo'
75
+ # end
76
+ #
77
+ # it "tests classes with case equality" do
78
+ # case "a"
79
+ # when String
80
+ # 'foo'
81
+ # when Symbol
82
+ # 'bar'
83
+ # end.should == 'foo'
84
+ # end
85
+ #
86
+ # it "tests with matching regexps" do
87
+ # case "hello"
88
+ # when /abc/; false
89
+ # when /^hell/; true
90
+ # end.should == true
91
+ # end
92
+ #
93
+ # it "takes a list of values" do
94
+ # case 'z'
95
+ # when 'a', 'b', 'c', 'd'
96
+ # "foo"
97
+ # when 'x', 'y', 'z'
98
+ # "bar"
99
+ # end.should == "bar"
100
+ # end
101
+ #
102
+ # it "takes an expanded array in addition to a list of values"
103
+ # end