opal 0.11.4 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +42 -10
- data/.rubocop.yml +398 -0
- data/.rubocop_todo.yml +44 -0
- data/.travis.yml +28 -34
- data/CHANGELOG.md +363 -142
- data/CONTRIBUTING.md +3 -5
- data/Gemfile +17 -12
- data/Guardfile +0 -1
- data/HACKING.md +1 -35
- data/LICENSE +2 -2
- data/README.md +42 -13
- data/Rakefile +1 -4
- data/UNRELEASED.md +133 -0
- data/benchmark-ips/README.md +6 -0
- data/benchmark-ips/bm_block_vs_yield.rb +21 -0
- data/benchmark-ips/bm_js_symbols_vs_strings.rb +28 -0
- data/benchmark-ips/bm_while_true_vs_loop.rb +19 -0
- data/bin/console +14 -0
- data/bin/opal +0 -1
- data/bin/opal-benchmark-ips +8 -0
- data/bin/opal-mspec +9 -1
- data/bin/opal-repl +2 -1
- data/bin/rake +7 -0
- data/bin/setup +8 -0
- data/docs/compiled_ruby.md +89 -8
- data/docs/compiler.md +3 -20
- data/docs/jquery.md +44 -11
- data/docs/promises.md +1 -1
- data/docs/rails.md +16 -12
- data/docs/sinatra.md +15 -8
- data/docs/using_sprockets.md +16 -11
- data/examples/rack/config.ru +1 -0
- data/examples/sinatra/Gemfile +1 -0
- data/examples/sinatra/config.ru +2 -11
- data/exe/opal-repl +3 -11
- data/lib/opal.rb +1 -0
- data/lib/opal/ast/builder.rb +4 -1
- data/lib/opal/ast/node.rb +1 -0
- data/lib/opal/builder.rb +84 -63
- data/lib/opal/builder_processors.rb +41 -56
- data/lib/opal/cli.rb +33 -49
- data/lib/opal/cli_options.rb +27 -17
- data/lib/opal/cli_runners.rb +73 -16
- data/lib/opal/cli_runners/applescript.rb +4 -4
- data/lib/opal/cli_runners/chrome.rb +29 -17
- data/lib/opal/cli_runners/nashorn.rb +5 -4
- data/lib/opal/cli_runners/nodejs.rb +8 -6
- data/lib/opal/cli_runners/server.rb +12 -11
- data/lib/opal/compiler.rb +85 -103
- data/lib/opal/config.rb +3 -3
- data/lib/opal/deprecations.rb +2 -1
- data/lib/opal/eof_content.rb +2 -2
- data/lib/opal/erb.rb +8 -7
- data/lib/opal/errors.rb +72 -1
- data/lib/opal/fragment.rb +23 -3
- data/lib/opal/hike.rb +305 -0
- data/lib/opal/nodes.rb +5 -10
- data/lib/opal/nodes/arglist.rb +7 -6
- data/lib/opal/nodes/args.rb +36 -0
- data/lib/opal/nodes/args/arg.rb +22 -0
- data/lib/opal/nodes/args/arity_check.rb +151 -0
- data/lib/opal/nodes/args/ensure_kwargs_are_kwargs.rb +28 -0
- data/lib/opal/nodes/args/extract_block_arg.rb +34 -0
- data/lib/opal/nodes/args/extract_kwarg.rb +32 -0
- data/lib/opal/nodes/args/extract_kwargs.rb +28 -0
- data/lib/opal/nodes/args/extract_kwoptarg.rb +35 -0
- data/lib/opal/nodes/args/extract_kwrestarg.rb +35 -0
- data/lib/opal/nodes/args/extract_optarg.rb +35 -0
- data/lib/opal/nodes/args/extract_post_arg.rb +28 -0
- data/lib/opal/nodes/args/extract_post_optarg.rb +41 -0
- data/lib/opal/nodes/args/extract_restarg.rb +40 -0
- data/lib/opal/nodes/args/fake_arg.rb +26 -0
- data/lib/opal/nodes/args/initialize_iterarg.rb +28 -0
- data/lib/opal/nodes/args/initialize_shadowarg.rb +24 -0
- data/lib/opal/nodes/args/parameters.rb +63 -0
- data/lib/opal/nodes/args/prepare_post_args.rb +22 -0
- data/lib/opal/nodes/array.rb +9 -8
- data/lib/opal/nodes/base.rb +20 -11
- data/lib/opal/nodes/call.rb +24 -25
- data/lib/opal/nodes/call_special.rb +4 -3
- data/lib/opal/nodes/case.rb +24 -26
- data/lib/opal/nodes/class.rb +4 -5
- data/lib/opal/nodes/constants.rb +8 -7
- data/lib/opal/nodes/csend.rb +2 -3
- data/lib/opal/nodes/def.rb +28 -74
- data/lib/opal/nodes/defined.rb +36 -36
- data/lib/opal/nodes/definitions.rb +10 -7
- data/lib/opal/nodes/defs.rb +8 -16
- data/lib/opal/nodes/hash.rb +5 -4
- data/lib/opal/nodes/helpers.rb +8 -8
- data/lib/opal/nodes/if.rb +10 -8
- data/lib/opal/nodes/iter.rb +16 -103
- data/lib/opal/nodes/lambda.rb +18 -0
- data/lib/opal/nodes/literal.rb +29 -63
- data/lib/opal/nodes/logic.rb +25 -24
- data/lib/opal/nodes/masgn.rb +8 -6
- data/lib/opal/nodes/module.rb +4 -4
- data/lib/opal/nodes/node_with_args.rb +14 -208
- data/lib/opal/nodes/rescue.rb +32 -32
- data/lib/opal/nodes/runtime_helpers.rb +5 -4
- data/lib/opal/nodes/scope.rb +18 -29
- data/lib/opal/nodes/singleton_class.rb +3 -3
- data/lib/opal/nodes/super.rb +12 -18
- data/lib/opal/nodes/top.rb +10 -8
- data/lib/opal/nodes/variables.rb +6 -6
- data/lib/opal/nodes/while.rb +7 -6
- data/lib/opal/nodes/x_string.rb +139 -0
- data/lib/opal/nodes/yield.rb +10 -7
- data/lib/opal/parser.rb +9 -46
- data/lib/opal/parser/default_config.rb +50 -0
- data/lib/opal/parser/patch.rb +26 -0
- data/lib/opal/parser/source_buffer.rb +11 -0
- data/lib/opal/parser/with_c_lexer.rb +14 -0
- data/lib/opal/parser/with_ruby_lexer.rb +6 -0
- data/lib/opal/path_reader.rb +6 -5
- data/lib/opal/paths.rb +9 -6
- data/lib/opal/regexp_anchors.rb +6 -5
- data/lib/opal/rewriter.rb +7 -0
- data/lib/opal/rewriters/arguments.rb +58 -0
- data/lib/opal/rewriters/base.rb +32 -12
- data/lib/opal/rewriters/binary_operator_assignment.rb +20 -20
- data/lib/opal/rewriters/block_to_iter.rb +2 -1
- data/lib/opal/rewriters/break_finder.rb +2 -0
- data/lib/opal/rewriters/dot_js_syntax.rb +3 -2
- data/lib/opal/rewriters/dump_args.rb +28 -0
- data/lib/opal/rewriters/explicit_writer_return.rb +4 -3
- data/lib/opal/rewriters/for_rewriter.rb +12 -12
- data/lib/opal/rewriters/hashes/key_duplicates_rewriter.rb +2 -1
- data/lib/opal/rewriters/inline_args.rb +220 -0
- data/lib/opal/rewriters/js_reserved_words.rb +21 -17
- data/lib/opal/rewriters/logical_operator_assignment.rb +24 -14
- data/lib/opal/rewriters/mlhs_args.rb +128 -0
- data/lib/opal/rewriters/opal_engine_check.rb +11 -6
- data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +3 -2
- data/lib/opal/server.rb +1 -0
- data/lib/opal/simple_server.rb +15 -23
- data/lib/opal/source_map.rb +7 -70
- data/lib/opal/source_map/file.rb +199 -0
- data/lib/opal/source_map/index.rb +83 -0
- data/lib/opal/source_map/map.rb +26 -0
- data/lib/opal/source_map/vlq.rb +98 -0
- data/lib/opal/util.rb +7 -5
- data/lib/opal/version.rb +2 -1
- data/lib/tilt/opal.rb +3 -3
- data/opal.gemspec +18 -9
- data/opal/corelib/array.rb +135 -117
- data/opal/corelib/array/pack.rb +446 -0
- data/opal/corelib/basic_object.rb +23 -9
- data/opal/corelib/boolean.rb +3 -3
- data/opal/corelib/class.rb +4 -10
- data/opal/corelib/comparable.rb +36 -23
- data/opal/corelib/complex.rb +108 -14
- data/opal/corelib/constants.rb +4 -4
- data/opal/corelib/enumerable.rb +132 -135
- data/opal/corelib/enumerator.rb +47 -50
- data/opal/corelib/error.rb +65 -8
- data/opal/corelib/file.rb +37 -32
- data/opal/corelib/hash.rb +90 -21
- data/opal/corelib/helpers.rb +7 -6
- data/opal/corelib/kernel.rb +53 -586
- data/opal/corelib/kernel/format.rb +544 -0
- data/opal/corelib/marshal.rb +1 -13
- data/opal/corelib/marshal/read_buffer.rb +20 -23
- data/opal/corelib/marshal/write_buffer.rb +23 -15
- data/opal/corelib/math.rb +12 -16
- data/opal/corelib/method.rb +5 -3
- data/opal/corelib/module.rb +80 -109
- data/opal/corelib/nil.rb +2 -2
- data/opal/corelib/number.rb +177 -43
- data/opal/corelib/numeric.rb +22 -16
- data/opal/corelib/pack_unpack/format_string_parser.rb +135 -0
- data/opal/corelib/proc.rb +3 -4
- data/opal/corelib/process.rb +1 -1
- data/opal/corelib/random.rb +24 -16
- data/opal/corelib/random/MersenneTwister.js +137 -0
- data/opal/corelib/random/math_random.js.rb +9 -0
- data/opal/corelib/random/mersenne_twister.js.rb +13 -0
- data/opal/corelib/random/seedrandom.js.rb +12 -0
- data/opal/corelib/range.rb +25 -26
- data/opal/corelib/rational.rb +57 -17
- data/opal/corelib/regexp.rb +39 -43
- data/opal/corelib/runtime.js +806 -683
- data/opal/corelib/string.rb +213 -112
- data/opal/corelib/string/encoding.rb +14 -17
- data/opal/corelib/string/unpack.rb +793 -0
- data/opal/corelib/struct.rb +40 -24
- data/opal/corelib/time.rb +14 -15
- data/opal/corelib/unsupported.rb +26 -4
- data/opal/opal.rb +2 -1
- data/opal/opal/full.rb +2 -0
- data/stdlib/base64.rb +1 -1
- data/stdlib/bigdecimal.rb +11 -13
- data/stdlib/buffer.rb +9 -8
- data/stdlib/buffer/array.rb +46 -48
- data/stdlib/buffer/view.rb +85 -47
- data/stdlib/console.rb +18 -18
- data/stdlib/date.rb +85 -66
- data/stdlib/delegate.rb +2 -2
- data/stdlib/e2mmap.rb +176 -0
- data/stdlib/encoding.rb +1 -1
- data/stdlib/erb.rb +1 -1
- data/stdlib/forwardable.rb +14 -14
- data/stdlib/json.rb +1 -2
- data/stdlib/logger.rb +112 -0
- data/stdlib/math.rb +1 -1
- data/stdlib/matrix.rb +2169 -0
- data/stdlib/matrix/eigenvalue_decomposition.rb +883 -0
- data/stdlib/matrix/lup_decomposition.rb +219 -0
- data/stdlib/nashorn/file.rb +7 -9
- data/stdlib/native.rb +69 -63
- data/stdlib/nodejs.rb +3 -0
- data/stdlib/nodejs/dir.rb +25 -4
- data/stdlib/nodejs/env.rb +40 -0
- data/stdlib/nodejs/file.rb +184 -34
- data/stdlib/nodejs/fileutils.rb +4 -4
- data/stdlib/nodejs/io.rb +4 -46
- data/stdlib/nodejs/irb.rb +27 -29
- data/stdlib/nodejs/kernel.rb +2 -11
- data/stdlib/nodejs/node_modules/balanced-match/.npmignore +5 -0
- data/stdlib/nodejs/node_modules/balanced-match/LICENSE.md +21 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match → balanced-match}/README.md +13 -2
- data/stdlib/nodejs/node_modules/balanced-match/index.js +59 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match → balanced-match}/package.json +46 -42
- data/stdlib/nodejs/node_modules/brace-expansion/LICENSE +21 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion → brace-expansion}/README.md +9 -1
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion → brace-expansion}/index.js +12 -2
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion → brace-expansion}/package.json +48 -48
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/.travis.yml +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/LICENSE +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/README.markdown +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/example/map.js +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/index.js +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/package.json +47 -42
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/test/map.js +0 -0
- data/stdlib/nodejs/node_modules/fs.realpath/LICENSE +43 -0
- data/stdlib/nodejs/node_modules/fs.realpath/README.md +33 -0
- data/stdlib/nodejs/node_modules/fs.realpath/index.js +66 -0
- data/stdlib/nodejs/node_modules/fs.realpath/old.js +303 -0
- data/stdlib/nodejs/node_modules/fs.realpath/package.json +59 -0
- data/stdlib/nodejs/node_modules/glob/README.md +57 -46
- data/stdlib/nodejs/node_modules/glob/changelog.md +67 -0
- data/stdlib/nodejs/node_modules/glob/common.js +91 -28
- data/stdlib/nodejs/node_modules/glob/glob.js +196 -55
- data/stdlib/nodejs/node_modules/glob/package.json +55 -51
- data/stdlib/nodejs/node_modules/glob/sync.js +116 -39
- data/stdlib/nodejs/node_modules/{glob/node_modules/inflight → inflight}/LICENSE +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/inflight → inflight}/README.md +0 -0
- data/stdlib/nodejs/node_modules/inflight/inflight.js +54 -0
- data/stdlib/nodejs/node_modules/inflight/package.json +58 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/inherits → inherits}/LICENSE +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/inherits → inherits}/README.md +0 -0
- data/stdlib/nodejs/node_modules/inherits/inherits.js +7 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/inherits → inherits}/inherits_browser.js +0 -0
- data/stdlib/nodejs/node_modules/inherits/package.json +61 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/inflight/node_modules/wrappy → minimatch}/LICENSE +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch → minimatch}/README.md +2 -9
- data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch → minimatch}/minimatch.js +284 -206
- data/stdlib/nodejs/node_modules/minimatch/package.json +63 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/once/node_modules/wrappy → once}/LICENSE +0 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/once → once}/README.md +28 -0
- data/stdlib/nodejs/node_modules/once/once.js +42 -0
- data/stdlib/nodejs/node_modules/once/package.json +67 -0
- data/stdlib/nodejs/node_modules/path-is-absolute/index.js +20 -0
- data/stdlib/nodejs/node_modules/path-is-absolute/license +21 -0
- data/stdlib/nodejs/node_modules/path-is-absolute/package.json +75 -0
- data/stdlib/nodejs/node_modules/path-is-absolute/readme.md +59 -0
- data/stdlib/nodejs/node_modules/unxhr/LICENSE +22 -0
- data/stdlib/nodejs/node_modules/unxhr/README.md +41 -0
- data/stdlib/nodejs/node_modules/unxhr/lib/XMLHttpRequest.js +598 -0
- data/stdlib/nodejs/node_modules/unxhr/lib/browser.js +2 -0
- data/stdlib/nodejs/node_modules/unxhr/lib/request.js +63 -0
- data/stdlib/nodejs/node_modules/unxhr/package.json +75 -0
- data/stdlib/nodejs/node_modules/wrappy/LICENSE +15 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/inflight/node_modules/wrappy → wrappy}/README.md +0 -0
- data/stdlib/nodejs/node_modules/wrappy/package.json +59 -0
- data/stdlib/nodejs/node_modules/{glob/node_modules/inflight/node_modules/wrappy → wrappy}/wrappy.js +0 -0
- data/stdlib/nodejs/open-uri.rb +26 -0
- data/stdlib/nodejs/package-lock.json +88 -0
- data/stdlib/nodejs/package.json +2 -1
- data/stdlib/nodejs/pathname.rb +20 -0
- data/stdlib/nodejs/require.rb +3 -3
- data/stdlib/nodejs/stacktrace.rb +1 -1
- data/stdlib/nodejs/yaml.rb +1 -1
- data/stdlib/opal-builder.rb +1 -0
- data/stdlib/opal-parser.rb +4 -1
- data/stdlib/opal-platform.rb +8 -10
- data/stdlib/opal-source-maps.rb +0 -1
- data/stdlib/open-uri.rb +349 -0
- data/stdlib/ostruct.rb +19 -17
- data/stdlib/pathname.rb +22 -22
- data/stdlib/pp.rb +5 -5
- data/stdlib/promise.rb +30 -26
- data/stdlib/rbconfig/sizeof.rb +50 -0
- data/stdlib/securerandom.rb +1 -1
- data/stdlib/set.rb +21 -23
- data/stdlib/singleton.rb +3 -4
- data/stdlib/stringio.rb +33 -0
- data/stdlib/strscan.rb +55 -55
- data/stdlib/template.rb +1 -2
- data/stdlib/thread.rb +6 -7
- data/tasks/benchmarking.rake +1 -1
- data/tasks/building.rake +4 -12
- data/tasks/linting.rake +17 -2
- data/tasks/releasing.rake +84 -0
- data/tasks/testing.rake +57 -15
- data/tasks/testing/mspec_special_calls.rb +23 -4
- data/vendored-minitest/minitest.rb +1 -1
- metadata +169 -168
- data/bin/opal-build +0 -3
- data/exe/opal-mspec +0 -10
- data/lib/opal/nodes/args/initialize_kwargs.rb +0 -29
- data/lib/opal/nodes/args/kwarg.rb +0 -31
- data/lib/opal/nodes/args/kwoptarg.rb +0 -34
- data/lib/opal/nodes/args/kwrestarg.rb +0 -39
- data/lib/opal/nodes/args/mlhsarg.rb +0 -78
- data/lib/opal/nodes/args/normarg.rb +0 -29
- data/lib/opal/nodes/args/optarg.rb +0 -25
- data/lib/opal/nodes/args/post_args.rb +0 -201
- data/lib/opal/nodes/args/post_kwargs.rb +0 -32
- data/lib/opal/nodes/args/restarg.rb +0 -38
- data/lib/opal/nodes/inline_args.rb +0 -60
- data/opal/corelib/string/inheritance.rb +0 -123
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/.eslintrc +0 -17
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/inflight.js +0 -44
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json +0 -52
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js +0 -51
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/package.json +0 -61
- data/stdlib/nodejs/node_modules/glob/node_modules/inflight/test.js +0 -97
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits.js +0 -1
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/package.json +0 -51
- data/stdlib/nodejs/node_modules/glob/node_modules/inherits/test.js +0 -25
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.npmignore +0 -1
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.travis.yml +0 -4
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/LICENSE +0 -23
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/benchmark.js +0 -15
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/browser.js +0 -1181
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore +0 -2
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml +0 -3
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js +0 -8
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore +0 -2
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml +0 -4
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile +0 -6
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js +0 -5
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js +0 -38
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js +0 -56
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js +0 -32
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt +0 -1075
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt +0 -182
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js +0 -9
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js +0 -10
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh +0 -24
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js +0 -15
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js +0 -16
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js +0 -10
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js +0 -13
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js +0 -7
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js +0 -50
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/package.json +0 -60
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/basic.js +0 -399
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/brace-expand.js +0 -45
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/defaults.js +0 -274
- data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js +0 -8
- data/stdlib/nodejs/node_modules/glob/node_modules/once/LICENSE +0 -27
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/README.md +0 -36
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/package.json +0 -52
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js +0 -51
- data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js +0 -33
- data/stdlib/nodejs/node_modules/glob/node_modules/once/once.js +0 -21
- data/stdlib/nodejs/node_modules/glob/node_modules/once/package.json +0 -60
- data/stdlib/nodejs/node_modules/glob/node_modules/once/test/once.js +0 -23
- data/stdlib/nodejs/rubygems.rb +0 -68
- data/stdlib/source_map.rb +0 -5
- data/stdlib/source_map/map.rb +0 -220
- data/stdlib/source_map/mapping.rb +0 -26
- data/stdlib/source_map/offset.rb +0 -88
- data/stdlib/source_map/version.rb +0 -3
- data/stdlib/source_map/vlq.rb +0 -99
- data/stdlib/sourcemap.rb +0 -1
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "opal"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/opal
CHANGED
data/bin/opal-mspec
CHANGED
@@ -1,3 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
specs = ARGV.map do |s|
|
4
|
+
s.end_with?('.rb') ? s : "#{s}/**/*_spec.rb"
|
5
|
+
end
|
6
|
+
|
7
|
+
env = {}
|
8
|
+
env['MSPEC_PATTERN'] = "{#{specs.join(',')}}" if specs.any?
|
9
|
+
exec env, 'rake', 'mspec'
|
10
|
+
|
11
|
+
# RUBYOPT="-rbundler/setup -rmspec/opal/special_calls" bundle exec mspec run -t opal -pspec/ruby/spec_helper spec/ruby/core/true/*
|
data/bin/opal-repl
CHANGED
data/bin/rake
ADDED
data/bin/setup
ADDED
data/docs/compiled_ruby.md
CHANGED
@@ -478,26 +478,107 @@ If you want to integrate a JavaScript library with Opal, so that you can make Ru
|
|
478
478
|
## Ruby from JavaScript
|
479
479
|
|
480
480
|
Accessing classes and methods defined in Opal from the JavaScript runtime is
|
481
|
-
possible via the `Opal`
|
481
|
+
possible via the `Opal` JS object. Consider following code:
|
482
482
|
|
483
483
|
```ruby
|
484
|
+
module Bar
|
485
|
+
BAR = 123
|
486
|
+
end
|
487
|
+
|
484
488
|
class Foo
|
485
|
-
|
486
|
-
|
489
|
+
include Bar
|
490
|
+
FOO = 456
|
491
|
+
|
492
|
+
def foo
|
493
|
+
puts "called #foo on class ::Foo defined in Ruby code"
|
487
494
|
end
|
488
495
|
end
|
496
|
+
|
497
|
+
BAZ = 789
|
498
|
+
```
|
499
|
+
|
500
|
+
### Navigating constants
|
501
|
+
|
502
|
+
Top level constants can be accessed as properties of `Opal`:
|
503
|
+
|
504
|
+
|
505
|
+
```javascript
|
506
|
+
Opal.Object; // => Object
|
507
|
+
Opal.Kernel; // => Kernel
|
508
|
+
Opal.Array; // => Array
|
509
|
+
Opal.RUBY_VERSION; // => "2.3"
|
510
|
+
Opal.Foo; // => Foo
|
511
|
+
Opal.BAZ; // => 789
|
512
|
+
```
|
513
|
+
|
514
|
+
To reach nested constants the safest way is to call `#const_get` on `Object`:
|
515
|
+
|
516
|
+
```javascript
|
517
|
+
Opal.Object.$$const_get('Bar::BAR'); // => 123
|
518
|
+
Opal.Object.$$const_get('Foo::BAR'); // => 123
|
519
|
+
Opal.Object.$$const_get('Foo::FOO'); // => 456
|
520
|
+
Opal.Object.$$const_get('BAZ'); // => 789
|
521
|
+
```
|
522
|
+
|
523
|
+
Constants can also be navigated using the `$$` property, although this is limited to constants defined directly under the current object:
|
524
|
+
|
525
|
+
```javascript
|
526
|
+
Opal.Bar.$$.BAR // => 123
|
527
|
+
Opal.Foo.$$.FOO // => 456
|
528
|
+
Opal.Foo.$$.BAR // => undefined
|
489
529
|
```
|
490
530
|
|
491
|
-
|
531
|
+
|
532
|
+
### Calling methods
|
533
|
+
|
534
|
+
**Methods** are always prefixed by a single `$`:
|
492
535
|
|
493
536
|
```javascript
|
494
|
-
|
495
|
-
//
|
537
|
+
// Equivalent to:
|
538
|
+
// Foo.new.foo
|
539
|
+
Opal.Foo.$new().$foo(); // => "called #foo on class ::Foo defined in Ruby code"
|
540
|
+
|
541
|
+
// Equivalent to:
|
542
|
+
// "hello there".sub('there', 'world')
|
543
|
+
("hello there").$sub('there', 'world'); // => "hello world"
|
496
544
|
```
|
497
545
|
|
498
|
-
|
546
|
+
**Methods names unsupported in JS** should be called using the JS bracket notation:
|
547
|
+
|
548
|
+
```javascript
|
549
|
+
// Equivalent to:
|
550
|
+
// hash = Hash.new["key"] = "value"
|
551
|
+
// hash["key"] = "value"
|
552
|
+
var hash = Opal.Hash.$new(); // => {}
|
553
|
+
hash["$[]="]("key", "value"); // => "value"
|
554
|
+
|
555
|
+
// Equivalent to:
|
556
|
+
// [1,2,3].reverse!
|
557
|
+
[1,2,3]['$reverse!'](); // => [3,2,1]
|
558
|
+
|
559
|
+
// Equivalent to:
|
560
|
+
// 1 == 2
|
561
|
+
(1)['$=='](2); // => false
|
562
|
+
```
|
563
|
+
|
564
|
+
**Passing blocks** from JS is a bit more tricky, so the suggested solution is to use `Opal.send(…)`:
|
565
|
+
|
566
|
+
```javascript
|
567
|
+
// Equivalent to:
|
568
|
+
// [1,2,3].map {|n| n * 2}
|
569
|
+
Opal.send([1,2,3], 'map', [], function(n) {return n * 2}); // => [2,4,6]
|
570
|
+
```
|
571
|
+
|
572
|
+
Alternatively blocks can also be called *the hard way* by assigning the block-function to the property `$$p` of the method:
|
573
|
+
|
574
|
+
```javascript
|
575
|
+
// Equivalent to:
|
576
|
+
// [1,2,3].map {|n| n * 2}
|
577
|
+
array = [1,2,3]
|
578
|
+
array.$map.$$p = function(n) {return n * 2}; // "$$p" stands for "proc"
|
579
|
+
array.$map(); // => [2,4,6]
|
580
|
+
```
|
499
581
|
|
500
|
-
In the case that a method name can't be called directly due to a JavaScript syntax error, you will need to call the method using bracket notation. For example, you can call `foo.$merge(...)` but not `foo.$merge!(...)`, `bar.$fetch('somekey')` but not `bar.$[]('somekey')`. Instead you would write it like this: `foo['$merge!'](...)` or `bar['$[]']('somekey')`.
|
501
582
|
|
502
583
|
|
503
584
|
### Hash
|
data/docs/compiler.md
CHANGED
@@ -9,27 +9,12 @@ other runtime helpers.
|
|
9
9
|
|
10
10
|
The compiler can be broken down into 3 separate stages:
|
11
11
|
|
12
|
-
* lexing
|
13
|
-
* parsing
|
12
|
+
* lexing/parsing
|
14
13
|
* code generation
|
15
14
|
|
16
|
-
### Lexer
|
15
|
+
### Lexer/Parser
|
17
16
|
|
18
|
-
The [opal
|
19
|
-
the `StringScanner` class from the opal stdlib. The source code is scanned
|
20
|
-
and tokens are then provided to the parser. This process simply converts
|
21
|
-
the ruby code given as a string, into a list of tokens representing the
|
22
|
-
parts of the ruby code.
|
23
|
-
|
24
|
-
### Parser
|
25
|
-
|
26
|
-
The [opal parser][parser] is implemented using a standard
|
27
|
-
bison like syntax, but relies on `racc`, a ruby implementation of yacc/bison
|
28
|
-
which is again available in the standard library. The parser takes these tokens
|
29
|
-
generated by the lexer and builds a syntax tree representing the ruby code.
|
30
|
-
This syntax tree is represented by [sexps][sexps]. As
|
31
|
-
ruby is such a complex and dynamic language, there is a lot of interaction
|
32
|
-
between the parser and the lexer, namely through a preserved `lex_state`.
|
17
|
+
The [opal parser][parser] relies on the `parser` gem, see debug/development documentation there to know more about its internals: https://whitequark.github.io/parser/.
|
33
18
|
|
34
19
|
### Code generation
|
35
20
|
|
@@ -42,8 +27,6 @@ code as well as a reference back to the original sexp which is useful for
|
|
42
27
|
generating source maps afterwards.
|
43
28
|
|
44
29
|
|
45
|
-
[lexer]: https://github.com/opal/opal/tree/master/lib/opal/parser/lexer.rb
|
46
|
-
[parser]: https://github.com/opal/opal/tree/master/lib/opal/parser/grammar.y
|
47
30
|
[sexps]: https://github.com/opal/opal/tree/master/lib/opal/parser/sexp.rb
|
48
31
|
[compiler]: https://github.com/opal/opal/tree/master/lib/opal/compiler.rb
|
49
32
|
[fragments]: https://github.com/opal/opal/tree/master/lib/opal/fragment.rb
|
data/docs/jquery.md
CHANGED
@@ -30,27 +30,60 @@ gem 'opal-jquery'
|
|
30
30
|
|
31
31
|
#### Usage
|
32
32
|
|
33
|
-
`opal-jquery` can now be easily added to your opal application sources
|
34
|
-
standard require:
|
33
|
+
`opal-jquery` can now be easily added to your opal application sources:
|
35
34
|
|
36
35
|
```ruby
|
37
36
|
# app/application.rb
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
|
38
|
+
# Remember to compile opal-jquery with your javascript application.
|
39
|
+
# See "Compiling" below for an example on compiling dependencies.
|
40
|
+
require 'opal/jquery'
|
41
41
|
|
42
42
|
alert "Hello from jquery + opal"
|
43
43
|
```
|
44
44
|
|
45
|
-
NOTE: this file requires two important dependencies, `jquery` and `opal-jquery`.
|
46
|
-
You need to bring your own `jquery.js` file as the gem does not include one. If
|
47
|
-
you are using the asset pipeline with rails, then this should be available
|
48
|
-
already, otherwise download a copy and place it into `app/` or whichever directory
|
49
|
-
you are compiling assets from. You can alternatively require a zepto instance.
|
50
|
-
|
51
45
|
The `#alert` method is provided by `opal-jquery`. If the message displays, then
|
52
46
|
`jquery` support should be working.
|
53
47
|
|
48
|
+
|
49
|
+
#### Compiling
|
50
|
+
|
51
|
+
When compiling your application to javascript, you must be sure to include both
|
52
|
+
Opal and Opal-JQuery so they'll be available to your application:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
require 'opal'
|
56
|
+
require 'opal-jquery'
|
57
|
+
|
58
|
+
builder = Opal::Builder.new
|
59
|
+
builder.build('opal')
|
60
|
+
builder.build('opal-jquery')
|
61
|
+
builder.build('./app/application.rb')
|
62
|
+
|
63
|
+
File.write('application.js', builder.to_s)
|
64
|
+
```
|
65
|
+
|
66
|
+
then simply load the compiled file in your html:
|
67
|
+
|
68
|
+
```html
|
69
|
+
<!DOCTYPE html>
|
70
|
+
<html>
|
71
|
+
<head>
|
72
|
+
<script src='https://code.jquery.com/jquery-3.3.1.min.js' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'></script>
|
73
|
+
<script type='text/javascript' src='./application.js'></script>
|
74
|
+
</head>
|
75
|
+
<body></body>
|
76
|
+
</html>
|
77
|
+
```
|
78
|
+
|
79
|
+
NOTE: opal-jquery expects a jquery library to be loaded. This example loads it
|
80
|
+
remotely from jquery.com, but a locally downloaded copy works just as well, or-
|
81
|
+
if you're using rails- jquery may be included automatically.
|
82
|
+
|
83
|
+
This example builds opal, opal-jquery and the application into a single `.js` file,
|
84
|
+
but you may build them separately, if you so choose. Just remember to include
|
85
|
+
each respective script in your html!
|
86
|
+
|
54
87
|
### How does opal-jquery work
|
55
88
|
|
56
89
|
`opal-jquery` provides an `Element` class, whose instances are toll-free
|
data/docs/promises.md
CHANGED
@@ -38,7 +38,7 @@ A promise can only be resolved or rejected once.
|
|
38
38
|
|
39
39
|
### Chaining Promises
|
40
40
|
|
41
|
-
Promises become useful when chained together. The
|
41
|
+
Promises become useful when chained together. The previous example could be extended to get another object from the result of the first request.
|
42
42
|
|
43
43
|
```ruby
|
44
44
|
get_json('/users/1.json').then do |json|
|
data/docs/rails.md
CHANGED
@@ -1,26 +1,30 @@
|
|
1
1
|
# Opal in a Rails application
|
2
2
|
|
3
|
-
Add Opal to your Gemfile:
|
3
|
+
Add Opal to your Rails app's Gemfile:
|
4
4
|
|
5
5
|
``` ruby
|
6
6
|
gem 'opal-rails'
|
7
7
|
```
|
8
8
|
|
9
|
-
|
9
|
+
## Basic usage through the asset pipeline
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
```
|
11
|
+
To configure your asset pipeline to use opal-rails, make sure to `bundle install`, then rename
|
12
|
+
`app/assets/application.js` to `app/assets/application.js.rb` and set its contents to:
|
14
13
|
|
15
|
-
|
14
|
+
```ruby
|
15
|
+
# app/assets/application.js.rb
|
16
|
+
|
17
|
+
# Require the opal runtime and core library
|
18
|
+
require 'opal'
|
19
|
+
|
20
|
+
# For Rails 5.1 and above, otherwise use 'opal_ujs'
|
21
|
+
require 'rails_ujs'
|
16
22
|
|
17
|
-
|
18
|
-
|
23
|
+
# Require of JS libraries will be forwarded to sprockets as is
|
24
|
+
require 'turbolinks'
|
19
25
|
|
20
|
-
|
21
|
-
|
22
|
-
//= require turbolinks
|
23
|
-
//= require_tree .
|
26
|
+
# a Ruby equivalent of the require_tree Sprockets directive is available
|
27
|
+
require_tree '.'
|
24
28
|
```
|
25
29
|
|
26
30
|
Opal requires are forwarded to the Asset Pipeline at compile time (similarly to what happens for RubyMotion). You can use either the `.rb` or `.opal` extension:
|
data/docs/sinatra.md
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# Using Opal with Sinatra
|
2
2
|
|
3
|
-
Add Opal to your Gemfile (or install using `gem`):
|
3
|
+
Add Opal-Sprockets to your Gemfile (or install using `gem`):
|
4
4
|
|
5
5
|
```ruby
|
6
6
|
# Gemfile
|
7
7
|
gem 'sinatra'
|
8
|
-
gem 'opal'
|
8
|
+
gem 'opal-sprockets'
|
9
9
|
```
|
10
10
|
|
11
|
-
Opal uses `sprockets` as its default build system, so the asset-pipeline
|
11
|
+
Opal-Sprockets uses `sprockets` as its default build system, so the asset-pipeline
|
12
12
|
from rails can be mimicked here to map all ruby assets in the `/assets`
|
13
13
|
path to be compiled using opal.
|
14
14
|
|
@@ -16,16 +16,21 @@ path to be compiled using opal.
|
|
16
16
|
|
17
17
|
```ruby
|
18
18
|
# config.ru
|
19
|
-
require 'opal'
|
19
|
+
require 'opal-sprockets'
|
20
20
|
require 'sinatra'
|
21
21
|
|
22
|
-
opal = Opal::Server.new {|s|
|
22
|
+
opal = Opal::Sprockets::Server.new {|s|
|
23
23
|
s.append_path 'app'
|
24
24
|
s.main = 'application'
|
25
25
|
}
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
maps_prefix = Opal::Sprockets::Server::SOURCE_MAPS_PREFIX_PATH
|
28
|
+
maps_app = Opal::SourceMapServer.new(opal.sprockets, maps_prefix)
|
29
|
+
|
30
|
+
map maps_prefix do
|
31
|
+
use Rack::ConditionalGet
|
32
|
+
use Rack::ETag
|
33
|
+
run maps_app
|
29
34
|
end
|
30
35
|
|
31
36
|
map '/assets' do
|
@@ -37,7 +42,9 @@ get '/' do
|
|
37
42
|
<!doctype html>
|
38
43
|
<html>
|
39
44
|
<head>
|
40
|
-
<script src="/assets/
|
45
|
+
<script src="/assets/opal.js"></script>
|
46
|
+
<script src="/assets/application.self.js"></script>
|
47
|
+
<script type="text/javascript">Opal.load("application")</script>
|
41
48
|
</head>
|
42
49
|
</html>
|
43
50
|
HTML
|
data/docs/using_sprockets.md
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
# Opal & Sprockets
|
2
2
|
|
3
|
-
|
4
|
-
class to make it easy to get a rack server up and
|
5
|
-
This server will automatically recompile ruby
|
6
|
-
you just need to refresh your page to autorun.
|
3
|
+
The `opal-sprockets` gem adds sprockets support to Opal, providing a simple
|
4
|
+
`Opal::Sprockets::server` class to make it easy to get a rack server up and
|
5
|
+
running for trying out opal. This server will automatically recompile ruby
|
6
|
+
sources when they change, meaning you just need to refresh your page to autorun.
|
7
7
|
|
8
8
|
## Getting setup
|
9
9
|
|
10
|
-
Add `opal` to
|
10
|
+
Add `rack` & `opal-sprockets` to your `Gemfile`:
|
11
11
|
|
12
12
|
```ruby
|
13
13
|
#Gemfile
|
14
14
|
source 'https://rubygems.org'
|
15
15
|
|
16
|
-
gem '
|
16
|
+
gem 'rack'
|
17
|
+
gem 'opal-sprockets'
|
17
18
|
```
|
18
19
|
|
19
20
|
And install with `bundle install`.
|
@@ -28,17 +29,21 @@ require 'opal'
|
|
28
29
|
puts "hello world"
|
29
30
|
```
|
30
31
|
|
31
|
-
|
32
|
+
|
33
|
+
If we do not provide an HTML index, sprockets will generate one automatically;
|
34
|
+
however, it is often useful to override the default with a custom `erb` file:
|
32
35
|
|
33
36
|
```html
|
37
|
+
<%# index.erb %>
|
34
38
|
<!DOCTYPE html>
|
35
39
|
<html>
|
36
40
|
<head>
|
37
41
|
<meta charset="utf-8">
|
38
42
|
<title>opal server example</title>
|
39
|
-
|
43
|
+
<%= javascript_include_tag @server.main %>
|
40
44
|
</head>
|
41
45
|
<body>
|
46
|
+
you've reached the custom index!
|
42
47
|
</body>
|
43
48
|
</html>
|
44
49
|
```
|
@@ -49,15 +54,15 @@ Finally, we need a html page to run, so create `index.html`:
|
|
49
54
|
|
50
55
|
```ruby
|
51
56
|
# config.ru
|
52
|
-
require '
|
53
|
-
Bundler.require
|
57
|
+
require 'opal-sprockets'
|
54
58
|
|
55
59
|
run Opal::Server.new { |s|
|
56
60
|
s.append_path 'app'
|
57
61
|
|
58
62
|
s.main = 'application'
|
59
63
|
|
60
|
-
|
64
|
+
# override the default index with our custom index
|
65
|
+
s.index_path = 'index.erb'
|
61
66
|
}
|
62
67
|
```
|
63
68
|
|