opal 0.3.29 → 0.3.30

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/core/date.rb ADDED
@@ -0,0 +1,34 @@
1
+ date_constructor = `Date`
2
+
3
+ class Date
4
+ def self.today
5
+ %x{
6
+ var date = #{new};
7
+ date._date = new date_constructor();
8
+ return date;
9
+ }
10
+ end
11
+
12
+ def initialize(year, month, day)
13
+ `#{self}._date = new date_constructor(year, month - 1, day)`
14
+ end
15
+
16
+ def day
17
+ `#{self}._date.getDate()`
18
+ end
19
+
20
+ def month
21
+ `#{self}._date.getMonth() + 1`
22
+ end
23
+
24
+ def to_s
25
+ %x{
26
+ var d = #{self}._date;
27
+ return '' + d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate();
28
+ }
29
+ end
30
+
31
+ def year
32
+ `#{self}._date.getFullYear()`
33
+ end
34
+ end
data/core/hash.rb CHANGED
@@ -28,9 +28,8 @@ class Hash
28
28
  // strings as keys. The map and keys array can be constructed at
29
29
  // compile time, so they are just added here by the constructor
30
30
  // function
31
- __hash2 = Opal.hash2 = function(keys, map) {
31
+ __hash2 = Opal.hash2 = function(map) {
32
32
  var hash = new Hash;
33
- hash.keys = keys;
34
33
  hash.map = map;
35
34
  return hash;
36
35
  }
@@ -46,10 +45,9 @@ class Hash
46
45
 
47
46
  def self.from_native(obj)
48
47
  %x{
49
- var hash = __hash(), map = hash.map, keys = hash.keys;
48
+ var hash = __hash(), map = hash.map;
50
49
 
51
50
  for (var key in obj) {
52
- keys.push(key);
53
51
  map[key] = obj[key];
54
52
  }
55
53
 
@@ -78,19 +76,15 @@ class Hash
78
76
  return true;
79
77
  }
80
78
 
81
- if (!other.map || !other.keys) {
82
- return false;
83
- }
84
-
85
- if (#{self}.keys.length !== other.keys.length) {
79
+ if (other.map == null) {
86
80
  return false;
87
81
  }
88
82
 
89
83
  var map = #{self}.map,
90
84
  map2 = other.map;
91
85
 
92
- for (var i = 0, length = #{self}.keys.length; i < length; i++) {
93
- var key = #{self}.keys[i], obj = map[key], obj2 = map2[key];
86
+ for (var key in map) {
87
+ var obj = map[key], obj2 = map2[key];
94
88
 
95
89
  if (#{`obj` != `obj2`}) {
96
90
  return false;
@@ -103,10 +97,10 @@ class Hash
103
97
 
104
98
  def [](key)
105
99
  %x{
106
- var bucket = #{self}.map[key];
100
+ var obj = #{self}.map[key];
107
101
 
108
- if (bucket != null) {
109
- return bucket;
102
+ if (obj != null) {
103
+ return obj;
110
104
  }
111
105
 
112
106
  var proc = #{@proc};
@@ -121,27 +115,18 @@ class Hash
121
115
 
122
116
  def []=(key, value)
123
117
  %x{
124
- var map = #{self}.map;
125
-
126
- if (!__hasOwn.call(map, key)) {
127
- #{self}.keys.push(key);
128
- }
129
-
130
- map[key] = value;
131
-
118
+ #{self}.map[key] = value;
132
119
  return value;
133
120
  }
134
121
  end
135
122
 
136
123
  def assoc(object)
137
124
  %x{
138
- var keys = #{self}.keys, key;
139
-
140
- for (var i = 0, length = keys.length; i < length; i++) {
141
- key = keys[i];
125
+ var map = #{self}.map;
142
126
 
127
+ for (var key in map) {
143
128
  if (#{`key` == object}) {
144
- return [key, #{self}.map[key]];
129
+ return [key, map[key]];
145
130
  }
146
131
  }
147
132
 
@@ -152,7 +137,6 @@ class Hash
152
137
  def clear
153
138
  %x{
154
139
  #{self}.map = {};
155
- #{self}.keys = [];
156
140
  return #{self};
157
141
  }
158
142
  end
@@ -161,12 +145,10 @@ class Hash
161
145
  %x{
162
146
  var result = __hash(),
163
147
  map = #{self}.map,
164
- map2 = result.map,
165
- keys2 = result.keys;
148
+ map2 = result.map;
166
149
 
167
- for (var i = 0, length = #{self}.keys.length; i < length; i++) {
168
- keys2.push(#{self}.keys[i]);
169
- map2[#{self}.keys[i]] = map[#{self}.keys[i]];
150
+ for (var key in map) {
151
+ map2[key] = map[key];
170
152
  }
171
153
 
172
154
  return result;
@@ -191,12 +173,10 @@ class Hash
191
173
 
192
174
  def delete(key)
193
175
  %x{
194
- var map = #{self}.map, result = map[key];
176
+ var map = #{self}.map, result = map[key];
195
177
 
196
178
  if (result != null) {
197
179
  delete map[key];
198
- #{self}.keys.$delete(key);
199
-
200
180
  return result;
201
181
  }
202
182
 
@@ -206,21 +186,15 @@ class Hash
206
186
 
207
187
  def delete_if(&block)
208
188
  %x{
209
- var map = #{self}.map, keys = #{self}.keys, value;
210
-
211
- for (var i = 0, length = keys.length; i < length; i++) {
212
- var key = keys[i], obj = map[key];
189
+ var map = #{self}.map, value;
213
190
 
214
- if ((value = block.call(__context, key, obj)) === __breaker) {
191
+ for (var key in map) {
192
+ if ((value = block.call(__context, key, map[key])) === __breaker) {
215
193
  return __breaker.$v;
216
194
  }
217
195
 
218
196
  if (value !== false && value !== nil) {
219
- keys.splice(i, 1);
220
- delete map[key];
221
-
222
- length--;
223
- i--;
197
+ delete map[key]
224
198
  }
225
199
  }
226
200
 
@@ -232,11 +206,9 @@ class Hash
232
206
 
233
207
  def each(&block)
234
208
  %x{
235
- var map = #{self}.map, keys = #{self}.keys;
236
-
237
- for (var i = 0, length = keys.length; i < length; i++) {
238
- var key = keys[i];
209
+ var map = #{self}.map;
239
210
 
211
+ for (var key in map) {
240
212
  if (block.call(__context, key, map[key]) === __breaker) {
241
213
  return __breaker.$v;
242
214
  }
@@ -248,11 +220,9 @@ class Hash
248
220
 
249
221
  def each_key(&block)
250
222
  %x{
251
- var keys = #{self}.keys;
252
-
253
- for (var i = 0, length = keys.length; i < length; i++) {
254
- var key = keys[i];
223
+ var map = #{self}.map;
255
224
 
225
+ for (var key in map) {
256
226
  if (block.call(__context, key) === __breaker) {
257
227
  return __breaker.$v;
258
228
  }
@@ -266,10 +236,10 @@ class Hash
266
236
 
267
237
  def each_value(&block)
268
238
  %x{
269
- var map = #{self}.map, keys = #{self}.keys;
239
+ var map = #{self}.map;
270
240
 
271
- for (var i = 0, length = keys.length; i < length; i++) {
272
- if (block.call(__context, map[keys[i]]) === __breaker) {
241
+ for (var key in map) {
242
+ if (block.call(__context, map[key]) === __breaker) {
273
243
  return __breaker.$v;
274
244
  }
275
245
  }
@@ -280,7 +250,11 @@ class Hash
280
250
 
281
251
  def empty?
282
252
  %x{
283
- return #{self}.keys.length === 0;
253
+ for (var key in #{self}.map) {
254
+ return false;
255
+ }
256
+
257
+ return true;
284
258
  }
285
259
  end
286
260
 
@@ -314,10 +288,10 @@ class Hash
314
288
 
315
289
  def flatten(level=undefined)
316
290
  %x{
317
- var map = #{self}.map, keys = #{self}.keys, result = [];
291
+ var map = #{self}.map, result = [];
318
292
 
319
- for (var i = 0, length = keys.length; i < length; i++) {
320
- var key = keys[i], value = map[key];
293
+ for (var key in map) {
294
+ var value = map[key];
321
295
 
322
296
  result.push(key);
323
297
 
@@ -344,8 +318,10 @@ class Hash
344
318
 
345
319
  def has_value?(value)
346
320
  %x{
347
- for (var assoc in #{self}.map) {
348
- if (#{`#{self}.map[assoc]` == value}) {
321
+ var map = #{self}.map;
322
+
323
+ for (var key in map) {
324
+ if (#{`map[key]` == value}) {
349
325
  return true;
350
326
  }
351
327
  }
@@ -362,11 +338,9 @@ class Hash
362
338
 
363
339
  def index(object)
364
340
  %x{
365
- var map = #{self}.map, keys = #{self}.keys;
366
-
367
- for (var i = 0, length = keys.length; i < length; i++) {
368
- var key = keys[i];
341
+ var map = #{self}.map;
369
342
 
343
+ for (var key in map) {
370
344
  if (#{object == `map[key]`}) {
371
345
  return key;
372
346
  }
@@ -381,13 +355,13 @@ class Hash
381
355
  var result = [], map = #{self}.map, val;
382
356
 
383
357
  for (var i = 0, length = keys.length; i < length; i++) {
384
- var key = keys[i], val = map[key];
358
+ val = map[keys[i]];
385
359
 
386
360
  if (val != null) {
387
361
  result.push(val);
388
362
  }
389
363
  else {
390
- result.push(#{self}.none);
364
+ result.push(#{@none});
391
365
  }
392
366
  }
393
367
 
@@ -399,10 +373,9 @@ class Hash
399
373
 
400
374
  def inspect
401
375
  %x{
402
- var inspect = [], keys = #{self}.keys, map = #{self}.map;
376
+ var inspect = [], map = #{self}.map;
403
377
 
404
- for (var i = 0, length = keys.length; i < length; i++) {
405
- var key = keys[i];
378
+ for (var key in map) {
406
379
  inspect.push(#{`key`.inspect} + '=>' + #{`map[key]`.inspect});
407
380
  }
408
381
 
@@ -412,13 +385,10 @@ class Hash
412
385
 
413
386
  def invert
414
387
  %x{
415
- var result = __hash(), keys = #{self}.keys, map = #{self}.map,
416
- keys2 = result.keys, map2 = result.map;
388
+ var result = __hash(), map = #{self}.map, map2 = result.map;
417
389
 
418
- for (var i = 0, length = keys.length; i < length; i++) {
419
- var key = keys[i], obj = map[key];
420
-
421
- keys2.push(obj);
390
+ for (var key in map) {
391
+ var obj = map[key];
422
392
  map2[obj] = key;
423
393
  }
424
394
 
@@ -428,21 +398,17 @@ class Hash
428
398
 
429
399
  def keep_if(&block)
430
400
  %x{
431
- var map = #{self}.map, keys = #{self}.keys, value;
401
+ var map = #{self}.map, value;
432
402
 
433
- for (var i = 0, length = keys.length; i < length; i++) {
434
- var key = keys[i], obj = map[key];
403
+ for (var key in map) {
404
+ var obj = map[key];
435
405
 
436
406
  if ((value = block.call(__context, key, obj)) === __breaker) {
437
407
  return __breaker.$v;
438
408
  }
439
409
 
440
410
  if (value === false || value === nil) {
441
- keys.splice(i, 1);
442
411
  delete map[key];
443
-
444
- length--;
445
- i--;
446
412
  }
447
413
  }
448
414
 
@@ -456,13 +422,25 @@ class Hash
456
422
 
457
423
  def keys
458
424
  %x{
459
- return #{self}.keys.slice(0);
425
+ var result = [], map = #{self}.map;
426
+
427
+ for (var key in map) {
428
+ result.push(key);
429
+ }
430
+
431
+ return result;
460
432
  }
461
433
  end
462
434
 
463
435
  def length
464
436
  %x{
465
- return #{self}.keys.length;
437
+ var length = 0, map = #{self}.map;
438
+
439
+ for (var key in map) {
440
+ length++;
441
+ }
442
+
443
+ return length;
466
444
  }
467
445
  end
468
446
 
@@ -470,35 +448,22 @@ class Hash
470
448
 
471
449
  def merge(other, &block)
472
450
  %x{
473
- var keys = #{self}.keys, map = #{self}.map,
474
- result = __hash(), keys2 = result.keys, map2 = result.map;
475
-
476
- for (var i = 0, length = keys.length; i < length; i++) {
477
- var key = keys[i];
451
+ var map = #{self}.map, result = __hash(), map2 = result.map;
478
452
 
479
- keys2.push(key);
453
+ for (var key in map) {
480
454
  map2[key] = map[key];
481
455
  }
482
456
 
483
- var keys = other.keys, map = other.map;
457
+ map = other.map;
484
458
 
485
459
  if (block === nil) {
486
- for (var i = 0, length = keys.length; i < length; i++) {
487
- var key = keys[i];
488
-
489
- if (map2[key] == null) {
490
- keys2.push(key);
491
- }
492
-
460
+ for (key in map) {
493
461
  map2[key] = map[key];
494
462
  }
495
463
  }
496
464
  else {
497
- for (var i = 0, length = keys.length; i < length; i++) {
498
- var key = keys[i];
499
-
465
+ for (key in map) {
500
466
  if (map2[key] == null) {
501
- keys2.push(key);
502
467
  map2[key] = map[key];
503
468
  }
504
469
  else {
@@ -513,26 +478,16 @@ class Hash
513
478
 
514
479
  def merge!(other, &block)
515
480
  %x{
516
- var keys = #{self}.keys, map = #{self}.map,
517
- keys2 = other.keys, map2 = other.map;
481
+ var map = #{self}.map, map2 = other.map;
518
482
 
519
483
  if (block === nil) {
520
- for (var i = 0, length = keys2.length; i < length; i++) {
521
- var key = keys2[i];
522
-
523
- if (map[key] == null) {
524
- keys.push(key);
525
- }
526
-
484
+ for (var key in map2) {
527
485
  map[key] = map2[key];
528
486
  }
529
487
  }
530
488
  else {
531
- for (var i = 0, length = keys2.length; i < length; i++) {
532
- var key = keys2[i];
533
-
489
+ for (key in map2) {
534
490
  if (map[key] == null) {
535
- keys.push(key);
536
491
  map[key] = map2[key];
537
492
  }
538
493
  else {
@@ -547,10 +502,10 @@ class Hash
547
502
 
548
503
  def rassoc(object)
549
504
  %x{
550
- var keys = #{self}.keys, map = #{self}.map;
505
+ var map = #{self}.map;
551
506
 
552
- for (var i = 0, length = keys.length; i < length; i++) {
553
- var key = keys[i], obj = map[key];
507
+ for (var key in map) {
508
+ var obj = map[key];
554
509
 
555
510
  if (#{`obj` == object}) {
556
511
  return [key, obj];
@@ -563,18 +518,16 @@ class Hash
563
518
 
564
519
  def reject(&block)
565
520
  %x{
566
- var keys = #{self}.keys, map = #{self}.map,
567
- result = __hash(), map2 = result.map, keys2 = result.keys;
521
+ var map = #{self}.map, result = __hash(), map2 = result.map;
568
522
 
569
- for (var i = 0, length = keys.length; i < length; i++) {
570
- var key = keys[i], obj = map[key], value;
523
+ for (var key in map) {
524
+ var obj = map[key], value;
571
525
 
572
526
  if ((value = block.call(__context, key, obj)) === __breaker) {
573
527
  return __breaker.$v;
574
528
  }
575
529
 
576
530
  if (value === false || value === nil) {
577
- keys2.push(key);
578
531
  map2[key] = obj;
579
532
  }
580
533
  }
@@ -585,12 +538,10 @@ class Hash
585
538
 
586
539
  def replace(other)
587
540
  %x{
588
- var map = #{self}.map = {}, keys = #{self}.keys = [];
541
+ var map = #{self}.map = {}, map2 = other.map;
589
542
 
590
- for (var i = 0, length = other.keys.length; i < length; i++) {
591
- var key = other.keys[i];
592
- keys.push(key);
593
- map[key] = other.map[key];
543
+ for (var key in map2) {
544
+ map[key] = map2[key];
594
545
  }
595
546
 
596
547
  return #{self};
@@ -599,18 +550,16 @@ class Hash
599
550
 
600
551
  def select(&block)
601
552
  %x{
602
- var keys = #{self}.keys, map = #{self}.map,
603
- result = __hash(), map2 = result.map, keys2 = result.keys;
553
+ var map = #{self}.map, result = __hash(), map2 = result.map;
604
554
 
605
- for (var i = 0, length = keys.length; i < length; i++) {
606
- var key = keys[i], obj = map[key], value;
555
+ for (var key in map) {
556
+ var obj = map[key], value;
607
557
 
608
558
  if ((value = block.call(__context, key, obj)) === __breaker) {
609
559
  return __breaker.$v;
610
560
  }
611
561
 
612
562
  if (value !== false && value !== nil) {
613
- keys2.push(key);
614
563
  map2[key] = obj;
615
564
  }
616
565
  }
@@ -621,21 +570,18 @@ class Hash
621
570
 
622
571
  def select!(&block)
623
572
  %x{
624
- var map = #{self}.map, keys = #{self}.keys, value, result = nil;
573
+ var map = #{self}.map, value, result = nil;
625
574
 
626
- for (var i = 0, length = keys.length; i < length; i++) {
627
- var key = keys[i], obj = map[key];
575
+ for (var key in map) {
576
+ var obj = map[key];
628
577
 
629
578
  if ((value = block.call(__context, key, obj)) === __breaker) {
630
579
  return __breaker.$v;
631
580
  }
632
581
 
633
582
  if (value === false || value === nil) {
634
- keys.splice(i, 1);
635
583
  delete map[key];
636
584
 
637
- length--;
638
- i--;
639
585
  result = #{self}
640
586
  }
641
587
  }
@@ -646,14 +592,11 @@ class Hash
646
592
 
647
593
  def shift
648
594
  %x{
649
- var keys = #{self}.keys, map = #{self}.map;
650
-
651
- if (keys.length) {
652
- var key = keys[0], obj = map[key];
595
+ var map = #{self}.map;
653
596
 
597
+ for (var key in map) {
598
+ var obj = map[key];
654
599
  delete map[key];
655
- keys.splice(0, 1);
656
-
657
600
  return [key, obj];
658
601
  }
659
602
 
@@ -665,10 +608,9 @@ class Hash
665
608
 
666
609
  def to_a
667
610
  %x{
668
- var keys = #{self}.keys, map = #{self}.map, result = [];
611
+ var map = #{self}.map, result = [];
669
612
 
670
- for (var i = 0, length = keys.length; i < length; i++) {
671
- var key = keys[i];
613
+ for (var key in map) {
672
614
  result.push([key, map[key]]);
673
615
  }
674
616
 
@@ -682,10 +624,9 @@ class Hash
682
624
 
683
625
  def to_json
684
626
  %x{
685
- var inspect = [], keys = #{self}.keys, map = #{self}.map;
627
+ var inspect = [], map = #{self}.map;
686
628
 
687
- for (var i = 0, length = keys.length; i < length; i++) {
688
- var key = keys[i];
629
+ for (var key in map) {
689
630
  inspect.push(#{`key`.to_json} + ': ' + #{`map[key]`.to_json});
690
631
  }
691
632
 
@@ -695,10 +636,10 @@ class Hash
695
636
 
696
637
  def to_native
697
638
  %x{
698
- var result = {}, keys = #{self}.keys, map = #{self}.map, bucket, value;
639
+ var result = {}, map = #{self}.map;
699
640
 
700
- for (var i = 0, length = keys.length; i < length; i++) {
701
- var key = keys[i], obj = map[key];
641
+ for (var key in map) {
642
+ var obj = map[key];
702
643
 
703
644
  if (obj.$to_native) {
704
645
  result[key] = #{`obj`.to_native};