opal 0.5.0 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -2
  3. data/README.md +1 -1
  4. data/Rakefile +11 -8
  5. data/lib/opal.rb +1 -1
  6. data/lib/opal/version.rb +1 -1
  7. data/opal.gemspec +1 -1
  8. data/{corelib → opal/core}/array.rb +47 -40
  9. data/{corelib → opal/core}/basic_object.rb +4 -0
  10. data/{corelib → opal/core}/boolean.rb +2 -6
  11. data/{corelib → opal/core}/class.rb +0 -0
  12. data/{corelib → opal/core}/comparable.rb +0 -0
  13. data/{corelib → opal/core}/encoding.rb +0 -0
  14. data/{corelib → opal/core}/enumerable.rb +160 -38
  15. data/opal/core/enumerator.rb +416 -0
  16. data/{corelib → opal/core}/error.rb +0 -0
  17. data/{corelib → opal/core}/hash.rb +38 -48
  18. data/{corelib → opal/core}/io.rb +13 -9
  19. data/{corelib → opal/core}/kernel.rb +75 -49
  20. data/{corelib → opal/core}/main.rb +0 -0
  21. data/{corelib → opal/core}/match_data.rb +0 -4
  22. data/{corelib → opal/core}/method.rb +0 -0
  23. data/{corelib → opal/core}/module.rb +24 -3
  24. data/{corelib → opal/core}/nil_class.rb +0 -4
  25. data/{corelib → opal/core}/numeric.rb +3 -4
  26. data/{corelib → opal/core}/proc.rb +0 -4
  27. data/{corelib → opal/core}/range.rb +0 -0
  28. data/{corelib → opal/core}/regexp.rb +0 -4
  29. data/{corelib → opal/core}/runtime.js +0 -0
  30. data/{corelib → opal/core}/string.rb +4 -6
  31. data/{corelib → opal/core}/struct.rb +3 -21
  32. data/{corelib → opal/core}/time.rb +0 -4
  33. data/opal/opal.rb +121 -0
  34. data/spec/corelib/array/select_spec.rb +14 -0
  35. data/spec/filters/20.rb +4 -0
  36. data/spec/filters/bugs/enumerable.rb +1 -48
  37. data/spec/filters/unsupported/enumerator.rb +13 -0
  38. data/spec/opal/compiler/irb_spec.rb +1 -0
  39. data/spec/rubyspecs +1 -0
  40. data/spec/{corelib → stdlib}/native/alias_native_spec.rb +6 -4
  41. data/spec/{corelib → stdlib}/native/each_spec.rb +3 -1
  42. data/spec/{corelib → stdlib}/native/element_reference_spec.rb +3 -1
  43. data/spec/stdlib/native/ext_spec.rb +19 -0
  44. data/spec/{corelib → stdlib}/native/initialize_spec.rb +4 -4
  45. data/spec/{corelib → stdlib}/native/method_missing_spec.rb +13 -1
  46. data/spec/{corelib → stdlib}/native/new_spec.rb +3 -1
  47. data/stdlib/enumerator.rb +1 -0
  48. data/stdlib/json.rb +1 -1
  49. data/stdlib/native.rb +483 -0
  50. metadata +52 -47
  51. data/corelib/enumerator.rb +0 -55
  52. data/corelib/native.rb +0 -270
  53. data/corelib/opal.rb +0 -88
  54. data/spec/corelib/native/ext_spec.rb +0 -5
  55. data/spec/filters/bugs/enumerator.rb +0 -6
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Beynon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-03 00:00:00.000000000 Z
11
+ date: 2013-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: source_map
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ~>
74
74
  - !ruby/object:Gem::Version
75
- version: 0.2.1
75
+ version: 0.3.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
- version: 0.2.1
82
+ version: 0.3.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -126,33 +126,6 @@ files:
126
126
  - Rakefile
127
127
  - bin/opal
128
128
  - bin/opal-repl
129
- - corelib/array.rb
130
- - corelib/basic_object.rb
131
- - corelib/boolean.rb
132
- - corelib/class.rb
133
- - corelib/comparable.rb
134
- - corelib/encoding.rb
135
- - corelib/enumerable.rb
136
- - corelib/enumerator.rb
137
- - corelib/error.rb
138
- - corelib/hash.rb
139
- - corelib/io.rb
140
- - corelib/kernel.rb
141
- - corelib/main.rb
142
- - corelib/match_data.rb
143
- - corelib/method.rb
144
- - corelib/module.rb
145
- - corelib/native.rb
146
- - corelib/nil_class.rb
147
- - corelib/numeric.rb
148
- - corelib/opal.rb
149
- - corelib/proc.rb
150
- - corelib/range.rb
151
- - corelib/regexp.rb
152
- - corelib/runtime.js
153
- - corelib/string.rb
154
- - corelib/struct.rb
155
- - corelib/time.rb
156
129
  - doc/compiler.md
157
130
  - doc/compiler_options.md
158
131
  - doc/examples/node_http_server.rb
@@ -212,7 +185,34 @@ files:
212
185
  - mri_spec/fixtures/opal_file.rb
213
186
  - mri_spec/spec_helper.rb
214
187
  - opal.gemspec
188
+ - opal/core/array.rb
189
+ - opal/core/basic_object.rb
190
+ - opal/core/boolean.rb
191
+ - opal/core/class.rb
192
+ - opal/core/comparable.rb
193
+ - opal/core/encoding.rb
194
+ - opal/core/enumerable.rb
195
+ - opal/core/enumerator.rb
196
+ - opal/core/error.rb
197
+ - opal/core/hash.rb
198
+ - opal/core/io.rb
199
+ - opal/core/kernel.rb
200
+ - opal/core/main.rb
201
+ - opal/core/match_data.rb
202
+ - opal/core/method.rb
203
+ - opal/core/module.rb
204
+ - opal/core/nil_class.rb
205
+ - opal/core/numeric.rb
206
+ - opal/core/proc.rb
207
+ - opal/core/range.rb
208
+ - opal/core/regexp.rb
209
+ - opal/core/runtime.js
210
+ - opal/core/string.rb
211
+ - opal/core/struct.rb
212
+ - opal/core/time.rb
213
+ - opal/opal.rb
215
214
  - spec/config.ru
215
+ - spec/corelib/array/select_spec.rb
216
216
  - spec/corelib/enumerable/all_break_spec.rb
217
217
  - spec/corelib/enumerable/any_break_spec.rb
218
218
  - spec/corelib/enumerable/collect_break_spec.rb
@@ -310,13 +310,6 @@ files:
310
310
  - spec/corelib/module/public_method_defined_spec.rb
311
311
  - spec/corelib/module/remove_const_spec.rb
312
312
  - spec/corelib/module/undef_method_spec.rb
313
- - spec/corelib/native/alias_native_spec.rb
314
- - spec/corelib/native/each_spec.rb
315
- - spec/corelib/native/element_reference_spec.rb
316
- - spec/corelib/native/ext_spec.rb
317
- - spec/corelib/native/initialize_spec.rb
318
- - spec/corelib/native/method_missing_spec.rb
319
- - spec/corelib/native/new_spec.rb
320
313
  - spec/corelib/numeric/abs_spec.rb
321
314
  - spec/corelib/numeric/bit_and_spec.rb
322
315
  - spec/corelib/numeric/bit_or_spec.rb
@@ -409,11 +402,11 @@ files:
409
402
  - spec/corelib/string/to_i_spec.rb
410
403
  - spec/corelib/string/tr_s_spec.rb
411
404
  - spec/corelib/string/tr_spec.rb
405
+ - spec/filters/20.rb
412
406
  - spec/filters/bugs/array.rb
413
407
  - spec/filters/bugs/basic_object.rb
414
408
  - spec/filters/bugs/class.rb
415
409
  - spec/filters/bugs/enumerable.rb
416
- - spec/filters/bugs/enumerator.rb
417
410
  - spec/filters/bugs/hash.rb
418
411
  - spec/filters/bugs/kernel.rb
419
412
  - spec/filters/bugs/language.rb
@@ -430,6 +423,7 @@ files:
430
423
  - spec/filters/bugs/unknown.rb
431
424
  - spec/filters/unsupported/array_subclasses.rb
432
425
  - spec/filters/unsupported/encoding.rb
426
+ - spec/filters/unsupported/enumerator.rb
433
427
  - spec/filters/unsupported/float.rb
434
428
  - spec/filters/unsupported/frozen.rb
435
429
  - spec/filters/unsupported/hash_compare_by_identity.rb
@@ -503,6 +497,13 @@ files:
503
497
  - spec/stdlib/erb/simple.opalerb
504
498
  - spec/stdlib/json/ext_spec.rb
505
499
  - spec/stdlib/json/parse_spec.rb
500
+ - spec/stdlib/native/alias_native_spec.rb
501
+ - spec/stdlib/native/each_spec.rb
502
+ - spec/stdlib/native/element_reference_spec.rb
503
+ - spec/stdlib/native/ext_spec.rb
504
+ - spec/stdlib/native/initialize_spec.rb
505
+ - spec/stdlib/native/method_missing_spec.rb
506
+ - spec/stdlib/native/new_spec.rb
506
507
  - spec/stdlib/template/paths_spec.rb
507
508
  - stdlib/buffer.rb
508
509
  - stdlib/buffer/array.rb
@@ -510,10 +511,12 @@ files:
510
511
  - stdlib/date.rb
511
512
  - stdlib/delegate.rb
512
513
  - stdlib/dir.rb
514
+ - stdlib/enumerator.rb
513
515
  - stdlib/erb.rb
514
516
  - stdlib/file.rb
515
517
  - stdlib/forwardable.rb
516
518
  - stdlib/json.rb
519
+ - stdlib/native.rb
517
520
  - stdlib/observer.rb
518
521
  - stdlib/opal-parser.rb
519
522
  - stdlib/opal-source-maps.js.erb
@@ -559,6 +562,7 @@ specification_version: 4
559
562
  summary: Ruby runtime and core library for javascript
560
563
  test_files:
561
564
  - spec/config.ru
565
+ - spec/corelib/array/select_spec.rb
562
566
  - spec/corelib/enumerable/all_break_spec.rb
563
567
  - spec/corelib/enumerable/any_break_spec.rb
564
568
  - spec/corelib/enumerable/collect_break_spec.rb
@@ -656,13 +660,6 @@ test_files:
656
660
  - spec/corelib/module/public_method_defined_spec.rb
657
661
  - spec/corelib/module/remove_const_spec.rb
658
662
  - spec/corelib/module/undef_method_spec.rb
659
- - spec/corelib/native/alias_native_spec.rb
660
- - spec/corelib/native/each_spec.rb
661
- - spec/corelib/native/element_reference_spec.rb
662
- - spec/corelib/native/ext_spec.rb
663
- - spec/corelib/native/initialize_spec.rb
664
- - spec/corelib/native/method_missing_spec.rb
665
- - spec/corelib/native/new_spec.rb
666
663
  - spec/corelib/numeric/abs_spec.rb
667
664
  - spec/corelib/numeric/bit_and_spec.rb
668
665
  - spec/corelib/numeric/bit_or_spec.rb
@@ -755,11 +752,11 @@ test_files:
755
752
  - spec/corelib/string/to_i_spec.rb
756
753
  - spec/corelib/string/tr_s_spec.rb
757
754
  - spec/corelib/string/tr_spec.rb
755
+ - spec/filters/20.rb
758
756
  - spec/filters/bugs/array.rb
759
757
  - spec/filters/bugs/basic_object.rb
760
758
  - spec/filters/bugs/class.rb
761
759
  - spec/filters/bugs/enumerable.rb
762
- - spec/filters/bugs/enumerator.rb
763
760
  - spec/filters/bugs/hash.rb
764
761
  - spec/filters/bugs/kernel.rb
765
762
  - spec/filters/bugs/language.rb
@@ -776,6 +773,7 @@ test_files:
776
773
  - spec/filters/bugs/unknown.rb
777
774
  - spec/filters/unsupported/array_subclasses.rb
778
775
  - spec/filters/unsupported/encoding.rb
776
+ - spec/filters/unsupported/enumerator.rb
779
777
  - spec/filters/unsupported/float.rb
780
778
  - spec/filters/unsupported/frozen.rb
781
779
  - spec/filters/unsupported/hash_compare_by_identity.rb
@@ -849,4 +847,11 @@ test_files:
849
847
  - spec/stdlib/erb/simple.opalerb
850
848
  - spec/stdlib/json/ext_spec.rb
851
849
  - spec/stdlib/json/parse_spec.rb
850
+ - spec/stdlib/native/alias_native_spec.rb
851
+ - spec/stdlib/native/each_spec.rb
852
+ - spec/stdlib/native/element_reference_spec.rb
853
+ - spec/stdlib/native/ext_spec.rb
854
+ - spec/stdlib/native/initialize_spec.rb
855
+ - spec/stdlib/native/method_missing_spec.rb
856
+ - spec/stdlib/native/new_spec.rb
852
857
  - spec/stdlib/template/paths_spec.rb
@@ -1,55 +0,0 @@
1
- class Enumerator
2
- include Enumerable
3
-
4
- class Yielder
5
- def initialize(enumerator, block, to)
6
- @enumerator = enumerator
7
- @block = block
8
- @to = to
9
- end
10
-
11
- def yield(*values)
12
- @to.call(*values)
13
- end
14
-
15
- alias << yield
16
-
17
- def call
18
- @block.call(self)
19
- end
20
- end
21
-
22
- def initialize(obj = nil, method = :each, *args, &block)
23
- if block
24
- @block = block
25
- else
26
- @object = obj
27
- @method = method
28
- @args = args
29
- end
30
- end
31
-
32
- def each(&block)
33
- return enum_for :each unless block_given?
34
-
35
- if @block
36
- Yielder.new(self, @block, block).call
37
- else
38
- @object.__send__(@method, *@args, &block)
39
- end
40
- end
41
-
42
- def next
43
- @cache ||= to_a
44
-
45
- raise StopIteration, 'end of enumeration' if @cache.empty?
46
-
47
- @cache.shift
48
- end
49
-
50
- def rewind
51
- @cache = nil
52
-
53
- self
54
- end
55
- end
data/corelib/native.rb DELETED
@@ -1,270 +0,0 @@
1
- module Kernel
2
- def native?(value)
3
- `value == null || !value._klass`
4
- end
5
-
6
- def Native(obj)
7
- if `#{obj} == null`
8
- nil
9
- elsif native?(obj)
10
- Native.new(obj)
11
- else
12
- obj
13
- end
14
- end
15
- end
16
-
17
- class Native < BasicObject
18
- module Base
19
- module Helpers
20
- def alias_native(new, old = new, options = {})
21
- if old.end_with? ?=
22
- define_method new do |value|
23
- `#@native[#{old[0 .. -2]}] = #{Native.convert(value)}`
24
-
25
- value
26
- end
27
- else
28
- if as = options[:as]
29
- define_method new do |*args, &block|
30
- if value = Native.call(@native, old, *args, &block)
31
- as.new(value.to_n)
32
- end
33
- end
34
- else
35
- define_method new do |*args, &block|
36
- Native.call(@native, old, *args, &block)
37
- end
38
- end
39
- end
40
- end
41
- end
42
-
43
- def self.included(klass)
44
- klass.instance_eval {
45
- extend Helpers
46
- }
47
- end
48
-
49
- def initialize(native)
50
- unless Kernel.native?(native)
51
- Kernel.raise ArgumentError, "the passed value isn't native"
52
- end
53
-
54
- @native = native
55
- end
56
-
57
- def to_n
58
- @native
59
- end
60
- end
61
-
62
- class Array
63
- include Base
64
- include Enumerable
65
-
66
- def initialize(native, options = {}, &block)
67
- super(native)
68
-
69
- @get = options[:get] || options[:access]
70
- @named = options[:named]
71
- @set = options[:set] || options[:access]
72
- @length = options[:length] || :length
73
- @block = block
74
-
75
- if `#{length} == null`
76
- raise ArgumentError, "no length found on the array-like object"
77
- end
78
- end
79
-
80
- def each(&block)
81
- return enum_for :each unless block
82
-
83
- index = 0
84
- length = self.length
85
-
86
- while index < length
87
- block.call(self[index])
88
-
89
- index += 1
90
- end
91
-
92
- self
93
- end
94
-
95
- def [](index)
96
- result = case index
97
- when String, Symbol
98
- @named ? `#@native[#@named](#{index})` : `#@native[#{index}]`
99
-
100
- when Integer
101
- @get ? `#@native[#@get](#{index})` : `#@native[#{index}]`
102
- end
103
-
104
- if result
105
- if @block
106
- @block.call(result)
107
- else
108
- Native(result)
109
- end
110
- end
111
- end
112
-
113
- def []=(index, value)
114
- if @set
115
- `#@native[#@set](#{index}, #{value})`
116
- else
117
- `#@native[#{index}] = #{value}`
118
- end
119
- end
120
-
121
- def last(count = nil)
122
- if count
123
- index = length - 1
124
- result = []
125
-
126
- while index >= 0
127
- result << self[index]
128
- index -= 1
129
- end
130
-
131
- result
132
- else
133
- self[length - 1]
134
- end
135
- end
136
-
137
- def length
138
- `#@native[#@length]`
139
- end
140
-
141
- alias to_ary to_a
142
-
143
- def inspect
144
- to_a.inspect
145
- end
146
- end
147
-
148
- def self.is_a?(object, klass)
149
- %x{
150
- try {
151
- return #{object} instanceof #{Native.try_convert(klass)};
152
- }
153
- catch (e) {
154
- return false;
155
- }
156
- }
157
- end
158
-
159
- def self.try_convert(value)
160
- %x{
161
- if (#{native?(value)}) {
162
- return #{value};
163
- }
164
- else if (#{value.respond_to? :to_n}) {
165
- return #{value.to_n};
166
- }
167
- else {
168
- return nil;
169
- }
170
- }
171
- end
172
-
173
- def self.convert(value)
174
- native = try_convert(value)
175
-
176
- if `#{native} === nil`
177
- raise ArgumentError, "the passed value isn't a native"
178
- end
179
-
180
- native
181
- end
182
-
183
- def self.call(obj, key, *args, &block)
184
- args << block if block
185
-
186
- %x{
187
- var prop = #{obj}[#{key}];
188
-
189
- if (prop == null) {
190
- return nil;
191
- }
192
- else if (prop instanceof Function) {
193
- var result = prop.apply(#{obj}, #{args});
194
-
195
- return result == null ? nil : result;
196
- }
197
- else if (#{native?(`prop`)}) {
198
- return #{Native(`prop`)};
199
- }
200
- else {
201
- return prop;
202
- }
203
- }
204
- end
205
-
206
- include Base
207
-
208
- def has_key?(name)
209
- `#@native.hasOwnProperty(#{name})`
210
- end
211
-
212
- alias key? has_key?
213
- alias include? has_key?
214
- alias member? has_key?
215
-
216
- def each(*args)
217
- if block_given?
218
- %x{
219
- for (var key in #@native) {
220
- #{yield `key`, `#@native[key]`}
221
- }
222
- }
223
-
224
- self
225
- else
226
- method_missing(:each, *args)
227
- end
228
- end
229
-
230
- def [](key)
231
- %x{
232
- var prop = #@native[key];
233
-
234
- if (prop instanceof Function) {
235
- return prop;
236
- }
237
- else {
238
- return #{::Native.call(@native, key)}
239
- }
240
- }
241
- end
242
-
243
- def []=(key, value)
244
- native = Native.try_convert(value)
245
-
246
- if `#{native} === nil`
247
- `#@native[key] = #{value}`
248
- else
249
- `#@native[key] = #{native}`
250
- end
251
- end
252
-
253
- def method_missing(mid, *args, &block)
254
- %x{
255
- if (mid.charAt(mid.length - 1) === '=') {
256
- return #{self[mid.slice(0, mid.length - 1)] = args[0]};
257
- }
258
- else {
259
- return #{::Native.call(@native, mid, *args, &block)};
260
- }
261
- }
262
- end
263
-
264
- def nil?
265
- false
266
- end
267
- end
268
-
269
- # native global
270
- $$ = $global = Native(`Opal.global`)