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/stdlib/template.rb
CHANGED
data/stdlib/thread.rb
CHANGED
@@ -21,7 +21,7 @@ class Thread
|
|
21
21
|
|
22
22
|
# Do not allow creation of new instances.
|
23
23
|
def initialize(*args)
|
24
|
-
|
24
|
+
raise NotImplementedError, 'Thread creation not available'
|
25
25
|
end
|
26
26
|
|
27
27
|
# fiber-local attribute access.
|
@@ -59,6 +59,7 @@ class Thread
|
|
59
59
|
end
|
60
60
|
|
61
61
|
private
|
62
|
+
|
62
63
|
def core_initialize!
|
63
64
|
@thread_locals = {}
|
64
65
|
@fiber_locals = {}
|
@@ -68,7 +69,6 @@ class Thread
|
|
68
69
|
Opal.coerce_to!(key, String, :to_s)
|
69
70
|
end
|
70
71
|
|
71
|
-
public
|
72
72
|
class Queue
|
73
73
|
def initialize
|
74
74
|
clear
|
@@ -90,8 +90,8 @@ class Thread
|
|
90
90
|
|
91
91
|
def pop(non_block = false)
|
92
92
|
if empty?
|
93
|
-
|
94
|
-
|
93
|
+
raise ThreadError, 'Queue empty' if non_block
|
94
|
+
raise ThreadError, 'Deadlock'
|
95
95
|
end
|
96
96
|
|
97
97
|
@storage.shift
|
@@ -111,7 +111,6 @@ class Thread
|
|
111
111
|
@storage.each(&block)
|
112
112
|
end
|
113
113
|
end
|
114
|
-
|
115
114
|
end
|
116
115
|
|
117
116
|
Queue = Thread::Queue
|
@@ -124,7 +123,7 @@ class Mutex
|
|
124
123
|
end
|
125
124
|
|
126
125
|
def lock
|
127
|
-
|
126
|
+
raise ThreadError, 'Deadlock' if @locked
|
128
127
|
@locked = true
|
129
128
|
self
|
130
129
|
end
|
@@ -148,7 +147,7 @@ class Mutex
|
|
148
147
|
end
|
149
148
|
|
150
149
|
def unlock
|
151
|
-
|
150
|
+
raise ThreadError, 'Mutex not locked' unless @locked
|
152
151
|
@locked = false
|
153
152
|
self
|
154
153
|
end
|
data/tasks/benchmarking.rake
CHANGED
@@ -107,7 +107,7 @@ namespace :bench do
|
|
107
107
|
raise ArgumentError, "no files provided" if files.empty?
|
108
108
|
puts "=== Files: #{files.join ', '}"
|
109
109
|
files.each do |bm_path|
|
110
|
-
sh "bundle exec opal -ropal/platform -gbenchmark-ips -rbenchmark/ips -A #{bm_path}"
|
110
|
+
sh "bundle exec opal --dynamic-require ignore --missing-require ignore -ropal/platform -gbenchmark-ips -rbenchmark/ips -A #{bm_path}"
|
111
111
|
end
|
112
112
|
end
|
113
113
|
end
|
data/tasks/building.rake
CHANGED
@@ -17,9 +17,7 @@ task :dist do
|
|
17
17
|
Opal::Config.arity_check_enabled = false
|
18
18
|
Opal::Config.const_missing_enabled = false
|
19
19
|
Opal::Config.dynamic_require_severity = :warning
|
20
|
-
|
21
|
-
# Hike gem is required to build opal-builder
|
22
|
-
Opal.use_gem 'hike'
|
20
|
+
Opal::Config.missing_require_severity = :error
|
23
21
|
|
24
22
|
build_dir = ENV['DIR'] || 'build'
|
25
23
|
files = ENV['FILES'] ? ENV['FILES'].split(',') :
|
@@ -34,9 +32,9 @@ task :dist do
|
|
34
32
|
log << "* building #{lib}...".ljust(width+'* building ... '.size)
|
35
33
|
$stdout.flush
|
36
34
|
|
37
|
-
# Set requirable to true
|
38
|
-
|
39
|
-
src = Opal::Builder.build(lib, requirable:
|
35
|
+
# Set requirable to true, unless building opal. This allows opal to be auto-loaded.
|
36
|
+
requirable = (lib != 'opal')
|
37
|
+
src = Opal::Builder.build(lib, requirable: requirable).to_s
|
40
38
|
min = Opal::Util.uglify src
|
41
39
|
gzp = Opal::Util.gzip min
|
42
40
|
|
@@ -54,12 +52,6 @@ task :dist do
|
|
54
52
|
end.map(&:value).map(&method(:puts))
|
55
53
|
end
|
56
54
|
|
57
|
-
desc 'Rebuild grammar.rb for opal parser'
|
58
|
-
task :racc do
|
59
|
-
debug_option = '--debug' if ENV['RACC_DEBUG']
|
60
|
-
sh "racc #{debug_option} -l -o lib/opal/parser/grammar.rb lib/opal/parser/grammar.y"
|
61
|
-
end
|
62
|
-
|
63
55
|
desc 'Remove any generated file.'
|
64
56
|
task :clobber do
|
65
57
|
rm_r './build'
|
data/tasks/linting.rake
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import 'tasks/building.rake'
|
1
2
|
desc "Build *corelib* and *stdlib* and lint the result"
|
2
3
|
task :jshint do
|
3
4
|
dir = 'tmp/lint'
|
@@ -5,7 +6,8 @@ task :jshint do
|
|
5
6
|
puts "= Checking distributed files..."
|
6
7
|
unless ENV['SKIP_BUILD']
|
7
8
|
rm_rf dir if File.exist? dir
|
8
|
-
|
9
|
+
ENV['DIR'] = dir
|
10
|
+
Rake::Task[:dist].invoke
|
9
11
|
end
|
10
12
|
|
11
13
|
Dir["#{dir}/*.js"].each {|path|
|
@@ -19,7 +21,8 @@ task :jshint do
|
|
19
21
|
js_paths = []
|
20
22
|
Dir['opal/{opal,corelib}/*.rb'].each do |path|
|
21
23
|
js_path = "#{dir}/#{path.tr('/', '-')}.js"
|
22
|
-
|
24
|
+
Bundler::SharedHelpers.set_bundle_environment
|
25
|
+
File.write js_path, Opal.compile(File.read(path), file: path, dynamic_require_severity: :ignore)
|
23
26
|
js_paths << js_path
|
24
27
|
end
|
25
28
|
js_paths.each do |js_path|
|
@@ -27,3 +30,15 @@ task :jshint do
|
|
27
30
|
end
|
28
31
|
sh "jshint --verbose opal/corelib/runtime.js"
|
29
32
|
end
|
33
|
+
|
34
|
+
require 'rubocop/rake_task'
|
35
|
+
desc 'Run RuboCop on lib/, opal/ and stdlib/ directories'
|
36
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
37
|
+
# TODO: enable it back after releasing https://github.com/bbatsov/rubocop/pull/5633
|
38
|
+
# task.options << '--fail-fast'
|
39
|
+
task.options << '--extra-details'
|
40
|
+
task.options << '--display-style-guide'
|
41
|
+
task.options << '--parallel'
|
42
|
+
end
|
43
|
+
|
44
|
+
task :lint => [:jshint, :rubocop]
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler'
|
4
|
+
Bundler.require
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
# Let the release process update the changelog from github
|
8
|
+
task :release => :changelog
|
9
|
+
|
10
|
+
github_releases = -> do
|
11
|
+
require 'date'
|
12
|
+
require 'octokit'
|
13
|
+
Octokit.auto_paginate = true
|
14
|
+
|
15
|
+
Octokit.releases('opal/opal').sort_by do |r|
|
16
|
+
Gem::Version.new(r[:tag_name][1..-1])
|
17
|
+
end.select do |release|
|
18
|
+
release[:tag_name] =~ /^v(\d+)(\.\d+)*$/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
expand_pull_request_links = -> string {
|
23
|
+
string.gsub(/\(#(\d+)\)/, '([#\1](https://github.com/opal/opal/pull/\1))')
|
24
|
+
}
|
25
|
+
|
26
|
+
changelog_entry = -> (
|
27
|
+
tag_name:,
|
28
|
+
release_date:,
|
29
|
+
previous_tag_name:,
|
30
|
+
body:
|
31
|
+
) do
|
32
|
+
compare_url = "https://github.com/opal/opal/compare/#{previous_tag_name}...#{tag_name}"
|
33
|
+
version_name = tag_name == 'HEAD' ? 'Unreleased' : tag_name.sub(/^v/, '')
|
34
|
+
[
|
35
|
+
"## [#{version_name}](#{compare_url}) - #{release_date}\n\n\n",
|
36
|
+
expand_pull_request_links[body.gsub("\r\n", "\n").strip],
|
37
|
+
].join('')
|
38
|
+
end
|
39
|
+
|
40
|
+
CHANGELOG_HEADING = <<~MARKDOWN
|
41
|
+
# Change Log
|
42
|
+
|
43
|
+
All notable changes to this project will be documented in this file.
|
44
|
+
This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
45
|
+
|
46
|
+
Changes are grouped as follows:
|
47
|
+
- **Added** for new features.
|
48
|
+
- **Changed** for changes in existing functionality.
|
49
|
+
- **Deprecated** for once-stable features removed in upcoming releases.
|
50
|
+
- **Removed** for deprecated features removed in this release.
|
51
|
+
- **Fixed** for any bug fixes.
|
52
|
+
- **Security** to invite users to upgrade in case of vulnerabilities.
|
53
|
+
MARKDOWN
|
54
|
+
|
55
|
+
desc "Update CHANGELOG.md usign info from published GitHub releases (the first unreleased section is preserved)"
|
56
|
+
task :changelog do
|
57
|
+
changelog_path = "#{__dir__}/../CHANGELOG.md"
|
58
|
+
unreleased_path = "#{__dir__}/../UNRELEASED.md"
|
59
|
+
changelog_entries = []
|
60
|
+
previous_tag_name = '000000'
|
61
|
+
|
62
|
+
github_releases.call.each do |release|
|
63
|
+
changelog_entries.unshift changelog_entry.call(
|
64
|
+
tag_name: release[:tag_name],
|
65
|
+
release_date: release[:created_at].to_date.iso8601, # YYYY-MM-DD
|
66
|
+
previous_tag_name: previous_tag_name,
|
67
|
+
body: release[:body],
|
68
|
+
)
|
69
|
+
previous_tag_name = release[:tag_name]
|
70
|
+
end
|
71
|
+
|
72
|
+
changelog_entries.unshift changelog_entry.call(
|
73
|
+
tag_name: 'HEAD',
|
74
|
+
release_date: 'unreleased',
|
75
|
+
previous_tag_name: previous_tag_name,
|
76
|
+
body: File.read(unreleased_path),
|
77
|
+
)
|
78
|
+
|
79
|
+
changelog_entries.unshift CHANGELOG_HEADING
|
80
|
+
|
81
|
+
changelog_entries << nil # for the final newlines
|
82
|
+
|
83
|
+
File.write changelog_path, changelog_entries.join("\n\n\n\n\n")
|
84
|
+
end
|
data/tasks/testing.rake
CHANGED
@@ -3,6 +3,11 @@ RSpec::Core::RakeTask.new(:rspec) do |t|
|
|
3
3
|
t.pattern = 'spec/lib/**/*_spec.rb'
|
4
4
|
end
|
5
5
|
|
6
|
+
if ENV.key?('RUBYSPEC')
|
7
|
+
warn "Did you mean RUBYSPECS=...? (RUBYSPEC was found among ENV variables)"
|
8
|
+
exit 1
|
9
|
+
end
|
10
|
+
|
6
11
|
module Testing
|
7
12
|
extend self
|
8
13
|
|
@@ -20,7 +25,6 @@ module Testing
|
|
20
25
|
mspec/helpers/tmp
|
21
26
|
mspec/helpers/environment
|
22
27
|
mspec/guards/block_device
|
23
|
-
mspec/guards/endian
|
24
28
|
a_file
|
25
29
|
lib/spec_helper
|
26
30
|
mspec/commands/mspec-run
|
@@ -32,6 +36,7 @@ module Testing
|
|
32
36
|
suite = env['SUITE']
|
33
37
|
pattern = env['PATTERN']
|
34
38
|
whitelist_pattern = !!env['RUBYSPECS']
|
39
|
+
env['OPAL_PLATFORM_NAME'] = RbConfig::CONFIG['host_os'] unless env['OPAL_PLATFORM_NAME']
|
35
40
|
|
36
41
|
excepting = []
|
37
42
|
rubyspecs = File.read('spec/ruby_specs').lines.reject do |l|
|
@@ -139,6 +144,7 @@ module Testing
|
|
139
144
|
|
140
145
|
module Minitest
|
141
146
|
extend self
|
147
|
+
extend FileUtils
|
142
148
|
|
143
149
|
def write_file(filename, files = [], env = {})
|
144
150
|
env_data = env.map{ |k,v| "ENV[#{k.inspect}] = #{v.to_s.inspect}" unless v.nil? }.join("\n")
|
@@ -227,6 +233,38 @@ module Testing
|
|
227
233
|
end
|
228
234
|
end
|
229
235
|
|
236
|
+
class HTTPServer
|
237
|
+
def with_server
|
238
|
+
begin
|
239
|
+
server = Process.spawn 'ruby test/opal/http_server.rb'
|
240
|
+
puts 'Waiting for server…'
|
241
|
+
sleep 0.1 until sinatra_server_running?
|
242
|
+
puts 'Server ready.'
|
243
|
+
yield self
|
244
|
+
ensure
|
245
|
+
if windows?
|
246
|
+
# https://blog.simplificator.com/2016/01/18/how-to-kill-processes-on-windows-using-ruby/
|
247
|
+
# system("taskkill /f /pid #{pid}")
|
248
|
+
Process.kill("KILL", server)
|
249
|
+
else
|
250
|
+
Process.kill(:TERM, server)
|
251
|
+
end
|
252
|
+
Process.wait(server)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def windows?
|
257
|
+
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
|
258
|
+
end
|
259
|
+
|
260
|
+
def sinatra_server_running?
|
261
|
+
puts "Connecting to localhost:4567..."
|
262
|
+
TCPSocket.new('localhost', '4567').close
|
263
|
+
true
|
264
|
+
rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL
|
265
|
+
false
|
266
|
+
end
|
267
|
+
end
|
230
268
|
end
|
231
269
|
|
232
270
|
|
@@ -235,8 +273,8 @@ Use PATTERN environment variable to manually set the glob for specs:
|
|
235
273
|
|
236
274
|
# Will run all specs matching the specified pattern.
|
237
275
|
# (Note: the ruby_specs filters will still apply)
|
238
|
-
bundle exec rake
|
239
|
-
bundle exec rake
|
276
|
+
bundle exec rake mspec_nodejs PATTERN=spec/ruby/core/module/class_variable*_spec.rb
|
277
|
+
bundle exec rake mspec_nodejs PATTERN=spec/ruby/core/numeric/**_spec.rb
|
240
278
|
DESC
|
241
279
|
|
242
280
|
platforms = %w[nodejs server chrome]
|
@@ -261,7 +299,7 @@ platforms.each do |platform|
|
|
261
299
|
stubs = Testing::MSpec.stubs.map{|s| "-s#{s}"}.join(' ')
|
262
300
|
|
263
301
|
sh "ruby -w -rbundler/setup -r#{__dir__}/testing/mspec_special_calls "\
|
264
|
-
"exe/opal -
|
302
|
+
"exe/opal -Ispec/mspec/lib -Ispec -Ilib #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
|
265
303
|
|
266
304
|
if bm_filepath
|
267
305
|
puts "Benchmark results have been written to #{bm_filepath}"
|
@@ -283,18 +321,22 @@ platforms.each do |platform|
|
|
283
321
|
ruby/test_call.rb
|
284
322
|
opal/test_keyword.rb
|
285
323
|
opal/test_base64.rb
|
324
|
+
opal/test_openuri.rb
|
286
325
|
opal/unsupported_and_bugs.rb
|
326
|
+
opal/test_matrix.rb
|
287
327
|
]
|
288
328
|
end
|
329
|
+
Testing::HTTPServer.new.with_server do |session|
|
330
|
+
filename = "tmp/minitest_#{suite}_#{platform}.rb"
|
331
|
+
files.push('nodejs') if platform == 'nodejs'
|
332
|
+
Testing::Minitest.write_file(filename, files, ENV)
|
289
333
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
stubs = "-soptparse -sio/console -stimeout -smutex_m -srubygems -stempfile -smonitor"
|
294
|
-
includes = "-Itest -Ilib -Ivendored-minitest #{includes}"
|
334
|
+
stubs = "-soptparse -sio/console -stimeout -smutex_m -srubygems -stempfile -smonitor"
|
335
|
+
includes = "-Itest -Ilib -Ivendored-minitest #{includes}"
|
295
336
|
|
296
|
-
|
297
|
-
"exe/opal
|
337
|
+
sh "ruby -rbundler/setup "\
|
338
|
+
"exe/opal #{includes} #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
|
339
|
+
end
|
298
340
|
end
|
299
341
|
end
|
300
342
|
end
|
@@ -302,15 +344,15 @@ end
|
|
302
344
|
# The name ends with the platform, which is of course mandated in this case
|
303
345
|
desc "Run the Node.js Minitest suite on Node.js"
|
304
346
|
task :minitest_node_nodejs do
|
305
|
-
Opal.use_gem 'hike'
|
306
|
-
|
307
347
|
platform = 'nodejs'
|
308
348
|
files = %w[
|
309
349
|
nodejs
|
310
350
|
opal-parser
|
311
351
|
nodejs/test_file.rb
|
312
352
|
nodejs/test_dir.rb
|
353
|
+
nodejs/test_env.rb
|
313
354
|
nodejs/test_io.rb
|
355
|
+
nodejs/test_file_encoding.rb
|
314
356
|
nodejs/test_opal_builder.rb
|
315
357
|
]
|
316
358
|
|
@@ -321,7 +363,7 @@ task :minitest_node_nodejs do
|
|
321
363
|
includes = "-Itest -Ilib -Ivendored-minitest"
|
322
364
|
|
323
365
|
sh "ruby -rbundler/setup "\
|
324
|
-
"exe/opal
|
366
|
+
"exe/opal #{includes} #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
|
325
367
|
end
|
326
368
|
|
327
369
|
desc 'Run smoke tests with opal-rspec to see if something is broken'
|
@@ -340,7 +382,7 @@ task :smoke_test do
|
|
340
382
|
|
341
383
|
cd opal_rspec_dir do
|
342
384
|
Bundler.with_clean_env do
|
343
|
-
sh 'bundle install'
|
385
|
+
sh 'bundle check && bundle update opal-rspec || bundle install'
|
344
386
|
sh %{bundle exec opal-rspec --color --default-path=../../spec ../../spec/lib/deprecations_spec.rb > #{actual_output_path}}
|
345
387
|
|
346
388
|
actual_output = File.read(actual_output_path)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'opal/nodes/call'
|
2
|
+
require 'opal/ast/builder'
|
2
3
|
|
3
4
|
class Opal::Nodes::CallNode
|
4
5
|
# Rubyspec uses this call to load in language specific features at runtime.
|
@@ -28,14 +29,20 @@ class Opal::Nodes::CallNode
|
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
32
|
+
has_xstring = -> node {
|
33
|
+
next if node.nil? || !node.respond_to?(:type)
|
34
|
+
node.type == :xstr || (node.children && node.children.any?(&has_xstring))
|
35
|
+
}
|
36
|
+
|
31
37
|
add_special :platform_is_not do |compile_default|
|
32
|
-
|
33
|
-
|
34
|
-
|
38
|
+
next if arglist.children.include?(s(:sym, :opal))
|
39
|
+
next if children.any?(&has_xstring)
|
40
|
+
|
41
|
+
compile_default.call
|
35
42
|
end
|
36
43
|
|
37
44
|
add_special :platform_is do |compile_default|
|
38
|
-
if arglist.children.include?(s(:sym, :opal))
|
45
|
+
if arglist.children.include?(s(:sym, :opal)) || !children.any?(&has_xstring)
|
39
46
|
compile_default.call
|
40
47
|
end
|
41
48
|
end
|
@@ -69,5 +76,17 @@ def opal_unsupported_filter(filter_name, &block)
|
|
69
76
|
Opal::Rubyspec::FiltersRewriter.instance_eval(&block)
|
70
77
|
end
|
71
78
|
|
79
|
+
# In the test environment we have to parse invalid characters
|
80
|
+
# Otherwise the parser throws an error and the whole suites aborts
|
81
|
+
class Opal::AST::Builder
|
82
|
+
def string_value(token)
|
83
|
+
unless token[0].valid_encoding?
|
84
|
+
diagnostic(:warning, :invalid_encoding, nil, token[1])
|
85
|
+
end
|
86
|
+
|
87
|
+
token[0]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
72
91
|
Dir[File.expand_path('../../../spec/filters/unsupported/**/*.rb', __FILE__)].each { |f| require f }
|
73
92
|
Dir[File.expand_path('../../../spec/filters/bugs/**/*.rb', __FILE__)].each { |f| require f }
|