opal 0.11.0.rc1 → 0.11.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 (493) hide show
  1. checksums.yaml +4 -4
  2. data/.jshintrc +1 -1
  3. data/.travis.yml +14 -2
  4. data/CHANGELOG.md +30 -5
  5. data/HACKING.md +2 -2
  6. data/README.md +4 -5
  7. data/appveyor.yml +3 -4
  8. data/bin +1 -0
  9. data/docs/headless_chrome.md +105 -0
  10. data/docs/rspec.md +2 -19
  11. data/{bin → exe}/opal +0 -0
  12. data/{bin → exe}/opal-build +0 -0
  13. data/{bin → exe}/opal-mspec +0 -0
  14. data/{bin → exe}/opal-repl +0 -0
  15. data/lib/opal.rb +1 -0
  16. data/lib/opal/ast/builder.rb +0 -4
  17. data/lib/opal/builder.rb +69 -15
  18. data/lib/opal/builder_processors.rb +8 -7
  19. data/lib/opal/cli.rb +1 -1
  20. data/lib/opal/cli_options.rb +1 -1
  21. data/lib/opal/cli_runners.rb +1 -1
  22. data/lib/opal/cli_runners/applescript.rb +0 -1
  23. data/lib/opal/cli_runners/chrome.js +135 -0
  24. data/lib/opal/cli_runners/chrome.rb +100 -0
  25. data/lib/opal/cli_runners/nashorn.rb +0 -1
  26. data/lib/opal/cli_runners/node_modules/.bin/chrome-remote-interface +1 -0
  27. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/LICENSE +18 -0
  28. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/README.md +843 -0
  29. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/bin/client.js +326 -0
  30. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/chrome-remote-interface.js +11 -0
  31. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/index.js +39 -0
  32. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/api.js +84 -0
  33. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/chrome.js +289 -0
  34. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/defaults.js +4 -0
  35. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/devtools.js +245 -0
  36. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/external-request.js +23 -0
  37. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/protocol.json +13303 -0
  38. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/websocket-wrapper.js +32 -0
  39. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/package.json +128 -0
  40. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/webpack.config.js +55 -0
  41. data/lib/opal/cli_runners/node_modules/commander/Readme.md +195 -0
  42. data/lib/opal/cli_runners/node_modules/commander/index.js +851 -0
  43. data/lib/opal/cli_runners/node_modules/commander/package.json +92 -0
  44. data/lib/opal/cli_runners/node_modules/ultron/LICENSE +22 -0
  45. data/lib/opal/cli_runners/node_modules/ultron/index.js +138 -0
  46. data/lib/opal/cli_runners/node_modules/ultron/package.json +112 -0
  47. data/lib/opal/cli_runners/node_modules/ws/LICENSE +21 -0
  48. data/lib/opal/cli_runners/node_modules/ws/README.md +259 -0
  49. data/lib/opal/cli_runners/node_modules/ws/SECURITY.md +33 -0
  50. data/lib/opal/cli_runners/node_modules/ws/index.js +15 -0
  51. data/lib/opal/cli_runners/node_modules/ws/lib/BufferUtil.fallback.js +56 -0
  52. data/lib/opal/cli_runners/node_modules/ws/lib/BufferUtil.js +15 -0
  53. data/lib/opal/cli_runners/node_modules/ws/lib/ErrorCodes.js +28 -0
  54. data/lib/opal/cli_runners/node_modules/ws/lib/EventTarget.js +158 -0
  55. data/lib/opal/cli_runners/node_modules/ws/lib/Extensions.js +69 -0
  56. data/lib/opal/cli_runners/node_modules/ws/lib/PerMessageDeflate.js +339 -0
  57. data/lib/opal/cli_runners/node_modules/ws/lib/Receiver.js +520 -0
  58. data/lib/opal/cli_runners/node_modules/ws/lib/Sender.js +438 -0
  59. data/lib/opal/cli_runners/node_modules/ws/lib/Validation.fallback.js +9 -0
  60. data/lib/opal/cli_runners/node_modules/ws/lib/Validation.js +17 -0
  61. data/lib/opal/cli_runners/node_modules/ws/lib/WebSocket.js +705 -0
  62. data/lib/opal/cli_runners/node_modules/ws/lib/WebSocketServer.js +336 -0
  63. data/lib/opal/cli_runners/node_modules/ws/package.json +122 -0
  64. data/lib/opal/cli_runners/nodejs.rb +0 -1
  65. data/lib/opal/cli_runners/package.json +5 -0
  66. data/lib/opal/cli_runners/server.rb +0 -1
  67. data/lib/opal/compiler.rb +8 -18
  68. data/lib/opal/deprecations.rb +1 -1
  69. data/lib/opal/eof_content.rb +36 -0
  70. data/lib/opal/nodes.rb +0 -1
  71. data/lib/opal/nodes/args/kwarg.rb +8 -6
  72. data/lib/opal/nodes/args/kwoptarg.rb +12 -6
  73. data/lib/opal/nodes/call.rb +3 -2
  74. data/lib/opal/nodes/call_special.rb +10 -1
  75. data/lib/opal/nodes/definitions.rb +5 -3
  76. data/lib/opal/nodes/helpers.rb +4 -8
  77. data/lib/opal/nodes/literal.rb +13 -1
  78. data/lib/opal/nodes/logic.rb +19 -32
  79. data/lib/opal/nodes/node_with_args.rb +1 -1
  80. data/lib/opal/nodes/scope.rb +1 -0
  81. data/lib/opal/nodes/super.rb +0 -4
  82. data/lib/opal/nodes/variables.rb +11 -0
  83. data/lib/opal/parser.rb +24 -19
  84. data/lib/opal/path_reader.rb +17 -4
  85. data/lib/opal/rewriter.rb +5 -1
  86. data/lib/opal/rewriters/base.rb +37 -34
  87. data/lib/opal/rewriters/binary_operator_assignment.rb +0 -3
  88. data/lib/opal/rewriters/for_rewriter.rb +93 -0
  89. data/lib/opal/rewriters/hashes/key_duplicates_rewriter.rb +58 -0
  90. data/lib/opal/rewriters/js_reserved_words.rb +5 -8
  91. data/lib/opal/rewriters/logical_operator_assignment.rb +0 -1
  92. data/lib/opal/simple_server.rb +1 -0
  93. data/lib/opal/util.rb +1 -1
  94. data/lib/opal/version.rb +1 -1
  95. data/opal.gemspec +32 -30
  96. data/opal/corelib/array.rb +53 -30
  97. data/opal/corelib/boolean.rb +11 -3
  98. data/opal/corelib/comparable.rb +16 -0
  99. data/opal/corelib/constants.rb +3 -3
  100. data/opal/corelib/enumerable.rb +48 -1
  101. data/opal/corelib/file.rb +54 -11
  102. data/opal/corelib/hash.rb +98 -0
  103. data/opal/corelib/io.rb +2 -2
  104. data/opal/corelib/kernel.rb +28 -11
  105. data/opal/corelib/marshal/read_buffer.rb +288 -150
  106. data/opal/corelib/marshal/write_buffer.rb +27 -2
  107. data/opal/corelib/nil.rb +11 -3
  108. data/opal/corelib/number.rb +90 -20
  109. data/opal/corelib/numeric.rb +3 -3
  110. data/opal/corelib/random.rb +1 -1
  111. data/opal/corelib/range.rb +22 -22
  112. data/opal/corelib/regexp.rb +45 -4
  113. data/opal/corelib/runtime.js +25 -9
  114. data/opal/corelib/string.rb +1 -1
  115. data/opal/corelib/string/encoding.rb +21 -29
  116. data/opal/corelib/string/inheritance.rb +1 -1
  117. data/opal/corelib/struct.rb +0 -5
  118. data/opal/corelib/time.rb +1 -1
  119. data/stdlib/buffer/array.rb +4 -2
  120. data/stdlib/date.rb +46 -12
  121. data/stdlib/headless_chrome.rb +11 -0
  122. data/stdlib/nodejs/file.rb +36 -11
  123. data/stdlib/nodejs/io.rb +8 -0
  124. data/stdlib/nodejs/stacktrace.rb +116 -100
  125. data/stdlib/opal-builder.rb +1 -0
  126. data/stdlib/opal-platform.rb +6 -6
  127. data/stdlib/opal/platform.rb +2 -2
  128. data/stdlib/rbconfig.rb +1 -1
  129. data/stdlib/securerandom.rb +1 -1
  130. data/tasks/testing.rake +58 -26
  131. data/tasks/testing/opal_rspec_smoketest.Gemfile +5 -12
  132. metadata +64 -733
  133. data/lib/opal/cli_runners/phantom.js +0 -69
  134. data/lib/opal/cli_runners/phantomjs.rb +0 -29
  135. data/lib/opal/hike_path_finder.rb +0 -19
  136. data/lib/opal/nodes/for.rb +0 -75
  137. data/spec/README.md +0 -10
  138. data/spec/filters/bugs/array.rb +0 -16
  139. data/spec/filters/bugs/basicobject.rb +0 -13
  140. data/spec/filters/bugs/bigdecimal.rb +0 -146
  141. data/spec/filters/bugs/class.rb +0 -11
  142. data/spec/filters/bugs/comparable.rb +0 -5
  143. data/spec/filters/bugs/complex.rb +0 -3
  144. data/spec/filters/bugs/date.rb +0 -94
  145. data/spec/filters/bugs/enumerable.rb +0 -43
  146. data/spec/filters/bugs/enumerator.rb +0 -40
  147. data/spec/filters/bugs/exception.rb +0 -72
  148. data/spec/filters/bugs/file.rb +0 -8
  149. data/spec/filters/bugs/float.rb +0 -39
  150. data/spec/filters/bugs/hash.rb +0 -15
  151. data/spec/filters/bugs/inheritance.rb +0 -5
  152. data/spec/filters/bugs/integer.rb +0 -30
  153. data/spec/filters/bugs/io.rb +0 -8
  154. data/spec/filters/bugs/kernel.rb +0 -168
  155. data/spec/filters/bugs/language.rb +0 -190
  156. data/spec/filters/bugs/marshal.rb +0 -41
  157. data/spec/filters/bugs/method.rb +0 -60
  158. data/spec/filters/bugs/module.rb +0 -158
  159. data/spec/filters/bugs/numeric.rb +0 -8
  160. data/spec/filters/bugs/pathname.rb +0 -7
  161. data/spec/filters/bugs/proc.rb +0 -37
  162. data/spec/filters/bugs/random.rb +0 -7
  163. data/spec/filters/bugs/range.rb +0 -36
  164. data/spec/filters/bugs/rational.rb +0 -4
  165. data/spec/filters/bugs/regexp.rb +0 -158
  166. data/spec/filters/bugs/set.rb +0 -41
  167. data/spec/filters/bugs/singleton.rb +0 -6
  168. data/spec/filters/bugs/string.rb +0 -98
  169. data/spec/filters/bugs/stringscanner.rb +0 -71
  170. data/spec/filters/bugs/struct.rb +0 -4
  171. data/spec/filters/bugs/time.rb +0 -35
  172. data/spec/filters/bugs/unboundmethod.rb +0 -17
  173. data/spec/filters/unsupported/array.rb +0 -167
  174. data/spec/filters/unsupported/basicobject.rb +0 -14
  175. data/spec/filters/unsupported/bignum.rb +0 -55
  176. data/spec/filters/unsupported/class.rb +0 -4
  177. data/spec/filters/unsupported/delegator.rb +0 -5
  178. data/spec/filters/unsupported/enumerable.rb +0 -11
  179. data/spec/filters/unsupported/enumerator.rb +0 -13
  180. data/spec/filters/unsupported/file.rb +0 -4
  181. data/spec/filters/unsupported/fixnum.rb +0 -14
  182. data/spec/filters/unsupported/float.rb +0 -46
  183. data/spec/filters/unsupported/freeze.rb +0 -75
  184. data/spec/filters/unsupported/hash.rb +0 -43
  185. data/spec/filters/unsupported/integer.rb +0 -3
  186. data/spec/filters/unsupported/kernel.rb +0 -32
  187. data/spec/filters/unsupported/language.rb +0 -22
  188. data/spec/filters/unsupported/marshal.rb +0 -46
  189. data/spec/filters/unsupported/matchdata.rb +0 -33
  190. data/spec/filters/unsupported/math.rb +0 -3
  191. data/spec/filters/unsupported/pathname.rb +0 -3
  192. data/spec/filters/unsupported/privacy.rb +0 -279
  193. data/spec/filters/unsupported/proc.rb +0 -3
  194. data/spec/filters/unsupported/random.rb +0 -4
  195. data/spec/filters/unsupported/range.rb +0 -7
  196. data/spec/filters/unsupported/regexp.rb +0 -69
  197. data/spec/filters/unsupported/set.rb +0 -4
  198. data/spec/filters/unsupported/singleton.rb +0 -6
  199. data/spec/filters/unsupported/string.rb +0 -546
  200. data/spec/filters/unsupported/struct.rb +0 -6
  201. data/spec/filters/unsupported/symbol.rb +0 -20
  202. data/spec/filters/unsupported/taint.rb +0 -30
  203. data/spec/filters/unsupported/thread.rb +0 -7
  204. data/spec/filters/unsupported/time.rb +0 -202
  205. data/spec/lib/builder_processors_spec.rb +0 -27
  206. data/spec/lib/builder_spec.rb +0 -89
  207. data/spec/lib/cli_runners/phantomjs_spec.rb +0 -39
  208. data/spec/lib/cli_spec.rb +0 -240
  209. data/spec/lib/compiler/call_spec.rb +0 -732
  210. data/spec/lib/compiler_spec.rb +0 -294
  211. data/spec/lib/config_spec.rb +0 -110
  212. data/spec/lib/dependency_resolver_spec.rb +0 -40
  213. data/spec/lib/deprecations_spec.rb +0 -16
  214. data/spec/lib/fixtures/complex_sprockets.js.rb.erb +0 -4
  215. data/spec/lib/fixtures/file_with_directives.js +0 -2
  216. data/spec/lib/fixtures/jst_file.js.jst +0 -1
  217. data/spec/lib/fixtures/no_requires.rb +0 -1
  218. data/spec/lib/fixtures/opal_file.rb +0 -2
  219. data/spec/lib/fixtures/require_tree_test.rb +0 -3
  220. data/spec/lib/fixtures/required_file.js +0 -1
  221. data/spec/lib/fixtures/required_tree_test/required_file1.rb +0 -1
  222. data/spec/lib/fixtures/required_tree_test/required_file2.rb +0 -1
  223. data/spec/lib/fixtures/requires.rb +0 -7
  224. data/spec/lib/fixtures/source_location_test.rb +0 -7
  225. data/spec/lib/fixtures/source_map.rb +0 -1
  226. data/spec/lib/fixtures/source_map/subfolder/other_file.rb +0 -1
  227. data/spec/lib/fixtures/sprockets_file.js.rb +0 -3
  228. data/spec/lib/fixtures/sprockets_require_tree_test.rb +0 -3
  229. data/spec/lib/hike_path_finder_spec.rb +0 -23
  230. data/spec/lib/path_reader_spec.rb +0 -36
  231. data/spec/lib/paths_spec.rb +0 -18
  232. data/spec/lib/rewriters/binary_operator_assignment_spec.rb +0 -151
  233. data/spec/lib/rewriters/block_to_iter_spec.rb +0 -28
  234. data/spec/lib/rewriters/dot_js_syntax_spec.rb +0 -108
  235. data/spec/lib/rewriters/explicit_writer_return_spec.rb +0 -186
  236. data/spec/lib/rewriters/js_reserved_words_spec.rb +0 -116
  237. data/spec/lib/rewriters/logical_operator_assignment_spec.rb +0 -202
  238. data/spec/lib/rewriters/opal_engine_check_spec.rb +0 -82
  239. data/spec/lib/rewriters/rubyspec/filters_rewriter_spec.rb +0 -53
  240. data/spec/lib/shared/path_finder_shared.rb +0 -19
  241. data/spec/lib/shared/path_reader_shared.rb +0 -31
  242. data/spec/lib/simple_server_spec.rb +0 -54
  243. data/spec/lib/spec_helper.rb +0 -100
  244. data/spec/mspec-opal/formatters.rb +0 -236
  245. data/spec/mspec-opal/runner.rb +0 -173
  246. data/spec/opal/compiler/irb_spec.rb +0 -44
  247. data/spec/opal/core/arity_spec.rb +0 -142
  248. data/spec/opal/core/array/intersection_spec.rb +0 -38
  249. data/spec/opal/core/array/minus_spec.rb +0 -38
  250. data/spec/opal/core/array/select_spec.rb +0 -14
  251. data/spec/opal/core/array/set_range_to_array_spec.rb +0 -7
  252. data/spec/opal/core/array/union_spec.rb +0 -38
  253. data/spec/opal/core/array/uniq_spec.rb +0 -49
  254. data/spec/opal/core/date_spec.rb +0 -191
  255. data/spec/opal/core/enumerable/all_break_spec.rb +0 -5
  256. data/spec/opal/core/enumerable/any_break_spec.rb +0 -5
  257. data/spec/opal/core/enumerable/collect_break_spec.rb +0 -13
  258. data/spec/opal/core/enumerable/count_break_spec.rb +0 -5
  259. data/spec/opal/core/enumerable/detect_break_spec.rb +0 -5
  260. data/spec/opal/core/enumerable/drop_while_break_spec.rb +0 -5
  261. data/spec/opal/core/enumerable/each_slice_break.rb +0 -6
  262. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +0 -5
  263. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +0 -5
  264. data/spec/opal/core/enumerable/find_all_break_spec.rb +0 -5
  265. data/spec/opal/core/enumerable/find_index_break_spec.rb +0 -5
  266. data/spec/opal/core/enumerable/grep_break_spec.rb +0 -5
  267. data/spec/opal/core/enumerable/max_break_spec.rb +0 -5
  268. data/spec/opal/core/enumerable/max_by_break_spec.rb +0 -5
  269. data/spec/opal/core/enumerable/min_break_spec.rb +0 -5
  270. data/spec/opal/core/enumerable/min_by_break_spec.rb +0 -5
  271. data/spec/opal/core/enumerable/none_break_spec.rb +0 -5
  272. data/spec/opal/core/enumerable/one_break_spec.rb +0 -5
  273. data/spec/opal/core/enumerable/reduce_break_spec.rb +0 -5
  274. data/spec/opal/core/enumerable/take_while_break_spec.rb +0 -5
  275. data/spec/opal/core/enumerator/with_index_spec.rb +0 -6
  276. data/spec/opal/core/exception_spec.rb +0 -30
  277. data/spec/opal/core/fixtures/class.rb +0 -124
  278. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  279. data/spec/opal/core/fixtures/constants.rb +0 -33
  280. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +0 -1
  281. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +0 -1
  282. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +0 -1
  283. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +0 -1
  284. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +0 -1
  285. data/spec/opal/core/fixtures/require_tree_files/nested/nested 1.rb +0 -1
  286. data/spec/opal/core/fixtures/require_tree_files/nested/nested 2.rb +0 -1
  287. data/spec/opal/core/fixtures/require_tree_files/other/other 1.rb +0 -1
  288. data/spec/opal/core/fixtures/require_tree_with_dot/file 1.rb +0 -1
  289. data/spec/opal/core/fixtures/require_tree_with_dot/file 2.rb +0 -1
  290. data/spec/opal/core/fixtures/require_tree_with_dot/file 3.rb +0 -1
  291. data/spec/opal/core/fixtures/require_tree_with_dot/index.rb +0 -3
  292. data/spec/opal/core/hash/has_value_spec.rb +0 -13
  293. data/spec/opal/core/hash/internals_spec.rb +0 -332
  294. data/spec/opal/core/helpers_spec.rb +0 -14
  295. data/spec/opal/core/kernel/Array_spec.rb +0 -10
  296. data/spec/opal/core/kernel/at_exit_spec.rb +0 -70
  297. data/spec/opal/core/kernel/block_given_spec.rb +0 -30
  298. data/spec/opal/core/kernel/class_spec.rb +0 -6
  299. data/spec/opal/core/kernel/define_singleton_method_spec.rb +0 -21
  300. data/spec/opal/core/kernel/equal_value_spec.rb +0 -12
  301. data/spec/opal/core/kernel/extend_spec.rb +0 -21
  302. data/spec/opal/core/kernel/format_spec.rb +0 -122
  303. data/spec/opal/core/kernel/freeze_spec.rb +0 -15
  304. data/spec/opal/core/kernel/instance_eval_spec.rb +0 -28
  305. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +0 -15
  306. data/spec/opal/core/kernel/instance_variable_get_spec.rb +0 -14
  307. data/spec/opal/core/kernel/instance_variable_set_spec.rb +0 -10
  308. data/spec/opal/core/kernel/instance_variables_spec.rb +0 -110
  309. data/spec/opal/core/kernel/loop_spec.rb +0 -23
  310. data/spec/opal/core/kernel/match_spec.rb +0 -5
  311. data/spec/opal/core/kernel/method_spec.rb +0 -31
  312. data/spec/opal/core/kernel/methods_spec.rb +0 -25
  313. data/spec/opal/core/kernel/nil_spec.rb +0 -7
  314. data/spec/opal/core/kernel/p_spec.rb +0 -15
  315. data/spec/opal/core/kernel/printf_spec.rb +0 -11
  316. data/spec/opal/core/kernel/proc_spec.rb +0 -13
  317. data/spec/opal/core/kernel/raise_spec.rb +0 -13
  318. data/spec/opal/core/kernel/rand_spec.rb +0 -19
  319. data/spec/opal/core/kernel/require_tree_spec.rb +0 -18
  320. data/spec/opal/core/kernel/respond_to_spec.rb +0 -44
  321. data/spec/opal/core/kernel/send_spec.rb +0 -56
  322. data/spec/opal/core/kernel/sprintf_spec.rb +0 -5
  323. data/spec/opal/core/language/arguments/mlhs_arg_spec.rb +0 -19
  324. data/spec/opal/core/language/class_spec.rb +0 -55
  325. data/spec/opal/core/language/constant_lookup_spec.rb +0 -38
  326. data/spec/opal/core/language/equal_spec.rb +0 -8
  327. data/spec/opal/core/language/fixtures/array.rb +0 -11
  328. data/spec/opal/core/language/fixtures/block.rb +0 -57
  329. data/spec/opal/core/language/fixtures/break.rb +0 -240
  330. data/spec/opal/core/language/fixtures/ensure.rb +0 -72
  331. data/spec/opal/core/language/fixtures/literal_lambda.rb +0 -7
  332. data/spec/opal/core/language/fixtures/metaclass.rb +0 -33
  333. data/spec/opal/core/language/fixtures/module.rb +0 -24
  334. data/spec/opal/core/language/fixtures/next.rb +0 -128
  335. data/spec/opal/core/language/fixtures/return.rb +0 -118
  336. data/spec/opal/core/language/fixtures/send.rb +0 -111
  337. data/spec/opal/core/language/fixtures/send_1.9.rb +0 -22
  338. data/spec/opal/core/language/fixtures/super.rb +0 -308
  339. data/spec/opal/core/language/fixtures/variables.rb +0 -58
  340. data/spec/opal/core/language/fixtures/yield.rb +0 -28
  341. data/spec/opal/core/language/heredoc_spec.rb +0 -42
  342. data/spec/opal/core/language/keyword_arguments_spec.rb +0 -11
  343. data/spec/opal/core/language/predefined_spec.rb +0 -138
  344. data/spec/opal/core/language/regexp_spec.rb +0 -20
  345. data/spec/opal/core/language/rescue_spec.rb +0 -18
  346. data/spec/opal/core/language/safe_navigator_spec.rb +0 -7
  347. data/spec/opal/core/language/send_spec.rb +0 -222
  348. data/spec/opal/core/language/string_spec.rb +0 -44
  349. data/spec/opal/core/language/ternary_operator_spec.rb +0 -20
  350. data/spec/opal/core/language/versions/array_1.9.rb +0 -39
  351. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  352. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  353. data/spec/opal/core/language/versions/case_1.9.rb +0 -20
  354. data/spec/opal/core/language/versions/def_2_0_spec.rb +0 -58
  355. data/spec/opal/core/language/versions/hash_1_9_spec.rb +0 -23
  356. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +0 -143
  357. data/spec/opal/core/language/versions/not_1.9.rb +0 -22
  358. data/spec/opal/core/language/versions/send_1.9.rb +0 -241
  359. data/spec/opal/core/language/versions/symbol_1.9.rb +0 -15
  360. data/spec/opal/core/language/versions/variables_1.9.rb +0 -8
  361. data/spec/opal/core/language_spec.rb +0 -77
  362. data/spec/opal/core/marshal/dump_spec.rb +0 -53
  363. data/spec/opal/core/marshal/load_spec.rb +0 -7
  364. data/spec/opal/core/method/to_proc_spec.rb +0 -28
  365. data/spec/opal/core/module/alias_method_spec.rb +0 -28
  366. data/spec/opal/core/module/ancestors_spec.rb +0 -11
  367. data/spec/opal/core/module/append_features_spec.rb +0 -14
  368. data/spec/opal/core/module/attr_accessor_spec.rb +0 -26
  369. data/spec/opal/core/module/const_defined_spec.rb +0 -84
  370. data/spec/opal/core/module/const_get_spec.rb +0 -85
  371. data/spec/opal/core/module/const_missing_spec.rb +0 -17
  372. data/spec/opal/core/module/const_set_spec.rb +0 -64
  373. data/spec/opal/core/module/constants_spec.rb +0 -49
  374. data/spec/opal/core/module/fixtures/classes.rb +0 -444
  375. data/spec/opal/core/module/method_defined_spec.rb +0 -48
  376. data/spec/opal/core/module/method_lookup_spec.rb +0 -13
  377. data/spec/opal/core/module/module_function_spec.rb +0 -25
  378. data/spec/opal/core/module/name_spec.rb +0 -41
  379. data/spec/opal/core/module/public_method_defined_spec.rb +0 -18
  380. data/spec/opal/core/module/remove_const_spec.rb +0 -22
  381. data/spec/opal/core/module/undef_method_spec.rb +0 -66
  382. data/spec/opal/core/numeric/bit_and_spec.rb +0 -7
  383. data/spec/opal/core/numeric/bit_or_spec.rb +0 -8
  384. data/spec/opal/core/numeric/bit_xor_spec.rb +0 -6
  385. data/spec/opal/core/numeric/ceil_spec.rb +0 -8
  386. data/spec/opal/core/numeric/chr_spec.rb +0 -8
  387. data/spec/opal/core/numeric/comparison_spec.rb +0 -24
  388. data/spec/opal/core/numeric/complement_spec.rb +0 -8
  389. data/spec/opal/core/numeric/divide_spec.rb +0 -10
  390. data/spec/opal/core/numeric/eql_spec.rb +0 -9
  391. data/spec/opal/core/numeric/exponent_spec.rb +0 -33
  392. data/spec/opal/core/numeric/floor_spec.rb +0 -8
  393. data/spec/opal/core/numeric/gt_spec.rb +0 -11
  394. data/spec/opal/core/numeric/gte_spec.rb +0 -12
  395. data/spec/opal/core/numeric/integer_spec.rb +0 -9
  396. data/spec/opal/core/numeric/left_shift_spec.rb +0 -21
  397. data/spec/opal/core/numeric/lt_spec.rb +0 -11
  398. data/spec/opal/core/numeric/lte_spec.rb +0 -12
  399. data/spec/opal/core/numeric/minus_spec.rb +0 -8
  400. data/spec/opal/core/numeric/modulo_spec.rb +0 -19
  401. data/spec/opal/core/numeric/multiply_spec.rb +0 -9
  402. data/spec/opal/core/numeric/next_spec.rb +0 -9
  403. data/spec/opal/core/numeric/ord_spec.rb +0 -9
  404. data/spec/opal/core/numeric/plus_spec.rb +0 -8
  405. data/spec/opal/core/numeric/pred_spec.rb +0 -7
  406. data/spec/opal/core/numeric/right_shift_spec.rb +0 -25
  407. data/spec/opal/core/numeric/step_spec.rb +0 -11
  408. data/spec/opal/core/numeric/succ_spec.rb +0 -9
  409. data/spec/opal/core/numeric/times_spec.rb +0 -36
  410. data/spec/opal/core/numeric/to_f_spec.rb +0 -7
  411. data/spec/opal/core/numeric/to_i_spec.rb +0 -7
  412. data/spec/opal/core/numeric/to_json_spec.rb +0 -8
  413. data/spec/opal/core/numeric/to_s_spec.rb +0 -26
  414. data/spec/opal/core/numeric/uminus_spec.rb +0 -9
  415. data/spec/opal/core/numeric/upto_spec.rb +0 -19
  416. data/spec/opal/core/numeric/zero_spec.rb +0 -7
  417. data/spec/opal/core/object_id_spec.rb +0 -56
  418. data/spec/opal/core/proc/call_spec.rb +0 -21
  419. data/spec/opal/core/proc/element_reference_spec.rb +0 -21
  420. data/spec/opal/core/proc/proc_tricks_spec.rb +0 -7
  421. data/spec/opal/core/runtime/begin_spec.rb +0 -39
  422. data/spec/opal/core/runtime/block_spec.rb +0 -23
  423. data/spec/opal/core/runtime/bridged_classes_spec.rb +0 -123
  424. data/spec/opal/core/runtime/constants_spec.rb +0 -13
  425. data/spec/opal/core/runtime/donate_spec.rb +0 -53
  426. data/spec/opal/core/runtime/eval_spec.rb +0 -5
  427. data/spec/opal/core/runtime/is_a_spec.rb +0 -36
  428. data/spec/opal/core/runtime/main_methods_spec.rb +0 -27
  429. data/spec/opal/core/runtime/method_missing_spec.rb +0 -68
  430. data/spec/opal/core/runtime/method_spec.rb +0 -31
  431. data/spec/opal/core/runtime/operator_call_spec.rb +0 -13
  432. data/spec/opal/core/runtime/paren_spec.rb +0 -14
  433. data/spec/opal/core/runtime/rescue_spec.rb +0 -106
  434. data/spec/opal/core/runtime/return_spec.rb +0 -38
  435. data/spec/opal/core/runtime/singleton_class_spec.rb +0 -13
  436. data/spec/opal/core/runtime/super_spec.rb +0 -223
  437. data/spec/opal/core/runtime/truthy_spec.rb +0 -63
  438. data/spec/opal/core/runtime/variables_spec.rb +0 -20
  439. data/spec/opal/core/runtime_spec.rb +0 -58
  440. data/spec/opal/core/source_map_spec.rb +0 -49
  441. data/spec/opal/core/string_spec.rb +0 -32
  442. data/spec/opal/core/time_spec.rb +0 -38
  443. data/spec/opal/javascript_api_spec.rb +0 -16
  444. data/spec/opal/stdlib/erb/erb_spec.rb +0 -30
  445. data/spec/opal/stdlib/erb/inline_block.opalerb +0 -3
  446. data/spec/opal/stdlib/erb/quoted.opalerb +0 -1
  447. data/spec/opal/stdlib/erb/simple.opalerb +0 -1
  448. data/spec/opal/stdlib/js_spec.rb +0 -66
  449. data/spec/opal/stdlib/json/ext_spec.rb +0 -48
  450. data/spec/opal/stdlib/json/parse_spec.rb +0 -37
  451. data/spec/opal/stdlib/native/alias_native_spec.rb +0 -27
  452. data/spec/opal/stdlib/native/array_spec.rb +0 -11
  453. data/spec/opal/stdlib/native/each_spec.rb +0 -13
  454. data/spec/opal/stdlib/native/element_reference_spec.rb +0 -16
  455. data/spec/opal/stdlib/native/exposure_spec.rb +0 -33
  456. data/spec/opal/stdlib/native/ext_spec.rb +0 -19
  457. data/spec/opal/stdlib/native/hash_spec.rb +0 -67
  458. data/spec/opal/stdlib/native/initialize_spec.rb +0 -17
  459. data/spec/opal/stdlib/native/method_missing_spec.rb +0 -51
  460. data/spec/opal/stdlib/native/native_alias_spec.rb +0 -19
  461. data/spec/opal/stdlib/native/native_class_spec.rb +0 -18
  462. data/spec/opal/stdlib/native/native_module_spec.rb +0 -13
  463. data/spec/opal/stdlib/native/native_reader_spec.rb +0 -22
  464. data/spec/opal/stdlib/native/native_writer_spec.rb +0 -30
  465. data/spec/opal/stdlib/native/new_spec.rb +0 -92
  466. data/spec/opal/stdlib/native/struct_spec.rb +0 -12
  467. data/spec/opal/stdlib/promise/always_spec.rb +0 -49
  468. data/spec/opal/stdlib/promise/error_spec.rb +0 -15
  469. data/spec/opal/stdlib/promise/rescue_spec.rb +0 -53
  470. data/spec/opal/stdlib/promise/then_spec.rb +0 -79
  471. data/spec/opal/stdlib/promise/trace_spec.rb +0 -51
  472. data/spec/opal/stdlib/promise/value_spec.rb +0 -15
  473. data/spec/opal/stdlib/promise/when_spec.rb +0 -34
  474. data/spec/opal/stdlib/source_map_spec.rb +0 -8
  475. data/spec/opal/stdlib/strscan/scan_spec.rb +0 -11
  476. data/spec/opal/stdlib/template/paths_spec.rb +0 -10
  477. data/spec/opal/stdlib/thread/mutex_spec.rb +0 -40
  478. data/spec/opal/stdlib/thread/thread_queue_spec.rb +0 -32
  479. data/spec/opal/stdlib/thread/thread_spec.rb +0 -60
  480. data/spec/ruby_specs +0 -122
  481. data/spec/spec_helper.rb +0 -27
  482. data/spec/support/match_helpers.rb +0 -57
  483. data/spec/support/mspec_rspec_adapter.rb +0 -33
  484. data/spec/support/rewriters_helper.rb +0 -24
  485. data/stdlib/phantomjs.rb +0 -17
  486. data/tasks/testing/sprockets-phantomjs.js +0 -54
  487. data/test/nodejs/fixtures/hello.rb +0 -1
  488. data/test/nodejs/test_dir.rb +0 -17
  489. data/test/nodejs/test_file.rb +0 -87
  490. data/test/nodejs/test_io.rb +0 -18
  491. data/test/nodejs/test_opal_builder.rb +0 -12
  492. data/test/opal/test_keyword.rb +0 -590
  493. data/test/opal/unsupported_and_bugs.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3c1ac220f86c552e522eaad298f9e4dcce4e8f6
4
- data.tar.gz: 5294190e2a015e036d8824126837fb8ead1e219a
3
+ metadata.gz: 031fb6b695b92330faf6fda3d93b6fddb84e8c90
4
+ data.tar.gz: f44d491f731708162c5ab566be18514aa1d3567d
5
5
  SHA512:
6
- metadata.gz: 9c84a1b7d4c5c1e493dcdff3f8823141fac4048b96ac409ded2ce223b4e591d7fccbb00d7edd00f4cc8eafe76385c3caa8d540bf285cada64fc9d24ec5048072
7
- data.tar.gz: 8e8a3ec7a272f221856d36787fe8edf774f418694fb28b18f30b3e38d8c10ee059154c2d3218b29300bd8e5818667ba3481bb2b499dfeae19641526477d60ee0
6
+ metadata.gz: 6af49d8a0000654461f171748688bbf39dc21d5e8bcec76414ea7eaa65fd45ad3b5b2fdfcbf7cfbbd8dac47f0f96cc671547b2e36bbff399f15461c7304f1464
7
+ data.tar.gz: f68f7d5581668620ce96ef7766266a62f003d785ae934f515f7ddb2e67f4443793f354475e89e9153882af82baaafc4a96d3474f9a4a43edeb961e1ba91e94a2
data/.jshintrc CHANGED
@@ -10,7 +10,7 @@
10
10
  "undef" : true, // Prohibit the use of explicitly undeclared variables
11
11
  "unused" : true, // Warn when you define and never use your variables
12
12
 
13
- "predef" : ["Opal", "JSON", "Java", "callPhantom", "OpalNode", "jsyaml"],
13
+ "predef" : ["Opal", "JSON", "Java", "OpalNode", "jsyaml"],
14
14
 
15
15
  "browser": true,
16
16
  "node": true,
@@ -2,6 +2,10 @@ language: ruby
2
2
 
3
3
  sudo: false
4
4
 
5
+ dist: trusty
6
+ addons:
7
+ chrome: stable
8
+
5
9
  cache:
6
10
  bundler: true
7
11
  directories:
@@ -12,6 +16,12 @@ matrix:
12
16
  fast_finish: true
13
17
 
14
18
  include:
19
+ - rvm: 2.4.0
20
+ env: RUN=mspec_opal_chrome
21
+
22
+ - rvm: 2.4.0
23
+ env: RUN=mspec_ruby_chrome
24
+
15
25
  # - rvm: 2.4.0
16
26
  # env:
17
27
  # - RUN=browser_test
@@ -65,14 +75,16 @@ matrix:
65
75
 
66
76
 
67
77
  before_install:
68
- # Keep track of which version of node and phantomjs we're running the specs against
78
+ # Keep track of which version of node we're running the specs against
69
79
  - node -v
70
- - phantomjs -v
71
80
  - git submodule update --init
72
81
  - npm install -g jshint
73
82
  - npm install -g uglify-js
74
83
  - type bundle || gem install bundler
75
84
  - bundle config without doc
85
+ - which google-chrome-stable
86
+ - google-chrome-stable --version
87
+ - export RUBYOPT=-w
76
88
 
77
89
  script:
78
90
  - "bundle exec rake $RUN"
@@ -63,6 +63,7 @@ Whitespace conventions:
63
63
  ### Removed
64
64
 
65
65
  - Dropped support for IE8 and below, and restricted Safari and Opera support to the last two versions
66
+ - Dropped support for PhantomJS as it was [abandoned](https://groups.google.com/forum/#!topic/phantomjs/9aI5d-LDuNE).
66
67
 
67
68
 
68
69
  ### Changed
@@ -122,20 +123,32 @@ Whitespace conventions:
122
123
 
123
124
 
124
125
 
125
- ## [0.10.3] - 2016-10-31
126
+
127
+ ## [0.10.5] - 2017-06-21
128
+
129
+
130
+ ### Fixed
131
+
132
+ - Fix `Time#zone` for zones expressed numerically
133
+
134
+
135
+
136
+
137
+ ## [0.10.4] - 2017-05-07
126
138
 
127
139
 
128
140
  ### Changed
129
141
 
130
- - Avoid special utf-8 chars in method names, now they start with `$$`
142
+ - Better `Opal::Config` options documentation and organization
143
+ - Always cache source-maps at build-time so they're available once enabled
131
144
 
132
145
 
133
146
 
134
147
 
135
- ## [0.10.2] - 2016-09-09
148
+ ## [0.10.3] - 2016-10-31
136
149
 
137
150
 
138
- ## Fixed
151
+ ### Fixed
139
152
 
140
153
  - Fixed inheritance from the `Module` class (#1476)
141
154
  - Fixed source map server with url-encoded paths
@@ -145,6 +158,16 @@ Whitespace conventions:
145
158
 
146
159
 
147
160
 
161
+ ## [0.10.2] - 2016-09-09
162
+
163
+
164
+ ### Changed
165
+
166
+ - Avoid special utf-8 chars in method names, now they start with `$$`
167
+
168
+
169
+
170
+
148
171
  ## [0.10.1] - 2016-07-06
149
172
 
150
173
 
@@ -983,7 +1006,9 @@ Whitespace conventions:
983
1006
 
984
1007
 
985
1008
 
986
- [0.11.0]: https://github.com/opal/opal/compare/v0.10.3...HEAD
1009
+ [0.11.0]: https://github.com/opal/opal/compare/v0.10.5...HEAD
1010
+ [0.10.5]: https://github.com/opal/opal/compare/v0.10.4...v0.10.5
1011
+ [0.10.4]: https://github.com/opal/opal/compare/v0.10.3...v0.10.4
987
1012
  [0.10.3]: https://github.com/opal/opal/compare/v0.10.2...v0.10.3
988
1013
  [0.10.2]: https://github.com/opal/opal/compare/v0.10.1...v0.10.2
989
1014
  [0.10.1]: https://github.com/opal/opal/compare/v0.10.0...v0.10.1
data/HACKING.md CHANGED
@@ -202,7 +202,7 @@ To enable debug output in the Racc grammar set the `RACC_DEBUG` env var and reco
202
202
  ```bash
203
203
  $ export RACC_DEBUG=true
204
204
  $ bundle exec rake racc # recompile the grammar
205
- $ bundle exec bin/opal --sexp -e "42" # ask Opal for the SExp of some code
205
+ $ bundle exec exe/opal --sexp -e "42" # ask Opal for the SExp of some code
206
206
 
207
207
  read :tINTEGER(tINTEGER) [42, [1, 0]]
208
208
 
@@ -227,6 +227,6 @@ When done unset the env variable and recompile the grammar.
227
227
  ```bash
228
228
  $ unset RACC_DEBUG
229
229
  $ bundle exec rake racc # recompile the grammar
230
- $ bundle exec bin/opal --sexp -e "42" # ask Opal for the SExp of some code
230
+ $ bundle exec exe/opal --sexp -e "42" # ask Opal for the SExp of some code
231
231
  (:int, 42)
232
232
  ```
data/README.md CHANGED
@@ -70,7 +70,7 @@ string of JavaScript code.
70
70
  Opal.compile("puts 'wow'") # => "(function() { ... self.$puts("wow"); ... })()"
71
71
  ```
72
72
 
73
- Running this by itself is not enough, you need the opal runtime/corelib.
73
+ Running this by itself is not enough; you need the opal runtime/corelib.
74
74
 
75
75
  #### Using Opal::Builder
76
76
 
@@ -119,8 +119,8 @@ your web applications.
119
119
  Just open this page and check the JavaScript console.
120
120
 
121
121
  **NOTE**: Although this is possible, this is not really recommended for
122
- production and should only be used as a quick way to getting you hands
123
- on opal
122
+ production and should only be used as a quick way to get your hands
123
+ on opal.
124
124
 
125
125
  ## Running tests
126
126
 
@@ -133,7 +133,7 @@ Then, install dependencies:
133
133
  $ bundle install
134
134
  $ npm install -g jshint
135
135
 
136
- The test suite can be run using (requires [phantomjs][]):
136
+ The test suite can be run using:
137
137
 
138
138
  $ bundle exec rake
139
139
 
@@ -231,6 +231,5 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
231
231
  THE SOFTWARE.
232
232
 
233
233
 
234
- [phantomjs]: http://phantomjs.org
235
234
  [MSpec]: https://github.com/ruby/mspec#readme
236
235
  [RSpec]: https://github.com/rspec/rspec#readme
@@ -19,12 +19,11 @@ install:
19
19
  - ruby --version
20
20
  - gem --version
21
21
  - node --version
22
- - gem install bundler --quiet --no-ri --no-rdoc
23
22
  - bundler --version
24
23
  - bundle
25
- - choco install phantomjs --version 2.0.0 -y
26
-
24
+
27
25
  build: off
28
26
 
27
+ # TODO: add mspec_chrome and minitest_chrome once Chrome 60 will be released
29
28
  test_script:
30
- - bundle exec rake
29
+ - bundle exec rake rspec mspec_nodejs minitest_nodejs minitest_node_nodejs
data/bin ADDED
@@ -0,0 +1 @@
1
+ ./exe
@@ -0,0 +1,105 @@
1
+ # Headless Chrome
2
+
3
+ ## Requirements
4
+
5
+ First of all, make sure that you have Chrome at least 59.0 installed.
6
+ Also for now it's supported only on Mac and Linux. (version 60 may get support on Windows)
7
+
8
+ ## Using the runner
9
+
10
+ To run your code using headless chrome, use `-R chrome` (`--runner chrome`) option:
11
+
12
+ $ opal -Rchrome -e "puts 'Hello, Opal'"
13
+ Hello, Opal
14
+
15
+ The runner also listens for any exceptions and prints formatted stracktraces back to your console:
16
+
17
+ $ opal -Rchrome -e "
18
+ def raising_method
19
+ raise 'test error'
20
+ end
21
+
22
+ raising_method
23
+ "
24
+
25
+ RuntimeError : test error
26
+ at $$raise (file:///tmp/chrome-opal.js:4996:6)
27
+ at $$raising_method (file:///tmp/chrome-opal.js:21144:16)
28
+ at (file:///tmp/chrome-opal.js:21146:14)
29
+ at (file:///tmp/chrome-opal.js:21147:2)
30
+
31
+ ## Using exit codes
32
+
33
+ By default headless chrome runner explicitly sets exit code to 1 when there was any error in the code.
34
+
35
+ $ opal -Rchrome -e "42"; echo $?
36
+ 0
37
+
38
+ $ opal -Rchrome -e "raise 'error'"; echo $?
39
+ RuntimeError : error
40
+ at $$raise (file:///tmp/chrome-opal.js:4996:6)
41
+ at (file:///tmp/chrome-opal.js:21139:14)
42
+ at (file:///tmp/chrome-opal.js:21140:2)
43
+ 1
44
+
45
+ You can change final exit code by using `Kernel#exit`, but make sure to require `opal/platform` in your code.
46
+
47
+ $ opal -Rchrome -ropal/platform -e "exit(0)"; echo $?
48
+ 0
49
+
50
+ $ opal -Rchrome -ropal/platform -e "exit(1)"; echo $?
51
+ 1
52
+
53
+ Also `Kernel#exit` doesn't abort your script. It simply takes the value that was passed to the first
54
+ invocation and persists it in `window.OPAL_EXIT_CODE`. Later headless chrome runner extracts it from the chrome runtime.
55
+
56
+ ## Known limitations
57
+
58
+ 1. `exit` doesn't abort you script (but `raise/throw` does)
59
+ 2. When you call `console.log(one, two, three)` from your code headless chrome prints only the first passed object.
60
+ The reason behind it is the format of the message that chrome sends to the runner.
61
+ Opal intentionally uses a simplified method from Chrome API (`Console.messageAdded`) to catch `console.log` invocations.
62
+ (Check `lib/opal/cli_runners/chrome.js` do get more information)
63
+
64
+ ## Internals
65
+
66
+ Under the hood when you call `opal -Rchrome -e 'your code'` Opal uses chrome runner that is defined in
67
+ `lib/opal/cli_runners/chrome.rb`. This runner tries to connect to `localhost:9222` (9222 is a default port for a headless chrome server)
68
+ or runs the server on its own. It detects your platform and uses a default path to the chrome executable
69
+ (`Opal::CliRunners::Chrome#chrome_executable`) but you can override it by specifying `GOOGLE_CHROME_BINARY` environment
70
+ variable.
71
+
72
+ When the server is up and running it passes compiled js code to `node lib/opal/cli_runners/chrome.js`
73
+ as a plain input using stdin (basically, it's a second part of the runner).
74
+ `chrome.js` is a node js script that does the main job. It runs any provided code on the running chrome server,
75
+ catches errors and forwards console messages.
76
+
77
+
78
+ Moreover, you can actually call any js using headless chrome by running
79
+
80
+ $ echo "console.log('Hello, Opal')" | node lib/opal/cli_runners/chrome.js
81
+
82
+ NOTE: to run it you need to have a chrome server running on `localhost:9222` (usually `chrome.rb` does it for you)
83
+
84
+ $ chrome --disable-gpu --headless --remote-debugging-port=9222
85
+
86
+ ## Using a remote chrome server
87
+
88
+ If you want to change a default chrome port or your chrome server is running on a different host:port
89
+ you can override default values by specifying `CHROME_HOST` and `CHROME_PORT` environment variables:
90
+
91
+ $ CHROME_HOST=10.10.10.10 CHROME_PORT=8080 opal -Rchrome -e "puts 42"
92
+ Connecting to 10.10.10.10:8080...
93
+ 42
94
+
95
+ NOTE: `CHROME_HOST` requires a chrome server to be started. You can't start remotely a server on a different host.
96
+
97
+
98
+ ## Additional options
99
+
100
+ If you need to pass additional CLI options to the Chrome executable you can do so by setting the `CHROME_OPTS` environment variable:
101
+
102
+ $ CHROME_OPS="--window-size=412,732" opal -Rchrome -e "puts 42"
103
+ 42
104
+
105
+ _For a list of additional options see https://developers.google.com/web/updates/2017/04/headless-chrome_
@@ -1,8 +1,8 @@
1
1
  # RSpec
2
2
 
3
3
  `opal-rspec` allows opal to use rspec for running specs in javascript
4
- environments. It comes with built-in support for running rspec with custom
5
- `phantomjs` and standard web browser formatters. Also, async spec examples
4
+ environments. It comes with built-in support for running rspec with
5
+ standard web browser formatters. Also, async spec examples
6
6
  are supported to reflect browser usage of ruby applications.
7
7
 
8
8
  ```ruby
@@ -25,23 +25,6 @@ gem 'opal-rspec'
25
25
 
26
26
  ## Running specs
27
27
 
28
- ### phantomjs
29
-
30
- To run specs, a rake task can be added which will load all spec files
31
- from `spec/`:
32
-
33
- ```ruby
34
- # Rakefile
35
- require 'opal/rspec/rake_task'
36
- Opal::RSpec::RakeTask.new(:default)
37
- ```
38
-
39
- Then, to run your specs inside phantomjs, just run the rake task:
40
-
41
- ```sh
42
- $ bundle exec rake
43
- ```
44
-
45
28
  ### In a Browser
46
29
 
47
30
  `opal-rspec` can use sprockets to build and serve specs over a simple rack server. Add the following to a `config.ru` file:
File without changes
File without changes
File without changes
File without changes
@@ -2,6 +2,7 @@
2
2
  require 'opal/config'
3
3
  require 'opal/compiler'
4
4
  require 'opal/builder'
5
+ require 'opal/builder_processors'
5
6
  require 'opal/erb'
6
7
  require 'opal/paths'
7
8
  require 'opal/version'
@@ -5,10 +5,6 @@ require 'parser/ruby23'
5
5
  module Opal
6
6
  module AST
7
7
  class Builder < ::Parser::Builders::Default
8
- def string_value(token)
9
- token[0]
10
- end
11
-
12
8
  def n(type, children, location)
13
9
  ::Opal::AST::Node.new(type, children, location: location)
14
10
  end
@@ -1,17 +1,62 @@
1
1
  # frozen_string_literal: true
2
2
  require 'opal/path_reader'
3
- require 'opal/builder_processors'
4
3
  require 'opal/paths'
5
4
  require 'opal/config'
6
5
  require 'set'
7
6
 
8
7
  module Opal
9
8
  class Builder
10
- include BuilderProcessors
9
+ # The registered processors
10
+ def self.processors
11
+ @processors ||= []
12
+ end
13
+
14
+ # All the extensions supported by registered processors
15
+ def self.extensions
16
+ @extensions ||= []
17
+ end
18
+
19
+ # @public
20
+ # Register a builder processor and the supported extensions.
21
+ # A processor will respond to:
22
+ #
23
+ # ## `#requires`
24
+ # An array of string containing the logic paths of required assets
25
+ #
26
+ # ## `#required_trees`
27
+ # An array of string containing the logic paths of required directories
28
+ #
29
+ # ## `#to_s`
30
+ # The processed source
31
+ #
32
+ # ## `#source_map`
33
+ # An instance of `::SourceMap::Map` representing the processd asset's source
34
+ # map.
35
+ #
36
+ # ## `.new(source, filename, compiler_options)`
37
+ # The processor will be instantiated passing:
38
+ # - the unprocessed source
39
+ # - the asset's filename
40
+ # - Opal's compiler options
41
+ #
42
+ # ## `.match?(path)`
43
+ # The processor is able to recognize paths suitable for its type of
44
+ # processing.
45
+ #
46
+ def self.register_processor(processor, processor_extensions)
47
+ return if processors.include?(processor)
48
+ processors << processor
49
+ processor_extensions.each { |ext| extensions << ext }
50
+ end
51
+
52
+
11
53
 
12
54
  class MissingRequire < LoadError
13
55
  end
14
56
 
57
+ class ProcessorNotFound < LoadError
58
+ end
59
+
15
60
  def initialize(options = nil)
16
61
  (options || {}).each_pair do |k,v|
17
62
  public_send("#{k}=", v)
@@ -19,11 +64,10 @@ module Opal
19
64
 
20
65
  @stubs ||= []
21
66
  @preload ||= []
22
- @processors ||= DEFAULT_PROCESSORS
23
- @path_reader ||= PathReader.new
67
+ @processors ||= ::Opal::Builder.processors
68
+ @path_reader ||= PathReader.new(Opal.paths, extensions.map{|e| [".#{e}", ".js.#{e}"]}.flatten)
24
69
  @prerequired ||= []
25
70
  @compiler_options ||= Opal::Config.compiler_options
26
- @default_processor ||= RubyProcessor
27
71
 
28
72
  @processed = []
29
73
  end
@@ -38,7 +82,7 @@ module Opal
38
82
  end
39
83
 
40
84
  def build_str source, filename, options = {}
41
- path = path_reader.expand(filename).to_s unless stub?(filename)
85
+ path = path_from_filename(filename)
42
86
  asset = processor_for(source, filename, path, options)
43
87
  requires = preload + asset.requires + tree_requires(asset, path)
44
88
  requires.map { |r| process_require(r, options) }
@@ -79,9 +123,8 @@ module Opal
79
123
 
80
124
  attr_reader :processed
81
125
 
82
- attr_accessor :processors, :default_processor, :path_reader,
83
- :compiler_options, :stubs, :prerequired, :preload
84
-
126
+ attr_accessor :processors, :path_reader, :compiler_options,
127
+ :stubs, :prerequired, :preload
85
128
 
86
129
 
87
130
 
@@ -110,14 +153,20 @@ module Opal
110
153
  end
111
154
 
112
155
  def processor_for(source, filename, path, options)
113
- processor = processors.find { |p| p.match? path }
114
- processor ||= default_processor
115
- return processor.new(source, filename, compiler_options.merge(options))
156
+ processor = processors.find { |p| p.match? path } or
157
+ raise ProcessorNotFound, "can't find processor for filename: #{filename.inspect}, path: #{path.inspect}, source: #{source.inspect}, processors: #{processors.inspect}"
158
+ processor.new(source, filename, compiler_options.merge(options))
116
159
  end
117
160
 
118
161
  def read(path)
119
162
  path_reader.read(path) or begin
120
- message = "can't find file: #{path.inspect} in #{path_reader.paths.inspect}"
163
+ print_list = lambda { |list| "- #{list.join("\n- ")}\n" }
164
+ message = "can't find file: #{path.inspect} in:\n"+
165
+ print_list[path_reader.paths]+
166
+ "\nWith the following extensions:\n"+
167
+ print_list[path_reader.extensions]+
168
+ "\nAnd the following processors:\n"+
169
+ print_list[processors]
121
170
 
122
171
  case compiler_options[:dynamic_require_severity]
123
172
  when :raise then raise MissingRequire, message
@@ -145,12 +194,17 @@ module Opal
145
194
  end
146
195
  end
147
196
 
148
- path = path_reader.expand(filename).to_s unless stub?(filename)
197
+ path = path_from_filename(filename)
149
198
  asset = processor_for(source, filename, path, options.merge(requirable: true))
150
199
  process_requires(filename, asset.requires+tree_requires(asset, path), options)
151
200
  processed << asset
152
201
  end
153
202
 
203
+ def path_from_filename(filename)
204
+ return if stub?(filename)
205
+ (path_reader.expand(filename) || File.expand_path(filename)).to_s
206
+ end
207
+
154
208
  def process_requires(filename, requires, options)
155
209
  requires.map { |r| process_require(r, options) }
156
210
  rescue MissingRequire => error
@@ -166,7 +220,7 @@ module Opal
166
220
  end
167
221
 
168
222
  def extensions
169
- @extensions ||= DEFAULT_PROCESSORS.flat_map(&:extensions).compact
223
+ ::Opal::Builder.extensions
170
224
  end
171
225
  end
172
226
  end