opal 0.10.6 → 0.11.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.codeclimate.yml +19 -0
- data/.gitmodules +1 -1
- data/.jshintrc +1 -2
- data/.travis.yml +26 -18
- data/CHANGELOG.md +89 -23
- data/{CODE_OF_CONDUCT.md → CONDUCT.md} +0 -0
- data/Gemfile +19 -21
- data/HACKING.md +2 -0
- data/README.md +7 -6
- data/Rakefile +1 -1
- data/appveyor.yml +21 -4
- data/benchmark-ips/bm_case.rb +33 -0
- data/benchmark-ips/bm_constants_lookup.rb +13 -0
- data/benchmark-ips/bm_is_number.rb +29 -0
- data/benchmark-ips/bm_symbol_to_proc.rb +19 -0
- data/benchmark/bm_constant_lookup_big.rb +799 -0
- data/benchmark/bm_constant_lookup_small.rb +59 -0
- data/benchmark/bm_module_definition_big.rb +400 -0
- data/benchmark/bm_module_definition_small.rb +30 -0
- data/bin/opal-repl +23 -1
- data/docs/compiled_ruby.md +16 -14
- data/docs/faq.md +3 -3
- data/docs/rspec.md +2 -1
- data/docs/unsupported_features.md +6 -4
- data/examples/rack/Gemfile +1 -0
- data/examples/rack/app/application.rb +14 -3
- data/examples/rack/app/user.rb +2 -0
- data/examples/rack/config.ru +1 -1
- data/examples/rack/index.html.erb +1 -0
- data/lib/opal.rb +6 -1
- data/lib/opal/ast/builder.rb +17 -0
- data/lib/opal/ast/node.rb +30 -0
- data/lib/opal/builder.rb +14 -3
- data/lib/opal/builder_processors.rb +1 -0
- data/lib/opal/cli.rb +45 -59
- data/lib/opal/cli_options.rb +11 -7
- data/lib/opal/cli_runners.rb +1 -0
- data/lib/opal/cli_runners/applescript.rb +3 -3
- data/lib/opal/cli_runners/nashorn.rb +1 -0
- data/lib/opal/cli_runners/nodejs.rb +4 -1
- data/lib/opal/cli_runners/phantom.js +1 -2
- data/lib/opal/cli_runners/phantomjs.rb +3 -2
- data/lib/opal/cli_runners/server.rb +1 -0
- data/lib/opal/compiler.rb +145 -94
- data/lib/opal/config.rb +1 -0
- data/lib/opal/deprecations.rb +18 -0
- data/lib/opal/erb.rb +1 -0
- data/lib/opal/errors.rb +1 -0
- data/lib/opal/fragment.rb +1 -0
- data/lib/opal/hike_path_finder.rb +1 -0
- data/lib/opal/nodes.rb +3 -0
- data/lib/opal/nodes/arglist.rb +2 -1
- data/lib/opal/nodes/args/initialize_kwargs.rb +1 -0
- data/lib/opal/nodes/args/kwarg.rb +7 -7
- data/lib/opal/nodes/args/kwoptarg.rb +6 -7
- data/lib/opal/nodes/args/kwrestarg.rb +5 -5
- data/lib/opal/nodes/args/mlhsarg.rb +3 -2
- data/lib/opal/nodes/args/normarg.rb +6 -7
- data/lib/opal/nodes/args/optarg.rb +5 -7
- data/lib/opal/nodes/args/post_args.rb +6 -5
- data/lib/opal/nodes/args/post_kwargs.rb +1 -0
- data/lib/opal/nodes/args/restarg.rb +7 -7
- data/lib/opal/nodes/array.rb +1 -0
- data/lib/opal/nodes/base.rb +24 -3
- data/lib/opal/nodes/call.rb +167 -155
- data/lib/opal/nodes/call_special.rb +31 -217
- data/lib/opal/nodes/case.rb +36 -22
- data/lib/opal/nodes/class.rb +4 -3
- data/lib/opal/nodes/constants.rb +28 -48
- data/lib/opal/nodes/csend.rb +25 -0
- data/lib/opal/nodes/def.rb +49 -16
- data/lib/opal/nodes/defined.rb +170 -60
- data/lib/opal/nodes/definitions.rb +40 -133
- data/lib/opal/nodes/defs.rb +29 -0
- data/lib/opal/nodes/for.rb +52 -25
- data/lib/opal/nodes/hash.rb +12 -35
- data/lib/opal/nodes/helpers.rb +27 -54
- data/lib/opal/nodes/if.rb +21 -32
- data/lib/opal/nodes/inline_args.rb +12 -13
- data/lib/opal/nodes/iter.rb +61 -36
- data/lib/opal/nodes/literal.rb +189 -116
- data/lib/opal/nodes/logic.rb +20 -25
- data/lib/opal/nodes/masgn.rb +20 -18
- data/lib/opal/nodes/module.rb +10 -11
- data/lib/opal/nodes/node_with_args.rb +14 -17
- data/lib/opal/nodes/rescue.rb +37 -70
- data/lib/opal/nodes/runtime_helpers.rb +8 -3
- data/lib/opal/nodes/scope.rb +9 -5
- data/lib/opal/nodes/singleton_class.rb +4 -3
- data/lib/opal/nodes/super.rb +115 -87
- data/lib/opal/nodes/top.rb +7 -2
- data/lib/opal/nodes/variables.rb +46 -35
- data/lib/opal/nodes/while.rb +11 -1
- data/lib/opal/nodes/yield.rb +1 -17
- data/lib/opal/parser.rb +28 -770
- data/lib/opal/path_reader.rb +5 -1
- data/lib/opal/paths.rb +10 -4
- data/lib/opal/regexp_anchors.rb +1 -0
- data/lib/opal/rewriter.rb +60 -0
- data/lib/opal/rewriters/base.rb +60 -0
- data/lib/opal/rewriters/binary_operator_assignment.rb +144 -0
- data/lib/opal/rewriters/block_to_iter.rb +17 -0
- data/lib/opal/rewriters/break_finder.rb +34 -0
- data/lib/opal/rewriters/dot_js_syntax.rb +60 -0
- data/lib/opal/rewriters/explicit_writer_return.rb +58 -0
- data/lib/opal/rewriters/js_reserved_words.rb +111 -0
- data/lib/opal/rewriters/logical_operator_assignment.rb +155 -0
- data/lib/opal/rewriters/opal_engine_check.rb +42 -0
- data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +67 -0
- data/lib/opal/server.rb +4 -0
- data/lib/opal/simple_server.rb +100 -0
- data/lib/opal/source_map.rb +1 -1
- data/lib/opal/util.rb +5 -5
- data/lib/opal/version.rb +2 -1
- data/lib/tilt/opal.rb +1 -0
- data/opal.gemspec +8 -7
- data/opal/README.md +1 -1
- data/opal/corelib/array.rb +137 -83
- data/opal/corelib/basic_object.rb +6 -6
- data/opal/corelib/class.rb +14 -11
- data/opal/corelib/complex.rb +5 -1
- data/opal/corelib/constants.rb +3 -3
- data/opal/corelib/enumerable.rb +129 -11
- data/opal/corelib/error.rb +35 -17
- data/opal/corelib/file.rb +65 -170
- data/opal/corelib/hash.rb +128 -13
- data/opal/corelib/helpers.rb +12 -15
- data/opal/corelib/io.rb +1 -0
- data/opal/corelib/kernel.rb +40 -21
- data/opal/corelib/marshal/read_buffer.rb +1 -1
- data/opal/corelib/method.rb +33 -13
- data/opal/corelib/module.rb +133 -81
- data/opal/corelib/number.rb +141 -25
- data/opal/corelib/numeric.rb +0 -8
- data/opal/corelib/process.rb +44 -4
- data/opal/corelib/random.rb +117 -0
- data/opal/corelib/random/seedrandom.js.rb +15 -0
- data/opal/corelib/range.rb +133 -10
- data/opal/corelib/regexp.rb +37 -9
- data/opal/corelib/runtime.js +601 -390
- data/opal/corelib/string.rb +39 -8
- data/opal/corelib/string/encoding.rb +51 -7
- data/opal/corelib/struct.rb +20 -0
- data/opal/corelib/time.rb +3 -3
- data/opal/corelib/variables.rb +1 -1
- data/opal/opal.rb +1 -0
- data/spec/filters/bugs/array.rb +5 -1
- data/spec/filters/bugs/basicobject.rb +2 -5
- data/spec/filters/bugs/bigdecimal.rb +8 -22
- data/spec/filters/bugs/class.rb +2 -1
- data/spec/filters/bugs/comparable.rb +5 -0
- data/spec/filters/bugs/date.rb +3 -3
- data/spec/filters/bugs/enumerable.rb +4 -11
- data/spec/filters/bugs/enumerator.rb +2 -4
- data/spec/filters/bugs/exception.rb +16 -2
- data/spec/filters/bugs/file.rb +8 -0
- data/spec/filters/bugs/float.rb +7 -1
- data/spec/filters/bugs/hash.rb +6 -2
- data/spec/filters/bugs/integer.rb +2 -0
- data/spec/filters/bugs/io.rb +8 -0
- data/spec/filters/bugs/kernel.rb +9 -138
- data/spec/filters/bugs/language.rb +89 -174
- data/spec/filters/bugs/marshal.rb +33 -35
- data/spec/filters/bugs/method.rb +0 -24
- data/spec/filters/bugs/module.rb +19 -55
- data/spec/filters/bugs/numeric.rb +0 -119
- data/spec/filters/bugs/pathname.rb +2 -0
- data/spec/filters/bugs/proc.rb +5 -4
- data/spec/filters/bugs/random.rb +7 -0
- data/spec/filters/bugs/range.rb +12 -120
- data/spec/filters/bugs/rational.rb +1 -1
- data/spec/filters/bugs/regexp.rb +2 -40
- data/spec/filters/bugs/set.rb +0 -1
- data/spec/filters/bugs/string.rb +5 -8
- data/spec/filters/bugs/stringscanner.rb +11 -19
- data/spec/filters/bugs/time.rb +7 -1
- data/spec/filters/bugs/unboundmethod.rb +1 -11
- data/spec/filters/unsupported/array.rb +5 -1
- data/spec/filters/unsupported/basicobject.rb +1 -1
- data/spec/filters/unsupported/bignum.rb +4 -1
- data/spec/filters/unsupported/class.rb +1 -1
- data/spec/filters/unsupported/delegator.rb +1 -1
- data/spec/filters/unsupported/enumerable.rb +1 -1
- data/spec/filters/unsupported/enumerator.rb +1 -1
- data/spec/filters/unsupported/file.rb +4 -0
- data/spec/filters/unsupported/fixnum.rb +1 -1
- data/spec/filters/unsupported/float.rb +4 -1
- data/spec/filters/unsupported/freeze.rb +27 -5
- data/spec/filters/unsupported/hash.rb +7 -15
- data/spec/filters/unsupported/integer.rb +1 -1
- data/spec/filters/unsupported/kernel.rb +2 -1
- data/spec/filters/unsupported/language.rb +6 -1
- data/spec/filters/unsupported/marshal.rb +1 -1
- data/spec/filters/unsupported/matchdata.rb +4 -1
- data/spec/filters/unsupported/math.rb +1 -1
- data/spec/filters/unsupported/pathname.rb +1 -1
- data/spec/filters/unsupported/privacy.rb +141 -9
- data/spec/filters/unsupported/proc.rb +1 -1
- data/spec/filters/unsupported/random.rb +4 -0
- data/spec/filters/unsupported/range.rb +7 -0
- data/spec/filters/unsupported/regexp.rb +25 -15
- data/spec/filters/unsupported/set.rb +1 -1
- data/spec/filters/unsupported/singleton.rb +1 -1
- data/spec/filters/unsupported/string.rb +110 -101
- data/spec/filters/unsupported/struct.rb +1 -1
- data/spec/filters/unsupported/symbol.rb +2 -1
- data/spec/filters/unsupported/taint.rb +22 -7
- data/spec/filters/unsupported/thread.rb +1 -1
- data/spec/filters/unsupported/time.rb +1 -1
- data/spec/lib/builder_spec.rb +17 -0
- data/spec/lib/cli_spec.rb +37 -8
- data/spec/lib/compiler/call_spec.rb +98 -66
- data/spec/lib/compiler_spec.rb +39 -30
- data/spec/lib/dependency_resolver_spec.rb +2 -2
- data/spec/lib/deprecations_spec.rb +16 -0
- data/spec/lib/fixtures/source_location_test.rb +7 -0
- data/spec/lib/rewriters/binary_operator_assignment_spec.rb +151 -0
- data/spec/lib/rewriters/block_to_iter_spec.rb +28 -0
- data/spec/lib/rewriters/dot_js_syntax_spec.rb +108 -0
- data/spec/lib/rewriters/explicit_writer_return_spec.rb +186 -0
- data/spec/lib/rewriters/js_reserved_words_spec.rb +116 -0
- data/spec/lib/rewriters/logical_operator_assignment_spec.rb +202 -0
- data/spec/lib/rewriters/opal_engine_check_spec.rb +82 -0
- data/spec/lib/rewriters/rubyspec/filters_rewriter_spec.rb +53 -0
- data/spec/lib/simple_server_spec.rb +54 -0
- data/spec/mspec-opal/formatters.rb +65 -17
- data/spec/mspec-opal/runner.rb +47 -67
- data/spec/opal/core/date_spec.rb +14 -0
- data/spec/opal/core/exception_spec.rb +10 -0
- data/spec/opal/core/hash/internals_spec.rb +10 -10
- data/spec/opal/core/kernel/rand_spec.rb +0 -4
- data/spec/opal/core/kernel/respond_to_spec.rb +5 -2
- data/spec/opal/core/language/constant_lookup_spec.rb +38 -0
- data/spec/opal/core/language/predefined_spec.rb +1 -1
- data/spec/opal/core/language/safe_navigator_spec.rb +7 -0
- data/spec/opal/core/language/send_spec.rb +1 -9
- data/spec/opal/core/language/string_spec.rb +8 -8
- data/spec/opal/core/language/versions/def_2_0_spec.rb +0 -4
- data/spec/opal/core/language_spec.rb +32 -0
- data/spec/opal/core/module/const_get_spec.rb +1 -1
- data/spec/opal/core/runtime/is_a_spec.rb +36 -0
- data/spec/opal/core/runtime/rescue_spec.rb +35 -0
- data/spec/opal/core/runtime_spec.rb +4 -4
- data/spec/opal/core/string_spec.rb +8 -8
- data/spec/opal/core/time_spec.rb +26 -17
- data/spec/opal/stdlib/erb/quoted.opalerb +1 -1
- data/spec/opal/stdlib/json/parse_spec.rb +4 -0
- data/spec/opal/stdlib/native/hash_spec.rb +16 -0
- data/spec/ruby_specs +2 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/support/rewriters_helper.rb +24 -0
- data/stdlib/base64.rb +4 -2
- data/stdlib/bigdecimal/bignumber.js.rb +1 -1
- data/stdlib/date.rb +18 -19
- data/stdlib/json.rb +16 -4
- data/stdlib/nashorn/file.rb +15 -0
- data/stdlib/native.rb +21 -12
- data/stdlib/nodejs/dir.rb +1 -1
- data/stdlib/nodejs/file.rb +49 -20
- data/stdlib/nodejs/io.rb +22 -1
- data/stdlib/nodejs/{node_modules/js-yaml/dist/js-yaml.js → js-yaml-3-6-1.js} +815 -626
- data/stdlib/nodejs/kernel.rb +3 -1
- data/stdlib/nodejs/package.json +0 -1
- data/stdlib/nodejs/stacktrace.rb +163 -0
- data/stdlib/nodejs/yaml.rb +2 -1
- data/stdlib/opal-platform.rb +15 -0
- data/stdlib/opal/platform.rb +5 -13
- data/stdlib/pathname.rb +1 -1
- data/stdlib/strscan.rb +15 -1
- data/stdlib/yaml.rb +1 -1
- data/tasks/benchmarking.rake +9 -0
- data/tasks/building.rake +24 -20
- data/tasks/linting.rake +24 -13
- data/tasks/testing.rake +322 -205
- data/tasks/testing/mspec_special_calls.rb +44 -15
- data/tasks/testing/opal_rspec_smoketest.Gemfile +13 -0
- data/test/nodejs/fixtures/hello.rb +1 -0
- data/test/nodejs/test_file.rb +57 -0
- data/test/nodejs/test_io.rb +18 -0
- data/test/nodejs/test_opal_builder.rb +12 -0
- data/test/opal/unsupported_and_bugs.rb +9 -0
- metadata +127 -240
- data/lib/opal/parser/grammar.rb +0 -6157
- data/lib/opal/parser/grammar.y +0 -2011
- data/lib/opal/parser/keywords.rb +0 -66
- data/lib/opal/parser/lexer.rb +0 -1352
- data/lib/opal/parser/parser_scope.rb +0 -28
- data/lib/opal/parser/sexp.rb +0 -90
- data/lib/opal/sprockets.rb +0 -77
- data/lib/opal/sprockets/environment.rb +0 -23
- data/lib/opal/sprockets/erb.rb +0 -28
- data/lib/opal/sprockets/path_reader.rb +0 -36
- data/lib/opal/sprockets/processor.rb +0 -173
- data/lib/opal/sprockets/server.rb +0 -133
- data/lib/opal/sprockets/source_map_header_patch.rb +0 -41
- data/lib/opal/sprockets/source_map_server.rb +0 -117
- data/spec/filters/bugs/compiler_opal.rb +0 -5
- data/spec/filters/bugs/language_opal.rb +0 -88
- data/spec/filters/unsupported/module.rb +0 -8
- data/spec/lib/compiler/pre_processed_conditionals_spec.rb +0 -87
- data/spec/lib/lexer_spec.rb +0 -110
- data/spec/lib/parser/alias_spec.rb +0 -26
- data/spec/lib/parser/and_spec.rb +0 -13
- data/spec/lib/parser/aref_spec.rb +0 -10
- data/spec/lib/parser/attrasgn_spec.rb +0 -28
- data/spec/lib/parser/begin_spec.rb +0 -42
- data/spec/lib/parser/block_spec.rb +0 -12
- data/spec/lib/parser/break_spec.rb +0 -17
- data/spec/lib/parser/call_spec.rb +0 -201
- data/spec/lib/parser/class_spec.rb +0 -35
- data/spec/lib/parser/comments_spec.rb +0 -11
- data/spec/lib/parser/def_spec.rb +0 -109
- data/spec/lib/parser/if_spec.rb +0 -26
- data/spec/lib/parser/iter_spec.rb +0 -59
- data/spec/lib/parser/lambda_spec.rb +0 -219
- data/spec/lib/parser/literal_spec.rb +0 -118
- data/spec/lib/parser/masgn_spec.rb +0 -37
- data/spec/lib/parser/module_spec.rb +0 -27
- data/spec/lib/parser/not_spec.rb +0 -21
- data/spec/lib/parser/op_asgn1_spec.rb +0 -23
- data/spec/lib/parser/op_asgn2_spec.rb +0 -23
- data/spec/lib/parser/op_asgn_spec.rb +0 -17
- data/spec/lib/parser/or_spec.rb +0 -13
- data/spec/lib/parser/return_spec.rb +0 -22
- data/spec/lib/parser/sclass_spec.rb +0 -21
- data/spec/lib/parser/string_spec.rb +0 -286
- data/spec/lib/parser/super_spec.rb +0 -20
- data/spec/lib/parser/unary_spec.rb +0 -52
- data/spec/lib/parser/undef_spec.rb +0 -19
- data/spec/lib/parser/unless_spec.rb +0 -13
- data/spec/lib/parser/variables_spec.rb +0 -112
- data/spec/lib/parser/while_spec.rb +0 -15
- data/spec/lib/parser/yield_spec.rb +0 -20
- data/spec/lib/sprockets/erb_spec.rb +0 -38
- data/spec/lib/sprockets/path_reader_spec.rb +0 -41
- data/spec/lib/sprockets/processor_spec.rb +0 -79
- data/spec/lib/sprockets/server_spec.rb +0 -102
- data/spec/lib/sprockets_spec.rb +0 -39
- data/spec/lib/tilt/opal_spec.rb +0 -37
- data/spec/opal/core/language/block_spec.rb +0 -538
- data/spec/opal/core/language/proc_spec.rb +0 -263
- data/spec/opal/core/language/variables_spec.rb +0 -1366
- data/spec/opal/core/runtime/block_send_spec.rb +0 -28
- data/spec/opal/core/runtime/send_spec.rb +0 -34
- data/spec/support/parser_helpers.rb +0 -37
- data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +0 -277
- data/stdlib/nodejs/node_modules/js-yaml/LICENSE +0 -21
- data/stdlib/nodejs/node_modules/js-yaml/README.md +0 -288
- data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +0 -140
- data/stdlib/nodejs/node_modules/js-yaml/bower.json +0 -23
- data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +0 -3
- data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +0 -102
- data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +0 -18
- data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +0 -31
- data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +0 -22
- data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +0 -18
- data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +0 -197
- data/stdlib/nodejs/node_modules/js-yaml/index.js +0 -7
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +0 -39
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +0 -62
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +0 -554
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +0 -25
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +0 -1581
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +0 -78
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +0 -103
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +0 -18
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +0 -28
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +0 -17
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +0 -25
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +0 -61
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +0 -133
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +0 -37
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +0 -110
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +0 -183
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -85
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -84
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -27
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +0 -8
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +0 -12
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +0 -36
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +0 -56
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +0 -61
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +0 -8
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +0 -33
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +0 -8
- data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +0 -98
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +0 -115
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +0 -21
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +0 -239
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +0 -36
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +0 -22
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +0 -59
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +0 -13
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +0 -33
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +0 -28
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +0 -23
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +0 -49
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +0 -35
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +0 -270
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +0 -1
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +0 -146
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +0 -55
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +0 -47
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +0 -40
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +0 -48
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +0 -50
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +0 -43
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +0 -27
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +0 -26
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +0 -148
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +0 -50
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +0 -481
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +0 -14
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +0 -50
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +0 -54
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +0 -75
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +0 -1168
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +0 -18
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +0 -88
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +0 -798
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +0 -77
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +0 -2
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +0 -8
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +0 -825
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +0 -33
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +0 -11
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +0 -10
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +0 -26
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +0 -673
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +0 -107
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +0 -23
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +0 -22
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +0 -69
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +0 -6
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +0 -1415
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +0 -62
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +0 -73
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +0 -117
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +0 -177
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +0 -3908
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +0 -69
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +0 -239
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +0 -422
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +0 -66
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +0 -387
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +0 -20238
- data/stdlib/nodejs/node_modules/js-yaml/package.json +0 -83
@@ -1 +1 @@
|
|
1
|
-
<div class="foo">hello <%= "there
|
1
|
+
<div class="foo">hello <%= "there" + " #{@name}" %></div>
|
@@ -30,4 +30,8 @@ describe "JSON.parse" do
|
|
30
30
|
JSON.parse('{"a": "b"}').should == {"a" => "b"}
|
31
31
|
JSON.parse('{"a": null, "b": 10, "c": [true, false]}').should == {"a" => nil, "b" => 10, "c" => [true, false]}
|
32
32
|
end
|
33
|
+
|
34
|
+
it "raises ParserError for invalid JSON" do
|
35
|
+
lambda { JSON.parse("invalid_json") }.should raise_error(JSON::ParserError)
|
36
|
+
end
|
33
37
|
end
|
@@ -12,6 +12,7 @@ describe Hash do
|
|
12
12
|
e: [
|
13
13
|
{
|
14
14
|
f: 'g',
|
15
|
+
h: [null],
|
15
16
|
},
|
16
17
|
],
|
17
18
|
}
|
@@ -27,6 +28,7 @@ describe Hash do
|
|
27
28
|
e: [
|
28
29
|
{
|
29
30
|
f: 'g',
|
31
|
+
h: [nil],
|
30
32
|
},
|
31
33
|
],
|
32
34
|
}
|
@@ -34,6 +36,20 @@ describe Hash do
|
|
34
36
|
expect(h).to eq(expected_hash)
|
35
37
|
end
|
36
38
|
|
39
|
+
it 'turns Object.create(null) JS objects into a hash' do
|
40
|
+
%x{
|
41
|
+
var obj = Object.create(null);
|
42
|
+
var foo = Object.create(null);
|
43
|
+
var bar = Object.create(null);
|
44
|
+
obj.foo = foo;
|
45
|
+
foo.bar = bar;
|
46
|
+
bar.baz = 'baz';
|
47
|
+
}
|
48
|
+
hash = Hash.new(`obj`)
|
49
|
+
|
50
|
+
expect(hash).to eq({ foo: { bar: { baz: 'baz' } } })
|
51
|
+
end
|
52
|
+
|
37
53
|
describe '#to_n' do
|
38
54
|
it 'converts a hash with native objects as values' do
|
39
55
|
obj = { 'a_key' => `{ key: 1 }` }
|
data/spec/ruby_specs
CHANGED
@@ -18,6 +18,7 @@ ruby/core/fixnum
|
|
18
18
|
ruby/core/file/basename_spec
|
19
19
|
ruby/core/file/dirname_spec
|
20
20
|
ruby/core/file/extname_spec
|
21
|
+
ruby/core/file/join_spec
|
21
22
|
ruby/core/float
|
22
23
|
ruby/core/hash
|
23
24
|
ruby/core/integer
|
@@ -82,6 +83,7 @@ ruby/core/proc
|
|
82
83
|
ruby/core/range
|
83
84
|
ruby/core/rational
|
84
85
|
ruby/core/regexp
|
86
|
+
ruby/core/random
|
85
87
|
|
86
88
|
ruby/core/string
|
87
89
|
!ruby/core/string/crypt_spec
|
@@ -98,7 +100,6 @@ ruby/core/true
|
|
98
100
|
ruby/core/unboundmethod
|
99
101
|
|
100
102
|
ruby/language
|
101
|
-
!ruby/language/constants_spec
|
102
103
|
!ruby/language/execution_spec
|
103
104
|
|
104
105
|
ruby/library/base64
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module RewritersHelper
|
2
|
+
def s(type, *children)
|
3
|
+
::Opal::AST::Node.new(type, children)
|
4
|
+
end
|
5
|
+
|
6
|
+
def rewritten(ast)
|
7
|
+
described_class.new.process(ast)
|
8
|
+
end
|
9
|
+
|
10
|
+
def expect_rewritten(ast)
|
11
|
+
expect(rewritten(ast))
|
12
|
+
end
|
13
|
+
|
14
|
+
def expect_no_rewriting_for(ast)
|
15
|
+
expect_rewritten(ast).to eq(ast)
|
16
|
+
end
|
17
|
+
|
18
|
+
def ast_of(source)
|
19
|
+
buffer = Parser::Source::Buffer.new('(eval)')
|
20
|
+
buffer.source = source
|
21
|
+
parser = Opal::Parser.default_parser
|
22
|
+
parser.parse(buffer)
|
23
|
+
end
|
24
|
+
end
|
data/stdlib/base64.rb
CHANGED
@@ -76,7 +76,9 @@ module Base64
|
|
76
76
|
`decode(string.replace(/\-/g, '+').replace(/_/g, '/'))`
|
77
77
|
end
|
78
78
|
|
79
|
-
def self.urlsafe_encode64(string)
|
80
|
-
`encode(string).replace(/\+/g, '-').replace(/\//g, '_')`
|
79
|
+
def self.urlsafe_encode64(string, padding: true)
|
80
|
+
str = `encode(string).replace(/\+/g, '-').replace(/\//g, '_')`
|
81
|
+
str = str.delete("=") unless padding
|
82
|
+
str
|
81
83
|
end
|
82
84
|
end
|
data/stdlib/date.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
class Date
|
2
|
+
include Comparable
|
3
|
+
|
2
4
|
class Infinity < Numeric
|
3
5
|
include Comparable
|
4
6
|
|
@@ -122,7 +124,7 @@ class Date
|
|
122
124
|
// Converts month abbr (nov) to a month number
|
123
125
|
function fromMonthAbbr(fn) {
|
124
126
|
return function(match) {
|
125
|
-
var abbr = fn(match);
|
127
|
+
var abbr = fn(match).toLowerCase();
|
126
128
|
return #{ABBR_MONTHNAMES}.indexOf(abbr) + 1;
|
127
129
|
}
|
128
130
|
}
|
@@ -419,29 +421,26 @@ class Date
|
|
419
421
|
return #{self.jd <=> other}
|
420
422
|
}
|
421
423
|
|
422
|
-
|
423
|
-
|
424
|
-
|
424
|
+
if (#{Date === other}) {
|
425
|
+
var a = #@date, b = #{other}.date;
|
426
|
+
a.setHours(0, 0, 0, 0);
|
427
|
+
b.setHours(0, 0, 0, 0);
|
425
428
|
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
429
|
+
if (a < b) {
|
430
|
+
return -1;
|
431
|
+
}
|
432
|
+
else if (a > b) {
|
433
|
+
return 1;
|
434
|
+
}
|
435
|
+
else {
|
436
|
+
return 0;
|
437
|
+
}
|
438
|
+
} else {
|
439
|
+
return nil;
|
434
440
|
}
|
435
441
|
}
|
436
442
|
end
|
437
443
|
|
438
|
-
def ==(other)
|
439
|
-
%x{
|
440
|
-
var a = #@date, b = other.date;
|
441
|
-
return (a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate());
|
442
|
-
}
|
443
|
-
end
|
444
|
-
|
445
444
|
def >>(n)
|
446
445
|
%x{
|
447
446
|
if (!n.$$is_number) {
|
data/stdlib/json.rb
CHANGED
@@ -1,7 +1,20 @@
|
|
1
1
|
module JSON
|
2
|
+
class JSONError < StandardError
|
3
|
+
end
|
4
|
+
|
5
|
+
class ParserError < JSONError
|
6
|
+
end
|
7
|
+
|
2
8
|
%x{
|
3
|
-
var $
|
4
|
-
|
9
|
+
var $hasOwn = Opal.hasOwnProperty;
|
10
|
+
|
11
|
+
function $parse(source) {
|
12
|
+
try {
|
13
|
+
return JSON.parse(source);
|
14
|
+
} catch (e) {
|
15
|
+
#{raise JSON::ParserError, `e.message`};
|
16
|
+
}
|
17
|
+
};
|
5
18
|
|
6
19
|
function to_opal(value, options) {
|
7
20
|
var klass, arr, hash, i, ii, k;
|
@@ -41,8 +54,7 @@ module JSON
|
|
41
54
|
}
|
42
55
|
|
43
56
|
if (!options.parse && (klass = #{`hash`[JSON.create_id]}) != nil) {
|
44
|
-
|
45
|
-
return #{`klass`.json_create(`hash`)};
|
57
|
+
return #{::Object.const_get(`klass`).json_create(`hash`)};
|
46
58
|
}
|
47
59
|
else {
|
48
60
|
return hash;
|
data/stdlib/nashorn/file.rb
CHANGED
@@ -10,4 +10,19 @@ class File
|
|
10
10
|
return data.join("\n");
|
11
11
|
)
|
12
12
|
end
|
13
|
+
|
14
|
+
def self.file? path
|
15
|
+
%x(
|
16
|
+
var Files = Java.type('java.nio.file.Files');
|
17
|
+
return Files.exists(path) && Files.isRegularFile(path);
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.readable? path
|
22
|
+
%x(
|
23
|
+
var Files = Java.type('java.nio.file.Files');
|
24
|
+
return Files.exists(path) && Files.isReadable(path);
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
13
28
|
end
|
data/stdlib/native.rb
CHANGED
@@ -12,6 +12,9 @@
|
|
12
12
|
# do_later = $$[:setTimeout] # Accessing the "setTimeout" property
|
13
13
|
# do_later.call(->{ puts :hello}, 500)
|
14
14
|
#
|
15
|
+
# `$$` and `$global` wrap `Opal.global`, which the Opal JS runtime
|
16
|
+
# sets to the global `this` object.
|
17
|
+
#
|
15
18
|
module Native
|
16
19
|
def self.is_a?(object, klass)
|
17
20
|
%x{
|
@@ -81,7 +84,7 @@ module Native
|
|
81
84
|
def self.proc(&block)
|
82
85
|
raise LocalJumpError, "no block given" unless block
|
83
86
|
|
84
|
-
Kernel.proc {|*args|
|
87
|
+
::Kernel.proc {|*args|
|
85
88
|
args.map! { |arg| Native(arg) }
|
86
89
|
instance = Native(`this`)
|
87
90
|
|
@@ -189,8 +192,8 @@ module Native
|
|
189
192
|
end
|
190
193
|
|
191
194
|
def initialize(native)
|
192
|
-
unless Kernel.native?(native)
|
193
|
-
Kernel.raise ArgumentError, "#{native.inspect} isn't native"
|
195
|
+
unless ::Kernel.native?(native)
|
196
|
+
::Kernel.raise ArgumentError, "#{native.inspect} isn't native"
|
194
197
|
end
|
195
198
|
|
196
199
|
@native = native
|
@@ -245,7 +248,7 @@ class Native::Object < BasicObject
|
|
245
248
|
include ::Native
|
246
249
|
|
247
250
|
def ==(other)
|
248
|
-
`#@native === #{Native.try_convert(other)}`
|
251
|
+
`#@native === #{::Native.try_convert(other)}`
|
249
252
|
end
|
250
253
|
|
251
254
|
def has_key?(name)
|
@@ -284,7 +287,7 @@ class Native::Object < BasicObject
|
|
284
287
|
end
|
285
288
|
|
286
289
|
def []=(key, value)
|
287
|
-
native = Native.try_convert(value)
|
290
|
+
native = ::Native.try_convert(value)
|
288
291
|
|
289
292
|
if `#{native} === nil`
|
290
293
|
`#@native[key] = #{value}`
|
@@ -295,7 +298,7 @@ class Native::Object < BasicObject
|
|
295
298
|
|
296
299
|
def merge!(other)
|
297
300
|
%x{
|
298
|
-
other = #{Native.convert(other)};
|
301
|
+
other = #{::Native.convert(other)};
|
299
302
|
|
300
303
|
for (var prop in other) {
|
301
304
|
#@native[prop] = other[prop];
|
@@ -306,7 +309,7 @@ class Native::Object < BasicObject
|
|
306
309
|
end
|
307
310
|
|
308
311
|
def respond_to?(name, include_all = false)
|
309
|
-
Kernel.instance_method(:respond_to?).bind(self).call(name, include_all)
|
312
|
+
::Kernel.instance_method(:respond_to?).bind(self).call(name, include_all)
|
310
313
|
end
|
311
314
|
|
312
315
|
def respond_to_missing?(name, include_all = false)
|
@@ -343,7 +346,7 @@ class Native::Object < BasicObject
|
|
343
346
|
end
|
344
347
|
|
345
348
|
def to_a(options = {}, &block)
|
346
|
-
Native::Array.new(@native, options, &block).to_a
|
349
|
+
::Native::Array.new(@native, options, &block).to_a
|
347
350
|
end
|
348
351
|
|
349
352
|
def inspect
|
@@ -526,7 +529,9 @@ class Hash
|
|
526
529
|
|
527
530
|
def initialize(defaults = undefined, &block)
|
528
531
|
%x{
|
529
|
-
if (defaults != null &&
|
532
|
+
if (defaults != null &&
|
533
|
+
(defaults.constructor === undefined ||
|
534
|
+
defaults.constructor === Object)) {
|
530
535
|
var smap = self.$$smap,
|
531
536
|
keys = self.$$keys,
|
532
537
|
key, value;
|
@@ -534,15 +539,19 @@ class Hash
|
|
534
539
|
for (key in defaults) {
|
535
540
|
value = defaults[key];
|
536
541
|
|
537
|
-
if (value &&
|
542
|
+
if (value &&
|
543
|
+
(value.constructor === undefined ||
|
544
|
+
value.constructor === Object)) {
|
538
545
|
smap[key] = #{Hash.new(`value`)};
|
539
546
|
} else if (value && value.$$is_array) {
|
540
547
|
value = value.map(function(item) {
|
541
|
-
if (item &&
|
548
|
+
if (item &&
|
549
|
+
(item.constructor === undefined ||
|
550
|
+
item.constructor === Object)) {
|
542
551
|
return #{Hash.new(`item`)};
|
543
552
|
}
|
544
553
|
|
545
|
-
return item;
|
554
|
+
return #{Native(`item`)};
|
546
555
|
});
|
547
556
|
smap[key] = value
|
548
557
|
} else {
|
data/stdlib/nodejs/dir.rb
CHANGED
data/stdlib/nodejs/file.rb
CHANGED
@@ -19,6 +19,20 @@
|
|
19
19
|
warnings[string] = true;
|
20
20
|
#{warn(`string`)};
|
21
21
|
}
|
22
|
+
function executeIOAction(action) {
|
23
|
+
try {
|
24
|
+
return action();
|
25
|
+
} catch (error) {
|
26
|
+
if (error.code === 'EACCES' ||
|
27
|
+
error.code === 'EISDIR' ||
|
28
|
+
error.code === 'EMFILE' ||
|
29
|
+
error.code === 'ENOENT' ||
|
30
|
+
error.code === 'EPERM') {
|
31
|
+
throw Opal.IOError.$new(error.message)
|
32
|
+
}
|
33
|
+
throw error;
|
34
|
+
}
|
35
|
+
}
|
22
36
|
}
|
23
37
|
|
24
38
|
class File < IO
|
@@ -30,18 +44,22 @@ class File < IO
|
|
30
44
|
`var __fs__ = #{@__fs__}`
|
31
45
|
`var __path__ = #{@__path__}`
|
32
46
|
|
47
|
+
if `__path__.sep !== #{Separator}`
|
48
|
+
ALT_SEPARATOR = `__path__.sep`
|
49
|
+
end
|
50
|
+
|
33
51
|
def self.read path
|
34
|
-
`__fs__.readFileSync(#{path}).toString()`
|
52
|
+
`return executeIOAction(function(){return __fs__.readFileSync(#{path}).toString()})`
|
35
53
|
end
|
36
54
|
|
37
55
|
def self.write path, data
|
38
|
-
`__fs__.writeFileSync(#{path}, #{data})`
|
56
|
+
`executeIOAction(function(){return __fs__.writeFileSync(#{path}, #{data})})`
|
39
57
|
data.size
|
40
58
|
end
|
41
59
|
|
42
60
|
def self.exist? path
|
43
61
|
path = path.path if path.respond_to? :path
|
44
|
-
`__fs__.existsSync(#{path})`
|
62
|
+
`return executeIOAction(function(){return __fs__.existsSync(#{path})})`
|
45
63
|
end
|
46
64
|
|
47
65
|
def self.realpath(pathname, dir_string = nil, cache = nil, &block)
|
@@ -49,12 +67,12 @@ class File < IO
|
|
49
67
|
if block_given?
|
50
68
|
`
|
51
69
|
__fs__.realpath(#{pathname}, #{cache}, function(error, realpath){
|
52
|
-
if (error)
|
70
|
+
if (error) Opal.IOError.$new(error.message)
|
53
71
|
else #{block.call(`realpath`)}
|
54
72
|
})
|
55
73
|
`
|
56
74
|
else
|
57
|
-
`__fs__.realpathSync(#{pathname}, #{cache})`
|
75
|
+
`return executeIOAction(function(){return __fs__.realpathSync(#{pathname}, #{cache})})`
|
58
76
|
end
|
59
77
|
end
|
60
78
|
|
@@ -63,18 +81,29 @@ class File < IO
|
|
63
81
|
end
|
64
82
|
|
65
83
|
def self.directory? path
|
66
|
-
return
|
67
|
-
|
84
|
+
return false unless exist? path
|
85
|
+
`return executeIOAction(function(){return !!__fs__.lstatSync(path).isDirectory()})`
|
68
86
|
end
|
69
87
|
|
70
88
|
def self.file? path
|
71
|
-
return
|
72
|
-
|
89
|
+
return false unless exist? path
|
90
|
+
`return executeIOAction(function(){return !!__fs__.lstatSync(path).isFile()})`
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.readable? path
|
94
|
+
return false unless exist? path
|
95
|
+
%{
|
96
|
+
try {
|
97
|
+
__fs__.accessSync(path, __fs__.R_OK);
|
98
|
+
return true;
|
99
|
+
} catch (error) {
|
100
|
+
return false;
|
101
|
+
}
|
102
|
+
}
|
73
103
|
end
|
74
104
|
|
75
105
|
def self.size path
|
76
|
-
return
|
77
|
-
`__fs__.lstatSync(path).size`
|
106
|
+
`return executeIOAction(function(){return __fs__.lstatSync(path).size})`
|
78
107
|
end
|
79
108
|
|
80
109
|
def self.open path, flags
|
@@ -96,12 +125,12 @@ class File < IO
|
|
96
125
|
end
|
97
126
|
|
98
127
|
def self.mtime path
|
99
|
-
`__fs__.statSync(#{path}).mtime`
|
128
|
+
`return executeIOAction(function(){return __fs__.statSync(#{path}).mtime})`
|
100
129
|
end
|
101
130
|
|
102
131
|
# Instance Methods
|
103
132
|
|
104
|
-
def initialize(path, flags)
|
133
|
+
def initialize(path, flags = 'r')
|
105
134
|
binary_flag_regexp = /b/
|
106
135
|
encoding_flag_regexp = /:(.*)/
|
107
136
|
# binary flag is unsupported
|
@@ -112,25 +141,25 @@ class File < IO
|
|
112
141
|
flags = flags.gsub(encoding_flag_regexp, '')
|
113
142
|
@path = path
|
114
143
|
@flags = flags
|
115
|
-
@fd = `__fs__.openSync(path, flags)`
|
144
|
+
@fd = `executeIOAction(function(){return __fs__.openSync(path, flags)})`
|
116
145
|
end
|
117
146
|
|
118
147
|
attr_reader :path
|
119
148
|
|
120
149
|
def write string
|
121
|
-
`__fs__.writeSync(#{@fd}, #{string})`
|
150
|
+
`executeIOAction(function(){return __fs__.writeSync(#{@fd}, #{string})})`
|
122
151
|
end
|
123
152
|
|
124
153
|
def flush
|
125
|
-
`__fs__.fsyncSync(#@fd)`
|
154
|
+
`executeIOAction(function(){return __fs__.fsyncSync(#@fd)})`
|
126
155
|
end
|
127
156
|
|
128
157
|
def close
|
129
|
-
`__fs__.closeSync(#{@fd})`
|
158
|
+
`executeIOAction(function(){return __fs__.closeSync(#{@fd})})`
|
130
159
|
end
|
131
160
|
|
132
161
|
def mtime
|
133
|
-
`__fs__.statSync(#{@path}).mtime`
|
162
|
+
`return executeIOAction(function(){return __fs__.statSync(#{@path}).mtime})`
|
134
163
|
end
|
135
164
|
end
|
136
165
|
|
@@ -144,10 +173,10 @@ class File::Stat
|
|
144
173
|
end
|
145
174
|
|
146
175
|
def file?
|
147
|
-
`__fs__.statSync(#{@path}).isFile()`
|
176
|
+
`return executeIOAction(function(){return __fs__.statSync(#{@path}).isFile()})`
|
148
177
|
end
|
149
178
|
|
150
179
|
def mtime
|
151
|
-
`__fs__.statSync(#{@path}).mtime`
|
180
|
+
`return executeIOAction(function(){return __fs__.statSync(#{@path}).mtime})`
|
152
181
|
end
|
153
182
|
end
|