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
@@ -0,0 +1,11 @@
1
+ class Proc
2
+
3
+ def to_proc
4
+ self
5
+ end
6
+
7
+ def call(*args)
8
+ # `args.unshift(self.$self);
9
+ `return self.apply(self.$self, args);`
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ class Range
2
+
3
+ def to_s
4
+ `var str = #{`self.$beg`.to_s};
5
+ var str2 = #{`self.$end`.to_s};
6
+ var join = self.$exc ? '...' : '..';
7
+ return str + join + str2;`
8
+ end
9
+
10
+ def inspect
11
+ `var str = #{`self.$beg`.inspect};
12
+ var str2 = #{`self.$end`.inspect};
13
+ var join = self.$exc ? '...' : '..';
14
+ return str + join + str2;`
15
+ end
16
+ end
17
+
@@ -0,0 +1,18 @@
1
+ class Regexp
2
+ def inspect
3
+ `return self.toString();`
4
+ end
5
+
6
+ def ==(other)
7
+ `return self.toString() === other.toString() ? Qtrue : Qfalse;`
8
+ end
9
+
10
+ def eql?(other)
11
+ self == other
12
+ end
13
+
14
+ def match(pattern)
15
+ nil
16
+ end
17
+ end
18
+
@@ -0,0 +1,328 @@
1
+ # A {String} object holds a sequence of bytes, typically representing
2
+ # characters.
3
+ #
4
+ # Implementation Details
5
+ # ======================
6
+ #
7
+ # For performance, strings in Opal are build directly on top of native
8
+ # javascript strings, so that they are infact the same object. This has the side
9
+ # effect that all strings are immutable, that is, they cannot be changed. Most
10
+ # of the string methods that end in '!' are therefore not implemented, but their
11
+ # counterparts are: 'upase' exists, but 'upcase!' does not, for example.
12
+ class String
13
+
14
+ def self.new(str = "")
15
+ `return new String(str);`
16
+ end
17
+
18
+ # Copy - returns a new string containing `count` copies of the receiver.
19
+ #
20
+ # @example
21
+ #
22
+ # 'Ho! ' * 3
23
+ # # => 'Ho! Ho! Ho! '
24
+ #
25
+ # @param [Numeric] count number of copies
26
+ # @return [String]
27
+ def *(count)
28
+ `var result = [];
29
+
30
+ for (var i = 0; i < count; i++) {
31
+ result.push(self);
32
+ }
33
+
34
+ return result.join('');`
35
+ end
36
+
37
+ # Concatenation - Returns a new string containing `other` concatenated onto
38
+ # `self`.
39
+ #
40
+ # @example
41
+ #
42
+ # 'Hello from ' + self.to_s
43
+ # # => 'Hello from main'
44
+ #
45
+ # @param [String] other string to concatenate
46
+ # @return [String]
47
+ def +(other)
48
+ `return self + other;`
49
+ end
50
+
51
+ # Returns a copy of `self` with the first character converted to uppercase and
52
+ # the remaining to lowercase.
53
+ #
54
+ # @example
55
+ #
56
+ # 'hello'.capitalize
57
+ # # => 'Hello'
58
+ # 'HELLO'.capitalize
59
+ # # => 'Hello'
60
+ # '123ABC'.capitalize
61
+ # # => '123abc'
62
+ #
63
+ # @return [String]
64
+ def capitalize
65
+ `return self.charAt(0).toUpperCase() + self.substr(1).toLowerCase();`
66
+ end
67
+
68
+ # Returns a copy of `self` with all uppercase letters replaces with their
69
+ # lowercase counterparts.
70
+ #
71
+ # @example
72
+ #
73
+ # 'hELLo'.downcase
74
+ # # => 'hello'
75
+ #
76
+ # @return [String]
77
+ def downcase
78
+ `return self.toLowerCase();`
79
+ end
80
+
81
+ def to_s
82
+ self
83
+ end
84
+
85
+ # Returns a printable version of `self`, surrounded with quotation marks, with
86
+ # all special characters escaped.
87
+ #
88
+ # @example
89
+ #
90
+ # str = "hello"
91
+ # str.inspect
92
+ # # => "\"hello\""
93
+ #
94
+ # @return [String]
95
+ def inspect
96
+ `/* borrowed from json2.js, see file for license */
97
+ var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
98
+
99
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
100
+
101
+ meta = {
102
+ '\b': '\\b',
103
+ '\t': '\\t',
104
+ '\n': '\\n',
105
+ '\f': '\\f',
106
+ '\r': '\\r',
107
+ '"' : '\\"',
108
+ '\\': '\\\\'
109
+ };
110
+
111
+ escapable.lastIndex = 0;
112
+
113
+ return escapable.test(self) ? '"' + self.replace(escapable, function (a) {
114
+ var c = meta[a];
115
+ return typeof c === 'string' ? c :
116
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
117
+ }) + '"' : '"' + self + '"';`
118
+ end
119
+
120
+ # Returns the number of characters in `self`.
121
+ #
122
+ # @return [Numeric]
123
+ def length
124
+ `return self.length;`
125
+ end
126
+
127
+ # Returns the corresponding symbol for the receiver.
128
+ #
129
+ # @example
130
+ #
131
+ # "koala".to_sym # => :Koala
132
+ # 'cat'.to_sym # => :cat
133
+ # '@cat'.to_sym # => :@cat
134
+ #
135
+ # This can also be used to create symbols that cannot be created using the
136
+ # :xxxx notation.
137
+ #
138
+ # @return [Symbol]
139
+ def to_sym
140
+ `return $opal.Y(self);`
141
+ end
142
+
143
+ def intern
144
+ `return $opal.Y(self);`
145
+ end
146
+
147
+ # Returns a new string with the characters from `self` in reverse order.
148
+ #
149
+ # @example
150
+ #
151
+ # 'stressed'.reverse
152
+ # # => 'desserts'
153
+ #
154
+ # @return [String]
155
+ def reverse
156
+ `return self.split('').reverse().join('');`
157
+ end
158
+
159
+ def sub(pattern)
160
+ `return self.replace(pattern, function(str) {
161
+ return #{yield `str`};
162
+ });`
163
+ end
164
+
165
+ def gsub(pattern)
166
+ `var r = pattern.toString();
167
+ r = r.substr(1, r.lastIndexOf('/') - 1);
168
+ r = new RegExp(r, 'g');
169
+ return self.replace(pattern, function(str) {
170
+ return #{yield `str`};
171
+ });`
172
+ end
173
+
174
+ def slice(start, finish = nil)
175
+ `return self.substr(start, finish);`
176
+ end
177
+
178
+ def split(split)
179
+ `return self.split(split);`
180
+ end
181
+
182
+ # Comparison - returns -1 if `other` is greater than, 0 if `other` is equal to
183
+ # or 1 if `other` is less than `self. Returns nil if `other` is not a string.
184
+ #
185
+ # @example
186
+ #
187
+ # 'abcdef' <=> 'abcde' # => 1
188
+ # 'abcdef' <=> 'abcdef' # => 0
189
+ # 'abcdef' <=> 'abcdefg' # => -1
190
+ # 'abcdef' <=> 'ABCDEF' # => 1
191
+ #
192
+ # @param [String] other string to compare
193
+ # @return [-1, 0, 1, nil] result
194
+ def <=>(other)
195
+ `if (typeof other != 'string') return nil;
196
+ else if (self > other) return 1;
197
+ else if (self < other) return -1;
198
+ return 0;`
199
+ end
200
+
201
+ # Equality - if other is not a string, returns false. Otherwise, returns true
202
+ # if self <=> other returns zero.
203
+ #
204
+ # @param [String] other string to compare
205
+ # @return [true, false]
206
+ def ==(other)
207
+ `return self.valueOf() === other.valueOf() ? Qtrue : Qfalse;`
208
+ end
209
+
210
+ # Match - if obj is a Regexp, then uses it to match against self, returning
211
+ # nil if there is no match, or the index of the match location otherwise. If
212
+ # obj is not a regexp, then it calls =~ on it, using the receiver as an
213
+ # argument
214
+ #
215
+ # @TODO passing a non regexp is not currently supported
216
+ #
217
+ # @param [Regexp, Objec] obj
218
+ # @return [Numeric, nil]
219
+ def =~(obj)
220
+ obj.match self
221
+ nil
222
+ end
223
+
224
+ # Case-insensitive version of {#<=>}
225
+ #
226
+ # @example
227
+ #
228
+ # 'abcdef'.casecmp 'abcde' # => 1
229
+ # 'aBcDeF'.casecmp 'abcdef' # => 0
230
+ # 'abcdef'.casecmp 'aBcdEFg' # => -1
231
+ #
232
+ # @param [String] other string to compare
233
+ # @return [-1, 0, 1, nil]
234
+ def casecmp(other)
235
+ `if (typeof other != 'string') return nil;
236
+ var a = self.toLowerCase(), b = other.toLowerCase();
237
+ if (a > b) return 1;
238
+ else if (a < b) return -1;
239
+ return 0;`
240
+ end
241
+
242
+ # Returns `true` if self has a length of zero.
243
+ #
244
+ # @example
245
+ #
246
+ # 'hello'.empty?
247
+ # # => false
248
+ # ''.empty?
249
+ # # => true
250
+ #
251
+ # @return [true, false]
252
+ def empty?
253
+ `return self.length == 0 ? Qtrue : Qfalse;`
254
+ end
255
+
256
+ # Returns true is self ends with the given suffix.
257
+ #
258
+ # @example
259
+ #
260
+ # 'hello'.end_with? 'lo'
261
+ # # => true
262
+ #
263
+ # @param [String] suffix the suffix to check
264
+ # @return [true, false]
265
+ def end_with?(suffix)
266
+ `if (self.lastIndexOf(suffix) == self.length - suffix.length) {
267
+ return Qtrue;
268
+ }
269
+
270
+ return Qfalse;`
271
+ end
272
+
273
+ # Two strings are equal if they have the same length and content.
274
+ #
275
+ # @param [String] other string to compare
276
+ # @return [true, false]
277
+ def eql?(other)
278
+ `return self == other ? Qtrue : Qfalse;`
279
+ end
280
+
281
+ # Returns true if self contains the given string `other`.
282
+ #
283
+ # @example
284
+ #
285
+ # 'hello'.include? 'lo' # => true
286
+ # 'hello'.include? 'ol' # => false
287
+ #
288
+ # @param [String] other string to check for
289
+ # @return [true, false]
290
+ def include?(other)
291
+ `return self.indexOf(other) == -1 ? Qfalse : Qtrue;`
292
+ end
293
+
294
+ # Returns the index of the first occurance of the given `substr` or pattern in
295
+ # self. Returns `nil` if not found. If the second param is present then it
296
+ # specifies the index of self to begin searching.
297
+ #
298
+ # @TODO: regexp and offsets not yet implemented.
299
+ #
300
+ # @example
301
+ #
302
+ # 'hello'.index 'e' # => 1
303
+ # 'hello'.index 'lo' # => 3
304
+ # 'hello'.index 'a' # => nil
305
+ #
306
+ # @param [String] substr string to check for
307
+ # @return [Numeric, nil]
308
+ def index(substr)
309
+ `var res = self.indexOf(substr);
310
+
311
+ return res == -1 ? nil : res;`
312
+ end
313
+
314
+ # Returns a copy of self with leading whitespace removed.
315
+ #
316
+ # @example
317
+ #
318
+ # ' hello '.lstrip
319
+ # # => 'hello '
320
+ # 'hello'.lstrip
321
+ # # => 'hello'
322
+ #
323
+ # @return [String]
324
+ def lstrip
325
+ `return self.replace(/^\s*/, '');`
326
+ end
327
+ end
328
+
@@ -0,0 +1,15 @@
1
+ class Symbol
2
+
3
+ def inspect
4
+ `return ':' + self.toString();`
5
+ end
6
+
7
+ def to_s
8
+ `return self.toString();`
9
+ end
10
+
11
+ def to_sym
12
+ self
13
+ end
14
+ end
15
+
@@ -0,0 +1,8 @@
1
+ def self.to_s
2
+ "main"
3
+ end
4
+
5
+ def self.include(mod)
6
+ Object.include mod
7
+ end
8
+
@@ -0,0 +1,20 @@
1
+ class TrueClass
2
+ def to_s
3
+ "true"
4
+ end
5
+
6
+ def &(other)
7
+ `return other.$r ? Qtrue : Qfalse;`
8
+ end
9
+
10
+ def |(other)
11
+ true
12
+ end
13
+
14
+ def ^(other)
15
+ `return other.$r ? Qfalse : Qtrue;`
16
+ end
17
+ end
18
+
19
+ TRUE = true
20
+
@@ -0,0 +1,16 @@
1
+ # Exposes all the VM methods for opal as ruby methods on this module.
2
+ module OpalVM
3
+
4
+ # Define a bridged class that will extend the given native prototype.
5
+ # Classes here must extend Object, and will be placed in the top level
6
+ # scope. As soon as this is called, the class generated will be available
7
+ # for immediate use.
8
+ #
9
+ # @param [NativePrototype] prototype
10
+ # @param [String] name
11
+ def self.bridged_class(prototype, name)
12
+ `VM.bridged_class(prototype, null, name, VM.Object);`
13
+ nil
14
+ end
15
+ end
16
+