opal 0.8.1 → 0.9.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -2
- data/.gitmodules +3 -3
- data/.jshintrc +17 -20
- data/.travis.yml +22 -11
- data/CHANGELOG.md +51 -1
- data/CODE_OF_CONDUCT.md +15 -0
- data/CONTRIBUTING.md +125 -9
- data/Gemfile +1 -1
- data/Guardfile +2 -2
- data/README.md +95 -29
- data/Rakefile +1 -1
- data/benchmark/benchmarks +103 -0
- data/benchmark/bm_array_flatten.rb +9 -0
- data/benchmark/bm_array_intersection_numbers.rb +7 -0
- data/benchmark/bm_array_intersection_objects.rb +7 -0
- data/benchmark/bm_array_intersection_strings.rb +7 -0
- data/benchmark/bm_array_join_ary.rb +9 -0
- data/benchmark/bm_array_minus_numbers.rb +7 -0
- data/benchmark/bm_array_minus_objects.rb +7 -0
- data/benchmark/bm_array_minus_strings.rb +7 -0
- data/benchmark/bm_array_union_numbers.rb +7 -0
- data/benchmark/bm_array_union_objects.rb +7 -0
- data/benchmark/bm_array_union_strings.rb +7 -0
- data/benchmark/bm_array_uniq_bang_numbers.rb +5 -0
- data/benchmark/bm_array_uniq_bang_objects.rb +5 -0
- data/benchmark/bm_array_uniq_bang_strings.rb +5 -0
- data/benchmark/bm_array_uniq_numbers.rb +5 -0
- data/benchmark/bm_array_uniq_objects.rb +5 -0
- data/benchmark/bm_array_uniq_strings.rb +5 -0
- data/benchmark/bm_dispatch_bind_table.rb +57 -0
- data/benchmark/bm_dispatch_code_gen.rb +65 -0
- data/benchmark/bm_dispatch_code_gen_if.rb +64 -0
- data/benchmark/bm_dispatch_hardcoded.rb +44 -0
- data/benchmark/bm_dispatch_send.rb +38 -0
- data/benchmark/bm_dispatch_send_table.rb +57 -0
- data/benchmark/bm_hash_assoc_object.rb +11 -0
- data/benchmark/bm_hash_assoc_string.rb +9 -0
- data/benchmark/bm_hash_clone_object.rb +9 -0
- data/benchmark/bm_hash_clone_string.rb +9 -0
- data/benchmark/bm_hash_delete_object.rb +11 -0
- data/benchmark/bm_hash_delete_string.rb +9 -0
- data/benchmark/bm_hash_each_key_object.rb +9 -0
- data/benchmark/bm_hash_each_key_string.rb +9 -0
- data/benchmark/bm_hash_each_object.rb +9 -0
- data/benchmark/bm_hash_each_string.rb +9 -0
- data/benchmark/bm_hash_each_value_object.rb +9 -0
- data/benchmark/bm_hash_each_value_string.rb +9 -0
- data/benchmark/bm_hash_element_reference_object.rb +11 -0
- data/benchmark/bm_hash_element_reference_string.rb +9 -0
- data/benchmark/bm_hash_element_set_object.rb +5 -0
- data/benchmark/bm_hash_element_set_string.rb +5 -0
- data/benchmark/bm_hash_equal_value_object.rb +14 -0
- data/benchmark/bm_hash_equal_value_string.rb +11 -0
- data/benchmark/bm_hash_fetch_object.rb +11 -0
- data/benchmark/bm_hash_fetch_string.rb +9 -0
- data/benchmark/bm_hash_flatten_object.rb +9 -0
- data/benchmark/bm_hash_flatten_string.rb +9 -0
- data/benchmark/bm_hash_has_key_object.rb +11 -0
- data/benchmark/bm_hash_has_key_string.rb +9 -0
- data/benchmark/bm_hash_has_value_object.rb +9 -0
- data/benchmark/bm_hash_has_value_string.rb +9 -0
- data/benchmark/bm_hash_hash_object.rb +9 -0
- data/benchmark/bm_hash_hash_string.rb +9 -0
- data/benchmark/bm_hash_inspect_object.rb +9 -0
- data/benchmark/bm_hash_inspect_string.rb +9 -0
- data/benchmark/bm_hash_invert_object.rb +9 -0
- data/benchmark/bm_hash_invert_string.rb +9 -0
- data/benchmark/bm_hash_keep_if_object.rb +9 -0
- data/benchmark/bm_hash_keep_if_string.rb +9 -0
- data/benchmark/bm_hash_key_object.rb +9 -0
- data/benchmark/bm_hash_key_string.rb +9 -0
- data/benchmark/bm_hash_keys_object.rb +9 -0
- data/benchmark/bm_hash_keys_string.rb +9 -0
- data/benchmark/bm_hash_literal_mixed_large.rb +3 -0
- data/benchmark/bm_hash_literal_mixed_small.rb +3 -0
- data/benchmark/bm_hash_literal_object_large.rb +4 -0
- data/benchmark/bm_hash_literal_object_small.rb +3 -0
- data/benchmark/bm_hash_literal_string_large.rb +4 -0
- data/benchmark/bm_hash_literal_string_small.rb +3 -0
- data/benchmark/bm_hash_merge_object.rb +22 -0
- data/benchmark/bm_hash_merge_string.rb +18 -0
- data/benchmark/bm_hash_rassoc_object.rb +9 -0
- data/benchmark/bm_hash_rassoc_string.rb +9 -0
- data/benchmark/bm_hash_rehash_object.rb +9 -0
- data/benchmark/bm_hash_rehash_string.rb +9 -0
- data/benchmark/bm_hash_reject_bang_object.rb +9 -0
- data/benchmark/bm_hash_reject_bang_string.rb +9 -0
- data/benchmark/bm_hash_reject_object.rb +9 -0
- data/benchmark/bm_hash_reject_string.rb +9 -0
- data/benchmark/bm_hash_replace_object.rb +18 -0
- data/benchmark/bm_hash_replace_string.rb +14 -0
- data/benchmark/bm_hash_select_bang_object.rb +9 -0
- data/benchmark/bm_hash_select_bang_string.rb +9 -0
- data/benchmark/bm_hash_select_object.rb +9 -0
- data/benchmark/bm_hash_select_string.rb +9 -0
- data/benchmark/bm_hash_shift_object.rb +10 -0
- data/benchmark/bm_hash_shift_string.rb +10 -0
- data/benchmark/bm_hash_to_a_object.rb +9 -0
- data/benchmark/bm_hash_to_a_string.rb +9 -0
- data/benchmark/bm_hash_to_h_object.rb +10 -0
- data/benchmark/bm_hash_to_h_string.rb +10 -0
- data/benchmark/bm_hash_values_object.rb +9 -0
- data/benchmark/bm_hash_values_string.rb +9 -0
- data/benchmark/run.rb +48 -0
- data/bin/opal-mspec +1 -1
- data/bin/opal-repl +4 -4
- data/docs/compiled_ruby.md +214 -56
- data/docs/configuring_gems.md +2 -2
- data/docs/faq.md +2 -2
- data/docs/getting_started.md +19 -2
- data/docs/jquery.md +5 -5
- data/docs/opal_parser.md +53 -0
- data/docs/unsupported_features.md +2 -2
- data/docs/upgrading.md +22 -0
- data/docs/using_sprockets.md +15 -0
- data/examples/rack/config.ru +13 -0
- data/examples/sinatra/config.ru +4 -5
- data/lib/mspec/opal/runner.rb +54 -11
- data/lib/opal.rb +1 -1
- data/lib/opal/builder.rb +1 -1
- data/lib/opal/builder_processors.rb +1 -1
- data/lib/opal/cli.rb +17 -13
- data/lib/opal/cli_options.rb +1 -1
- data/lib/opal/compiler.rb +12 -0
- data/lib/opal/config.rb +4 -0
- data/lib/opal/nodes/arglist.rb +5 -7
- data/lib/opal/nodes/call.rb +6 -1
- data/lib/opal/nodes/call_special.rb +74 -0
- data/lib/opal/nodes/def.rb +35 -28
- data/lib/opal/nodes/definitions.rb +3 -5
- data/lib/opal/nodes/for.rb +13 -0
- data/lib/opal/nodes/helpers.rb +15 -1
- data/lib/opal/nodes/if.rb +5 -5
- data/lib/opal/nodes/iter.rb +6 -1
- data/lib/opal/nodes/literal.rb +1 -1
- data/lib/opal/nodes/logic.rb +2 -2
- data/lib/opal/nodes/masgn.rb +1 -2
- data/lib/opal/nodes/module.rb +2 -1
- data/lib/opal/nodes/rescue.rb +10 -1
- data/lib/opal/nodes/scope.rb +8 -2
- data/lib/opal/nodes/singleton_class.rb +1 -1
- data/lib/opal/nodes/top.rb +11 -0
- data/lib/opal/nodes/variables.rb +4 -4
- data/lib/opal/parser.rb +21 -3
- data/lib/opal/parser/grammar.rb +3115 -2961
- data/lib/opal/parser/grammar.y +29 -6
- data/lib/opal/parser/lexer.rb +18 -8
- data/lib/opal/sprockets.rb +85 -0
- data/lib/opal/sprockets/processor.rb +11 -35
- data/lib/opal/sprockets/server.rb +3 -15
- data/lib/opal/version.rb +2 -2
- data/opal.gemspec +4 -4
- data/opal/README.md +9 -0
- data/opal/corelib/array.rb +433 -181
- data/opal/corelib/basic_object.rb +48 -4
- data/opal/corelib/boolean.rb +15 -6
- data/opal/corelib/class.rb +6 -5
- data/opal/corelib/comparable.rb +12 -0
- data/opal/corelib/complex.rb +282 -0
- data/opal/corelib/constants.rb +9 -0
- data/opal/corelib/enumerable.rb +83 -34
- data/opal/corelib/enumerator.rb +3 -1
- data/opal/corelib/error.rb +49 -10
- data/opal/corelib/file.rb +1 -0
- data/opal/corelib/hash.rb +353 -577
- data/opal/corelib/helpers.rb +20 -0
- data/opal/corelib/kernel.rb +114 -59
- data/opal/corelib/math.rb +470 -0
- data/opal/corelib/method.rb +11 -2
- data/opal/corelib/module.rb +96 -96
- data/opal/corelib/{nil_class.rb → nil.rb} +20 -1
- data/opal/corelib/number.rb +751 -0
- data/opal/corelib/numeric.rb +77 -437
- data/opal/corelib/proc.rb +81 -1
- data/opal/corelib/process.rb +27 -0
- data/opal/corelib/rational.rb +358 -0
- data/opal/corelib/regexp.rb +156 -27
- data/opal/corelib/runtime.js +724 -335
- data/opal/corelib/string.rb +93 -104
- data/opal/corelib/string/encoding.rb +177 -0
- data/opal/corelib/string/inheritance.rb +2 -0
- data/opal/corelib/struct.rb +105 -18
- data/opal/corelib/time.rb +267 -146
- data/opal/corelib/unsupported.rb +216 -0
- data/opal/corelib/variables.rb +0 -6
- data/opal/opal.rb +8 -22
- data/opal/opal/base.rb +9 -0
- data/opal/opal/mini.rb +17 -0
- data/spec/README.md +1 -1
- data/spec/filters/bugs/array.rb +38 -136
- data/spec/filters/bugs/{basic_object.rb → basicobject.rb} +14 -15
- data/spec/filters/bugs/class.rb +6 -12
- data/spec/filters/bugs/complex.rb +3 -0
- data/spec/filters/bugs/date.rb +162 -10
- data/spec/filters/bugs/enumerable.rb +31 -58
- data/spec/filters/bugs/enumerator.rb +42 -0
- data/spec/filters/bugs/exception.rb +66 -10
- data/spec/filters/bugs/float.rb +17 -0
- data/spec/filters/bugs/hash.rb +11 -97
- data/spec/filters/bugs/inheritance.rb +5 -0
- data/spec/filters/bugs/integer.rb +28 -0
- data/spec/filters/bugs/kernel.rb +304 -12
- data/spec/filters/bugs/language.rb +133 -399
- data/spec/filters/bugs/language_opal.rb +88 -0
- data/spec/filters/bugs/module.rb +203 -62
- data/spec/filters/bugs/numeric.rb +32 -0
- data/spec/filters/bugs/proc.rb +39 -0
- data/spec/filters/bugs/range.rb +148 -0
- data/spec/filters/bugs/regexp.rb +168 -0
- data/spec/filters/bugs/set.rb +46 -3
- data/spec/filters/bugs/singleton.rb +1 -2
- data/spec/filters/bugs/string.rb +59 -90
- data/spec/filters/bugs/strscan.rb +80 -0
- data/spec/filters/bugs/struct.rb +10 -20
- data/spec/filters/bugs/time.rb +17 -184
- data/spec/filters/bugs/unboundmethod.rb +22 -0
- data/spec/filters/unsupported/array.rb +163 -0
- data/spec/filters/unsupported/basicobject.rb +14 -0
- data/spec/filters/unsupported/bignum.rb +46 -0
- data/spec/filters/unsupported/class.rb +4 -0
- data/spec/filters/unsupported/delegator.rb +5 -0
- data/spec/filters/unsupported/enumerable.rb +11 -0
- data/spec/filters/unsupported/enumerator.rb +8 -9
- data/spec/filters/unsupported/fixnum.rb +14 -0
- data/spec/filters/unsupported/float.rb +41 -7
- data/spec/filters/unsupported/freeze.rb +45 -0
- data/spec/filters/unsupported/hash.rb +50 -0
- data/spec/filters/unsupported/integer.rb +3 -0
- data/spec/filters/unsupported/kernel.rb +31 -0
- data/spec/filters/unsupported/language.rb +17 -0
- data/spec/filters/unsupported/matchdata.rb +30 -0
- data/spec/filters/unsupported/math.rb +3 -0
- data/spec/filters/unsupported/module.rb +5 -3
- data/spec/filters/unsupported/pathname.rb +3 -0
- data/spec/filters/unsupported/privacy.rb +136 -0
- data/spec/filters/unsupported/proc.rb +3 -0
- data/spec/filters/unsupported/regexp.rb +59 -0
- data/spec/filters/unsupported/set.rb +4 -0
- data/spec/filters/unsupported/{marshal.rb → singleton.rb} +4 -2
- data/spec/filters/unsupported/{mutable_strings.rb → string.rb} +456 -336
- data/spec/filters/unsupported/struct.rb +3 -0
- data/spec/filters/unsupported/symbol.rb +5 -0
- data/spec/filters/unsupported/taint.rb +16 -0
- data/spec/filters/unsupported/thread.rb +5 -0
- data/spec/filters/unsupported/time.rb +197 -16
- data/spec/lib/cli_spec.rb +14 -4
- data/spec/lib/compiler_spec.rb +9 -1
- data/spec/lib/parser/call_spec.rb +18 -0
- data/spec/lib/parser/not_spec.rb +2 -8
- data/spec/lib/sprockets_spec.rb +24 -0
- data/spec/opal/core/array/intersection_spec.rb +38 -0
- data/spec/opal/core/array/minus_spec.rb +38 -0
- data/spec/opal/core/array/union_spec.rb +38 -0
- data/spec/opal/core/array/uniq_spec.rb +49 -0
- data/spec/opal/core/exception_spec.rb +7 -0
- data/spec/opal/core/fixtures/require_tree_with_dot/file 1.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_with_dot/file 2.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_with_dot/file 3.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_with_dot/index.rb +3 -0
- data/spec/opal/core/hash/internals_spec.rb +332 -0
- data/spec/opal/core/helpers_spec.rb +14 -0
- data/spec/opal/core/kernel/freeze_spec.rb +1 -1
- data/spec/opal/core/kernel/raise_spec.rb +13 -0
- data/spec/opal/core/kernel/require_tree_spec.rb +9 -0
- data/spec/opal/core/language/class_spec.rb +55 -0
- data/spec/opal/core/language/fixtures/send.rb +1 -0
- data/spec/opal/core/language/keyword_arguments_spec.rb +11 -0
- data/spec/opal/core/language/send_spec.rb +5 -0
- data/spec/opal/core/method/to_proc_spec.rb +28 -0
- data/spec/opal/core/module/name_spec.rb +0 -17
- data/spec/opal/core/runtime/bridged_classes_spec.rb +2 -2
- data/spec/opal/core/runtime/eval_spec.rb +1 -1
- data/spec/opal/core/runtime/method_missing_spec.rb +6 -0
- data/spec/opal/core/runtime_spec.rb +51 -0
- data/spec/opal/stdlib/js_spec.rb +66 -0
- data/spec/opal/stdlib/native/hash_spec.rb +36 -0
- data/spec/rubyspecs +152 -273
- data/spec/spec_helper.rb +10 -11
- data/stdlib/base64.rb +9 -9
- data/stdlib/benchmark.rb +551 -4
- data/stdlib/console.rb +94 -0
- data/stdlib/date.rb +1 -1
- data/stdlib/encoding.rb +1 -170
- data/stdlib/js.rb +56 -0
- data/stdlib/json.rb +9 -14
- data/stdlib/math.rb +1 -370
- data/stdlib/native.rb +133 -63
- data/stdlib/nodejs/file.rb +5 -0
- data/stdlib/nodejs/fileutils.rb +13 -6
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +1 -1
- data/stdlib/opal-parser.rb +1 -2
- data/stdlib/ostruct.rb +65 -6
- data/stdlib/pp.rb +2 -4
- data/stdlib/rbconfig.rb +1 -3
- data/stdlib/strscan.rb +164 -28
- data/tasks/benchmarking.rake +88 -0
- data/tasks/testing.rake +181 -55
- data/{lib/mspec/opal/special_calls.rb → tasks/testing/mspec_special_calls.rb} +1 -1
- data/{lib/mspec/opal/sprockets.js → tasks/testing/phantomjs1-sprockets.js} +17 -6
- data/test/opal/test_keyword.rb +590 -0
- data/vendored-minitest/minitest.rb +2 -2
- data/vendored-minitest/test/unit.rb +5 -0
- metadata +229 -62
- data/benchmarks/operators.rb +0 -11
- data/benchmarks/prova.js.rb +0 -13
- data/docs/libraries.md +0 -36
- data/lib/mspec/opal/new.html.erb +0 -1
- data/lib/mspec/opal/rake_task.rb +0 -248
- data/opal/corelib/match_data.rb +0 -128
- data/spec/filters/bugs/math.rb +0 -95
- data/spec/filters/bugs/nil.rb +0 -7
- data/spec/filters/bugs/opal.rb +0 -9
- data/spec/filters/bugs/regular_expressions.rb +0 -41
- data/spec/filters/bugs/stringscanner.rb +0 -33
- data/spec/filters/unsupported/encoding.rb +0 -102
- data/spec/filters/unsupported/frozen.rb +0 -92
- data/spec/filters/unsupported/hash_compare_by_identity.rb +0 -16
- data/spec/filters/unsupported/integer_size.rb +0 -59
- data/spec/filters/unsupported/method_added.rb +0 -10
- data/spec/filters/unsupported/private_constants.rb +0 -30
- data/spec/filters/unsupported/private_methods.rb +0 -55
- data/spec/filters/unsupported/random.rb +0 -4
- data/spec/filters/unsupported/rational_numbers.rb +0 -4
- data/spec/filters/unsupported/regular_expressions.rb +0 -137
- data/spec/filters/unsupported/ruby_exe.rb +0 -5
- data/spec/filters/unsupported/symbols.rb +0 -17
- data/spec/filters/unsupported/tainted.rb +0 -180
- data/spec/filters/unsupported/trusted.rb +0 -88
- data/stdlib/process.rb +0 -10
- data/tasks/documenting.rake +0 -37
data/stdlib/native.rb
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# Public: Provides a complete set of tools to wrap native JavaScript
|
2
|
+
# into nice Ruby objects.
|
3
|
+
#
|
4
|
+
# Examples
|
5
|
+
#
|
6
|
+
# $$.document.querySelector('p').classList.add('blue')
|
7
|
+
# # => adds "blue" class to <p>
|
8
|
+
#
|
9
|
+
# $$.location.href = 'https://google.com'
|
10
|
+
# # => changes page location
|
11
|
+
#
|
12
|
+
# do_later = $$[:setTimeout] # Accessing the "setTimeout" property
|
13
|
+
# do_later.call(->{ puts :hello}, 500)
|
14
|
+
#
|
1
15
|
module Native
|
2
16
|
def self.is_a?(object, klass)
|
3
17
|
%x{
|
@@ -64,8 +78,64 @@ module Native
|
|
64
78
|
}
|
65
79
|
end
|
66
80
|
|
81
|
+
def self.proc(&block)
|
82
|
+
raise LocalJumpError, "no block given" unless block
|
83
|
+
|
84
|
+
Kernel.proc {|*args|
|
85
|
+
args.map! { |arg| Native(arg) }
|
86
|
+
instance = Native(`this`)
|
87
|
+
|
88
|
+
%x{
|
89
|
+
// if global is current scope, run the block in the scope it was defined
|
90
|
+
if (this === Opal.global) {
|
91
|
+
return block.apply(self, #{args});
|
92
|
+
}
|
93
|
+
|
94
|
+
var self_ = block.$$s;
|
95
|
+
block.$$s = null;
|
96
|
+
|
97
|
+
try {
|
98
|
+
return block.apply(#{instance}, #{args});
|
99
|
+
}
|
100
|
+
finally {
|
101
|
+
block.$$s = self_;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
67
107
|
module Helpers
|
68
|
-
|
108
|
+
# Public: Exposes a native JavaScript method to Ruby
|
109
|
+
#
|
110
|
+
#
|
111
|
+
# new - The name of the newly created method.
|
112
|
+
# old - The name of the native JavaScript method to be exposed.
|
113
|
+
# If the name ends with "=" (e.g. `foo=`) it will be interpreted as
|
114
|
+
# a property setter. (default: the value of "new")
|
115
|
+
# as - If provided the values returned by the original method will be
|
116
|
+
# returned as instances of the passed class. The class passed to "as"
|
117
|
+
# is expected to accept a native JavaScript value.
|
118
|
+
#
|
119
|
+
# Examples
|
120
|
+
#
|
121
|
+
# class Element
|
122
|
+
# include Native::Helpers
|
123
|
+
#
|
124
|
+
# alias_native :add_class, :addClass
|
125
|
+
# alias_native :show
|
126
|
+
# alias_native :hide
|
127
|
+
#
|
128
|
+
# def initialize(selector)
|
129
|
+
# @native = `$(#{selector})`
|
130
|
+
# end
|
131
|
+
# end
|
132
|
+
#
|
133
|
+
# titles = Element.new('h1')
|
134
|
+
# titles.add_class :foo
|
135
|
+
# titles.hide
|
136
|
+
# titles.show
|
137
|
+
#
|
138
|
+
def alias_native(new, old = new, as: nil)
|
69
139
|
if old.end_with? ?=
|
70
140
|
define_method new do |value|
|
71
141
|
`#@native[#{old[0 .. -2]}] = #{Native.convert(value)}`
|
@@ -73,7 +143,7 @@ module Native
|
|
73
143
|
value
|
74
144
|
end
|
75
145
|
else
|
76
|
-
if as
|
146
|
+
if as
|
77
147
|
define_method new do |*args, &block|
|
78
148
|
if value = Native.call(@native, old, *args, &block)
|
79
149
|
as.new(value.to_n)
|
@@ -121,6 +191,7 @@ module Native
|
|
121
191
|
@native = native
|
122
192
|
end
|
123
193
|
|
194
|
+
# Public: Returns the internal native JavaScript value
|
124
195
|
def to_n
|
125
196
|
@native
|
126
197
|
end
|
@@ -131,6 +202,12 @@ module Kernel
|
|
131
202
|
`value == null || !value.$$class`
|
132
203
|
end
|
133
204
|
|
205
|
+
# Public: Wraps a native JavaScript with Native::Object.new
|
206
|
+
#
|
207
|
+
# Returns:
|
208
|
+
# 1. The wrapped object if it is native
|
209
|
+
# 2. nil for `null` and `undefined`
|
210
|
+
# 3. The object itself if it's not native
|
134
211
|
def Native(obj)
|
135
212
|
if `#{obj} == null`
|
136
213
|
nil
|
@@ -143,6 +220,7 @@ module Kernel
|
|
143
220
|
|
144
221
|
alias_method :_Array, :Array
|
145
222
|
|
223
|
+
# Public: Wraps array-like JavaScript objects in Native::Array
|
146
224
|
def Array(object, *args, &block)
|
147
225
|
if native?(object)
|
148
226
|
return Native::Array.new(object, *args, &block).to_a
|
@@ -205,7 +283,7 @@ class Native::Object < BasicObject
|
|
205
283
|
|
206
284
|
def merge!(other)
|
207
285
|
%x{
|
208
|
-
|
286
|
+
other = #{Native.convert(other)};
|
209
287
|
|
210
288
|
for (var prop in other) {
|
211
289
|
#@native[prop] = other[prop];
|
@@ -219,7 +297,7 @@ class Native::Object < BasicObject
|
|
219
297
|
Kernel.instance_method(:respond_to?).bind(self).call(name, include_all)
|
220
298
|
end
|
221
299
|
|
222
|
-
def respond_to_missing?(name)
|
300
|
+
def respond_to_missing?(name, include_all = false)
|
223
301
|
`Opal.hasOwnProperty.call(#@native, #{name})`
|
224
302
|
end
|
225
303
|
|
@@ -349,50 +427,43 @@ class Native::Array
|
|
349
427
|
end
|
350
428
|
|
351
429
|
class Numeric
|
430
|
+
# Public: Returns the internal JavaScript value (with `valueOf`).
|
352
431
|
def to_n
|
353
432
|
`self.valueOf()`
|
354
433
|
end
|
355
434
|
end
|
356
435
|
|
357
436
|
class Proc
|
437
|
+
# Public: Returns itself (an instance of `Function`)
|
358
438
|
def to_n
|
359
439
|
self
|
360
440
|
end
|
361
441
|
end
|
362
442
|
|
363
443
|
class String
|
444
|
+
# Public: Returns the internal JavaScript value (with `valueOf`).
|
364
445
|
def to_n
|
365
446
|
`self.valueOf()`
|
366
447
|
end
|
367
448
|
end
|
368
449
|
|
369
450
|
class Regexp
|
451
|
+
# Public: Returns the internal JavaScript value (with `valueOf`).
|
370
452
|
def to_n
|
371
453
|
`self.valueOf()`
|
372
454
|
end
|
373
455
|
end
|
374
456
|
|
375
457
|
class MatchData
|
458
|
+
# Public: Returns the array of matches
|
376
459
|
def to_n
|
377
460
|
@matches
|
378
461
|
end
|
379
462
|
end
|
380
463
|
|
381
464
|
class Struct
|
382
|
-
|
383
|
-
|
384
|
-
object = args[0]
|
385
|
-
|
386
|
-
members.each {|name|
|
387
|
-
instance_variable_set "@#{name}", Native(`#{object}[#{name}]`)
|
388
|
-
}
|
389
|
-
else
|
390
|
-
members.each_with_index {|name, index|
|
391
|
-
instance_variable_set "@#{name}", args[index]
|
392
|
-
}
|
393
|
-
end
|
394
|
-
end
|
395
|
-
|
465
|
+
# Public: Returns a JavaScript object with the members as keys and their
|
466
|
+
# values as values.
|
396
467
|
def to_n
|
397
468
|
result = `{}`
|
398
469
|
|
@@ -405,6 +476,7 @@ class Struct
|
|
405
476
|
end
|
406
477
|
|
407
478
|
class Array
|
479
|
+
# Public: Retuns a copy of itself trying to call #to_n on each member.
|
408
480
|
def to_n
|
409
481
|
%x{
|
410
482
|
var result = [];
|
@@ -426,87 +498,83 @@ class Array
|
|
426
498
|
end
|
427
499
|
|
428
500
|
class Boolean
|
501
|
+
# Public: Returns the internal JavaScript value (with `valueOf`).
|
429
502
|
def to_n
|
430
503
|
`self.valueOf()`
|
431
504
|
end
|
432
505
|
end
|
433
506
|
|
434
507
|
class Time
|
508
|
+
# Public: Returns itself (an instance of `Date`).
|
435
509
|
def to_n
|
436
510
|
self
|
437
511
|
end
|
438
512
|
end
|
439
513
|
|
440
514
|
class NilClass
|
515
|
+
# Public: Returns the corresponding JavaScript value (`null`).
|
441
516
|
def to_n
|
442
517
|
`null`
|
443
518
|
end
|
444
519
|
end
|
445
520
|
|
446
521
|
class Hash
|
522
|
+
alias_method :_initialize, :initialize
|
523
|
+
|
447
524
|
def initialize(defaults = undefined, &block)
|
448
525
|
%x{
|
449
|
-
if (defaults
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
}
|
470
|
-
else {
|
471
|
-
map[khash] = #{Native(`value`)};
|
472
|
-
}
|
473
|
-
|
474
|
-
keys.push(key);
|
526
|
+
if (defaults !== undefined && defaults.constructor === Object) {
|
527
|
+
var smap = self.smap,
|
528
|
+
keys = self.keys,
|
529
|
+
key, value;
|
530
|
+
|
531
|
+
for (key in defaults) {
|
532
|
+
value = defaults[key];
|
533
|
+
|
534
|
+
if (value && value.constructor === Object) {
|
535
|
+
smap[key] = #{Hash.new(`value`)};
|
536
|
+
} else if (value && value.$$is_array) {
|
537
|
+
value = value.map(function(item) {
|
538
|
+
if (item && item.constructor === Object) {
|
539
|
+
return #{Hash.new(`item`)};
|
540
|
+
}
|
541
|
+
|
542
|
+
return item;
|
543
|
+
});
|
544
|
+
smap[key] = value
|
545
|
+
} else {
|
546
|
+
smap[key] = #{Native(`value`)};
|
475
547
|
}
|
548
|
+
|
549
|
+
keys.push(key);
|
476
550
|
}
|
477
|
-
|
478
|
-
|
479
|
-
}
|
480
|
-
}
|
481
|
-
else if (block !== nil) {
|
482
|
-
self.proc = block;
|
551
|
+
|
552
|
+
return self;
|
483
553
|
}
|
484
554
|
|
485
|
-
return
|
555
|
+
return #{_initialize(defaults, &block)};
|
486
556
|
}
|
487
557
|
end
|
488
558
|
|
559
|
+
# Public: Returns a JavaScript object with the same keys but calling #to_n on
|
560
|
+
# all values.
|
489
561
|
def to_n
|
490
562
|
%x{
|
491
563
|
var result = {},
|
492
|
-
keys
|
493
|
-
|
494
|
-
|
495
|
-
map, khash, value, key;
|
564
|
+
keys = self.keys,
|
565
|
+
smap = self.smap,
|
566
|
+
key, value;
|
496
567
|
|
497
568
|
for (var i = 0, length = keys.length; i < length; i++) {
|
498
|
-
key
|
569
|
+
key = keys[i];
|
499
570
|
|
500
571
|
if (key.$$is_string) {
|
501
|
-
|
502
|
-
khash = key;
|
572
|
+
value = smap[key];
|
503
573
|
} else {
|
504
|
-
|
505
|
-
|
574
|
+
key = key.key;
|
575
|
+
value = key.value;
|
506
576
|
}
|
507
577
|
|
508
|
-
value = map[khash];
|
509
|
-
|
510
578
|
if (#{`value`.respond_to? :to_n}) {
|
511
579
|
result[key] = #{`value`.to_n};
|
512
580
|
}
|
@@ -521,6 +589,8 @@ class Hash
|
|
521
589
|
end
|
522
590
|
|
523
591
|
class Module
|
592
|
+
# Public: Exposes the current module as a property of
|
593
|
+
# the global object (e.g. `window`).
|
524
594
|
def native_module
|
525
595
|
`Opal.global[#{self.name}] = #{self}`
|
526
596
|
end
|
@@ -543,5 +613,5 @@ class Class
|
|
543
613
|
end
|
544
614
|
end
|
545
615
|
|
546
|
-
#
|
616
|
+
# Public: Exposes the global value (would be `window` inside a browser)
|
547
617
|
$$ = $global = Native(`Opal.global`)
|
data/stdlib/nodejs/file.rb
CHANGED
data/stdlib/nodejs/fileutils.rb
CHANGED
@@ -2,9 +2,11 @@ module FileUtils
|
|
2
2
|
extend self
|
3
3
|
`var __fs__ = #{File}.__fs__`
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
|
5
|
+
def chmod(mode, file_list)
|
6
|
+
raise NotImplementedError, 'symbolic mode is not supported, use numeric mode' if String === mode
|
7
|
+
Array(file_list).each do |file|
|
8
|
+
`__fs__.chmodSync(mode, file)`
|
9
|
+
end
|
8
10
|
end
|
9
11
|
|
10
12
|
def cp source, target
|
@@ -16,11 +18,16 @@ module FileUtils
|
|
16
18
|
`__fs__.unlinkSync(path)`
|
17
19
|
end
|
18
20
|
|
19
|
-
def
|
20
|
-
|
21
|
-
`__fs__.
|
21
|
+
def mkdir_p path
|
22
|
+
return true if File.directory? path
|
23
|
+
`__fs__.mkdirSync(#{path})`
|
22
24
|
end
|
23
25
|
|
24
26
|
alias mkpath mkdir_p
|
25
27
|
alias makedirs mkdir_p
|
28
|
+
|
29
|
+
def mv source, target
|
30
|
+
target = File.join(target, File.basename(source)) if File.directory? target
|
31
|
+
`__fs__.renameSync(source, target)`
|
32
|
+
end
|
26
33
|
end
|
@@ -3,7 +3,7 @@ argparse
|
|
3
3
|
|
4
4
|
[](http://travis-ci.org/nodeca/argparse)
|
5
5
|
|
6
|
-
CLI arguments parser for node.js.
|
6
|
+
CLI arguments parser for node.js. JavaScript port of python's
|
7
7
|
[argparse](http://docs.python.org/dev/library/argparse.html) module
|
8
8
|
(original version 3.2). That's a full port, except some very rare options,
|
9
9
|
recorded in issue tracker.
|
data/stdlib/opal-parser.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'opal/compiler'
|
2
2
|
require 'opal/erb'
|
3
3
|
require 'opal/version'
|
4
|
-
require 'encoding'
|
5
4
|
|
6
5
|
module Kernel
|
7
6
|
def eval(str)
|
@@ -27,7 +26,7 @@ end
|
|
27
26
|
return Opal.Opal.$compile(str, options);
|
28
27
|
};
|
29
28
|
|
30
|
-
Opal
|
29
|
+
Opal['eval'] = function(str, options) {
|
31
30
|
return eval(Opal.compile(str, options));
|
32
31
|
};
|
33
32
|
|
data/stdlib/ostruct.rb
CHANGED
@@ -3,7 +3,7 @@ class OpenStruct
|
|
3
3
|
@table = {}
|
4
4
|
|
5
5
|
hash.each_pair {|key, value|
|
6
|
-
@table[key
|
6
|
+
@table[new_ostruct_member(key)] = value
|
7
7
|
} if hash
|
8
8
|
end
|
9
9
|
|
@@ -12,12 +12,18 @@ class OpenStruct
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def []=(name, value)
|
15
|
-
@table[name
|
15
|
+
@table[new_ostruct_member(name)] = value
|
16
16
|
end
|
17
17
|
|
18
18
|
def method_missing(name, *args)
|
19
|
+
if args.length > 2
|
20
|
+
raise NoMethodError.new "undefined method `#{name}' for #<OpenStruct>"
|
21
|
+
end
|
19
22
|
if name.end_with? '='
|
20
|
-
|
23
|
+
if args.length != 1
|
24
|
+
raise ArgumentError.new "wrong number of arguments (0 for 1)"
|
25
|
+
end
|
26
|
+
@table[new_ostruct_member(name[0 .. -2])] = args[0]
|
21
27
|
else
|
22
28
|
@table[name.to_sym]
|
23
29
|
end
|
@@ -60,10 +66,63 @@ class OpenStruct
|
|
60
66
|
def hash
|
61
67
|
@table.hash
|
62
68
|
end
|
69
|
+
|
70
|
+
attr_reader :table
|
71
|
+
|
72
|
+
def delete_field(name)
|
73
|
+
sym = name.to_sym
|
74
|
+
begin
|
75
|
+
singleton_class.__send__(:remove_method, sym, "#{sym}=")
|
76
|
+
rescue NameError
|
77
|
+
end
|
78
|
+
@table.delete sym
|
79
|
+
end
|
80
|
+
|
81
|
+
def new_ostruct_member(name)
|
82
|
+
name = name.to_sym
|
83
|
+
unless respond_to?(name)
|
84
|
+
define_singleton_method(name) { @table[name] }
|
85
|
+
define_singleton_method("#{name}=") { |x| @table[name] = x }
|
86
|
+
end
|
87
|
+
name
|
88
|
+
end
|
63
89
|
|
90
|
+
`var ostruct_ids;`
|
91
|
+
|
64
92
|
def inspect
|
65
|
-
|
66
|
-
|
67
|
-
|
93
|
+
%x{
|
94
|
+
var top = (ostruct_ids === undefined),
|
95
|
+
ostruct_id = #{self.__id__};
|
96
|
+
}
|
97
|
+
begin
|
98
|
+
result = "#<#{self.class}"
|
99
|
+
%x{
|
100
|
+
if (top) {
|
101
|
+
ostruct_ids = {};
|
102
|
+
}
|
103
|
+
if (ostruct_ids.hasOwnProperty(ostruct_id)) {
|
104
|
+
return result + ' ...>';
|
105
|
+
}
|
106
|
+
ostruct_ids[ostruct_id] = true;
|
107
|
+
}
|
108
|
+
|
109
|
+
result += ' ' if @table.any?
|
110
|
+
|
111
|
+
result += each_pair.map {|name, value|
|
112
|
+
"#{name}=#{value.inspect}"
|
113
|
+
}.join ", "
|
114
|
+
|
115
|
+
result += ">"
|
116
|
+
|
117
|
+
result
|
118
|
+
ensure
|
119
|
+
%x{
|
120
|
+
if (top) {
|
121
|
+
ostruct_ids = undefined;
|
122
|
+
}
|
123
|
+
}
|
124
|
+
end
|
68
125
|
end
|
126
|
+
|
127
|
+
alias to_s inspect
|
69
128
|
end
|