├── .gitignore ├── .npmignore ├── .rspec ├── .travis.yml ├── Gemfile ├── Gemfile.lock ├── MIT-LICENSE ├── README.md ├── Rakefile ├── bin ├── opal-node ├── opal-node-gem └── opal-node-irb ├── examples └── express-wrapper.rb ├── lib ├── dir.rb ├── file.rb ├── opal-node.coffee ├── opal-node.js ├── opal.js ├── opal_node.rb ├── opal_node_gem.rb ├── opal_node_irb.rb └── yaml.rb ├── opal ├── base64.js ├── buffer.js ├── date.js ├── delegate.js ├── dir.js ├── encoding.js ├── enumerator.js ├── erb.js ├── file.js ├── forwardable.js ├── json.js ├── math.js ├── native.js ├── observer.js ├── opal-parser.js ├── opal-version ├── opal.js ├── ostruct.js ├── pathname.js ├── pp.js ├── promise.js ├── rbconfig.js ├── securerandom.js ├── set.js ├── singleton.js ├── source_map.js ├── stringio.js ├── strscan.js ├── template.js ├── thread.js └── time.js ├── package.json ├── spec ├── dir_spec.rb ├── file_spec.rb ├── fixtures │ └── hello_world.rb ├── opal-node.coffee_spec.rb └── spec_helper.rb └── tmp └── .git-keep /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /tmp/*.rb 3 | /tmp/*.log 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.coffee 2 | -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | -c 2 | -f d 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: 2 | - ruby 3 | - node_js 4 | 5 | before_install: 6 | - npm install 7 | 8 | script: bundle exec rspec spec 9 | 10 | rvm: 11 | - 1.9.3 12 | 13 | node_js: 14 | - 0.6 15 | - 0.7 16 | - 0.8 17 | - 0.9 18 | - "0.10" 19 | - "0.11" 20 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'opal' 4 | gem 'rspec' 5 | gem 'rake' 6 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | diff-lcs (1.2.5) 5 | hike (1.2.3) 6 | json (1.8.1) 7 | multi_json (1.9.0) 8 | opal (0.6.0) 9 | source_map 10 | sprockets 11 | rack (1.5.2) 12 | rake (10.1.1) 13 | rspec (2.14.1) 14 | rspec-core (~> 2.14.0) 15 | rspec-expectations (~> 2.14.0) 16 | rspec-mocks (~> 2.14.0) 17 | rspec-core (2.14.8) 18 | rspec-expectations (2.14.5) 19 | diff-lcs (>= 1.1.3, < 2.0) 20 | rspec-mocks (2.14.6) 21 | source_map (3.0.1) 22 | json 23 | sprockets (2.12.0) 24 | hike (~> 1.2) 25 | multi_json (~> 1.0) 26 | rack (~> 1.0) 27 | tilt (~> 1.1, != 1.3.0) 28 | tilt (1.4.1) 29 | 30 | PLATFORMS 31 | ruby 32 | 33 | DEPENDENCIES 34 | opal 35 | rake 36 | rspec 37 | -------------------------------------------------------------------------------- /MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2012 Elia Schito 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Opal for Node.js 3 | 4 | --- 5 | 6 | > **WARNING** 7 | > 8 | > This project is currently slightly outdated, the current preferred way to use Opal with Node.js is to compile the app and use node to run the compilation result. 9 | > 10 | > A `nodejs` file is now available directly [in the stdlib](https://github.com/opal/opal/blob/master/stdlib/nodejs.rb) and Node.js is also the default runner for the CLI (see `opal --help` for a list of alternative runners). An example of this can be found in [the `mspec_node` rake task](https://github.com/opal/opal/blob/master/Rakefile#L62-L63). 11 | 12 | --- 13 | 14 | 15 | 16 | [![Build Status](https://secure.travis-ci.org/elia/opal-node.svg)](http://travis-ci.org/elia/opal-node) 17 | 18 | Use Ruby on Node.js for **REAL-WORLD rofl-SCALING** 19 | 20 |
21 | > Use Node.js FOR SPEED 22 | > 23 | > — [@RoflscaleTips](https://twitter.com/RoflscaleTips/status/57551756657303552) 24 | 25 | 26 |
27 | > [@hipsterhacker](https://twitter.com/hipsterhacker) I approve of your choices of roflscale technologies, particularly Node. Your roflmillions of users will appreciate it. 28 | > 29 | > — [@RoflscaleTips](https://twitter.com/RoflscaleTips/status/50320781162446848) 30 | 31 |
32 | > mongodb should be ported to nodejs for improved scalability 33 | > 34 | > — [@RoflscaleTips](https://twitter.com/RoflscaleTips/status/190291005138939904) 35 | 36 | 37 | 38 | ## Usage 39 | 40 | Run with `opal-node app.rb` 41 | or run the repl: `opal-node-irb` 42 | 43 | 44 | ### Installing 45 | 46 | Install with NPM: `npm install -g opal` 47 | or via RVM: `rvm install opal` 48 | 49 | 50 | ## Example ([rack](http://rack.github.io)) 51 | 52 | 53 | ```ruby 54 | # app.rb 55 | require 'http/server' 56 | HTTP::Server.start 3000 do 57 | [200, {'Content-Type' => 'text/plain'}, ["Hello World!\n"]] 58 | end 59 | ``` 60 | 61 | This is the original Node.js example: 62 | 63 | ```js 64 | // the original nodejs example 65 | http = require('http') 66 | var port = process.env.port || 1337; 67 | http.createServer(function(req, res) { 68 | res.writeHead(200, { 'Content-Type': 'text/plain' }); 69 | res.end('Hello World\n'); 70 | }).listen(port); 71 | ``` 72 | 73 | 74 | Here's the (naïve) rack-like implementation of `http/server.rb` 75 | 76 | ```ruby 77 | # http/server.rb 78 | module HTTP 79 | `_http = require('http')` 80 | class Server < `_http.Server` 81 | alias_native :listen, :listen 82 | 83 | def self.start port, &block 84 | server = new `function(request, response) { 85 | request.on('end', function(chunk) { 86 | var rackResponse = #{ block.call(`request`, `response`) }; 87 | response.writeHead(rackResponse[0], #{ `rackResponse[1]`.to_native }); 88 | response.end( rackResponse[2].join(' ') ); 89 | }) 90 | }` 91 | server.listen(port) 92 | server 93 | end 94 | end 95 | end 96 | ``` 97 | 98 | 99 | ### Example 2 ([express.js](http://expressjs.com) wrapper) 100 | 101 | A simple Express.js wrapper example can be found in [`examples/express-wrapper.rb`](https://github.com/opal/opal-node/blob/master/examples/express-wrapper.rb) 102 | 103 | ```ruby 104 | Express.new do 105 | get '/' do |req, res| 106 | res.send 200, 'hulla!' 107 | end 108 | end.listen 3000 109 | ``` 110 | 111 | 112 | 113 | ## Developing 114 | 115 | Start a coffee watcher to keep opal.js in sync with opal.coffee 116 | 117 | coffee -cwo lib/ lib/*.coffee 118 | 119 | 120 | ### Running in development 121 | 122 | NODE_PATH="$NODE_PATH:../lib/" node ./bin/opal-node 123 | NODE_PATH="$NODE_PATH:../lib/" node ./bin/opal-node-irb 124 | 125 | 126 | ## Testing 127 | 128 | To keep the specs running while developing just install and use [spectator](https://github.com/elia/spectator#readme) 129 | that will compile `opal.coffee` to `opal.js` before every run of the spec. 130 | 131 | $ gem install spectator 132 | $ gem install notify # to get notification 133 | $ spectator 134 | --- Waiting for changes... 135 | 136 | 137 | 138 | ## License 139 | 140 | This project rocks and uses MIT-LICENSE. 141 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | 3 | # BUNDLER 4 | 5 | begin 6 | require 'bundler/setup' 7 | rescue LoadError 8 | puts 'You must `gem install bundler` and `bundle install` to run rake tasks' 9 | exit 1 10 | end 11 | 12 | 13 | # TEST 14 | 15 | require 'rspec/core/rake_task' 16 | RSpec::Core::RakeTask.new :default 17 | 18 | 19 | # OPAL 20 | 21 | desc "Build all js files to ./build" 22 | task :build do 23 | require 'fileutils' 24 | require 'opal' 25 | env = Sprockets::Environment.new 26 | 27 | base_dir = 'opal' 28 | Opal.paths.each { |p| env.append_path p } 29 | version = Opal::VERSION 30 | 31 | puts "Building version #{version}" 32 | File.open("#{base_dir}/opal-version", 'w') { |f| f << version} 33 | %w[opal opal-parser].each do |file| 34 | path = "#{base_dir}/#{file}.js" 35 | puts "Building #{file.ljust 20} to: #{path}" 36 | File.open(path, 'w') { |f| f << env[file].to_s} 37 | end 38 | puts 'Done.' 39 | end 40 | 41 | -------------------------------------------------------------------------------- /bin/opal-node: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../lib/opal-node') 4 | var filename = process.argv[2] 5 | 6 | if (filename.match(/^\./)) { 7 | path = require('path') 8 | filename = path.resolve(process.cwd(), filename) 9 | } 10 | 11 | OpalNode.require(filename) 12 | -------------------------------------------------------------------------------- /bin/opal-node-gem: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../lib/opal-node') 4 | OpalNode.require(__dirname+'/../lib/opal_node_gem.rb') 5 | -------------------------------------------------------------------------------- /bin/opal-node-irb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../lib/opal-node') 4 | OpalNode.require(__dirname+'/../lib/opal_node_irb.rb') 5 | -------------------------------------------------------------------------------- /examples/express-wrapper.rb: -------------------------------------------------------------------------------- 1 | require 'native' 2 | 3 | class Express < Native::Object 4 | EXPRESS = `OpalNode.node_require('express')` 5 | 6 | def initialize &block 7 | # `console.log(typeof #{EXPRESS});` 8 | @native = `#{EXPRESS}()` 9 | p app.class 10 | # `console.log(#{app}._klass);` 11 | p Kernel.native?(app) 12 | # app = super(app) 13 | yield self if block_given? 14 | end 15 | 16 | class Request < Native::Object 17 | end 18 | 19 | class Response < Native::Object 20 | alias_native :send, :send 21 | alias_native :[]=, :setHeader 22 | end 23 | 24 | %i[get post put delete].each do |method_name| 25 | define_method method_name do |path, &block| 26 | 27 | %x| 28 | #{@native}[#{method_name}](#{path}, function(req, res) { 29 | req = #{Request.new(`req`)}; 30 | res = #{Response.new(`res`)}; 31 | #{block.call(`req`, `res`)} 32 | }) 33 | | 34 | end 35 | end 36 | end 37 | 38 | Express.new do |app| 39 | app.get '/' do |req, res| 40 | p req.class 41 | p res.class 42 | res.send 200, <<-HTML 43 | 44 | 45 | 46 |

Hulla!

47 | 48 | HTML 49 | end 50 | end.listen 3000 51 | -------------------------------------------------------------------------------- /lib/dir.rb: -------------------------------------------------------------------------------- 1 | class Dir 2 | def self.[] glob 3 | `#{__glob__}.sync(#{glob})` 4 | end 5 | 6 | def self.__glob__ 7 | @__glob__ ||= `OpalNode.node_require('glob')` 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /lib/file.rb: -------------------------------------------------------------------------------- 1 | class File 2 | 3 | def self.__fs__ 4 | @fs ||= `OpalNode.node_require('fs')` 5 | end 6 | 7 | def self.read path 8 | `#{__fs__}.readFileSync(#{path}).toString()` 9 | end 10 | 11 | def self.exist? path 12 | `#{__fs__}.existsSync(#{path})` 13 | end 14 | 15 | def self.realpath(pathname, dir_string = nil, cache = nil, &block) 16 | pathname = join(dir_string, pathname) if dir_string 17 | if block_given? 18 | ` 19 | #{__fs__}.realpath(#{pathname}, #{cache}, function(error, realpath){ 20 | if (error) #{raise error.message} 21 | else #{block.call(`realpath`)} 22 | }) 23 | ` 24 | else 25 | `#{__fs__}.realpathSync(#{pathname}, #{cache})` 26 | end 27 | end 28 | 29 | 30 | def self.__path__ 31 | @path ||= `OpalNode.node_require('path')` 32 | end 33 | 34 | def self.basename(path, ext = undefined) 35 | `#{__path__}.basename(#{path}, #{ext})` 36 | end 37 | 38 | def self.dirname(path) 39 | `#{__path__}.dirname(#{path})` 40 | end 41 | 42 | def self.join(*paths) 43 | __path = __path__ 44 | `#{__path}.join.apply(#{__path}, #{paths})` 45 | end 46 | end 47 | 48 | -------------------------------------------------------------------------------- /lib/opal-node.coffee: -------------------------------------------------------------------------------- 1 | sourceFile = "#{__dirname}/../opal/opal.js" 2 | parserFile = "#{__dirname}/../opal/opal-parser.js" 3 | 4 | extensions = ['.opal', '.rb'] 5 | 6 | fs = require('fs') 7 | __path__ = require('path') 8 | 9 | source = fs.readFileSync(sourceFile).toString() 10 | parser = fs.readFileSync(parserFile).toString() 11 | 12 | # Being Ruby classes and modules are global constants, hence it makes sense to 13 | # break loose from the nodejs module system chains and just live in the GLOBAL 14 | # object. 15 | vm = require 'vm' 16 | vm.runInThisContext(source, sourceFile) 17 | vm.runInThisContext(parser, parserFile) 18 | 19 | class OpalNode 20 | @load_path: [__dirname+'/../opal', __dirname] 21 | @loaded: {} 22 | @backtrace: [] 23 | @node_require: require 24 | 25 | @run: (ruby, filename)-> 26 | js = OpalNode.compile(ruby, file: filename) 27 | vm.runInThisContext(js, filename) 28 | 29 | @compile: (ruby, options = undefined) -> # Override function for now 30 | # Options can be Hash or plain JS 31 | if options and options.klass isnt Opal.Hash 32 | keys = (key for key, value of options) 33 | options = Opal.hash2(keys, options) 34 | compiler = Opal.Opal.Compiler.$new() 35 | source = compiler.$compile(ruby, options) 36 | 37 | for required in compiler.$requires() 38 | OpalNode.require required 39 | 40 | Opal.Opal.$compile(ruby, options) 41 | 42 | @resolve: (filename)-> 43 | try 44 | if filename.match(/^\./) 45 | filepath = __path__.resolve(process.cwd(), filename) 46 | require.resolve(filepath) 47 | else 48 | for path in OpalNode.load_path 49 | full_path = __path__.resolve(path, filename) 50 | return full_path if fs.existsSync(full_path) 51 | 52 | full_path = full_path.replace(/(\.rb)?$/, '.js') 53 | return full_path if fs.existsSync(full_path) 54 | 55 | # If it wasn't found fallback to NodeJS resolver 56 | require.resolve(filename) 57 | catch error 58 | if error.code is 'MODULE_NOT_FOUND' or 59 | error.message.indexOf("'#{filename}'") >= 0 60 | return null 61 | else 62 | # Re-throw not "Module not found" errors 63 | throw error 64 | 65 | @require: (filename) -> 66 | ruby_filename = filename.replace(/(\.rb)?$/, '.rb') 67 | full_path = OpalNode.resolve(ruby_filename) 68 | 69 | unless full_path 70 | if filename.match(/\.rb$/) 71 | stack = OpalNode.backtrace 72 | file = stack[stack.length-1] || __filename 73 | OpalNode.run("raise LoadError, 'cannot load such file -- #{filename}'", file) 74 | else 75 | # Fallback to node if there's no ruby file 76 | return require(filename) 77 | 78 | # Check if it has been already loaded 79 | loaded = OpalNode.loaded[filename] 80 | OpalNode.backtrace.push(filename) 81 | return false if loaded 82 | 83 | ruby = fs.readFileSync("#{full_path}").toString() 84 | OpalNode.loaded[filename] = true 85 | if full_path.match(/\.js$/) 86 | vm.runInThisContext(ruby, filename) 87 | else 88 | OpalNode.run(ruby, filename) 89 | 90 | OpalNode.backtrace.pop() 91 | 92 | global.OpalNode = OpalNode 93 | 94 | OpalNode.require __dirname + '/opal_node' 95 | OpalNode.require __dirname + '/file' 96 | OpalNode.require __dirname + '/dir' 97 | -------------------------------------------------------------------------------- /lib/opal-node.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.6.3 2 | (function() { 3 | var OpalNode, extensions, fs, parser, parserFile, source, sourceFile, vm, __path__; 4 | 5 | sourceFile = "" + __dirname + "/../opal/opal.js"; 6 | 7 | parserFile = "" + __dirname + "/../opal/opal-parser.js"; 8 | 9 | extensions = ['.opal', '.rb']; 10 | 11 | fs = require('fs'); 12 | 13 | __path__ = require('path'); 14 | 15 | source = fs.readFileSync(sourceFile).toString(); 16 | 17 | parser = fs.readFileSync(parserFile).toString(); 18 | 19 | vm = require('vm'); 20 | 21 | vm.runInThisContext(source, sourceFile); 22 | 23 | vm.runInThisContext(parser, parserFile); 24 | 25 | OpalNode = (function() { 26 | function OpalNode() {} 27 | 28 | OpalNode.load_path = [__dirname + '/../opal', __dirname]; 29 | 30 | OpalNode.loaded = {}; 31 | 32 | OpalNode.backtrace = []; 33 | 34 | OpalNode.node_require = require; 35 | 36 | OpalNode.run = function(ruby, filename) { 37 | var js; 38 | js = OpalNode.compile(ruby, { 39 | file: filename 40 | }); 41 | return vm.runInThisContext(js, filename); 42 | }; 43 | 44 | OpalNode.compile = function(ruby, options) { 45 | var compiler, key, keys, required, value, _i, _len, _ref; 46 | if (options == null) { 47 | options = void 0; 48 | } 49 | if (options && options.klass !== Opal.Hash) { 50 | keys = (function() { 51 | var _results; 52 | _results = []; 53 | for (key in options) { 54 | value = options[key]; 55 | _results.push(key); 56 | } 57 | return _results; 58 | })(); 59 | options = Opal.hash2(keys, options); 60 | } 61 | compiler = Opal.Opal.Compiler.$new(); 62 | source = compiler.$compile(ruby, options); 63 | _ref = compiler.$requires(); 64 | for (_i = 0, _len = _ref.length; _i < _len; _i++) { 65 | required = _ref[_i]; 66 | OpalNode.require(required); 67 | } 68 | return Opal.Opal.$compile(ruby, options); 69 | }; 70 | 71 | OpalNode.resolve = function(filename) { 72 | var error, filepath, full_path, path, _i, _len, _ref; 73 | try { 74 | if (filename.match(/^\./)) { 75 | filepath = __path__.resolve(process.cwd(), filename); 76 | return require.resolve(filepath); 77 | } else { 78 | _ref = OpalNode.load_path; 79 | for (_i = 0, _len = _ref.length; _i < _len; _i++) { 80 | path = _ref[_i]; 81 | full_path = __path__.resolve(path, filename); 82 | if (fs.existsSync(full_path)) { 83 | return full_path; 84 | } 85 | full_path = full_path.replace(/(\.rb)?$/, '.js'); 86 | if (fs.existsSync(full_path)) { 87 | return full_path; 88 | } 89 | } 90 | return require.resolve(filename); 91 | } 92 | } catch (_error) { 93 | error = _error; 94 | if (error.code === 'MODULE_NOT_FOUND' || error.message.indexOf("'" + filename + "'") >= 0) { 95 | return null; 96 | } else { 97 | throw error; 98 | } 99 | } 100 | }; 101 | 102 | OpalNode.require = function(filename) { 103 | var file, full_path, loaded, ruby, ruby_filename, stack; 104 | ruby_filename = filename.replace(/(\.rb)?$/, '.rb'); 105 | full_path = OpalNode.resolve(ruby_filename); 106 | if (!full_path) { 107 | if (filename.match(/\.rb$/)) { 108 | stack = OpalNode.backtrace; 109 | file = stack[stack.length - 1] || __filename; 110 | OpalNode.run("raise LoadError, 'cannot load such file -- " + filename + "'", file); 111 | } else { 112 | return require(filename); 113 | } 114 | } 115 | loaded = OpalNode.loaded[filename]; 116 | OpalNode.backtrace.push(filename); 117 | if (loaded) { 118 | return false; 119 | } 120 | ruby = fs.readFileSync("" + full_path).toString(); 121 | OpalNode.loaded[filename] = true; 122 | if (full_path.match(/\.js$/)) { 123 | vm.runInThisContext(ruby, filename); 124 | } else { 125 | OpalNode.run(ruby, filename); 126 | } 127 | return OpalNode.backtrace.pop(); 128 | }; 129 | 130 | return OpalNode; 131 | 132 | })(); 133 | 134 | global.OpalNode = OpalNode; 135 | 136 | OpalNode.require(__dirname + '/opal_node'); 137 | 138 | OpalNode.require(__dirname + '/file'); 139 | 140 | OpalNode.require(__dirname + '/dir'); 141 | 142 | }).call(this); 143 | -------------------------------------------------------------------------------- /lib/opal.js: -------------------------------------------------------------------------------- 1 | require('./opal-node') 2 | -------------------------------------------------------------------------------- /lib/opal_node.rb: -------------------------------------------------------------------------------- 1 | class LoadError < ScriptError; end 2 | 3 | module IO::Writable 4 | def puts(*args) 5 | write args.map { |arg| String(arg) }.join($/)+$/ 6 | end 7 | end 8 | 9 | $stdout = IO.new 10 | $stderr = IO.new 11 | STDOUT = $stdout 12 | STDERR = $stderr 13 | 14 | def $stdout.write(string) 15 | `process.stdout.write(#{string})` 16 | nil 17 | end 18 | 19 | def $stderr.write(string) 20 | `process.stderr.write(string)` 21 | nil 22 | end 23 | 24 | $stdout.extend(IO::Writable) 25 | $stderr.extend(IO::Writable) 26 | 27 | module Kernel 28 | def require name 29 | `OpalNode.require(#{name})` 30 | end 31 | 32 | def node_require name 33 | `OpalNode.node_require(#{name})` 34 | end 35 | end 36 | 37 | ARGV = `process.argv` 38 | ENV = Object.new 39 | def ENV.[]= name, value 40 | `process.env[#{name.to_s}] = #{value.to_s}` 41 | end 42 | 43 | def ENV.[] name 44 | `process.env[#{name}]` 45 | end 46 | 47 | $: = $LOAD_PATH = `OpalNode.load_path` 48 | -------------------------------------------------------------------------------- /lib/opal_node_gem.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | 3 | module Gem 4 | class Install 5 | def initialize(name, version) 6 | @name, name 7 | @version = version || latest_version(name) 8 | end 9 | 10 | def latest_version(name) 11 | command = curl("https://rubygems.org/api/v1/versions/#{name}.json") 12 | versions = JSON.parse system(command) 13 | versions.first['number'] 14 | end 15 | 16 | def full_name 17 | "#{name}-#{version}" 18 | end 19 | 20 | def gem_home 21 | ENV['HOME']+'/.opal-node/opal-gems/#{RUBY_ENGINE_VERSION}' 22 | end 23 | 24 | def gems_dir 25 | File.join(gem_home, :gems) 26 | end 27 | 28 | def specs_dir 29 | File.join(gem_home, :specs) 30 | end 31 | 32 | def perform 33 | gem_dir = File.join(gems_dir, full_name) 34 | spec_dir = File.join(specs_dir, full_name+'.yml') 35 | system "mkdir -p #{gem_dir} #{spec_dir}" 36 | 37 | Dir.chdir gem_dir do 38 | system curl("https://rubygems.org/downloads/#{name}-#{version}.gem") + '| tar -xv' 39 | system "gunzip metadata.gz --stdout > #{specs_dir}/#{full_name}.yml" 40 | system "gunzip data.tar.gz" 41 | system "tar -xvf data.tar" 42 | end 43 | end 44 | 45 | def curl url 46 | "curl -L #{url}" 47 | end 48 | end 49 | end 50 | 51 | command = ARGV.shift 52 | case command 53 | when 'install' 54 | name = ARGV.shift 55 | if ARGV.include? '-v' 56 | version = ARGV[ ARGV.index('-v')+1 ] 57 | else 58 | version = nil 59 | end 60 | install = Gem::Install.new(name, version) 61 | install.perform 62 | else 63 | raise NotImplementedError, "sorry, the #{command.inspect} is not implemented." 64 | end 65 | -------------------------------------------------------------------------------- /lib/opal_node_irb.rb: -------------------------------------------------------------------------------- 1 | require 'native' 2 | 3 | NodeRepl = Native(`OpalNode.node_require('repl')`) 4 | 5 | def NodeRepl.start opations = {} 6 | Native::Object.new(`#@native.start(#{opations.to_n})`) 7 | end 8 | 9 | def exit 10 | `process.exit()` 11 | end 12 | 13 | line = 1 14 | prompt_interrupted = false 15 | 16 | prompt = ->(_self) { 17 | tip = prompt_interrupted ? '*' : '>' 18 | "irb(#{_self.to_s}):#{line.to_s.rjust(3, '0')}#{tip} " 19 | } 20 | 21 | $repl = NodeRepl.start prompt: prompt.call(self), 22 | useGlobal: true, ignoreUndefined: true, 23 | eval: -> (cmd, context, filename, callback) { 24 | line += 1 25 | 26 | cmd = cmd[1...-1].chomp 27 | 28 | if cmd.empty? 29 | prompt_interrupted = true 30 | $repl.prompt = prompt.call(self) 31 | 32 | callback.call('') 33 | next 34 | end 35 | 36 | prompt_interrupted = false 37 | $repl.prompt = prompt.call(self) 38 | 39 | begin 40 | result = `OpalNode.run(cmd, filename)` 41 | result = nil if `#{result} == nil` 42 | callback.call('=> '+result.inspect) 43 | rescue => e 44 | callback.call(e.backtrace.join("\n")) 45 | end 46 | } 47 | 48 | # Add a newline before exiting 49 | $repl.on :exit, -> { puts } 50 | -------------------------------------------------------------------------------- /lib/yaml.rb: -------------------------------------------------------------------------------- 1 | require 'native' 2 | 3 | module YAML 4 | NATIVE = node_require('js-yaml') 5 | 6 | def self.load_path path 7 | loaded = `#{NATIVE}.yaml.safeLoad(#{File.__fs__}.readFileSync(#{path}, 'utf8'))` 8 | loaded = Hash.new(loaded) if native?(loaded) 9 | loaded 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /opal/base64.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module; 4 | 5 | $opal.add_stubs([]); 6 | return (function($base) { 7 | var self = $module($base, 'Base64'); 8 | 9 | var def = self._proto, $scope = self._scope; 10 | 11 | 12 | var charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', 13 | lookup = {}; 14 | 15 | for (var i = 0, length = charset.length; i < length; i++) { 16 | lookup[charset.charAt(i)] = i; 17 | } 18 | 19 | function from(string) { 20 | var buffer = []; 21 | 22 | for (var i = 0, length = string.length; i < length; i++) { 23 | var a, b, c, d; 24 | 25 | a = lookup[string.charAt(i)]; 26 | b = lookup[string.charAt(++i)]; 27 | 28 | buffer.push((a << 2) | (b >> 4)); 29 | 30 | c = lookup[string.charAt(++i)]; 31 | 32 | if (c == 64) { 33 | break; 34 | } 35 | 36 | buffer.push(((b & 15) << 4) | (c >> 2)); 37 | 38 | d = lookup[string.charAt(++i)]; 39 | 40 | if (d == 64) { 41 | break; 42 | } 43 | 44 | buffer.push(((c & 3) << 6) | d); 45 | } 46 | 47 | return buffer; 48 | } 49 | 50 | function decode(string) { 51 | var buffer = from(string), 52 | result = []; 53 | 54 | for (var i = 0, length = buffer.length; i < length; i++) { 55 | if (buffer[i] < 128) { 56 | result.push(String.fromCharCode(buffer[i])); 57 | } 58 | else if (buffer[i] > 191 && buffer[i] < 224) { 59 | var a = (buffer[i] & 31) << 6, 60 | b = buffer[++i] & 63; 61 | 62 | result.push(String.fromCharCode(a | b)); 63 | } 64 | else { 65 | var a = (buffer[i] & 15) << 12, 66 | b = (buffer[++i] & 63) << 6, 67 | c = buffer[++i] & 63; 68 | 69 | result.push(String.fromCharCode(a | b | c)); 70 | } 71 | } 72 | 73 | return result.join(''); 74 | } 75 | 76 | function to(string) { 77 | var buffer = []; 78 | 79 | if (/^[\x00-\x7f]*$/.test(string)) { 80 | for (var i = 0, length = string.length; i < length; i++) { 81 | buffer.push(string.charCodeAt(i)); 82 | } 83 | } 84 | else { 85 | for (var i = 0, length = string.length; i < length; i++) { 86 | var ch = string.charCodeAt(i); 87 | 88 | if (ch < 128) { 89 | buffer.push(ch); 90 | } 91 | else if (ch < 2048) { 92 | buffer.push((ch >> 6) | 192); 93 | buffer.push((ch & 63) | 128); 94 | } 95 | else { 96 | buffer.push((ch >> 12) | 224); 97 | buffer.push(((ch >> 6) & 63) | 128); 98 | buffer.push((ch & 63) | 128); 99 | } 100 | } 101 | } 102 | 103 | return buffer; 104 | } 105 | 106 | function encode(string) { 107 | var buffer = to(string), 108 | result = []; 109 | 110 | for (var i = 0, length = buffer.length; i < length; i++) { 111 | var a = buffer[i], 112 | b = buffer[++i], 113 | c = 0, 114 | d = a >> 2, 115 | e = ((a & 3) << 4) | (b >> 4), 116 | f = 0, 117 | g = 0; 118 | 119 | if (isNaN(a)) { 120 | f = g = 64; 121 | } 122 | else { 123 | c = buffer[++i]; 124 | f = ((b & 15) << 2) | (c >> 6); 125 | g = isNaN(c) ? 64 : c & 63; 126 | } 127 | 128 | result.push(charset.charAt(d)); 129 | result.push(charset.charAt(e)); 130 | result.push(charset.charAt(f)); 131 | result.push(charset.charAt(g)); 132 | } 133 | 134 | return result.join(''); 135 | } 136 | 137 | 138 | $opal.defs(self, '$decode64', function(string) { 139 | var self = this; 140 | 141 | return decode(string.replace(/\r?\n/g, '')); 142 | }); 143 | 144 | $opal.defs(self, '$encode64', function(string) { 145 | var self = this; 146 | 147 | return encode(string).replace(/(.{60})/g, "$1\n"); 148 | }); 149 | 150 | $opal.defs(self, '$strict_decode64', function(string) { 151 | var self = this; 152 | 153 | return decode(string); 154 | }); 155 | 156 | $opal.defs(self, '$strict_encode64', function(string) { 157 | var self = this; 158 | 159 | return encode(string); 160 | }); 161 | 162 | $opal.defs(self, '$urlsafe_decode64', function(string) { 163 | var self = this; 164 | 165 | return decode(string.replace(/\-/g, '+').replace(/_/g, '/')); 166 | }); 167 | 168 | $opal.defs(self, '$urlsafe_encode64', function(string) { 169 | var self = this; 170 | 171 | return encode(string).replace(/\+/g, '-').replace(/\//g, '_'); 172 | }); 173 | 174 | })(self) 175 | })(Opal); 176 | 177 | //# sourceMappingURL=/__opal_source_maps__/base64.js.map 178 | ; 179 | -------------------------------------------------------------------------------- /opal/buffer.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $gvars = $opal.gvars; 4 | 5 | $opal.add_stubs(['$[]', '$name_for', '$include', '$attr_reader', '$==', '$for', '$to_n', '$enum_for']); 6 | return (function($base, $super) { 7 | function $Buffer(){}; 8 | var self = $Buffer = $klass($base, $super, 'Buffer', $Buffer); 9 | 10 | var def = self._proto, $scope = self._scope; 11 | 12 | return (function($base, $super) { 13 | function $Array(){}; 14 | var self = $Array = $klass($base, $super, 'Array', $Array); 15 | 16 | var def = self._proto, $scope = self._scope, TMP_1, TMP_2; 17 | 18 | def["native"] = nil; 19 | $opal.defs(self, '$for', function(bits, type) { 20 | var self = this; 21 | if ($gvars.$ == null) $gvars.$ = nil; 22 | 23 | return $gvars.$['$[]']("" + ($scope.Buffer.$name_for(bits, type)) + "Array"); 24 | }); 25 | 26 | self.$include($scope.Enumerable); 27 | 28 | self.$attr_reader("buffer", "type"); 29 | 30 | def.$initialize = TMP_1 = function(buffer, bits, type) { 31 | var self = this, $iter = TMP_1._p, $yield = $iter || nil; 32 | 33 | if (bits == null) { 34 | bits = nil 35 | } 36 | if (type == null) { 37 | type = nil 38 | } 39 | TMP_1._p = null; 40 | if ($scope.Native['$=='](buffer)) { 41 | $opal.find_super_dispatcher(self, 'initialize', TMP_1, null).apply(self, [buffer]) 42 | } else { 43 | 44 | var klass = $scope.Array.$for(bits, type); 45 | 46 | $opal.find_super_dispatcher(self, 'initialize', TMP_1, null).apply(self, [new klass(buffer.$to_n())]) 47 | ; 48 | }; 49 | self.buffer = buffer; 50 | return self.type = type; 51 | }; 52 | 53 | def.$bits = function() { 54 | var self = this; 55 | 56 | return self["native"].BYTES_PER_ELEMENT * 8; 57 | }; 58 | 59 | def['$[]'] = function(index, offset) { 60 | var self = this; 61 | 62 | if (offset == null) { 63 | offset = nil 64 | } 65 | if (offset !== false && offset !== nil) { 66 | return self["native"].subarray(index, offset); 67 | } else { 68 | return self["native"][index]; 69 | }; 70 | }; 71 | 72 | def['$[]='] = function(index, value) { 73 | var self = this; 74 | 75 | return self["native"][index] = value; 76 | }; 77 | 78 | def.$bytesize = function() { 79 | var self = this; 80 | 81 | return self["native"].byteLength; 82 | }; 83 | 84 | def.$each = TMP_2 = function() { 85 | var $a, self = this, $iter = TMP_2._p, $yield = $iter || nil; 86 | 87 | TMP_2._p = null; 88 | if (($yield !== nil)) { 89 | } else { 90 | return self.$enum_for("each") 91 | }; 92 | 93 | for (var i = 0, length = self["native"].length; i < length; i++) { 94 | ((($a = $opal.$yield1($yield, self["native"][i])) === $breaker) ? $breaker.$v : $a) 95 | } 96 | ; 97 | return self; 98 | }; 99 | 100 | def.$length = function() { 101 | var self = this; 102 | 103 | return self["native"].length; 104 | }; 105 | 106 | def['$merge!'] = function(other, offset) { 107 | var self = this; 108 | 109 | return self["native"].set(other.$to_n(), offset); 110 | }; 111 | 112 | return $opal.defn(self, '$size', def.$length); 113 | })(self, $scope.Native) 114 | })(self, $scope.Native) 115 | })(Opal); 116 | 117 | //# sourceMappingURL=/__opal_source_maps__/buffer/array.js.map 118 | ; 119 | /* Generated by Opal 0.6.0 */ 120 | (function($opal) { 121 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $gvars = $opal.gvars; 122 | 123 | $opal.add_stubs(['$include', '$!', '$nil?', '$[]', '$attr_reader', '$native?', '$to_n', '$name_for']); 124 | return (function($base, $super) { 125 | function $Buffer(){}; 126 | var self = $Buffer = $klass($base, $super, 'Buffer', $Buffer); 127 | 128 | var def = self._proto, $scope = self._scope; 129 | 130 | return (function($base, $super) { 131 | function $View(){}; 132 | var self = $View = $klass($base, $super, 'View', $View); 133 | 134 | var def = self._proto, $scope = self._scope, TMP_1; 135 | 136 | def["native"] = nil; 137 | self.$include($scope.Native); 138 | 139 | $opal.defs(self, '$supported?', function() { 140 | var self = this; 141 | if ($gvars.$ == null) $gvars.$ = nil; 142 | 143 | return $gvars.$['$[]']("DataView")['$nil?']()['$!'](); 144 | }); 145 | 146 | self.$attr_reader("buffer", "offset"); 147 | 148 | def.$initialize = TMP_1 = function(buffer, offset, length) { 149 | var $a, $b, self = this, $iter = TMP_1._p, $yield = $iter || nil; 150 | 151 | if (offset == null) { 152 | offset = nil 153 | } 154 | if (length == null) { 155 | length = nil 156 | } 157 | TMP_1._p = null; 158 | if ((($a = self['$native?'](buffer)) !== nil && (!$a._isBoolean || $a == true))) { 159 | $opal.find_super_dispatcher(self, 'initialize', TMP_1, null).apply(self, [buffer]) 160 | } else if ((($a = (($b = offset !== false && offset !== nil) ? length : $b)) !== nil && (!$a._isBoolean || $a == true))) { 161 | $opal.find_super_dispatcher(self, 'initialize', TMP_1, null).apply(self, [new DataView(buffer.$to_n(), offset.$to_n(), length.$to_n())]) 162 | } else if (offset !== false && offset !== nil) { 163 | $opal.find_super_dispatcher(self, 'initialize', TMP_1, null).apply(self, [new DataView(buffer.$to_n(), offset.$to_n())]) 164 | } else { 165 | $opal.find_super_dispatcher(self, 'initialize', TMP_1, null).apply(self, [new DataView(buffer.$to_n())]) 166 | }; 167 | self.buffer = buffer; 168 | return self.offset = offset; 169 | }; 170 | 171 | def.$length = function() { 172 | var self = this; 173 | 174 | return self["native"].byteLength; 175 | }; 176 | 177 | $opal.defn(self, '$size', def.$length); 178 | 179 | def.$get = function(offset, bits, type, little) { 180 | var self = this; 181 | 182 | if (bits == null) { 183 | bits = 8 184 | } 185 | if (type == null) { 186 | type = "unsigned" 187 | } 188 | if (little == null) { 189 | little = false 190 | } 191 | return self["native"]["get" + $scope.Buffer.$name_for(bits, type)](offset, little); 192 | }; 193 | 194 | $opal.defn(self, '$[]', def.$get); 195 | 196 | def.$set = function(offset, value, bits, type, little) { 197 | var self = this; 198 | 199 | if (bits == null) { 200 | bits = 8 201 | } 202 | if (type == null) { 203 | type = "unsigned" 204 | } 205 | if (little == null) { 206 | little = false 207 | } 208 | return self["native"]["set" + $scope.Buffer.$name_for(bits, type)](offset, value, little); 209 | }; 210 | 211 | $opal.defn(self, '$[]=', def.$set); 212 | 213 | def.$get_int8 = function(offset, little) { 214 | var self = this; 215 | 216 | if (little == null) { 217 | little = false 218 | } 219 | return self["native"].getInt8(offset, little); 220 | }; 221 | 222 | def.$set_int8 = function(offset, value, little) { 223 | var self = this; 224 | 225 | if (little == null) { 226 | little = false 227 | } 228 | return self["native"].setInt8(offset, value, little); 229 | }; 230 | 231 | def.$get_uint8 = function(offset, little) { 232 | var self = this; 233 | 234 | if (little == null) { 235 | little = false 236 | } 237 | return self["native"].getUint8(offset, little); 238 | }; 239 | 240 | def.$set_uint8 = function(offset, value, little) { 241 | var self = this; 242 | 243 | if (little == null) { 244 | little = false 245 | } 246 | return self["native"].setUint8(offset, value, little); 247 | }; 248 | 249 | def.$get_int16 = function(offset, little) { 250 | var self = this; 251 | 252 | if (little == null) { 253 | little = false 254 | } 255 | return self["native"].getInt16(offset, little); 256 | }; 257 | 258 | def.$set_int16 = function(offset, value, little) { 259 | var self = this; 260 | 261 | if (little == null) { 262 | little = false 263 | } 264 | return self["native"].setInt16(offset, value, little); 265 | }; 266 | 267 | def.$get_uint16 = function(offset, little) { 268 | var self = this; 269 | 270 | if (little == null) { 271 | little = false 272 | } 273 | return self["native"].getUint16(offset, little); 274 | }; 275 | 276 | def.$set_uint16 = function(offset, value, little) { 277 | var self = this; 278 | 279 | if (little == null) { 280 | little = false 281 | } 282 | return self["native"].setUint16(offset, value, little); 283 | }; 284 | 285 | def.$get_int32 = function(offset, little) { 286 | var self = this; 287 | 288 | if (little == null) { 289 | little = false 290 | } 291 | return self["native"].getInt32(offset, little); 292 | }; 293 | 294 | def.$set_int32 = function(offset, value, little) { 295 | var self = this; 296 | 297 | if (little == null) { 298 | little = false 299 | } 300 | return self["native"].setInt32(offset, value, little); 301 | }; 302 | 303 | def.$get_uint32 = function(offset, little) { 304 | var self = this; 305 | 306 | if (little == null) { 307 | little = false 308 | } 309 | return self["native"].getUint32(offset, little); 310 | }; 311 | 312 | def.$set_uint32 = function(offset, value, little) { 313 | var self = this; 314 | 315 | if (little == null) { 316 | little = false 317 | } 318 | return self["native"].setUint32(offset, value, little); 319 | }; 320 | 321 | def.$get_float32 = function(offset, little) { 322 | var self = this; 323 | 324 | if (little == null) { 325 | little = false 326 | } 327 | return self["native"].getFloat32(offset, little); 328 | }; 329 | 330 | def.$set_float32 = function(offset, value, little) { 331 | var self = this; 332 | 333 | if (little == null) { 334 | little = false 335 | } 336 | return self["native"].setFloat32(offset, value, little); 337 | }; 338 | 339 | def.$get_float64 = function(offset, little) { 340 | var self = this; 341 | 342 | if (little == null) { 343 | little = false 344 | } 345 | return self["native"].getFloat64(offset, little); 346 | }; 347 | 348 | return (def.$set_float64 = function(offset, value, little) { 349 | var self = this; 350 | 351 | if (little == null) { 352 | little = false 353 | } 354 | return self["native"].setFloat64(offset, value, little); 355 | }, nil); 356 | })(self, null) 357 | })(self, null) 358 | })(Opal); 359 | 360 | //# sourceMappingURL=/__opal_source_maps__/buffer/view.js.map 361 | ; 362 | /* Generated by Opal 0.6.0 */ 363 | (function($opal) { 364 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $gvars = $opal.gvars; 365 | 366 | $opal.add_stubs(['$include', '$!', '$nil?', '$[]', '$===', '$native?', '$new']); 367 | ; 368 | ; 369 | return (function($base, $super) { 370 | function $Buffer(){}; 371 | var self = $Buffer = $klass($base, $super, 'Buffer', $Buffer); 372 | 373 | var def = self._proto, $scope = self._scope, TMP_1; 374 | 375 | def["native"] = nil; 376 | self.$include($scope.Native); 377 | 378 | $opal.defs(self, '$supported?', function() { 379 | var self = this; 380 | if ($gvars.$ == null) $gvars.$ = nil; 381 | 382 | return $gvars.$['$[]']("ArrayBuffer")['$nil?']()['$!'](); 383 | }); 384 | 385 | $opal.defs(self, '$name_for', function(bits, type) { 386 | var self = this, $case = nil; 387 | 388 | return "" + ((function() {$case = type;if ("unsigned"['$===']($case)) {return "Uint"}else if ("signed"['$===']($case)) {return "Int"}else if ("float"['$===']($case)) {return "Float"}else { return nil }})()) + (bits); 389 | }); 390 | 391 | def.$initialize = TMP_1 = function(size, bits) { 392 | var $a, self = this, $iter = TMP_1._p, $yield = $iter || nil; 393 | 394 | if (bits == null) { 395 | bits = 8 396 | } 397 | TMP_1._p = null; 398 | if ((($a = self['$native?'](size)) !== nil && (!$a._isBoolean || $a == true))) { 399 | return $opal.find_super_dispatcher(self, 'initialize', TMP_1, null).apply(self, [size]) 400 | } else { 401 | return $opal.find_super_dispatcher(self, 'initialize', TMP_1, null).apply(self, [new ArrayBuffer(size * (bits / 8))]) 402 | }; 403 | }; 404 | 405 | def.$length = function() { 406 | var self = this; 407 | 408 | return self["native"].byteLength; 409 | }; 410 | 411 | $opal.defn(self, '$size', def.$length); 412 | 413 | def.$to_a = function(bits, type) { 414 | var self = this; 415 | 416 | if (bits == null) { 417 | bits = 8 418 | } 419 | if (type == null) { 420 | type = "unsigned" 421 | } 422 | return $scope.Array.$new(self, bits, type); 423 | }; 424 | 425 | return (def.$view = function(offset, length) { 426 | var self = this; 427 | 428 | if (offset == null) { 429 | offset = nil 430 | } 431 | if (length == null) { 432 | length = nil 433 | } 434 | return $scope.View.$new(self, offset, length); 435 | }, nil); 436 | })(self, null); 437 | })(Opal); 438 | 439 | //# sourceMappingURL=/__opal_source_maps__/buffer.js.map 440 | ; 441 | -------------------------------------------------------------------------------- /opal/date.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass; 4 | 5 | $opal.add_stubs(['$allocate', '$wrap', '$clone', '$raise']); 6 | return (function($base, $super) { 7 | function $Date(){}; 8 | var self = $Date = $klass($base, $super, 'Date', $Date); 9 | 10 | var def = self._proto, $scope = self._scope; 11 | 12 | def.date = nil; 13 | (function(self) { 14 | var $scope = self._scope, def = self._proto; 15 | 16 | self._proto.$civil = self._proto.$new; 17 | self._proto.$wrap = function(native$) { 18 | var self = this, instance = nil; 19 | 20 | instance = self.$allocate(); 21 | instance.date = native$; 22 | return instance; 23 | }; 24 | self._proto.$parse = function(string) { 25 | var self = this, match = nil; 26 | 27 | match = /^(\d*)-(\d*)-(\d*)/.exec(string); 28 | return self.$wrap(new Date(parseInt(match[1]), parseInt(match[2]) - 1, parseInt(match[3]))); 29 | }; 30 | return (self._proto.$today = function() { 31 | var self = this; 32 | 33 | return self.$wrap(new Date()); 34 | }, nil); 35 | })(self.$singleton_class()); 36 | 37 | def.$initialize = function(year, month, day) { 38 | var self = this; 39 | 40 | return self.date = new Date(year, month - 1, day); 41 | }; 42 | 43 | def['$-'] = function(date) { 44 | var self = this; 45 | 46 | 47 | if (date._isNumber) { 48 | var result = self.$clone(); 49 | result.date.setDate(self.date.getDate() - date); 50 | return result; 51 | } 52 | else if (date.date) { 53 | return Math.round((self.date - date.date) / (1000 * 60 * 60 * 24)); 54 | } 55 | else { 56 | self.$raise($scope.TypeError); 57 | } 58 | ; 59 | }; 60 | 61 | def['$+'] = function(date) { 62 | var self = this; 63 | 64 | 65 | if (date._isNumber) { 66 | var result = self.$clone(); 67 | result.date.setDate(self.date.getDate() + date); 68 | return result; 69 | } 70 | else { 71 | self.$raise($scope.TypeError); 72 | } 73 | ; 74 | }; 75 | 76 | def['$<'] = function(other) { 77 | var self = this; 78 | 79 | 80 | var a = self.date, b = other.date; 81 | a.setHours(0, 0, 0, 0); 82 | b.setHours(0, 0, 0, 0); 83 | return a < b; 84 | ; 85 | }; 86 | 87 | def['$<='] = function(other) { 88 | var self = this; 89 | 90 | 91 | var a = self.date, b = other.date; 92 | a.setHours(0, 0, 0, 0); 93 | b.setHours(0, 0, 0, 0); 94 | return a <= b; 95 | ; 96 | }; 97 | 98 | def['$>'] = function(other) { 99 | var self = this; 100 | 101 | 102 | var a = self.date, b = other.date; 103 | a.setHours(0, 0, 0, 0); 104 | b.setHours(0, 0, 0, 0); 105 | return a > b; 106 | ; 107 | }; 108 | 109 | def['$>='] = function(other) { 110 | var self = this; 111 | 112 | 113 | var a = self.date, b = other.date; 114 | a.setHours(0, 0, 0, 0); 115 | b.setHours(0, 0, 0, 0); 116 | return a >= b; 117 | ; 118 | }; 119 | 120 | def['$=='] = function(other) { 121 | var self = this; 122 | 123 | 124 | var a = self.date, b = other.date; 125 | return (a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()); 126 | ; 127 | }; 128 | 129 | $opal.defn(self, '$eql?', def['$==']); 130 | 131 | def.$clone = function() { 132 | var self = this; 133 | 134 | return $scope.Date.$wrap(new Date(self.date.getTime())); 135 | }; 136 | 137 | def.$day = function() { 138 | var self = this; 139 | 140 | return self.date.getDate(); 141 | }; 142 | 143 | def.$month = function() { 144 | var self = this; 145 | 146 | return self.date.getMonth() + 1; 147 | }; 148 | 149 | def.$next = function() { 150 | var self = this, res = nil; 151 | 152 | res = self.$clone(); 153 | res.date.setDate(self.date.getDate() + 1); 154 | return res; 155 | }; 156 | 157 | def.$next_month = function() { 158 | var self = this; 159 | 160 | 161 | var result = self.$clone(), date = result.date, cur = date.getDate(); 162 | date.setDate(1); 163 | date.setMonth(date.getMonth() + 1); 164 | date.setDate(Math.min(cur, days_in_month(date.getFullYear(), date.getMonth()))); 165 | return result; 166 | ; 167 | }; 168 | 169 | def.$prev = function() { 170 | var self = this, res = nil; 171 | 172 | res = self.$clone(); 173 | res.date.setDate(self.date.getDate() - 1); 174 | return res; 175 | }; 176 | 177 | def.$prev_month = function() { 178 | var self = this; 179 | 180 | 181 | var result = self.$clone(), date = result.date, cur = date.getDate(); 182 | date.setDate(1); 183 | date.setMonth(date.getMonth() - 1); 184 | date.setDate(Math.min(cur, days_in_month(date.getFullYear(), date.getMonth()))); 185 | return result; 186 | ; 187 | }; 188 | 189 | def.$strftime = function(format) { 190 | var self = this; 191 | 192 | if (format == null) { 193 | format = "" 194 | } 195 | return self.date.$strftime(format); 196 | }; 197 | 198 | def.$to_s = function() { 199 | var self = this; 200 | 201 | 202 | var d = self.date, year = d.getFullYear(), month = d.getMonth() + 1, day = d.getDate(); 203 | if (month < 10) { month = '0' + month; } 204 | if (day < 10) { day = '0' + day; } 205 | return year + '-' + month + '-' + day; 206 | ; 207 | }; 208 | 209 | def.$wday = function() { 210 | var self = this; 211 | 212 | return self.date.getDay(); 213 | }; 214 | 215 | def.$year = function() { 216 | var self = this; 217 | 218 | return self.date.getFullYear(); 219 | }; 220 | 221 | 222 | function days_in_month(year, month) { 223 | var leap = ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0); 224 | return [31, (leap ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] 225 | } 226 | 227 | })(self, null) 228 | })(Opal); 229 | 230 | //# sourceMappingURL=/__opal_source_maps__/date.js.map 231 | ; 232 | -------------------------------------------------------------------------------- /opal/delegate.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass; 4 | 5 | $opal.add_stubs(['$__setobj__', '$__getobj__', '$respond_to?', '$__send__', '$to_proc']); 6 | (function($base, $super) { 7 | function $Delegator(){}; 8 | var self = $Delegator = $klass($base, $super, 'Delegator', $Delegator); 9 | 10 | var def = self._proto, $scope = self._scope, TMP_1; 11 | 12 | def.$initialize = function(obj) { 13 | var self = this; 14 | 15 | return self.$__setobj__(obj); 16 | }; 17 | 18 | return (def.$method_missing = TMP_1 = function(m, args) { 19 | var $a, $b, self = this, $iter = TMP_1._p, block = $iter || nil, target = nil; 20 | 21 | args = $slice.call(arguments, 1); 22 | TMP_1._p = null; 23 | target = self.$__getobj__(); 24 | if ((($a = target['$respond_to?'](m)) !== nil && (!$a._isBoolean || $a == true))) { 25 | return ($a = ($b = target).$__send__, $a._p = block.$to_proc(), $a).apply($b, [m].concat(args)) 26 | } else { 27 | return $opal.find_super_dispatcher(self, 'method_missing', TMP_1, null).apply(self, [m].concat(args).concat(block.$to_proc())) 28 | }; 29 | }, nil); 30 | })(self, $scope.BasicObject); 31 | (function($base, $super) { 32 | function $SimpleDelegator(){}; 33 | var self = $SimpleDelegator = $klass($base, $super, 'SimpleDelegator', $SimpleDelegator); 34 | 35 | var def = self._proto, $scope = self._scope; 36 | 37 | def.delegate_sd_obj = nil; 38 | def.$__getobj__ = function() { 39 | var self = this; 40 | 41 | return self.delegate_sd_obj; 42 | }; 43 | 44 | return (def.$__setobj__ = function(obj) { 45 | var self = this; 46 | 47 | return self.delegate_sd_obj = obj; 48 | }, nil); 49 | })(self, $scope.Delegator); 50 | return ($opal.Object._proto.$DelegateClass = function(superklass) { 51 | var self = this; 52 | 53 | return $scope.SimpleDelegator; 54 | }, nil); 55 | })(Opal); 56 | 57 | //# sourceMappingURL=/__opal_source_maps__/delegate.js.map 58 | ; 59 | -------------------------------------------------------------------------------- /opal/dir.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass; 4 | 5 | $opal.add_stubs([]); 6 | return (function($base, $super) { 7 | function $Dir(){}; 8 | var self = $Dir = $klass($base, $super, 'Dir', $Dir); 9 | 10 | var def = self._proto, $scope = self._scope; 11 | 12 | return ($opal.defs(self, '$getwd', function() { 13 | var self = this; 14 | 15 | return "."; 16 | }), nil) 17 | })(self, null) 18 | })(Opal); 19 | 20 | //# sourceMappingURL=/__opal_source_maps__/dir.js.map 21 | ; 22 | -------------------------------------------------------------------------------- /opal/enumerator.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice; 4 | 5 | $opal.add_stubs([]); 6 | return nil 7 | })(Opal); 8 | 9 | //# sourceMappingURL=/__opal_source_maps__/enumerator.js.map 10 | ; 11 | -------------------------------------------------------------------------------- /opal/erb.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $hash2 = $opal.hash2; 4 | 5 | $opal.add_stubs(['$[]', '$[]=', '$keys', '$attr_reader', '$instance_exec', '$to_proc', '$new', '$<<', '$join']); 6 | return (function($base, $super) { 7 | function $Template(){}; 8 | var self = $Template = $klass($base, $super, 'Template', $Template); 9 | 10 | var def = self._proto, $scope = self._scope, TMP_1; 11 | 12 | def.name = def.body = nil; 13 | self._cache = $hash2([], {}); 14 | 15 | $opal.defs(self, '$[]', function(name) { 16 | var self = this; 17 | if (self._cache == null) self._cache = nil; 18 | 19 | return self._cache['$[]'](name); 20 | }); 21 | 22 | $opal.defs(self, '$[]=', function(name, instance) { 23 | var self = this; 24 | if (self._cache == null) self._cache = nil; 25 | 26 | return self._cache['$[]='](name, instance); 27 | }); 28 | 29 | $opal.defs(self, '$paths', function() { 30 | var self = this; 31 | if (self._cache == null) self._cache = nil; 32 | 33 | return self._cache.$keys(); 34 | }); 35 | 36 | self.$attr_reader("body"); 37 | 38 | def.$initialize = TMP_1 = function(name) { 39 | var $a, self = this, $iter = TMP_1._p, body = $iter || nil; 40 | 41 | TMP_1._p = null; 42 | $a = [name, body], self.name = $a[0], self.body = $a[1]; 43 | return $scope.Template['$[]='](name, self); 44 | }; 45 | 46 | def.$inspect = function() { 47 | var self = this; 48 | 49 | return "#"; 50 | }; 51 | 52 | def.$render = function(ctx) { 53 | var $a, $b, self = this; 54 | 55 | if (ctx == null) { 56 | ctx = self 57 | } 58 | return ($a = ($b = ctx).$instance_exec, $a._p = self.body.$to_proc(), $a).call($b, $scope.OutputBuffer.$new()); 59 | }; 60 | 61 | return (function($base, $super) { 62 | function $OutputBuffer(){}; 63 | var self = $OutputBuffer = $klass($base, $super, 'OutputBuffer', $OutputBuffer); 64 | 65 | var def = self._proto, $scope = self._scope; 66 | 67 | def.buffer = nil; 68 | def.$initialize = function() { 69 | var self = this; 70 | 71 | return self.buffer = []; 72 | }; 73 | 74 | def.$append = function(str) { 75 | var self = this; 76 | 77 | return self.buffer['$<<'](str); 78 | }; 79 | 80 | $opal.defn(self, '$append=', def.$append); 81 | 82 | return (def.$join = function() { 83 | var self = this; 84 | 85 | return self.buffer.$join(); 86 | }, nil); 87 | })(self, null); 88 | })(self, null) 89 | })(Opal); 90 | 91 | //# sourceMappingURL=/__opal_source_maps__/template.js.map 92 | ; 93 | /* Generated by Opal 0.6.0 */ 94 | (function($opal) { 95 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $module = $opal.module; 96 | 97 | $opal.add_stubs(['$module_function']); 98 | ; 99 | return (function($base, $super) { 100 | function $ERB(){}; 101 | var self = $ERB = $klass($base, $super, 'ERB', $ERB); 102 | 103 | var def = self._proto, $scope = self._scope; 104 | 105 | return (function($base) { 106 | var self = $module($base, 'Util'); 107 | 108 | var def = self._proto, $scope = self._scope; 109 | 110 | var escapes = { '&': '&', '<': '<', '>': '>', '"': '"', "'": '''}; 111 | 112 | var escape_regexp = /[&<>"']/g; 113 | 114 | def.$html_escape = function(str) { 115 | var self = this; 116 | 117 | return ("" + str).replace(escape_regexp, function (m) { return escapes[m] }); 118 | }; 119 | 120 | $opal.defn(self, '$h', def.$html_escape); 121 | 122 | self.$module_function("h"); 123 | 124 | self.$module_function("html_escape"); 125 | ;$opal.donate(self, ["$html_escape", "$h"]); 126 | })(self) 127 | })(self, null); 128 | })(Opal); 129 | 130 | //# sourceMappingURL=/__opal_source_maps__/erb.js.map 131 | ; 132 | -------------------------------------------------------------------------------- /opal/file.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass; 4 | 5 | $opal.add_stubs([]); 6 | return (function($base, $super) { 7 | function $File(){}; 8 | var self = $File = $klass($base, $super, 'File', $File); 9 | 10 | var def = self._proto, $scope = self._scope; 11 | 12 | $opal.cdecl($scope, 'SEPARATOR', "/"); 13 | 14 | return ($opal.defs(self, '$expand_path', function(path) { 15 | var self = this; 16 | 17 | return path; 18 | }), nil); 19 | })(self, null) 20 | })(Opal); 21 | 22 | //# sourceMappingURL=/__opal_source_maps__/file.js.map 23 | ; 24 | -------------------------------------------------------------------------------- /opal/forwardable.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module; 4 | 5 | $opal.add_stubs(['$each', '$respond_to?', '$def_instance_delegator', '$include?', '$start_with?', '$to_s', '$define_method', '$__send__', '$to_proc', '$instance_variable_get', '$def_single_delegator', '$define_singleton_method']); 6 | (function($base) { 7 | var self = $module($base, 'Forwardable'); 8 | 9 | var def = self._proto, $scope = self._scope; 10 | 11 | def.$instance_delegate = function(hash) { 12 | var $a, $b, TMP_1, self = this; 13 | 14 | return ($a = ($b = hash).$each, $a._p = (TMP_1 = function(methods, accessor){var self = TMP_1._s || this, $a, $b, TMP_2; 15 | if (methods == null) methods = nil;if (accessor == null) accessor = nil; 16 | if ((($a = methods['$respond_to?']("each")) !== nil && (!$a._isBoolean || $a == true))) { 17 | } else { 18 | methods = [methods] 19 | }; 20 | return ($a = ($b = methods).$each, $a._p = (TMP_2 = function(method){var self = TMP_2._s || this; 21 | if (method == null) method = nil; 22 | return self.$def_instance_delegator(accessor, method)}, TMP_2._s = self, TMP_2), $a).call($b);}, TMP_1._s = self, TMP_1), $a).call($b); 23 | }; 24 | 25 | def.$def_instance_delegators = function(accessor, methods) { 26 | var $a, $b, TMP_3, self = this; 27 | 28 | methods = $slice.call(arguments, 1); 29 | return ($a = ($b = methods).$each, $a._p = (TMP_3 = function(method){var self = TMP_3._s || this, $a; 30 | if (method == null) method = nil; 31 | if ((($a = ["__send__", "__id__"]['$include?'](method)) !== nil && (!$a._isBoolean || $a == true))) { 32 | return nil;}; 33 | return self.$def_instance_delegator(accessor, method);}, TMP_3._s = self, TMP_3), $a).call($b); 34 | }; 35 | 36 | def.$def_instance_delegator = function(accessor, method, ali) { 37 | var $a, $b, TMP_4, $c, TMP_5, self = this; 38 | 39 | if (ali == null) { 40 | ali = method 41 | } 42 | if ((($a = accessor.$to_s()['$start_with?']("@")) !== nil && (!$a._isBoolean || $a == true))) { 43 | return ($a = ($b = self).$define_method, $a._p = (TMP_4 = function(args){var self = TMP_4._s || this, block, $a, $b; 44 | args = $slice.call(arguments, 0); 45 | block = TMP_4._p || nil, TMP_4._p = null; 46 | return ($a = ($b = self.$instance_variable_get(accessor)).$__send__, $a._p = block.$to_proc(), $a).apply($b, [method].concat(args))}, TMP_4._s = self, TMP_4), $a).call($b, ali) 47 | } else { 48 | return ($a = ($c = self).$define_method, $a._p = (TMP_5 = function(args){var self = TMP_5._s || this, block, $a, $b; 49 | args = $slice.call(arguments, 0); 50 | block = TMP_5._p || nil, TMP_5._p = null; 51 | return ($a = ($b = self.$__send__(accessor)).$__send__, $a._p = block.$to_proc(), $a).apply($b, [method].concat(args))}, TMP_5._s = self, TMP_5), $a).call($c, ali) 52 | }; 53 | }; 54 | 55 | $opal.defn(self, '$delegate', def.$instance_delegate); 56 | 57 | $opal.defn(self, '$def_delegators', def.$def_instance_delegators); 58 | 59 | $opal.defn(self, '$def_delegator', def.$def_instance_delegator); 60 | ;$opal.donate(self, ["$instance_delegate", "$def_instance_delegators", "$def_instance_delegator", "$delegate", "$def_delegators", "$def_delegator"]); 61 | })(self); 62 | return (function($base) { 63 | var self = $module($base, 'SingleForwardable'); 64 | 65 | var def = self._proto, $scope = self._scope; 66 | 67 | def.$single_delegate = function(hash) { 68 | var $a, $b, TMP_6, self = this; 69 | 70 | return ($a = ($b = hash).$each, $a._p = (TMP_6 = function(methods, accessor){var self = TMP_6._s || this, $a, $b, TMP_7; 71 | if (methods == null) methods = nil;if (accessor == null) accessor = nil; 72 | if ((($a = methods['$respond_to?']("each")) !== nil && (!$a._isBoolean || $a == true))) { 73 | } else { 74 | methods = [methods] 75 | }; 76 | return ($a = ($b = methods).$each, $a._p = (TMP_7 = function(method){var self = TMP_7._s || this; 77 | if (method == null) method = nil; 78 | return self.$def_single_delegator(accessor, method)}, TMP_7._s = self, TMP_7), $a).call($b);}, TMP_6._s = self, TMP_6), $a).call($b); 79 | }; 80 | 81 | def.$def_single_delegators = function(accessor, methods) { 82 | var $a, $b, TMP_8, self = this; 83 | 84 | methods = $slice.call(arguments, 1); 85 | return ($a = ($b = methods).$each, $a._p = (TMP_8 = function(method){var self = TMP_8._s || this, $a; 86 | if (method == null) method = nil; 87 | if ((($a = ["__send__", "__id__"]['$include?'](method)) !== nil && (!$a._isBoolean || $a == true))) { 88 | return nil;}; 89 | return self.$def_single_delegator(accessor, method);}, TMP_8._s = self, TMP_8), $a).call($b); 90 | }; 91 | 92 | def.$def_single_delegator = function(accessor, method, ali) { 93 | var $a, $b, TMP_9, $c, TMP_10, self = this; 94 | 95 | if (ali == null) { 96 | ali = method 97 | } 98 | if ((($a = accessor.$to_s()['$start_with?']("@")) !== nil && (!$a._isBoolean || $a == true))) { 99 | return ($a = ($b = self).$define_singleton_method, $a._p = (TMP_9 = function(args){var self = TMP_9._s || this, block, $a, $b; 100 | args = $slice.call(arguments, 0); 101 | block = TMP_9._p || nil, TMP_9._p = null; 102 | return ($a = ($b = self.$instance_variable_get(accessor)).$__send__, $a._p = block.$to_proc(), $a).apply($b, [method].concat(args))}, TMP_9._s = self, TMP_9), $a).call($b, ali) 103 | } else { 104 | return ($a = ($c = self).$define_singleton_method, $a._p = (TMP_10 = function(args){var self = TMP_10._s || this, block, $a, $b; 105 | args = $slice.call(arguments, 0); 106 | block = TMP_10._p || nil, TMP_10._p = null; 107 | return ($a = ($b = self.$__send__(accessor)).$__send__, $a._p = block.$to_proc(), $a).apply($b, [method].concat(args))}, TMP_10._s = self, TMP_10), $a).call($c, ali) 108 | }; 109 | }; 110 | 111 | $opal.defn(self, '$delegate', def.$single_delegate); 112 | 113 | $opal.defn(self, '$def_delegators', def.$def_single_delegators); 114 | 115 | $opal.defn(self, '$def_delegator', def.$def_single_delegator); 116 | ;$opal.donate(self, ["$single_delegate", "$def_single_delegators", "$def_single_delegator", "$delegate", "$def_delegators", "$def_delegator"]); 117 | })(self); 118 | })(Opal); 119 | 120 | //# sourceMappingURL=/__opal_source_maps__/forwardable.js.map 121 | ; 122 | -------------------------------------------------------------------------------- /opal/json.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module, $hash2 = $opal.hash2, $klass = $opal.klass; 4 | 5 | $opal.add_stubs(['$new', '$push', '$[]=', '$[]', '$create_id', '$json_create', '$attr_accessor', '$create_id=', '$===', '$parse', '$generate', '$from_object', '$to_json', '$responds_to?', '$to_io', '$write', '$to_s', '$strftime']); 6 | (function($base) { 7 | var self = $module($base, 'JSON'); 8 | 9 | var def = self._proto, $scope = self._scope; 10 | 11 | 12 | var $parse = JSON.parse, 13 | $hasOwn = Opal.hasOwnProperty; 14 | 15 | function to_opal(value, options) { 16 | switch (typeof value) { 17 | case 'string': 18 | return value; 19 | 20 | case 'number': 21 | return value; 22 | 23 | case 'boolean': 24 | return !!value; 25 | 26 | case 'null': 27 | return nil; 28 | 29 | case 'object': 30 | if (!value) return nil; 31 | 32 | if (value._isArray) { 33 | var arr = (options.array_class).$new(); 34 | 35 | for (var i = 0, ii = value.length; i < ii; i++) { 36 | (arr).$push(to_opal(value[i], options)); 37 | } 38 | 39 | return arr; 40 | } 41 | else { 42 | var hash = (options.object_class).$new(); 43 | 44 | for (var k in value) { 45 | if ($hasOwn.call(value, k)) { 46 | (hash)['$[]='](k, to_opal(value[k], options)); 47 | } 48 | } 49 | 50 | var klass; 51 | if ((klass = (hash)['$[]']($scope.JSON.$create_id())) != nil) { 52 | klass = Opal.cget(klass); 53 | return (klass).$json_create(hash); 54 | } 55 | else { 56 | return hash; 57 | } 58 | } 59 | } 60 | }; 61 | 62 | 63 | (function(self) { 64 | var $scope = self._scope, def = self._proto; 65 | 66 | return self.$attr_accessor("create_id") 67 | })(self.$singleton_class()); 68 | 69 | self['$create_id=']("json_class"); 70 | 71 | $opal.defs(self, '$[]', function(value, options) { 72 | var $a, self = this; 73 | 74 | if (options == null) { 75 | options = $hash2([], {}) 76 | } 77 | if ((($a = $scope.String['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) { 78 | return self.$parse(value, options) 79 | } else { 80 | return self.$generate(value, options) 81 | }; 82 | }); 83 | 84 | $opal.defs(self, '$parse', function(source, options) { 85 | var self = this; 86 | 87 | if (options == null) { 88 | options = $hash2([], {}) 89 | } 90 | return self.$from_object($parse(source), options); 91 | }); 92 | 93 | $opal.defs(self, '$parse!', function(source, options) { 94 | var self = this; 95 | 96 | if (options == null) { 97 | options = $hash2([], {}) 98 | } 99 | return self.$parse(source, options); 100 | }); 101 | 102 | $opal.defs(self, '$from_object', function(js_object, options) { 103 | var $a, $b, $c, self = this; 104 | 105 | if (options == null) { 106 | options = $hash2([], {}) 107 | } 108 | ($a = "object_class", $b = options, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, $scope.Hash))); 109 | ($a = "array_class", $b = options, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, $scope.Array))); 110 | return to_opal(js_object, options.map); 111 | }); 112 | 113 | $opal.defs(self, '$generate', function(obj, options) { 114 | var self = this; 115 | 116 | if (options == null) { 117 | options = $hash2([], {}) 118 | } 119 | return obj.$to_json(options); 120 | }); 121 | 122 | $opal.defs(self, '$dump', function(obj, io, limit) { 123 | var $a, self = this, string = nil; 124 | 125 | if (io == null) { 126 | io = nil 127 | } 128 | if (limit == null) { 129 | limit = nil 130 | } 131 | string = self.$generate(obj); 132 | if (io !== false && io !== nil) { 133 | if ((($a = io['$responds_to?']("to_io")) !== nil && (!$a._isBoolean || $a == true))) { 134 | io = io.$to_io()}; 135 | io.$write(string); 136 | return io; 137 | } else { 138 | return string 139 | }; 140 | }); 141 | 142 | })(self); 143 | (function($base, $super) { 144 | function $Object(){}; 145 | var self = $Object = $klass($base, $super, 'Object', $Object); 146 | 147 | var def = self._proto, $scope = self._scope; 148 | 149 | return ($opal.defn(self, '$to_json', function() { 150 | var self = this; 151 | 152 | return self.$to_s().$to_json(); 153 | }), nil) 154 | })(self, null); 155 | (function($base, $super) { 156 | function $Array(){}; 157 | var self = $Array = $klass($base, $super, 'Array', $Array); 158 | 159 | var def = self._proto, $scope = self._scope; 160 | 161 | return (def.$to_json = function() { 162 | var self = this; 163 | 164 | 165 | var result = []; 166 | 167 | for (var i = 0, length = self.length; i < length; i++) { 168 | result.push((self[i]).$to_json()); 169 | } 170 | 171 | return '[' + result.join(', ') + ']'; 172 | 173 | }, nil) 174 | })(self, null); 175 | (function($base, $super) { 176 | function $Boolean(){}; 177 | var self = $Boolean = $klass($base, $super, 'Boolean', $Boolean); 178 | 179 | var def = self._proto, $scope = self._scope; 180 | 181 | return (def.$to_json = function() { 182 | var self = this; 183 | 184 | return (self == true) ? 'true' : 'false'; 185 | }, nil) 186 | })(self, null); 187 | (function($base, $super) { 188 | function $Hash(){}; 189 | var self = $Hash = $klass($base, $super, 'Hash', $Hash); 190 | 191 | var def = self._proto, $scope = self._scope; 192 | 193 | return (def.$to_json = function() { 194 | var self = this; 195 | 196 | 197 | var inspect = [], keys = self.keys, map = self.map; 198 | 199 | for (var i = 0, length = keys.length; i < length; i++) { 200 | var key = keys[i]; 201 | inspect.push((key).$to_s().$to_json() + ':' + (map[key]).$to_json()); 202 | } 203 | 204 | return '{' + inspect.join(', ') + '}'; 205 | ; 206 | }, nil) 207 | })(self, null); 208 | (function($base, $super) { 209 | function $NilClass(){}; 210 | var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass); 211 | 212 | var def = self._proto, $scope = self._scope; 213 | 214 | return (def.$to_json = function() { 215 | var self = this; 216 | 217 | return "null"; 218 | }, nil) 219 | })(self, null); 220 | (function($base, $super) { 221 | function $Numeric(){}; 222 | var self = $Numeric = $klass($base, $super, 'Numeric', $Numeric); 223 | 224 | var def = self._proto, $scope = self._scope; 225 | 226 | return (def.$to_json = function() { 227 | var self = this; 228 | 229 | return self.toString(); 230 | }, nil) 231 | })(self, null); 232 | (function($base, $super) { 233 | function $String(){}; 234 | var self = $String = $klass($base, $super, 'String', $String); 235 | 236 | var def = self._proto, $scope = self._scope; 237 | 238 | return $opal.defn(self, '$to_json', def.$inspect) 239 | })(self, null); 240 | (function($base, $super) { 241 | function $Time(){}; 242 | var self = $Time = $klass($base, $super, 'Time', $Time); 243 | 244 | var def = self._proto, $scope = self._scope; 245 | 246 | return (def.$to_json = function() { 247 | var self = this; 248 | 249 | return self.$strftime("%FT%T%z").$to_json(); 250 | }, nil) 251 | })(self, null); 252 | return (function($base, $super) { 253 | function $Date(){}; 254 | var self = $Date = $klass($base, $super, 'Date', $Date); 255 | 256 | var def = self._proto, $scope = self._scope; 257 | 258 | def.$to_json = function() { 259 | var self = this; 260 | 261 | return self.$to_s().$to_json(); 262 | }; 263 | 264 | return (def.$as_json = function() { 265 | var self = this; 266 | 267 | return self.$to_s(); 268 | }, nil); 269 | })(self, null); 270 | })(Opal); 271 | 272 | //# sourceMappingURL=/__opal_source_maps__/json.js.map 273 | ; 274 | -------------------------------------------------------------------------------- /opal/math.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module, $klass = $opal.klass; 4 | 5 | $opal.add_stubs(['$===', '$raise', '$type_error', '$to_f', '$log', '$include']); 6 | return (function($base) { 7 | var self = $module($base, 'Math'); 8 | 9 | var def = self._proto, $scope = self._scope, $a; 10 | 11 | (function($base, $super) { 12 | function $DomainError(){}; 13 | var self = $DomainError = $klass($base, $super, 'DomainError', $DomainError); 14 | 15 | var def = self._proto, $scope = self._scope, TMP_1; 16 | 17 | return ($opal.defs(self, '$new', TMP_1 = function(method) { 18 | var self = this, $iter = TMP_1._p, $yield = $iter || nil; 19 | 20 | TMP_1._p = null; 21 | return $opal.find_super_dispatcher(self, 'new', TMP_1, null, $DomainError).apply(self, ["Numerical argument is out of domain - \"" + (method) + "\""]); 22 | }), nil) 23 | })(self, $scope.StandardError); 24 | 25 | $opal.cdecl($scope, 'E', Math.E); 26 | 27 | $opal.cdecl($scope, 'PI', Math.PI); 28 | 29 | def.$acos = function(x) { 30 | var self = this; 31 | 32 | 33 | if (!$scope.Numeric['$==='](x)) { 34 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 35 | } 36 | 37 | x = x.$to_f(); 38 | 39 | if (x < -1 || x > 1) { 40 | self.$raise($scope.DomainError, "acos"); 41 | } 42 | 43 | return Math.acos(x); 44 | ; 45 | }; 46 | 47 | if ((($a = (typeof(Math.acosh) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 48 | } else { 49 | 50 | Math.acosh = function(x) { 51 | return Math.log(x + Math.sqrt(x * x - 1)); 52 | } 53 | 54 | }; 55 | 56 | def.$acosh = function(x) { 57 | var self = this; 58 | 59 | 60 | if (!$scope.Numeric['$==='](x)) { 61 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 62 | } 63 | 64 | return Math.acosh(x.$to_f()); 65 | ; 66 | }; 67 | 68 | def.$asin = function(x) { 69 | var self = this; 70 | 71 | 72 | if (!$scope.Numeric['$==='](x)) { 73 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 74 | } 75 | 76 | x = x.$to_f(); 77 | 78 | if (x < -1 || x > 1) { 79 | self.$raise($scope.DomainError, "asin"); 80 | } 81 | 82 | return Math.asin(x); 83 | ; 84 | }; 85 | 86 | if ((($a = (typeof(Math.asinh) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 87 | } else { 88 | 89 | Math.asinh = function(x) { 90 | return Math.log(x + Math.sqrt(x * x + 1)) 91 | } 92 | ; 93 | }; 94 | 95 | def.$asinh = function(x) { 96 | var self = this; 97 | 98 | 99 | if (!$scope.Numeric['$==='](x)) { 100 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 101 | } 102 | 103 | return Math.asinh(x.$to_f()); 104 | ; 105 | }; 106 | 107 | def.$atan = function(x) { 108 | var self = this; 109 | 110 | 111 | if (!$scope.Numeric['$==='](x)) { 112 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 113 | } 114 | 115 | return Math.atan(x.$to_f()); 116 | ; 117 | }; 118 | 119 | def.$atan2 = function(x, y) { 120 | var self = this; 121 | 122 | 123 | if (!$scope.Numeric['$==='](x)) { 124 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 125 | } 126 | 127 | if (!$scope.Numeric['$==='](y)) { 128 | self.$raise($scope.Opal.$type_error(y, $scope.Float)); 129 | } 130 | 131 | return Math.atan2(x.$to_f(), y.$to_f()); 132 | ; 133 | }; 134 | 135 | if ((($a = (typeof(Math.atanh) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 136 | } else { 137 | 138 | Math.atanh = function(x) { 139 | return 0.5 * Math.log((1 + x) / (1 - x)); 140 | } 141 | 142 | }; 143 | 144 | def.$atanh = function(x) { 145 | var self = this; 146 | 147 | 148 | if (!$scope.Numeric['$==='](x)) { 149 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 150 | } 151 | 152 | x = x.$to_f(); 153 | 154 | if (x < -1 || x > 1) { 155 | self.$raise($scope.DomainError, "atanh"); 156 | } 157 | 158 | return Math.atanh(x); 159 | ; 160 | }; 161 | 162 | def.$cbrt = function(x) { 163 | var self = this; 164 | 165 | return Math.cbrt(x); 166 | }; 167 | 168 | def.$cos = function(x) { 169 | var self = this; 170 | 171 | 172 | if (!$scope.Numeric['$==='](x)) { 173 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 174 | } 175 | 176 | return Math.cos(x.$to_f()); 177 | ; 178 | }; 179 | 180 | if ((($a = (typeof(Math.cosh) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 181 | } else { 182 | 183 | Math.cosh = function(x) { 184 | return (Math.exp(x) + Math.exp(-x)) / 2; 185 | } 186 | 187 | }; 188 | 189 | def.$cosh = function(x) { 190 | var self = this; 191 | 192 | 193 | if (!$scope.Numeric['$==='](x)) { 194 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 195 | } 196 | 197 | return Math.cosh(x.$to_f()); 198 | ; 199 | }; 200 | 201 | def.$erf = function(x) { 202 | var self = this; 203 | 204 | return self.$raise($scope.NotImplementedError); 205 | }; 206 | 207 | def.$erfc = function(x) { 208 | var self = this; 209 | 210 | return self.$raise($scope.NotImplementedError); 211 | }; 212 | 213 | def.$exp = function(x) { 214 | var self = this; 215 | 216 | 217 | if (!$scope.Numeric['$==='](x)) { 218 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 219 | } 220 | 221 | return Math.exp(x.$to_f()); 222 | ; 223 | }; 224 | 225 | def.$frexp = function(x) { 226 | var self = this; 227 | 228 | return self.$raise($scope.NotImplementedError); 229 | }; 230 | 231 | def.$gamma = function(x) { 232 | var self = this; 233 | 234 | return self.$raise($scope.NotImplementedError); 235 | }; 236 | 237 | if ((($a = (typeof(Math.hypot) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 238 | } else { 239 | 240 | Math.hypot = function(x, y) { 241 | return Math.sqrt(x * x + y * y) 242 | } 243 | ; 244 | }; 245 | 246 | def.$hypot = function(x, y) { 247 | var self = this; 248 | 249 | 250 | if (!$scope.Numeric['$==='](x)) { 251 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 252 | } 253 | 254 | if (!$scope.Numeric['$==='](y)) { 255 | self.$raise($scope.Opal.$type_error(y, $scope.Float)); 256 | } 257 | 258 | return Math.hypot(x.$to_f(), y.$to_f()); 259 | ; 260 | }; 261 | 262 | def.$ldexp = function(flt, int$) { 263 | var self = this; 264 | 265 | return self.$raise($scope.NotImplementedError); 266 | }; 267 | 268 | def.$lgamma = function(x) { 269 | var self = this; 270 | 271 | return self.$raise($scope.NotImplementedError); 272 | }; 273 | 274 | def.$log = function(num, base, method) { 275 | var $a, self = this; 276 | 277 | if (base == null) { 278 | base = $scope.E 279 | } 280 | if (method == null) { 281 | method = nil 282 | } 283 | 284 | if (!$scope.Numeric['$==='](num)) { 285 | self.$raise($scope.Opal.$type_error(num, $scope.Float)); 286 | } 287 | 288 | if (!$scope.Numeric['$==='](base)) { 289 | self.$raise($scope.Opal.$type_error(base, $scope.Float)); 290 | } 291 | 292 | num = num.$to_f(); 293 | base = base.$to_f(); 294 | 295 | if (num < 0) { 296 | self.$raise($scope.DomainError, ((($a = method) !== false && $a !== nil) ? $a : "log")); 297 | } 298 | 299 | num = Math.log(num); 300 | 301 | if (base != Math.E) { 302 | num /= Math.log(base); 303 | } 304 | 305 | return num 306 | ; 307 | }; 308 | 309 | if ((($a = (typeof(Math.log10) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 310 | def.$log10 = function(num) { 311 | var self = this; 312 | 313 | 314 | if (!$scope.Numeric['$==='](num)) { 315 | self.$raise($scope.Opal.$type_error(num, $scope.Float)); 316 | } 317 | 318 | num = num.$to_f(); 319 | 320 | if (num < 0) { 321 | self.$raise($scope.DomainError, "log2"); 322 | } 323 | 324 | return Math.log10(num); 325 | ; 326 | } 327 | } else { 328 | def.$log10 = function(num) { 329 | var self = this; 330 | 331 | return self.$log(num, 10, "log10"); 332 | } 333 | }; 334 | 335 | if ((($a = (typeof(Math.log2) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 336 | def.$log2 = function(num) { 337 | var self = this; 338 | 339 | 340 | if (!$scope.Numeric['$==='](num)) { 341 | self.$raise($scope.Opal.$type_error(num, $scope.Float)); 342 | } 343 | 344 | num = num.$to_f(); 345 | 346 | if (num < 0) { 347 | self.$raise($scope.DomainError, "log2"); 348 | } 349 | 350 | return Math.log2(num); 351 | ; 352 | } 353 | } else { 354 | def.$log2 = function(num) { 355 | var self = this; 356 | 357 | return self.$log(num, 2, "log2"); 358 | } 359 | }; 360 | 361 | def.$sin = function(x) { 362 | var self = this; 363 | 364 | 365 | if (!$scope.Numeric['$==='](x)) { 366 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 367 | } 368 | 369 | return Math.sin(x.$to_f()); 370 | ; 371 | }; 372 | 373 | if ((($a = (typeof(Math.sinh) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 374 | } else { 375 | 376 | Math.sinh = function(x) { 377 | return (Math.exp(x) - Math.exp(-x)) / 2; 378 | } 379 | 380 | }; 381 | 382 | def.$sinh = function(x) { 383 | var self = this; 384 | 385 | 386 | if (!$scope.Numeric['$==='](x)) { 387 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 388 | } 389 | 390 | return Math.sinh(x.$to_f()); 391 | ; 392 | }; 393 | 394 | def.$sqrt = function(x) { 395 | var self = this; 396 | 397 | 398 | if (!$scope.Numeric['$==='](x)) { 399 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 400 | } 401 | 402 | x = x.$to_f(); 403 | 404 | if (x < 0) { 405 | self.$raise($scope.DomainError, "log2"); 406 | } 407 | 408 | return Math.sqrt(x); 409 | ; 410 | }; 411 | 412 | def.$tan = function(x) { 413 | var self = this; 414 | 415 | 416 | if (!$scope.Numeric['$==='](x)) { 417 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 418 | } 419 | 420 | return Math.tan(x.$to_f()); 421 | ; 422 | }; 423 | 424 | if ((($a = (typeof(Math.tanh) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 425 | } else { 426 | 427 | Math.tanh = function(x) { 428 | if (x == Infinity) { 429 | return 1; 430 | } 431 | else if (x == -Infinity) { 432 | return -1; 433 | } 434 | else { 435 | return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x)); 436 | } 437 | } 438 | 439 | }; 440 | 441 | def.$tanh = function(x) { 442 | var self = this; 443 | 444 | 445 | if (!$scope.Numeric['$==='](x)) { 446 | self.$raise($scope.Opal.$type_error(x, $scope.Float)); 447 | } 448 | 449 | return Math.tanh(x.$to_f()); 450 | ; 451 | }; 452 | 453 | (function(self) { 454 | var $scope = self._scope, def = self._proto; 455 | 456 | return self.$include($scope.Math) 457 | })(self.$singleton_class()); 458 | ;$opal.donate(self, ["$acos", "$acosh", "$asin", "$asinh", "$atan", "$atan2", "$atanh", "$cbrt", "$cos", "$cosh", "$erf", "$erfc", "$exp", "$frexp", "$gamma", "$hypot", "$ldexp", "$lgamma", "$log", "$log10", "$log10", "$log2", "$log2", "$sin", "$sinh", "$sqrt", "$tan", "$tanh"]); 459 | })(self) 460 | })(Opal); 461 | 462 | //# sourceMappingURL=/__opal_source_maps__/math.js.map 463 | ; 464 | -------------------------------------------------------------------------------- /opal/native.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module, $range = $opal.range, $hash2 = $opal.hash2, $klass = $opal.klass, $gvars = $opal.gvars; 4 | 5 | $opal.add_stubs(['$try_convert', '$native?', '$respond_to?', '$to_n', '$raise', '$inspect', '$Native', '$end_with?', '$define_method', '$[]', '$convert', '$call', '$to_proc', '$new', '$extend', '$to_a', '$to_ary', '$include', '$method_missing', '$bind', '$instance_method', '$[]=', '$slice', '$-', '$length', '$enum_for', '$===', '$>=', '$<<', '$==', '$each', '$instance_variable_set', '$members', '$each_with_index', '$each_pair', '$name']); 6 | (function($base) { 7 | var self = $module($base, 'Native'); 8 | 9 | var def = self._proto, $scope = self._scope, TMP_1; 10 | 11 | $opal.defs(self, '$is_a?', function(object, klass) { 12 | var self = this; 13 | 14 | 15 | try { 16 | return object instanceof self.$try_convert(klass); 17 | } 18 | catch (e) { 19 | return false; 20 | } 21 | ; 22 | }); 23 | 24 | $opal.defs(self, '$try_convert', function(value) { 25 | var self = this; 26 | 27 | 28 | if (self['$native?'](value)) { 29 | return value; 30 | } 31 | else if (value['$respond_to?']("to_n")) { 32 | return value.$to_n(); 33 | } 34 | else { 35 | return nil; 36 | } 37 | ; 38 | }); 39 | 40 | $opal.defs(self, '$convert', function(value) { 41 | var self = this; 42 | 43 | 44 | if (self['$native?'](value)) { 45 | return value; 46 | } 47 | else if (value['$respond_to?']("to_n")) { 48 | return value.$to_n(); 49 | } 50 | else { 51 | self.$raise($scope.ArgumentError, "" + (value.$inspect()) + " isn't native"); 52 | } 53 | ; 54 | }); 55 | 56 | $opal.defs(self, '$call', TMP_1 = function(obj, key, args) { 57 | var self = this, $iter = TMP_1._p, block = $iter || nil; 58 | 59 | args = $slice.call(arguments, 2); 60 | TMP_1._p = null; 61 | 62 | var prop = obj[key]; 63 | 64 | if (prop instanceof Function) { 65 | var converted = new Array(args.length); 66 | 67 | for (var i = 0, length = args.length; i < length; i++) { 68 | var item = args[i], 69 | conv = self.$try_convert(item); 70 | 71 | converted[i] = conv === nil ? item : conv; 72 | } 73 | 74 | if (block !== nil) { 75 | converted.push(block); 76 | } 77 | 78 | return self.$Native(prop.apply(obj, converted)); 79 | } 80 | else { 81 | return self.$Native(prop); 82 | } 83 | ; 84 | }); 85 | 86 | (function($base) { 87 | var self = $module($base, 'Helpers'); 88 | 89 | var def = self._proto, $scope = self._scope; 90 | 91 | def.$alias_native = function(new$, old, options) { 92 | var $a, $b, TMP_2, $c, TMP_3, $d, TMP_4, self = this, as = nil; 93 | 94 | if (old == null) { 95 | old = new$ 96 | } 97 | if (options == null) { 98 | options = $hash2([], {}) 99 | } 100 | if ((($a = old['$end_with?']("=")) !== nil && (!$a._isBoolean || $a == true))) { 101 | return ($a = ($b = self).$define_method, $a._p = (TMP_2 = function(value){var self = TMP_2._s || this; 102 | if (self["native"] == null) self["native"] = nil; 103 | if (value == null) value = nil; 104 | self["native"][old['$[]']($range(0, -2, false))] = $scope.Native.$convert(value); 105 | return value;}, TMP_2._s = self, TMP_2), $a).call($b, new$) 106 | } else if ((($a = as = options['$[]']("as")) !== nil && (!$a._isBoolean || $a == true))) { 107 | return ($a = ($c = self).$define_method, $a._p = (TMP_3 = function(args){var self = TMP_3._s || this, block, $a, $b, $c; 108 | if (self["native"] == null) self["native"] = nil; 109 | args = $slice.call(arguments, 0); 110 | block = TMP_3._p || nil, TMP_3._p = null; 111 | if ((($a = value = ($b = ($c = $scope.Native).$call, $b._p = block.$to_proc(), $b).apply($c, [self["native"], old].concat(args))) !== nil && (!$a._isBoolean || $a == true))) { 112 | return as.$new(value.$to_n()) 113 | } else { 114 | return nil 115 | }}, TMP_3._s = self, TMP_3), $a).call($c, new$) 116 | } else { 117 | return ($a = ($d = self).$define_method, $a._p = (TMP_4 = function(args){var self = TMP_4._s || this, block, $a, $b; 118 | if (self["native"] == null) self["native"] = nil; 119 | args = $slice.call(arguments, 0); 120 | block = TMP_4._p || nil, TMP_4._p = null; 121 | return ($a = ($b = $scope.Native).$call, $a._p = block.$to_proc(), $a).apply($b, [self["native"], old].concat(args))}, TMP_4._s = self, TMP_4), $a).call($d, new$) 122 | }; 123 | } 124 | ;$opal.donate(self, ["$alias_native"]); 125 | })(self); 126 | 127 | $opal.defs(self, '$included', function(klass) { 128 | var self = this; 129 | 130 | return klass.$extend($scope.Helpers); 131 | }); 132 | 133 | def.$initialize = function(native$) { 134 | var $a, self = this; 135 | 136 | if ((($a = $scope.Kernel['$native?'](native$)) !== nil && (!$a._isBoolean || $a == true))) { 137 | } else { 138 | $scope.Kernel.$raise($scope.ArgumentError, "" + (native$.$inspect()) + " isn't native") 139 | }; 140 | return self["native"] = native$; 141 | }; 142 | 143 | def.$to_n = function() { 144 | var self = this; 145 | if (self["native"] == null) self["native"] = nil; 146 | 147 | return self["native"]; 148 | }; 149 | ;$opal.donate(self, ["$initialize", "$to_n"]); 150 | })(self); 151 | (function($base) { 152 | var self = $module($base, 'Kernel'); 153 | 154 | var def = self._proto, $scope = self._scope, TMP_5; 155 | 156 | def['$native?'] = function(value) { 157 | var self = this; 158 | 159 | return value == null || !value._klass; 160 | }; 161 | 162 | def.$Native = function(obj) { 163 | var $a, self = this; 164 | 165 | if ((($a = obj == null) !== nil && (!$a._isBoolean || $a == true))) { 166 | return nil 167 | } else if ((($a = self['$native?'](obj)) !== nil && (!$a._isBoolean || $a == true))) { 168 | return ($scope.Native)._scope.Object.$new(obj) 169 | } else { 170 | return obj 171 | }; 172 | }; 173 | 174 | def.$Array = TMP_5 = function(object, args) { 175 | var $a, $b, self = this, $iter = TMP_5._p, block = $iter || nil; 176 | 177 | args = $slice.call(arguments, 1); 178 | TMP_5._p = null; 179 | 180 | if (object == null || object === nil) { 181 | return []; 182 | } 183 | else if (self['$native?'](object)) { 184 | return ($a = ($b = ($scope.Native)._scope.Array).$new, $a._p = block.$to_proc(), $a).apply($b, [object].concat(args)).$to_a(); 185 | } 186 | else if (object['$respond_to?']("to_ary")) { 187 | return object.$to_ary(); 188 | } 189 | else if (object['$respond_to?']("to_a")) { 190 | return object.$to_a(); 191 | } 192 | else { 193 | return [object]; 194 | } 195 | ; 196 | }; 197 | ;$opal.donate(self, ["$native?", "$Native", "$Array"]); 198 | })(self); 199 | (function($base, $super) { 200 | function $Object(){}; 201 | var self = $Object = $klass($base, $super, 'Object', $Object); 202 | 203 | var def = self._proto, $scope = self._scope, TMP_6, TMP_7, TMP_8; 204 | 205 | def["native"] = nil; 206 | self.$include($scope.Native); 207 | 208 | $opal.defn(self, '$==', function(other) { 209 | var self = this; 210 | 211 | return self["native"] === $scope.Native.$try_convert(other); 212 | }); 213 | 214 | $opal.defn(self, '$has_key?', function(name) { 215 | var self = this; 216 | 217 | return $opal.hasOwnProperty.call(self["native"], name); 218 | }); 219 | 220 | $opal.defn(self, '$key?', def['$has_key?']); 221 | 222 | $opal.defn(self, '$include?', def['$has_key?']); 223 | 224 | $opal.defn(self, '$member?', def['$has_key?']); 225 | 226 | $opal.defn(self, '$each', TMP_6 = function(args) { 227 | var $a, self = this, $iter = TMP_6._p, $yield = $iter || nil; 228 | 229 | args = $slice.call(arguments, 0); 230 | TMP_6._p = null; 231 | if (($yield !== nil)) { 232 | 233 | for (var key in self["native"]) { 234 | ((($a = $opal.$yieldX($yield, [key, self["native"][key]])) === $breaker) ? $breaker.$v : $a) 235 | } 236 | ; 237 | return self; 238 | } else { 239 | return ($a = self).$method_missing.apply($a, ["each"].concat(args)) 240 | }; 241 | }); 242 | 243 | $opal.defn(self, '$[]', function(key) { 244 | var $a, self = this; 245 | 246 | 247 | var prop = self["native"][key]; 248 | 249 | if (prop instanceof Function) { 250 | return prop; 251 | } 252 | else { 253 | return (($a = $opal.Object._scope.Native) == null ? $opal.cm('Native') : $a).$call(self["native"], key) 254 | } 255 | ; 256 | }); 257 | 258 | $opal.defn(self, '$[]=', function(key, value) { 259 | var $a, self = this, native$ = nil; 260 | 261 | native$ = $scope.Native.$try_convert(value); 262 | if ((($a = native$ === nil) !== nil && (!$a._isBoolean || $a == true))) { 263 | return self["native"][key] = value; 264 | } else { 265 | return self["native"][key] = native$; 266 | }; 267 | }); 268 | 269 | $opal.defn(self, '$merge!', function(other) { 270 | var self = this; 271 | 272 | 273 | var other = $scope.Native.$convert(other); 274 | 275 | for (var prop in other) { 276 | self["native"][prop] = other[prop]; 277 | } 278 | ; 279 | return self; 280 | }); 281 | 282 | $opal.defn(self, '$respond_to?', function(name, include_all) { 283 | var self = this; 284 | 285 | if (include_all == null) { 286 | include_all = false 287 | } 288 | return $scope.Kernel.$instance_method("respond_to?").$bind(self).$call(name, include_all); 289 | }); 290 | 291 | $opal.defn(self, '$respond_to_missing?', function(name) { 292 | var self = this; 293 | 294 | return $opal.hasOwnProperty.call(self["native"], name); 295 | }); 296 | 297 | $opal.defn(self, '$method_missing', TMP_7 = function(mid, args) { 298 | var $a, $b, $c, self = this, $iter = TMP_7._p, block = $iter || nil; 299 | 300 | args = $slice.call(arguments, 1); 301 | TMP_7._p = null; 302 | 303 | if (mid.charAt(mid.length - 1) === '=') { 304 | return self['$[]='](mid.$slice(0, mid.$length()['$-'](1)), args['$[]'](0)); 305 | } 306 | else { 307 | return ($a = ($b = (($c = $opal.Object._scope.Native) == null ? $opal.cm('Native') : $c)).$call, $a._p = block.$to_proc(), $a).apply($b, [self["native"], mid].concat(args)); 308 | } 309 | ; 310 | }); 311 | 312 | $opal.defn(self, '$nil?', function() { 313 | var self = this; 314 | 315 | return false; 316 | }); 317 | 318 | $opal.defn(self, '$is_a?', function(klass) { 319 | var self = this; 320 | 321 | return $opal.is_a(self, klass); 322 | }); 323 | 324 | $opal.defn(self, '$kind_of?', def['$is_a?']); 325 | 326 | $opal.defn(self, '$instance_of?', function(klass) { 327 | var self = this; 328 | 329 | return self._klass === klass; 330 | }); 331 | 332 | $opal.defn(self, '$class', function() { 333 | var self = this; 334 | 335 | return self._klass; 336 | }); 337 | 338 | $opal.defn(self, '$to_a', TMP_8 = function(options) { 339 | var $a, $b, self = this, $iter = TMP_8._p, block = $iter || nil; 340 | 341 | if (options == null) { 342 | options = $hash2([], {}) 343 | } 344 | TMP_8._p = null; 345 | return ($a = ($b = ($scope.Native)._scope.Array).$new, $a._p = block.$to_proc(), $a).call($b, self["native"], options).$to_a(); 346 | }); 347 | 348 | return ($opal.defn(self, '$inspect', function() { 349 | var self = this; 350 | 351 | return "#"; 352 | }), nil); 353 | })($scope.Native, $scope.BasicObject); 354 | (function($base, $super) { 355 | function $Array(){}; 356 | var self = $Array = $klass($base, $super, 'Array', $Array); 357 | 358 | var def = self._proto, $scope = self._scope, TMP_9, TMP_10; 359 | 360 | def.named = def["native"] = def.get = def.block = def.set = def.length = nil; 361 | self.$include($scope.Native); 362 | 363 | self.$include($scope.Enumerable); 364 | 365 | def.$initialize = TMP_9 = function(native$, options) { 366 | var $a, self = this, $iter = TMP_9._p, block = $iter || nil; 367 | 368 | if (options == null) { 369 | options = $hash2([], {}) 370 | } 371 | TMP_9._p = null; 372 | $opal.find_super_dispatcher(self, 'initialize', TMP_9, null).apply(self, [native$]); 373 | self.get = ((($a = options['$[]']("get")) !== false && $a !== nil) ? $a : options['$[]']("access")); 374 | self.named = options['$[]']("named"); 375 | self.set = ((($a = options['$[]']("set")) !== false && $a !== nil) ? $a : options['$[]']("access")); 376 | self.length = ((($a = options['$[]']("length")) !== false && $a !== nil) ? $a : "length"); 377 | self.block = block; 378 | if ((($a = self.$length() == null) !== nil && (!$a._isBoolean || $a == true))) { 379 | return self.$raise($scope.ArgumentError, "no length found on the array-like object") 380 | } else { 381 | return nil 382 | }; 383 | }; 384 | 385 | def.$each = TMP_10 = function() { 386 | var self = this, $iter = TMP_10._p, block = $iter || nil; 387 | 388 | TMP_10._p = null; 389 | if (block !== false && block !== nil) { 390 | } else { 391 | return self.$enum_for("each") 392 | }; 393 | 394 | for (var i = 0, length = self.$length(); i < length; i++) { 395 | var value = $opal.$yield1(block, self['$[]'](i)); 396 | 397 | if (value === $breaker) { 398 | return $breaker.$v; 399 | } 400 | } 401 | ; 402 | return self; 403 | }; 404 | 405 | def['$[]'] = function(index) { 406 | var $a, self = this, result = nil, $case = nil; 407 | 408 | result = (function() {$case = index;if ($scope.String['$===']($case) || $scope.Symbol['$===']($case)) {if ((($a = self.named) !== nil && (!$a._isBoolean || $a == true))) { 409 | return self["native"][self.named](index); 410 | } else { 411 | return self["native"][index]; 412 | }}else if ($scope.Integer['$===']($case)) {if ((($a = self.get) !== nil && (!$a._isBoolean || $a == true))) { 413 | return self["native"][self.get](index); 414 | } else { 415 | return self["native"][index]; 416 | }}else { return nil }})(); 417 | if (result !== false && result !== nil) { 418 | if ((($a = self.block) !== nil && (!$a._isBoolean || $a == true))) { 419 | return self.block.$call(result) 420 | } else { 421 | return self.$Native(result) 422 | } 423 | } else { 424 | return nil 425 | }; 426 | }; 427 | 428 | def['$[]='] = function(index, value) { 429 | var $a, self = this; 430 | 431 | if ((($a = self.set) !== nil && (!$a._isBoolean || $a == true))) { 432 | return self["native"][self.set](index, $scope.Native.$convert(value)); 433 | } else { 434 | return self["native"][index] = $scope.Native.$convert(value); 435 | }; 436 | }; 437 | 438 | def.$last = function(count) { 439 | var $a, self = this, index = nil, result = nil; 440 | 441 | if (count == null) { 442 | count = nil 443 | } 444 | if (count !== false && count !== nil) { 445 | index = self.$length()['$-'](1); 446 | result = []; 447 | while (index['$>='](0)) { 448 | result['$<<'](self['$[]'](index)); 449 | index = index['$-'](1);}; 450 | return result; 451 | } else { 452 | return self['$[]'](self.$length()['$-'](1)) 453 | }; 454 | }; 455 | 456 | def.$length = function() { 457 | var self = this; 458 | 459 | return self["native"][self.length]; 460 | }; 461 | 462 | $opal.defn(self, '$to_ary', def.$to_a); 463 | 464 | return (def.$inspect = function() { 465 | var self = this; 466 | 467 | return self.$to_a().$inspect(); 468 | }, nil); 469 | })($scope.Native, null); 470 | (function($base, $super) { 471 | function $Numeric(){}; 472 | var self = $Numeric = $klass($base, $super, 'Numeric', $Numeric); 473 | 474 | var def = self._proto, $scope = self._scope; 475 | 476 | return (def.$to_n = function() { 477 | var self = this; 478 | 479 | return self.valueOf(); 480 | }, nil) 481 | })(self, null); 482 | (function($base, $super) { 483 | function $Proc(){}; 484 | var self = $Proc = $klass($base, $super, 'Proc', $Proc); 485 | 486 | var def = self._proto, $scope = self._scope; 487 | 488 | return (def.$to_n = function() { 489 | var self = this; 490 | 491 | return self; 492 | }, nil) 493 | })(self, null); 494 | (function($base, $super) { 495 | function $String(){}; 496 | var self = $String = $klass($base, $super, 'String', $String); 497 | 498 | var def = self._proto, $scope = self._scope; 499 | 500 | return (def.$to_n = function() { 501 | var self = this; 502 | 503 | return self.valueOf(); 504 | }, nil) 505 | })(self, null); 506 | (function($base, $super) { 507 | function $Regexp(){}; 508 | var self = $Regexp = $klass($base, $super, 'Regexp', $Regexp); 509 | 510 | var def = self._proto, $scope = self._scope; 511 | 512 | return (def.$to_n = function() { 513 | var self = this; 514 | 515 | return self.valueOf(); 516 | }, nil) 517 | })(self, null); 518 | (function($base, $super) { 519 | function $MatchData(){}; 520 | var self = $MatchData = $klass($base, $super, 'MatchData', $MatchData); 521 | 522 | var def = self._proto, $scope = self._scope; 523 | 524 | def.matches = nil; 525 | return (def.$to_n = function() { 526 | var self = this; 527 | 528 | return self.matches; 529 | }, nil) 530 | })(self, null); 531 | (function($base, $super) { 532 | function $Struct(){}; 533 | var self = $Struct = $klass($base, $super, 'Struct', $Struct); 534 | 535 | var def = self._proto, $scope = self._scope; 536 | 537 | def.$initialize = function(args) { 538 | var $a, $b, TMP_11, $c, TMP_12, self = this, object = nil; 539 | 540 | args = $slice.call(arguments, 0); 541 | if ((($a = (($b = args.$length()['$=='](1)) ? self['$native?'](args['$[]'](0)) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 542 | object = args['$[]'](0); 543 | return ($a = ($b = self.$members()).$each, $a._p = (TMP_11 = function(name){var self = TMP_11._s || this; 544 | if (name == null) name = nil; 545 | return self.$instance_variable_set("@" + (name), self.$Native(object[name]))}, TMP_11._s = self, TMP_11), $a).call($b); 546 | } else { 547 | return ($a = ($c = self.$members()).$each_with_index, $a._p = (TMP_12 = function(name, index){var self = TMP_12._s || this; 548 | if (name == null) name = nil;if (index == null) index = nil; 549 | return self.$instance_variable_set("@" + (name), args['$[]'](index))}, TMP_12._s = self, TMP_12), $a).call($c) 550 | }; 551 | }; 552 | 553 | return (def.$to_n = function() { 554 | var $a, $b, TMP_13, self = this, result = nil; 555 | 556 | result = {}; 557 | ($a = ($b = self).$each_pair, $a._p = (TMP_13 = function(name, value){var self = TMP_13._s || this; 558 | if (name == null) name = nil;if (value == null) value = nil; 559 | return result[name] = value.$to_n();}, TMP_13._s = self, TMP_13), $a).call($b); 560 | return result; 561 | }, nil); 562 | })(self, null); 563 | (function($base, $super) { 564 | function $Array(){}; 565 | var self = $Array = $klass($base, $super, 'Array', $Array); 566 | 567 | var def = self._proto, $scope = self._scope; 568 | 569 | return (def.$to_n = function() { 570 | var self = this; 571 | 572 | 573 | var result = []; 574 | 575 | for (var i = 0, length = self.length; i < length; i++) { 576 | var obj = self[i]; 577 | 578 | if ((obj)['$respond_to?']("to_n")) { 579 | result.push((obj).$to_n()); 580 | } 581 | else { 582 | result.push(obj); 583 | } 584 | } 585 | 586 | return result; 587 | ; 588 | }, nil) 589 | })(self, null); 590 | (function($base, $super) { 591 | function $Boolean(){}; 592 | var self = $Boolean = $klass($base, $super, 'Boolean', $Boolean); 593 | 594 | var def = self._proto, $scope = self._scope; 595 | 596 | return (def.$to_n = function() { 597 | var self = this; 598 | 599 | return self.valueOf(); 600 | }, nil) 601 | })(self, null); 602 | (function($base, $super) { 603 | function $Time(){}; 604 | var self = $Time = $klass($base, $super, 'Time', $Time); 605 | 606 | var def = self._proto, $scope = self._scope; 607 | 608 | return (def.$to_n = function() { 609 | var self = this; 610 | 611 | return self; 612 | }, nil) 613 | })(self, null); 614 | (function($base, $super) { 615 | function $NilClass(){}; 616 | var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass); 617 | 618 | var def = self._proto, $scope = self._scope; 619 | 620 | return (def.$to_n = function() { 621 | var self = this; 622 | 623 | return null; 624 | }, nil) 625 | })(self, null); 626 | (function($base, $super) { 627 | function $Hash(){}; 628 | var self = $Hash = $klass($base, $super, 'Hash', $Hash); 629 | 630 | var def = self._proto, $scope = self._scope, TMP_14; 631 | 632 | def.$initialize = TMP_14 = function(defaults) { 633 | var self = this, $iter = TMP_14._p, block = $iter || nil; 634 | 635 | TMP_14._p = null; 636 | 637 | if (defaults != null) { 638 | if (defaults.constructor === Object) { 639 | var map = self.map, 640 | keys = self.keys; 641 | 642 | for (var key in defaults) { 643 | var value = defaults[key]; 644 | 645 | if (value && value.constructor === Object) { 646 | map[key] = $scope.Hash.$new(value); 647 | } 648 | else { 649 | map[key] = self.$Native(defaults[key]); 650 | } 651 | 652 | keys.push(key); 653 | } 654 | } 655 | else { 656 | self.none = defaults; 657 | } 658 | } 659 | else if (block !== nil) { 660 | self.proc = block; 661 | } 662 | 663 | return self; 664 | 665 | }; 666 | 667 | return (def.$to_n = function() { 668 | var self = this; 669 | 670 | 671 | var result = {}, 672 | keys = self.keys, 673 | map = self.map, 674 | bucket, 675 | value; 676 | 677 | for (var i = 0, length = keys.length; i < length; i++) { 678 | var key = keys[i], 679 | obj = map[key]; 680 | 681 | if ((obj)['$respond_to?']("to_n")) { 682 | result[key] = (obj).$to_n(); 683 | } 684 | else { 685 | result[key] = obj; 686 | } 687 | } 688 | 689 | return result; 690 | ; 691 | }, nil); 692 | })(self, null); 693 | (function($base, $super) { 694 | function $Module(){}; 695 | var self = $Module = $klass($base, $super, 'Module', $Module); 696 | 697 | var def = self._proto, $scope = self._scope; 698 | 699 | return (def.$native_module = function() { 700 | var self = this; 701 | 702 | return Opal.global[self.$name()] = self; 703 | }, nil) 704 | })(self, null); 705 | (function($base, $super) { 706 | function $Class(){}; 707 | var self = $Class = $klass($base, $super, 'Class', $Class); 708 | 709 | var def = self._proto, $scope = self._scope; 710 | 711 | def.$native_alias = function(jsid, mid) { 712 | var self = this; 713 | 714 | return self._proto[jsid] = self._proto['$' + mid]; 715 | }; 716 | 717 | return $opal.defn(self, '$native_class', def.$native_module); 718 | })(self, null); 719 | return $gvars.$ = $gvars.global = self.$Native(Opal.global); 720 | })(Opal); 721 | 722 | //# sourceMappingURL=/__opal_source_maps__/native.js.map 723 | ; 724 | -------------------------------------------------------------------------------- /opal/observer.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module, $hash2 = $opal.hash2; 4 | 5 | $opal.add_stubs(['$respond_to?', '$raise', '$to_s', '$[]=', '$delete', '$clear', '$size', '$each', '$send']); 6 | return (function($base) { 7 | var self = $module($base, 'Observable'); 8 | 9 | var def = self._proto, $scope = self._scope; 10 | 11 | def.$add_observer = function(observer, func) { 12 | var $a, $b, self = this; 13 | if (self.observer_peers == null) self.observer_peers = nil; 14 | 15 | if (func == null) { 16 | func = "update" 17 | } 18 | if ((($a = (($b = self['observer_peers'], $b != null && $b !== nil) ? 'instance-variable' : nil)) !== nil && (!$a._isBoolean || $a == true))) { 19 | } else { 20 | self.observer_peers = $hash2([], {}) 21 | }; 22 | if ((($a = observer['$respond_to?'](func)) !== nil && (!$a._isBoolean || $a == true))) { 23 | } else { 24 | self.$raise($scope.NoMethodError, "observer does not respond to `" + (func.$to_s()) + "'") 25 | }; 26 | return self.observer_peers['$[]='](observer, func); 27 | }; 28 | 29 | def.$delete_observer = function(observer) { 30 | var $a, $b, self = this; 31 | if (self.observer_peers == null) self.observer_peers = nil; 32 | 33 | if ((($a = (($b = self['observer_peers'], $b != null && $b !== nil) ? 'instance-variable' : nil)) !== nil && (!$a._isBoolean || $a == true))) { 34 | return self.observer_peers.$delete(observer) 35 | } else { 36 | return nil 37 | }; 38 | }; 39 | 40 | def.$delete_observers = function() { 41 | var $a, $b, self = this; 42 | if (self.observer_peers == null) self.observer_peers = nil; 43 | 44 | if ((($a = (($b = self['observer_peers'], $b != null && $b !== nil) ? 'instance-variable' : nil)) !== nil && (!$a._isBoolean || $a == true))) { 45 | return self.observer_peers.$clear() 46 | } else { 47 | return nil 48 | }; 49 | }; 50 | 51 | def.$count_observers = function() { 52 | var $a, $b, self = this; 53 | if (self.observer_peers == null) self.observer_peers = nil; 54 | 55 | if ((($a = (($b = self['observer_peers'], $b != null && $b !== nil) ? 'instance-variable' : nil)) !== nil && (!$a._isBoolean || $a == true))) { 56 | return self.observer_peers.$size() 57 | } else { 58 | return 0 59 | }; 60 | }; 61 | 62 | def.$changed = function(state) { 63 | var self = this; 64 | 65 | if (state == null) { 66 | state = true 67 | } 68 | return self.observer_state = state; 69 | }; 70 | 71 | def['$changed?'] = function() { 72 | var $a, $b, $c, self = this; 73 | if (self.observer_state == null) self.observer_state = nil; 74 | 75 | if ((($a = ($b = (($c = self['observer_state'], $c != null && $c !== nil) ? 'instance-variable' : nil), $b !== false && $b !== nil ?self.observer_state : $b)) !== nil && (!$a._isBoolean || $a == true))) { 76 | return true 77 | } else { 78 | return false 79 | }; 80 | }; 81 | 82 | def.$notify_observers = function(arg) { 83 | var $a, $b, $c, TMP_1, self = this; 84 | if (self.observer_state == null) self.observer_state = nil; 85 | if (self.observer_peers == null) self.observer_peers = nil; 86 | 87 | arg = $slice.call(arguments, 0); 88 | if ((($a = ($b = (($c = self['observer_state'], $c != null && $c !== nil) ? 'instance-variable' : nil), $b !== false && $b !== nil ?self.observer_state : $b)) !== nil && (!$a._isBoolean || $a == true))) { 89 | if ((($a = (($b = self['observer_peers'], $b != null && $b !== nil) ? 'instance-variable' : nil)) !== nil && (!$a._isBoolean || $a == true))) { 90 | ($a = ($b = self.observer_peers).$each, $a._p = (TMP_1 = function(k, v){var self = TMP_1._s || this, $a; 91 | if (k == null) k = nil;if (v == null) v = nil; 92 | return ($a = k).$send.apply($a, [v].concat(arg))}, TMP_1._s = self, TMP_1), $a).call($b)}; 93 | return self.observer_state = false; 94 | } else { 95 | return nil 96 | }; 97 | }; 98 | ;$opal.donate(self, ["$add_observer", "$delete_observer", "$delete_observers", "$count_observers", "$changed", "$changed?", "$notify_observers"]); 99 | })(self) 100 | })(Opal); 101 | 102 | //# sourceMappingURL=/__opal_source_maps__/observer.js.map 103 | ; 104 | -------------------------------------------------------------------------------- /opal/opal-version: -------------------------------------------------------------------------------- 1 | 0.6.0 2 | -------------------------------------------------------------------------------- /opal/ostruct.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $hash2 = $opal.hash2, $range = $opal.range; 4 | 5 | $opal.add_stubs(['$each_pair', '$[]=', '$to_sym', '$[]', '$end_with?', '$enum_for', '$is_a?', '$==', '$instance_variable_get', '$===', '$eql?', '$dup', '$to_n', '$hash', '$class', '$join', '$map', '$inspect']); 6 | return (function($base, $super) { 7 | function $OpenStruct(){}; 8 | var self = $OpenStruct = $klass($base, $super, 'OpenStruct', $OpenStruct); 9 | 10 | var def = self._proto, $scope = self._scope, TMP_2; 11 | 12 | def.table = nil; 13 | def.$initialize = function(hash) { 14 | var $a, $b, TMP_1, self = this; 15 | 16 | if (hash == null) { 17 | hash = nil 18 | } 19 | self.table = $hash2([], {}); 20 | if (hash !== false && hash !== nil) { 21 | return ($a = ($b = hash).$each_pair, $a._p = (TMP_1 = function(key, value){var self = TMP_1._s || this; 22 | if (self.table == null) self.table = nil; 23 | if (key == null) key = nil;if (value == null) value = nil; 24 | return self.table['$[]='](key.$to_sym(), value)}, TMP_1._s = self, TMP_1), $a).call($b) 25 | } else { 26 | return nil 27 | }; 28 | }; 29 | 30 | def['$[]'] = function(name) { 31 | var self = this; 32 | 33 | return self.table['$[]'](name.$to_sym()); 34 | }; 35 | 36 | def['$[]='] = function(name, value) { 37 | var self = this; 38 | 39 | return self.table['$[]='](name.$to_sym(), value); 40 | }; 41 | 42 | def.$method_missing = function(name, args) { 43 | var $a, self = this; 44 | 45 | args = $slice.call(arguments, 1); 46 | if ((($a = name['$end_with?']("=")) !== nil && (!$a._isBoolean || $a == true))) { 47 | return self.table['$[]='](name['$[]']($range(0, -2, false)).$to_sym(), args['$[]'](0)) 48 | } else { 49 | return self.table['$[]'](name.$to_sym()) 50 | }; 51 | }; 52 | 53 | def.$each_pair = TMP_2 = function() { 54 | var $a, $b, TMP_3, self = this, $iter = TMP_2._p, $yield = $iter || nil; 55 | 56 | TMP_2._p = null; 57 | if (($yield !== nil)) { 58 | } else { 59 | return self.$enum_for("each_pair") 60 | }; 61 | return ($a = ($b = self.table).$each_pair, $a._p = (TMP_3 = function(pair){var self = TMP_3._s || this, $a; 62 | if (pair == null) pair = nil; 63 | return $a = $opal.$yield1($yield, pair), $a === $breaker ? $a : $a}, TMP_3._s = self, TMP_3), $a).call($b); 64 | }; 65 | 66 | def['$=='] = function(other) { 67 | var $a, self = this; 68 | 69 | if ((($a = other['$is_a?']($scope.OpenStruct)) !== nil && (!$a._isBoolean || $a == true))) { 70 | } else { 71 | return false 72 | }; 73 | return self.table['$=='](other.$instance_variable_get("@table")); 74 | }; 75 | 76 | def['$==='] = function(other) { 77 | var $a, self = this; 78 | 79 | if ((($a = other['$is_a?']($scope.OpenStruct)) !== nil && (!$a._isBoolean || $a == true))) { 80 | } else { 81 | return false 82 | }; 83 | return self.table['$==='](other.$instance_variable_get("@table")); 84 | }; 85 | 86 | def['$eql?'] = function(other) { 87 | var $a, self = this; 88 | 89 | if ((($a = other['$is_a?']($scope.OpenStruct)) !== nil && (!$a._isBoolean || $a == true))) { 90 | } else { 91 | return false 92 | }; 93 | return self.table['$eql?'](other.$instance_variable_get("@table")); 94 | }; 95 | 96 | def.$to_h = function() { 97 | var self = this; 98 | 99 | return self.table.$dup(); 100 | }; 101 | 102 | def.$to_n = function() { 103 | var self = this; 104 | 105 | return self.table.$to_n(); 106 | }; 107 | 108 | def.$hash = function() { 109 | var self = this; 110 | 111 | return self.table.$hash(); 112 | }; 113 | 114 | return (def.$inspect = function() { 115 | var $a, $b, TMP_4, self = this; 116 | 117 | return "#<" + (self.$class()) + ": " + (($a = ($b = self.$each_pair()).$map, $a._p = (TMP_4 = function(name, value){var self = TMP_4._s || this; 118 | if (name == null) name = nil;if (value == null) value = nil; 119 | return "" + (name) + "=" + (self['$[]'](name).$inspect())}, TMP_4._s = self, TMP_4), $a).call($b).$join(" ")) + ">"; 120 | }, nil); 121 | })(self, null) 122 | })(Opal); 123 | 124 | //# sourceMappingURL=/__opal_source_maps__/ostruct.js.map 125 | ; 126 | -------------------------------------------------------------------------------- /opal/pathname.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $module = $opal.module; 4 | 5 | $opal.add_stubs(['$==', '$raise', '$attr_reader', '$path', '$start_with?', '$!', '$absolute?']); 6 | (function($base, $super) { 7 | function $Pathname(){}; 8 | var self = $Pathname = $klass($base, $super, 'Pathname', $Pathname); 9 | 10 | var def = self._proto, $scope = self._scope; 11 | 12 | def.path = nil; 13 | def.$initialize = function(path) { 14 | var self = this; 15 | 16 | if (path['$==']("\x00")) { 17 | self.$raise($scope.ArgumentError)}; 18 | return self.path = path; 19 | }; 20 | 21 | self.$attr_reader("path"); 22 | 23 | def['$=='] = function(other) { 24 | var self = this; 25 | 26 | return other.$path()['$=='](self.path); 27 | }; 28 | 29 | def['$absolute?'] = function() { 30 | var self = this; 31 | 32 | return self.path['$start_with?']("/"); 33 | }; 34 | 35 | def['$relative?'] = function() { 36 | var self = this; 37 | 38 | return self['$absolute?']()['$!'](); 39 | }; 40 | 41 | def.$to_path = function() { 42 | var self = this; 43 | 44 | return self.path; 45 | }; 46 | 47 | $opal.defn(self, '$to_str', def.$to_path); 48 | 49 | return $opal.defn(self, '$to_s', def.$to_path); 50 | })(self, null); 51 | return (function($base) { 52 | var self = $module($base, 'Kernel'); 53 | 54 | var def = self._proto, $scope = self._scope; 55 | 56 | def.$Pathname = function(path) { 57 | var self = this; 58 | 59 | return nil; 60 | } 61 | ;$opal.donate(self, ["$Pathname"]); 62 | })(self); 63 | })(Opal); 64 | 65 | //# sourceMappingURL=/__opal_source_maps__/pathname.js.map 66 | ; 67 | -------------------------------------------------------------------------------- /opal/pp.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module; 4 | 5 | $opal.add_stubs(['$inspect', '$each', '$<=', '$length', '$[]']); 6 | return (function($base) { 7 | var self = $module($base, 'Kernel'); 8 | 9 | var def = self._proto, $scope = self._scope, $a; 10 | 11 | def.$pretty_inspect = function() { 12 | var self = this; 13 | 14 | return self.$inspect(); 15 | }; 16 | 17 | if ((($a = (typeof console === "undefined" || typeof console.log === "undefined")) !== nil && (!$a._isBoolean || $a == true))) { 18 | $opal.defn(self, '$pp', def.$p) 19 | } else { 20 | def.$pp = function(args) { 21 | var $a, $b, TMP_1, self = this; 22 | 23 | args = $slice.call(arguments, 0); 24 | ($a = ($b = args).$each, $a._p = (TMP_1 = function(obj){var self = TMP_1._s || this; 25 | if (obj == null) obj = nil; 26 | console.log(obj);}, TMP_1._s = self, TMP_1), $a).call($b); 27 | if (args.$length()['$<='](1)) { 28 | return args['$[]'](0) 29 | } else { 30 | return args 31 | }; 32 | } 33 | }; 34 | ;$opal.donate(self, ["$pretty_inspect", "$pp", "$pp"]); 35 | })(self) 36 | })(Opal); 37 | 38 | //# sourceMappingURL=/__opal_source_maps__/pp.js.map 39 | ; 40 | -------------------------------------------------------------------------------- /opal/promise.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass; 4 | 5 | $opal.add_stubs(['$resolve', '$new', '$reject', '$attr_reader', '$!', '$==', '$<<', '$>>', '$exception?', '$resolved?', '$value', '$rejected?', '$===', '$error', '$realized?', '$raise', '$^', '$call', '$resolve!', '$exception!', '$reject!', '$class', '$object_id', '$+', '$inspect', '$act?', '$prev', '$concat', '$it', '$lambda', '$reverse', '$each', '$wait', '$then', '$to_proc', '$map', '$reduce', '$always', '$try', '$tap', '$all?', '$find']); 6 | return (function($base, $super) { 7 | function $Promise(){}; 8 | var self = $Promise = $klass($base, $super, 'Promise', $Promise); 9 | 10 | var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4; 11 | 12 | def.success = def.exception = def.realized = def.delayed = def.failure = def.error = def.prev = def.next = def.value = nil; 13 | $opal.defs(self, '$value', function(value) { 14 | var self = this; 15 | 16 | return self.$new().$resolve(value); 17 | }); 18 | 19 | $opal.defs(self, '$error', function(value) { 20 | var self = this; 21 | 22 | return self.$new().$reject(value); 23 | }); 24 | 25 | $opal.defs(self, '$when', function(promises) { 26 | var self = this; 27 | 28 | promises = $slice.call(arguments, 0); 29 | return $scope.When.$new(promises); 30 | }); 31 | 32 | self.$attr_reader("value", "error", "prev", "next"); 33 | 34 | def.$initialize = function(success, failure) { 35 | var self = this; 36 | 37 | if (success == null) { 38 | success = nil 39 | } 40 | if (failure == null) { 41 | failure = nil 42 | } 43 | self.success = success; 44 | self.failure = failure; 45 | self.realized = nil; 46 | self.exception = false; 47 | self.value = nil; 48 | self.error = nil; 49 | self.delayed = nil; 50 | self.prev = nil; 51 | return self.next = nil; 52 | }; 53 | 54 | def['$act?'] = function() { 55 | var self = this; 56 | 57 | return self.success['$=='](nil)['$!'](); 58 | }; 59 | 60 | def['$exception?'] = function() { 61 | var self = this; 62 | 63 | return self.exception; 64 | }; 65 | 66 | def['$realized?'] = function() { 67 | var self = this; 68 | 69 | return self.realized['$=='](nil)['$!'](); 70 | }; 71 | 72 | def['$resolved?'] = function() { 73 | var self = this; 74 | 75 | return self.realized['$==']("resolve"); 76 | }; 77 | 78 | def['$rejected?'] = function() { 79 | var self = this; 80 | 81 | return self.realized['$==']("reject"); 82 | }; 83 | 84 | def['$^'] = function(promise) { 85 | var self = this; 86 | 87 | promise['$<<'](self); 88 | self['$>>'](promise); 89 | return promise; 90 | }; 91 | 92 | def['$<<'] = function(promise) { 93 | var self = this; 94 | 95 | self.prev = promise; 96 | return self; 97 | }; 98 | 99 | def['$>>'] = function(promise) { 100 | var $a, $b, $c, $d, self = this; 101 | 102 | self.next = promise; 103 | if ((($a = self['$exception?']()) !== nil && (!$a._isBoolean || $a == true))) { 104 | promise.$reject(self.delayed) 105 | } else if ((($a = self['$resolved?']()) !== nil && (!$a._isBoolean || $a == true))) { 106 | promise.$resolve(((($a = self.delayed) !== false && $a !== nil) ? $a : self.$value())) 107 | } else if ((($a = ($b = self['$rejected?'](), $b !== false && $b !== nil ?(((($c = self.failure['$!']()) !== false && $c !== nil) ? $c : $scope.Promise['$===']((((($d = self.delayed) !== false && $d !== nil) ? $d : self.error))))) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 108 | promise.$reject(((($a = self.delayed) !== false && $a !== nil) ? $a : self.$error()))}; 109 | return self; 110 | }; 111 | 112 | def.$resolve = function(value) { 113 | var $a, self = this, e = nil; 114 | 115 | if ((($a = self['$realized?']()) !== nil && (!$a._isBoolean || $a == true))) { 116 | self.$raise($scope.ArgumentError, "the promise has already been realized")}; 117 | if ((($a = $scope.Promise['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) { 118 | value['$<<'](self.prev); 119 | return value['$^'](self);}; 120 | self.realized = "resolve"; 121 | self.value = value; 122 | try { 123 | if ((($a = self.success) !== nil && (!$a._isBoolean || $a == true))) { 124 | value = self.success.$call(value)}; 125 | self['$resolve!'](value); 126 | } catch ($err) {if ($scope.Exception['$===']($err)) {e = $err; 127 | self['$exception!'](e) 128 | }else { throw $err; } 129 | }; 130 | return self; 131 | }; 132 | 133 | def['$resolve!'] = function(value) { 134 | var $a, self = this; 135 | 136 | if ((($a = self.next) !== nil && (!$a._isBoolean || $a == true))) { 137 | return self.next.$resolve(value) 138 | } else { 139 | return self.delayed = value 140 | }; 141 | }; 142 | 143 | def.$reject = function(value) { 144 | var $a, self = this, e = nil; 145 | 146 | if ((($a = self['$realized?']()) !== nil && (!$a._isBoolean || $a == true))) { 147 | self.$raise($scope.ArgumentError, "the promise has already been realized")}; 148 | if ((($a = $scope.Promise['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) { 149 | value['$<<'](self.prev); 150 | return value['$^'](self);}; 151 | self.realized = "reject"; 152 | self.error = value; 153 | try { 154 | if ((($a = self.failure) !== nil && (!$a._isBoolean || $a == true))) { 155 | value = self.failure.$call(value); 156 | if ((($a = $scope.Promise['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) { 157 | self['$reject!'](value)}; 158 | } else { 159 | self['$reject!'](value) 160 | } 161 | } catch ($err) {if ($scope.Exception['$===']($err)) {e = $err; 162 | self['$exception!'](e) 163 | }else { throw $err; } 164 | }; 165 | return self; 166 | }; 167 | 168 | def['$reject!'] = function(value) { 169 | var $a, self = this; 170 | 171 | if ((($a = self.next) !== nil && (!$a._isBoolean || $a == true))) { 172 | return self.next.$reject(value) 173 | } else { 174 | return self.delayed = value 175 | }; 176 | }; 177 | 178 | def['$exception!'] = function(error) { 179 | var self = this; 180 | 181 | self.exception = true; 182 | return self['$reject!'](error); 183 | }; 184 | 185 | def.$then = TMP_1 = function() { 186 | var self = this, $iter = TMP_1._p, block = $iter || nil; 187 | 188 | TMP_1._p = null; 189 | return self['$^']($scope.Promise.$new(block)); 190 | }; 191 | 192 | $opal.defn(self, '$do', def.$then); 193 | 194 | def.$fail = TMP_2 = function() { 195 | var self = this, $iter = TMP_2._p, block = $iter || nil; 196 | 197 | TMP_2._p = null; 198 | return self['$^']($scope.Promise.$new(nil, block)); 199 | }; 200 | 201 | $opal.defn(self, '$rescue', def.$fail); 202 | 203 | $opal.defn(self, '$catch', def.$fail); 204 | 205 | def.$always = TMP_3 = function() { 206 | var self = this, $iter = TMP_3._p, block = $iter || nil; 207 | 208 | TMP_3._p = null; 209 | return self['$^']($scope.Promise.$new(block, block)); 210 | }; 211 | 212 | $opal.defn(self, '$finally', def.$always); 213 | 214 | $opal.defn(self, '$ensure', def.$always); 215 | 216 | def.$trace = TMP_4 = function() { 217 | var self = this, $iter = TMP_4._p, block = $iter || nil; 218 | 219 | TMP_4._p = null; 220 | return self['$^']($scope.Trace.$new(block)); 221 | }; 222 | 223 | def.$inspect = function() { 224 | var $a, self = this, result = nil; 225 | 226 | result = "#<" + (self.$class()) + "(" + (self.$object_id()) + ")"; 227 | if ((($a = self.next) !== nil && (!$a._isBoolean || $a == true))) { 228 | result = result['$+'](" >> " + (self.next.$inspect()))}; 229 | if ((($a = self['$realized?']()) !== nil && (!$a._isBoolean || $a == true))) { 230 | result = result['$+'](": " + ((((($a = self.value) !== false && $a !== nil) ? $a : self.error)).$inspect()) + ">") 231 | } else { 232 | result = result['$+'](">") 233 | }; 234 | return result; 235 | }; 236 | 237 | (function($base, $super) { 238 | function $Trace(){}; 239 | var self = $Trace = $klass($base, $super, 'Trace', $Trace); 240 | 241 | var def = self._proto, $scope = self._scope, TMP_6; 242 | 243 | $opal.defs(self, '$it', function(promise) { 244 | var $a, self = this, current = nil, prev = nil; 245 | 246 | if ((($a = promise['$realized?']()) !== nil && (!$a._isBoolean || $a == true))) { 247 | } else { 248 | self.$raise($scope.ArgumentError, "the promise hasn't been realized") 249 | }; 250 | current = (function() {if ((($a = promise['$act?']()) !== nil && (!$a._isBoolean || $a == true))) { 251 | return [promise.$value()] 252 | } else { 253 | return [] 254 | }; return nil; })(); 255 | if ((($a = prev = promise.$prev()) !== nil && (!$a._isBoolean || $a == true))) { 256 | return current.$concat(self.$it(prev)) 257 | } else { 258 | return current 259 | }; 260 | }); 261 | 262 | return (def.$initialize = TMP_6 = function(block) { 263 | var $a, $b, TMP_5, self = this, $iter = TMP_6._p, $yield = $iter || nil; 264 | 265 | TMP_6._p = null; 266 | return $opal.find_super_dispatcher(self, 'initialize', TMP_6, null).apply(self, [($a = ($b = self).$lambda, $a._p = (TMP_5 = function(){var self = TMP_5._s || this, $a; 267 | 268 | return ($a = block).$call.apply($a, [].concat($scope.Trace.$it(self).$reverse()))}, TMP_5._s = self, TMP_5), $a).call($b)]); 269 | }, nil); 270 | })(self, self); 271 | 272 | return (function($base, $super) { 273 | function $When(){}; 274 | var self = $When = $klass($base, $super, 'When', $When); 275 | 276 | var def = self._proto, $scope = self._scope, TMP_7, TMP_9, TMP_11, TMP_13, TMP_17; 277 | 278 | def.wait = nil; 279 | def.$initialize = TMP_7 = function(promises) { 280 | var $a, $b, TMP_8, self = this, $iter = TMP_7._p, $yield = $iter || nil; 281 | 282 | if (promises == null) { 283 | promises = [] 284 | } 285 | TMP_7._p = null; 286 | $opal.find_super_dispatcher(self, 'initialize', TMP_7, null).apply(self, []); 287 | self.wait = []; 288 | return ($a = ($b = promises).$each, $a._p = (TMP_8 = function(promise){var self = TMP_8._s || this; 289 | if (promise == null) promise = nil; 290 | return self.$wait(promise)}, TMP_8._s = self, TMP_8), $a).call($b); 291 | }; 292 | 293 | def.$each = TMP_9 = function() { 294 | var $a, $b, TMP_10, self = this, $iter = TMP_9._p, block = $iter || nil; 295 | 296 | TMP_9._p = null; 297 | if (block !== false && block !== nil) { 298 | } else { 299 | self.$raise($scope.ArgumentError, "no block given") 300 | }; 301 | return ($a = ($b = self).$then, $a._p = (TMP_10 = function(values){var self = TMP_10._s || this, $a, $b; 302 | if (values == null) values = nil; 303 | return ($a = ($b = values).$each, $a._p = block.$to_proc(), $a).call($b)}, TMP_10._s = self, TMP_10), $a).call($b); 304 | }; 305 | 306 | def.$collect = TMP_11 = function() { 307 | var $a, $b, TMP_12, self = this, $iter = TMP_11._p, block = $iter || nil; 308 | 309 | TMP_11._p = null; 310 | if (block !== false && block !== nil) { 311 | } else { 312 | self.$raise($scope.ArgumentError, "no block given") 313 | }; 314 | return ($a = ($b = self).$then, $a._p = (TMP_12 = function(values){var self = TMP_12._s || this, $a, $b; 315 | if (values == null) values = nil; 316 | return $scope.When.$new(($a = ($b = values).$map, $a._p = block.$to_proc(), $a).call($b))}, TMP_12._s = self, TMP_12), $a).call($b); 317 | }; 318 | 319 | def.$inject = TMP_13 = function(args) { 320 | var $a, $b, TMP_14, self = this, $iter = TMP_13._p, block = $iter || nil; 321 | 322 | args = $slice.call(arguments, 0); 323 | TMP_13._p = null; 324 | return ($a = ($b = self).$then, $a._p = (TMP_14 = function(values){var self = TMP_14._s || this, $a, $b; 325 | if (values == null) values = nil; 326 | return ($a = ($b = values).$reduce, $a._p = block.$to_proc(), $a).apply($b, [].concat(args))}, TMP_14._s = self, TMP_14), $a).call($b); 327 | }; 328 | 329 | $opal.defn(self, '$map', def.$collect); 330 | 331 | $opal.defn(self, '$reduce', def.$inject); 332 | 333 | def.$wait = function(promise) { 334 | var $a, $b, TMP_15, self = this; 335 | 336 | if ((($a = $scope.Promise['$==='](promise)) !== nil && (!$a._isBoolean || $a == true))) { 337 | } else { 338 | promise = $scope.Promise.$value(promise) 339 | }; 340 | if ((($a = promise['$act?']()) !== nil && (!$a._isBoolean || $a == true))) { 341 | promise = promise.$then()}; 342 | self.wait['$<<'](promise); 343 | ($a = ($b = promise).$always, $a._p = (TMP_15 = function(){var self = TMP_15._s || this, $a; 344 | if (self.next == null) self.next = nil; 345 | 346 | if ((($a = self.next) !== nil && (!$a._isBoolean || $a == true))) { 347 | return self.$try() 348 | } else { 349 | return nil 350 | }}, TMP_15._s = self, TMP_15), $a).call($b); 351 | return self; 352 | }; 353 | 354 | $opal.defn(self, '$and', def.$wait); 355 | 356 | def['$>>'] = TMP_17 = function() {var $zuper = $slice.call(arguments, 0); 357 | var $a, $b, TMP_16, self = this, $iter = TMP_17._p, $yield = $iter || nil; 358 | 359 | TMP_17._p = null; 360 | return ($a = ($b = $opal.find_super_dispatcher(self, '>>', TMP_17, $iter).apply(self, $zuper)).$tap, $a._p = (TMP_16 = function(){var self = TMP_16._s || this; 361 | 362 | return self.$try()}, TMP_16._s = self, TMP_16), $a).call($b); 363 | }; 364 | 365 | return (def.$try = function() { 366 | var $a, $b, $c, $d, self = this, promise = nil; 367 | 368 | if ((($a = ($b = ($c = self.wait)['$all?'], $b._p = "realized?".$to_proc(), $b).call($c)) !== nil && (!$a._isBoolean || $a == true))) { 369 | if ((($a = promise = ($b = ($d = self.wait).$find, $b._p = "rejected?".$to_proc(), $b).call($d)) !== nil && (!$a._isBoolean || $a == true))) { 370 | return self.$reject(promise.$error()) 371 | } else { 372 | return self.$resolve(($a = ($b = self.wait).$map, $a._p = "value".$to_proc(), $a).call($b)) 373 | } 374 | } else { 375 | return nil 376 | }; 377 | }, nil); 378 | })(self, self); 379 | })(self, null) 380 | })(Opal); 381 | 382 | //# sourceMappingURL=/__opal_source_maps__/promise.js.map 383 | ; 384 | -------------------------------------------------------------------------------- /opal/rbconfig.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module, $hash2 = $opal.hash2; 4 | 5 | $opal.add_stubs(['$split', '$[]']); 6 | (function($base) { 7 | var self = $module($base, 'RbConfig'); 8 | 9 | var def = self._proto, $scope = self._scope, versions = nil; 10 | 11 | versions = $scope.RUBY_VERSION.$split("."); 12 | 13 | $opal.cdecl($scope, 'CONFIG', $hash2(["ruby_version", "MAJOR", "MINOR", "TEENY", "RUBY", "RUBY_INSTALL_NAME", "RUBY_SO_NAME", "target_os", "host_os", "PATH_SEPARATOR"], {"ruby_version": $scope.RUBY_VERSION, "MAJOR": versions['$[]'](0), "MINOR": versions['$[]'](1), "TEENY": versions['$[]'](2), "RUBY": $scope.RUBY_ENGINE, "RUBY_INSTALL_NAME": $scope.RUBY_ENGINE, "RUBY_SO_NAME": $scope.RUBY_ENGINE, "target_os": "ECMA-262", "host_os": "ECMA-262", "PATH_SEPARATOR": ":"})); 14 | 15 | })(self); 16 | $opal.cdecl($scope, 'RUBY_NAME', "opal"); 17 | $opal.cdecl($scope, 'RUBY_EXE', "opal"); 18 | return $opal.cdecl($scope, 'RUBY_PATCHLEVEL', "327"); 19 | })(Opal); 20 | 21 | //# sourceMappingURL=/__opal_source_maps__/rbconfig.js.map 22 | ; 23 | -------------------------------------------------------------------------------- /opal/securerandom.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module; 4 | 5 | $opal.add_stubs(['$gsub']); 6 | return (function($base) { 7 | var self = $module($base, 'SecureRandom'); 8 | 9 | var def = self._proto, $scope = self._scope; 10 | 11 | $opal.defs(self, '$uuid', function() { 12 | var $a, $b, TMP_1, self = this; 13 | 14 | return ($a = ($b = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx").$gsub, $a._p = (TMP_1 = function(ch){var self = TMP_1._s || this; 15 | if (ch == null) ch = nil; 16 | 17 | var r = Math.random() * 16 | 0, 18 | v = ch == "x" ? r : (r & 3 | 8); 19 | 20 | return v.toString(16); 21 | }, TMP_1._s = self, TMP_1), $a).call($b, /[xy]/); 22 | }) 23 | 24 | })(self) 25 | })(Opal); 26 | 27 | //# sourceMappingURL=/__opal_source_maps__/securerandom.js.map 28 | ; 29 | -------------------------------------------------------------------------------- /opal/set.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $module = $opal.module; 4 | 5 | $opal.add_stubs(['$include', '$new', '$nil?', '$do_with_enum', '$add', '$[]', '$merge', '$equal?', '$instance_of?', '$class', '$==', '$instance_variable_get', '$is_a?', '$size', '$all?', '$include?', '$[]=', '$enum_for', '$each_key', '$to_proc', '$empty?', '$clear', '$each', '$keys']); 6 | (function($base, $super) { 7 | function $Set(){}; 8 | var self = $Set = $klass($base, $super, 'Set', $Set); 9 | 10 | var def = self._proto, $scope = self._scope, TMP_1, TMP_4, TMP_6; 11 | 12 | def.hash = nil; 13 | self.$include($scope.Enumerable); 14 | 15 | $opal.defs(self, '$[]', function(ary) { 16 | var self = this; 17 | 18 | ary = $slice.call(arguments, 0); 19 | return self.$new(ary); 20 | }); 21 | 22 | def.$initialize = TMP_1 = function(enum$) { 23 | var $a, $b, TMP_2, self = this, $iter = TMP_1._p, block = $iter || nil; 24 | 25 | if (enum$ == null) { 26 | enum$ = nil 27 | } 28 | TMP_1._p = null; 29 | self.hash = $scope.Hash.$new(); 30 | if ((($a = enum$['$nil?']()) !== nil && (!$a._isBoolean || $a == true))) { 31 | return nil}; 32 | if (block !== false && block !== nil) { 33 | return ($a = ($b = self).$do_with_enum, $a._p = (TMP_2 = function(o){var self = TMP_2._s || this; 34 | if (o == null) o = nil; 35 | return self.$add(block['$[]'](o))}, TMP_2._s = self, TMP_2), $a).call($b, enum$) 36 | } else { 37 | return self.$merge(enum$) 38 | }; 39 | }; 40 | 41 | def['$=='] = function(other) { 42 | var $a, $b, TMP_3, self = this; 43 | 44 | if ((($a = self['$equal?'](other)) !== nil && (!$a._isBoolean || $a == true))) { 45 | return true 46 | } else if ((($a = other['$instance_of?'](self.$class())) !== nil && (!$a._isBoolean || $a == true))) { 47 | return self.hash['$=='](other.$instance_variable_get("@hash")) 48 | } else if ((($a = ($b = other['$is_a?']($scope.Set), $b !== false && $b !== nil ?self.$size()['$=='](other.$size()) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 49 | return ($a = ($b = other)['$all?'], $a._p = (TMP_3 = function(o){var self = TMP_3._s || this; 50 | if (self.hash == null) self.hash = nil; 51 | if (o == null) o = nil; 52 | return self.hash['$include?'](o)}, TMP_3._s = self, TMP_3), $a).call($b) 53 | } else { 54 | return false 55 | }; 56 | }; 57 | 58 | def.$add = function(o) { 59 | var self = this; 60 | 61 | self.hash['$[]='](o, true); 62 | return self; 63 | }; 64 | 65 | $opal.defn(self, '$<<', def.$add); 66 | 67 | def['$add?'] = function(o) { 68 | var $a, self = this; 69 | 70 | if ((($a = self['$include?'](o)) !== nil && (!$a._isBoolean || $a == true))) { 71 | return nil 72 | } else { 73 | return self.$add(o) 74 | }; 75 | }; 76 | 77 | def.$each = TMP_4 = function() { 78 | var $a, $b, self = this, $iter = TMP_4._p, block = $iter || nil; 79 | 80 | TMP_4._p = null; 81 | if ((block !== nil)) { 82 | } else { 83 | return self.$enum_for("each") 84 | }; 85 | ($a = ($b = self.hash).$each_key, $a._p = block.$to_proc(), $a).call($b); 86 | return self; 87 | }; 88 | 89 | def['$empty?'] = function() { 90 | var self = this; 91 | 92 | return self.hash['$empty?'](); 93 | }; 94 | 95 | def.$clear = function() { 96 | var self = this; 97 | 98 | self.hash.$clear(); 99 | return self; 100 | }; 101 | 102 | def['$include?'] = function(o) { 103 | var self = this; 104 | 105 | return self.hash['$include?'](o); 106 | }; 107 | 108 | $opal.defn(self, '$member?', def['$include?']); 109 | 110 | def.$merge = function(enum$) { 111 | var $a, $b, TMP_5, self = this; 112 | 113 | ($a = ($b = self).$do_with_enum, $a._p = (TMP_5 = function(o){var self = TMP_5._s || this; 114 | if (o == null) o = nil; 115 | return self.$add(o)}, TMP_5._s = self, TMP_5), $a).call($b, enum$); 116 | return self; 117 | }; 118 | 119 | def.$do_with_enum = TMP_6 = function(enum$) { 120 | var $a, $b, self = this, $iter = TMP_6._p, block = $iter || nil; 121 | 122 | TMP_6._p = null; 123 | return ($a = ($b = enum$).$each, $a._p = block.$to_proc(), $a).call($b); 124 | }; 125 | 126 | def.$size = function() { 127 | var self = this; 128 | 129 | return self.hash.$size(); 130 | }; 131 | 132 | $opal.defn(self, '$length', def.$size); 133 | 134 | return (def.$to_a = function() { 135 | var self = this; 136 | 137 | return self.hash.$keys(); 138 | }, nil); 139 | })(self, null); 140 | return (function($base) { 141 | var self = $module($base, 'Enumerable'); 142 | 143 | var def = self._proto, $scope = self._scope, TMP_7; 144 | 145 | def.$to_set = TMP_7 = function(klass, args) { 146 | var $a, $b, self = this, $iter = TMP_7._p, block = $iter || nil; 147 | 148 | args = $slice.call(arguments, 1); 149 | if (klass == null) { 150 | klass = $scope.Set 151 | } 152 | TMP_7._p = null; 153 | return ($a = ($b = klass).$new, $a._p = block.$to_proc(), $a).apply($b, [self].concat(args)); 154 | } 155 | ;$opal.donate(self, ["$to_set"]); 156 | })(self); 157 | })(Opal); 158 | 159 | //# sourceMappingURL=/__opal_source_maps__/set.js.map 160 | ; 161 | -------------------------------------------------------------------------------- /opal/singleton.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module; 4 | 5 | $opal.add_stubs(['$raise', '$class', '$__init__', '$instance_eval', '$new', '$extend']); 6 | return (function($base) { 7 | var self = $module($base, 'Singleton'); 8 | 9 | var def = self._proto, $scope = self._scope; 10 | 11 | def.$clone = function() { 12 | var self = this; 13 | 14 | return self.$raise($scope.TypeError, "can't clone instance of singleton " + (self.$class())); 15 | }; 16 | 17 | def.$dup = function() { 18 | var self = this; 19 | 20 | return self.$raise($scope.TypeError, "can't dup instance of singleton " + (self.$class())); 21 | }; 22 | 23 | (function($base) { 24 | var self = $module($base, 'SingletonClassMethods'); 25 | 26 | var def = self._proto, $scope = self._scope, TMP_1, TMP_2; 27 | 28 | def.$clone = TMP_1 = function() {var $zuper = $slice.call(arguments, 0); 29 | var self = this, $iter = TMP_1._p, $yield = $iter || nil; 30 | 31 | TMP_1._p = null; 32 | return $scope.Singleton.$__init__($opal.find_super_dispatcher(self, 'clone', TMP_1, $iter).apply(self, $zuper)); 33 | }; 34 | 35 | def.$inherited = TMP_2 = function(sub_klass) {var $zuper = $slice.call(arguments, 0); 36 | var self = this, $iter = TMP_2._p, $yield = $iter || nil; 37 | 38 | TMP_2._p = null; 39 | $opal.find_super_dispatcher(self, 'inherited', TMP_2, $iter).apply(self, $zuper); 40 | return $scope.Singleton.$__init__(sub_klass); 41 | }; 42 | ;$opal.donate(self, ["$clone", "$inherited"]); 43 | })(self); 44 | 45 | (function(self) { 46 | var $scope = self._scope, def = self._proto; 47 | 48 | self._proto.$__init__ = function(klass) { 49 | var $a, $b, TMP_3, self = this; 50 | 51 | ($a = ($b = klass).$instance_eval, $a._p = (TMP_3 = function(){var self = TMP_3._s || this; 52 | 53 | return self.singleton__instance__ = nil}, TMP_3._s = self, TMP_3), $a).call($b); 54 | $opal.defs(klass, '$instance', function() { 55 | var $a, self = this; 56 | if (self.singleton__instance__ == null) self.singleton__instance__ = nil; 57 | 58 | if ((($a = self.singleton__instance__) !== nil && (!$a._isBoolean || $a == true))) { 59 | return self.singleton__instance__}; 60 | return self.singleton__instance__ = self.$new(); 61 | }); 62 | return klass; 63 | }; 64 | return (self._proto.$included = TMP_4 = function(klass) {var $zuper = $slice.call(arguments, 0); 65 | var self = this, $iter = TMP_4._p, $yield = $iter || nil; 66 | 67 | TMP_4._p = null; 68 | $opal.find_super_dispatcher(self, 'included', TMP_4, $iter).apply(self, $zuper); 69 | klass.$extend($scope.SingletonClassMethods); 70 | return $scope.Singleton.$__init__(klass); 71 | }, nil); 72 | })($scope.Singleton.$singleton_class()); 73 | ;$opal.donate(self, ["$clone", "$dup"]); 74 | })(self) 75 | })(Opal); 76 | 77 | //# sourceMappingURL=/__opal_source_maps__/singleton.js.map 78 | ; 79 | -------------------------------------------------------------------------------- /opal/source_map.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module, $hash2 = $opal.hash2, $klass = $opal.klass; 4 | 5 | $opal.add_stubs(['$new', '$push', '$[]=', '$[]', '$create_id', '$json_create', '$attr_accessor', '$create_id=', '$===', '$parse', '$generate', '$from_object', '$to_json', '$responds_to?', '$to_io', '$write', '$to_s', '$strftime']); 6 | (function($base) { 7 | var self = $module($base, 'JSON'); 8 | 9 | var def = self._proto, $scope = self._scope; 10 | 11 | 12 | var $parse = JSON.parse, 13 | $hasOwn = Opal.hasOwnProperty; 14 | 15 | function to_opal(value, options) { 16 | switch (typeof value) { 17 | case 'string': 18 | return value; 19 | 20 | case 'number': 21 | return value; 22 | 23 | case 'boolean': 24 | return !!value; 25 | 26 | case 'null': 27 | return nil; 28 | 29 | case 'object': 30 | if (!value) return nil; 31 | 32 | if (value._isArray) { 33 | var arr = (options.array_class).$new(); 34 | 35 | for (var i = 0, ii = value.length; i < ii; i++) { 36 | (arr).$push(to_opal(value[i], options)); 37 | } 38 | 39 | return arr; 40 | } 41 | else { 42 | var hash = (options.object_class).$new(); 43 | 44 | for (var k in value) { 45 | if ($hasOwn.call(value, k)) { 46 | (hash)['$[]='](k, to_opal(value[k], options)); 47 | } 48 | } 49 | 50 | var klass; 51 | if ((klass = (hash)['$[]']($scope.JSON.$create_id())) != nil) { 52 | klass = Opal.cget(klass); 53 | return (klass).$json_create(hash); 54 | } 55 | else { 56 | return hash; 57 | } 58 | } 59 | } 60 | }; 61 | 62 | 63 | (function(self) { 64 | var $scope = self._scope, def = self._proto; 65 | 66 | return self.$attr_accessor("create_id") 67 | })(self.$singleton_class()); 68 | 69 | self['$create_id=']("json_class"); 70 | 71 | $opal.defs(self, '$[]', function(value, options) { 72 | var $a, self = this; 73 | 74 | if (options == null) { 75 | options = $hash2([], {}) 76 | } 77 | if ((($a = $scope.String['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) { 78 | return self.$parse(value, options) 79 | } else { 80 | return self.$generate(value, options) 81 | }; 82 | }); 83 | 84 | $opal.defs(self, '$parse', function(source, options) { 85 | var self = this; 86 | 87 | if (options == null) { 88 | options = $hash2([], {}) 89 | } 90 | return self.$from_object($parse(source), options); 91 | }); 92 | 93 | $opal.defs(self, '$parse!', function(source, options) { 94 | var self = this; 95 | 96 | if (options == null) { 97 | options = $hash2([], {}) 98 | } 99 | return self.$parse(source, options); 100 | }); 101 | 102 | $opal.defs(self, '$from_object', function(js_object, options) { 103 | var $a, $b, $c, self = this; 104 | 105 | if (options == null) { 106 | options = $hash2([], {}) 107 | } 108 | ($a = "object_class", $b = options, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, $scope.Hash))); 109 | ($a = "array_class", $b = options, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, $scope.Array))); 110 | return to_opal(js_object, options.map); 111 | }); 112 | 113 | $opal.defs(self, '$generate', function(obj, options) { 114 | var self = this; 115 | 116 | if (options == null) { 117 | options = $hash2([], {}) 118 | } 119 | return obj.$to_json(options); 120 | }); 121 | 122 | $opal.defs(self, '$dump', function(obj, io, limit) { 123 | var $a, self = this, string = nil; 124 | 125 | if (io == null) { 126 | io = nil 127 | } 128 | if (limit == null) { 129 | limit = nil 130 | } 131 | string = self.$generate(obj); 132 | if (io !== false && io !== nil) { 133 | if ((($a = io['$responds_to?']("to_io")) !== nil && (!$a._isBoolean || $a == true))) { 134 | io = io.$to_io()}; 135 | io.$write(string); 136 | return io; 137 | } else { 138 | return string 139 | }; 140 | }); 141 | 142 | })(self); 143 | (function($base, $super) { 144 | function $Object(){}; 145 | var self = $Object = $klass($base, $super, 'Object', $Object); 146 | 147 | var def = self._proto, $scope = self._scope; 148 | 149 | return ($opal.defn(self, '$to_json', function() { 150 | var self = this; 151 | 152 | return self.$to_s().$to_json(); 153 | }), nil) 154 | })(self, null); 155 | (function($base, $super) { 156 | function $Array(){}; 157 | var self = $Array = $klass($base, $super, 'Array', $Array); 158 | 159 | var def = self._proto, $scope = self._scope; 160 | 161 | return (def.$to_json = function() { 162 | var self = this; 163 | 164 | 165 | var result = []; 166 | 167 | for (var i = 0, length = self.length; i < length; i++) { 168 | result.push((self[i]).$to_json()); 169 | } 170 | 171 | return '[' + result.join(', ') + ']'; 172 | 173 | }, nil) 174 | })(self, null); 175 | (function($base, $super) { 176 | function $Boolean(){}; 177 | var self = $Boolean = $klass($base, $super, 'Boolean', $Boolean); 178 | 179 | var def = self._proto, $scope = self._scope; 180 | 181 | return (def.$to_json = function() { 182 | var self = this; 183 | 184 | return (self == true) ? 'true' : 'false'; 185 | }, nil) 186 | })(self, null); 187 | (function($base, $super) { 188 | function $Hash(){}; 189 | var self = $Hash = $klass($base, $super, 'Hash', $Hash); 190 | 191 | var def = self._proto, $scope = self._scope; 192 | 193 | return (def.$to_json = function() { 194 | var self = this; 195 | 196 | 197 | var inspect = [], keys = self.keys, map = self.map; 198 | 199 | for (var i = 0, length = keys.length; i < length; i++) { 200 | var key = keys[i]; 201 | inspect.push((key).$to_s().$to_json() + ':' + (map[key]).$to_json()); 202 | } 203 | 204 | return '{' + inspect.join(', ') + '}'; 205 | ; 206 | }, nil) 207 | })(self, null); 208 | (function($base, $super) { 209 | function $NilClass(){}; 210 | var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass); 211 | 212 | var def = self._proto, $scope = self._scope; 213 | 214 | return (def.$to_json = function() { 215 | var self = this; 216 | 217 | return "null"; 218 | }, nil) 219 | })(self, null); 220 | (function($base, $super) { 221 | function $Numeric(){}; 222 | var self = $Numeric = $klass($base, $super, 'Numeric', $Numeric); 223 | 224 | var def = self._proto, $scope = self._scope; 225 | 226 | return (def.$to_json = function() { 227 | var self = this; 228 | 229 | return self.toString(); 230 | }, nil) 231 | })(self, null); 232 | (function($base, $super) { 233 | function $String(){}; 234 | var self = $String = $klass($base, $super, 'String', $String); 235 | 236 | var def = self._proto, $scope = self._scope; 237 | 238 | return $opal.defn(self, '$to_json', def.$inspect) 239 | })(self, null); 240 | (function($base, $super) { 241 | function $Time(){}; 242 | var self = $Time = $klass($base, $super, 'Time', $Time); 243 | 244 | var def = self._proto, $scope = self._scope; 245 | 246 | return (def.$to_json = function() { 247 | var self = this; 248 | 249 | return self.$strftime("%FT%T%z").$to_json(); 250 | }, nil) 251 | })(self, null); 252 | return (function($base, $super) { 253 | function $Date(){}; 254 | var self = $Date = $klass($base, $super, 'Date', $Date); 255 | 256 | var def = self._proto, $scope = self._scope; 257 | 258 | def.$to_json = function() { 259 | var self = this; 260 | 261 | return self.$to_s().$to_json(); 262 | }; 263 | 264 | return (def.$as_json = function() { 265 | var self = this; 266 | 267 | return self.$to_s(); 268 | }, nil); 269 | })(self, null); 270 | })(Opal); 271 | 272 | //# sourceMappingURL=/__opal_source_maps__/json.js.map 273 | ; 274 | /* Generated by Opal 0.6.0 */ 275 | (function($opal) { 276 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $module = $opal.module, $hash = $opal.hash, $range = $opal.range, $hash2 = $opal.hash2; 277 | 278 | $opal.add_stubs(['$<<', '$-', '$split', '$inject', '$update', '$[]', '$to_vlq_signed', '$>', '$&', '$>>', '$|', '$base64_encode', '$join', '$shift', '$raise', '$base64_decode', '$==', '$+', '$from_vlq_signed', '$!', '$decode', '$protected', '$<', '$-@']); 279 | return (function($base, $super) { 280 | function $SourceMap(){}; 281 | var self = $SourceMap = $klass($base, $super, 'SourceMap', $SourceMap); 282 | 283 | var def = self._proto, $scope = self._scope; 284 | 285 | return (function($base) { 286 | var self = $module($base, 'VLQ'); 287 | 288 | var def = self._proto, $scope = self._scope, $a, $b, TMP_1; 289 | 290 | $opal.cdecl($scope, 'VLQ_BASE_SHIFT', 5); 291 | 292 | $opal.cdecl($scope, 'VLQ_BASE', (1)['$<<']($scope.VLQ_BASE_SHIFT)); 293 | 294 | $opal.cdecl($scope, 'VLQ_BASE_MASK', $scope.VLQ_BASE['$-'](1)); 295 | 296 | $opal.cdecl($scope, 'VLQ_CONTINUATION_BIT', $scope.VLQ_BASE); 297 | 298 | $opal.cdecl($scope, 'BASE64_DIGITS', "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".$split("")); 299 | 300 | $opal.cdecl($scope, 'BASE64_VALUES', ($a = ($b = ($range(0, 64, false))).$inject, $a._p = (TMP_1 = function(h, i){var self = TMP_1._s || this; 301 | if (h == null) h = nil;if (i == null) i = nil; 302 | return h.$update($hash($scope.BASE64_DIGITS['$[]'](i), i))}, TMP_1._s = self, TMP_1), $a).call($b, $hash2([], {}))); 303 | 304 | $opal.defs(self, '$encode', function(int$) { 305 | var $a, self = this, vlq = nil, encoded = nil, digit = nil; 306 | 307 | vlq = self.$to_vlq_signed(int$); 308 | encoded = []; 309 | while (vlq['$>'](0)) { 310 | digit = vlq['$&']($scope.VLQ_BASE_MASK); 311 | vlq = vlq['$>>']($scope.VLQ_BASE_SHIFT); 312 | if (vlq['$>'](0)) { 313 | digit = digit['$|']($scope.VLQ_CONTINUATION_BIT)}; 314 | encoded['$<<'](self.$base64_encode(digit));}; 315 | return encoded.$join(); 316 | }); 317 | 318 | $opal.defs(self, '$decode', function(str) { 319 | var $a, $b, self = this, vlq = nil, shift = nil, continue$ = nil, chars = nil, char$ = nil, digit = nil; 320 | 321 | vlq = 0; 322 | shift = 0; 323 | continue$ = true; 324 | chars = str.$split(""); 325 | while (continue$ !== false && continue$ !== nil) { 326 | ((($b = char$ = chars.$shift()) !== false && $b !== nil) ? $b : self.$raise("Expected more digits in base 64 VLQ value.")); 327 | digit = self.$base64_decode(char$); 328 | if ((digit['$&']($scope.VLQ_CONTINUATION_BIT))['$=='](0)) { 329 | continue$ = false}; 330 | digit = digit['$&']($scope.VLQ_BASE_MASK); 331 | vlq = vlq['$+'](digit['$<<'](shift)); 332 | shift = shift['$+']($scope.VLQ_BASE_SHIFT);}; 333 | return [self.$from_vlq_signed(vlq), chars.$join("")]; 334 | }); 335 | 336 | $opal.defs(self, '$decode_array', function(str) { 337 | var $a, $b, self = this, output = nil, int$ = nil; 338 | 339 | output = []; 340 | while ((($b = str['$==']("")['$!']()) !== nil && (!$b._isBoolean || $b == true))) { 341 | $b = $opal.to_ary(self.$decode(str)), int$ = ($b[0] == null ? nil : $b[0]), str = ($b[1] == null ? nil : $b[1]); 342 | output['$<<'](int$);}; 343 | return output; 344 | }); 345 | 346 | self.$protected(); 347 | 348 | $opal.defs(self, '$base64_encode', function(int$) { 349 | var $a, self = this; 350 | 351 | return ((($a = $scope.BASE64_DIGITS['$[]'](int$)) !== false && $a !== nil) ? $a : self.$raise($scope.ArgumentError, "" + (int$) + " is not a valid base64 digit")); 352 | }); 353 | 354 | $opal.defs(self, '$base64_decode', function(char$) { 355 | var $a, self = this; 356 | 357 | return ((($a = $scope.BASE64_VALUES['$[]'](char$)) !== false && $a !== nil) ? $a : self.$raise($scope.ArgumentError, "" + (char$) + " is not a valid base64 digit")); 358 | }); 359 | 360 | $opal.defs(self, '$to_vlq_signed', function(int$) { 361 | var self = this; 362 | 363 | if (int$['$<'](0)) { 364 | return ((int$['$-@']())['$<<'](1))['$+'](1) 365 | } else { 366 | return int$['$<<'](1) 367 | }; 368 | }); 369 | 370 | $opal.defs(self, '$from_vlq_signed', function(vlq) { 371 | var self = this; 372 | 373 | if (vlq['$&'](1)['$=='](1)) { 374 | return (vlq['$>>'](1))['$-@']() 375 | } else { 376 | return vlq['$>>'](1) 377 | }; 378 | }); 379 | 380 | })(self) 381 | })(self, null) 382 | })(Opal); 383 | 384 | //# sourceMappingURL=/__opal_source_maps__/source_map/vlq.js.map 385 | ; 386 | /* Generated by Opal 0.6.0 */ 387 | (function($opal) { 388 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $module = $opal.module, $hash2 = $opal.hash2, $range = $opal.range; 389 | 390 | $opal.add_stubs(['$attr_accessor', '$!', '$[]', '$raise', '$<', '$empty?', '$-', '$keys', '$inspect', '$generated_line', '$generated_line=', '$generated_col', '$generated_col=', '$each', '$==', '$+', '$[]=', '$<<', '$mappings', '$size', '$split', '$serialize_mappings!', '$version', '$file', '$source_root', '$sources', '$names', '$to_json', '$as_json', '$open', '$to_s', '$protected', '$attr_reader', '$source_ids', '$name_ids', '$encode', '$new', '$group_by', '$join', '$map', '$sort_by', '$serialize_mapping', '$max', '$vlq', '$source_id', '$name_id']); 391 | return (function($base, $super) { 392 | function $SourceMap(){}; 393 | var self = $SourceMap = $klass($base, $super, 'SourceMap', $SourceMap); 394 | 395 | var def = self._proto, $scope = self._scope; 396 | 397 | return (function($base) { 398 | var self = $module($base, 'Generator'); 399 | 400 | var def = self._proto, $scope = self._scope; 401 | 402 | self.$attr_accessor("generated_output"); 403 | 404 | def.$add_generated = function(text, opts) { 405 | var $a, $b, $c, $d, TMP_1, self = this, remain = nil, source_line = nil, source_col = nil, generated_output = nil; 406 | 407 | if (opts == null) { 408 | opts = $hash2([], {}) 409 | } 410 | if ((($a = ($b = opts['$[]']("source")['$!'](), $b !== false && $b !== nil ?(((($c = ((($d = opts['$[]']("name")) !== false && $d !== nil) ? $d : opts['$[]']("source_line"))) !== false && $c !== nil) ? $c : opts['$[]']("source_col"))) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 411 | self.$raise("mapping must have :source to have :source_line, :source_col or :name") 412 | } else if ((($a = ($b = opts['$[]']("source_line"), $b !== false && $b !== nil ?opts['$[]']("source_line")['$<'](1) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 413 | self.$raise("files start on line 1 (got :source_line => " + (opts['$[]']("source_line")) + ")") 414 | } else if ((($a = ((remain = opts.$keys()['$-'](["source", "source_line", "source_col", "name", "exact_position"])))['$empty?']()['$!']()) !== nil && (!$a._isBoolean || $a == true))) { 415 | self.$raise("mapping had unexpected keys: " + (remain.$inspect()))}; 416 | source_line = ((($a = opts['$[]']("source_line")) !== false && $a !== nil) ? $a : 1); 417 | source_col = ((($a = opts['$[]']("source_col")) !== false && $a !== nil) ? $a : 0); 418 | ($a = self, ((($b = $a.$generated_line()) !== false && $b !== nil) ? $b : $a['$generated_line='](1))); 419 | ($a = self, ((($b = $a.$generated_col()) !== false && $b !== nil) ? $b : $a['$generated_col='](0))); 420 | ($a = ($b = text.$split(/(\n)/)).$each, $a._p = (TMP_1 = function(line){var self = TMP_1._s || this, $a, mapping = nil; 421 | if (line == null) line = nil; 422 | if (line['$==']("\n")) { 423 | ($a = self, $a['$generated_line=']($a.$generated_line()['$+'](1))); 424 | self['$generated_col='](0); 425 | if ((($a = opts['$[]']("exact_position")) !== nil && (!$a._isBoolean || $a == true))) { 426 | return nil 427 | } else { 428 | source_line = source_line['$+'](1); 429 | return source_col = 0; 430 | }; 431 | } else if ((($a = line['$==']("")['$!']()) !== nil && (!$a._isBoolean || $a == true))) { 432 | mapping = $hash2(["generated_line", "generated_col"], {"generated_line": self.$generated_line(), "generated_col": self.$generated_col()}); 433 | if ((($a = opts['$[]']("source")) !== nil && (!$a._isBoolean || $a == true))) { 434 | mapping['$[]=']("source", opts['$[]']("source")); 435 | mapping['$[]=']("source_line", source_line); 436 | mapping['$[]=']("source_col", source_col); 437 | if ((($a = opts['$[]']("name")) !== nil && (!$a._isBoolean || $a == true))) { 438 | mapping['$[]=']("name", opts['$[]']("name"))};}; 439 | self.$mappings()['$<<'](mapping); 440 | ($a = self, $a['$generated_col=']($a.$generated_col()['$+'](line.$size()))); 441 | if ((($a = opts['$[]']("exact_position")) !== nil && (!$a._isBoolean || $a == true))) { 442 | return nil 443 | } else { 444 | return source_col = source_col['$+'](line.$size()) 445 | }; 446 | } else { 447 | return nil 448 | }}, TMP_1._s = self, TMP_1), $a).call($b); 449 | if (generated_output !== false && generated_output !== nil) { 450 | return generated_output = generated_output['$+'](text) 451 | } else { 452 | return nil 453 | }; 454 | }; 455 | 456 | def.$add_mapping = function(map) { 457 | var $a, $b, $c, self = this, remain = nil; 458 | 459 | if ((($a = ((($b = map['$[]']("generated_line")['$!']()) !== false && $b !== nil) ? $b : map['$[]']("generated_col")['$!']())) !== nil && (!$a._isBoolean || $a == true))) { 460 | self.$raise("mapping must have :generated_line and :generated_col") 461 | } else if ((($a = ($b = map['$[]']("source"), $b !== false && $b !== nil ?(($c = map['$[]']("source_line"), $c !== false && $c !== nil ?map['$[]']("source_col") : $c))['$!']() : $b)) !== nil && (!$a._isBoolean || $a == true))) { 462 | self.$raise("mapping must have :source_line and :source_col if it has :source") 463 | } else if ((($a = ($b = map['$[]']("source")['$!'](), $b !== false && $b !== nil ?(((($c = map['$[]']("source_line")) !== false && $c !== nil) ? $c : map['$[]']("source_col"))) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 464 | self.$raise("mapping may not have a :source_line or :source_col without a :source") 465 | } else if ((($a = ($b = map['$[]']("name"), $b !== false && $b !== nil ?map['$[]']("source")['$!']() : $b)) !== nil && (!$a._isBoolean || $a == true))) { 466 | self.$raise("mapping may not have a :name without a :source") 467 | } else if ((($a = ($b = map['$[]']("source_line"), $b !== false && $b !== nil ?map['$[]']("source_line")['$<'](1) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 468 | self.$raise("files start on line 1 (got :source_line => " + (map['$[]']("source_line")) + ")") 469 | } else if (map['$[]']("generated_line")['$<'](1)) { 470 | self.$raise("files start on line 1 (got :generated_line => " + (map['$[]']("generated_line")) + ")") 471 | } else if ((($a = ((remain = map.$keys()['$-'](["generated_line", "generated_col", "source", "source_line", "source_col", "name"])))['$empty?']()['$!']()) !== nil && (!$a._isBoolean || $a == true))) { 472 | self.$raise("mapping had unexpected keys: " + (remain.$inspect()))}; 473 | return self.$mappings()['$<<'](map); 474 | }; 475 | 476 | def.$as_json = function() { 477 | var self = this, serialized_mappings = nil; 478 | 479 | serialized_mappings = self['$serialize_mappings!'](); 480 | return $hash2(["version", "file", "sourceRoot", "sources", "names", "mappings"], {"version": self.$version(), "file": self.$file(), "sourceRoot": self.$source_root(), "sources": self.$sources(), "names": self.$names(), "mappings": serialized_mappings}); 481 | }; 482 | 483 | def.$to_s = function() { 484 | var self = this; 485 | 486 | return self.$as_json().$to_json(); 487 | }; 488 | 489 | def.$save = function(file) { 490 | var $a, $b, TMP_2, self = this; 491 | 492 | return ($a = ($b = $scope.File).$open, $a._p = (TMP_2 = function(f){var self = TMP_2._s || this; 493 | if (f == null) f = nil; 494 | return f['$<<'](self.$to_s())}, TMP_2._s = self, TMP_2), $a).call($b, file, "w"); 495 | }; 496 | 497 | self.$protected(); 498 | 499 | self.$attr_reader("source_ids", "name_ids"); 500 | 501 | self.$attr_accessor("generated_line", "generated_col"); 502 | 503 | def.$source_id = function(file) { 504 | var $a, self = this, cached = nil; 505 | 506 | if ((($a = (cached = self.$source_ids()['$[]'](file))) !== nil && (!$a._isBoolean || $a == true))) { 507 | return cached 508 | } else { 509 | self.$sources()['$<<'](file); 510 | return self.$source_ids()['$[]='](file, self.$sources().$size()['$-'](1)); 511 | }; 512 | }; 513 | 514 | def.$name_id = function(name) { 515 | var $a, self = this, cached = nil; 516 | 517 | if ((($a = (cached = self.$name_ids()['$[]'](self.$file()))) !== nil && (!$a._isBoolean || $a == true))) { 518 | return cached 519 | } else { 520 | self.$names()['$<<'](name); 521 | return self.$name_ids()['$[]='](self.$file(), self.$names().$size()['$-'](1)); 522 | }; 523 | }; 524 | 525 | def.$vlq = function(num, type) { 526 | var self = this, ret = nil; 527 | if (self.previous_vlq == null) self.previous_vlq = nil; 528 | 529 | ret = num['$-'](self.previous_vlq['$[]'](type)); 530 | self.previous_vlq['$[]='](type, num); 531 | return $scope.VLQ.$encode(ret); 532 | }; 533 | 534 | def['$serialize_mappings!'] = function() { 535 | var $a, $b, TMP_3, $c, TMP_4, $d, TMP_5, self = this, by_lines = nil; 536 | 537 | self.sources = []; 538 | self.source_ids = $hash2([], {}); 539 | self.names = []; 540 | self.name_ids = $hash2([], {}); 541 | self.previous_vlq = ($a = ($b = $scope.Hash).$new, $a._p = (TMP_3 = function(){var self = TMP_3._s || this; 542 | 543 | return 0}, TMP_3._s = self, TMP_3), $a).call($b); 544 | if ((($a = self.$mappings()['$empty?']()) !== nil && (!$a._isBoolean || $a == true))) { 545 | return ""}; 546 | by_lines = ($a = ($c = self.$mappings()).$group_by, $a._p = (TMP_4 = function(x){var self = TMP_4._s || this; 547 | if (x == null) x = nil; 548 | return x['$[]']("generated_line")}, TMP_4._s = self, TMP_4), $a).call($c); 549 | return ($a = ($d = ($range(1, by_lines.$keys().$max(), false))).$map, $a._p = (TMP_5 = function(line){var self = TMP_5._s || this, $a, $b, TMP_6, $c, TMP_7, fragments = nil; 550 | if (self.previous_vlq == null) self.previous_vlq = nil; 551 | if (line == null) line = nil; 552 | self.previous_vlq['$[]=']("generated_col", 0); 553 | fragments = ($a = ($b = (((($c = by_lines['$[]'](line)) !== false && $c !== nil) ? $c : []))).$sort_by, $a._p = (TMP_6 = function(x){var self = TMP_6._s || this; 554 | if (x == null) x = nil; 555 | return x['$[]']("generated_col")}, TMP_6._s = self, TMP_6), $a).call($b); 556 | return ($a = ($c = fragments).$map, $a._p = (TMP_7 = function(map){var self = TMP_7._s || this; 557 | if (map == null) map = nil; 558 | return self.$serialize_mapping(map)}, TMP_7._s = self, TMP_7), $a).call($c).$join(",");}, TMP_5._s = self, TMP_5), $a).call($d).$join(";"); 559 | }; 560 | 561 | def.$serialize_mapping = function(map) { 562 | var $a, self = this, item = nil; 563 | 564 | item = self.$vlq(map['$[]']("generated_col"), "generated_col"); 565 | if ((($a = map['$[]']("source")) !== nil && (!$a._isBoolean || $a == true))) { 566 | item = item['$+'](self.$vlq(self.$source_id(map['$[]']("source")), "source")); 567 | item = item['$+'](self.$vlq(map['$[]']("source_line")['$-'](1), "source_line")); 568 | item = item['$+'](self.$vlq(map['$[]']("source_col"), "source_col")); 569 | if ((($a = map['$[]']("name")) !== nil && (!$a._isBoolean || $a == true))) { 570 | item = item['$+'](self.$vlq(self.$name_id(map['$[]']("name")), "name"))};}; 571 | return item; 572 | }; 573 | ;$opal.donate(self, ["$add_generated", "$add_mapping", "$as_json", "$to_s", "$save", "$source_id", "$name_id", "$vlq", "$serialize_mappings!", "$serialize_mapping"]); 574 | })(self) 575 | })(self, null) 576 | })(Opal); 577 | 578 | //# sourceMappingURL=/__opal_source_maps__/source_map/generator.js.map 579 | ; 580 | /* Generated by Opal 0.6.0 */ 581 | (function($opal) { 582 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $hash2 = $opal.hash2, $module = $opal.module; 583 | 584 | $opal.add_stubs(['$==', '$[]', '$raise', '$new', '$parse_mappings', '$from_json', '$parse', '$from_s', '$read', '$each_with_index', '$[]=', '$each', '$<<', '$mappings', '$parse_mapping', '$+', '$split', '$mappings=', '$sort_by', '$decode_array', '$include?', '$size', '$file', '$undiff', '$>=', '$sources', '$names', '$<', '$key?', '$nil?']); 585 | return (function($base, $super) { 586 | function $SourceMap(){}; 587 | var self = $SourceMap = $klass($base, $super, 'SourceMap', $SourceMap); 588 | 589 | var def = self._proto, $scope = self._scope; 590 | 591 | (function($base, $super) { 592 | function $ParserError(){}; 593 | var self = $ParserError = $klass($base, $super, 'ParserError', $ParserError); 594 | 595 | var def = self._proto, $scope = self._scope; 596 | 597 | return nil; 598 | })(self, $scope.RuntimeError); 599 | 600 | $opal.defs(self, '$from_json', function(json) { 601 | var $a, self = this, map = nil; 602 | 603 | if (json['$[]']("version")['$=='](3)) { 604 | } else { 605 | self.$raise($scope.ParserError, "Cannot parse version: " + (json['$[]']("version")) + " of SourceMap") 606 | }; 607 | map = self.$new($hash2(["file", "source_root", "sources", "names"], {"file": json['$[]']("file"), "source_root": json['$[]']("sourceRoot"), "sources": json['$[]']("sources"), "names": json['$[]']("names")})); 608 | map.$parse_mappings(((($a = json['$[]']("mappings")) !== false && $a !== nil) ? $a : "")); 609 | return map; 610 | }); 611 | 612 | $opal.defs(self, '$from_s', function(str) { 613 | var self = this; 614 | 615 | return self.$from_json($scope.JSON.$parse(str)); 616 | }); 617 | 618 | $opal.defs(self, '$load', function(filename) { 619 | var self = this; 620 | 621 | return self.$from_s($scope.File.$read(filename)); 622 | }); 623 | 624 | return (function($base) { 625 | var self = $module($base, 'Parser'); 626 | 627 | var def = self._proto, $scope = self._scope; 628 | 629 | def.$parse_mappings = function(string) { 630 | var $a, $b, TMP_1, $c, TMP_2, $d, TMP_4, self = this; 631 | 632 | self.previous = ($a = ($b = $scope.Hash).$new, $a._p = (TMP_1 = function(){var self = TMP_1._s || this; 633 | 634 | return 0}, TMP_1._s = self, TMP_1), $a).call($b); 635 | ($a = ($c = string.$split(";")).$each_with_index, $a._p = (TMP_2 = function(line, line_idx){var self = TMP_2._s || this, $a, $b, TMP_3; 636 | if (self.previous == null) self.previous = nil; 637 | if (line == null) line = nil;if (line_idx == null) line_idx = nil; 638 | self.previous['$[]=']("generated_col", 0); 639 | return ($a = ($b = line.$split(",")).$each, $a._p = (TMP_3 = function(segment){var self = TMP_3._s || this; 640 | if (segment == null) segment = nil; 641 | return self.$mappings()['$<<'](self.$parse_mapping(segment, line_idx['$+'](1)))}, TMP_3._s = self, TMP_3), $a).call($b);}, TMP_2._s = self, TMP_2), $a).call($c); 642 | return self['$mappings='](($a = ($d = self.$mappings()).$sort_by, $a._p = (TMP_4 = function(x){var self = TMP_4._s || this; 643 | if (x == null) x = nil; 644 | return [x['$[]']("generated_line"), x['$[]']("generated_col")]}, TMP_4._s = self, TMP_4), $a).call($d)); 645 | }; 646 | 647 | def.$undiff = function(int$, type) { 648 | var $a, $b, self = this; 649 | if (self.previous == null) self.previous = nil; 650 | 651 | return ($a = type, $b = self.previous, $b['$[]=']($a, $b['$[]']($a)['$+'](int$))); 652 | }; 653 | 654 | def.$parse_mapping = function(segment, line_num) { 655 | var $a, $b, $c, self = this, item = nil, map = nil; 656 | if (self.previous == null) self.previous = nil; 657 | 658 | item = $scope.VLQ.$decode_array(segment); 659 | if ((($a = [1, 4, 5]['$include?'](item.$size())) !== nil && (!$a._isBoolean || $a == true))) { 660 | } else { 661 | self.$raise($scope.ParserError, "In map for " + (self.$file()) + ":" + (line_num) + ": unparseable item: " + (segment)) 662 | }; 663 | map = $hash2(["generated_line", "generated_col"], {"generated_line": line_num, "generated_col": self.$undiff(item['$[]'](0), "generated_col")}); 664 | if (item.$size()['$>='](4)) { 665 | map['$[]=']("source", self.$sources()['$[]'](self.$undiff(item['$[]'](1), "source_id"))); 666 | map['$[]=']("source_line", self.$undiff(item['$[]'](2), "source_line")['$+'](1)); 667 | map['$[]=']("source_col", self.$undiff(item['$[]'](3), "source_col")); 668 | if ((($a = item['$[]'](4)) !== nil && (!$a._isBoolean || $a == true))) { 669 | map['$[]=']("name", self.$names()['$[]'](self.$undiff(item['$[]'](4), "name_id")))};}; 670 | if (map['$[]']("generated_col")['$<'](0)) { 671 | return self.$raise($scope.ParserError, "In map for " + (self.$file()) + ":" + (line_num) + ": unexpected generated_col: " + (map['$[]']("generated_col"))) 672 | } else if ((($a = ($b = map['$key?']("source"), $b !== false && $b !== nil ?(((($c = map['$[]']("source")['$nil?']()) !== false && $c !== nil) ? $c : self.previous['$[]']("source_id")['$<'](0))) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 673 | return self.$raise($scope.ParserError, "In map for " + (self.$file()) + ":" + (line_num) + ": unknown source id: " + (self.previous['$[]']("source_id"))) 674 | } else if ((($a = ($b = map['$key?']("source_line"), $b !== false && $b !== nil ?map['$[]']("source_line")['$<'](1) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 675 | return self.$raise($scope.ParserError, "In map for " + (self.$file()) + ":" + (line_num) + ": unexpected source_line: " + (map['$[]']("source_line"))) 676 | } else if ((($a = ($b = map['$key?']("source_col"), $b !== false && $b !== nil ?map['$[]']("source_col")['$<'](0) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 677 | return self.$raise($scope.ParserError, "In map for " + (self.$file()) + ":" + (line_num) + ": unexpected source_col: " + (map['$[]']("source_col"))) 678 | } else if ((($a = ($b = map['$key?']("name"), $b !== false && $b !== nil ?(((($c = map['$[]']("name")['$nil?']()) !== false && $c !== nil) ? $c : self.previous['$[]']("name_id")['$<'](0))) : $b)) !== nil && (!$a._isBoolean || $a == true))) { 679 | return self.$raise($scope.ParserError, "In map for " + (self.$file()) + ":" + (line_num) + ": unknown name id: " + (self.previous['$[]']("name_id"))) 680 | } else { 681 | return map 682 | }; 683 | }; 684 | ;$opal.donate(self, ["$parse_mappings", "$undiff", "$parse_mapping"]); 685 | })(self); 686 | })(self, null) 687 | })(Opal); 688 | 689 | //# sourceMappingURL=/__opal_source_maps__/source_map/parser.js.map 690 | ; 691 | /* Generated by Opal 0.6.0 */ 692 | (function($opal) { 693 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $hash2 = $opal.hash2; 694 | 695 | $opal.add_stubs(['$include', '$empty?', '$-', '$keys', '$raise', '$inspect', '$generated_output=', '$[]', '$file=', '$source_root=', '$version=', '$sources=', '$names=', '$mappings=', '$!', '$==', '$version', '$attr_accessor']); 696 | ; 697 | ; 698 | ; 699 | ; 700 | return (function($base, $super) { 701 | function $SourceMap(){}; 702 | var self = $SourceMap = $klass($base, $super, 'SourceMap', $SourceMap); 703 | 704 | var def = self._proto, $scope = self._scope; 705 | 706 | self.$include(($scope.SourceMap)._scope.Generator); 707 | 708 | self.$include(($scope.SourceMap)._scope.Parser); 709 | 710 | def.$initialize = function(opts) { 711 | var $a, self = this, remain = nil; 712 | 713 | if (opts == null) { 714 | opts = $hash2([], {}) 715 | } 716 | if ((($a = ((remain = opts.$keys()['$-'](["generated_output", "file", "source_root", "sources", "names", "version"])))['$empty?']()) !== nil && (!$a._isBoolean || $a == true))) { 717 | } else { 718 | self.$raise($scope.ArgumentError, "Unsupported options to SourceMap.new: " + (remain.$inspect())) 719 | }; 720 | self['$generated_output='](opts['$[]']("generated_output")); 721 | self['$file='](((($a = opts['$[]']("file")) !== false && $a !== nil) ? $a : "")); 722 | self['$source_root='](((($a = opts['$[]']("source_root")) !== false && $a !== nil) ? $a : "")); 723 | self['$version='](((($a = opts['$[]']("version")) !== false && $a !== nil) ? $a : 3)); 724 | self['$sources='](((($a = opts['$[]']("sources")) !== false && $a !== nil) ? $a : [])); 725 | self['$names='](((($a = opts['$[]']("names")) !== false && $a !== nil) ? $a : [])); 726 | self['$mappings=']([]); 727 | if ((($a = self.$version()['$=='](3)['$!']()) !== nil && (!$a._isBoolean || $a == true))) { 728 | return self.$raise("version " + (opts['$[]']("version")) + " not supported") 729 | } else { 730 | return nil 731 | }; 732 | }; 733 | 734 | self.$attr_accessor("file"); 735 | 736 | self.$attr_accessor("source_root"); 737 | 738 | self.$attr_accessor("version"); 739 | 740 | self.$attr_accessor("sources"); 741 | 742 | self.$attr_accessor("names"); 743 | 744 | return self.$attr_accessor("mappings"); 745 | })(self, null); 746 | })(Opal); 747 | 748 | //# sourceMappingURL=/__opal_source_maps__/source_map.js.map 749 | ; 750 | -------------------------------------------------------------------------------- /opal/stringio.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $range = $opal.range; 4 | 5 | $opal.add_stubs(['$include', '$new', '$call', '$close', '$attr_accessor', '$length', '$include?', '$!', '$check_readable', '$==', '$===', '$>=', '$raise', '$>', '$+', '$-', '$seek', '$enum_for', '$eof?', '$ord', '$[]', '$check_writable', '$String', '$write', '$closed_write?', '$closed_read?']); 6 | return (function($base, $super) { 7 | function $StringIO(){}; 8 | var self = $StringIO = $klass($base, $super, 'StringIO', $StringIO); 9 | 10 | var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3; 11 | 12 | def.position = def.string = def.closed = nil; 13 | self.$include(($scope.IO)._scope.Readable); 14 | 15 | self.$include(($scope.IO)._scope.Writable); 16 | 17 | $opal.defs(self, '$open', TMP_1 = function(string, mode) { 18 | var self = this, $iter = TMP_1._p, block = $iter || nil, io = nil, res = nil; 19 | 20 | if (string == null) { 21 | string = "" 22 | } 23 | if (mode == null) { 24 | mode = nil 25 | } 26 | TMP_1._p = null; 27 | io = self.$new(string, mode); 28 | res = block.$call(io); 29 | io.$close(); 30 | return res; 31 | }); 32 | 33 | self.$attr_accessor("string"); 34 | 35 | def.$initialize = function(string, mode) { 36 | var $a, $b, self = this; 37 | 38 | if (string == null) { 39 | string = "" 40 | } 41 | if (mode == null) { 42 | mode = "rw" 43 | } 44 | self.string = string; 45 | self.position = string.$length(); 46 | if ((($a = ($b = mode['$include?']("r"), $b !== false && $b !== nil ?mode['$include?']("w")['$!']() : $b)) !== nil && (!$a._isBoolean || $a == true))) { 47 | return self.closed = "write" 48 | } else if ((($a = ($b = mode['$include?']("w"), $b !== false && $b !== nil ?mode['$include?']("r")['$!']() : $b)) !== nil && (!$a._isBoolean || $a == true))) { 49 | return self.closed = "read" 50 | } else { 51 | return nil 52 | }; 53 | }; 54 | 55 | def['$eof?'] = function() { 56 | var self = this; 57 | 58 | self.$check_readable(); 59 | return self.position['$=='](self.string.$length()); 60 | }; 61 | 62 | $opal.defn(self, '$eof', def['$eof?']); 63 | 64 | def.$seek = function(pos, whence) { 65 | var self = this, $case = nil; 66 | 67 | if (whence == null) { 68 | whence = ($scope.IO)._scope.SEEK_SET 69 | } 70 | $case = whence;if (($scope.IO)._scope.SEEK_SET['$===']($case)) {if (pos['$>='](0)) { 71 | } else { 72 | self.$raise(($scope.Errno)._scope.EINVAL) 73 | }; 74 | self.position = pos;}else if (($scope.IO)._scope.SEEK_CUR['$===']($case)) {if (self.position['$+'](pos)['$>'](self.string.$length())) { 75 | self.position = self.string.$length() 76 | } else { 77 | self.position = self.position['$+'](pos) 78 | }}else if (($scope.IO)._scope.SEEK_END['$===']($case)) {if (pos['$>'](self.string.$length())) { 79 | self.position = 0 80 | } else { 81 | self.position = self.position['$-'](pos) 82 | }}; 83 | return 0; 84 | }; 85 | 86 | def.$tell = function() { 87 | var self = this; 88 | 89 | return self.position; 90 | }; 91 | 92 | $opal.defn(self, '$pos', def.$tell); 93 | 94 | $opal.defn(self, '$pos=', def.$seek); 95 | 96 | def.$rewind = function() { 97 | var self = this; 98 | 99 | return self.$seek(0); 100 | }; 101 | 102 | def.$each_byte = TMP_2 = function() { 103 | var $a, $b, self = this, $iter = TMP_2._p, block = $iter || nil, i = nil; 104 | 105 | TMP_2._p = null; 106 | if (block !== false && block !== nil) { 107 | } else { 108 | return self.$enum_for("each_byte") 109 | }; 110 | self.$check_readable(); 111 | i = self.position; 112 | while (!((($b = self['$eof?']()) !== nil && (!$b._isBoolean || $b == true)))) { 113 | block.$call(self.string['$[]'](i).$ord()); 114 | i = i['$+'](1);}; 115 | return self; 116 | }; 117 | 118 | def.$each_char = TMP_3 = function() { 119 | var $a, $b, self = this, $iter = TMP_3._p, block = $iter || nil, i = nil; 120 | 121 | TMP_3._p = null; 122 | if (block !== false && block !== nil) { 123 | } else { 124 | return self.$enum_for("each_char") 125 | }; 126 | self.$check_readable(); 127 | i = self.position; 128 | while (!((($b = self['$eof?']()) !== nil && (!$b._isBoolean || $b == true)))) { 129 | block.$call(self.string['$[]'](i)); 130 | i = i['$+'](1);}; 131 | return self; 132 | }; 133 | 134 | def.$write = function(string) { 135 | var self = this, before = nil, after = nil; 136 | 137 | self.$check_writable(); 138 | string = self.$String(string); 139 | if (self.string.$length()['$=='](self.position)) { 140 | self.string = self.string['$+'](string); 141 | return self.position = self.position['$+'](string.$length()); 142 | } else { 143 | before = self.string['$[]']($range(0, self.position['$-'](1), false)); 144 | after = self.string['$[]']($range(self.position['$+'](string.$length()), -1, false)); 145 | self.string = before['$+'](string)['$+'](after); 146 | return self.position = self.position['$+'](string.$length()); 147 | }; 148 | }; 149 | 150 | def.$read = function(length, outbuf) { 151 | var $a, self = this, string = nil, str = nil; 152 | 153 | if (length == null) { 154 | length = nil 155 | } 156 | if (outbuf == null) { 157 | outbuf = nil 158 | } 159 | self.$check_readable(); 160 | if ((($a = self['$eof?']()) !== nil && (!$a._isBoolean || $a == true))) { 161 | return nil}; 162 | string = (function() {if (length !== false && length !== nil) { 163 | str = self.string['$[]'](self.position, length); 164 | self.position = self.position['$+'](length); 165 | return str; 166 | } else { 167 | str = self.string['$[]']($range(self.position, -1, false)); 168 | self.position = self.string.$length(); 169 | return str; 170 | }; return nil; })(); 171 | if (outbuf !== false && outbuf !== nil) { 172 | return outbuf.$write(string) 173 | } else { 174 | return string 175 | }; 176 | }; 177 | 178 | def.$close = function() { 179 | var self = this; 180 | 181 | return self.closed = "both"; 182 | }; 183 | 184 | def.$close_read = function() { 185 | var self = this; 186 | 187 | if (self.closed['$==']("write")) { 188 | return self.closed = "both" 189 | } else { 190 | return self.closed = "read" 191 | }; 192 | }; 193 | 194 | def.$close_write = function() { 195 | var self = this; 196 | 197 | if (self.closed['$==']("read")) { 198 | return self.closed = "both" 199 | } else { 200 | return self.closed = "write" 201 | }; 202 | }; 203 | 204 | def['$closed?'] = function() { 205 | var self = this; 206 | 207 | return self.closed['$==']("both"); 208 | }; 209 | 210 | def['$closed_read?'] = function() { 211 | var $a, self = this; 212 | 213 | return ((($a = self.closed['$==']("read")) !== false && $a !== nil) ? $a : self.closed['$==']("both")); 214 | }; 215 | 216 | def['$closed_write?'] = function() { 217 | var $a, self = this; 218 | 219 | return ((($a = self.closed['$==']("write")) !== false && $a !== nil) ? $a : self.closed['$==']("both")); 220 | }; 221 | 222 | def.$check_writable = function() { 223 | var $a, self = this; 224 | 225 | if ((($a = self['$closed_write?']()) !== nil && (!$a._isBoolean || $a == true))) { 226 | return self.$raise($scope.IOError, "not opened for writing") 227 | } else { 228 | return nil 229 | }; 230 | }; 231 | 232 | return (def.$check_readable = function() { 233 | var $a, self = this; 234 | 235 | if ((($a = self['$closed_read?']()) !== nil && (!$a._isBoolean || $a == true))) { 236 | return self.$raise($scope.IOError, "not opened for reading") 237 | } else { 238 | return nil 239 | }; 240 | }, nil); 241 | })(self, $scope.IO) 242 | })(Opal); 243 | 244 | //# sourceMappingURL=/__opal_source_maps__/stringio.js.map 245 | ; 246 | -------------------------------------------------------------------------------- /opal/strscan.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass; 4 | 5 | $opal.add_stubs(['$attr_reader', '$length', '$pos=']); 6 | return (function($base, $super) { 7 | function $StringScanner(){}; 8 | var self = $StringScanner = $klass($base, $super, 'StringScanner', $StringScanner); 9 | 10 | var def = self._proto, $scope = self._scope; 11 | 12 | def.pos = def.string = def.working = def.prev_pos = def.matched = def.match = nil; 13 | self.$attr_reader("pos"); 14 | 15 | self.$attr_reader("matched"); 16 | 17 | def.$initialize = function(string) { 18 | var self = this; 19 | 20 | self.string = string; 21 | self.pos = 0; 22 | self.matched = nil; 23 | self.working = string; 24 | return self.match = []; 25 | }; 26 | 27 | def['$bol?'] = function() { 28 | var self = this; 29 | 30 | return self.pos === 0 || self.string.charAt(self.pos - 1) === "\n"; 31 | }; 32 | 33 | def.$scan = function(regex) { 34 | var self = this; 35 | 36 | 37 | var regex = new RegExp('^' + regex.toString().substring(1, regex.toString().length - 1)), 38 | result = regex.exec(self.working); 39 | 40 | if (result == null) { 41 | return self.matched = nil; 42 | } 43 | else if (typeof(result) === 'object') { 44 | self.prev_pos = self.pos; 45 | self.pos += result[0].length; 46 | self.working = self.working.substring(result[0].length); 47 | self.matched = result[0]; 48 | self.match = result; 49 | 50 | return result[0]; 51 | } 52 | else if (typeof(result) === 'string') { 53 | self.pos += result.length; 54 | self.working = self.working.substring(result.length); 55 | 56 | return result; 57 | } 58 | else { 59 | return nil; 60 | } 61 | ; 62 | }; 63 | 64 | def['$[]'] = function(idx) { 65 | var self = this; 66 | 67 | 68 | var match = self.match; 69 | 70 | if (idx < 0) { 71 | idx += match.length; 72 | } 73 | 74 | if (idx < 0 || idx >= match.length) { 75 | return nil; 76 | } 77 | 78 | return match[idx]; 79 | ; 80 | }; 81 | 82 | def.$check = function(regex) { 83 | var self = this; 84 | 85 | 86 | var regexp = new RegExp('^' + regex.toString().substring(1, regex.toString().length - 1)), 87 | result = regexp.exec(self.working); 88 | 89 | if (result == null) { 90 | return self.matched = nil; 91 | } 92 | 93 | return self.matched = result[0]; 94 | ; 95 | }; 96 | 97 | def.$peek = function(length) { 98 | var self = this; 99 | 100 | return self.working.substring(0, length); 101 | }; 102 | 103 | def['$eos?'] = function() { 104 | var self = this; 105 | 106 | return self.working.length === 0; 107 | }; 108 | 109 | def.$skip = function(re) { 110 | var self = this; 111 | 112 | 113 | re = new RegExp('^' + re.source) 114 | var result = re.exec(self.working); 115 | 116 | if (result == null) { 117 | return self.matched = nil; 118 | } 119 | else { 120 | var match_str = result[0]; 121 | var match_len = match_str.length; 122 | self.matched = match_str; 123 | self.prev_pos = self.pos; 124 | self.pos += match_len; 125 | self.working = self.working.substring(match_len); 126 | return match_len; 127 | } 128 | ; 129 | }; 130 | 131 | def.$get_byte = function() { 132 | var self = this; 133 | 134 | 135 | var result = nil; 136 | if (self.pos < self.string.length) { 137 | self.prev_pos = self.pos; 138 | self.pos += 1; 139 | result = self.matched = self.working.substring(0, 1); 140 | self.working = self.working.substring(1); 141 | } 142 | else { 143 | self.matched = nil; 144 | } 145 | 146 | return result; 147 | ; 148 | }; 149 | 150 | $opal.defn(self, '$getch', def.$get_byte); 151 | 152 | def['$pos='] = function(pos) { 153 | var self = this; 154 | 155 | 156 | if (pos < 0) { 157 | pos += self.string.$length(); 158 | } 159 | ; 160 | self.pos = pos; 161 | return self.working = self.string.slice(pos); 162 | }; 163 | 164 | def.$rest = function() { 165 | var self = this; 166 | 167 | return self.working; 168 | }; 169 | 170 | def.$terminate = function() { 171 | var self = this; 172 | 173 | self.match = nil; 174 | return self['$pos='](self.string.$length()); 175 | }; 176 | 177 | return (def.$unscan = function() { 178 | var self = this; 179 | 180 | self.pos = self.prev_pos; 181 | self.prev_pos = nil; 182 | self.match = nil; 183 | return self; 184 | }, nil); 185 | })(self, null) 186 | })(Opal); 187 | 188 | //# sourceMappingURL=/__opal_source_maps__/strscan.js.map 189 | ; 190 | -------------------------------------------------------------------------------- /opal/template.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $hash2 = $opal.hash2; 4 | 5 | $opal.add_stubs(['$[]', '$[]=', '$keys', '$attr_reader', '$instance_exec', '$to_proc', '$new', '$<<', '$join']); 6 | return (function($base, $super) { 7 | function $Template(){}; 8 | var self = $Template = $klass($base, $super, 'Template', $Template); 9 | 10 | var def = self._proto, $scope = self._scope, TMP_1; 11 | 12 | def.name = def.body = nil; 13 | self._cache = $hash2([], {}); 14 | 15 | $opal.defs(self, '$[]', function(name) { 16 | var self = this; 17 | if (self._cache == null) self._cache = nil; 18 | 19 | return self._cache['$[]'](name); 20 | }); 21 | 22 | $opal.defs(self, '$[]=', function(name, instance) { 23 | var self = this; 24 | if (self._cache == null) self._cache = nil; 25 | 26 | return self._cache['$[]='](name, instance); 27 | }); 28 | 29 | $opal.defs(self, '$paths', function() { 30 | var self = this; 31 | if (self._cache == null) self._cache = nil; 32 | 33 | return self._cache.$keys(); 34 | }); 35 | 36 | self.$attr_reader("body"); 37 | 38 | def.$initialize = TMP_1 = function(name) { 39 | var $a, self = this, $iter = TMP_1._p, body = $iter || nil; 40 | 41 | TMP_1._p = null; 42 | $a = [name, body], self.name = $a[0], self.body = $a[1]; 43 | return $scope.Template['$[]='](name, self); 44 | }; 45 | 46 | def.$inspect = function() { 47 | var self = this; 48 | 49 | return "#"; 50 | }; 51 | 52 | def.$render = function(ctx) { 53 | var $a, $b, self = this; 54 | 55 | if (ctx == null) { 56 | ctx = self 57 | } 58 | return ($a = ($b = ctx).$instance_exec, $a._p = self.body.$to_proc(), $a).call($b, $scope.OutputBuffer.$new()); 59 | }; 60 | 61 | return (function($base, $super) { 62 | function $OutputBuffer(){}; 63 | var self = $OutputBuffer = $klass($base, $super, 'OutputBuffer', $OutputBuffer); 64 | 65 | var def = self._proto, $scope = self._scope; 66 | 67 | def.buffer = nil; 68 | def.$initialize = function() { 69 | var self = this; 70 | 71 | return self.buffer = []; 72 | }; 73 | 74 | def.$append = function(str) { 75 | var self = this; 76 | 77 | return self.buffer['$<<'](str); 78 | }; 79 | 80 | $opal.defn(self, '$append=', def.$append); 81 | 82 | return (def.$join = function() { 83 | var self = this; 84 | 85 | return self.buffer.$join(); 86 | }, nil); 87 | })(self, null); 88 | })(self, null) 89 | })(Opal); 90 | 91 | //# sourceMappingURL=/__opal_source_maps__/template.js.map 92 | ; 93 | -------------------------------------------------------------------------------- /opal/thread.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $hash2 = $opal.hash2; 4 | 5 | $opal.add_stubs(['$new', '$[]', '$[]=']); 6 | (function($base, $super) { 7 | function $Thread(){}; 8 | var self = $Thread = $klass($base, $super, 'Thread', $Thread); 9 | 10 | var def = self._proto, $scope = self._scope; 11 | 12 | def.vars = nil; 13 | $opal.defs(self, '$current', function() { 14 | var $a, self = this; 15 | if (self.current == null) self.current = nil; 16 | 17 | return ((($a = self.current) !== false && $a !== nil) ? $a : self.current = self.$new()); 18 | }); 19 | 20 | def.$initialize = function() { 21 | var self = this; 22 | 23 | return self.vars = $hash2([], {}); 24 | }; 25 | 26 | def['$[]'] = function(key) { 27 | var self = this; 28 | 29 | return self.vars['$[]'](key); 30 | }; 31 | 32 | return (def['$[]='] = function(key, val) { 33 | var self = this; 34 | 35 | return self.vars['$[]='](key, val); 36 | }, nil); 37 | })(self, null); 38 | return (function($base, $super) { 39 | function $Queue(){}; 40 | var self = $Queue = $klass($base, $super, 'Queue', $Queue); 41 | 42 | var def = self._proto, $scope = self._scope; 43 | 44 | return nil; 45 | })(self, null); 46 | })(Opal); 47 | 48 | //# sourceMappingURL=/__opal_source_maps__/thread.js.map 49 | ; 50 | -------------------------------------------------------------------------------- /opal/time.js: -------------------------------------------------------------------------------- 1 | /* Generated by Opal 0.6.0 */ 2 | (function($opal) { 3 | var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass; 4 | 5 | $opal.add_stubs(['$strftime']); 6 | return (function($base, $super) { 7 | function $Time(){}; 8 | var self = $Time = $klass($base, $super, 'Time', $Time); 9 | 10 | var def = self._proto, $scope = self._scope; 11 | 12 | $opal.defs(self, '$parse', function(str) { 13 | var self = this; 14 | 15 | return new Date(Date.parse(str)); 16 | }); 17 | 18 | return (def.$iso8601 = function() { 19 | var self = this; 20 | 21 | return self.$strftime("%FT%T%z"); 22 | }, nil); 23 | })(self, null) 24 | })(Opal); 25 | 26 | //# sourceMappingURL=/__opal_source_maps__/time.js.map 27 | ; 28 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "opal", 3 | "description": "CoffeeScript was so cool", 4 | "keywords": ["javascript", "language", "opal", "compiler", "ruby"], 5 | "author": "Elia Schito", 6 | "version": "0.6.4", 7 | "licenses": [{ 8 | "type": "MIT", 9 | "url": "https://raw.github.com/opal/opal-node/master/MIT-LICENSE" 10 | }], 11 | "engines": { 12 | "node": "0.10.x" 13 | }, 14 | "directories" : { 15 | "lib" : "./lib" 16 | }, 17 | "main" : "./lib/opal", 18 | "bin": { 19 | "opal-node": "./bin/opal-node", 20 | "opal-node-irb": "./bin/opal-node-irb" 21 | }, 22 | "homepage": "http://github.com/opal/opal-node", 23 | "bugs": "https://github.com/opal/opal-node/issues", 24 | "repository": { 25 | "type": "git", 26 | "url": "git://github.com/opal/opal-node.git" 27 | }, 28 | "dependencies": { 29 | "glob": "latest", 30 | "js-yaml": "latest" 31 | }, 32 | "devDependencies": { 33 | "coffee-script": "latest" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /spec/dir_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe Dir do 4 | describe '[glob]' do 5 | it 'lists files matching the glob' do 6 | path = File.expand_path('../fixtures/hello_world.rb', __FILE__) 7 | glob = File.expand_path('../fixtures/*', __FILE__) 8 | 9 | from_dir_of(__FILE__) do 10 | run("puts Dir[#{glob.inspect}].inspect").should eq(Dir[glob].inspect+"\n") 11 | end 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /spec/file_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe File do 4 | describe '.read' do 5 | it 'reads the file contents' do 6 | path = File.expand_path('../fixtures/hello_world.rb', __FILE__) 7 | from_dir_of(__FILE__) do 8 | run("puts File.read('#{path}')\n").should eq(File.read(path)+"\n") 9 | end 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /spec/fixtures/hello_world.rb: -------------------------------------------------------------------------------- 1 | puts 'hello world!' 2 | -------------------------------------------------------------------------------- /spec/opal-node.coffee_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | describe 'opal-node' do 4 | it 'executes a script that prints "hello world"' do 5 | hello_world = a_file_with_name 'hello_world.rb', and_contents: "puts 'hello world!'\n" 6 | opal_node(hello_world).should eq("hello world!\n") 7 | end 8 | 9 | context 'requires .rb files' do 10 | let!(:hello_world) { a_file_with_name 'hello_world.rb', and_contents: "puts 'hello world!'\n" } 11 | 12 | it 'without a leading ./' do 13 | requiring = a_file_with_name 'requiring.rb', and_contents: "require 'hello_world'\n" 14 | opal_node(requiring, File.dirname(requiring)).should eq("hello world!\n") 15 | end 16 | 17 | it 'with a leading ./' do 18 | requiring = a_file_with_name 'requiring.rb', and_contents: "require './hello_world.rb'\n" 19 | from_dir_of(requiring) do 20 | opal_node(requiring, File.dirname(requiring)).should eq("hello world!\n") 21 | end 22 | end 23 | 24 | it 'with explicit extension' do 25 | requiring = a_file_with_name 'requiring.rb', and_contents: "require './hello_world.rb'\n" 26 | from_dir_of(requiring) do 27 | opal_node(requiring, File.dirname(requiring)).should eq("hello world!\n") 28 | end 29 | end 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | # This file was generated by the `rspec --init` command. Conventionally, all 2 | # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. 3 | # Require this file using `require "spec_helper"` to ensure that it is only 4 | # loaded once. 5 | # 6 | # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration 7 | RSpec.configure do |c| 8 | c.treat_symbols_as_metadata_keys_with_true_values = true 9 | c.run_all_when_everything_filtered = true 10 | c.filter_run :focus 11 | 12 | # Run specs in random order to surface order dependencies. If you find an 13 | # order dependency and want to debug it, you can fix the order by providing 14 | # the seed, which is printed after each run. 15 | # --seed 1234 16 | c.order = 'random' 17 | 18 | c.before :suite do 19 | compile_opal_coffee.should be_true 20 | end 21 | 22 | def compile_opal_coffee 23 | system "coffee -c #{File.expand_path('../../lib/opal-node.coffee', __FILE__)}" 24 | end 25 | 26 | def opal_node path, include_dir = nil 27 | base_dir = File.expand_path('../..', __FILE__) 28 | node_path = [include_dir, "#{base_dir}/lib", '$NODE_PATH'].compact 29 | command = %Q{NODE_PATH="#{node_path.join(':')}" node #{base_dir}/bin/opal-node #{path}} 30 | `#{command}` 31 | end 32 | 33 | def a_file_with_name name, options 34 | require 'tempfile' 35 | path = File.expand_path("../../tmp/#{name}", __FILE__) 36 | contents = options[:and_contents] 37 | File.open(path, 'w') { |file| file << contents } 38 | path 39 | end 40 | 41 | def run code 42 | rb_file = a_file_with_name 'rb_file.rb', and_contents: code 43 | opal_node(rb_file, File.dirname(rb_file)) 44 | end 45 | 46 | def from_dir_of file 47 | pwd = Dir.pwd 48 | Dir.chdir File.dirname(file) 49 | yield 50 | Dir.chdir pwd 51 | end 52 | end 53 | 54 | 55 | -------------------------------------------------------------------------------- /tmp/.git-keep: -------------------------------------------------------------------------------- 1 | 2 | --------------------------------------------------------------------------------