opal 0.3.19 → 0.3.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/.gitignore +3 -1
  2. data/Gemfile +3 -2
  3. data/README.md +304 -48
  4. data/Rakefile +1 -2
  5. data/core/alpha.rb +2 -1
  6. data/core/array.rb +92 -96
  7. data/core/basic_object.rb +1 -10
  8. data/core/boolean.rb +6 -18
  9. data/core/class.rb +9 -10
  10. data/core/comparable.rb +1 -1
  11. data/core/enumerable.rb +11 -11
  12. data/core/enumerator.rb +2 -10
  13. data/core/error.rb +16 -31
  14. data/core/hash.rb +32 -36
  15. data/core/json.rb +50 -0
  16. data/core/kernel.rb +48 -57
  17. data/core/load_order +3 -5
  18. data/core/module.rb +37 -35
  19. data/core/nil_class.rb +4 -0
  20. data/core/numeric.rb +10 -30
  21. data/core/proc.rb +1 -1
  22. data/core/range.rb +3 -4
  23. data/core/regexp.rb +21 -6
  24. data/core/runtime.js +278 -370
  25. data/core/string.rb +21 -37
  26. data/core/struct.rb +11 -3
  27. data/core/time.rb +44 -37
  28. data/lib/opal.rb +3 -3
  29. data/lib/opal/builder.rb +48 -27
  30. data/lib/opal/builder_task.rb +3 -20
  31. data/lib/opal/grammar.rb +18 -13
  32. data/lib/opal/grammar.y +7 -4
  33. data/lib/opal/parser.rb +290 -199
  34. data/lib/opal/scope.rb +187 -176
  35. data/lib/opal/version.rb +1 -1
  36. data/test/core/kernel/define_singleton_method_spec.rb +21 -0
  37. data/test/core/time/at_spec.rb +7 -0
  38. data/test/core/time/day_spec.rb +5 -0
  39. data/test/core/time/friday_spec.rb +9 -0
  40. data/test/core/time/hour_spec.rb +5 -0
  41. data/test/core/time/min_spec.rb +5 -0
  42. data/test/core/time/monday_spec.rb +9 -0
  43. data/test/core/time/month_spec.rb +5 -0
  44. data/test/core/time/now_spec.rb +5 -0
  45. data/test/core/time/saturday_spec.rb +9 -0
  46. data/test/index.html +2 -1
  47. data/test/language/singleton_class_spec.rb +0 -16
  48. data/test/opal/array/to_json_spec.rb +7 -0
  49. data/test/opal/boolean/singleton_class_spec.rb +9 -0
  50. data/test/opal/boolean/to_json_spec.rb +9 -0
  51. data/test/opal/hash/to_json_spec.rb +9 -0
  52. data/test/opal/json/parse_spec.rb +31 -0
  53. data/test/opal/kernel/to_json_spec.rb +5 -0
  54. data/test/opal/nil/to_json_spec.rb +5 -0
  55. data/test/opal/numeric/to_json_spec.rb +6 -0
  56. data/test/opal/runtime/call_spec.rb +16 -0
  57. data/test/opal/runtime/defined_spec.rb +11 -0
  58. data/test/opal/runtime/super_spec.rb +16 -0
  59. data/test/opal/string/to_json_spec.rb +6 -0
  60. data/test/spec_helper.rb +1 -3
  61. metadata +48 -15
  62. data/core/dir.rb +0 -89
  63. data/core/file.rb +0 -85
  64. data/core/match_data.rb +0 -35
  65. data/core/rational.rb +0 -16
  66. data/test/core/file/expand_path_spec.rb +0 -20
@@ -0,0 +1,9 @@
1
+ describe "Time#friday?" do
2
+ it "returns true if the time represents Friday" do
3
+ Time.new(2000, 1, 7).friday?.should == true
4
+ end
5
+
6
+ it "returns false if time doesn't represent Friday" do
7
+ Time.new(2000, 1, 1).friday?.should == false
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ describe "Time#hour" do
2
+ it "returns the hour of the day for a UTC time" do
3
+ Time.new(1970, 1, 1, 0).hour.should == 0
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ describe "Time#min" do
2
+ it "returns the minute of the hour for a UTC Time" do
3
+ Time.new(1970, 1, 1, 0, 0).min.should == 0
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ describe "Time#monday?" do
2
+ it "returns true if time represents Monday" do
3
+ Time.new(2000, 1, 3).monday?.should == true
4
+ end
5
+
6
+ it "returns false if time doesn't represent Monday" do
7
+ Time.new(2000, 1, 1).monday?.should == false
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ describe "Time#month" do
2
+ it "returns the month of the year for a UTC Time" do
3
+ Time.new(1970, 1).month.should == 1
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ describe "Time#now" do
2
+ it "should return the current time" do
3
+ Time.now.should be_kind_of(Time)
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ describe "Time#saturday?" do
2
+ it "returns true if time represents Saturday" do
3
+ Time.new(2000, 1, 1).saturday?.should == true
4
+ end
5
+
6
+ it "returns false if time doesn't represent Saturday" do
7
+ Time.new(2000, 1, 2).saturday?.should == false
8
+ end
9
+ end
@@ -1,10 +1,11 @@
1
1
  <!doctype html>
2
2
  <html>
3
3
  <head>
4
- <title></title>
4
+ <title>Opal corelib and runtime specs</title>
5
5
  </head>
6
6
  <body>
7
7
  <script type="text/javascript" src="../build/opal.js"></script>
8
+ <script type="text/javascript" src="../build/opal-dom.js"></script>
8
9
  <script type="text/javascript" src="../build/opal-spec.js"></script>
9
10
  <script type="text/javascript" src="../build/opal.specs.js"></script>
10
11
  </body>
@@ -1,24 +1,8 @@
1
1
  describe "A singleton class" do
2
- it "is TrueClass for true" do
3
- true.singleton_class.should == TrueClass
4
- end
5
-
6
- it "is FalseClass for false" do
7
- false.singleton_class.should == FalseClass
8
- end
9
-
10
2
  it "is NilClass for nil" do
11
3
  nil.singleton_class.should == NilClass
12
4
  end
13
5
 
14
- it "raises a TypeError for Fixnum's" do
15
- lambda { 1.singleton_class }.should raise_error(TypeError)
16
- end
17
-
18
- it "raises a TypeError for synbols" do
19
- lambda { :symbol.singleton_class }.should raise_error(TypeError)
20
- end
21
-
22
6
  it "is a singleton Class instance" do
23
7
  o = mock('x')
24
8
  o.singleton_class.should be_kind_of(Class)
@@ -0,0 +1,7 @@
1
+ describe "Array#to_json" do
2
+ it "returns a string of all array elements converted to json" do
3
+ [].to_json.should == "[]"
4
+ [1, 2, 3].to_json.should == "[1, 2, 3]"
5
+ [true, nil, false, "3", 42].to_json.should == '[true, null, false, "3", 42]'
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ describe "A singleton class" do
2
+ it "is Boolean for true" do
3
+ true.singleton_class.should == Boolean
4
+ end
5
+
6
+ it "is Boolean for false" do
7
+ false.singleton_class.should == Boolean
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ describe "Boolean#to_s" do
2
+ it "returns 'true' when true" do
3
+ true.to_json.should == "true"
4
+ end
5
+
6
+ it "returns 'false' when false" do
7
+ false.to_json.should == "false"
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ describe "Hash#to_json" do
2
+ it "returns a string of all key and value pairs" do
3
+ {}.to_json.should == "{}"
4
+ {"a" => 1, "b" => 2}.to_json.should == '{"a": 1, "b": 2}'
5
+
6
+ hash = {"a" => 1, "b" => false, "c" => nil, "d" => true}
7
+ JSON.parse(hash.to_json).should == hash
8
+ end
9
+ end
@@ -0,0 +1,31 @@
1
+ describe "JSON.parse" do
2
+ it "parses null into nil" do
3
+ JSON.parse("null").should be_nil
4
+ end
5
+
6
+ it "parses true into true" do
7
+ JSON.parse("true").should be_true
8
+ end
9
+
10
+ it "parses false into false" do
11
+ JSON.parse("false").should be_false
12
+ end
13
+
14
+ it "parses numbers into numbers" do
15
+ JSON.parse("42").should == 42
16
+ JSON.parse("3.142").should == 3.142
17
+ end
18
+
19
+ it "parses arrays into ruby arrays" do
20
+ JSON.parse("[]").should == []
21
+ JSON.parse("[1, 2, 3]").should == [1, 2, 3]
22
+ JSON.parse("[[1, 2, 3], [4, 5]]").should == [[1, 2, 3], [4, 5]]
23
+ JSON.parse("[null, true, false]").should == [nil, true, false]
24
+ end
25
+
26
+ it "parses object literals into ruby hashes" do
27
+ JSON.parse("{}").should == {}
28
+ JSON.parse('{"a": "b"}').should == {"a" => "b"}
29
+ JSON.parse('{"a": null, "b": 10, "c": [true, false]}').should == {"a" => nil, "b" => 10, "c" => [true, false]}
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ describe "Kernel#to_json" do
2
+ it "returns an escaped #to_s of the receiver" do
3
+ self.to_json.should be_kind_of(String)
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ describe "NilClass#to_json" do
2
+ it "returns 'null'" do
3
+ nil.to_json.should == "null"
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ describe "Numeric#to_json" do
2
+ it "returns a string representing the number" do
3
+ 42.to_json.should == "42"
4
+ 3.142.to_json.should == "3.142"
5
+ end
6
+ end
@@ -0,0 +1,16 @@
1
+ class OpalMethodCallingSpec
2
+ def foo(a)
3
+ 42 + a
4
+ end
5
+
6
+ def self.bar
7
+ 3.142
8
+ end
9
+ end
10
+
11
+ describe "Calling methods" do
12
+ it "should support '::' syntax" do
13
+ OpalMethodCallingSpec::bar.should == 3.142
14
+ OpalMethodCallingSpec.new.foo(10).should == 52
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ describe "The defined? keyword for x-strings" do
2
+ it "returns true for defined variables" do
3
+ `var SomeClass = {}`
4
+ defined?(`{}`).should be_true
5
+ defined?(`SomeClass`).should be_true
6
+ end
7
+
8
+ it "retuens false for undefined variables" do
9
+ defined?(`SomeBadVar`).should be_false
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ class OpalSuperDefineMethodSpec
2
+ def foo
3
+ "bar"
4
+ end
5
+ end
6
+
7
+ describe "Super keyword" do
8
+ it "works with methods defined with define_singleton_method" do
9
+ a = OpalSuperDefineMethodSpec.new
10
+ a.define_singleton_method(:foo) do
11
+ super + " baz"
12
+ end
13
+
14
+ a.foo.should == "bar baz"
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ describe "String#to_json" do
2
+ it "returns an escaped string" do
3
+ "foo".to_json.should == "\"foo\""
4
+ "bar\nbaz".to_json.should == "\"bar\\nbaz\""
5
+ end
6
+ end
@@ -1,3 +1 @@
1
- require 'opal-spec/autorun'
2
-
3
- OpalSpec.autorun_glob = "test/**/*"
1
+ # no configuration needed
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.19
4
+ version: 0.3.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-30 00:00:00.000000000Z
12
+ date: 2012-06-23 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Ruby runtime and core library for javascript.
15
15
  email: adam@adambeynon.com
@@ -30,22 +30,19 @@ files:
30
30
  - core/boolean.rb
31
31
  - core/class.rb
32
32
  - core/comparable.rb
33
- - core/dir.rb
34
33
  - core/enumerable.rb
35
34
  - core/enumerator.rb
36
35
  - core/error.rb
37
- - core/file.rb
38
36
  - core/hash.rb
37
+ - core/json.rb
39
38
  - core/kernel.rb
40
39
  - core/load_order
41
- - core/match_data.rb
42
40
  - core/module.rb
43
41
  - core/nil_class.rb
44
42
  - core/numeric.rb
45
43
  - core/object.rb
46
44
  - core/proc.rb
47
45
  - core/range.rb
48
- - core/rational.rb
49
46
  - core/regexp.rb
50
47
  - core/runtime.js
51
48
  - core/string.rb
@@ -200,7 +197,6 @@ files:
200
197
  - test/core/false/or_spec.rb
201
198
  - test/core/false/to_s_spec.rb
202
199
  - test/core/false/xor_spec.rb
203
- - test/core/file/expand_path_spec.rb
204
200
  - test/core/hash/allocate_spec.rb
205
201
  - test/core/hash/assoc_spec.rb
206
202
  - test/core/hash/clear_spec.rb
@@ -239,6 +235,7 @@ files:
239
235
  - test/core/hash/value_spec.rb
240
236
  - test/core/hash/values_at_spec.rb
241
237
  - test/core/hash/values_spec.rb
238
+ - test/core/kernel/define_singleton_method_spec.rb
242
239
  - test/core/kernel/eql_spec.rb
243
240
  - test/core/kernel/equal_value_spec.rb
244
241
  - test/core/kernel/loop_spec.rb
@@ -303,6 +300,15 @@ files:
303
300
  - test/core/string/to_sym_spec.rb
304
301
  - test/core/string/upcase_spec.rb
305
302
  - test/core/symbol/to_proc_spec.rb
303
+ - test/core/time/at_spec.rb
304
+ - test/core/time/day_spec.rb
305
+ - test/core/time/friday_spec.rb
306
+ - test/core/time/hour_spec.rb
307
+ - test/core/time/min_spec.rb
308
+ - test/core/time/monday_spec.rb
309
+ - test/core/time/month_spec.rb
310
+ - test/core/time/now_spec.rb
311
+ - test/core/time/saturday_spec.rb
306
312
  - test/core/true/and_spec.rb
307
313
  - test/core/true/inspect_spec.rb
308
314
  - test/core/true/or_spec.rb
@@ -338,12 +344,24 @@ files:
338
344
  - test/language/while_spec.rb
339
345
  - test/language/yield_spec.rb
340
346
  - test/opal/array/subclassing_spec.rb
347
+ - test/opal/array/to_json_spec.rb
348
+ - test/opal/boolean/singleton_class_spec.rb
349
+ - test/opal/boolean/to_json_spec.rb
341
350
  - test/opal/class/bridge_class_spec.rb
342
351
  - test/opal/exception/subclassing_spec.rb
352
+ - test/opal/hash/to_json_spec.rb
353
+ - test/opal/json/parse_spec.rb
354
+ - test/opal/kernel/to_json_spec.rb
355
+ - test/opal/nil/to_json_spec.rb
356
+ - test/opal/numeric/to_json_spec.rb
343
357
  - test/opal/runtime/_methods_spec.rb
358
+ - test/opal/runtime/call_spec.rb
344
359
  - test/opal/runtime/class_hierarchy_spec.rb
345
360
  - test/opal/runtime/def_spec.rb
361
+ - test/opal/runtime/defined_spec.rb
362
+ - test/opal/runtime/super_spec.rb
346
363
  - test/opal/string/subclassing_spec.rb
364
+ - test/opal/string/to_json_spec.rb
347
365
  - test/spec_helper.rb
348
366
  homepage: http://opalrb.org
349
367
  licenses: []
@@ -357,21 +375,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
357
375
  - - ! '>='
358
376
  - !ruby/object:Gem::Version
359
377
  version: '0'
360
- segments:
361
- - 0
362
- hash: 433748311557838667
363
378
  required_rubygems_version: !ruby/object:Gem::Requirement
364
379
  none: false
365
380
  requirements:
366
381
  - - ! '>='
367
382
  - !ruby/object:Gem::Version
368
383
  version: '0'
369
- segments:
370
- - 0
371
- hash: 433748311557838667
372
384
  requirements: []
373
385
  rubyforge_project:
374
- rubygems_version: 1.8.10
386
+ rubygems_version: 1.8.24
375
387
  signing_key:
376
388
  specification_version: 3
377
389
  summary: Ruby runtime and core library for javascript
@@ -495,7 +507,6 @@ test_files:
495
507
  - test/core/false/or_spec.rb
496
508
  - test/core/false/to_s_spec.rb
497
509
  - test/core/false/xor_spec.rb
498
- - test/core/file/expand_path_spec.rb
499
510
  - test/core/hash/allocate_spec.rb
500
511
  - test/core/hash/assoc_spec.rb
501
512
  - test/core/hash/clear_spec.rb
@@ -534,6 +545,7 @@ test_files:
534
545
  - test/core/hash/value_spec.rb
535
546
  - test/core/hash/values_at_spec.rb
536
547
  - test/core/hash/values_spec.rb
548
+ - test/core/kernel/define_singleton_method_spec.rb
537
549
  - test/core/kernel/eql_spec.rb
538
550
  - test/core/kernel/equal_value_spec.rb
539
551
  - test/core/kernel/loop_spec.rb
@@ -598,6 +610,15 @@ test_files:
598
610
  - test/core/string/to_sym_spec.rb
599
611
  - test/core/string/upcase_spec.rb
600
612
  - test/core/symbol/to_proc_spec.rb
613
+ - test/core/time/at_spec.rb
614
+ - test/core/time/day_spec.rb
615
+ - test/core/time/friday_spec.rb
616
+ - test/core/time/hour_spec.rb
617
+ - test/core/time/min_spec.rb
618
+ - test/core/time/monday_spec.rb
619
+ - test/core/time/month_spec.rb
620
+ - test/core/time/now_spec.rb
621
+ - test/core/time/saturday_spec.rb
601
622
  - test/core/true/and_spec.rb
602
623
  - test/core/true/inspect_spec.rb
603
624
  - test/core/true/or_spec.rb
@@ -633,10 +654,22 @@ test_files:
633
654
  - test/language/while_spec.rb
634
655
  - test/language/yield_spec.rb
635
656
  - test/opal/array/subclassing_spec.rb
657
+ - test/opal/array/to_json_spec.rb
658
+ - test/opal/boolean/singleton_class_spec.rb
659
+ - test/opal/boolean/to_json_spec.rb
636
660
  - test/opal/class/bridge_class_spec.rb
637
661
  - test/opal/exception/subclassing_spec.rb
662
+ - test/opal/hash/to_json_spec.rb
663
+ - test/opal/json/parse_spec.rb
664
+ - test/opal/kernel/to_json_spec.rb
665
+ - test/opal/nil/to_json_spec.rb
666
+ - test/opal/numeric/to_json_spec.rb
638
667
  - test/opal/runtime/_methods_spec.rb
668
+ - test/opal/runtime/call_spec.rb
639
669
  - test/opal/runtime/class_hierarchy_spec.rb
640
670
  - test/opal/runtime/def_spec.rb
671
+ - test/opal/runtime/defined_spec.rb
672
+ - test/opal/runtime/super_spec.rb
641
673
  - test/opal/string/subclassing_spec.rb
674
+ - test/opal/string/to_json_spec.rb
642
675
  - test/spec_helper.rb
@@ -1,89 +0,0 @@
1
- class Dir
2
- def self.getwd
3
- ""
4
- end
5
-
6
- def self.pwd
7
- ""
8
- end
9
-
10
- def self.[](*globs)
11
- %x{
12
- var result = [], files = factories;
13
-
14
- for (var i = 0, ii = globs.length; i < ii; i++) {
15
- var glob = globs[i];
16
-
17
- var re = fs_glob_to_regexp(#{ File.expand_path `glob` });
18
-
19
- for (var file in files) {
20
- if (re.exec(file)) {
21
- result.push(file);
22
- }
23
- }
24
- }
25
-
26
- return result;
27
- }
28
- end
29
-
30
- %x(
31
- function fs_glob_to_regexp(glob) {
32
- var parts = glob.split(''),
33
- length = parts.length,
34
- result = '';
35
-
36
- var opt_group_stack = 0;
37
-
38
- for (var i = 0; i < length; i++) {
39
- var cur = parts[i];
40
-
41
- switch (cur) {
42
- case '*':
43
- if (parts[i + 1] === '*' && parts[i + 2] === '/') {
44
- result += '.*';
45
- i += 2;
46
- }
47
- else {
48
- result += '[^/]*';
49
- }
50
- break;
51
-
52
- case '.':
53
- result += '\\\\';
54
- result += cur;
55
- break;
56
-
57
- case ',':
58
- if (opt_group_stack) {
59
- result += '|';
60
- }
61
- else {
62
- result += ',';
63
- }
64
- break;
65
-
66
- case '{':
67
- result += '(';
68
- opt_group_stack++;
69
- break;
70
-
71
- case '}':
72
- if (opt_group_stack) {
73
- result += ')';
74
- opt_group_stack--;
75
- }
76
- else {
77
- result += '}'
78
- }
79
- break;
80
-
81
- default:
82
- result += cur;
83
- }
84
- }
85
-
86
- return new RegExp('^' + result + '$');
87
- }
88
- )
89
- end