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
@@ -8,4 +8,14 @@ describe "Redefining a method" do
8
8
  def barFoo; 200; end
9
9
  barFoo.should == 200
10
10
  end
11
- end
11
+ end
12
+
13
+ describe "A singleton method definition" do
14
+ it "can be declared for a local variable" do
15
+ a = Object.new
16
+ def a.foo
17
+ 5
18
+ end
19
+ a.foo.should == 5
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ # specs for __FILE__
4
+
5
+ describe "The __FILE__ constant" do
6
+ it "equals the current filename" do
7
+ File.basename(__FILE__).should == "file_spec.rb"
8
+ end
9
+
10
+ it "equals (eval) inside an eval" do
11
+ # eval("__FILE__").should == "(eval)"
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ puts "in block fixtures"
2
+
3
+ module BlockSpecs
4
+ class Yield
5
+ def splat(*args)
6
+ yield *args
7
+ end
8
+
9
+ def two_args
10
+ yield 1, 2
11
+ end
12
+
13
+ def two_arg_array
14
+ yield [1, 2]
15
+ end
16
+
17
+ def yield_splat_inside_block
18
+ [1, 2].send(:each_with_index) { |*args| yield(*args) }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,293 @@
1
+ module Super
2
+ module S1
3
+ class A
4
+ def foo(a)
5
+ a << "A#foo"
6
+ bar(a)
7
+ end
8
+ def bar(a)
9
+ a << "A#bar"
10
+ end
11
+ end
12
+ class B < A
13
+ def foo(a)
14
+ a << "B#foo"
15
+ super(a)
16
+ end
17
+ def bar(a)
18
+ a << "B#bar"
19
+ super(a)
20
+ end
21
+ end
22
+ end
23
+
24
+ module S2
25
+ class A
26
+ def baz(a)
27
+ a << "A#baz"
28
+ end
29
+ end
30
+ class B < A
31
+ def foo(a)
32
+ a << "B#foo"
33
+ baz(a)
34
+ end
35
+ end
36
+ class C < B
37
+ def baz(a)
38
+ a << "C#baz"
39
+ super(a)
40
+ end
41
+ end
42
+ end
43
+
44
+ module S3
45
+ class A
46
+ def foo(a)
47
+ a << "A#foo"
48
+ end
49
+ def self.foo(a)
50
+ a << "A::foo"
51
+ end
52
+ def self.bar(a)
53
+ a << "A::bar"
54
+ foo(a)
55
+ end
56
+ end
57
+ class B < A
58
+ def self.foo(a)
59
+ a << "B::foo"
60
+ super(a)
61
+ end
62
+ def self.bar(a)
63
+ a << "B::bar"
64
+ super(a)
65
+ end
66
+ end
67
+ end
68
+
69
+ module S4
70
+ class A
71
+ def foo(a)
72
+ a << "A#foo"
73
+ end
74
+ end
75
+ class B < A
76
+ def foo(a, b)
77
+ a << "B#foo(a,#{b})"
78
+ super(a)
79
+ end
80
+ end
81
+ end
82
+
83
+ class S5
84
+ def here
85
+ :good
86
+ end
87
+ end
88
+
89
+ class S6 < S5
90
+ def under
91
+ yield
92
+ end
93
+
94
+ def here
95
+ under {
96
+ super
97
+ }
98
+ end
99
+ end
100
+
101
+ class S7 < S5
102
+ define_method(:here) { super() }
103
+ end
104
+
105
+ module MS1
106
+ module ModA
107
+ def foo(a)
108
+ a << "ModA#foo"
109
+ bar(a)
110
+ end
111
+ def bar(a)
112
+ a << "ModA#bar"
113
+ end
114
+ end
115
+ class A
116
+ include ModA
117
+ end
118
+ module ModB
119
+ def bar(a)
120
+ a << "ModB#bar"
121
+ super(a)
122
+ end
123
+ end
124
+ class B < A
125
+ def foo(a)
126
+ a << "B#foo"
127
+ super(a)
128
+ end
129
+ include ModB
130
+ end
131
+ end
132
+ #
133
+ # module MS2
134
+ # class A
135
+ # def baz(a)
136
+ # a << "A#baz"
137
+ # end
138
+ # end
139
+ # module ModB
140
+ # def foo(a)
141
+ # a << "ModB#foo"
142
+ # baz(a)
143
+ # end
144
+ # end
145
+ # class B < A
146
+ # include ModB
147
+ # end
148
+ # class C < B
149
+ # def baz(a)
150
+ # a << "C#baz"
151
+ # super(a)
152
+ # end
153
+ # end
154
+ # end
155
+ #
156
+ # module MS3
157
+ # module ModA
158
+ # def foo(a)
159
+ # a << "ModA#foo"
160
+ # end
161
+ # def bar(a)
162
+ # a << "ModA#bar"
163
+ # foo(a)
164
+ # end
165
+ # end
166
+ # class A
167
+ # def foo(a)
168
+ # a << "A#foo"
169
+ # end
170
+ # class << self
171
+ # include ModA
172
+ # end
173
+ # end
174
+ # class B < A
175
+ # def self.foo(a)
176
+ # a << "B::foo"
177
+ # super(a)
178
+ # end
179
+ # def self.bar(a)
180
+ # a << "B::bar"
181
+ # super(a)
182
+ # end
183
+ # end
184
+ # end
185
+ #
186
+ # module MS4
187
+ # module Layer1
188
+ # def example
189
+ # 5
190
+ # end
191
+ # end
192
+ #
193
+ # module Layer2
194
+ # include Layer1
195
+ # def example
196
+ # super
197
+ # end
198
+ # end
199
+ #
200
+ # class A
201
+ # include Layer2
202
+ # public :example
203
+ # end
204
+ # end
205
+
206
+ # class MM_A
207
+ # undef_method :is_a?
208
+ # end
209
+ #
210
+ # class MM_B < MM_A
211
+ # def is_a?(blah)
212
+ # # should fire the method_missing below
213
+ # super
214
+ # end
215
+ #
216
+ # def method_missing(*)
217
+ # false
218
+ # end
219
+ # end
220
+ #
221
+ # class Alias1
222
+ # def name
223
+ # [:alias1]
224
+ # end
225
+ # end
226
+ #
227
+ # class Alias2 < Alias1
228
+ # def initialize
229
+ # @times = 0
230
+ # end
231
+ #
232
+ # def name
233
+ # if @times >= 10
234
+ # raise "runaway super"
235
+ # end
236
+ #
237
+ # @times += 1
238
+ #
239
+ # # Use this so that we can see collect all supers that we see.
240
+ # # One bug that arises is that we call Alias2#name from Alias2#name
241
+ # # as it's superclass. In that case, either we get a runaway recursion
242
+ # # super OR we get the return value being [:alias2, :alias2, :alias1]
243
+ # # rather than [:alias2, :alias1].
244
+ # #
245
+ # # Which one depends on caches and how super is implemented.
246
+ # [:alias2] + super
247
+ # end
248
+ # end
249
+ #
250
+ # class Alias3 < Alias2
251
+ # alias_method :name3, :name
252
+ # # In the method table for Alias3 now should be a special alias entry
253
+ # # that references Alias2 and Alias2#name (probably as an object).
254
+ # #
255
+ # # When name3 is called then, Alias2 (NOT Alias3) is presented as the
256
+ # # current module to Alias2#name, so that when super is called,
257
+ # # Alias2->superclass is next.
258
+ # #
259
+ # # Otherwise, Alias2 is next, which is where name was to begin with,
260
+ # # causing the wrong #name method to be called.
261
+ # end
262
+ #
263
+ # module AliasWithSuper
264
+ # module AS1
265
+ # def foo
266
+ # :a
267
+ # end
268
+ # end
269
+ #
270
+ # module BS1
271
+ # def foo
272
+ # [:b, super]
273
+ # end
274
+ # end
275
+ #
276
+ # class Base
277
+ # extend AS1
278
+ # extend BS1
279
+ # end
280
+ #
281
+ # class Trigger < Base
282
+ # class << self
283
+ # def foo_quux
284
+ # foo_baz
285
+ # end
286
+ #
287
+ # alias_method :foo_baz, :foo
288
+ # alias_method :foo, :foo_quux
289
+ # end
290
+ # end
291
+ # end
292
+
293
+ end
@@ -0,0 +1,21 @@
1
+ #
2
+ # describe "self in a metaclass body (class << obj)" do
3
+ # it "is TrueClass for true" do
4
+ # class << true; self; end.should == TrueClass
5
+ # end
6
+ #
7
+ # it "is FalseClass for false" do
8
+ # class << false; self; end.should == FalseClass
9
+ # end
10
+ #
11
+ # it "is NilClass for nil" do
12
+ # class << nil; self; end.should == NilClass
13
+ # end
14
+ #
15
+ # it "raises a TypeError for numbers"
16
+ #
17
+ # it "raises a TypeError for symbols"
18
+ #
19
+ # it "is a singleton Class instance"
20
+ #
21
+ # end
@@ -61,4 +61,64 @@ describe "Calling a method" do
61
61
  def foo(a); a; end
62
62
  foo(()).should == nil
63
63
  end
64
+
65
+ it "with block as block argument is ok" do
66
+ def foo(a, &b); [a, yield(b)] end
67
+
68
+ foo(10) do 200 end.should == [10, 200]
69
+ foo(10) { 200 }.should == [10, 200]
70
+ end
71
+
72
+ it "with block argument converts the block to proc" do
73
+ def makeproc(&b) b end
74
+ makeproc { "hello" }.call.should == "hello"
75
+ makeproc { "hello" }.class.should == Proc
76
+
77
+ def proc_caller(&b) b.call end
78
+ def enclosing_method
79
+ proc_caller { return :break_return_value }
80
+ :method_return_value
81
+ end
82
+
83
+ enclosing_method.should == :break_return_value
84
+ end
85
+
86
+ it "with same names as existing variables is ok" do
87
+ foobar = 100
88
+
89
+ def foobar; 200; end
90
+
91
+ foobar.should == 100
92
+ foobar().should == 200
93
+ end
94
+
95
+ it "with splat operator * and literal array unpacks params" do
96
+ def fooP3(a, b, c); [a, b, c]; end
97
+
98
+ fooP3(*[1, 2, 3]).should == [1, 2, 3]
99
+ end
100
+
101
+ it "with splat operator * and references array unpacks params" do
102
+ def fooP3(a,b,c); [a,b,c] end
103
+
104
+ a = [1,2,3]
105
+ fooP3(*a).should == [1,2,3]
106
+ end
107
+
108
+ it "without parentheses works" do
109
+ def fooP3(a,b,c); [a,b,c] end
110
+
111
+ (fooP3 1,2,3).should == [1,2,3]
112
+ end
113
+
114
+ it "with a space separating method name and parenthesis treats expression in parenthesis as first argument" do
115
+ def myfoo(x); x * 2 end
116
+ def mybar
117
+ # means myfoo((5).to_s)
118
+ # NOT (myfoo(5)).to_s
119
+ # myfoo (5).to_s
120
+ end
121
+
122
+ # mybar().should == "55"
123
+ end
64
124
  end