opal 0.6.3 → 0.7.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/.spectator +2 -0
- data/.spectator-mspec +3 -0
- data/.travis.yml +8 -11
- data/CHANGELOG.md +33 -0
- data/CONTRIBUTING.md +8 -43
- data/Gemfile +15 -4
- data/Guardfile +77 -0
- data/README.md +15 -9
- data/Rakefile +36 -12
- data/benchmarks/operators.rb +11 -0
- data/bin/opal +10 -13
- data/bin/opal-build +4 -4
- data/bin/opal-mspec +10 -0
- data/bin/opal-repl +4 -3
- data/examples/sinatra/Gemfile +1 -1
- data/examples/sinatra/config.ru +3 -3
- data/lib/mspec/opal/main.rb.erb +2 -2
- data/lib/mspec/opal/rake_task.rb +31 -24
- data/lib/mspec/opal/runner.rb +18 -1
- data/lib/mspec/opal/sprockets.js +17 -0
- data/lib/opal.rb +1 -34
- data/lib/opal/builder.rb +92 -58
- data/lib/opal/builder_processors.rb +165 -0
- data/lib/opal/cli.rb +85 -144
- data/lib/opal/cli_options.rb +136 -90
- data/lib/opal/cli_runners.rb +10 -0
- data/lib/opal/cli_runners/nodejs.rb +56 -0
- data/lib/opal/cli_runners/phantom.js +35 -0
- data/lib/opal/cli_runners/phantomjs.rb +28 -0
- data/lib/opal/cli_runners/server.rb +54 -0
- data/lib/opal/compiler.rb +35 -16
- data/lib/opal/erb.rb +29 -15
- data/lib/opal/hike_path_finder.rb +18 -0
- data/lib/opal/nodes.rb +1 -0
- data/lib/opal/nodes/call.rb +107 -26
- data/lib/opal/nodes/call_special.rb +31 -6
- data/lib/opal/nodes/class.rb +2 -2
- data/lib/opal/nodes/constants.rb +5 -20
- data/lib/opal/nodes/def.rb +4 -4
- data/lib/opal/nodes/defined.rb +3 -3
- data/lib/opal/nodes/definitions.rb +1 -1
- data/lib/opal/nodes/for.rb +35 -0
- data/lib/opal/nodes/helpers.rb +2 -2
- data/lib/opal/nodes/iter.rb +3 -3
- data/lib/opal/nodes/literal.rb +10 -2
- data/lib/opal/nodes/masgn.rb +2 -2
- data/lib/opal/nodes/module.rb +2 -2
- data/lib/opal/nodes/scope.rb +1 -0
- data/lib/opal/nodes/singleton_class.rb +2 -2
- data/lib/opal/nodes/super.rb +2 -2
- data/lib/opal/nodes/top.rb +30 -3
- data/lib/opal/parser.rb +15 -1
- data/lib/opal/parser/grammar.rb +2571 -2452
- data/lib/opal/parser/grammar.y +37 -5
- data/lib/opal/parser/keywords.rb +2 -0
- data/lib/opal/parser/lexer.rb +21 -11
- data/lib/opal/path_reader.rb +28 -0
- data/lib/opal/paths.rb +38 -0
- data/lib/opal/source_map.rb +32 -15
- data/lib/opal/sprockets/environment.rb +9 -2
- data/lib/opal/sprockets/erb.rb +1 -2
- data/lib/opal/sprockets/path_reader.rb +34 -0
- data/lib/opal/sprockets/processor.rb +40 -39
- data/lib/opal/sprockets/server.rb +47 -33
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +10 -5
- data/opal/README.md +6 -0
- data/opal/corelib/array.rb +36 -4
- data/opal/corelib/array/inheritance.rb +6 -6
- data/opal/corelib/basic_object.rb +9 -9
- data/opal/corelib/boolean.rb +1 -1
- data/opal/corelib/class.rb +12 -12
- data/opal/corelib/dir.rb +20 -0
- data/opal/corelib/enumerable.rb +42 -42
- data/opal/corelib/enumerator.rb +1 -1
- data/opal/corelib/error.rb +2 -2
- data/opal/corelib/file.rb +56 -0
- data/opal/corelib/hash.rb +5 -5
- data/opal/corelib/helpers.rb +3 -3
- data/opal/corelib/io.rb +13 -10
- data/opal/corelib/kernel.rb +44 -68
- data/opal/corelib/method.rb +1 -1
- data/opal/corelib/module.rb +89 -114
- data/opal/corelib/nil_class.rb +1 -1
- data/opal/corelib/numeric.rb +27 -23
- data/opal/corelib/proc.rb +5 -5
- data/opal/corelib/range.rb +8 -4
- data/opal/corelib/regexp.rb +5 -5
- data/opal/corelib/runtime.js +589 -272
- data/opal/corelib/string.rb +52 -37
- data/opal/corelib/string/inheritance.rb +5 -5
- data/opal/corelib/time.rb +102 -52
- data/opal/corelib/variables.rb +3 -3
- data/opal/opal.rb +2 -0
- data/package.json +9 -0
- data/spec/filters/bugs/array.rb +0 -6
- data/spec/filters/bugs/language.rb +4 -0
- data/spec/filters/bugs/numeric.rb +7 -6
- data/spec/filters/bugs/opal.rb +2 -0
- data/spec/filters/bugs/regexp.rb +4 -0
- data/spec/filters/bugs/string.rb +0 -7
- data/spec/filters/bugs/stringscanner.rb +4 -1
- data/spec/filters/unsupported/private_methods.rb +2 -0
- data/spec/lib/builder_processors_spec.rb +27 -0
- data/spec/lib/builder_spec.rb +66 -0
- data/spec/{cli → lib}/cli_spec.rb +60 -5
- data/spec/{cli → lib}/compiler_spec.rb +66 -5
- data/spec/{cli → lib}/dependency_resolver_spec.rb +1 -1
- data/spec/lib/fixtures/no_requires.rb +1 -0
- data/spec/{cli → lib}/fixtures/opal_file.rb +0 -0
- data/spec/lib/fixtures/require_tree_test.rb +3 -0
- data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
- data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
- data/spec/lib/fixtures/requires.rb +7 -0
- data/spec/{cli → lib}/fixtures/sprockets_file.js.rb +0 -0
- data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
- data/spec/lib/hike_path_finder_spec.rb +23 -0
- data/spec/{cli → lib}/lexer_spec.rb +1 -1
- data/spec/{cli → lib}/parser/alias_spec.rb +1 -1
- data/spec/{cli → lib}/parser/and_spec.rb +1 -1
- data/spec/{cli → lib}/parser/attrasgn_spec.rb +1 -1
- data/spec/{cli → lib}/parser/begin_spec.rb +1 -1
- data/spec/{cli → lib}/parser/block_spec.rb +1 -1
- data/spec/{cli → lib}/parser/break_spec.rb +1 -1
- data/spec/{cli → lib}/parser/call_spec.rb +1 -1
- data/spec/{cli → lib}/parser/class_spec.rb +1 -1
- data/spec/{cli → lib}/parser/comments_spec.rb +1 -1
- data/spec/{cli → lib}/parser/def_spec.rb +1 -1
- data/spec/{cli → lib}/parser/if_spec.rb +1 -1
- data/spec/{cli → lib}/parser/iter_spec.rb +1 -1
- data/spec/{cli → lib}/parser/lambda_spec.rb +1 -1
- data/spec/{cli → lib}/parser/literal_spec.rb +1 -1
- data/spec/{cli → lib}/parser/masgn_spec.rb +1 -1
- data/spec/{cli → lib}/parser/module_spec.rb +1 -1
- data/spec/{cli → lib}/parser/not_spec.rb +1 -1
- data/spec/{cli → lib}/parser/op_asgn1_spec.rb +1 -1
- data/spec/{cli → lib}/parser/op_asgn2_spec.rb +1 -1
- data/spec/{cli → lib}/parser/or_spec.rb +1 -1
- data/spec/{cli → lib}/parser/return_spec.rb +1 -1
- data/spec/{cli → lib}/parser/sclass_spec.rb +1 -1
- data/spec/{cli → lib}/parser/string_spec.rb +8 -1
- data/spec/{cli → lib}/parser/super_spec.rb +1 -1
- data/spec/lib/parser/unary_spec.rb +48 -0
- data/spec/{cli → lib}/parser/undef_spec.rb +1 -1
- data/spec/{cli → lib}/parser/unless_spec.rb +1 -1
- data/spec/{cli → lib}/parser/variables_spec.rb +1 -1
- data/spec/{cli → lib}/parser/while_spec.rb +1 -1
- data/spec/{cli → lib}/parser/yield_spec.rb +1 -1
- data/spec/lib/path_reader_spec.rb +24 -0
- data/spec/lib/shared/path_finder_shared.rb +19 -0
- data/spec/lib/shared/path_reader_shared.rb +31 -0
- data/spec/lib/spec_helper.rb +9 -0
- data/spec/lib/sprockets/environment_spec.rb +30 -0
- data/spec/{cli → lib}/sprockets/erb_spec.rb +1 -1
- data/spec/lib/sprockets/path_reader_spec.rb +25 -0
- data/spec/{cli → lib}/sprockets/processor_spec.rb +9 -2
- data/spec/lib/sprockets/server_spec.rb +20 -0
- data/spec/opal/compiler/irb_spec.rb +11 -11
- data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
- data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
- data/spec/opal/core/kernel/require_tree_spec.rb +7 -0
- data/spec/opal/core/kernel/respond_to_spec.rb +2 -2
- data/spec/opal/core/runtime/method_missing_spec.rb +19 -0
- data/spec/opal/core/source_map_spec.rb +2 -2
- data/spec/opal/core/string_spec.rb +11 -0
- data/spec/opal/stdlib/erb/erb_spec.rb +0 -1
- data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
- data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
- data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
- data/spec/rubyspecs +54 -11
- data/spec/spec_helper.rb +18 -3
- data/spec/support/mspec_rspec_adapter.rb +33 -0
- data/spec/{cli/spec_helper.rb → support/parser_helpers.rb} +10 -10
- data/stdlib/README.md +3 -0
- data/stdlib/benchmark.rb +10 -0
- data/stdlib/date.rb +2 -2
- data/stdlib/dir.rb +1 -5
- data/stdlib/file.rb +1 -7
- data/stdlib/json.rb +10 -1
- data/stdlib/native.rb +5 -5
- data/stdlib/nodejs.rb +5 -0
- data/stdlib/nodejs/dir.rb +13 -0
- data/stdlib/nodejs/file.rb +98 -0
- data/stdlib/nodejs/fileutils.rb +26 -0
- data/stdlib/nodejs/io.rb +2 -0
- data/stdlib/nodejs/irb.rb +45 -0
- data/stdlib/nodejs/process.rb +16 -0
- data/stdlib/nodejs/require.rb +32 -0
- data/stdlib/nodejs/rubygems.rb +68 -0
- data/stdlib/nodejs/runtime.rb +25 -0
- data/stdlib/nodejs/yaml.rb +11 -0
- data/stdlib/opal-parser.rb +1 -2
- data/stdlib/opal-source-maps.rb +2 -0
- data/stdlib/phantomjs.rb +8 -0
- data/stdlib/process.rb +10 -0
- data/stdlib/promise.rb +12 -4
- data/stdlib/set.rb +27 -0
- data/stdlib/source_map.rb +5 -63
- data/stdlib/source_map/map.rb +220 -0
- data/stdlib/source_map/mapping.rb +26 -0
- data/stdlib/source_map/offset.rb +88 -0
- data/stdlib/source_map/version.rb +3 -0
- data/stdlib/source_map/vlq.rb +77 -101
- data/stdlib/sourcemap.rb +1 -0
- data/stdlib/strscan.rb +7 -1
- data/stdlib/template.rb +1 -1
- data/stdlib/thread.rb +147 -7
- metadata +238 -104
- data/lib/mspec/opal/mspec_fixes.rb +0 -87
- data/spec/cli/sprockets/environment_spec.rb +0 -14
- data/spec/filters/bugs/symbol.rb +0 -5
- data/spec/opal/core/kernel/warn_spec.rb +0 -83
- data/spec/opal/core/language/numbers_spec.rb +0 -60
- data/stdlib/opal-source-maps.js.erb +0 -2
- data/stdlib/source_map/generator.rb +0 -251
- data/stdlib/source_map/parser.rb +0 -102
data/opal/corelib/string.rb
CHANGED
@@ -3,7 +3,7 @@ require 'corelib/comparable'
|
|
3
3
|
class String
|
4
4
|
include Comparable
|
5
5
|
|
6
|
-
`def
|
6
|
+
`def.$$is_string = true`
|
7
7
|
|
8
8
|
def self.try_convert(what)
|
9
9
|
what.to_str
|
@@ -81,7 +81,7 @@ class String
|
|
81
81
|
|
82
82
|
def =~(other)
|
83
83
|
%x{
|
84
|
-
if (other
|
84
|
+
if (other.$$is_string) {
|
85
85
|
#{raise TypeError, 'type mismatch: String given'};
|
86
86
|
}
|
87
87
|
|
@@ -93,7 +93,7 @@ class String
|
|
93
93
|
%x{
|
94
94
|
var size = self.length;
|
95
95
|
|
96
|
-
if (index
|
96
|
+
if (index.$$is_range) {
|
97
97
|
var exclude = index.exclude,
|
98
98
|
length = index.end,
|
99
99
|
index = index.begin;
|
@@ -313,7 +313,7 @@ class String
|
|
313
313
|
options = pattern.substr(pattern.lastIndexOf('/') + 1) + 'g',
|
314
314
|
regexp = pattern.substr(1, pattern.lastIndexOf('/') - 1);
|
315
315
|
|
316
|
-
self.$sub
|
316
|
+
self.$sub.$$p = block;
|
317
317
|
return self.$sub(new RegExp(regexp, options), replace);
|
318
318
|
}
|
319
319
|
end
|
@@ -328,7 +328,7 @@ class String
|
|
328
328
|
|
329
329
|
def include?(other)
|
330
330
|
%x{
|
331
|
-
if (other
|
331
|
+
if (other.$$is_string) {
|
332
332
|
return self.indexOf(other) !== -1;
|
333
333
|
}
|
334
334
|
}
|
@@ -616,7 +616,7 @@ class String
|
|
616
616
|
return [self];
|
617
617
|
}
|
618
618
|
|
619
|
-
if (pattern && pattern
|
619
|
+
if (pattern && pattern.$$is_regexp) {
|
620
620
|
var pattern_str = pattern.toString();
|
621
621
|
|
622
622
|
/* Opal and JS's repr of an empty RE. */
|
@@ -762,14 +762,44 @@ class String
|
|
762
762
|
`self.replace(/^\s*/, '').replace(/\s*$/, '')`
|
763
763
|
end
|
764
764
|
|
765
|
+
%x{
|
766
|
+
// convert Ruby back reference to JavaScript back reference
|
767
|
+
function convertReplace(replace) {
|
768
|
+
return replace.replace(
|
769
|
+
/(^|[^\\])\\\\(\d)/g, '$1\\$2'
|
770
|
+
).replace(
|
771
|
+
/(^|[^\\])(\\\\)+\\\\(\d)/g, '$1$2\\$3'
|
772
|
+
).replace(
|
773
|
+
/(^|[^\\])(?:(\\)\\)+([^\\]|$)/g, '$1$2$3'
|
774
|
+
);
|
775
|
+
}
|
776
|
+
}
|
777
|
+
|
765
778
|
def sub(pattern, replace = undefined, &block)
|
766
779
|
%x{
|
767
|
-
if (typeof(
|
768
|
-
|
769
|
-
|
770
|
-
|
780
|
+
if (typeof(pattern) !== 'string' && !pattern.$$is_regexp) {
|
781
|
+
pattern = #{Opal.coerce_to! pattern, String, :to_str};
|
782
|
+
}
|
783
|
+
|
784
|
+
if (replace !== undefined) {
|
785
|
+
if (#{replace.is_a?(Hash)}) {
|
786
|
+
return self.replace(pattern, function(str) {
|
787
|
+
var value = #{replace[str]};
|
788
|
+
|
789
|
+
return (value == null) ? nil : #{value.to_s};
|
790
|
+
});
|
791
|
+
}
|
792
|
+
else {
|
793
|
+
if (typeof(replace) !== 'string') {
|
794
|
+
replace = #{Opal.coerce_to! replace, String, :to_str};
|
795
|
+
}
|
796
|
+
|
797
|
+
replace = convertReplace(replace);
|
798
|
+
return self.replace(pattern, replace);
|
799
|
+
}
|
800
|
+
|
771
801
|
}
|
772
|
-
if (block !== nil) {
|
802
|
+
else if (block != null && block !== nil) {
|
773
803
|
return self.replace(pattern, function() {
|
774
804
|
// FIXME: this should be a formal MatchData object with all the goodies
|
775
805
|
var match_data = []
|
@@ -788,36 +818,16 @@ class String
|
|
788
818
|
var match_len = match_data.length;
|
789
819
|
|
790
820
|
// $1, $2, $3 not being parsed correctly in Ruby code
|
791
|
-
|
792
|
-
|
793
|
-
|
821
|
+
for (var i = 1; i < match_len; i++) {
|
822
|
+
Opal.gvars[String(i)] = match_data[i];
|
823
|
+
}
|
794
824
|
#{$& = `match_data[0]`};
|
795
825
|
#{$~ = `match_data`};
|
796
826
|
return block(match_data[0]);
|
797
827
|
});
|
798
828
|
}
|
799
|
-
else if (replace !== undefined) {
|
800
|
-
if (#{replace.is_a?(Hash)}) {
|
801
|
-
return self.replace(pattern, function(str) {
|
802
|
-
var value = #{replace[str]};
|
803
|
-
|
804
|
-
return (value == null) ? nil : #{value.to_s};
|
805
|
-
});
|
806
|
-
}
|
807
|
-
else {
|
808
|
-
replace = #{String.try_convert(replace)};
|
809
|
-
|
810
|
-
if (replace == null) {
|
811
|
-
#{raise TypeError, "can't convert #{replace.class} into String"};
|
812
|
-
}
|
813
|
-
|
814
|
-
return self.replace(pattern, replace);
|
815
|
-
}
|
816
|
-
}
|
817
829
|
else {
|
818
|
-
|
819
|
-
replace = replace.toString().replace(/\\([1-9])/g, '$$$1')
|
820
|
-
return self.replace(pattern, replace);
|
830
|
+
#{raise ArgumentError, 'wrong number of arguments (1 for 2)'}
|
821
831
|
}
|
822
832
|
}
|
823
833
|
end
|
@@ -880,8 +890,13 @@ class String
|
|
880
890
|
end
|
881
891
|
|
882
892
|
def to_proc
|
883
|
-
proc
|
884
|
-
|
893
|
+
# Give name to self in case this proc is passed to instance_eval
|
894
|
+
sym = self
|
895
|
+
|
896
|
+
proc do |*args, &block|
|
897
|
+
raise ArgumentError, "no receiver given" if args.empty?
|
898
|
+
obj = args.shift
|
899
|
+
obj.send(sym, *args, &block)
|
885
900
|
end
|
886
901
|
end
|
887
902
|
|
@@ -3,10 +3,10 @@ class String
|
|
3
3
|
replace = Class.new(String::Wrapper)
|
4
4
|
|
5
5
|
%x{
|
6
|
-
klass
|
7
|
-
klass
|
8
|
-
klass
|
9
|
-
klass
|
6
|
+
klass.$$proto = replace.$$proto;
|
7
|
+
klass.$$proto.$$class = klass;
|
8
|
+
klass.$$alloc = replace.$$alloc;
|
9
|
+
klass.$$parent = #{String::Wrapper};
|
10
10
|
|
11
11
|
klass.$allocate = replace.$allocate;
|
12
12
|
klass.$new = replace.$new;
|
@@ -38,7 +38,7 @@ class String::Wrapper
|
|
38
38
|
def method_missing(*args, &block)
|
39
39
|
result = @literal.__send__(*args, &block)
|
40
40
|
|
41
|
-
if `result
|
41
|
+
if `result.$$is_string != null`
|
42
42
|
if `result == #@literal`
|
43
43
|
self
|
44
44
|
else
|
data/opal/corelib/time.rb
CHANGED
@@ -124,24 +124,26 @@ class Time
|
|
124
124
|
other = Opal.coerce_to other, Integer, :to_int
|
125
125
|
|
126
126
|
%x{
|
127
|
-
var result
|
128
|
-
|
127
|
+
var result = new Date(self.getTime() + (other * 1000));
|
128
|
+
result.tz_offset = #@tz_offset;
|
129
|
+
|
129
130
|
return result;
|
130
131
|
}
|
131
132
|
end
|
132
133
|
|
133
134
|
def -(other)
|
134
135
|
if Time === other
|
135
|
-
`(self.getTime() - other.getTime()) / 1000`
|
136
|
-
else
|
137
|
-
other = Opal.coerce_to other, Integer, :to_int
|
138
|
-
|
139
|
-
%x{
|
140
|
-
var result = new Date(self.getTime() - (other * 1000));
|
141
|
-
result.tz_offset = self.tz_offset;
|
142
|
-
return result;
|
143
|
-
}
|
136
|
+
return `(self.getTime() - other.getTime()) / 1000`
|
144
137
|
end
|
138
|
+
|
139
|
+
other = Opal.coerce_to other, Integer, :to_int
|
140
|
+
|
141
|
+
%x{
|
142
|
+
var result = new Date(self.getTime() - (other * 1000));
|
143
|
+
result.tz_offset = #@tz_offset;
|
144
|
+
|
145
|
+
return result;
|
146
|
+
}
|
145
147
|
end
|
146
148
|
|
147
149
|
def <=>(other)
|
@@ -159,7 +161,14 @@ class Time
|
|
159
161
|
alias ctime asctime
|
160
162
|
|
161
163
|
def day
|
162
|
-
|
164
|
+
%x{
|
165
|
+
if (#@tz_offset === 0) {
|
166
|
+
return self.getUTCDate();
|
167
|
+
}
|
168
|
+
else {
|
169
|
+
return self.getDate();
|
170
|
+
}
|
171
|
+
}
|
163
172
|
end
|
164
173
|
|
165
174
|
def yday
|
@@ -179,11 +188,18 @@ class Time
|
|
179
188
|
end
|
180
189
|
|
181
190
|
def friday?
|
182
|
-
|
191
|
+
`#{wday} == 5`
|
183
192
|
end
|
184
193
|
|
185
194
|
def hour
|
186
|
-
|
195
|
+
%x{
|
196
|
+
if (#@tz_offset === 0) {
|
197
|
+
return self.getUTCHours();
|
198
|
+
}
|
199
|
+
else {
|
200
|
+
return self.getHours();
|
201
|
+
}
|
202
|
+
}
|
187
203
|
end
|
188
204
|
|
189
205
|
def inspect
|
@@ -197,25 +213,46 @@ class Time
|
|
197
213
|
alias mday day
|
198
214
|
|
199
215
|
def min
|
200
|
-
|
216
|
+
%x{
|
217
|
+
if (#@tz_offset === 0) {
|
218
|
+
return self.getUTCMinutes();
|
219
|
+
}
|
220
|
+
else {
|
221
|
+
return self.getMinutes();
|
222
|
+
}
|
223
|
+
}
|
201
224
|
end
|
202
225
|
|
203
226
|
def mon
|
204
|
-
|
227
|
+
%x{
|
228
|
+
if (#@tz_offset === 0) {
|
229
|
+
return self.getUTCMonth() + 1;
|
230
|
+
}
|
231
|
+
else {
|
232
|
+
return self.getMonth() + 1;
|
233
|
+
}
|
234
|
+
}
|
205
235
|
end
|
206
236
|
|
207
237
|
def monday?
|
208
|
-
|
238
|
+
`#{wday} == 1`
|
209
239
|
end
|
210
240
|
|
211
241
|
alias month mon
|
212
242
|
|
213
243
|
def saturday?
|
214
|
-
|
244
|
+
`#{wday} == 6`
|
215
245
|
end
|
216
246
|
|
217
247
|
def sec
|
218
|
-
|
248
|
+
%x{
|
249
|
+
if (#@tz_offset === 0) {
|
250
|
+
return self.getUTCSeconds();
|
251
|
+
}
|
252
|
+
else {
|
253
|
+
return self.getSeconds();
|
254
|
+
}
|
255
|
+
}
|
219
256
|
end
|
220
257
|
|
221
258
|
def usec
|
@@ -246,14 +283,15 @@ class Time
|
|
246
283
|
|
247
284
|
def getgm
|
248
285
|
%x{
|
249
|
-
var result
|
250
|
-
|
286
|
+
var result = new Date(self.getTime());
|
287
|
+
result.tz_offset = 0;
|
288
|
+
|
251
289
|
return result;
|
252
290
|
}
|
253
291
|
end
|
254
292
|
|
255
293
|
def gmt?
|
256
|
-
|
294
|
+
`#@tz_offset === 0`
|
257
295
|
end
|
258
296
|
|
259
297
|
def gmt_offset
|
@@ -283,42 +321,42 @@ class Time
|
|
283
321
|
|
284
322
|
switch (conv) {
|
285
323
|
case 'Y':
|
286
|
-
result +=
|
324
|
+
result += #{year};
|
287
325
|
break;
|
288
326
|
|
289
327
|
case 'C':
|
290
328
|
zero = !blank;
|
291
|
-
result += Match.round(
|
329
|
+
result += Match.round(#{year} / 100);
|
292
330
|
break;
|
293
331
|
|
294
332
|
case 'y':
|
295
333
|
zero = !blank;
|
296
|
-
result += (
|
334
|
+
result += (#{year} % 100);
|
297
335
|
break;
|
298
336
|
|
299
337
|
case 'm':
|
300
338
|
zero = !blank;
|
301
|
-
result +=
|
339
|
+
result += #{mon};
|
302
340
|
break;
|
303
341
|
|
304
342
|
case 'B':
|
305
|
-
result += long_months[
|
343
|
+
result += long_months[#{mon} - 1];
|
306
344
|
break;
|
307
345
|
|
308
346
|
case 'b':
|
309
347
|
case 'h':
|
310
348
|
blank = !zero;
|
311
|
-
result += short_months[
|
349
|
+
result += short_months[#{mon} - 1];
|
312
350
|
break;
|
313
351
|
|
314
352
|
case 'd':
|
315
353
|
zero = !blank
|
316
|
-
result +=
|
354
|
+
result += #{day};
|
317
355
|
break;
|
318
356
|
|
319
357
|
case 'e':
|
320
358
|
blank = !zero
|
321
|
-
result +=
|
359
|
+
result += #{day};
|
322
360
|
break;
|
323
361
|
|
324
362
|
case 'j':
|
@@ -327,40 +365,40 @@ class Time
|
|
327
365
|
|
328
366
|
case 'H':
|
329
367
|
zero = !blank;
|
330
|
-
result +=
|
368
|
+
result += #{hour};
|
331
369
|
break;
|
332
370
|
|
333
371
|
case 'k':
|
334
372
|
blank = !zero;
|
335
|
-
result +=
|
373
|
+
result += #{hour};
|
336
374
|
break;
|
337
375
|
|
338
376
|
case 'I':
|
339
377
|
zero = !blank;
|
340
|
-
result += (
|
378
|
+
result += (#{hour} % 12 || 12);
|
341
379
|
break;
|
342
380
|
|
343
381
|
case 'l':
|
344
382
|
blank = !zero;
|
345
|
-
result += (
|
383
|
+
result += (#{hour} % 12 || 12);
|
346
384
|
break;
|
347
385
|
|
348
386
|
case 'P':
|
349
|
-
result += (
|
387
|
+
result += (#{hour} >= 12 ? "pm" : "am");
|
350
388
|
break;
|
351
389
|
|
352
390
|
case 'p':
|
353
|
-
result += (
|
391
|
+
result += (#{hour} >= 12 ? "PM" : "AM");
|
354
392
|
break;
|
355
393
|
|
356
394
|
case 'M':
|
357
395
|
zero = !blank;
|
358
|
-
result +=
|
396
|
+
result += #{min};
|
359
397
|
break;
|
360
398
|
|
361
399
|
case 'S':
|
362
400
|
zero = !blank;
|
363
|
-
result +=
|
401
|
+
result += #{sec}
|
364
402
|
break;
|
365
403
|
|
366
404
|
case 'L':
|
@@ -402,26 +440,26 @@ class Time
|
|
402
440
|
break;
|
403
441
|
|
404
442
|
case 'A':
|
405
|
-
result += days_of_week[
|
443
|
+
result += days_of_week[#{wday}];
|
406
444
|
break;
|
407
445
|
|
408
446
|
case 'a':
|
409
|
-
result += short_days[
|
447
|
+
result += short_days[#{wday}];
|
410
448
|
break;
|
411
449
|
|
412
450
|
case 'u':
|
413
|
-
result += (
|
451
|
+
result += (#{wday} + 1);
|
414
452
|
break;
|
415
453
|
|
416
454
|
case 'w':
|
417
|
-
result +=
|
455
|
+
result += #{wday};
|
418
456
|
break;
|
419
457
|
|
420
458
|
// TODO: week year
|
421
459
|
// TODO: week number
|
422
460
|
|
423
461
|
case 's':
|
424
|
-
result +=
|
462
|
+
result += #{to_i};
|
425
463
|
break;
|
426
464
|
|
427
465
|
case 'n':
|
@@ -489,11 +527,11 @@ class Time
|
|
489
527
|
end
|
490
528
|
|
491
529
|
def sunday?
|
492
|
-
|
530
|
+
`#{wday} == 0`
|
493
531
|
end
|
494
532
|
|
495
533
|
def thursday?
|
496
|
-
|
534
|
+
`#{wday} == 4`
|
497
535
|
end
|
498
536
|
|
499
537
|
def to_a
|
@@ -511,24 +549,36 @@ class Time
|
|
511
549
|
alias to_s inspect
|
512
550
|
|
513
551
|
def tuesday?
|
514
|
-
|
552
|
+
`#{wday} == 2`
|
515
553
|
end
|
516
554
|
|
517
555
|
alias utc? gmt?
|
518
556
|
|
519
|
-
|
520
|
-
`self.getTimezoneOffset() * -60`
|
521
|
-
end
|
557
|
+
alias utc_offset gmt_offset
|
522
558
|
|
523
559
|
def wday
|
524
|
-
|
560
|
+
%x{
|
561
|
+
if (#@tz_offset === 0) {
|
562
|
+
return self.getUTCDay();
|
563
|
+
}
|
564
|
+
else {
|
565
|
+
return self.getDay();
|
566
|
+
}
|
567
|
+
}
|
525
568
|
end
|
526
569
|
|
527
570
|
def wednesday?
|
528
|
-
|
571
|
+
`#{wday} == 3`
|
529
572
|
end
|
530
573
|
|
531
574
|
def year
|
532
|
-
|
575
|
+
%x{
|
576
|
+
if (#@tz_offset === 0) {
|
577
|
+
return self.getUTCFullYear();
|
578
|
+
}
|
579
|
+
else {
|
580
|
+
return self.getFullYear();
|
581
|
+
}
|
582
|
+
}
|
533
583
|
end
|
534
584
|
end
|