opal 0.3.33 → 0.3.34
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -1
- data/Gemfile +6 -1
- data/README.md +7 -7
- data/Rakefile +29 -31
- data/bin/opal +1 -1
- data/{core/parser/browser.js → lib/assets/javascripts/opal-parser.js.erb} +9 -1
- data/lib/assets/javascripts/opal.js.erb +321 -0
- data/{core → lib/assets/javascripts/opal}/alpha.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/array.rb +14 -1
- data/{core → lib/assets/javascripts/opal}/basic_object.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/boolean.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/class.rb +3 -3
- data/{core → lib/assets/javascripts/opal}/comparable.rb +0 -0
- data/lib/assets/javascripts/opal/core.js +18 -0
- data/lib/assets/javascripts/opal/date.rb +156 -0
- data/{core → lib/assets/javascripts/opal}/enumerable.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/error.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/hash.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/json.rb +1 -1
- data/{core → lib/assets/javascripts/opal}/kernel.rb +2 -2
- data/{core → lib/assets/javascripts/opal}/nil_class.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/numeric.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/proc.rb +0 -0
- data/{core/parser → lib/assets/javascripts/opal}/racc.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/range.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/regexp.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/string.rb +0 -0
- data/{core/parser → lib/assets/javascripts/opal}/strscan.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/time.rb +0 -0
- data/lib/opal.rb +25 -58
- data/lib/opal/lexer.rb +1 -1
- data/lib/opal/parser.rb +1 -1
- data/lib/opal/processor.rb +26 -0
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -1
- data/spec/core/array/shuffle_spec.rb +11 -0
- data/spec/index.html +4 -6
- data/spec/spec_helper.rb +3 -1
- metadata +29 -35
- data/core/date.rb +0 -34
- data/core/erb.rb +0 -20
- data/core/load_order +0 -20
- data/core/runtime.js +0 -305
- data/core/test_runner/runner.js +0 -37
- data/lib/opal/builder.rb +0 -88
- data/lib/opal/erb.rb +0 -14
- data/lib/opal/rake_task.rb +0 -80
- data/spec/parser/erb_spec.rb +0 -32
- data/spec/test_case.html +0 -13
data/core/test_runner/runner.js
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
var args = phantom.args;
|
2
|
-
var page = require('webpage').create();
|
3
|
-
|
4
|
-
page.onConsoleMessage = function(msg) {
|
5
|
-
console.log(msg);
|
6
|
-
};
|
7
|
-
|
8
|
-
page.onInitialized = function() {
|
9
|
-
page.evaluate(function () {
|
10
|
-
window.OPAL_SPEC_PHANTOM = true;
|
11
|
-
});
|
12
|
-
};
|
13
|
-
|
14
|
-
page.open(args[0], function(status) {
|
15
|
-
if (status !== 'success') {
|
16
|
-
console.error("Cannot load: " + args[0]);
|
17
|
-
phantom.exit(1);
|
18
|
-
} else {
|
19
|
-
var timeout = parseInt(args[1] || 60000, 10);
|
20
|
-
var start = Date.now();
|
21
|
-
var interval = setInterval(function() {
|
22
|
-
if (Date.now() > start + timeout) {
|
23
|
-
console.error("Specs timed out");
|
24
|
-
phantom.exit(124);
|
25
|
-
} else {
|
26
|
-
var code = page.evaluate(function() {
|
27
|
-
return window.OPAL_SPEC_CODE;
|
28
|
-
});
|
29
|
-
|
30
|
-
if (code === 0 || code === 1) {
|
31
|
-
clearInterval(interval);
|
32
|
-
phantom.exit(code);
|
33
|
-
}
|
34
|
-
}
|
35
|
-
}, 500);
|
36
|
-
}
|
37
|
-
});
|
data/lib/opal/builder.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'opal/parser'
|
2
|
-
|
3
|
-
module Opal
|
4
|
-
|
5
|
-
# Used to build gems/libs/directories of opal code
|
6
|
-
class Builder
|
7
|
-
|
8
|
-
def initialize(options = {})
|
9
|
-
@sources = Array(options[:files])
|
10
|
-
@options = options
|
11
|
-
end
|
12
|
-
|
13
|
-
def build
|
14
|
-
@dir = File.expand_path(@options[:dir] || Dir.getwd)
|
15
|
-
|
16
|
-
files = files_for @sources
|
17
|
-
|
18
|
-
@files = {}
|
19
|
-
@requires = {}
|
20
|
-
@parser = Parser.new
|
21
|
-
|
22
|
-
files.each { |f| build_file f }
|
23
|
-
|
24
|
-
build_order(@requires).map { |r| @files[r] }.join("\n")
|
25
|
-
end
|
26
|
-
|
27
|
-
def files_for(sources)
|
28
|
-
files = []
|
29
|
-
|
30
|
-
sources.each do |s|
|
31
|
-
s = File.expand_path(File.join @dir, s)
|
32
|
-
if File.directory? s
|
33
|
-
files.push *Dir[File.join(s, '**/*.rb')]
|
34
|
-
elsif File.extname(s) == '.rb'
|
35
|
-
files << s
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
files
|
40
|
-
end
|
41
|
-
|
42
|
-
# @param [Hash<Array<String>>] files hash of dependencies
|
43
|
-
def build_order(files)
|
44
|
-
all = files.keys
|
45
|
-
result = []
|
46
|
-
handled = {}
|
47
|
-
|
48
|
-
all.each { |r| _find_build_order r, files, handled, result }
|
49
|
-
result
|
50
|
-
end
|
51
|
-
|
52
|
-
def _find_build_order(file, files, handled, result)
|
53
|
-
if handled[file] or !files[file]
|
54
|
-
return
|
55
|
-
end
|
56
|
-
|
57
|
-
handled[file] = true
|
58
|
-
|
59
|
-
files[file].each do |r|
|
60
|
-
_find_build_order r, files, handled, result
|
61
|
-
end
|
62
|
-
|
63
|
-
result << file
|
64
|
-
end
|
65
|
-
|
66
|
-
def build_file(file)
|
67
|
-
lib_name = lib_name_for file
|
68
|
-
parser_name = parser_name_for file
|
69
|
-
|
70
|
-
if File.extname(file) == '.rb'
|
71
|
-
code = @parser.parse File.read(file), lib_name
|
72
|
-
@requires[lib_name] = @parser.requires
|
73
|
-
end
|
74
|
-
|
75
|
-
@files[lib_name] = "// #{ parser_name }\n#{ code }"
|
76
|
-
end
|
77
|
-
|
78
|
-
def parser_name_for(file)
|
79
|
-
file.sub(/^#{@dir}\//, '')
|
80
|
-
end
|
81
|
-
|
82
|
-
def lib_name_for(file)
|
83
|
-
file = file.sub(/^#{@dir}\//, '')
|
84
|
-
file = file.chomp File.extname(file)
|
85
|
-
file.sub(/^(lib|spec|app)\//, '')
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
data/lib/opal/erb.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
module Opal
|
2
|
-
def self.parse_erb(str, name = '(erb)')
|
3
|
-
body = str.gsub('"', '\\"').gsub(/<%=([\s\S]+?)%>/) do
|
4
|
-
inner = $1.gsub(/\\'/, "'").gsub(/\\"/, '"')
|
5
|
-
"\")\nout.<<(#{ inner })\nout.<<(\""
|
6
|
-
end.gsub(/<%([\s\S]+?)%>/) do
|
7
|
-
"\")\n#{ $1 }\nout.<<(\""
|
8
|
-
end
|
9
|
-
|
10
|
-
code = "ERB.new('#{name}') do\nout = []\nout.<<(\"#{ body }\")\nout.join\nend\n"
|
11
|
-
"// #{ name } (erb)\n#{ Opal.parse(code) }\n"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
data/lib/opal/rake_task.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'opal'
|
2
|
-
require 'opal/builder'
|
3
|
-
require 'fileutils'
|
4
|
-
|
5
|
-
module Opal
|
6
|
-
class RakeTask
|
7
|
-
include Rake::DSL if defined? Rake::DSL
|
8
|
-
|
9
|
-
attr_accessor :name, :build_dir, :specs_dir, :files, :dependencies, :parser, :dir
|
10
|
-
|
11
|
-
def initialize(namespace = nil)
|
12
|
-
@project_dir = Dir.getwd
|
13
|
-
|
14
|
-
@name = File.basename(@project_dir)
|
15
|
-
@dir = @project_dir
|
16
|
-
@build_dir = 'build'
|
17
|
-
@specs_dir = 'spec'
|
18
|
-
@files = Dir['lib/**/*.rb']
|
19
|
-
@dependencies = []
|
20
|
-
|
21
|
-
yield self if block_given?
|
22
|
-
|
23
|
-
define_tasks
|
24
|
-
end
|
25
|
-
|
26
|
-
def build_gem(name)
|
27
|
-
out = File.join @build_dir, "#{ name }.js"
|
28
|
-
puts " * #{out}"
|
29
|
-
write_code Opal.build_gem(name), out
|
30
|
-
rescue Gem::LoadError => e
|
31
|
-
puts " - Error: Could not find gem #{name}"
|
32
|
-
end
|
33
|
-
|
34
|
-
def write_code(code, out)
|
35
|
-
FileUtils.mkdir_p File.dirname(out)
|
36
|
-
File.open(out, 'w+') { |o| o.puts code }
|
37
|
-
end
|
38
|
-
|
39
|
-
def define_tasks
|
40
|
-
desc "Build opal project"
|
41
|
-
task 'opal:build' do
|
42
|
-
out = File.join @build_dir, "#{ @name }.js"
|
43
|
-
puts " * #{out}"
|
44
|
-
write_code Opal.build_files(@files, @dir), out
|
45
|
-
end
|
46
|
-
|
47
|
-
desc "Build specs"
|
48
|
-
task 'opal:spec' do
|
49
|
-
out = File.join @build_dir, 'specs.js'
|
50
|
-
puts " * #{out}"
|
51
|
-
write_code Opal.build_files(@specs_dir), out
|
52
|
-
end
|
53
|
-
|
54
|
-
desc "Build dependencies"
|
55
|
-
task 'opal:dependencies' do
|
56
|
-
out = File.join @build_dir, 'opal.js'
|
57
|
-
puts " * #{out}"
|
58
|
-
write_code Opal.runtime, out
|
59
|
-
|
60
|
-
# build opal-parser?
|
61
|
-
if @parser
|
62
|
-
out = File.join @build_dir, 'opal-parser.js'
|
63
|
-
puts " * #{out}"
|
64
|
-
write_code Opal.parser_code, out
|
65
|
-
end
|
66
|
-
|
67
|
-
@dependencies.each { |dep| build_gem dep }
|
68
|
-
end
|
69
|
-
|
70
|
-
desc "Run specs in spec/index.html"
|
71
|
-
task 'opal:test' do
|
72
|
-
runner = File.join Opal.core_dir, 'test_runner', 'runner.js'
|
73
|
-
sh "phantomjs #{runner} spec/index.html"
|
74
|
-
end
|
75
|
-
|
76
|
-
desc "Build opal files, dependencies and specs"
|
77
|
-
task :opal => %w(opal:build opal:dependencies opal:spec)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
data/spec/parser/erb_spec.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
describe "Opal.parse_erb" do
|
2
|
-
before do
|
3
|
-
@simple = opal_eval_compiled(Opal.parse_erb("<div><%= @some_data %></div>", "simple_test"))
|
4
|
-
@quoted = opal_eval_compiled(Opal.parse_erb('<div class="foo">hello <%= "there " + @name %></div>', "quoted_test"))
|
5
|
-
end
|
6
|
-
|
7
|
-
it "should be an instance of ERB" do
|
8
|
-
@simple.should be_kind_of(ERB)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "calling the block with a context should render the block" do
|
12
|
-
@some_data = "hello"
|
13
|
-
@simple.render(self).should == "<div>hello</div>"
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should accept quotes in strings" do
|
17
|
-
@name = "adam"
|
18
|
-
@quoted.render(self).should == "<div class=\"foo\">hello there adam</div>"
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'stores created templates in ERB[] by name' do
|
22
|
-
ERB['simple_test'].should == @simple
|
23
|
-
ERB['quoted_test'].should == @quoted
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '.parse' do
|
27
|
-
it 'parses erb content by running it through compiler' do
|
28
|
-
opal_eval_compiled Opal.parse_erb("hi there", 'test_parse')
|
29
|
-
ERB['test_parse'].should be_kind_of(ERB)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
data/spec/test_case.html
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
<!doctype html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>Opal Test Case</title>
|
5
|
-
<script type="text/javascript" src="../../opal.js"></script>
|
6
|
-
<script type="text/javascript" src="../../opal-parser.js"></script>
|
7
|
-
<script type="text/javascript" src="../../opal-spec.js"></script>
|
8
|
-
<script type="text/javascript" src="specs.js"></script>
|
9
|
-
<script type="text/javascript" src="../runner.js"></script>
|
10
|
-
</head>
|
11
|
-
<body>
|
12
|
-
</body>
|
13
|
-
</html>
|