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
@@ -0,0 +1,177 @@
|
|
1
|
+
require 'corelib/string'
|
2
|
+
|
3
|
+
class Encoding
|
4
|
+
def self.register(name, options = {}, &block)
|
5
|
+
names = [name] + (options[:aliases] || [])
|
6
|
+
encoding = Class.new(self, &block).
|
7
|
+
new(name, names, options[:ascii] || false, options[:dummy] || false)
|
8
|
+
|
9
|
+
names.each {|name|
|
10
|
+
const_set name.sub('-', '_'), encoding
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.find(name)
|
15
|
+
upcase = name.upcase
|
16
|
+
|
17
|
+
constants.each {|const|
|
18
|
+
encoding = const_get(const)
|
19
|
+
|
20
|
+
next unless Encoding === encoding
|
21
|
+
|
22
|
+
if encoding.name == upcase || encoding.names.include?(upcase)
|
23
|
+
return encoding
|
24
|
+
end
|
25
|
+
}
|
26
|
+
|
27
|
+
raise ArgumentError, "unknown encoding name - #{name}"
|
28
|
+
end
|
29
|
+
|
30
|
+
class << self
|
31
|
+
attr_accessor :default_external
|
32
|
+
end
|
33
|
+
|
34
|
+
attr_reader :name, :names
|
35
|
+
|
36
|
+
def initialize(name, names, ascii, dummy)
|
37
|
+
@name = name
|
38
|
+
@names = names
|
39
|
+
@ascii = ascii
|
40
|
+
@dummy = dummy
|
41
|
+
end
|
42
|
+
|
43
|
+
def ascii_compatible?
|
44
|
+
@ascii
|
45
|
+
end
|
46
|
+
|
47
|
+
def dummy?
|
48
|
+
@dummy
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_s
|
52
|
+
@name
|
53
|
+
end
|
54
|
+
|
55
|
+
def inspect
|
56
|
+
"#<Encoding:#{@name}#{" (dummy)" if @dummy}>"
|
57
|
+
end
|
58
|
+
|
59
|
+
# methods to implement per encoding
|
60
|
+
def each_byte(*)
|
61
|
+
raise NotImplementedError
|
62
|
+
end
|
63
|
+
|
64
|
+
def getbyte(*)
|
65
|
+
raise NotImplementedError
|
66
|
+
end
|
67
|
+
|
68
|
+
def bytesize(*)
|
69
|
+
raise NotImplementedError
|
70
|
+
end
|
71
|
+
|
72
|
+
class EncodingError < StandardError; end
|
73
|
+
class CompatibilityError < EncodingError; end
|
74
|
+
end
|
75
|
+
|
76
|
+
Encoding.register "UTF-8", aliases: ["CP65001"], ascii: true do
|
77
|
+
def each_byte(string, &block)
|
78
|
+
%x{
|
79
|
+
for (var i = 0, length = string.length; i < length; i++) {
|
80
|
+
var code = string.charCodeAt(i);
|
81
|
+
|
82
|
+
if (code <= 0x7f) {
|
83
|
+
#{yield `code`};
|
84
|
+
}
|
85
|
+
else {
|
86
|
+
var encoded = encodeURIComponent(string.charAt(i)).substr(1).split('%');
|
87
|
+
|
88
|
+
for (var j = 0, encoded_length = encoded.length; j < encoded_length; j++) {
|
89
|
+
#{yield `parseInt(encoded[j], 16)`};
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
def bytesize
|
97
|
+
bytes.length
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
Encoding.register "UTF-16LE" do
|
102
|
+
def each_byte(string, &block)
|
103
|
+
%x{
|
104
|
+
for (var i = 0, length = string.length; i < length; i++) {
|
105
|
+
var code = string.charCodeAt(i);
|
106
|
+
|
107
|
+
#{yield `code & 0xff`};
|
108
|
+
#{yield `code >> 8`};
|
109
|
+
}
|
110
|
+
}
|
111
|
+
end
|
112
|
+
|
113
|
+
def bytesize
|
114
|
+
bytes.length
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
Encoding.register "ASCII-8BIT", aliases: ["BINARY"], ascii: true do
|
119
|
+
def each_byte(string, &block)
|
120
|
+
%x{
|
121
|
+
for (var i = 0, length = string.length; i < length; i++) {
|
122
|
+
#{yield `string.charCodeAt(i) & 0xff`};
|
123
|
+
}
|
124
|
+
}
|
125
|
+
end
|
126
|
+
|
127
|
+
def bytesize
|
128
|
+
bytes.length
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
class String
|
133
|
+
`String.prototype.encoding = #{Encoding::UTF_16LE}`
|
134
|
+
|
135
|
+
def bytes
|
136
|
+
each_byte.to_a
|
137
|
+
end
|
138
|
+
|
139
|
+
def bytesize
|
140
|
+
@encoding.bytesize(self)
|
141
|
+
end
|
142
|
+
|
143
|
+
def each_byte(&block)
|
144
|
+
return enum_for :each_byte unless block_given?
|
145
|
+
|
146
|
+
@encoding.each_byte(self, &block)
|
147
|
+
|
148
|
+
self
|
149
|
+
end
|
150
|
+
|
151
|
+
def encode(encoding)
|
152
|
+
dup.force_encoding(encoding)
|
153
|
+
end
|
154
|
+
|
155
|
+
def encoding
|
156
|
+
@encoding
|
157
|
+
end
|
158
|
+
|
159
|
+
def force_encoding(encoding)
|
160
|
+
encoding = Opal.coerce_to!(encoding, String, :to_str)
|
161
|
+
encoding = Encoding.find(encoding)
|
162
|
+
|
163
|
+
return self if encoding == @encoding
|
164
|
+
raise ArgumentError, "unknown encoding name - #{encoding}" if encoding.nil?
|
165
|
+
|
166
|
+
%x{
|
167
|
+
var result = new String(self);
|
168
|
+
result.encoding = encoding;
|
169
|
+
|
170
|
+
return result;
|
171
|
+
}
|
172
|
+
end
|
173
|
+
|
174
|
+
def getbyte(idx)
|
175
|
+
@encoding.getbyte(self, idx)
|
176
|
+
end
|
177
|
+
end
|
data/opal/corelib/struct.rb
CHANGED
@@ -14,7 +14,18 @@ class Struct
|
|
14
14
|
Class.new(self) {
|
15
15
|
args.each { |arg| define_struct_attribute arg }
|
16
16
|
|
17
|
-
|
17
|
+
class_eval(&block) if block
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def new(*args)
|
21
|
+
instance = allocate
|
22
|
+
`#{instance}.$$data = {};`
|
23
|
+
instance.initialize(*args)
|
24
|
+
instance
|
25
|
+
end
|
26
|
+
|
27
|
+
alias [] new
|
28
|
+
end
|
18
29
|
}
|
19
30
|
end
|
20
31
|
end
|
@@ -26,7 +37,15 @@ class Struct
|
|
26
37
|
|
27
38
|
members << name
|
28
39
|
|
29
|
-
|
40
|
+
if Opal.valid_method_name?(name)
|
41
|
+
define_method name do
|
42
|
+
self[name]
|
43
|
+
end
|
44
|
+
|
45
|
+
define_method "#{name}=" do |value|
|
46
|
+
self[name] = value
|
47
|
+
end
|
48
|
+
end
|
30
49
|
end
|
31
50
|
|
32
51
|
def self.members
|
@@ -45,19 +64,19 @@ class Struct
|
|
45
64
|
}
|
46
65
|
end
|
47
66
|
|
48
|
-
class << self
|
49
|
-
alias [] new
|
50
|
-
end
|
51
|
-
|
52
67
|
def initialize(*args)
|
53
68
|
members.each_with_index {|name, index|
|
54
|
-
|
69
|
+
self[name] = args[index]
|
55
70
|
}
|
56
71
|
end
|
57
72
|
|
58
73
|
def members
|
59
74
|
self.class.members
|
60
75
|
end
|
76
|
+
|
77
|
+
def hash
|
78
|
+
Hash.new(`self.$$data`).hash
|
79
|
+
end
|
61
80
|
|
62
81
|
def [](name)
|
63
82
|
if Integer === name
|
@@ -71,7 +90,8 @@ class Struct
|
|
71
90
|
raise TypeError, "no implicit conversion of #{name.class} into Integer"
|
72
91
|
end
|
73
92
|
|
74
|
-
|
93
|
+
name = Opal.coerce_to!(name, String, :to_str)
|
94
|
+
`self.$$data[name]`
|
75
95
|
end
|
76
96
|
|
77
97
|
def []=(name, value)
|
@@ -86,29 +106,96 @@ class Struct
|
|
86
106
|
raise TypeError, "no implicit conversion of #{name.class} into Integer"
|
87
107
|
end
|
88
108
|
|
89
|
-
|
109
|
+
name = Opal.coerce_to!(name, String, :to_str)
|
110
|
+
`self.$$data[name] = value`
|
111
|
+
end
|
112
|
+
|
113
|
+
def ==(other)
|
114
|
+
return false unless other.instance_of?(self.class)
|
115
|
+
|
116
|
+
%x{
|
117
|
+
var recursed1 = {}, recursed2 = {};
|
118
|
+
|
119
|
+
function _eqeq(struct, other) {
|
120
|
+
var key, a, b;
|
121
|
+
|
122
|
+
recursed1[#{`struct`.__id__}] = true;
|
123
|
+
recursed2[#{`other`.__id__}] = true;
|
124
|
+
|
125
|
+
for (key in struct.$$data) {
|
126
|
+
a = struct.$$data[key];
|
127
|
+
b = other.$$data[key];
|
128
|
+
|
129
|
+
if (#{Struct === `a`}) {
|
130
|
+
if (!recursed1.hasOwnProperty(#{`a`.__id__}) || !recursed2.hasOwnProperty(#{`b`.__id__})) {
|
131
|
+
if (!_eqeq(a, b)) {
|
132
|
+
return false;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
} else {
|
136
|
+
if (!#{`a` == `b`}) {
|
137
|
+
return false;
|
138
|
+
}
|
139
|
+
}
|
140
|
+
}
|
141
|
+
|
142
|
+
return true;
|
143
|
+
}
|
144
|
+
|
145
|
+
return _eqeq(self, other);
|
146
|
+
}
|
147
|
+
end
|
148
|
+
|
149
|
+
def eql?(other)
|
150
|
+
return false unless other.instance_of?(self.class)
|
151
|
+
|
152
|
+
%x{
|
153
|
+
var recursed1 = {}, recursed2 = {};
|
154
|
+
|
155
|
+
function _eqeq(struct, other) {
|
156
|
+
var key, a, b;
|
157
|
+
|
158
|
+
recursed1[#{`struct`.__id__}] = true;
|
159
|
+
recursed2[#{`other`.__id__}] = true;
|
160
|
+
|
161
|
+
for (key in struct.$$data) {
|
162
|
+
a = struct.$$data[key];
|
163
|
+
b = other.$$data[key];
|
164
|
+
|
165
|
+
if (#{Struct === `a`}) {
|
166
|
+
if (!recursed1.hasOwnProperty(#{`a`.__id__}) || !recursed2.hasOwnProperty(#{`b`.__id__})) {
|
167
|
+
if (!_eqeq(a, b)) {
|
168
|
+
return false;
|
169
|
+
}
|
170
|
+
}
|
171
|
+
} else {
|
172
|
+
if (!#{`a`.eql?(`b`)}) {
|
173
|
+
return false;
|
174
|
+
}
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
return true;
|
179
|
+
}
|
180
|
+
|
181
|
+
return _eqeq(self, other);
|
182
|
+
}
|
90
183
|
end
|
91
184
|
|
92
185
|
def each
|
93
|
-
return enum_for
|
186
|
+
return enum_for(:each){self.size} unless block_given?
|
94
187
|
|
95
188
|
members.each { |name| yield self[name] }
|
96
189
|
self
|
97
190
|
end
|
98
191
|
|
99
192
|
def each_pair
|
100
|
-
return enum_for
|
193
|
+
return enum_for(:each_pair){self.size} unless block_given?
|
101
194
|
|
102
|
-
members.each { |name| yield name, self[name] }
|
195
|
+
members.each { |name| yield [name, self[name]] }
|
103
196
|
self
|
104
197
|
end
|
105
198
|
|
106
|
-
def eql?(other)
|
107
|
-
hash == other.hash || other.each_with_index.all? {|object, index|
|
108
|
-
self[members[index]] == object
|
109
|
-
}
|
110
|
-
end
|
111
|
-
|
112
199
|
def length
|
113
200
|
members.length
|
114
201
|
end
|
data/opal/corelib/time.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'corelib/comparable'
|
2
2
|
|
3
|
-
class Time
|
3
|
+
class Time < `Date`
|
4
4
|
include Comparable
|
5
5
|
|
6
6
|
%x{
|
@@ -10,100 +10,213 @@ class Time
|
|
10
10
|
long_months = #{%w[January February March April May June July August September October November December]};
|
11
11
|
}
|
12
12
|
|
13
|
-
def self.at(seconds, frac =
|
14
|
-
`new Date(seconds * 1000 + frac)`
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.new(year = undefined, month = undefined, day = undefined, hour = undefined, minute = undefined, second = undefined, utc_offset = undefined)
|
13
|
+
def self.at(seconds, frac = undefined)
|
18
14
|
%x{
|
19
|
-
|
20
|
-
case 1:
|
21
|
-
return new Date(year, 0);
|
22
|
-
|
23
|
-
case 2:
|
24
|
-
return new Date(year, month - 1);
|
25
|
-
|
26
|
-
case 3:
|
27
|
-
return new Date(year, month - 1, day);
|
15
|
+
var result;
|
28
16
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
17
|
+
if (#{Time === seconds}) {
|
18
|
+
if (frac !== undefined) {
|
19
|
+
#{raise TypeError, "can't convert Time into an exact number"}
|
20
|
+
}
|
21
|
+
result = new Date(seconds.getTime());
|
22
|
+
result.is_utc = seconds.is_utc;
|
23
|
+
return result;
|
24
|
+
}
|
34
25
|
|
35
|
-
|
36
|
-
|
26
|
+
if (!seconds.$$is_number) {
|
27
|
+
seconds = #{Opal.coerce_to!(seconds, Integer, :to_int)};
|
28
|
+
}
|
37
29
|
|
38
|
-
|
39
|
-
|
30
|
+
if (frac === undefined) {
|
31
|
+
return new Date(seconds * 1000);
|
32
|
+
}
|
40
33
|
|
41
|
-
|
42
|
-
|
34
|
+
if (!frac.$$is_number) {
|
35
|
+
frac = #{Opal.coerce_to!(frac, Integer, :to_int)};
|
43
36
|
}
|
37
|
+
|
38
|
+
return new Date(seconds * 1000 + (frac / 1000));
|
44
39
|
}
|
45
40
|
end
|
46
41
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
42
|
+
%x{
|
43
|
+
function time_params(year, month, day, hour, min, sec) {
|
44
|
+
if (year.$$is_string) {
|
45
|
+
year = parseInt(year, 10);
|
46
|
+
} else {
|
47
|
+
year = #{Opal.coerce_to!(`year`, Integer, :to_int)};
|
48
|
+
}
|
51
49
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
if (month === nil) {
|
51
|
+
month = 1;
|
52
|
+
} else if (!month.$$is_number) {
|
53
|
+
if (#{`month`.respond_to?(:to_str)}) {
|
54
|
+
month = #{`month`.to_str};
|
55
|
+
switch (month.toLowerCase()) {
|
56
|
+
case 'jan': month = 1; break;
|
57
|
+
case 'feb': month = 2; break;
|
58
|
+
case 'mar': month = 3; break;
|
59
|
+
case 'apr': month = 4; break;
|
60
|
+
case 'may': month = 5; break;
|
61
|
+
case 'jun': month = 6; break;
|
62
|
+
case 'jul': month = 7; break;
|
63
|
+
case 'aug': month = 8; break;
|
64
|
+
case 'sep': month = 9; break;
|
65
|
+
case 'oct': month = 10; break;
|
66
|
+
case 'nov': month = 11; break;
|
67
|
+
case 'dec': month = 12; break;
|
68
|
+
default: month = #{`month`.to_i};
|
69
|
+
}
|
70
|
+
} else {
|
71
|
+
month = #{Opal.coerce_to!(`month`, Integer, :to_int)};
|
72
|
+
}
|
58
73
|
}
|
59
|
-
end
|
60
74
|
|
61
|
-
|
75
|
+
if (month < 1 || month > 12) {
|
76
|
+
#{raise ArgumentError, "month out of range: #{`month`}"}
|
77
|
+
}
|
78
|
+
month = month - 1;
|
79
|
+
|
80
|
+
if (day === nil) {
|
81
|
+
day = 1;
|
82
|
+
} else if (day.$$is_string) {
|
83
|
+
day = parseInt(day, 10);
|
84
|
+
} else {
|
85
|
+
day = #{Opal.coerce_to!(`day`, Integer, :to_int)};
|
86
|
+
}
|
62
87
|
|
63
|
-
|
88
|
+
if (day < 1 || day > 31) {
|
89
|
+
#{raise ArgumentError, "day out of range: #{`day`}"}
|
90
|
+
}
|
64
91
|
|
65
|
-
|
66
|
-
|
67
|
-
|
92
|
+
if (hour === nil) {
|
93
|
+
hour = 0;
|
94
|
+
} else if (hour.$$is_string) {
|
95
|
+
hour = parseInt(hour, 10);
|
96
|
+
} else {
|
97
|
+
hour = #{Opal.coerce_to!(`hour`, Integer, :to_int)};
|
98
|
+
}
|
99
|
+
|
100
|
+
if (hour < 0 || hour > 24) {
|
101
|
+
#{raise ArgumentError, "hour out of range: #{`hour`}"}
|
102
|
+
}
|
68
103
|
|
69
|
-
|
104
|
+
if (min === nil) {
|
105
|
+
min = 0;
|
106
|
+
} else if (min.$$is_string) {
|
107
|
+
min = parseInt(min, 10);
|
108
|
+
} else {
|
109
|
+
min = #{Opal.coerce_to!(`min`, Integer, :to_int)};
|
110
|
+
}
|
70
111
|
|
71
|
-
|
72
|
-
|
73
|
-
|
112
|
+
if (min < 0 || min > 59) {
|
113
|
+
#{raise ArgumentError, "min out of range: #{`min`}"}
|
114
|
+
}
|
74
115
|
|
75
|
-
|
116
|
+
if (sec === nil) {
|
117
|
+
sec = 0;
|
118
|
+
} else if (!sec.$$is_number) {
|
119
|
+
if (sec.$$is_string) {
|
120
|
+
sec = parseInt(sec, 10);
|
121
|
+
} else {
|
122
|
+
sec = #{Opal.coerce_to!(`sec`, Integer, :to_int)};
|
123
|
+
}
|
124
|
+
}
|
76
125
|
|
77
|
-
|
78
|
-
|
79
|
-
|
126
|
+
if (sec < 0 || sec > 60) {
|
127
|
+
#{raise ArgumentError, "sec out of range: #{`sec`}"}
|
128
|
+
}
|
80
129
|
|
81
|
-
|
130
|
+
return [year, month, day, hour, min, sec];
|
131
|
+
}
|
132
|
+
}
|
82
133
|
|
83
|
-
|
84
|
-
|
85
|
-
|
134
|
+
def self.new(year = undefined, month = nil, day = nil, hour = nil, min = nil, sec = nil, utc_offset = nil)
|
135
|
+
%x{
|
136
|
+
var args, result;
|
86
137
|
|
87
|
-
|
138
|
+
if (year === undefined) {
|
139
|
+
return new Date();
|
140
|
+
}
|
88
141
|
|
89
|
-
|
90
|
-
|
91
|
-
|
142
|
+
if (utc_offset !== nil) {
|
143
|
+
#{raise ArgumentError, 'Opal does not support explicitly specifying UTC offset for Time'}
|
144
|
+
}
|
92
145
|
|
93
|
-
|
146
|
+
args = time_params(year, month, day, hour, min, sec);
|
147
|
+
year = args[0];
|
148
|
+
month = args[1];
|
149
|
+
day = args[2];
|
150
|
+
hour = args[3];
|
151
|
+
min = args[4];
|
152
|
+
sec = args[5];
|
153
|
+
|
154
|
+
result = new Date(year, month, day, hour, min, 0, sec * 1000);
|
155
|
+
if (year < 100) {
|
156
|
+
result.setFullYear(year);
|
157
|
+
}
|
158
|
+
return result;
|
159
|
+
}
|
94
160
|
end
|
95
161
|
|
96
|
-
def self.
|
97
|
-
|
162
|
+
def self.local(year, month = nil, day = nil, hour = nil, min = nil, sec = nil, millisecond = nil)
|
163
|
+
%x{
|
164
|
+
var args, result;
|
165
|
+
|
166
|
+
if (arguments.length === 10) {
|
167
|
+
args = $slice.call(arguments);
|
168
|
+
year = args[5];
|
169
|
+
month = args[4];
|
170
|
+
day = args[3];
|
171
|
+
hour = args[2];
|
172
|
+
min = args[1];
|
173
|
+
sec = args[0];
|
174
|
+
}
|
98
175
|
|
176
|
+
args = time_params(year, month, day, hour, min, sec);
|
177
|
+
year = args[0];
|
178
|
+
month = args[1];
|
179
|
+
day = args[2];
|
180
|
+
hour = args[3];
|
181
|
+
min = args[4];
|
182
|
+
sec = args[5];
|
183
|
+
|
184
|
+
result = new Date(year, month, day, hour, min, 0, sec * 1000);
|
185
|
+
if (year < 100) {
|
186
|
+
result.setFullYear(year);
|
187
|
+
}
|
188
|
+
return result;
|
189
|
+
}
|
190
|
+
end
|
191
|
+
|
192
|
+
def self.gm(year, month = nil, day = nil, hour = nil, min = nil, sec = nil, millisecond = nil)
|
99
193
|
%x{
|
100
|
-
|
101
|
-
|
194
|
+
var args, result;
|
195
|
+
|
196
|
+
if (arguments.length === 10) {
|
197
|
+
args = $slice.call(arguments);
|
198
|
+
year = args[5];
|
199
|
+
month = args[4];
|
200
|
+
day = args[3];
|
201
|
+
hour = args[2];
|
202
|
+
min = args[1];
|
203
|
+
sec = args[0];
|
102
204
|
}
|
103
205
|
|
104
|
-
|
105
|
-
|
106
|
-
|
206
|
+
args = time_params(year, month, day, hour, min, sec);
|
207
|
+
year = args[0];
|
208
|
+
month = args[1];
|
209
|
+
day = args[2];
|
210
|
+
hour = args[3];
|
211
|
+
min = args[4];
|
212
|
+
sec = args[5];
|
213
|
+
|
214
|
+
result = new Date(Date.UTC(year, month, day, hour, min, 0, sec * 1000));
|
215
|
+
if (year < 100) {
|
216
|
+
result.setUTCFullYear(year);
|
217
|
+
}
|
218
|
+
result.is_utc = true;
|
219
|
+
return result;
|
107
220
|
}
|
108
221
|
end
|
109
222
|
|
@@ -113,7 +226,7 @@ class Time
|
|
113
226
|
end
|
114
227
|
|
115
228
|
def self.now
|
116
|
-
|
229
|
+
new
|
117
230
|
end
|
118
231
|
|
119
232
|
def +(other)
|
@@ -121,12 +234,12 @@ class Time
|
|
121
234
|
raise TypeError, "time + time?"
|
122
235
|
end
|
123
236
|
|
124
|
-
other = Opal.coerce_to other, Integer, :to_int
|
125
|
-
|
126
237
|
%x{
|
127
|
-
|
128
|
-
|
129
|
-
|
238
|
+
if (!other.$$is_number) {
|
239
|
+
other = #{Opal.coerce_to!(other, Integer, :to_int)};
|
240
|
+
}
|
241
|
+
var result = new Date(self.getTime() + (other * 1000));
|
242
|
+
result.is_utc = self.is_utc;
|
130
243
|
return result;
|
131
244
|
}
|
132
245
|
end
|
@@ -136,18 +249,31 @@ class Time
|
|
136
249
|
return `(self.getTime() - other.getTime()) / 1000`
|
137
250
|
end
|
138
251
|
|
139
|
-
other = Opal.coerce_to other, Integer, :to_int
|
140
|
-
|
141
252
|
%x{
|
142
|
-
|
143
|
-
|
144
|
-
|
253
|
+
if (!other.$$is_number) {
|
254
|
+
other = #{Opal.coerce_to!(other, Integer, :to_int)};
|
255
|
+
}
|
256
|
+
var result = new Date(self.getTime() - (other * 1000));
|
257
|
+
result.is_utc = self.is_utc;
|
145
258
|
return result;
|
146
259
|
}
|
147
260
|
end
|
148
261
|
|
149
262
|
def <=>(other)
|
150
|
-
|
263
|
+
if Time === other
|
264
|
+
to_f <=> other.to_f
|
265
|
+
else
|
266
|
+
r = other <=> self
|
267
|
+
if r.nil?
|
268
|
+
nil
|
269
|
+
elsif r > 0
|
270
|
+
-1
|
271
|
+
elsif r < 0
|
272
|
+
1
|
273
|
+
else
|
274
|
+
0
|
275
|
+
end
|
276
|
+
end
|
151
277
|
end
|
152
278
|
|
153
279
|
def ==(other)
|
@@ -161,26 +287,37 @@ class Time
|
|
161
287
|
alias ctime asctime
|
162
288
|
|
163
289
|
def day
|
164
|
-
|
165
|
-
if (#@tz_offset === 0) {
|
166
|
-
return self.getUTCDate();
|
167
|
-
}
|
168
|
-
else {
|
169
|
-
return self.getDate();
|
170
|
-
}
|
171
|
-
}
|
290
|
+
`self.is_utc ? self.getUTCDate() : self.getDate()`
|
172
291
|
end
|
173
292
|
|
174
293
|
def yday
|
294
|
+
# http://javascript.about.com/library/bldayyear.htm
|
295
|
+
# also see moment.js implementation: http://git.io/vCKNE
|
296
|
+
|
297
|
+
start_of_year = Time.new(year).to_i
|
298
|
+
start_of_day = Time.new(year, month, day).to_i
|
299
|
+
one_day = 86400
|
300
|
+
|
301
|
+
((start_of_day - start_of_year) / one_day).round + 1
|
302
|
+
end
|
303
|
+
|
304
|
+
def isdst
|
175
305
|
%x{
|
176
|
-
|
177
|
-
|
178
|
-
return Math.
|
306
|
+
var jan = new Date(self.getFullYear(), 0, 1),
|
307
|
+
jul = new Date(self.getFullYear(), 6, 1);
|
308
|
+
return self.getTimezoneOffset() < Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
|
179
309
|
}
|
180
310
|
end
|
181
311
|
|
182
|
-
|
183
|
-
|
312
|
+
alias dst? isdst
|
313
|
+
|
314
|
+
def dup
|
315
|
+
copy = `new Date(self.getTime())`
|
316
|
+
|
317
|
+
copy.copy_instance_variables(self)
|
318
|
+
copy.initialize_dup(self)
|
319
|
+
|
320
|
+
copy
|
184
321
|
end
|
185
322
|
|
186
323
|
def eql?(other)
|
@@ -191,15 +328,12 @@ class Time
|
|
191
328
|
`#{wday} == 5`
|
192
329
|
end
|
193
330
|
|
331
|
+
def hash
|
332
|
+
`'Time:' + self.getTime()`
|
333
|
+
end
|
334
|
+
|
194
335
|
def hour
|
195
|
-
|
196
|
-
if (#@tz_offset === 0) {
|
197
|
-
return self.getUTCHours();
|
198
|
-
}
|
199
|
-
else {
|
200
|
-
return self.getHours();
|
201
|
-
}
|
202
|
-
}
|
336
|
+
`self.is_utc ? self.getUTCHours() : self.getHours()`
|
203
337
|
end
|
204
338
|
|
205
339
|
def inspect
|
@@ -213,25 +347,11 @@ class Time
|
|
213
347
|
alias mday day
|
214
348
|
|
215
349
|
def min
|
216
|
-
|
217
|
-
if (#@tz_offset === 0) {
|
218
|
-
return self.getUTCMinutes();
|
219
|
-
}
|
220
|
-
else {
|
221
|
-
return self.getMinutes();
|
222
|
-
}
|
223
|
-
}
|
350
|
+
`self.is_utc ? self.getUTCMinutes() : self.getMinutes()`
|
224
351
|
end
|
225
352
|
|
226
353
|
def mon
|
227
|
-
|
228
|
-
if (#@tz_offset === 0) {
|
229
|
-
return self.getUTCMonth() + 1;
|
230
|
-
}
|
231
|
-
else {
|
232
|
-
return self.getMonth() + 1;
|
233
|
-
}
|
234
|
-
}
|
354
|
+
`(self.is_utc ? self.getUTCMonth() : self.getMonth()) + 1`
|
235
355
|
end
|
236
356
|
|
237
357
|
def monday?
|
@@ -245,19 +365,19 @@ class Time
|
|
245
365
|
end
|
246
366
|
|
247
367
|
def sec
|
368
|
+
`self.is_utc ? self.getUTCSeconds() : self.getSeconds()`
|
369
|
+
end
|
370
|
+
|
371
|
+
def succ
|
248
372
|
%x{
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
else {
|
253
|
-
return self.getSeconds();
|
254
|
-
}
|
373
|
+
var result = new Date(self.getTime() + 1000);
|
374
|
+
result.is_utc = self.is_utc;
|
375
|
+
return result;
|
255
376
|
}
|
256
377
|
end
|
257
378
|
|
258
379
|
def usec
|
259
|
-
|
260
|
-
0
|
380
|
+
`self.getMilliseconds() * 1000`
|
261
381
|
end
|
262
382
|
|
263
383
|
def zone
|
@@ -283,15 +403,25 @@ class Time
|
|
283
403
|
|
284
404
|
def getgm
|
285
405
|
%x{
|
286
|
-
var result
|
287
|
-
|
288
|
-
|
406
|
+
var result = new Date(self.getTime());
|
407
|
+
result.is_utc = true;
|
289
408
|
return result;
|
290
409
|
}
|
291
410
|
end
|
292
411
|
|
412
|
+
alias getutc getgm
|
413
|
+
|
414
|
+
def gmtime
|
415
|
+
%x{
|
416
|
+
self.is_utc = true;
|
417
|
+
return self;
|
418
|
+
}
|
419
|
+
end
|
420
|
+
|
421
|
+
alias utc gmtime
|
422
|
+
|
293
423
|
def gmt?
|
294
|
-
|
424
|
+
`self.is_utc === true`
|
295
425
|
end
|
296
426
|
|
297
427
|
def gmt_offset
|
@@ -302,7 +432,6 @@ class Time
|
|
302
432
|
%x{
|
303
433
|
return format.replace(/%([\-_#^0]*:{0,2})(\d+)?([EO]*)(.)/g, function(full, flags, width, _, conv) {
|
304
434
|
var result = "",
|
305
|
-
width = parseInt(width),
|
306
435
|
zero = flags.indexOf('0') !== -1,
|
307
436
|
pad = flags.indexOf('-') === -1,
|
308
437
|
blank = flags.indexOf('_') !== -1,
|
@@ -310,6 +439,8 @@ class Time
|
|
310
439
|
invert = flags.indexOf('#') !== -1,
|
311
440
|
colons = (flags.match(':') || []).length;
|
312
441
|
|
442
|
+
width = parseInt(width, 10);
|
443
|
+
|
313
444
|
if (zero && blank) {
|
314
445
|
if (flags.indexOf('0') < flags.indexOf('_')) {
|
315
446
|
zero = false;
|
@@ -552,7 +683,7 @@ class Time
|
|
552
683
|
end
|
553
684
|
|
554
685
|
def to_i
|
555
|
-
`parseInt(self.getTime() / 1000)`
|
686
|
+
`parseInt(self.getTime() / 1000, 10)`
|
556
687
|
end
|
557
688
|
|
558
689
|
alias to_s inspect
|
@@ -561,19 +692,17 @@ class Time
|
|
561
692
|
`#{wday} == 2`
|
562
693
|
end
|
563
694
|
|
695
|
+
alias tv_sec sec
|
696
|
+
|
697
|
+
alias tv_usec usec
|
698
|
+
|
564
699
|
alias utc? gmt?
|
565
700
|
|
701
|
+
alias gmtoff gmt_offset
|
566
702
|
alias utc_offset gmt_offset
|
567
703
|
|
568
704
|
def wday
|
569
|
-
|
570
|
-
if (#@tz_offset === 0) {
|
571
|
-
return self.getUTCDay();
|
572
|
-
}
|
573
|
-
else {
|
574
|
-
return self.getDay();
|
575
|
-
}
|
576
|
-
}
|
705
|
+
`self.is_utc ? self.getUTCDay() : self.getDay()`
|
577
706
|
end
|
578
707
|
|
579
708
|
def wednesday?
|
@@ -581,17 +710,9 @@ class Time
|
|
581
710
|
end
|
582
711
|
|
583
712
|
def year
|
584
|
-
|
585
|
-
if (#@tz_offset === 0) {
|
586
|
-
return self.getUTCFullYear();
|
587
|
-
}
|
588
|
-
else {
|
589
|
-
return self.getFullYear();
|
590
|
-
}
|
591
|
-
}
|
713
|
+
`self.is_utc ? self.getUTCFullYear() : self.getFullYear()`
|
592
714
|
end
|
593
715
|
|
594
|
-
private :cweek_cyear
|
595
716
|
def cweek_cyear
|
596
717
|
jan01 = Time.new(self.year, 1, 1)
|
597
718
|
jan01_wday = jan01.wday
|