opal 0.3.22 → 0.3.25
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -1
- data/Gemfile +1 -9
- data/README.md +46 -5
- data/Rakefile +4 -94
- data/core/array.rb +13 -46
- data/core/basic_object.rb +2 -12
- data/core/boolean.rb +1 -1
- data/core/browser.js +27 -1
- data/core/class.rb +1 -7
- data/core/enumerable.rb +3 -15
- data/core/error.rb +2 -4
- data/core/hash.rb +9 -18
- data/core/json.rb +5 -0
- data/core/kernel.rb +2 -21
- data/core/load_order +5 -7
- data/core/nil_class.rb +4 -0
- data/core/numeric.rb +0 -6
- data/core/object.rb +1 -5
- data/core/proc.rb +0 -4
- data/core/range.rb +10 -17
- data/core/regexp.rb +2 -6
- data/core/runtime.js +2 -26
- data/core/string.rb +28 -26
- data/core/struct.rb +0 -4
- data/core/{erb.rb → templates.rb} +6 -4
- data/core/time.rb +7 -19
- data/core/top_self.rb +2 -2
- data/lib/opal.rb +13 -2
- data/lib/opal/builder.rb +3 -3
- data/lib/opal/erb_parser.rb +3 -2
- data/lib/opal/parser.rb +10 -2
- data/lib/opal/rake_task.rb +10 -2
- data/lib/opal/scope.rb +6 -1
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -3
- data/spec/core/array/constructor_spec.rb +0 -8
- data/spec/core/enumerable/drop_while_spec.rb +0 -4
- data/spec/core/enumerable/find_index_spec.rb +0 -4
- data/spec/core/enumerable/select_spec.rb +13 -0
- data/spec/core/kernel/respond_to_spec.rb +4 -0
- data/spec/core/string/empty_spec.rb +0 -1
- data/spec/core/string/include_spec.rb +0 -6
- data/spec/core/string/swapcase_spec.rb +0 -5
- data/spec/core/string/to_s_spec.rb +0 -7
- data/spec/core/string/to_str_spec.rb +0 -7
- data/spec/lib/erb_parser/simple.erb +1 -0
- data/spec/{grammar → lib/grammar}/alias_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/and_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/array_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/attrasgn_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/begin_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/block_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/break_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/call_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/class_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/const_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/cvar_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/def_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/false_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/file_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/gvar_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/hash_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/iasgn_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/if_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/iter_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/ivar_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/lambda_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/lasgn_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/line_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/lvar_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/masgn_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/module_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/nil_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/not_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/op_asgn1_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/op_asgn2_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/or_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/return_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/sclass_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/self_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/str_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/super_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/true_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/undef_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/unless_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/while_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/xstr_spec.rb +0 -0
- data/spec/{grammar → lib/grammar}/yield_spec.rb +0 -0
- data/spec/{parser → lib/parser}/simple_spec.rb +1 -1
- data/spec/opal/erb/erb_spec.rb +10 -2
- data/spec/opal/string/demodulize_spec.rb +10 -0
- data/spec/opal/string/underscore_spec.rb +17 -0
- data/spec/spec_helper.rb +1 -1
- data/vendor/opal_spec_runner.js +43 -0
- metadata +99 -114
- data/.rspec +0 -2
- data/docs/index.md +0 -616
- data/docs/post.html +0 -3
- data/docs/pre.html +0 -35
- data/docs/try.html +0 -52
- data/spec/core/string/fixtures/classes.rb +0 -3
- data/spec/opal/array/subclassing_spec.rb +0 -32
- data/spec/opal/exception/subclassing_spec.rb +0 -17
- data/spec/opal/string/subclassing_spec.rb +0 -26
data/core/boolean.rb
CHANGED
data/core/browser.js
CHANGED
@@ -9,7 +9,14 @@
|
|
9
9
|
for (var i = 0, script; i < all.length; i++) {
|
10
10
|
script = all[i];
|
11
11
|
if (script.type === 'text/ruby') {
|
12
|
-
|
12
|
+
if (script.src) {
|
13
|
+
request(script.src, function(result) {
|
14
|
+
runRuby(result);
|
15
|
+
});
|
16
|
+
}
|
17
|
+
else {
|
18
|
+
runRuby(script.innerHTML);
|
19
|
+
}
|
13
20
|
}
|
14
21
|
else if (script.type === 'text/erb') {
|
15
22
|
runERB(script.innerHTML);
|
@@ -22,6 +29,25 @@
|
|
22
29
|
eval('(' + js + ')()');
|
23
30
|
}
|
24
31
|
|
32
|
+
function request(url, callback) {
|
33
|
+
var xhr = new (window.ActiveXObject || XMLHttpRequest)('Microsoft.XMLHTTP');
|
34
|
+
xhr.open('GET', url, true);
|
35
|
+
if ('overrideMimeType' in xhr) {
|
36
|
+
xhr.overrideMimeType('text/plain');
|
37
|
+
}
|
38
|
+
xhr.onreadystatechange = function() {
|
39
|
+
if (xhr.readyState === 4) {
|
40
|
+
if (xhr.status === 0 || xhr.status === 200) {
|
41
|
+
callback(xhr.responseText);
|
42
|
+
}
|
43
|
+
else {
|
44
|
+
throw new Error('Could not load ruby at: ' + url);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
};
|
48
|
+
xhr.send(null);
|
49
|
+
}
|
50
|
+
|
25
51
|
if (window.addEventListener) {
|
26
52
|
window.addEventListener('DOMContentLoaded', findRubyScripts, false);
|
27
53
|
}
|
data/core/class.rb
CHANGED
data/core/enumerable.rb
CHANGED
@@ -76,8 +76,6 @@ module Enumerable
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def collect(&block)
|
79
|
-
return enum_for :collect unless block_given?
|
80
|
-
|
81
79
|
%x{
|
82
80
|
var result = [];
|
83
81
|
|
@@ -129,8 +127,6 @@ module Enumerable
|
|
129
127
|
end
|
130
128
|
|
131
129
|
def detect(ifnone, &block)
|
132
|
-
return enum_for :detect, ifnone unless block_given?
|
133
|
-
|
134
130
|
%x{
|
135
131
|
var result = nil;
|
136
132
|
|
@@ -183,8 +179,6 @@ module Enumerable
|
|
183
179
|
end
|
184
180
|
|
185
181
|
def drop_while(&block)
|
186
|
-
return enum_for :drop_while unless block_given?
|
187
|
-
|
188
182
|
%x{
|
189
183
|
var result = [];
|
190
184
|
|
@@ -211,8 +205,6 @@ module Enumerable
|
|
211
205
|
end
|
212
206
|
|
213
207
|
def each_with_index(&block)
|
214
|
-
return enum_for :each_with_index unless block_given?
|
215
|
-
|
216
208
|
%x{
|
217
209
|
var index = 0;
|
218
210
|
|
@@ -233,8 +225,6 @@ module Enumerable
|
|
233
225
|
end
|
234
226
|
|
235
227
|
def each_with_object(object, &block)
|
236
|
-
return enum_for :each_with_object unless block_given?
|
237
|
-
|
238
228
|
%x{
|
239
229
|
#{self}.$each._p = function(obj) {
|
240
230
|
var value;
|
@@ -267,8 +257,6 @@ module Enumerable
|
|
267
257
|
alias find detect
|
268
258
|
|
269
259
|
def find_all(&block)
|
270
|
-
return enum_for :find_all unless block_given?
|
271
|
-
|
272
260
|
%x{
|
273
261
|
var result = [];
|
274
262
|
|
@@ -303,9 +291,7 @@ module Enumerable
|
|
303
291
|
index += 1;
|
304
292
|
};
|
305
293
|
}
|
306
|
-
else
|
307
|
-
return #{ enum_for 'find_index' };
|
308
|
-
} else {
|
294
|
+
else {
|
309
295
|
proc = function(obj) {
|
310
296
|
var value;
|
311
297
|
|
@@ -390,6 +376,8 @@ module Enumerable
|
|
390
376
|
}
|
391
377
|
end
|
392
378
|
|
379
|
+
alias select find_all
|
380
|
+
|
393
381
|
alias take first
|
394
382
|
|
395
383
|
alias to_a entries
|
data/core/error.rb
CHANGED
@@ -3,9 +3,7 @@ class Exception < `Error`
|
|
3
3
|
|
4
4
|
def self.new(message = '')
|
5
5
|
%x{
|
6
|
-
|
7
|
-
err.message = message;
|
8
|
-
return err;
|
6
|
+
return new Error(message);
|
9
7
|
}
|
10
8
|
end
|
11
9
|
|
@@ -20,7 +18,7 @@ class Exception < `Error`
|
|
20
18
|
return backtrace;
|
21
19
|
}
|
22
20
|
|
23
|
-
return [
|
21
|
+
return [];
|
24
22
|
}
|
25
23
|
end
|
26
24
|
|
data/core/hash.rb
CHANGED
@@ -176,8 +176,6 @@ class Hash
|
|
176
176
|
end
|
177
177
|
|
178
178
|
def delete_if(&block)
|
179
|
-
return enum_for :delete_if unless block_given?
|
180
|
-
|
181
179
|
%x{
|
182
180
|
var map = #{self}.map;
|
183
181
|
|
@@ -201,8 +199,6 @@ class Hash
|
|
201
199
|
alias dup clone
|
202
200
|
|
203
201
|
def each(&block)
|
204
|
-
return enum_for :each unless block_given?
|
205
|
-
|
206
202
|
%x{
|
207
203
|
var map = #{self}.map;
|
208
204
|
|
@@ -219,8 +215,6 @@ class Hash
|
|
219
215
|
end
|
220
216
|
|
221
217
|
def each_key(&block)
|
222
|
-
return enum_for :each_key unless block_given?
|
223
|
-
|
224
218
|
%x{
|
225
219
|
var map = #{self}.map;
|
226
220
|
|
@@ -239,8 +233,6 @@ class Hash
|
|
239
233
|
alias each_pair each
|
240
234
|
|
241
235
|
def each_value(&block)
|
242
|
-
return enum_for :each_value unless block_given?
|
243
|
-
|
244
236
|
%x{
|
245
237
|
var map = #{self}.map;
|
246
238
|
|
@@ -411,8 +403,6 @@ class Hash
|
|
411
403
|
end
|
412
404
|
|
413
405
|
def keep_if(&block)
|
414
|
-
return enum_for :keep_if unless block_given?
|
415
|
-
|
416
406
|
%x{
|
417
407
|
var map = #{self}.map, value;
|
418
408
|
|
@@ -544,8 +534,6 @@ class Hash
|
|
544
534
|
end
|
545
535
|
|
546
536
|
def reject(&block)
|
547
|
-
return enum_for :reject unless block_given?
|
548
|
-
|
549
537
|
%x{
|
550
538
|
var map = #{self}.map, result = __hash(), map2 = result.map;
|
551
539
|
|
@@ -581,8 +569,6 @@ class Hash
|
|
581
569
|
end
|
582
570
|
|
583
571
|
def select(&block)
|
584
|
-
return enum_for :select unless block_given?
|
585
|
-
|
586
572
|
%x{
|
587
573
|
var map = #{self}.map, result = __hash(), map2 = result.map;
|
588
574
|
|
@@ -604,8 +590,6 @@ class Hash
|
|
604
590
|
end
|
605
591
|
|
606
592
|
def select!(&block)
|
607
|
-
return enum_for :select! unless block_given?
|
608
|
-
|
609
593
|
%x{
|
610
594
|
var map = #{self}.map, result = nil;
|
611
595
|
|
@@ -677,11 +661,18 @@ class Hash
|
|
677
661
|
|
678
662
|
def to_native
|
679
663
|
%x{
|
680
|
-
var result = {}, map = #{self}.map, bucket;
|
664
|
+
var result = {}, map = #{self}.map, bucket, value;
|
681
665
|
|
682
666
|
for (var assoc in map) {
|
683
667
|
bucket = map[assoc];
|
684
|
-
|
668
|
+
value = bucket[1];
|
669
|
+
|
670
|
+
if (value.$to_native) {
|
671
|
+
result[assoc] = #{ `value`.to_native };
|
672
|
+
}
|
673
|
+
else {
|
674
|
+
result[assoc] = value;
|
675
|
+
}
|
685
676
|
}
|
686
677
|
|
687
678
|
return result;
|
data/core/json.rb
CHANGED
data/core/kernel.rb
CHANGED
@@ -12,8 +12,6 @@ module Kernel
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def Array(object)
|
15
|
-
return [] unless object
|
16
|
-
|
17
15
|
%x{
|
18
16
|
if (object.$to_ary) {
|
19
17
|
return #{object.to_ary};
|
@@ -22,14 +20,7 @@ module Kernel
|
|
22
20
|
return #{object.to_a};
|
23
21
|
}
|
24
22
|
|
25
|
-
|
26
|
-
result = [];
|
27
|
-
|
28
|
-
while (length--) {
|
29
|
-
result[length] = object[length];
|
30
|
-
}
|
31
|
-
|
32
|
-
return result;
|
23
|
+
return [object];
|
33
24
|
}
|
34
25
|
end
|
35
26
|
|
@@ -130,8 +121,6 @@ module Kernel
|
|
130
121
|
end
|
131
122
|
|
132
123
|
def loop(&block)
|
133
|
-
return enum_for :loop unless block_given?
|
134
|
-
|
135
124
|
`while (true) {`
|
136
125
|
yield
|
137
126
|
`}`
|
@@ -160,7 +149,7 @@ module Kernel
|
|
160
149
|
def puts(*strs)
|
161
150
|
%x{
|
162
151
|
for (var i = 0; i < strs.length; i++) {
|
163
|
-
|
152
|
+
__opal.puts(#{ `strs[i]`.to_s });
|
164
153
|
}
|
165
154
|
}
|
166
155
|
nil
|
@@ -217,8 +206,6 @@ module Kernel
|
|
217
206
|
end
|
218
207
|
|
219
208
|
def tap(&block)
|
220
|
-
`if (block === nil) no_block_given();`
|
221
|
-
|
222
209
|
yield self
|
223
210
|
self
|
224
211
|
end
|
@@ -234,10 +221,4 @@ module Kernel
|
|
234
221
|
def to_s
|
235
222
|
`return "#<" + #{self}._klass._name + ":" + #{self}._id + ">";`
|
236
223
|
end
|
237
|
-
|
238
|
-
def enum_for (method = :each, *args)
|
239
|
-
Enumerator.new(self, method, *args)
|
240
|
-
end
|
241
|
-
|
242
|
-
alias to_enum enum_for
|
243
224
|
end
|
data/core/load_order
CHANGED
@@ -5,20 +5,18 @@ basic_object
|
|
5
5
|
kernel
|
6
6
|
object
|
7
7
|
top_self
|
8
|
-
boolean
|
9
8
|
nil_class
|
10
|
-
|
11
|
-
|
9
|
+
boolean
|
10
|
+
error
|
11
|
+
regexp
|
12
12
|
comparable
|
13
|
+
enumerable
|
13
14
|
array
|
14
15
|
hash
|
15
16
|
string
|
16
17
|
numeric
|
17
18
|
proc
|
18
19
|
range
|
19
|
-
error
|
20
|
-
regexp
|
21
20
|
time
|
22
|
-
struct
|
23
21
|
json
|
24
|
-
|
22
|
+
templates
|
data/core/nil_class.rb
CHANGED
data/core/numeric.rb
CHANGED
@@ -104,8 +104,6 @@ class Numeric < `Number`
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def downto(finish, &block)
|
107
|
-
return enum_for :downto, finish unless block_given?
|
108
|
-
|
109
107
|
%x{
|
110
108
|
for (var i = #{self}; i >= finish; i--) {
|
111
109
|
if (block.call(__context, i) === __breaker) {
|
@@ -162,8 +160,6 @@ class Numeric < `Number`
|
|
162
160
|
alias succ next
|
163
161
|
|
164
162
|
def times(&block)
|
165
|
-
return enum_for :times unless block_given?
|
166
|
-
|
167
163
|
%x{
|
168
164
|
for (var i = 0; i <= #{self}; i++) {
|
169
165
|
if (block.call(__context, i) === __breaker) {
|
@@ -192,8 +188,6 @@ class Numeric < `Number`
|
|
192
188
|
end
|
193
189
|
|
194
190
|
def upto(finish, &block)
|
195
|
-
return enum_for :upto, finish unless block_given?
|
196
|
-
|
197
191
|
%x{
|
198
192
|
for (var i = 0; i <= finish; i++) {
|
199
193
|
if (block.call(__context, i) === __breaker) {
|
data/core/object.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
class Object
|
2
|
-
|
2
|
+
# Kernel included inside runtime.js
|
3
3
|
|
4
4
|
# FIXME
|
5
5
|
def methods
|
6
6
|
[]
|
7
7
|
end
|
8
8
|
|
9
|
-
alias private_methods methods
|
10
|
-
alias protected_methods methods
|
11
|
-
alias public_methods methods
|
12
|
-
|
13
9
|
# FIXME
|
14
10
|
def singleton_methods
|
15
11
|
[]
|
data/core/proc.rb
CHANGED
data/core/range.rb
CHANGED
@@ -14,6 +14,9 @@ class Range
|
|
14
14
|
};
|
15
15
|
}
|
16
16
|
|
17
|
+
attr_reader :begin
|
18
|
+
attr_reader :end
|
19
|
+
|
17
20
|
def initialize(min, max, exclude = false)
|
18
21
|
@begin = min
|
19
22
|
@end = max
|
@@ -21,9 +24,13 @@ class Range
|
|
21
24
|
end
|
22
25
|
|
23
26
|
def ==(other)
|
24
|
-
|
27
|
+
%x{
|
28
|
+
if (!other._isRange) {
|
29
|
+
return false;
|
30
|
+
}
|
25
31
|
|
26
|
-
|
32
|
+
return #{self}.exclude === other.exclude && #{self}.begin == other.begin && #{self}.end == other.end;
|
33
|
+
}
|
27
34
|
end
|
28
35
|
|
29
36
|
# FIXME: currently hardcoded to assume range holds numerics
|
@@ -31,17 +38,11 @@ class Range
|
|
31
38
|
`return obj >= #{self}.begin && (#{self}.exclude ? obj < #{self}.end : obj <= #{self}.end)`
|
32
39
|
end
|
33
40
|
|
34
|
-
def begin
|
35
|
-
`#{self}.begin`
|
36
|
-
end
|
37
|
-
|
38
41
|
def cover?(value)
|
39
42
|
`#{self}.begin` <= value && value <= (exclude_end? ? `#{self}.end` - 1 : `#{self}.end`)
|
40
43
|
end
|
41
44
|
|
42
45
|
def each
|
43
|
-
return enum_for :each unless block_given?
|
44
|
-
|
45
46
|
current = min
|
46
47
|
|
47
48
|
while current != max
|
@@ -55,10 +56,6 @@ class Range
|
|
55
56
|
self
|
56
57
|
end
|
57
58
|
|
58
|
-
def end
|
59
|
-
`#{self}.end`
|
60
|
-
end
|
61
|
-
|
62
59
|
def eql?(other)
|
63
60
|
return false unless Range === other
|
64
61
|
|
@@ -81,8 +78,6 @@ class Range
|
|
81
78
|
alias member? include?
|
82
79
|
|
83
80
|
def step(n = 1)
|
84
|
-
return enum_for :step, n unless block_given?
|
85
|
-
|
86
81
|
raise NotImplementedError
|
87
82
|
end
|
88
83
|
|
@@ -90,7 +85,5 @@ class Range
|
|
90
85
|
`#{self}.begin + (#{self}.exclude ? '...' : '..') + #{self}.end`
|
91
86
|
end
|
92
87
|
|
93
|
-
|
94
|
-
`#{self}.begin + (#{self}.exclude ? '...' : '..') + #{self}.end`
|
95
|
-
end
|
88
|
+
alias inspect to_s
|
96
89
|
end
|