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
@@ -1,40 +0,0 @@
1
- #
2
- # symbol.rb
3
- # vienna
4
- #
5
- # Created by Adam Beynon.
6
- # Copyright 2010 Adam Beynon.
7
- #
8
- # Permission is hereby granted, free of charge, to any person obtaining a copy
9
- # of this software and associated documentation files (the "Software"), to deal
10
- # in the Software without restriction, including without limitation the rights
11
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- # copies of the Software, and to permit persons to whom the Software is
13
- # furnished to do so, subject to the following conditions:
14
- #
15
- # The above copyright notice and this permission notice shall be included in
16
- # all copies or substantial portions of the Software.
17
- #
18
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- # THE SOFTWARE.
25
- #
26
-
27
- class Symbol
28
-
29
- def inspect
30
- `return ":" + #{self}.__ptr__;`
31
- end
32
-
33
- def to_s
34
- `return #{self}.__ptr__;`
35
- end
36
-
37
- def to_sym
38
- self
39
- end
40
- end
@@ -1,33 +0,0 @@
1
- #
2
- # top_self.rb
3
- # vienna
4
- #
5
- # Created by Adam Beynon.
6
- # Copyright 2010 Adam Beynon.
7
- #
8
- # Permission is hereby granted, free of charge, to any person obtaining a copy
9
- # of this software and associated documentation files (the "Software"), to deal
10
- # in the Software without restriction, including without limitation the rights
11
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- # copies of the Software, and to permit persons to whom the Software is
13
- # furnished to do so, subject to the following conditions:
14
- #
15
- # The above copyright notice and this permission notice shall be included in
16
- # all copies or substantial portions of the Software.
17
- #
18
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- # THE SOFTWARE.
25
- #
26
-
27
- def to_s
28
- "main"
29
- end
30
-
31
- def include(mod)
32
- Object.include mod
33
- end
@@ -1,45 +0,0 @@
1
- #
2
- # true_class.rb
3
- # vienna
4
- #
5
- # Created by Adam Beynon.
6
- # Copyright 2010 Adam Beynon.
7
- #
8
- # Permission is hereby granted, free of charge, to any person obtaining a copy
9
- # of this software and associated documentation files (the "Software"), to deal
10
- # in the Software without restriction, including without limitation the rights
11
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- # copies of the Software, and to permit persons to whom the Software is
13
- # furnished to do so, subject to the following conditions:
14
- #
15
- # The above copyright notice and this permission notice shall be included in
16
- # all copies or substantial portions of the Software.
17
- #
18
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- # THE SOFTWARE.
25
- #
26
-
27
- class TrueClass
28
-
29
- def to_s
30
- "true"
31
- end
32
-
33
- def & other
34
- other ? true : false
35
- end
36
-
37
- def | other
38
- true
39
- end
40
-
41
- def ^ other
42
- other ? false : true
43
- end
44
-
45
- end
@@ -1,287 +0,0 @@
1
-
2
- // All methods in here are just for the browser. This file will not be loaded
3
- // by the "server side" opal tool. A lot of methods defined here need to have
4
- // duplicate definitions for use by the server side tool.
5
-
6
- // =======================
7
- // = Opal loading system =
8
- // =======================
9
-
10
- // "Opals" are similar to gems in vanilla ruby. An opal is like a framework of
11
- // code and other resources.
12
-
13
- // Register an opal with the given specification, which is a json literal with
14
- // name, description, dependencies etc.
15
- //
16
- // Example
17
- // =======
18
- //
19
- // opal.register({
20
- // name: "browser",
21
- // version: "0.1.0",
22
- // files: {
23
- // "bin/browser", function() { ... bin imp ... },
24
- // "lib/browser.rb": function() { ... browser.rb imp ... },
25
- // "lib/browser/element.rb": function() { ... element.rb imp ... }
26
- // }
27
- // });
28
- //
29
- // Notes
30
- // =====
31
- //
32
- // We then add the lib/ path in browser to our load path, so require('browser')
33
- // will load lib/browser.rb, and require('browser/element') will load
34
- // lib/browser/element.rb
35
- //
36
- // All opals are stores with their name as a prefix, so lib/browser.rb as above
37
- // will actually have a full path url of "/browser/lib/browser.rb"
38
- //
39
- // Applications are initialized by calling their "bin" file, which by default is
40
- // named identically to their opal name, so to start our "sample_controls"
41
- // application, we initialize "/sample_controls/bin/sample_controls" which will
42
- // probably require "/sample_controls/lib/sample_controls.rb" which will itself
43
- // load cherry_kit etc etc. the main bin file most often than not will simply
44
- // call something like CKApplication.start()
45
- //
46
- // Resources like css could be added here, as well as auto loading for them, so
47
- // when the main lib file is loaded, then they are automatically required..
48
- // might work.
49
- //
50
- // require('browser') will first search all opals, so we can carry out potential
51
- // autoloading of css etc
52
- //
53
- exports.register = function(specification) {
54
- // console.log("registering new opal: " + specification.name);
55
- opal_list[specification.name] = specification;
56
-
57
- load_paths.push(specification.name + "/lib/");
58
-
59
- for (var file_name in specification.files) {
60
- file_list[specification.name + "/" + file_name] = specification.files[file_name];
61
- }
62
- };
63
-
64
- // same as above but register this as the default application sequence. will
65
- // look in this opal for a bin file with same name to be used for running
66
- // exports.register_application = function(specification) {
67
- // exports.register(specification);
68
- // bin_file = '/' + specification.name + '/bin/' + specification.name;
69
- // };
70
-
71
- // array of loadpaths used in "require" .. each opal listed etc
72
- // by default has root of filesystem, but each added opal also adds its libpath
73
- var load_paths = [""];
74
-
75
- // to load on window.load
76
- var bin_file = null;
77
-
78
- // cwd for application
79
- var opal_cwd = null;
80
-
81
- // list of all opals: name to specification json object
82
- var opal_list = {};
83
-
84
- // dictionary of all files:
85
- //
86
- // /path/to_file.1: function() { ... imp ... },
87
- // /path/to_file.2: function() { ... imp ... }
88
- //
89
- // If a file has been included, then its function will be marked with an
90
- // property ".opal_required" and set to true
91
- var file_list = exports.files = {};
92
-
93
- // =======================================================
94
- // = Temp launching - should be done via window.onload.. =
95
- // =======================================================
96
- // Run is our main file to run. usually app path, sometimes spec path etc
97
- //
98
- // @param [String] path - the main executable file
99
- // @param [String] path - the working directory
100
- // @param [String] lib_path - the lib dir for the main target (default is "lib"), but could well be "ruby" or "opal" or indeed ""
101
- exports.run = function(path, cwd, lib_path) {
102
- bin_file = path;
103
- exports.getwd = opal_cwd = cwd;
104
- var require_path;
105
-
106
- if (!bin_file)
107
- throw "Opal: no bin file defined."
108
-
109
- var bin_path = bin_file + "/bin/" + bin_file + ".rb";
110
-
111
- if (exports.files[bin_path])
112
- require_path = bin_path;
113
- // exports.require(bin_path);
114
- else if (exports.files[bin_path = path + '/lib/' + path + '.rb']) {
115
- // bin_path = bin_file + "/lib/" + bin_file + ".rb";
116
- // exports.require(bin_path);
117
- require_path = bin_path;
118
- }
119
- else if (exports.files[bin_path = path + '/' + path + '.rb']) {
120
- // bin_path = bin_file + "/lib/" + bin_file + ".rb";
121
- // exports.require(bin_path);
122
- require_path = bin_path;
123
- }
124
- else {
125
- throw "cannot find bin file"
126
- }
127
-
128
- opal.entry_point(function() {
129
- // require our main "browser" spec as well - seems silly making the user
130
- // have to do this when we know for a fact we are in the browser.
131
- exports.require('browser');
132
- return exports.require(require_path);
133
- });
134
- };
135
-
136
- // require the file at the given path: we have already checked it exists - mark
137
- // as being required - execute in context of top_self
138
- //
139
- // params function(__FILE__) { .. }
140
- var file_require_path = function(path) {
141
- // console.log("requiring " + path);
142
- var f = file_list[path];
143
- f.opal_required = true;
144
- return f.apply(exports.top_self, [path]);
145
- };
146
-
147
- // require the js string path.. might come from ruby, might come from js
148
- exports.require = function(orig_path) {
149
- // console.log("native require: " + orig_path);
150
- // console.log(load_paths);
151
- var path = orig_path;
152
- // basically loop through each of the load paths looking for a match
153
- if ((path.substr(path.length - 3) != '.rb') && (path.substr(path.length -3) != '.js')) {
154
- // console.log("need to add .rb");
155
- path += '.rb'
156
- }
157
-
158
- for (var i = 0; i < load_paths.length; i++) {
159
- var try_path = load_paths[i] + path;
160
- // console.log("does exist? " + try_path);
161
- if (file_list.hasOwnProperty(try_path)) {
162
- if (file_list[try_path].opal_required) {
163
- // console.log("already required " + path);
164
- return;
165
- }
166
- // console.log("shit son!!!!");
167
- // console.log(file_list[try_path]);
168
- return file_require_path(try_path);
169
- }
170
- }
171
-
172
- throw "could not find require: " + orig_path;
173
- };
174
-
175
- // load the raw file, given as a function imolementation as the given filename
176
- //
177
- // @param [String] filename
178
- // @param [Function] implementation
179
- exports.load_raw_file = function(filename, implementation) {
180
- return implementation.apply(exports.top_self);
181
- };
182
-
183
-
184
- // =========================
185
- // = Browser bits and bobs =
186
- // =========================
187
-
188
- var browser = exports.browser = (function() {
189
- var agent = navigator.userAgent.toLowerCase();
190
- var version = 1;
191
- var browser = {
192
- version: 0,
193
- safari: (/webkit/).test(agent) ? version : 0,
194
- opera: (/opera/).test(agent) ? version : 0,
195
- msie: (/msie/).test(agent) && !(/opera/).test(agent) ? version : 0
196
- };
197
-
198
- return browser;
199
- })();
200
-
201
- // set callback for when opal/document is ready to go!
202
- exports.setDocumentReadyListener = function(callback) {
203
- // run it in the context of top self
204
- var on_ready = function() {
205
- opal.entry_point(function() {
206
- callback.apply(opal.top_self);
207
- });
208
- };
209
- // attach ready function
210
- (function(){
211
- // w3c - firefox, safari, opera
212
- if (document.addEventListener) {
213
- document.addEventListener("DOMContentLoaded", on_ready, false);
214
- }
215
- // internet explorer
216
- if (exports.browser.msie) {
217
- (function() {
218
- try {
219
- document.documentElement.doScroll('left');
220
- }
221
- catch (e) {
222
- setTimeout(arguments.callee, 0);
223
- return;
224
- }
225
- on_ready();
226
- })();
227
- }
228
-
229
- })();
230
- };
231
-
232
-
233
- exports.glob_files = function(glob) {
234
- var working = glob.replace(/\*\*\//g, '.*').replace(/\*\*/g, '.*').replace(/\//g, '\\/');
235
- var result = [];
236
- var reg = new RegExp('^' + working + '$');
237
- for (var prop in opal.files) {
238
- if (reg.exec(prop)) {
239
- result.push(prop);
240
- }
241
- }
242
- return result;
243
- };
244
-
245
- // ================
246
- // = On ready etc =
247
- // ================
248
- // var on_ready = function() {
249
- // console.log("===== on_ready");
250
-
251
- // };
252
-
253
-
254
- exports.ruby_platform = "browser";
255
-
256
-
257
-
258
- // native xml http request
259
- exports.request = (function() {
260
- try {
261
- new XMLHttpRequest();
262
- return function() {
263
- return new XMLHttpRequest();
264
- };
265
- }
266
- catch (e) {
267
- try {
268
- new ActiveXObject('MSXML2.XMLHTTP');
269
- return function() {
270
- return new ActiveXObject('MSXML2.XMLHTTP');
271
- };
272
- }
273
- catch (e) {
274
- try {
275
- new ActiveXObject('Microsoft.XMLHTTP');
276
- return function() {
277
- return new ActiveXObject('Microsoft.XMLHTTP');
278
- };
279
- }
280
- catch (e) {
281
- return function() {
282
- console.log("cannot create a native XMLHttpRequest");
283
- }
284
- }
285
- }
286
- }
287
- })();
@@ -1,180 +0,0 @@
1
- // DEBUG
2
-
3
- // only do this if we want a stack trace
4
- (function() {
5
- // Our stack trace class - js prototpye based class
6
- var StackTracer = function() {
7
- this.stack = [];
8
- this.file_stack = [];
9
- return this;
10
- };
11
-
12
- StackTracer.prototype = {
13
-
14
- reset: function() {
15
- this.stack = [];
16
- this.file_stack = [];
17
- return this;
18
- },
19
-
20
- start_file: function(filename) {
21
- this.file_stack.push(filename);
22
- },
23
-
24
- end_file: function() {
25
- this.file_stack.pop();
26
- },
27
-
28
- current_file: function() {
29
- return this.file_stack[this.file_stack.length - 1];
30
- },
31
-
32
- push: function(frame) {
33
- // console.log("calling " + m_id + " on " + obj.class_name);
34
- this.stack.push(frame);
35
- },
36
-
37
- pop: function(m_id, obj) {
38
- this.stack.pop();
39
- },
40
-
41
- backtrace: function() {
42
-
43
- // did we find null or undefined (mark as warning)
44
- var found_warning = false;
45
-
46
- // call $inspect on recv, but catches errors.. when we get an error we
47
- // return <undefined> or <null> to indicate we probably have null (or
48
- // undefined where it should not be
49
- var inspect = function(recv) {
50
- try {
51
- return recv.$inspect();
52
- } catch (e) {
53
- found_warning = true;
54
- if (recv === undefined)
55
- return "<undefined>";
56
- else if (recv === null)
57
- return "<null>";
58
- else
59
- return "<error>";
60
- }
61
- };
62
- // console.log("stack is:");
63
- // console.log(this.stack);
64
- var frame, str, i = this.stack.length;
65
- while (i--) {
66
- // reset warning
67
- found_warning = false
68
-
69
- frame = this.stack[i];
70
- // console.log(frame);
71
- var args = frame.args;
72
-
73
- var str = ' from ' + frame.body.__opal_file__ + ':' + frame.body.__opal_line__ + ':in ' + inspect(frame.recv) + '.' + frame.mid;
74
-
75
- // console.log(frame.recv.$inspect());
76
-
77
- if (args.length > 0) {
78
- str += '(';
79
- for (var j = 0; j < args.length; j++) {
80
- if (j > 0) str += ', ';
81
- str += inspect(args[j]);
82
- }
83
- str += ')';
84
- } else {
85
- str += '()';
86
- }
87
-
88
-
89
- found_warning ? console.warn(str) : console.log(str);
90
- }
91
- }
92
- };
93
-
94
- // our global stack tracking object
95
- var stack_tracer = exports.stack_trace = new StackTracer();
96
-
97
- // When loading raw files (used for core library), set the right filename
98
- var old_load_raw_file = exports.load_raw_file;
99
- exports.load_raw_file = function(filename, implementation) {
100
- stack_tracer.start_file(filename);
101
- var result = old_load_raw_file.apply(this, arguments);
102
- stack_tracer.end_file();
103
- return result;
104
- };
105
-
106
- // Replace the file_require_path method to make calls to stack_tracer
107
- var old_file_require_path = file_require_path;
108
- file_require_path = function(path) {
109
- stack_tracer.start_file(path);
110
- var result = old_file_require_path.apply(this, arguments);
111
- stack_tracer.end_file();
112
- return result;
113
- };
114
-
115
-
116
- // Our entry point must be modified to actually capture these potential
117
- // errors and then log the backtrace. Also, every time we begin an entry
118
- // point, we must reset the stack tracer (it should be reset automatically
119
- // by the right number of methods popping themselves off, but lets make sure
120
- // anyway)
121
- exports.entry_point = function(func) {
122
- stack_tracer.reset();
123
- try {
124
- return func();
125
- }
126
- catch (e) {
127
- console.error(e.toString());
128
- stack_tracer.backtrace();
129
- }
130
- };
131
-
132
- // Replace the define method function. The new implementation replaces the
133
- // given body with a custom body that marks when the method is called, and
134
- // then when it leaves. This is pushed/popped to the stack so we can keep
135
- // track of the call chain. The generatr actually gives us our line number
136
- // for each egneerated method, so in debug mode lets actuqllly use it
137
- var old_dm = __boot_base_class.prototype.dm;
138
- // wrap the given function so we can log traces
139
- var wrap = function(mid, body, singleton, line_number) {
140
- // keep track of what was defined where
141
- body.__opal_file__ = stack_tracer.current_file();
142
- body.__opal_line__ = line_number;
143
- // new implementation
144
- return function() {
145
- // console.log("calling " + mid);
146
- // stack_tracer.push(mid, this, body);
147
- stack_tracer.push({
148
- mid: mid,
149
- recv: this,
150
- body: body,
151
- args: Array.prototype.slice.call(arguments)
152
- });
153
- var result = body.apply(this, arguments);
154
- stack_tracer.pop();
155
- // console.log("finished calling " + mid);
156
- return result;
157
- };
158
- };
159
-
160
- __boot_base_class.prototype.dm = function(m_id, body, singleton, line) {
161
- // console.log("adding " + m_id);
162
- body = wrap(m_id, body, singleton, line);
163
- return old_dm.apply(this, [m_id, body, singleton]);
164
- };
165
-
166
-
167
- // In debug mode we support method_missing. This is ONLY FOR DEBUG mode.
168
- // This is not to be used for metaprgramming. Basically method_missing
169
- // allows us to have nicer output from our method missing calls instead of
170
- // "this.ig("@adam").$do_something(....etc....)" we get normal ruby
171
- // formatted message. (ms = message_send)
172
- __boot_base_class.prototype.ms = function(mid) {
173
- // args are all the args after initial mid
174
- var args = Array.prototype.slice.call(arguments);
175
- // we could really do all the stack tracing in here..?
176
-
177
- //FIXME: incompletet
178
- };
179
-
180
- })();