opal 0.3.40 → 0.3.41
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/.gitignore +0 -2
- data/CHANGELOG.md +6 -0
- data/Gemfile +1 -1
- data/README.md +1 -1
- data/Rakefile +9 -11
- data/config.ru +5 -10
- data/lib/opal.rb +17 -2
- data/lib/opal/lexer.rb +6 -0
- data/lib/opal/parser.rb +2 -14
- data/lib/opal/server.rb +3 -1
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +0 -1
- data/opal/opal-parser.js.erb +7 -0
- data/{lib/assets/javascripts → opal}/opal.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/array.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/basic_object.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/boolean.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/class.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/comparable.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/date.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/enumerable.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/enumerator.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/error.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/hash.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/json.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/kernel.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/native.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/nil_class.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/numeric.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/proc.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/racc.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/range.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/regexp.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/runtime.js +3 -0
- data/{lib/assets/javascripts → opal}/opal/string.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/strscan.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/template.rb +0 -0
- data/{lib/assets/javascripts → opal}/opal/time.rb +0 -0
- data/spec/core/kernel/block_given.rb +1 -1
- data/spec/core_ext/class/proc_methods_spec.rb +23 -0
- metadata +31 -33
- data/bin/opal +0 -24
- data/lib/assets/javascripts/opal-parser.js.erb +0 -8
- data/lib/assets/javascripts/opal/parser.js +0 -57
- data/lib/opal/environment.rb +0 -12
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## Edge
|
2
|
+
|
3
|
+
* Depreceate Opal::Environment. The Opal::Server class provides a better
|
4
|
+
method of using the opal load paths. Opal.paths still stores a list of
|
5
|
+
load paths for generic sprockets based apps to use.
|
6
|
+
|
1
7
|
## 0.3.40 2013-02-23
|
2
8
|
|
3
9
|
* Add Opal::Server as an easy to configure rack server for testing and
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -33,7 +33,7 @@ The `lib` directory holds the opal parser/compiler used to compile ruby
|
|
33
33
|
into javascript. It is also built ready for the browser into `opal-parser.js`
|
34
34
|
to allow compilation in any javascript environment.
|
35
35
|
|
36
|
-
###
|
36
|
+
### opal
|
37
37
|
|
38
38
|
This directory holds the opal runtime and corelib implemented in ruby and
|
39
39
|
javascript. These are built using `rake`, as above.
|
data/Rakefile
CHANGED
@@ -1,23 +1,21 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler.require
|
3
3
|
|
4
|
+
Opal::Processor.arity_check_enabled = true
|
5
|
+
|
4
6
|
require 'opal/spec/rake_task'
|
5
7
|
Opal::Spec::RakeTask.new(:default)
|
6
8
|
|
7
|
-
desc "Run tests with method_missing turned off"
|
8
|
-
task :test_no_method_missing do
|
9
|
-
# some specs will fail (namely method_missing based specs)
|
10
|
-
Opal::Processor.method_missing_enabled = false
|
11
|
-
Rake::Task[:default].invoke
|
12
|
-
end
|
13
|
-
|
14
9
|
desc "Check file sizes for opal.js runtime"
|
15
10
|
task :sizes do
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
env = Sprockets::Environment.new
|
12
|
+
Opal.paths.each { |p| env.append_path p }
|
13
|
+
|
14
|
+
src = env['opal'].to_s
|
15
|
+
min = uglify src
|
16
|
+
gzp = gzip min
|
19
17
|
|
20
|
-
puts "development: #{
|
18
|
+
puts "development: #{src.size}, minified: #{min.size}, gzipped: #{gzp.size}"
|
21
19
|
end
|
22
20
|
|
23
21
|
desc "Rebuild grammar.rb for opal parser"
|
data/config.ru
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler.require
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# Run in non-debug mode (faster, all files concatenated into 1 file)
|
10
|
-
run Opal::Spec::Server.new(false)
|
11
|
-
|
12
|
-
# Run in debug mode - all files loaded seperately, but slower
|
13
|
-
# run Opal::Spec::Server.new
|
4
|
+
run Opal::Server.new { |s|
|
5
|
+
s.main = 'opal/spec/sprockets_runner'
|
6
|
+
s.append_path 'spec'
|
7
|
+
s.debug = false
|
8
|
+
}
|
data/lib/opal.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
require 'opal/parser'
|
2
2
|
require 'opal/processor'
|
3
|
-
require 'opal/environment'
|
4
3
|
require 'opal/server'
|
5
4
|
require 'opal/version'
|
6
5
|
|
7
6
|
# Opal is a ruby to javascript compiler, with a runtime for running
|
8
7
|
# in any javascript environment.
|
8
|
+
#
|
9
|
+
# Opal::Parser is the core class used for parsing ruby and generating
|
10
|
+
# javascript from its syntax tree. Opal::Processor is the main system used
|
11
|
+
# for compiling larger programs. Opal::Processor uses sprockets to maintain
|
12
|
+
# an environment of load paths, which can be used to require other ruby or
|
13
|
+
# javascript sources.
|
9
14
|
module Opal
|
10
15
|
|
11
16
|
# Parse given string of ruby into javascript
|
@@ -20,10 +25,20 @@ module Opal
|
|
20
25
|
Parser.new.parse str, :file => file
|
21
26
|
end
|
22
27
|
|
28
|
+
# Returns the path to the opal corelib. Used by Opal::Processor to load
|
29
|
+
# opal runtime and core lib.
|
30
|
+
#
|
31
|
+
# @return [String]
|
23
32
|
def self.core_dir
|
24
|
-
File.
|
33
|
+
File.expand_path('../../opal', __FILE__)
|
25
34
|
end
|
26
35
|
|
36
|
+
# Add a file path to opals load path. Any gem containing ruby code that Opal
|
37
|
+
# has access to should add a load path through this method. Load paths added
|
38
|
+
# here should only be paths which contain code targeted at being compiled by
|
39
|
+
# Opal.
|
40
|
+
#
|
41
|
+
# @param [String] path file path to add
|
27
42
|
def self.append_path(path)
|
28
43
|
paths << path
|
29
44
|
end
|
data/lib/opal/lexer.rb
CHANGED
@@ -42,6 +42,12 @@ module Opal
|
|
42
42
|
raise "parse error on value #{val.inspect} :#{@file}:#{@line}"
|
43
43
|
end
|
44
44
|
|
45
|
+
# LexerScope is used during lexing to keep track of local variables
|
46
|
+
# created inside a scope. A lexer scope can be asked if it has a local
|
47
|
+
# variable defined, and it can also check its parent scope if applicable.
|
48
|
+
#
|
49
|
+
# A LexerScope is created automatically as a new scope is entered during
|
50
|
+
# the lexing stage.
|
45
51
|
class LexerScope
|
46
52
|
attr_reader :locals
|
47
53
|
attr_accessor :parent
|
data/lib/opal/parser.rb
CHANGED
@@ -585,7 +585,6 @@ module Opal
|
|
585
585
|
str = sexp.shift
|
586
586
|
if str == @file
|
587
587
|
@uses_file = true
|
588
|
-
# "'FILE'"
|
589
588
|
@file.inspect
|
590
589
|
else
|
591
590
|
str.inspect
|
@@ -621,8 +620,6 @@ module Opal
|
|
621
620
|
with_temp do |tmp|
|
622
621
|
"(#{tmp} = #{process(sexp.shift, :expr)}, (#{tmp} === nil || #{tmp} === false))"
|
623
622
|
end
|
624
|
-
# code = "!#{process sexp.shift, :expr}"
|
625
|
-
# code
|
626
623
|
end
|
627
624
|
|
628
625
|
def process_block_pass(exp, level)
|
@@ -1133,7 +1130,6 @@ module Opal
|
|
1133
1130
|
end
|
1134
1131
|
|
1135
1132
|
code += stmt_code
|
1136
|
-
# code += "\n#@indent" + process(stmts, :stmt)
|
1137
1133
|
|
1138
1134
|
if @scope.uses_block? and !block_name
|
1139
1135
|
params = params.empty? ? yielder : "#{params}, #{yielder}"
|
@@ -1662,12 +1658,8 @@ module Opal
|
|
1662
1658
|
t = nil
|
1663
1659
|
|
1664
1660
|
with_temp do |tmp|
|
1665
|
-
|
1666
|
-
|
1667
|
-
# else
|
1668
|
-
"((%s = %s), %s !== false && %s !== nil ? %s : %s)" %
|
1669
|
-
[tmp, process(lhs, :expr), tmp, tmp, tmp, process(rhs, :expr)]
|
1670
|
-
# end
|
1661
|
+
"((%s = %s), %s !== false && %s !== nil ? %s : %s)" %
|
1662
|
+
[tmp, process(lhs, :expr), tmp, tmp, tmp, process(rhs, :expr)]
|
1671
1663
|
end
|
1672
1664
|
end
|
1673
1665
|
|
@@ -1874,9 +1866,7 @@ module Opal
|
|
1874
1866
|
identity = @scope.identify!
|
1875
1867
|
cls_name = @scope.parent.name
|
1876
1868
|
jsid = mid_to_jsid @scope.mid.to_s
|
1877
|
-
# base = @scope.defs ? '' : ".prototype"
|
1878
1869
|
|
1879
|
-
# "%s._super%s%s.apply(this, %s)" % [cls_name, base, jsid, args]
|
1880
1870
|
if @scope.defs
|
1881
1871
|
"%s._super%s.apply(this, %s)" % [cls_name, jsid, args]
|
1882
1872
|
else
|
@@ -1972,7 +1962,6 @@ module Opal
|
|
1972
1962
|
err = types.map { |t|
|
1973
1963
|
call = s(:call, t, :===, s(:arglist, s(:js_tmp, "$err")))
|
1974
1964
|
a = process call, :expr
|
1975
|
-
#puts a
|
1976
1965
|
a
|
1977
1966
|
}.join ', '
|
1978
1967
|
err = "true" if err.empty?
|
@@ -1984,7 +1973,6 @@ module Opal
|
|
1984
1973
|
end
|
1985
1974
|
|
1986
1975
|
"if (#{err}) {#{@space}#{val}#{body}}"
|
1987
|
-
# raise exp.inspect
|
1988
1976
|
end
|
1989
1977
|
|
1990
1978
|
# FIXME: Hack.. grammar should remove top level begin.
|
data/lib/opal/server.rb
CHANGED
@@ -7,7 +7,9 @@ module Opal
|
|
7
7
|
attr_accessor :debug, :index_path, :main, :public_dir, :sprockets
|
8
8
|
|
9
9
|
def initialize(debug = true)
|
10
|
-
@sprockets =
|
10
|
+
@sprockets = Sprockets::Environment.new
|
11
|
+
Opal.paths.each { |p| @sprockets.append_path p }
|
12
|
+
|
11
13
|
@public_dir = '.'
|
12
14
|
@debug = debug
|
13
15
|
|
data/lib/opal/version.rb
CHANGED
data/opal.gemspec
CHANGED
@@ -11,7 +11,6 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = 'Ruby runtime and core library for javascript.'
|
12
12
|
|
13
13
|
s.files = `git ls-files`.split("\n")
|
14
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
15
14
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
15
|
s.require_paths = ['lib']
|
17
16
|
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<% require_asset 'opal/racc' %>
|
2
|
+
<% require_asset 'opal/strscan' %>
|
3
|
+
|
4
|
+
// We need (some) of the libs from our real ruby parser (not in sprockets load path)
|
5
|
+
<% %w(opal/grammar opal/lexer opal/parser opal/scope opal).each do |f| %>
|
6
|
+
<%= Opal.parse File.read(File.join Opal.core_dir, '..', 'lib', "#{f}.rb") %>
|
7
|
+
<% end %>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module ClassProcMethodsSpec
|
4
|
+
class A; end
|
5
|
+
|
6
|
+
class B
|
7
|
+
def self.[](a); :foo; end
|
8
|
+
end
|
9
|
+
|
10
|
+
class C < B; end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "Class: proc methods" do
|
14
|
+
it "classes should not inherit proc methods" do
|
15
|
+
ClassProcMethodsSpec::A.respond_to?(:[]).should be_false
|
16
|
+
ClassProcMethodsSpec::A.respond_to?(:call).should be_false
|
17
|
+
end
|
18
|
+
|
19
|
+
it "subclasses inherit proc methods if defined on suprt class" do
|
20
|
+
ClassProcMethodsSpec::B[nil].should eq(:foo)
|
21
|
+
ClassProcMethodsSpec::C[nil].should eq(:foo)
|
22
|
+
end
|
23
|
+
end
|
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.
|
4
|
+
version: 0.3.41
|
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: 2013-02-
|
12
|
+
date: 2013-02-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sprockets
|
@@ -29,8 +29,7 @@ dependencies:
|
|
29
29
|
version: '0'
|
30
30
|
description: Ruby runtime and core library for javascript.
|
31
31
|
email: adam.beynon@gmail.com
|
32
|
-
executables:
|
33
|
-
- opal
|
32
|
+
executables: []
|
34
33
|
extensions: []
|
35
34
|
extra_rdoc_files: []
|
36
35
|
files:
|
@@ -42,37 +41,8 @@ files:
|
|
42
41
|
- LICENSE
|
43
42
|
- README.md
|
44
43
|
- Rakefile
|
45
|
-
- bin/opal
|
46
44
|
- config.ru
|
47
|
-
- lib/assets/javascripts/opal-parser.js.erb
|
48
|
-
- lib/assets/javascripts/opal.rb
|
49
|
-
- lib/assets/javascripts/opal/array.rb
|
50
|
-
- lib/assets/javascripts/opal/basic_object.rb
|
51
|
-
- lib/assets/javascripts/opal/boolean.rb
|
52
|
-
- lib/assets/javascripts/opal/class.rb
|
53
|
-
- lib/assets/javascripts/opal/comparable.rb
|
54
|
-
- lib/assets/javascripts/opal/date.rb
|
55
|
-
- lib/assets/javascripts/opal/enumerable.rb
|
56
|
-
- lib/assets/javascripts/opal/enumerator.rb
|
57
|
-
- lib/assets/javascripts/opal/error.rb
|
58
|
-
- lib/assets/javascripts/opal/hash.rb
|
59
|
-
- lib/assets/javascripts/opal/json.rb
|
60
|
-
- lib/assets/javascripts/opal/kernel.rb
|
61
|
-
- lib/assets/javascripts/opal/native.rb
|
62
|
-
- lib/assets/javascripts/opal/nil_class.rb
|
63
|
-
- lib/assets/javascripts/opal/numeric.rb
|
64
|
-
- lib/assets/javascripts/opal/parser.js
|
65
|
-
- lib/assets/javascripts/opal/proc.rb
|
66
|
-
- lib/assets/javascripts/opal/racc.rb
|
67
|
-
- lib/assets/javascripts/opal/range.rb
|
68
|
-
- lib/assets/javascripts/opal/regexp.rb
|
69
|
-
- lib/assets/javascripts/opal/runtime.js
|
70
|
-
- lib/assets/javascripts/opal/string.rb
|
71
|
-
- lib/assets/javascripts/opal/strscan.rb
|
72
|
-
- lib/assets/javascripts/opal/template.rb
|
73
|
-
- lib/assets/javascripts/opal/time.rb
|
74
45
|
- lib/opal.rb
|
75
|
-
- lib/opal/environment.rb
|
76
46
|
- lib/opal/grammar.rb
|
77
47
|
- lib/opal/grammar.y
|
78
48
|
- lib/opal/lexer.rb
|
@@ -82,6 +52,32 @@ files:
|
|
82
52
|
- lib/opal/server.rb
|
83
53
|
- lib/opal/version.rb
|
84
54
|
- opal.gemspec
|
55
|
+
- opal/opal-parser.js.erb
|
56
|
+
- opal/opal.rb
|
57
|
+
- opal/opal/array.rb
|
58
|
+
- opal/opal/basic_object.rb
|
59
|
+
- opal/opal/boolean.rb
|
60
|
+
- opal/opal/class.rb
|
61
|
+
- opal/opal/comparable.rb
|
62
|
+
- opal/opal/date.rb
|
63
|
+
- opal/opal/enumerable.rb
|
64
|
+
- opal/opal/enumerator.rb
|
65
|
+
- opal/opal/error.rb
|
66
|
+
- opal/opal/hash.rb
|
67
|
+
- opal/opal/json.rb
|
68
|
+
- opal/opal/kernel.rb
|
69
|
+
- opal/opal/native.rb
|
70
|
+
- opal/opal/nil_class.rb
|
71
|
+
- opal/opal/numeric.rb
|
72
|
+
- opal/opal/proc.rb
|
73
|
+
- opal/opal/racc.rb
|
74
|
+
- opal/opal/range.rb
|
75
|
+
- opal/opal/regexp.rb
|
76
|
+
- opal/opal/runtime.js
|
77
|
+
- opal/opal/string.rb
|
78
|
+
- opal/opal/strscan.rb
|
79
|
+
- opal/opal/template.rb
|
80
|
+
- opal/opal/time.rb
|
85
81
|
- spec/core/array/allocate_spec.rb
|
86
82
|
- spec/core/array/append_spec.rb
|
87
83
|
- spec/core/array/assoc_spec.rb
|
@@ -381,6 +377,7 @@ files:
|
|
381
377
|
- spec/core_ext/array/to_json_spec.rb
|
382
378
|
- spec/core_ext/basic_object/send_spec.rb
|
383
379
|
- spec/core_ext/class/_inherited_spec.rb
|
380
|
+
- spec/core_ext/class/proc_methods_spec.rb
|
384
381
|
- spec/core_ext/class/singleton_methods_spec.rb
|
385
382
|
- spec/core_ext/constants_spec.rb
|
386
383
|
- spec/core_ext/method_missing_spec.rb
|
@@ -793,6 +790,7 @@ test_files:
|
|
793
790
|
- spec/core_ext/array/to_json_spec.rb
|
794
791
|
- spec/core_ext/basic_object/send_spec.rb
|
795
792
|
- spec/core_ext/class/_inherited_spec.rb
|
793
|
+
- spec/core_ext/class/proc_methods_spec.rb
|
796
794
|
- spec/core_ext/class/singleton_methods_spec.rb
|
797
795
|
- spec/core_ext/constants_spec.rb
|
798
796
|
- spec/core_ext/method_missing_spec.rb
|
data/bin/opal
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'optparse'
|
4
|
-
require 'opal'
|
5
|
-
|
6
|
-
options = {}
|
7
|
-
parser = OptionParser.new do |opts|
|
8
|
-
opts.banner = "Usage: opal [options] file.rb"
|
9
|
-
|
10
|
-
opts.on("-v", "--version", "Opal Version") do |v|
|
11
|
-
puts Opal::VERSION
|
12
|
-
exit
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
parser.parse!
|
17
|
-
|
18
|
-
if ARGV.empty?
|
19
|
-
puts parser.banner
|
20
|
-
else
|
21
|
-
src = ARGV.first
|
22
|
-
src = File.read src if File.exist? src
|
23
|
-
puts Opal.parse(src)
|
24
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
<% require_asset 'opal/racc' %>
|
2
|
-
<% require_asset 'opal/strscan' %>
|
3
|
-
<% require_asset 'opal/parser' %>
|
4
|
-
|
5
|
-
// We need (some) of the libs from our real ruby parser (not in sprockets load path)
|
6
|
-
<% ['/grammar', '/lexer', '/parser', '/scope', ''].each do |f| %>
|
7
|
-
<%= Opal.parse File.read(File.join Opal.core_dir, '..', '..', "opal#{f}.rb") %>
|
8
|
-
<% end %>
|
@@ -1,57 +0,0 @@
|
|
1
|
-
(function() {
|
2
|
-
// quick exit if not insde browser
|
3
|
-
if (typeof(window) === 'undefined' || typeof(document) === 'undefined') {
|
4
|
-
return;
|
5
|
-
}
|
6
|
-
|
7
|
-
function findRubyScripts() {
|
8
|
-
var all = document.getElementsByTagName('script');
|
9
|
-
for (var i = 0, script; i < all.length; i++) {
|
10
|
-
script = all[i];
|
11
|
-
if (script.type === 'text/ruby') {
|
12
|
-
if (script.src) {
|
13
|
-
request(script.src, function(result) {
|
14
|
-
runRuby(result);
|
15
|
-
});
|
16
|
-
}
|
17
|
-
else {
|
18
|
-
runRuby(script.innerHTML);
|
19
|
-
}
|
20
|
-
}
|
21
|
-
else if (script.type === 'text/erb') {
|
22
|
-
runERB(script.innerHTML);
|
23
|
-
}
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
function runRuby(source) {
|
28
|
-
var js = Opal.Opal.Parser.$new().$parse(source);
|
29
|
-
eval('(' + js + ')()');
|
30
|
-
}
|
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
|
-
|
51
|
-
if (window.addEventListener) {
|
52
|
-
window.addEventListener('DOMContentLoaded', findRubyScripts, false);
|
53
|
-
}
|
54
|
-
else {
|
55
|
-
window.attachEvent('onload', findRubyScripts);
|
56
|
-
}
|
57
|
-
})();
|