opal 0.3.42 → 0.3.43

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 (553) hide show
  1. data/CHANGELOG.md +29 -0
  2. data/CONTRIBUTING.md +9 -1
  3. data/Rakefile +58 -21
  4. data/config.ru +14 -0
  5. data/examples/rack/Gemfile +3 -0
  6. data/examples/rack/README.md +22 -0
  7. data/examples/rack/app/app.rb +5 -0
  8. data/examples/rack/config.ru +20 -0
  9. data/examples/rack/index.html +12 -0
  10. data/examples/server/Gemfile +3 -0
  11. data/examples/server/README.md +22 -0
  12. data/examples/server/app/app.rb +18 -0
  13. data/examples/server/config.ru +10 -0
  14. data/examples/server/index.html.erb +10 -0
  15. data/lib/opal.rb +4 -1
  16. data/lib/opal/erb.rb +41 -0
  17. data/lib/opal/lexer.rb +1 -1
  18. data/lib/opal/parser.rb +5 -12
  19. data/lib/opal/processor.rb +70 -0
  20. data/lib/opal/server.rb +93 -0
  21. data/lib/opal/version.rb +1 -1
  22. data/opal.gemspec +1 -1
  23. data/opal/{opal/date.rb → date.rb} +0 -0
  24. data/opal/erb.rb +19 -0
  25. data/{spec → opal}/fileutils.rb +0 -0
  26. data/{spec → opal}/iconv.rb +0 -0
  27. data/opal/observer.rb +202 -0
  28. data/opal/opal-browser/local_storage.rb +27 -0
  29. data/opal/opal-browser/script_loader.rb +40 -0
  30. data/opal/opal-eventable.rb +26 -0
  31. data/opal/opal-parser.js.erb +8 -3
  32. data/opal/{opal/template.rb → opal-template.rb} +0 -0
  33. data/opal/opal.rb +20 -18
  34. data/opal/opal/array.rb +1 -1
  35. data/opal/opal/class.rb +6 -1
  36. data/opal/opal/kernel.rb +1 -1
  37. data/opal/opal/native.rb +91 -5
  38. data/opal/opal/runtime.js +39 -8
  39. data/{spec → opal}/pp.rb +0 -0
  40. data/opal/{opal/racc.rb → racc.rb} +0 -0
  41. data/{spec → opal}/rbconfig.rb +0 -0
  42. data/opal/{opal/strscan.rb → strscan.rb} +0 -0
  43. data/{spec → opal}/yaml.rb +0 -0
  44. data/spec/{core_ext → opal}/array/element_reference_spec.rb +0 -0
  45. data/spec/{core_ext → opal}/array/equal_value_spec.rb +0 -0
  46. data/spec/{core_ext → opal}/array/fill_spec.rb +0 -0
  47. data/spec/{core_ext → opal}/array/reduce_spec.rb +0 -0
  48. data/spec/{core_ext → opal}/array/to_json_spec.rb +0 -0
  49. data/spec/{core_ext → opal}/basic_object/send_spec.rb +0 -0
  50. data/spec/{core_ext → opal}/boolean/singleton_class_spec.rb +0 -0
  51. data/spec/{core_ext → opal}/boolean/to_json_spec.rb +0 -0
  52. data/spec/opal/browser/local_storage_spec.rb +55 -0
  53. data/spec/{core_ext → opal}/class/_inherited_spec.rb +0 -0
  54. data/spec/{core_ext → opal}/class/proc_methods_spec.rb +0 -0
  55. data/spec/{core_ext → opal}/class/singleton_methods_spec.rb +0 -0
  56. data/spec/{core_ext → opal}/constants_spec.rb +0 -0
  57. data/spec/opal/erb/erb_spec.rb +31 -0
  58. data/spec/opal/eventable_spec.rb +75 -0
  59. data/spec/{core_ext → opal}/method_missing_spec.rb +0 -0
  60. data/spec/opal/native/element_reference_spec.rb +40 -0
  61. data/spec/opal/native/equal_spec.rb +17 -0
  62. data/spec/opal/native/fixtures/classes.rb +27 -0
  63. data/spec/opal/native/global_spec.rb +12 -0
  64. data/spec/opal/native/initialize_spec.rb +8 -0
  65. data/spec/opal/native/method_missing_spec.rb +53 -0
  66. data/spec/{core_ext → opal}/native/to_native_spec.rb +1 -1
  67. data/spec/{core_ext → opal}/nil/to_json_spec.rb +0 -0
  68. data/spec/opal/runtime/eval_spec.rb +5 -0
  69. data/spec/opal/runtime/send_spec.rb +34 -0
  70. data/spec/ospec/main.rb.erb +9 -3
  71. data/spec/ospec/runner.rb +132 -5
  72. data/spec/{grammar → parser}/alias_spec.rb +0 -0
  73. data/spec/{grammar → parser}/and_spec.rb +0 -0
  74. data/spec/{grammar → parser}/array_spec.rb +0 -0
  75. data/spec/{grammar → parser}/attrasgn_spec.rb +0 -0
  76. data/spec/{grammar → parser}/begin_spec.rb +0 -0
  77. data/spec/{grammar → parser}/block_spec.rb +0 -0
  78. data/spec/{grammar → parser}/break_spec.rb +0 -0
  79. data/spec/{grammar → parser}/call_spec.rb +0 -0
  80. data/spec/{grammar → parser}/class_spec.rb +0 -0
  81. data/spec/{grammar → parser}/const_spec.rb +0 -0
  82. data/spec/{grammar → parser}/cvar_spec.rb +0 -0
  83. data/spec/{grammar → parser}/def_spec.rb +0 -0
  84. data/spec/{grammar → parser}/false_spec.rb +0 -0
  85. data/spec/{grammar → parser}/file_spec.rb +0 -0
  86. data/spec/{grammar → parser}/gvar_spec.rb +0 -0
  87. data/spec/{grammar → parser}/hash_spec.rb +0 -0
  88. data/spec/{grammar → parser}/iasgn_spec.rb +0 -0
  89. data/spec/{grammar → parser}/if_spec.rb +0 -0
  90. data/spec/{grammar → parser}/iter_spec.rb +0 -0
  91. data/spec/{grammar → parser}/ivar_spec.rb +0 -0
  92. data/spec/{grammar → parser}/lambda_spec.rb +0 -0
  93. data/spec/{grammar → parser}/lasgn_spec.rb +0 -0
  94. data/spec/{grammar → parser}/line_spec.rb +0 -0
  95. data/spec/{grammar → parser}/lvar_spec.rb +0 -0
  96. data/spec/{grammar → parser}/masgn_spec.rb +0 -0
  97. data/spec/{grammar → parser}/module_spec.rb +0 -0
  98. data/spec/{grammar → parser}/nil_spec.rb +0 -0
  99. data/spec/{grammar → parser}/not_spec.rb +0 -0
  100. data/spec/{grammar → parser}/nth_ref_spec.rb +0 -0
  101. data/spec/{grammar → parser}/op_asgn1_spec.rb +0 -0
  102. data/spec/{grammar → parser}/op_asgn2_spec.rb +0 -0
  103. data/spec/{grammar → parser}/or_spec.rb +0 -0
  104. data/spec/{grammar → parser}/parser_spec.rb +0 -0
  105. data/spec/{grammar → parser}/return_spec.rb +0 -0
  106. data/spec/{grammar → parser}/sclass_spec.rb +0 -0
  107. data/spec/{grammar → parser}/self_spec.rb +0 -0
  108. data/spec/{grammar → parser}/str_spec.rb +0 -0
  109. data/spec/{grammar → parser}/string_spec.rb +0 -0
  110. data/spec/{grammar → parser}/strscan/check_spec.rb +0 -0
  111. data/spec/{grammar → parser}/strscan/scan_spec.rb +0 -0
  112. data/spec/{grammar → parser}/super_spec.rb +0 -0
  113. data/spec/{grammar → parser}/true_spec.rb +0 -0
  114. data/spec/{grammar → parser}/undef_spec.rb +0 -0
  115. data/spec/{grammar → parser}/unless_spec.rb +0 -0
  116. data/spec/{grammar → parser}/while_spec.rb +0 -0
  117. data/spec/{grammar → parser}/xstr_spec.rb +0 -0
  118. data/spec/{grammar → parser}/yield_spec.rb +0 -0
  119. data/spec/{core → rubyspec/core}/array/allocate_spec.rb +0 -0
  120. data/spec/{core → rubyspec/core}/array/append_spec.rb +0 -0
  121. data/spec/{core → rubyspec/core}/array/array_spec.rb +0 -0
  122. data/spec/{core → rubyspec/core}/array/assoc_spec.rb +0 -0
  123. data/spec/{core → rubyspec/core}/array/at_spec.rb +0 -0
  124. data/spec/{core → rubyspec/core}/array/choice_spec.rb +0 -0
  125. data/spec/{core → rubyspec/core}/array/clear_spec.rb +0 -0
  126. data/spec/{core → rubyspec/core}/array/clone_spec.rb +0 -0
  127. data/spec/{core → rubyspec/core}/array/collect_spec.rb +0 -0
  128. data/spec/{core → rubyspec/core}/array/combination_spec.rb +0 -0
  129. data/spec/{core → rubyspec/core}/array/compact_spec.rb +0 -0
  130. data/spec/{core → rubyspec/core}/array/comparison_spec.rb +0 -0
  131. data/spec/{core → rubyspec/core}/array/concat_spec.rb +0 -0
  132. data/spec/{core → rubyspec/core}/array/constructor_spec.rb +0 -0
  133. data/spec/{core → rubyspec/core}/array/count_spec.rb +0 -0
  134. data/spec/{core → rubyspec/core}/array/delete_at_spec.rb +0 -0
  135. data/spec/{core → rubyspec/core}/array/delete_if_spec.rb +0 -0
  136. data/spec/{core → rubyspec/core}/array/delete_spec.rb +0 -0
  137. data/spec/{core → rubyspec/core}/array/drop_spec.rb +0 -0
  138. data/spec/{core → rubyspec/core}/array/drop_while_spec.rb +0 -0
  139. data/spec/{core → rubyspec/core}/array/dup_spec.rb +0 -0
  140. data/spec/{core → rubyspec/core}/array/each_index_spec.rb +0 -0
  141. data/spec/{core → rubyspec/core}/array/each_spec.rb +0 -0
  142. data/spec/{core → rubyspec/core}/array/empty_spec.rb +0 -0
  143. data/spec/{core → rubyspec/core}/array/eql_spec.rb +0 -0
  144. data/spec/{core → rubyspec/core}/array/fetch_spec.rb +0 -0
  145. data/spec/{core → rubyspec/core}/array/find_index_spec.rb +0 -0
  146. data/spec/{core → rubyspec/core}/array/first_spec.rb +0 -0
  147. data/spec/{core → rubyspec/core}/array/fixtures/classes.rb +0 -0
  148. data/spec/{core → rubyspec/core}/array/flatten_spec.rb +0 -0
  149. data/spec/{core → rubyspec/core}/array/frozen_spec.rb +0 -0
  150. data/spec/{core → rubyspec/core}/array/include_spec.rb +0 -0
  151. data/spec/{core → rubyspec/core}/array/index_spec.rb +0 -0
  152. data/spec/{core → rubyspec/core}/array/insert_spec.rb +0 -0
  153. data/spec/{core → rubyspec/core}/array/inspect_spec.rb +0 -0
  154. data/spec/{core → rubyspec/core}/array/intersection_spec.rb +0 -0
  155. data/spec/{core → rubyspec/core}/array/join_spec.rb +0 -0
  156. data/spec/{core → rubyspec/core}/array/keep_if_spec.rb +0 -0
  157. data/spec/{core → rubyspec/core}/array/last_spec.rb +0 -0
  158. data/spec/{core → rubyspec/core}/array/length_spec.rb +0 -0
  159. data/spec/{core → rubyspec/core}/array/map_spec.rb +0 -0
  160. data/spec/{core → rubyspec/core}/array/minus_spec.rb +0 -0
  161. data/spec/{core → rubyspec/core}/array/multiply_spec.rb +0 -0
  162. data/spec/{core → rubyspec/core}/array/new_spec.rb +0 -0
  163. data/spec/{core → rubyspec/core}/array/ntimes_spec.rb +0 -0
  164. data/spec/{core → rubyspec/core}/array/plus_spec.rb +0 -0
  165. data/spec/{core → rubyspec/core}/array/pop_spec.rb +0 -0
  166. data/spec/{core → rubyspec/core}/array/push_spec.rb +0 -0
  167. data/spec/{core → rubyspec/core}/array/rassoc_spec.rb +0 -0
  168. data/spec/{core → rubyspec/core}/array/reject_spec.rb +0 -0
  169. data/spec/{core → rubyspec/core}/array/replace_spec.rb +0 -0
  170. data/spec/{core → rubyspec/core}/array/reverse_each_spec.rb +0 -0
  171. data/spec/{core → rubyspec/core}/array/reverse_spec.rb +0 -0
  172. data/spec/{core → rubyspec/core}/array/rindex_spec.rb +0 -0
  173. data/spec/{core → rubyspec/core}/array/select_spec.rb +0 -0
  174. data/spec/{core → rubyspec/core}/array/shared/collect.rb +0 -0
  175. data/spec/{core → rubyspec/core}/array/shared/enumeratorize.rb +0 -0
  176. data/spec/{core → rubyspec/core}/array/shared/eql.rb +0 -0
  177. data/spec/{core → rubyspec/core}/array/shared/index.rb +0 -0
  178. data/spec/{core → rubyspec/core}/array/shared/inspect.rb +0 -0
  179. data/spec/{core → rubyspec/core}/array/shared/join.rb +0 -0
  180. data/spec/{core → rubyspec/core}/array/shared/keep_if.rb +0 -0
  181. data/spec/{core → rubyspec/core}/array/shared/length.rb +0 -0
  182. data/spec/{core → rubyspec/core}/array/shared/replace.rb +0 -0
  183. data/spec/{core → rubyspec/core}/array/shared/slice.rb +0 -0
  184. data/spec/{core → rubyspec/core}/array/shift_spec.rb +0 -0
  185. data/spec/{core → rubyspec/core}/array/shuffle_spec.rb +0 -0
  186. data/spec/{core → rubyspec/core}/array/size_spec.rb +0 -0
  187. data/spec/{core → rubyspec/core}/array/slice_spec.rb +0 -0
  188. data/spec/{core → rubyspec/core}/array/sort_spec.rb +0 -0
  189. data/spec/{core → rubyspec/core}/array/take_spec.rb +0 -0
  190. data/spec/{core → rubyspec/core}/array/take_while_spec.rb +0 -0
  191. data/spec/{core → rubyspec/core}/array/to_a_spec.rb +0 -0
  192. data/spec/{core → rubyspec/core}/array/to_ary_spec.rb +0 -0
  193. data/spec/{core → rubyspec/core}/array/try_convert_spec.rb +0 -0
  194. data/spec/{core → rubyspec/core}/array/uniq_spec.rb +0 -0
  195. data/spec/{core → rubyspec/core}/array/unshift_spec.rb +0 -0
  196. data/spec/{core → rubyspec/core}/array/zip_spec.rb +0 -0
  197. data/spec/{core → rubyspec/core}/class/bridge_class_spec.rb +0 -0
  198. data/spec/{core → rubyspec/core}/class/extend_spec.rb +0 -0
  199. data/spec/{core → rubyspec/core}/class/fixtures/classes.rb +0 -0
  200. data/spec/{core → rubyspec/core}/class/instance_methods_spec.rb +0 -0
  201. data/spec/{core → rubyspec/core}/class/last_value_spec.rb +0 -0
  202. data/spec/{core → rubyspec/core}/class/new_spec.rb +0 -0
  203. data/spec/{core → rubyspec/core}/enumerable/all_spec.rb +0 -0
  204. data/spec/{core → rubyspec/core}/enumerable/any_spec.rb +0 -0
  205. data/spec/{core → rubyspec/core}/enumerable/collect_spec.rb +0 -0
  206. data/spec/{core → rubyspec/core}/enumerable/count_spec.rb +0 -0
  207. data/spec/{core → rubyspec/core}/enumerable/detect_spec.rb +0 -0
  208. data/spec/{core → rubyspec/core}/enumerable/drop_spec.rb +0 -0
  209. data/spec/{core → rubyspec/core}/enumerable/drop_while_spec.rb +0 -0
  210. data/spec/{core → rubyspec/core}/enumerable/each_slice_spec.rb +0 -0
  211. data/spec/{core → rubyspec/core}/enumerable/each_with_index_spec.rb +0 -0
  212. data/spec/{core → rubyspec/core}/enumerable/each_with_object_spec.rb +0 -0
  213. data/spec/{core → rubyspec/core}/enumerable/entries_spec.rb +0 -0
  214. data/spec/{core → rubyspec/core}/enumerable/find_all_spec.rb +0 -0
  215. data/spec/{core → rubyspec/core}/enumerable/find_index_spec.rb +0 -0
  216. data/spec/{core → rubyspec/core}/enumerable/find_spec.rb +0 -0
  217. data/spec/{core → rubyspec/core}/enumerable/first_spec.rb +0 -0
  218. data/spec/{core → rubyspec/core}/enumerable/fixtures/classes.rb +0 -0
  219. data/spec/{core → rubyspec/core}/enumerable/grep_spec.rb +0 -0
  220. data/spec/{core → rubyspec/core}/enumerable/group_by_spec.rb +0 -0
  221. data/spec/{core → rubyspec/core}/enumerable/select_spec.rb +0 -0
  222. data/spec/{core → rubyspec/core}/enumerable/take_spec.rb +0 -0
  223. data/spec/{core → rubyspec/core}/enumerable/to_a_spec.rb +0 -0
  224. data/spec/{core → rubyspec/core}/enumerator/each_spec.rb +0 -0
  225. data/spec/{core → rubyspec/core}/enumerator/new_spec.rb +0 -0
  226. data/spec/{core → rubyspec/core}/enumerator/next_spec.rb +0 -0
  227. data/spec/{core → rubyspec/core}/enumerator/rewind_spec.rb +0 -0
  228. data/spec/{core → rubyspec/core}/false/and_spec.rb +0 -0
  229. data/spec/{core → rubyspec/core}/false/inspect_spec.rb +0 -0
  230. data/spec/{core → rubyspec/core}/false/or_spec.rb +0 -0
  231. data/spec/{core → rubyspec/core}/false/to_s_spec.rb +0 -0
  232. data/spec/{core → rubyspec/core}/false/xor_spec.rb +0 -0
  233. data/spec/{core → rubyspec/core}/hash/allocate_spec.rb +0 -0
  234. data/spec/{core → rubyspec/core}/hash/assoc_spec.rb +0 -0
  235. data/spec/{core → rubyspec/core}/hash/clear_spec.rb +0 -0
  236. data/spec/{core → rubyspec/core}/hash/clone_spec.rb +0 -0
  237. data/spec/{core → rubyspec/core}/hash/constructor_spec.rb +0 -0
  238. data/spec/{core → rubyspec/core}/hash/default_proc_spec.rb +0 -0
  239. data/spec/{core → rubyspec/core}/hash/default_spec.rb +0 -0
  240. data/spec/{core → rubyspec/core}/hash/delete_if_spec.rb +0 -0
  241. data/spec/{core → rubyspec/core}/hash/delete_spec.rb +0 -0
  242. data/spec/{core → rubyspec/core}/hash/dup_spec.rb +0 -0
  243. data/spec/{core → rubyspec/core}/hash/each_key_spec.rb +0 -0
  244. data/spec/{core → rubyspec/core}/hash/each_pair_spec.rb +0 -0
  245. data/spec/{core → rubyspec/core}/hash/each_spec.rb +0 -0
  246. data/spec/{core → rubyspec/core}/hash/each_value_spec.rb +0 -0
  247. data/spec/{core → rubyspec/core}/hash/element_reference_spec.rb +0 -0
  248. data/spec/{core → rubyspec/core}/hash/element_set_spec.rb +0 -0
  249. data/spec/{core → rubyspec/core}/hash/empty_spec.rb +0 -0
  250. data/spec/{core → rubyspec/core}/hash/fetch_spec.rb +0 -0
  251. data/spec/{core → rubyspec/core}/hash/flatten_spec.rb +0 -0
  252. data/spec/{core → rubyspec/core}/hash/has_key_spec.rb +0 -0
  253. data/spec/{core → rubyspec/core}/hash/has_value_spec.rb +0 -0
  254. data/spec/{core → rubyspec/core}/hash/include_spec.rb +0 -0
  255. data/spec/{core → rubyspec/core}/hash/index_spec.rb +0 -0
  256. data/spec/{core → rubyspec/core}/hash/indexes_spec.rb +0 -0
  257. data/spec/{core → rubyspec/core}/hash/indices_spec.rb +0 -0
  258. data/spec/{core → rubyspec/core}/hash/invert_spec.rb +0 -0
  259. data/spec/{core → rubyspec/core}/hash/keep_if_spec.rb +0 -0
  260. data/spec/{core → rubyspec/core}/hash/key_spec.rb +0 -0
  261. data/spec/{core → rubyspec/core}/hash/keys_spec.rb +0 -0
  262. data/spec/{core → rubyspec/core}/hash/length_spec.rb +0 -0
  263. data/spec/{core → rubyspec/core}/hash/member_spec.rb +0 -0
  264. data/spec/{core → rubyspec/core}/hash/merge_spec.rb +0 -0
  265. data/spec/{core → rubyspec/core}/hash/new_spec.rb +0 -0
  266. data/spec/{core → rubyspec/core}/hash/rassoc_spec.rb +0 -0
  267. data/spec/{core → rubyspec/core}/hash/reject_spec.rb +0 -0
  268. data/spec/{core → rubyspec/core}/hash/replace_spec.rb +0 -0
  269. data/spec/{core → rubyspec/core}/hash/select_spec.rb +0 -0
  270. data/spec/{core → rubyspec/core}/hash/shift_spec.rb +0 -0
  271. data/spec/{core → rubyspec/core}/hash/size_spec.rb +0 -0
  272. data/spec/{core → rubyspec/core}/hash/to_a_spec.rb +0 -0
  273. data/spec/{core → rubyspec/core}/hash/to_json_spec.rb +0 -0
  274. data/spec/{core → rubyspec/core}/hash/to_native_spec.rb +0 -0
  275. data/spec/{core → rubyspec/core}/hash/update_spec.rb +0 -0
  276. data/spec/{core → rubyspec/core}/hash/value_spec.rb +0 -0
  277. data/spec/{core → rubyspec/core}/hash/values_at_spec.rb +0 -0
  278. data/spec/{core → rubyspec/core}/hash/values_spec.rb +0 -0
  279. data/spec/{core → rubyspec/core}/json/parse_spec.rb +0 -0
  280. data/spec/{core → rubyspec/core}/kernel/Array_spec.rb +0 -0
  281. data/spec/{core → rubyspec/core}/kernel/block_given.rb +0 -0
  282. data/spec/{core → rubyspec/core}/kernel/class_spec.rb +0 -0
  283. data/spec/{core → rubyspec/core}/kernel/define_singleton_method_spec.rb +0 -0
  284. data/spec/{core → rubyspec/core}/kernel/eql_spec.rb +0 -0
  285. data/spec/{core → rubyspec/core}/kernel/equal_spec.rb +0 -0
  286. data/spec/{core → rubyspec/core}/kernel/equal_value_spec.rb +0 -0
  287. data/spec/{core → rubyspec/core}/kernel/extend_spec.rb +0 -0
  288. data/spec/{core → rubyspec/core}/kernel/format_spec.rb +0 -0
  289. data/spec/{core → rubyspec/core}/kernel/instance_eval_spec.rb +0 -0
  290. data/spec/{core → rubyspec/core}/kernel/instance_variable_get_spec.rb +0 -0
  291. data/spec/{core → rubyspec/core}/kernel/instance_variable_set_spec.rb +0 -0
  292. data/spec/{core → rubyspec/core}/kernel/loop_spec.rb +0 -0
  293. data/spec/{core → rubyspec/core}/kernel/match_spec.rb +0 -0
  294. data/spec/{core → rubyspec/core}/kernel/method_spec.rb +0 -0
  295. data/spec/{core → rubyspec/core}/kernel/methods_spec.rb +0 -0
  296. data/spec/{core → rubyspec/core}/kernel/nil_spec.rb +0 -0
  297. data/spec/{core → rubyspec/core}/kernel/p_spec.rb +0 -0
  298. data/spec/{core → rubyspec/core}/kernel/printf_spec.rb +0 -0
  299. data/spec/{core → rubyspec/core}/kernel/proc_spec.rb +0 -0
  300. data/spec/{core → rubyspec/core}/kernel/rand_spec.rb +0 -0
  301. data/spec/{core → rubyspec/core}/kernel/respond_to_spec.rb +0 -0
  302. data/spec/{core → rubyspec/core}/kernel/send_spec.rb +0 -0
  303. data/spec/{core → rubyspec/core}/kernel/sprintf_spec.rb +0 -0
  304. data/spec/{core → rubyspec/core}/kernel/tap_spec.rb +0 -0
  305. data/spec/{core → rubyspec/core}/kernel/to_json_spec.rb +0 -0
  306. data/spec/{core → rubyspec/core}/kernel/to_s_spec.rb +0 -0
  307. data/spec/{core → rubyspec/core}/matchdata/to_a_spec.rb +0 -0
  308. data/spec/{core → rubyspec/core}/module/alias_method_spec.rb +0 -0
  309. data/spec/{core → rubyspec/core}/module/ancestors_spec.rb +0 -0
  310. data/spec/{core → rubyspec/core}/module/append_features_spec.rb +0 -0
  311. data/spec/{core → rubyspec/core}/module/const_get_spec.rb +0 -0
  312. data/spec/rubyspec/core/module/const_missing_spec.rb +18 -0
  313. data/spec/{core → rubyspec/core}/module/const_set_spec.rb +0 -0
  314. data/spec/{core → rubyspec/core}/module/fixtures/classes.rb +0 -0
  315. data/spec/{core → rubyspec/core}/module/method_defined_spec.rb +0 -0
  316. data/spec/{core → rubyspec/core}/module/module_function_spec.rb +0 -0
  317. data/spec/{core → rubyspec/core}/module/undef_method_spec.rb +0 -0
  318. data/spec/{core → rubyspec/core}/nil/and_spec.rb +0 -0
  319. data/spec/{core → rubyspec/core}/nil/dup_spec.rb +0 -0
  320. data/spec/{core → rubyspec/core}/nil/inspect_spec.rb +0 -0
  321. data/spec/{core → rubyspec/core}/nil/nil_spec.rb +0 -0
  322. data/spec/{core → rubyspec/core}/nil/or_spec.rb +0 -0
  323. data/spec/{core → rubyspec/core}/nil/to_a_spec.rb +0 -0
  324. data/spec/{core → rubyspec/core}/nil/to_f_spec.rb +0 -0
  325. data/spec/{core → rubyspec/core}/nil/to_h_spec.rb +0 -0
  326. data/spec/{core → rubyspec/core}/nil/to_i_spec.rb +0 -0
  327. data/spec/{core → rubyspec/core}/nil/to_s_spec.rb +0 -0
  328. data/spec/{core → rubyspec/core}/nil/xor_spec.rb +0 -0
  329. data/spec/{core → rubyspec/core}/numeric/abs_spec.rb +0 -0
  330. data/spec/{core → rubyspec/core}/numeric/bit_and_spec.rb +0 -0
  331. data/spec/{core → rubyspec/core}/numeric/bit_or_spec.rb +0 -0
  332. data/spec/{core → rubyspec/core}/numeric/bit_xor_spec.rb +0 -0
  333. data/spec/{core → rubyspec/core}/numeric/ceil_spec.rb +0 -0
  334. data/spec/{core → rubyspec/core}/numeric/chr_spec.rb +0 -0
  335. data/spec/{core → rubyspec/core}/numeric/comparison_spec.rb +0 -0
  336. data/spec/{core → rubyspec/core}/numeric/complement_spec.rb +0 -0
  337. data/spec/{core → rubyspec/core}/numeric/divide_spec.rb +0 -0
  338. data/spec/{core → rubyspec/core}/numeric/downto_spec.rb +0 -0
  339. data/spec/{core → rubyspec/core}/numeric/eql_spec.rb +0 -0
  340. data/spec/{core → rubyspec/core}/numeric/equal_value_spec.rb +0 -0
  341. data/spec/{core → rubyspec/core}/numeric/even_spec.rb +0 -0
  342. data/spec/{core → rubyspec/core}/numeric/exponent_spec.rb +0 -0
  343. data/spec/{core → rubyspec/core}/numeric/floor_spec.rb +0 -0
  344. data/spec/{core → rubyspec/core}/numeric/gt_spec.rb +0 -0
  345. data/spec/{core → rubyspec/core}/numeric/gte_spec.rb +0 -0
  346. data/spec/{core → rubyspec/core}/numeric/integer_spec.rb +0 -0
  347. data/spec/{core → rubyspec/core}/numeric/left_shift_spec.rb +0 -0
  348. data/spec/{core → rubyspec/core}/numeric/lt_spec.rb +0 -0
  349. data/spec/{core → rubyspec/core}/numeric/lte_spec.rb +0 -0
  350. data/spec/{core → rubyspec/core}/numeric/magnitude_spec.rb +0 -0
  351. data/spec/{core → rubyspec/core}/numeric/minus_spec.rb +0 -0
  352. data/spec/{core → rubyspec/core}/numeric/modulo_spec.rb +0 -0
  353. data/spec/{core → rubyspec/core}/numeric/multiply_spec.rb +0 -0
  354. data/spec/{core → rubyspec/core}/numeric/next_spec.rb +0 -0
  355. data/spec/{core → rubyspec/core}/numeric/odd_spec.rb +0 -0
  356. data/spec/{core → rubyspec/core}/numeric/ord_spec.rb +0 -0
  357. data/spec/{core → rubyspec/core}/numeric/plus_spec.rb +0 -0
  358. data/spec/{core → rubyspec/core}/numeric/pred_spec.rb +0 -0
  359. data/spec/{core → rubyspec/core}/numeric/right_shift_spec.rb +0 -0
  360. data/spec/{core → rubyspec/core}/numeric/succ_spec.rb +0 -0
  361. data/spec/{core → rubyspec/core}/numeric/times_spec.rb +0 -0
  362. data/spec/{core → rubyspec/core}/numeric/to_f_spec.rb +0 -0
  363. data/spec/{core → rubyspec/core}/numeric/to_i_spec.rb +0 -0
  364. data/spec/{core → rubyspec/core}/numeric/to_json_spec.rb +0 -0
  365. data/spec/{core → rubyspec/core}/numeric/to_s_spec.rb +0 -0
  366. data/spec/{core → rubyspec/core}/numeric/uminus_spec.rb +0 -0
  367. data/spec/{core → rubyspec/core}/numeric/upto_spec.rb +0 -0
  368. data/spec/{core → rubyspec/core}/numeric/zero_spec.rb +0 -0
  369. data/spec/{core → rubyspec/core}/proc/call_spec.rb +0 -0
  370. data/spec/{core → rubyspec/core}/proc/element_reference_spec.rb +0 -0
  371. data/spec/{core → rubyspec/core}/proc/proc_tricks_spec.rb +0 -0
  372. data/spec/{core → rubyspec/core}/range/begin_spec.rb +0 -0
  373. data/spec/{core → rubyspec/core}/range/case_compare_spec.rb +0 -0
  374. data/spec/{core → rubyspec/core}/range/end_spec.rb +0 -0
  375. data/spec/{core → rubyspec/core}/regexp/match_spec.rb +0 -0
  376. data/spec/{core → rubyspec/core}/runtime/call_spec.rb +0 -0
  377. data/spec/{core → rubyspec/core}/runtime/class_hierarchy_spec.rb +0 -0
  378. data/spec/{core → rubyspec/core}/runtime/def_spec.rb +0 -0
  379. data/spec/{core → rubyspec/core}/runtime/defined_spec.rb +0 -0
  380. data/spec/{core → rubyspec/core}/runtime/super_spec.rb +0 -0
  381. data/spec/{core → rubyspec/core}/string/capitalize_spec.rb +0 -0
  382. data/spec/{core → rubyspec/core}/string/casecmp_spec.rb +0 -0
  383. data/spec/{core → rubyspec/core}/string/chomp_spec.rb +0 -0
  384. data/spec/{core → rubyspec/core}/string/chop_spec.rb +0 -0
  385. data/spec/{core → rubyspec/core}/string/chr_spec.rb +0 -0
  386. data/spec/{core → rubyspec/core}/string/comparison_spec.rb +0 -0
  387. data/spec/{core → rubyspec/core}/string/demodulize_spec.rb +0 -0
  388. data/spec/{core → rubyspec/core}/string/downcase_spec.rb +0 -0
  389. data/spec/{core → rubyspec/core}/string/element_reference_spec.rb +0 -0
  390. data/spec/{core → rubyspec/core}/string/empty_spec.rb +0 -0
  391. data/spec/{core → rubyspec/core}/string/end_with_spec.rb +0 -0
  392. data/spec/{core → rubyspec/core}/string/fixtures/classes.rb +0 -0
  393. data/spec/{core → rubyspec/core}/string/format_spec.rb +0 -0
  394. data/spec/{core → rubyspec/core}/string/gsub_spec.rb +0 -0
  395. data/spec/{core → rubyspec/core}/string/include_spec.rb +0 -0
  396. data/spec/{core → rubyspec/core}/string/intern_spec.rb +0 -0
  397. data/spec/{core → rubyspec/core}/string/length_spec.rb +0 -0
  398. data/spec/{core → rubyspec/core}/string/lstrip_spec.rb +0 -0
  399. data/spec/{core → rubyspec/core}/string/match_spec.rb +0 -0
  400. data/spec/{core → rubyspec/core}/string/next_spec.rb +0 -0
  401. data/spec/{core → rubyspec/core}/string/ord_spec.rb +0 -0
  402. data/spec/{core → rubyspec/core}/string/partition_spec.rb +0 -0
  403. data/spec/{core → rubyspec/core}/string/reverse_spec.rb +0 -0
  404. data/spec/{core → rubyspec/core}/string/rstrip_spec.rb +0 -0
  405. data/spec/{core → rubyspec/core}/string/size_spec.rb +0 -0
  406. data/spec/{core → rubyspec/core}/string/slice_spec.rb +0 -0
  407. data/spec/{core → rubyspec/core}/string/split_spec.rb +0 -0
  408. data/spec/{core → rubyspec/core}/string/start_with_spec.rb +0 -0
  409. data/spec/{core → rubyspec/core}/string/strip_spec.rb +0 -0
  410. data/spec/{core → rubyspec/core}/string/sub_spec.rb +0 -0
  411. data/spec/{core → rubyspec/core}/string/succ_spec.rb +0 -0
  412. data/spec/{core → rubyspec/core}/string/sum_spec.rb +0 -0
  413. data/spec/{core → rubyspec/core}/string/swapcase_spec.rb +0 -0
  414. data/spec/{core → rubyspec/core}/string/to_a_spec.rb +0 -0
  415. data/spec/{core → rubyspec/core}/string/to_f_spec.rb +0 -0
  416. data/spec/{core → rubyspec/core}/string/to_i_spec.rb +0 -0
  417. data/spec/{core → rubyspec/core}/string/to_json_spec.rb +0 -0
  418. data/spec/{core → rubyspec/core}/string/to_s_spec.rb +0 -0
  419. data/spec/{core → rubyspec/core}/string/to_str_spec.rb +0 -0
  420. data/spec/{core → rubyspec/core}/string/to_sym_spec.rb +0 -0
  421. data/spec/{core → rubyspec/core}/string/underscore_spec.rb +0 -0
  422. data/spec/{core → rubyspec/core}/string/upcase_spec.rb +0 -0
  423. data/spec/{core → rubyspec/core}/symbol/to_proc_spec.rb +0 -0
  424. data/spec/{core → rubyspec/core}/time/at_spec.rb +0 -0
  425. data/spec/{core → rubyspec/core}/time/day_spec.rb +0 -0
  426. data/spec/{core → rubyspec/core}/time/friday_spec.rb +0 -0
  427. data/spec/{core → rubyspec/core}/time/hour_spec.rb +0 -0
  428. data/spec/{core → rubyspec/core}/time/min_spec.rb +0 -0
  429. data/spec/{core → rubyspec/core}/time/monday_spec.rb +0 -0
  430. data/spec/{core → rubyspec/core}/time/month_spec.rb +0 -0
  431. data/spec/{core → rubyspec/core}/time/now_spec.rb +0 -0
  432. data/spec/{core → rubyspec/core}/time/saturday_spec.rb +0 -0
  433. data/spec/{core → rubyspec/core}/true/and_spec.rb +0 -0
  434. data/spec/{core → rubyspec/core}/true/inspect_spec.rb +0 -0
  435. data/spec/{core → rubyspec/core}/true/or_spec.rb +0 -0
  436. data/spec/{core → rubyspec/core}/true/to_s_spec.rb +0 -0
  437. data/spec/{core → rubyspec/core}/true/xor_spec.rb +0 -0
  438. data/spec/rubyspec/filters/bugs/alias.rb +6 -0
  439. data/spec/{filters → rubyspec/filters/bugs}/ancestors.rb +0 -0
  440. data/spec/rubyspec/filters/bugs/array.rb +5 -0
  441. data/spec/{filters → rubyspec/filters/bugs}/array_delete.rb +0 -0
  442. data/spec/{filters → rubyspec/filters/bugs}/array_fetch.rb +0 -0
  443. data/spec/{filters → rubyspec/filters/bugs}/array_first.rb +0 -0
  444. data/spec/{filters → rubyspec/filters/bugs}/array_flatten.rb +0 -0
  445. data/spec/{filters → rubyspec/filters/bugs}/array_intersection.rb +0 -0
  446. data/spec/{filters → rubyspec/filters/bugs}/array_join.rb +0 -0
  447. data/spec/{filters → rubyspec/filters/bugs}/block_args.rb +0 -0
  448. data/spec/rubyspec/filters/bugs/break.rb +10 -0
  449. data/spec/rubyspec/filters/bugs/case.rb +8 -0
  450. data/spec/{filters → rubyspec/filters/bugs}/coerce_integer.rb +0 -0
  451. data/spec/rubyspec/filters/bugs/kernel/instance_variables.rb +3 -0
  452. data/spec/rubyspec/filters/bugs/language/class.rb +11 -0
  453. data/spec/rubyspec/filters/bugs/language/class_variables.rb +12 -0
  454. data/spec/rubyspec/filters/bugs/module/class_variables.rb +6 -0
  455. data/spec/rubyspec/filters/bugs/public_methods.rb +3 -0
  456. data/spec/{filters → rubyspec/filters/mspec}/mocks.rb +0 -0
  457. data/spec/rubyspec/filters/mspec/ruby_exe.rb +5 -0
  458. data/spec/{filters → rubyspec/filters/mspec}/should_receive.rb +1 -0
  459. data/spec/rubyspec/filters/parser/block_args.rb +51 -0
  460. data/spec/{filters → rubyspec/filters/unsupported}/array_subclasses.rb +0 -0
  461. data/spec/{filters → rubyspec/filters/unsupported}/frozen.rb +0 -0
  462. data/spec/{filters → rubyspec/filters/unsupported}/tainted.rb +0 -0
  463. data/spec/{fixtures → rubyspec/fixtures}/class.rb +0 -0
  464. data/spec/{fixtures → rubyspec/fixtures}/class_variables.rb +0 -0
  465. data/spec/rubyspec/fixtures/constants.rb +20 -0
  466. data/spec/{language → rubyspec/language}/alias_spec.rb +7 -7
  467. data/spec/{language → rubyspec/language}/and_spec.rb +0 -0
  468. data/spec/{language → rubyspec/language}/array_spec.rb +3 -3
  469. data/spec/{language → rubyspec/language}/block_spec.rb +59 -59
  470. data/spec/{language → rubyspec/language}/break_spec.rb +15 -19
  471. data/spec/{language → rubyspec/language}/case_spec.rb +6 -6
  472. data/spec/{language → rubyspec/language}/class_spec.rb +16 -18
  473. data/spec/{language → rubyspec/language}/class_variable_spec.rb +10 -10
  474. data/spec/{language → rubyspec/language}/def_spec.rb +0 -0
  475. data/spec/{language → rubyspec/language}/defined_spec.rb +2 -2
  476. data/spec/{language → rubyspec/language}/ensure_spec.rb +0 -0
  477. data/spec/{language → rubyspec/language}/execution_spec.rb +0 -0
  478. data/spec/{language → rubyspec/language}/fixtures/array.rb +0 -0
  479. data/spec/{language → rubyspec/language}/fixtures/block.rb +0 -0
  480. data/spec/{language → rubyspec/language}/fixtures/break.rb +0 -0
  481. data/spec/{language → rubyspec/language}/fixtures/ensure.rb +0 -0
  482. data/spec/{language → rubyspec/language}/fixtures/literal_lambda.rb +0 -0
  483. data/spec/{language → rubyspec/language}/fixtures/metaclass.rb +0 -0
  484. data/spec/{language → rubyspec/language}/fixtures/module.rb +0 -0
  485. data/spec/{language → rubyspec/language}/fixtures/next.rb +0 -0
  486. data/spec/{language → rubyspec/language}/fixtures/return.rb +0 -0
  487. data/spec/{language → rubyspec/language}/fixtures/send.rb +0 -0
  488. data/spec/{language → rubyspec/language}/fixtures/send_1.9.rb +0 -0
  489. data/spec/{language → rubyspec/language}/fixtures/super.rb +0 -0
  490. data/spec/{language → rubyspec/language}/fixtures/variables.rb +0 -0
  491. data/spec/{language → rubyspec/language}/fixtures/yield.rb +0 -0
  492. data/spec/{language → rubyspec/language}/for_spec.rb +0 -0
  493. data/spec/{language → rubyspec/language}/hash_spec.rb +0 -0
  494. data/spec/{language → rubyspec/language}/if_spec.rb +0 -0
  495. data/spec/{language → rubyspec/language}/literal_lambda_spec.rb +0 -0
  496. data/spec/{language → rubyspec/language}/loop_spec.rb +0 -0
  497. data/spec/{language → rubyspec/language}/metaclass_spec.rb +0 -0
  498. data/spec/{language → rubyspec/language}/module_spec.rb +0 -0
  499. data/spec/{language → rubyspec/language}/next_spec.rb +0 -0
  500. data/spec/{language → rubyspec/language}/not_spec.rb +0 -0
  501. data/spec/{language → rubyspec/language}/numbers_spec.rb +0 -0
  502. data/spec/{language → rubyspec/language}/or_spec.rb +0 -0
  503. data/spec/{language → rubyspec/language}/order_spec.rb +0 -0
  504. data/spec/{language → rubyspec/language}/precedence_spec.rb +0 -0
  505. data/spec/{language → rubyspec/language}/predefined_spec.rb +0 -0
  506. data/spec/{language → rubyspec/language}/proc_spec.rb +0 -0
  507. data/spec/{language → rubyspec/language}/redo_spec.rb +0 -0
  508. data/spec/{language → rubyspec/language}/regexp_spec.rb +0 -0
  509. data/spec/{language → rubyspec/language}/rescue_spec.rb +0 -0
  510. data/spec/{language → rubyspec/language}/retry_spec.rb +0 -0
  511. data/spec/{language → rubyspec/language}/return_spec.rb +0 -0
  512. data/spec/{language → rubyspec/language}/send_spec.rb +0 -1
  513. data/spec/{language → rubyspec/language}/singleton_class_spec.rb +0 -0
  514. data/spec/{language → rubyspec/language}/string_spec.rb +0 -0
  515. data/spec/{language → rubyspec/language}/super_spec.rb +0 -0
  516. data/spec/{language → rubyspec/language}/symbol_spec.rb +0 -0
  517. data/spec/{language → rubyspec/language}/undef_spec.rb +0 -0
  518. data/spec/{language → rubyspec/language}/unless_spec.rb +0 -0
  519. data/spec/{language → rubyspec/language}/until_spec.rb +0 -0
  520. data/spec/{language → rubyspec/language}/variables_spec.rb +3 -3
  521. data/spec/{language → rubyspec/language}/versions/array_1.9.rb +0 -0
  522. data/spec/{language → rubyspec/language}/versions/case_1.9.rb +0 -0
  523. data/spec/{language → rubyspec/language}/versions/hash_1.9.rb +0 -0
  524. data/spec/{language → rubyspec/language}/versions/literal_lambda_1.9.rb +0 -0
  525. data/spec/{language → rubyspec/language}/versions/not_1.9.rb +0 -0
  526. data/spec/{language → rubyspec/language}/versions/send_1.9.rb +0 -0
  527. data/spec/{language → rubyspec/language}/versions/symbol_1.9.rb +0 -0
  528. data/spec/{language → rubyspec/language}/versions/variables_1.9.rb +0 -0
  529. data/spec/{language → rubyspec/language}/while_spec.rb +0 -0
  530. data/spec/{language → rubyspec/language}/yield_spec.rb +0 -0
  531. data/spec/{library → rubyspec/library}/date/new_spec.rb +0 -0
  532. data/spec/{library → rubyspec/library}/date/to_s_spec.rb +0 -0
  533. data/spec/{library → rubyspec/library}/date/today_spec.rb +0 -0
  534. data/spec/rubyspec/library/observer/add_observer_spec.rb +31 -0
  535. data/spec/rubyspec/library/observer/count_observers_spec.rb +33 -0
  536. data/spec/rubyspec/library/observer/delete_observer_spec.rb +19 -0
  537. data/spec/rubyspec/library/observer/delete_observers_spec.rb +19 -0
  538. data/spec/rubyspec/library/observer/fixtures/classes.rb +25 -0
  539. data/spec/rubyspec/library/observer/notify_observers_spec.rb +31 -0
  540. data/spec/rubyspec/spec_helper.rb +59 -0
  541. data/spec/simple_erb_template.opalerb +1 -0
  542. data/spec/spec_helper.rb +0 -59
  543. data/spec/templates/foo/bar.opalerb +1 -0
  544. data/spec/templates/prefixed.opalerb +1 -0
  545. metadata +1028 -961
  546. data/opal/opal/browser_loader.js +0 -57
  547. data/spec/core_ext/native/fixtures/classes.rb +0 -5
  548. data/spec/core_ext/native/initialize_spec.rb +0 -8
  549. data/spec/core_ext/native/method_missing_spec.rb +0 -8
  550. data/spec/date.rb +0 -0
  551. data/spec/fixtures/constants.rb +0 -0
  552. data/spec/ospec/filter.rb +0 -32
  553. data/spec/ospec/phantom.rb +0 -97
@@ -0,0 +1,93 @@
1
+ require 'erb'
2
+
3
+ module Opal
4
+ class Server
5
+
6
+ attr_accessor :debug, :index_path, :main, :public_dir, :sprockets
7
+
8
+ def initialize(debug = true)
9
+ @sprockets = ::Sprockets::Environment.new
10
+ Opal.paths.each { |p| @sprockets.append_path p }
11
+
12
+ @public_dir = '.'
13
+ @debug = debug
14
+
15
+ yield self if block_given?
16
+ create_app
17
+ end
18
+
19
+ def append_path(path)
20
+ @sprockets.append_path path
21
+ end
22
+
23
+ def create_app
24
+ server, sprockets = self, @sprockets
25
+
26
+ @app = Rack::Builder.app do
27
+ map('/assets') { run sprockets }
28
+ use Index, server
29
+ run Rack::Directory.new(server.public_dir)
30
+ end
31
+ end
32
+
33
+ def call(env)
34
+ @app.call env
35
+ end
36
+
37
+ class Index
38
+
39
+ def initialize(app, server)
40
+ @app = app
41
+ @server = server
42
+ @index_path = server.index_path
43
+ end
44
+
45
+ def call(env)
46
+ if %w[/ /index.html].include? env['PATH_INFO']
47
+ [200, { 'Content-Type' => 'text/html' }, [html]]
48
+ else
49
+ @app.call env
50
+ end
51
+ end
52
+
53
+ def html
54
+ source = if @index_path
55
+ raise "index does not exist: #{@index_path}" unless File.exist?(@index_path)
56
+ File.read @index_path
57
+ else
58
+ SOURCE
59
+ end
60
+
61
+ ::ERB.new(source).result binding
62
+ end
63
+
64
+ def javascript_include_tag(source)
65
+ if @server.debug
66
+ assets = @server.sprockets[source].to_a
67
+
68
+ raise "Cannot find asset: #{source}" if assets.empty?
69
+
70
+ scripts = assets.map do |a|
71
+ %Q{<script src="/assets/#{ a.logical_path }?body=1"></script>}
72
+ end
73
+
74
+ scripts.join "\n"
75
+ else
76
+ "<script src=\"/assets/#{source}.js\"></script>"
77
+ end
78
+ end
79
+
80
+ SOURCE = <<-HTML
81
+ <!DOCTYPE html>
82
+ <html>
83
+ <head>
84
+ <title>Opal Server</title>
85
+ </head>
86
+ <body>
87
+ <%= javascript_include_tag @server.main %>
88
+ </body>
89
+ </html>
90
+ HTML
91
+ end
92
+ end
93
+ end
data/lib/opal/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Opal
2
- VERSION = '0.3.42'
2
+ VERSION = '0.3.43'
3
3
  end
data/opal.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.add_dependency 'rake'
18
18
  s.add_dependency 'racc'
19
- s.add_dependency 'opal-sprockets'
19
+ s.add_dependency 'sprockets'
20
20
 
21
21
  s.add_development_dependency 'mspec', '1.5.18'
22
22
  end
File without changes
data/opal/erb.rb ADDED
@@ -0,0 +1,19 @@
1
+ # Provides Template module for registering erb templates
2
+ require 'opal-template'
3
+
4
+ class ERB
5
+ def initialize(name, &body)
6
+ @body = body
7
+ @name = name
8
+ Template[name] = self
9
+ end
10
+
11
+ def inspect
12
+ "#<ERB: name=#{@name.inspect}>"
13
+ end
14
+
15
+ def render(ctx = self)
16
+ ctx.instance_eval(&@body)
17
+ end
18
+ end
19
+
File without changes
File without changes
data/opal/observer.rb ADDED
@@ -0,0 +1,202 @@
1
+ #
2
+ # Implementation of the _Observer_ object-oriented design pattern. The
3
+ # following documentation is copied, with modifications, from "Programming
4
+ # Ruby", by Hunt and Thomas; http://www.ruby-doc.org/docs/ProgrammingRuby/html/lib_patterns.html.
5
+ #
6
+ # See Observable for more info.
7
+
8
+ # The Observer pattern (also known as publish/subscribe) provides a simple
9
+ # mechanism for one object to inform a set of interested third-party objects
10
+ # when its state changes.
11
+ #
12
+ # == Mechanism
13
+ #
14
+ # The notifying class mixes in the +Observable+
15
+ # module, which provides the methods for managing the associated observer
16
+ # objects.
17
+ #
18
+ # The observers must implement a method called +update+ to receive
19
+ # notifications.
20
+ #
21
+ # The observable object must:
22
+ # * assert that it has +#changed+
23
+ # * call +#notify_observers+
24
+ #
25
+ # === Example
26
+ #
27
+ # The following example demonstrates this nicely. A +Ticker+, when run,
28
+ # continually receives the stock +Price+ for its <tt>@symbol</tt>. A +Warner+
29
+ # is a general observer of the price, and two warners are demonstrated, a
30
+ # +WarnLow+ and a +WarnHigh+, which print a warning if the price is below or
31
+ # above their set limits, respectively.
32
+ #
33
+ # The +update+ callback allows the warners to run without being explicitly
34
+ # called. The system is set up with the +Ticker+ and several observers, and the
35
+ # observers do their duty without the top-level code having to interfere.
36
+ #
37
+ # Note that the contract between publisher and subscriber (observable and
38
+ # observer) is not declared or enforced. The +Ticker+ publishes a time and a
39
+ # price, and the warners receive that. But if you don't ensure that your
40
+ # contracts are correct, nothing else can warn you.
41
+ #
42
+ # require "observer"
43
+ #
44
+ # class Ticker ### Periodically fetch a stock price.
45
+ # include Observable
46
+ #
47
+ # def initialize(symbol)
48
+ # @symbol = symbol
49
+ # end
50
+ #
51
+ # def run
52
+ # lastPrice = nil
53
+ # loop do
54
+ # price = Price.fetch(@symbol)
55
+ # print "Current price: #{price}\n"
56
+ # if price != lastPrice
57
+ # changed # notify observers
58
+ # lastPrice = price
59
+ # notify_observers(Time.now, price)
60
+ # end
61
+ # sleep 1
62
+ # end
63
+ # end
64
+ # end
65
+ #
66
+ # class Price ### A mock class to fetch a stock price (60 - 140).
67
+ # def Price.fetch(symbol)
68
+ # 60 + rand(80)
69
+ # end
70
+ # end
71
+ #
72
+ # class Warner ### An abstract observer of Ticker objects.
73
+ # def initialize(ticker, limit)
74
+ # @limit = limit
75
+ # ticker.add_observer(self)
76
+ # end
77
+ # end
78
+ #
79
+ # class WarnLow < Warner
80
+ # def update(time, price) # callback for observer
81
+ # if price < @limit
82
+ # print "--- #{time.to_s}: Price below #@limit: #{price}\n"
83
+ # end
84
+ # end
85
+ # end
86
+ #
87
+ # class WarnHigh < Warner
88
+ # def update(time, price) # callback for observer
89
+ # if price > @limit
90
+ # print "+++ #{time.to_s}: Price above #@limit: #{price}\n"
91
+ # end
92
+ # end
93
+ # end
94
+ #
95
+ # ticker = Ticker.new("MSFT")
96
+ # WarnLow.new(ticker, 80)
97
+ # WarnHigh.new(ticker, 120)
98
+ # ticker.run
99
+ #
100
+ # Produces:
101
+ #
102
+ # Current price: 83
103
+ # Current price: 75
104
+ # --- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 75
105
+ # Current price: 90
106
+ # Current price: 134
107
+ # +++ Sun Jun 09 00:10:25 CDT 2002: Price above 120: 134
108
+ # Current price: 134
109
+ # Current price: 112
110
+ # Current price: 79
111
+ # --- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 79
112
+ module Observable
113
+
114
+ #
115
+ # Add +observer+ as an observer on this object. so that it will receive
116
+ # notifications.
117
+ #
118
+ # +observer+:: the object that will be notified of changes.
119
+ # +func+:: Symbol naming the method that will be called when this Observable
120
+ # has changes.
121
+ #
122
+ # This method must return true for +observer.respond_to?+ and will
123
+ # receive <tt>*arg</tt> when #notify_observers is called, where
124
+ # <tt>*arg</tt> is the value passed to #notify_observers by this
125
+ # Observable
126
+ def add_observer(observer, func=:update)
127
+ @observer_peers = {} unless defined? @observer_peers
128
+ unless observer.respond_to? func
129
+ raise NoMethodError, "observer does not respond to `#{func.to_s}'"
130
+ end
131
+ @observer_peers[observer] = func
132
+ end
133
+
134
+ #
135
+ # Remove +observer+ as an observer on this object so that it will no longer
136
+ # receive notifications.
137
+ #
138
+ # +observer+:: An observer of this Observable
139
+ def delete_observer(observer)
140
+ @observer_peers.delete observer if defined? @observer_peers
141
+ end
142
+
143
+ #
144
+ # Remove all observers associated with this object.
145
+ #
146
+ def delete_observers
147
+ @observer_peers.clear if defined? @observer_peers
148
+ end
149
+
150
+ #
151
+ # Return the number of observers associated with this object.
152
+ #
153
+ def count_observers
154
+ if defined? @observer_peers
155
+ @observer_peers.size
156
+ else
157
+ 0
158
+ end
159
+ end
160
+
161
+ #
162
+ # Set the changed state of this object. Notifications will be sent only if
163
+ # the changed +state+ is +true+.
164
+ #
165
+ # +state+:: Boolean indicating the changed state of this Observable.
166
+ #
167
+ def changed(state=true)
168
+ @observer_state = state
169
+ end
170
+
171
+ #
172
+ # Returns true if this object's state has been changed since the last
173
+ # #notify_observers call.
174
+ #
175
+ def changed?
176
+ if defined? @observer_state and @observer_state
177
+ true
178
+ else
179
+ false
180
+ end
181
+ end
182
+
183
+ #
184
+ # Notify observers of a change in state *if* this object's changed state is
185
+ # +true+.
186
+ #
187
+ # This will invoke the method named in #add_observer, passing <tt>*arg</tt>.
188
+ # The changed state is then set to +false+.
189
+ #
190
+ # <tt>*arg</tt>:: Any arguments to pass to the observers.
191
+ def notify_observers(*arg)
192
+ if defined? @observer_state and @observer_state
193
+ if defined? @observer_peers
194
+ @observer_peers.each do |k, v|
195
+ k.send v, *arg
196
+ end
197
+ end
198
+ @observer_state = false
199
+ end
200
+ end
201
+
202
+ end
@@ -0,0 +1,27 @@
1
+ module Browser
2
+ module LocalStorage
3
+ def self.[](key)
4
+ %x{
5
+ var val = localStorage.getItem(key);
6
+ return val === null ? nil : val;
7
+ }
8
+ end
9
+
10
+ def self.[]=(key, value)
11
+ `localStorage.setItem(key, value)`
12
+ end
13
+
14
+ def self.clear
15
+ `localStorage.clear()`
16
+ self
17
+ end
18
+
19
+ def self.delete(key)
20
+ %x{
21
+ var val = localStorage.getItem(key);
22
+ localStorage.removeItem(key);
23
+ return val === null ? nil : val;
24
+ }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ class BrowserScriptLoader
2
+ def initialize
3
+ @doc = Native.global.document
4
+ @win = Native.global
5
+ end
6
+
7
+ def run
8
+ handler = proc { find_scripts }
9
+
10
+ if @win.key? :addEventListener
11
+ @win.addEventListener 'DOMContentLoaded', handler, false
12
+ else
13
+ @win.attachEvent 'onload', handler
14
+ end
15
+ end
16
+
17
+ def find_scripts
18
+ ruby_scripts.each do |script|
19
+ if src = script.src and src != ""
20
+ puts "Cannot currently load script src: #{src}"
21
+ else
22
+ run_ruby script.innerHTML
23
+ end
24
+ end
25
+ end
26
+
27
+ def ruby_scripts
28
+ all = @doc.getElementsByTagName 'script'
29
+ all.to_a.select { |s| s.type == "text/ruby" }
30
+ end
31
+
32
+ def run_ruby str
33
+ Native.global.Opal.eval str
34
+ end
35
+ end
36
+
37
+ if Native.global.key? :window and Native.global.key? :document
38
+ BrowserScriptLoader.new.run
39
+ end
40
+
@@ -0,0 +1,26 @@
1
+ # A simple event registering/triggering module to mix into classes.
2
+ # Events are stored in the `@events` ivar.
3
+ module Eventable
4
+
5
+ # Register a handler for the given event name.
6
+ #
7
+ # obj.on(:foo) { puts "foo was called" }
8
+ #
9
+ # @param [String, Symbol] name event name
10
+ def on(name, &handler)
11
+ @events ||= Hash.new { |hash, key| hash[key] = [] }
12
+ @events[name] << handler
13
+ end
14
+
15
+ # Trigger the given event name and passes all args to each handler
16
+ # for this event.
17
+ #
18
+ # obj.trigger(:foo)
19
+ # obj.trigger(:foo, 1, 2, 3)
20
+ #
21
+ # @param [String, Symbol] name event name to trigger
22
+ def trigger(name, *args)
23
+ @events ||= Hash.new { |hash, key| hash[key] = [] }
24
+ @events[name].each { |handler| handler.call(*args) }
25
+ end
26
+ end
@@ -1,8 +1,13 @@
1
- <% require_asset 'opal/browser_loader' %>
2
- <% require_asset 'opal/racc' %>
3
- <% require_asset 'opal/strscan' %>
1
+ <% require_asset 'opal-browser/script_loader' %>
2
+ <% require_asset 'racc' %>
3
+ <% require_asset 'strscan' %>
4
4
 
5
5
  // We need (some) of the libs from our real ruby parser (not in sprockets load path)
6
6
  <% %w(opal/grammar opal/lexer opal/parser opal/target_scope opal/core_ext opal/lexer_scope opal/grammar_helpers opal/parser opal).each do |f| %>
7
7
  <%= Opal.parse File.read(File.join Opal.core_dir, '..', 'lib', "#{f}.rb") %>
8
8
  <% end %>
9
+
10
+ Opal.eval = function(str) {
11
+ var js = Opal.Opal.Parser.$new().$parse(str);
12
+ return eval(js);
13
+ };