opal 0.3.22 → 0.3.25
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.
- 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
|