Skip to content

Instantly share code, notes, and snippets.

@elia
Created April 4, 2014 18:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elia/9980023 to your computer and use it in GitHub Desktop.
Save elia/9980023 to your computer and use it in GitHub Desktop.
(function(undefined) {
// The Opal object that is exposed globally
var Opal = this.Opal = {};
// The actual class for BasicObject
var RubyBasicObject;
// The actual Object class
var RubyObject;
// The actual Module class
var RubyModule;
// The actual Class class
var RubyClass;
// Constructor for instances of BasicObject
function BasicObject(){}
// Constructor for instances of Object
function Object(){}
// Constructor for instances of Class
function Class(){}
// Constructor for instances of Module
function Module(){}
// Constructor for instances of NilClass (nil)
function NilClass(){}
// All bridged classes - keep track to donate methods from Object
var bridged_classes = [];
// TopScope is used for inheriting constants from the top scope
var TopScope = function(){};
// Opal just acts as the top scope
TopScope.prototype = Opal;
// To inherit scopes
Opal.constructor = TopScope;
Opal.constants = [];
// This is a useful reference to global object inside ruby files
Opal.global = this;
// Minify common function calls
var $hasOwn = Opal.hasOwnProperty;
var $slice = Opal.slice = Array.prototype.slice;
// Generates unique id for every ruby object
var unique_id = 0;
// Return next unique id
Opal.uid = function() {
return unique_id++;
};
// Table holds all class variables
Opal.cvars = {};
// Globals table
Opal.gvars = {};
/*
* Create a new constants scope for the given class with the given
* base. Constants are looked up through their parents, so the base
* scope will be the outer scope of the new klass.
*/
function create_scope(base, klass, id) {
var const_alloc = function() {};
var const_scope = const_alloc.prototype = new base.constructor();
klass._scope = const_scope;
const_scope.base = klass;
klass._base_module = base.base;
const_scope.constructor = const_alloc;
const_scope.constants = [];
if (id) {
klass._orig_scope = base;
base[id] = base.constructor[id] = klass;
base.constants.push(id);
}
}
Opal.create_scope = create_scope;
/*
* A `class Foo; end` expression in ruby is compiled to call this runtime
* method which either returns an existing class of the given name, or creates
* a new class in the given `base` scope.
*
* If a constant with the given name exists, then we check to make sure that
* it is a class and also that the superclasses match. If either of these
* fail, then we raise a `TypeError`. Note, superklass may be null if one was
* not specified in the ruby code.
*
* We pass a constructor to this method of the form `function ClassName() {}`
* simply so that classes show up with nicely formatted names inside debuggers
* in the web browser (or node/sprockets).
*
* The `base` is the current `self` value where the class is being created
* from. We use this to get the scope for where the class should be created.
* If `base` is an object (not a class/module), we simple get its class and
* use that as the base instead.
*
* @param [Object] base where the class is being created
* @param [Class] superklass superclass of the new class (may be null)
* @param [String] id the name of the class to be created
* @param [Function] constructor function to use as constructor
* @return [Class] new or existing ruby class
*/
Opal.klass = function(base, superklass, id, constructor) {
// If base is an object, use its class
if (!base._isClass) {
base = base._klass;
}
// Not specifying a superclass means we can assume it to be Object
if (superklass === null) {
superklass = RubyObject;
}
var klass = base._scope[id];
// If a constant exists in the scope, then we must use that
if ($hasOwn.call(base._scope, id) && klass._orig_scope === base._scope) {
// Make sure the existing constant is a class, or raise error
if (!klass._isClass) {
throw Opal.TypeError.$new(id + " is not a class");
}
// Make sure existing class has same superclass
if (superklass !== klass._super && superklass !== RubyObject) {
throw Opal.TypeError.$new("superclass mismatch for class " + id);
}
}
else if (typeof(superklass) === 'function') {
// passed native constructor as superklass, so bridge it as ruby class
return bridge_class(id, superklass);
}
else {
// if class doesnt exist, create a new one with given superclass
klass = boot_class(superklass, constructor);
// name class using base (e.g. Foo or Foo::Baz)
klass._name = id;
// every class gets its own constant scope, inherited from current scope
create_scope(base._scope, klass, id);
// Name new class directly onto current scope (Opal.Foo.Baz = klass)
base[id] = base._scope[id] = klass;
// Copy all parent constants to child, unless parent is Object
if (superklass !== RubyObject && superklass !== RubyBasicObject) {
Opal.donate_constants(superklass, klass);
}
// call .inherited() hook with new class on the superclass
if (superklass.$inherited) {
superklass.$inherited(klass);
}
}
return klass;
};
// Create generic class with given superclass.
var boot_class = Opal.boot = function(superklass, constructor) {
// instances
var ctor = function() {};
ctor.prototype = superklass._proto;
constructor.prototype = new ctor();
constructor.prototype.constructor = constructor;
return boot_class_meta(superklass, constructor);
};
// class itself
function boot_class_meta(superklass, constructor) {
var mtor = function() {};
mtor.prototype = superklass.constructor.prototype;
function OpalClass() {};
OpalClass.prototype = new mtor();
var klass = new OpalClass();
klass._id = unique_id++;
klass._alloc = constructor;
klass._isClass = true;
klass.constructor = OpalClass;
klass._super = superklass;
klass._methods = [];
klass.__inc__ = [];
klass.__parent = superklass;
klass._proto = constructor.prototype;
constructor.prototype._klass = klass;
return klass;
}
// Define new module (or return existing module)
Opal.module = function(base, id) {
var module;
if (!base._isClass) {
base = base._klass;
}
if ($hasOwn.call(base._scope, id)) {
module = base._scope[id];
if (!module.__mod__ && module !== RubyObject) {
throw Opal.TypeError.$new(id + " is not a module")
}
}
else {
module = boot_module()
module._name = id;
create_scope(base._scope, module, id);
// Name new module directly onto current scope (Opal.Foo.Baz = module)
base[id] = base._scope[id] = module;
}
return module;
};
/*
* Internal function to create a new module instance. This simply sets up
* the prototype hierarchy and method tables.
*/
function boot_module() {
var mtor = function() {};
mtor.prototype = RubyModule.constructor.prototype;
function OpalModule() {};
OpalModule.prototype = new mtor();
var module = new OpalModule();
module._id = unique_id++;
module._isClass = true;
module.constructor = OpalModule;
module._super = RubyModule;
module._methods = [];
module.__inc__ = [];
module.__parent = RubyModule;
module._proto = {};
module.__mod__ = true;
module.__dep__ = [];
return module;
}
// Boot a base class (makes instances).
var boot_defclass = function(id, constructor, superklass) {
if (superklass) {
var ctor = function() {};
ctor.prototype = superklass.prototype;
constructor.prototype = new ctor();
}
constructor.prototype.constructor = constructor;
return constructor;
};
// Boot the actual (meta?) classes of core classes
var boot_makemeta = function(id, constructor, superklass) {
var mtor = function() {};
mtor.prototype = superklass.prototype;
function OpalClass() {};
OpalClass.prototype = new mtor();
var klass = new OpalClass();
klass._id = unique_id++;
klass._alloc = constructor;
klass._isClass = true;
klass._name = id;
klass._super = superklass;
klass.constructor = OpalClass;
klass._methods = [];
klass.__inc__ = [];
klass.__parent = superklass;
klass._proto = constructor.prototype;
constructor.prototype._klass = klass;
Opal[id] = klass;
Opal.constants.push(id);
return klass;
};
/*
* For performance, some core ruby classes are toll-free bridged to their
* native javascript counterparts (e.g. a ruby Array is a javascript Array).
*
* This method is used to setup a native constructor (e.g. Array), to have
* its prototype act like a normal ruby class. Firstly, a new ruby class is
* created using the native constructor so that its prototype is set as the
* target for th new class. Note: all bridged classes are set to inherit
* from Object.
*
* Bridged classes are tracked in `bridged_classes` array so that methods
* defined on Object can be "donated" to all bridged classes. This allows
* us to fake the inheritance of a native prototype from our Object
* prototype.
*
* Example:
*
* bridge_class("Proc", Function);
*
* @param [String] name the name of the ruby class to create
* @param [Function] constructor native javascript constructor to use
* @return [Class] returns new ruby class
*/
function bridge_class(name, constructor) {
var klass = boot_class_meta(RubyObject, constructor);
klass._name = name;
create_scope(Opal, klass, name);
bridged_classes.push(klass);
var object_methods = RubyBasicObject._methods.concat(RubyObject._methods);
for (var i = 0, len = object_methods.length; i < len; i++) {
var meth = object_methods[i];
constructor.prototype[meth] = RubyObject._proto[meth];
}
return klass;
};
/*
* constant assign
*/
Opal.casgn = function(base_module, name, value) {
var scope = base_module._scope;
if (value._isClass && value._name === nil) {
value._name = name;
}
if (value._isClass) {
value._base_module = base_module;
}
scope.constants.push(name);
return scope[name] = value;
};
/*
* constant decl
*/
Opal.cdecl = function(base_scope, name, value) {
base_scope.constants.push(name);
return base_scope[name] = value;
};
/*
* constant get
*/
Opal.cget = function(base_scope, path) {
if (path == null) {
path = base_scope;
base_scope = Opal.Object;
}
var result = base_scope;
path = path.split('::');
while (path.length != 0) {
result = result.$const_get(path.shift());
}
return result;
}
/*
* When a source module is included into the target module, we must also copy
* its constants to the target.
*/
Opal.donate_constants = function(source_mod, target_mod) {
var source_constants = source_mod._scope.constants,
target_scope = target_mod._scope,
target_constants = target_scope.constants;
for (var i = 0, length = source_constants.length; i < length; i++) {
target_constants.push(source_constants[i]);
target_scope[source_constants[i]] = source_mod._scope[source_constants[i]];
}
};
/*
* Methods stubs are used to facilitate method_missing in opal. A stub is a
* placeholder function which just calls `method_missing` on the receiver.
* If no method with the given name is actually defined on an object, then it
* is obvious to say that the stub will be called instead, and then in turn
* method_missing will be called.
*
* When a file in ruby gets compiled to javascript, it includes a call to
* this function which adds stubs for every method name in the compiled file.
* It should then be safe to assume that method_missing will work for any
* method call detected.
*
* Method stubs are added to the BasicObject prototype, which every other
* ruby object inherits, so all objects should handle method missing. A stub
* is only added if the given property name (method name) is not already
* defined.
*
* Note: all ruby methods have a `$` prefix in javascript, so all stubs will
* have this prefix as well (to make this method more performant).
*
* Opal.add_stubs(["$foo", "$bar", "$baz="]);
*
* All stub functions will have a private `rb_stub` property set to true so
* that other internal methods can detect if a method is just a stub or not.
* `Kernel#respond_to?` uses this property to detect a methods presence.
*
* @param [Array] stubs an array of method stubs to add
*/
Opal.add_stubs = function(stubs) {
for (var i = 0, length = stubs.length; i < length; i++) {
var stub = stubs[i];
if (!BasicObject.prototype[stub]) {
BasicObject.prototype[stub] = true;
add_stub_for(BasicObject.prototype, stub);
}
}
};
/*
* Actuall add a method_missing stub function to the given prototype for the
* given name.
*
* @param [Prototype] prototype the target prototype
* @param [String] stub stub name to add (e.g. "$foo")
*/
function add_stub_for(prototype, stub) {
function method_missing_stub() {
// Copy any given block onto the method_missing dispatcher
this.$method_missing._p = method_missing_stub._p;
// Set block property to null ready for the next call (stop false-positives)
method_missing_stub._p = null;
// call method missing with correct args (remove '$' prefix on method name)
return this.$method_missing.apply(this, [stub.slice(1)].concat($slice.call(arguments)));
}
method_missing_stub.rb_stub = true;
prototype[stub] = method_missing_stub;
}
// Expose for other parts of Opal to use
Opal.add_stub_for = add_stub_for;
// Const missing dispatcher
Opal.cm = function(name) {
return this.base.$const_missing(name);
};
// Arity count error dispatcher
Opal.ac = function(actual, expected, object, meth) {
var inspect = (object._isClass ? object._name + '.' : object._klass._name + '#') + meth;
var msg = '[' + inspect + '] wrong number of arguments(' + actual + ' for ' + expected + ')';
throw Opal.ArgumentError.$new(msg);
};
// Super dispatcher
Opal.find_super_dispatcher = function(obj, jsid, current_func, iter, defs) {
var dispatcher;
if (defs) {
dispatcher = obj._isClass ? defs._super : obj._klass._proto;
}
else {
if (obj._isClass) {
dispatcher = obj._super;
}
else {
dispatcher = find_obj_super_dispatcher(obj, jsid, current_func);
}
}
dispatcher = dispatcher['$' + jsid];
dispatcher._p = iter;
return dispatcher;
};
// Iter dispatcher for super in a block
Opal.find_iter_super_dispatcher = function(obj, jsid, current_func, iter, defs) {
if (current_func._def) {
return Opal.find_super_dispatcher(obj, current_func._jsid, current_func, iter, defs);
}
else {
return Opal.find_super_dispatcher(obj, jsid, current_func, iter, defs);
}
};
var find_obj_super_dispatcher = function(obj, jsid, current_func) {
var klass = obj.__meta__ || obj._klass;
while (klass) {
if (klass._proto['$' + jsid] === current_func) {
// ok
break;
}
klass = klass.__parent;
}
// if we arent in a class, we couldnt find current?
if (!klass) {
throw new Error("could not find current class for super()");
}
klass = klass.__parent;
// else, let's find the next one
while (klass) {
var working = klass._proto['$' + jsid];
if (working && working !== current_func) {
// ok
break;
}
klass = klass.__parent;
}
return klass._proto;
};
/*
* Used to return as an expression. Sometimes, we can't simply return from
* a javascript function as if we were a method, as the return is used as
* an expression, or even inside a block which must "return" to the outer
* method. This helper simply throws an error which is then caught by the
* method. This approach is expensive, so it is only used when absolutely
* needed.
*/
Opal.$return = function(val) {
Opal.returner.$v = val;
throw Opal.returner;
};
// handles yield calls for 1 yielded arg
Opal.$yield1 = function(block, arg) {
if (typeof(block) !== "function") {
throw Opal.LocalJumpError.$new("no block given");
}
if (block.length > 1) {
if (arg._isArray) {
return block.apply(null, arg);
}
else {
return block(arg);
}
}
else {
return block(arg);
}
};
// handles yield for > 1 yielded arg
Opal.$yieldX = function(block, args) {
if (typeof(block) !== "function") {
throw Opal.LocalJumpError.$new("no block given");
}
if (block.length > 1 && args.length == 1) {
if (args[0]._isArray) {
return block.apply(null, args[0]);
}
}
if (!args._isArray) {
args = $slice.call(args);
}
return block.apply(null, args);
};
Opal.is_a = function(object, klass) {
if (object.__meta__ === klass) {
return true;
}
var search = object._klass;
while (search) {
if (search === klass) {
return true;
}
for (var i = 0, length = search.__inc__.length; i < length; i++) {
if (search.__inc__[i] == klass) {
return true;
}
}
search = search._super;
}
return false;
}
// Helper to convert the given object to an array
Opal.to_ary = function(value) {
if (value._isArray) {
return value;
}
else if (value.$to_ary && !value.$to_ary.rb_stub) {
return value.$to_ary();
}
return [value];
};
/*
Call a ruby method on a ruby object with some arguments:
var my_array = [1, 2, 3, 4]
Opal.send(my_array, 'length') # => 4
Opal.send(my_array, 'reverse!') # => [4, 3, 2, 1]
A missing method will be forwarded to the object via
method_missing.
The result of either call with be returned.
@param [Object] recv the ruby object
@param [String] mid ruby method to call
*/
Opal.send = function(recv, mid) {
var args = $slice.call(arguments, 2),
func = recv['$' + mid];
if (func) {
return func.apply(recv, args);
}
return recv.$method_missing.apply(recv, [mid].concat(args));
};
Opal.block_send = function(recv, mid, block) {
var args = $slice.call(arguments, 3),
func = recv['$' + mid];
if (func) {
func._p = block;
return func.apply(recv, args);
}
return recv.$method_missing.apply(recv, [mid].concat(args));
};
/**
* Donate methods for a class/module
*/
Opal.donate = function(klass, defined, indirect) {
var methods = klass._methods, included_in = klass.__dep__;
// if (!indirect) {
klass._methods = methods.concat(defined);
// }
if (included_in) {
for (var i = 0, length = included_in.length; i < length; i++) {
var includee = included_in[i];
var dest = includee._proto;
for (var j = 0, jj = defined.length; j < jj; j++) {
var method = defined[j];
dest[method] = klass._proto[method];
dest[method]._donated = true;
}
if (includee.__dep__) {
Opal.donate(includee, defined, true);
}
}
}
};
Opal.defn = function(obj, jsid, body) {
if (obj.__mod__) {
obj._proto[jsid] = body;
Opal.donate(obj, [jsid]);
}
else if (obj._isClass) {
obj._proto[jsid] = body;
if (obj === RubyBasicObject) {
define_basic_object_method(jsid, body);
}
else if (obj === RubyObject) {
Opal.donate(obj, [jsid]);
}
}
else {
obj[jsid] = body;
}
return nil;
};
/*
* Define a singleton method on the given object.
*/
Opal.defs = function(obj, jsid, body) {
if (obj._isClass || obj.__mod__) {
obj.constructor.prototype[jsid] = body;
}
else {
obj[jsid] = body;
}
};
function define_basic_object_method(jsid, body) {
RubyBasicObject._methods.push(jsid);
for (var i = 0, len = bridged_classes.length; i < len; i++) {
bridged_classes[i]._proto[jsid] = body;
}
}
Opal.hash = function() {
if (arguments.length == 1 && arguments[0]._klass == Opal.Hash) {
return arguments[0];
}
var hash = new Opal.Hash._alloc,
keys = [],
assocs = {};
hash.map = assocs;
hash.keys = keys;
if (arguments.length == 1) {
if (arguments[0]._isArray) {
var args = arguments[0];
for (var i = 0, length = args.length; i < length; i++) {
var key = args[i][0], obj = args[i][1];
if (assocs[key] == null) {
keys.push(key);
}
assocs[key] = obj;
}
}
else {
var obj = arguments[0];
for (var key in obj) {
assocs[key] = obj[key];
keys.push(key);
}
}
}
else {
for (var i = 0, length = arguments.length; i < length; i++) {
var key = arguments[i],
obj = arguments[++i];
if (assocs[key] == null) {
keys.push(key);
}
assocs[key] = obj;
}
}
return hash;
};
/*
* hash2 is a faster creator for hashes that just use symbols and
* strings as keys. The map and keys array can be constructed at
* compile time, so they are just added here by the constructor
* function
*/
Opal.hash2 = function(keys, map) {
var hash = new Opal.Hash._alloc;
hash.keys = keys;
hash.map = map;
return hash;
};
/*
* Create a new range instance with first and last values, and whether the
* range excludes the last value.
*/
Opal.range = function(first, last, exc) {
var range = new Opal.Range._alloc;
range.begin = first;
range.end = last;
range.exclude = exc;
return range;
};
Opal.loaded_features = [];
Opal.require_table = {};
Opal.require = function(path) {
if (Opal.require_table[path]) {
return false;
} else {
Opal.require_table[path] = true;
Opal.loaded_features.push(path);
Opal.modules[path](Opal);
return true;
}
};
Opal.modules = {'runtime.js': true}
// Initialization
// --------------
// Constructors for *instances* of core objects
boot_defclass('BasicObject', BasicObject);
boot_defclass('Object', Object, BasicObject);
boot_defclass('Module', Module, Object);
boot_defclass('Class', Class, Module);
// Constructors for *classes* of core objects
RubyBasicObject = boot_makemeta('BasicObject', BasicObject, Class);
RubyObject = boot_makemeta('Object', Object, RubyBasicObject.constructor);
RubyModule = boot_makemeta('Module', Module, RubyObject.constructor);
RubyClass = boot_makemeta('Class', Class, RubyModule.constructor);
// Fix booted classes to use their metaclass
RubyBasicObject._klass = RubyClass;
RubyObject._klass = RubyClass;
RubyModule._klass = RubyClass;
RubyClass._klass = RubyClass;
// Fix superclasses of booted classes
RubyBasicObject._super = null;
RubyObject._super = RubyBasicObject;
RubyModule._super = RubyObject;
RubyClass._super = RubyModule;
// Internally, Object acts like a module as it is "included" into bridged
// classes. In other words, we donate methods from Object into our bridged
// classes as their prototypes don't inherit from our root Object, so they
// act like module includes.
RubyObject.__dep__ = bridged_classes;
Opal.base = RubyObject;
RubyBasicObject._scope = RubyObject._scope = Opal;
RubyBasicObject._orig_scope = RubyObject._orig_scope = Opal;
Opal.Kernel = RubyObject;
RubyModule._scope = RubyObject._scope;
RubyClass._scope = RubyObject._scope;
RubyModule._orig_scope = RubyObject._orig_scope;
RubyClass._orig_scope = RubyObject._orig_scope;
RubyObject._proto.toString = function() {
return this.$to_s();
};
Opal.top = new RubyObject._alloc();
Opal.klass(RubyObject, RubyObject, 'NilClass', NilClass);
var nil = Opal.nil = new NilClass;
nil.call = nil.apply = function() { throw Opal.LocalJumpError.$new('no block given'); };
Opal.breaker = new Error('unexpected break');
Opal.returner = new Error('unexpected return');
bridge_class('Array', Array);
bridge_class('Boolean', Boolean);
bridge_class('Numeric', Number);
bridge_class('String', String);
bridge_class('Proc', Function);
bridge_class('Exception', Error);
bridge_class('Regexp', RegExp);
bridge_class('Time', Date);
TypeError._super = Error;
}).call(this);
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/helpers"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module;
$opal.add_stubs(['$new', '$class', '$===', '$respond_to?', '$raise', '$type_error', '$__send__', '$coerce_to', '$nil?', '$<=>', '$name', '$inspect']);
return (function($base) {
var self = $module($base, 'Opal');
var def = self._proto, $scope = self._scope;
$opal.defs(self, '$type_error', function(object, type, method, coerced) {
var $a, $b, self = this;
if (method == null) {
method = nil
}
if (coerced == null) {
coerced = nil
}
if ((($a = (($b = method !== false && method !== nil) ? coerced : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return $scope.TypeError.$new("can't convert " + (object.$class()) + " into " + (type) + " (" + (object.$class()) + "#" + (method) + " gives " + (coerced.$class()))
} else {
return $scope.TypeError.$new("no implicit conversion of " + (object.$class()) + " into " + (type))
};
});
$opal.defs(self, '$coerce_to', function(object, type, method) {
var $a, self = this;
if ((($a = type['$==='](object)) !== nil && (!$a._isBoolean || $a == true))) {
return object};
if ((($a = object['$respond_to?'](method)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise(self.$type_error(object, type))
};
return object.$__send__(method);
});
$opal.defs(self, '$coerce_to!', function(object, type, method) {
var $a, self = this, coerced = nil;
coerced = self.$coerce_to(object, type, method);
if ((($a = type['$==='](coerced)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise(self.$type_error(object, type, method, coerced))
};
return coerced;
});
$opal.defs(self, '$coerce_to?', function(object, type, method) {
var $a, self = this, coerced = nil;
if ((($a = object['$respond_to?'](method)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return nil
};
coerced = self.$coerce_to(object, type, method);
if ((($a = coerced['$nil?']()) !== nil && (!$a._isBoolean || $a == true))) {
return nil};
if ((($a = type['$==='](coerced)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise(self.$type_error(object, type, method, coerced))
};
return coerced;
});
$opal.defs(self, '$try_convert', function(object, type, method) {
var $a, self = this;
if ((($a = type['$==='](object)) !== nil && (!$a._isBoolean || $a == true))) {
return object};
if ((($a = object['$respond_to?'](method)) !== nil && (!$a._isBoolean || $a == true))) {
return object.$__send__(method)
} else {
return nil
};
});
$opal.defs(self, '$compare', function(a, b) {
var $a, self = this, compare = nil;
compare = a['$<=>'](b);
if ((($a = compare === nil) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "comparison of " + (a.$class().$name()) + " with " + (b.$class().$name()) + " failed")};
return compare;
});
$opal.defs(self, '$destructure', function(args) {
var self = this;
if (args.length == 1) {
return args[0];
}
else if (args._isArray) {
return args;
}
else {
return $slice.call(args);
}
});
$opal.defs(self, '$respond_to?', function(obj, method) {
var self = this;
if (obj == null || !obj._klass) {
return false;
}
return obj['$respond_to?'](method);
});
$opal.defs(self, '$inspect', function(obj) {
var self = this;
if (obj === undefined) {
return "undefined";
}
else if (obj === null) {
return "null";
}
else if (!obj._klass) {
return obj.toString();
}
else {
return obj.$inspect();
}
});
})(self)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/module"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$attr_reader', '$attr_writer', '$=~', '$raise', '$const_missing', '$to_str', '$to_proc', '$append_features', '$included', '$name', '$new', '$to_s']);
return (function($base, $super) {
function $Module(){};
var self = $Module = $klass($base, $super, 'Module', $Module);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4;
$opal.defs(self, '$new', TMP_1 = function() {
var self = this, $iter = TMP_1._p, block = $iter || nil;
TMP_1._p = null;
function AnonModule(){}
var klass = Opal.boot(Opal.Module, AnonModule);
klass._name = nil;
klass._klass = Opal.Module;
klass.__dep__ = []
klass.__mod__ = true;
klass._proto = {};
// inherit scope from parent
$opal.create_scope(Opal.Module._scope, klass);
if (block !== nil) {
var block_self = block._s;
block._s = null;
block.call(klass);
block._s = block_self;
}
return klass;
});
def['$==='] = function(object) {
var $a, self = this;
if ((($a = object == null) !== nil && (!$a._isBoolean || $a == true))) {
return false};
return $opal.is_a(object, self);
};
def['$<'] = function(other) {
var self = this;
var working = self;
while (working) {
if (working === other) {
return true;
}
working = working.__parent;
}
return false;
};
def.$alias_method = function(newname, oldname) {
var self = this;
self._proto['$' + newname] = self._proto['$' + oldname];
if (self._methods) {
$opal.donate(self, ['$' + newname ])
}
return self;
};
def.$alias_native = function(mid, jsid) {
var self = this;
if (jsid == null) {
jsid = mid
}
return self._proto['$' + mid] = self._proto[jsid];
};
def.$ancestors = function() {
var self = this;
var parent = self,
result = [];
while (parent) {
result.push(parent);
result = result.concat(parent.__inc__);
parent = parent._super;
}
return result;
};
def.$append_features = function(klass) {
var self = this;
var module = self,
included = klass.__inc__;
// check if this module is already included in the klass
for (var i = 0, length = included.length; i < length; i++) {
if (included[i] === module) {
return;
}
}
included.push(module);
module.__dep__.push(klass);
// iclass
var iclass = {
name: module._name,
_proto: module._proto,
__parent: klass.__parent,
__iclass: true
};
klass.__parent = iclass;
var donator = module._proto,
prototype = klass._proto,
methods = module._methods;
for (var i = 0, length = methods.length; i < length; i++) {
var method = methods[i];
if (prototype.hasOwnProperty(method) && !prototype[method]._donated) {
// if the target class already has a method of the same name defined
// and that method was NOT donated, then it must be a method defined
// by the class so we do not want to override it
}
else {
prototype[method] = donator[method];
prototype[method]._donated = true;
}
}
if (klass.__dep__) {
$opal.donate(klass, methods.slice(), true);
}
$opal.donate_constants(module, klass);
return self;
};
def.$attr_accessor = function(names) {
var $a, $b, self = this;
names = $slice.call(arguments, 0);
($a = self).$attr_reader.apply($a, [].concat(names));
return ($b = self).$attr_writer.apply($b, [].concat(names));
};
def.$attr_reader = function(names) {
var self = this;
names = $slice.call(arguments, 0);
var proto = self._proto, cls = self;
for (var i = 0, length = names.length; i < length; i++) {
(function(name) {
proto[name] = nil;
var func = function() { return this[name] };
if (cls._isSingleton) {
proto.constructor.prototype['$' + name] = func;
}
else {
proto['$' + name] = func;
$opal.donate(self, ['$' + name ]);
}
})(names[i]);
}
return nil;
};
def.$attr_writer = function(names) {
var self = this;
names = $slice.call(arguments, 0);
var proto = self._proto, cls = self;
for (var i = 0, length = names.length; i < length; i++) {
(function(name) {
proto[name] = nil;
var func = function(value) { return this[name] = value; };
if (cls._isSingleton) {
proto.constructor.prototype['$' + name + '='] = func;
}
else {
proto['$' + name + '='] = func;
$opal.donate(self, ['$' + name + '=']);
}
})(names[i]);
}
return nil;
};
$opal.defn(self, '$attr', def.$attr_accessor);
def.$constants = function() {
var self = this;
return self._scope.constants;
};
def['$const_defined?'] = function(name, inherit) {
var $a, self = this;
if (inherit == null) {
inherit = true
}
if ((($a = name['$=~'](/^[A-Z]\w*$/)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.NameError, "wrong constant name " + (name))
};
scopes = [self._scope];
if (inherit || self === Opal.Object) {
var parent = self._super;
while (parent !== Opal.BasicObject) {
scopes.push(parent._scope);
parent = parent._super;
}
}
for (var i = 0, len = scopes.length; i < len; i++) {
if (scopes[i].hasOwnProperty(name)) {
return true;
}
}
return false;
};
def.$const_get = function(name, inherit) {
var $a, self = this;
if (inherit == null) {
inherit = true
}
if ((($a = name['$=~'](/^[A-Z]\w*$/)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.NameError, "wrong constant name " + (name))
};
var scopes = [self._scope];
if (inherit || self == Opal.Object) {
var parent = self._super;
while (parent !== Opal.BasicObject) {
scopes.push(parent._scope);
parent = parent._super;
}
}
for (var i = 0, len = scopes.length; i < len; i++) {
if (scopes[i].hasOwnProperty(name)) {
return scopes[i][name];
}
}
return self.$const_missing(name);
};
def.$const_missing = function(const$) {
var self = this, name = nil;
name = self._name;
return self.$raise($scope.NameError, "uninitialized constant " + (name) + "::" + (const$));
};
def.$const_set = function(name, value) {
var $a, self = this;
if ((($a = name['$=~'](/^[A-Z]\w*$/)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.NameError, "wrong constant name " + (name))
};
try {
name = name.$to_str()
} catch ($err) {if (true) {
self.$raise($scope.TypeError, "conversion with #to_str failed")
}else { throw $err; }
};
$opal.casgn(self, name, value);
return value
;
};
def.$define_method = TMP_2 = function(name, method) {
var self = this, $iter = TMP_2._p, block = $iter || nil;
TMP_2._p = null;
if (method) {
block = method.$to_proc();
}
if (block === nil) {
throw new Error("no block given");
}
var jsid = '$' + name;
block._jsid = name;
block._s = null;
block._def = block;
self._proto[jsid] = block;
$opal.donate(self, [jsid]);
return name;
;
};
def.$remove_method = function(name) {
var self = this;
var jsid = '$' + name;
var current = self._proto[jsid];
delete self._proto[jsid];
// Check if we need to reverse $opal.donate
// $opal.retire(self, [jsid]);
return self;
};
def.$include = function(mods) {
var self = this;
mods = $slice.call(arguments, 0);
for (var i = mods.length - 1; i >= 0; i--) {
var mod = mods[i];
if (mod === self) {
continue;
}
(mod).$append_features(self);
(mod).$included(self);
}
return self;
};
def.$instance_method = function(name) {
var self = this;
var meth = self._proto['$' + name];
if (!meth || meth.rb_stub) {
self.$raise($scope.NameError, "undefined method `" + (name) + "' for class `" + (self.$name()) + "'");
}
return $scope.UnboundMethod.$new(self, meth, name);
};
def.$instance_methods = function(include_super) {
var self = this;
if (include_super == null) {
include_super = false
}
var methods = [], proto = self._proto;
for (var prop in self._proto) {
if (!include_super && !proto.hasOwnProperty(prop)) {
continue;
}
if (!include_super && proto[prop]._donated) {
continue;
}
if (prop.charAt(0) === '$') {
methods.push(prop.substr(1));
}
}
return methods;
};
def.$included = function(mod) {
var self = this;
return nil;
};
def.$extended = function(mod) {
var self = this;
return nil;
};
def.$module_eval = TMP_3 = function() {
var self = this, $iter = TMP_3._p, block = $iter || nil;
TMP_3._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "no block given")
};
var old = block._s,
result;
block._s = null;
result = block.call(self);
block._s = old;
return result;
};
$opal.defn(self, '$class_eval', def.$module_eval);
def.$module_exec = TMP_4 = function() {
var self = this, $iter = TMP_4._p, block = $iter || nil;
TMP_4._p = null;
if (block === nil) {
throw new Error("no block given");
}
var block_self = block._s, result;
block._s = null;
result = block.apply(self, $slice.call(arguments));
block._s = block_self;
return result;
};
$opal.defn(self, '$class_exec', def.$module_exec);
def['$method_defined?'] = function(method) {
var self = this;
var body = self._proto['$' + method];
return (!!body) && !body.rb_stub;
};
def.$module_function = function(methods) {
var self = this;
methods = $slice.call(arguments, 0);
for (var i = 0, length = methods.length; i < length; i++) {
var meth = methods[i], func = self._proto['$' + meth];
self.constructor.prototype['$' + meth] = func;
}
return self;
};
def.$name = function() {
var self = this;
if (self._full_name) {
return self._full_name;
}
var result = [], base = self;
while (base) {
if (base._name === nil) {
return result.length === 0 ? nil : result.join('::');
}
result.unshift(base._name);
base = base._base_module;
if (base === $opal.Object) {
break;
}
}
if (result.length === 0) {
return nil;
}
return self._full_name = result.join('::');
};
def.$public = function() {
var self = this;
return nil;
};
def.$private_class_method = function(name) {
var self = this;
return self['$' + name] || nil;
};
$opal.defn(self, '$private', def.$public);
$opal.defn(self, '$protected', def.$public);
def['$private_method_defined?'] = function(obj) {
var self = this;
return false;
};
def.$private_constant = function() {
var self = this;
return nil;
};
$opal.defn(self, '$protected_method_defined?', def['$private_method_defined?']);
$opal.defn(self, '$public_instance_methods', def.$instance_methods);
$opal.defn(self, '$public_method_defined?', def['$method_defined?']);
def.$remove_class_variable = function() {
var self = this;
return nil;
};
def.$remove_const = function(name) {
var self = this;
var old = self._scope[name];
delete self._scope[name];
return old;
};
def.$to_s = function() {
var self = this;
return self.$name().$to_s();
};
return (def.$undef_method = function(symbol) {
var self = this;
$opal.add_stub_for(self._proto, "$" + symbol);
return self;
}, nil) && 'undef_method';
})(self, null)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/class"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$require', '$raise', '$allocate']);
self.$require("corelib/module");
return (function($base, $super) {
function $Class(){};
var self = $Class = $klass($base, $super, 'Class', $Class);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2;
$opal.defs(self, '$new', TMP_1 = function(sup) {
var self = this, $iter = TMP_1._p, block = $iter || nil;
if (sup == null) {
sup = $scope.Object
}
TMP_1._p = null;
if (!sup._isClass || sup.__mod__) {
self.$raise($scope.TypeError, "superclass must be a Class");
}
function AnonClass(){};
var klass = Opal.boot(sup, AnonClass)
klass._name = nil;
klass.__parent = sup;
// inherit scope from parent
$opal.create_scope(sup._scope, klass);
sup.$inherited(klass);
if (block !== nil) {
var block_self = block._s;
block._s = null;
block.call(klass);
block._s = block_self;
}
return klass;
;
});
def.$allocate = function() {
var self = this;
var obj = new self._alloc;
obj._id = Opal.uid();
return obj;
};
def.$inherited = function(cls) {
var self = this;
return nil;
};
def.$new = TMP_2 = function(args) {
var self = this, $iter = TMP_2._p, block = $iter || nil;
args = $slice.call(arguments, 0);
TMP_2._p = null;
var obj = self.$allocate();
obj.$initialize._p = block;
obj.$initialize.apply(obj, args);
return obj;
;
};
return (def.$superclass = function() {
var self = this;
return self._super || nil;
}, nil) && 'superclass';
})(self, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/basic_object"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$raise']);
return (function($base, $super) {
function $BasicObject(){};
var self = $BasicObject = $klass($base, $super, 'BasicObject', $BasicObject);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4;
$opal.defn(self, '$initialize', function() {
var self = this;
return nil;
});
$opal.defn(self, '$==', function(other) {
var self = this;
return self === other;
});
$opal.defn(self, '$__id__', function() {
var self = this;
return self._id || (self._id = Opal.uid());
});
$opal.defn(self, '$__send__', TMP_1 = function(symbol, args) {
var self = this, $iter = TMP_1._p, block = $iter || nil;
args = $slice.call(arguments, 1);
TMP_1._p = null;
var func = self['$' + symbol]
if (func) {
if (block !== nil) {
func._p = block;
}
return func.apply(self, args);
}
if (block !== nil) {
self.$method_missing._p = block;
}
return self.$method_missing.apply(self, [symbol].concat(args));
});
$opal.defn(self, '$!', function() {
var self = this;
return false;
});
$opal.defn(self, '$eql?', def['$==']);
$opal.defn(self, '$equal?', def['$==']);
$opal.defn(self, '$instance_eval', TMP_2 = function() {
var self = this, $iter = TMP_2._p, block = $iter || nil;
TMP_2._p = null;
if (block !== false && block !== nil) {
} else {
$scope.Kernel.$raise($scope.ArgumentError, "no block given")
};
var old = block._s,
result;
block._s = null;
result = block.call(self, self);
block._s = old;
return result;
});
$opal.defn(self, '$instance_exec', TMP_3 = function(args) {
var self = this, $iter = TMP_3._p, block = $iter || nil;
args = $slice.call(arguments, 0);
TMP_3._p = null;
if (block !== false && block !== nil) {
} else {
$scope.Kernel.$raise($scope.ArgumentError, "no block given")
};
var block_self = block._s,
result;
block._s = null;
result = block.apply(self, args);
block._s = block_self;
return result;
});
return ($opal.defn(self, '$method_missing', TMP_4 = function(symbol, args) {
var self = this, $iter = TMP_4._p, block = $iter || nil;
args = $slice.call(arguments, 1);
TMP_4._p = null;
return $scope.Kernel.$raise($scope.NoMethodError, "undefined method `" + (symbol) + "' for BasicObject instance");
}), nil) && 'method_missing';
})(self, null)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/kernel"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module, $gvars = $opal.gvars;
$opal.add_stubs(['$raise', '$inspect', '$==', '$name', '$class', '$new', '$respond_to?', '$to_ary', '$to_a', '$allocate', '$copy_instance_variables', '$initialize_clone', '$initialize_copy', '$singleton_class', '$initialize_dup', '$for', '$to_proc', '$append_features', '$extended', '$to_i', '$to_s', '$to_f', '$*', '$===', '$empty?', '$ArgumentError', '$nan?', '$infinite?', '$to_int', '$>', '$length', '$print', '$format', '$puts', '$each', '$<=', '$[]', '$nil?', '$is_a?', '$rand', '$coerce_to', '$respond_to_missing?']);
return (function($base) {
var self = $module($base, 'Kernel');
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_9;
def.$method_missing = TMP_1 = function(symbol, args) {
var self = this, $iter = TMP_1._p, block = $iter || nil;
args = $slice.call(arguments, 1);
TMP_1._p = null;
return self.$raise($scope.NoMethodError, "undefined method `" + (symbol) + "' for " + (self.$inspect()));
};
def['$=~'] = function(obj) {
var self = this;
return false;
};
def['$==='] = function(other) {
var self = this;
return self['$=='](other);
};
def['$<=>'] = function(other) {
var self = this;
if (self['$=='](other)) {
return 0;
}
return nil;
;
};
def.$method = function(name) {
var self = this;
var meth = self['$' + name];
if (!meth || meth.rb_stub) {
self.$raise($scope.NameError, "undefined method `" + (name) + "' for class `" + (self.$class().$name()) + "'");
}
return $scope.Method.$new(self, meth, name);
};
def.$methods = function(all) {
var self = this;
if (all == null) {
all = true
}
var methods = [];
for (var key in self) {
if (key[0] == "$" && typeof(self[key]) === "function") {
if (all == false || all === nil) {
if (!$opal.hasOwnProperty.call(self, key)) {
continue;
}
}
methods.push(key.substr(1));
}
}
return methods;
};
def.$Array = TMP_2 = function(object, args) {
var self = this, $iter = TMP_2._p, block = $iter || nil;
args = $slice.call(arguments, 1);
TMP_2._p = null;
if (object == null || object === nil) {
return [];
}
else if (object['$respond_to?']("to_ary")) {
return object.$to_ary();
}
else if (object['$respond_to?']("to_a")) {
return object.$to_a();
}
else {
return [object];
}
;
};
def.$caller = function() {
var self = this;
return [];
};
def.$class = function() {
var self = this;
return self._klass;
};
def.$copy_instance_variables = function(other) {
var self = this;
for (var name in other) {
if (name.charAt(0) !== '$') {
if (name !== '_id' && name !== '_klass') {
self[name] = other[name];
}
}
}
};
def.$clone = function() {
var self = this, copy = nil;
copy = self.$class().$allocate();
copy.$copy_instance_variables(self);
copy.$initialize_clone(self);
return copy;
};
def.$initialize_clone = function(other) {
var self = this;
return self.$initialize_copy(other);
};
def.$define_singleton_method = TMP_3 = function(name) {
var self = this, $iter = TMP_3._p, body = $iter || nil;
TMP_3._p = null;
if (body !== false && body !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to create Proc object without a block")
};
var jsid = '$' + name;
body._jsid = name;
body._s = null;
body._def = body;
self.$singleton_class()._proto[jsid] = body;
return self;
};
def.$dup = function() {
var self = this, copy = nil;
copy = self.$class().$allocate();
copy.$copy_instance_variables(self);
copy.$initialize_dup(self);
return copy;
};
def.$initialize_dup = function(other) {
var self = this;
return self.$initialize_copy(other);
};
def.$enum_for = TMP_4 = function(method, args) {
var $a, $b, self = this, $iter = TMP_4._p, block = $iter || nil;
args = $slice.call(arguments, 1);
if (method == null) {
method = "each"
}
TMP_4._p = null;
return ($a = ($b = $scope.Enumerator).$for, $a._p = block.$to_proc(), $a).apply($b, [self, method].concat(args));
};
def['$equal?'] = function(other) {
var self = this;
return self === other;
};
def.$extend = function(mods) {
var self = this;
mods = $slice.call(arguments, 0);
var singleton = self.$singleton_class();
for (var i = mods.length - 1; i >= 0; i--) {
var mod = mods[i];
(mod).$append_features(singleton);
(mod).$extended(self);
}
;
return self;
};
def.$format = function(format, args) {
var self = this;
args = $slice.call(arguments, 1);
var idx = 0;
return format.replace(/%(\d+\$)?([-+ 0]*)(\d*|\*(\d+\$)?)(?:\.(\d*|\*(\d+\$)?))?([cspdiubBoxXfgeEG])|(%%)/g, function(str, idx_str, flags, width_str, w_idx_str, prec_str, p_idx_str, spec, escaped) {
if (escaped) {
return '%';
}
var width,
prec,
is_integer_spec = ("diubBoxX".indexOf(spec) != -1),
is_float_spec = ("eEfgG".indexOf(spec) != -1),
prefix = '',
obj;
if (width_str === undefined) {
width = undefined;
} else if (width_str.charAt(0) == '*') {
var w_idx = idx++;
if (w_idx_str) {
w_idx = parseInt(w_idx_str, 10) - 1;
}
width = (args[w_idx]).$to_i();
} else {
width = parseInt(width_str, 10);
}
if (!prec_str) {
prec = is_float_spec ? 6 : undefined;
} else if (prec_str.charAt(0) == '*') {
var p_idx = idx++;
if (p_idx_str) {
p_idx = parseInt(p_idx_str, 10) - 1;
}
prec = (args[p_idx]).$to_i();
} else {
prec = parseInt(prec_str, 10);
}
if (idx_str) {
idx = parseInt(idx_str, 10) - 1;
}
switch (spec) {
case 'c':
obj = args[idx];
if (obj._isString) {
str = obj.charAt(0);
} else {
str = String.fromCharCode((obj).$to_i());
}
break;
case 's':
str = (args[idx]).$to_s();
if (prec !== undefined) {
str = str.substr(0, prec);
}
break;
case 'p':
str = (args[idx]).$inspect();
if (prec !== undefined) {
str = str.substr(0, prec);
}
break;
case 'd':
case 'i':
case 'u':
str = (args[idx]).$to_i().toString();
break;
case 'b':
case 'B':
str = (args[idx]).$to_i().toString(2);
break;
case 'o':
str = (args[idx]).$to_i().toString(8);
break;
case 'x':
case 'X':
str = (args[idx]).$to_i().toString(16);
break;
case 'e':
case 'E':
str = (args[idx]).$to_f().toExponential(prec);
break;
case 'f':
str = (args[idx]).$to_f().toFixed(prec);
break;
case 'g':
case 'G':
str = (args[idx]).$to_f().toPrecision(prec);
break;
}
idx++;
if (is_integer_spec || is_float_spec) {
if (str.charAt(0) == '-') {
prefix = '-';
str = str.substr(1);
} else {
if (flags.indexOf('+') != -1) {
prefix = '+';
} else if (flags.indexOf(' ') != -1) {
prefix = ' ';
}
}
}
if (is_integer_spec && prec !== undefined) {
if (str.length < prec) {
str = "0"['$*'](prec - str.length) + str;
}
}
var total_len = prefix.length + str.length;
if (width !== undefined && total_len < width) {
if (flags.indexOf('-') != -1) {
str = str + " "['$*'](width - total_len);
} else {
var pad_char = ' ';
if (flags.indexOf('0') != -1) {
str = "0"['$*'](width - total_len) + str;
} else {
prefix = " "['$*'](width - total_len) + prefix;
}
}
}
var result = prefix + str;
if ('XEG'.indexOf(spec) != -1) {
result = result.toUpperCase();
}
return result;
});
};
def.$hash = function() {
var self = this;
return self._id;
};
def.$initialize_copy = function(other) {
var self = this;
return nil;
};
def.$inspect = function() {
var self = this;
return self.$to_s();
};
def['$instance_of?'] = function(klass) {
var self = this;
return self._klass === klass;
};
def['$instance_variable_defined?'] = function(name) {
var self = this;
return $opal.hasOwnProperty.call(self, name.substr(1));
};
def.$instance_variable_get = function(name) {
var self = this;
var ivar = self[name.substr(1)];
return ivar == null ? nil : ivar;
};
def.$instance_variable_set = function(name, value) {
var self = this;
return self[name.substr(1)] = value;
};
def.$instance_variables = function() {
var self = this;
var result = [];
for (var name in self) {
if (name.charAt(0) !== '$') {
if (name !== '_klass' && name !== '_id') {
result.push('@' + name);
}
}
}
return result;
};
def.$Integer = function(value, base) {
var $a, $b, self = this, $case = nil;
if (base == null) {
base = nil
}
if ((($a = $scope.String['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) {
if ((($a = value['$empty?']()) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "invalid value for Integer: (empty string)")};
return parseInt(value, ((($a = base) !== false && $a !== nil) ? $a : undefined));};
if (base !== false && base !== nil) {
self.$raise(self.$ArgumentError("base is only valid for String values"))};
return (function() {$case = value;if ($scope.Integer['$===']($case)) {return value}else if ($scope.Float['$===']($case)) {if ((($a = ((($b = value['$nan?']()) !== false && $b !== nil) ? $b : value['$infinite?']())) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.FloatDomainError, "unable to coerce " + (value) + " to Integer")};
return value.$to_int();}else if ($scope.NilClass['$===']($case)) {return self.$raise($scope.TypeError, "can't convert nil into Integer")}else {if ((($a = value['$respond_to?']("to_int")) !== nil && (!$a._isBoolean || $a == true))) {
return value.$to_int()
} else if ((($a = value['$respond_to?']("to_i")) !== nil && (!$a._isBoolean || $a == true))) {
return value.$to_i()
} else {
return self.$raise($scope.TypeError, "can't convert " + (value.$class()) + " into Integer")
}}})();
};
def.$Float = function(value) {
var $a, self = this;
if ((($a = $scope.String['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) {
return parseFloat(value);
} else if ((($a = value['$respond_to?']("to_f")) !== nil && (!$a._isBoolean || $a == true))) {
return value.$to_f()
} else {
return self.$raise($scope.TypeError, "can't convert " + (value.$class()) + " into Float")
};
};
def['$is_a?'] = function(klass) {
var self = this;
return $opal.is_a(self, klass);
};
$opal.defn(self, '$kind_of?', def['$is_a?']);
def.$lambda = TMP_5 = function() {
var self = this, $iter = TMP_5._p, block = $iter || nil;
TMP_5._p = null;
block.is_lambda = true;
return block;
};
def.$loop = TMP_6 = function() {
var self = this, $iter = TMP_6._p, block = $iter || nil;
TMP_6._p = null;
while (true) {
if (block() === $breaker) {
return $breaker.$v;
}
}
return self;
};
def['$nil?'] = function() {
var self = this;
return false;
};
$opal.defn(self, '$object_id', def.$__id__);
def.$printf = function(args) {
var $a, self = this;
args = $slice.call(arguments, 0);
if (args.$length()['$>'](0)) {
self.$print(($a = self).$format.apply($a, [].concat(args)))};
return nil;
};
def.$private_methods = function() {
var self = this;
return [];
};
def.$proc = TMP_7 = function() {
var self = this, $iter = TMP_7._p, block = $iter || nil;
TMP_7._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to create Proc object without a block")
};
block.is_lambda = false;
return block;
};
def.$puts = function(strs) {
var $a, self = this;
if ($gvars.stdout == null) $gvars.stdout = nil;
strs = $slice.call(arguments, 0);
return ($a = $gvars.stdout).$puts.apply($a, [].concat(strs));
};
def.$p = function(args) {
var $a, $b, TMP_8, self = this;
args = $slice.call(arguments, 0);
($a = ($b = args).$each, $a._p = (TMP_8 = function(obj){var self = TMP_8._s || this;
if ($gvars.stdout == null) $gvars.stdout = nil;
if (obj == null) obj = nil;
return $gvars.stdout.$puts(obj.$inspect())}, TMP_8._s = self, TMP_8), $a).call($b);
if (args.$length()['$<='](1)) {
return args['$[]'](0)
} else {
return args
};
};
def.$print = function(strs) {
var $a, self = this;
if ($gvars.stdout == null) $gvars.stdout = nil;
strs = $slice.call(arguments, 0);
return ($a = $gvars.stdout).$print.apply($a, [].concat(strs));
};
def.$warn = function(strs) {
var $a, $b, self = this;
if ($gvars.VERBOSE == null) $gvars.VERBOSE = nil;
if ($gvars.stderr == null) $gvars.stderr = nil;
strs = $slice.call(arguments, 0);
if ((($a = ((($b = $gvars.VERBOSE['$nil?']()) !== false && $b !== nil) ? $b : strs['$empty?']())) !== nil && (!$a._isBoolean || $a == true))) {
} else {
($a = $gvars.stderr).$puts.apply($a, [].concat(strs))
};
return nil;
};
def.$raise = function(exception, string) {
var self = this;
if ($gvars["!"] == null) $gvars["!"] = nil;
if (exception == null && $gvars["!"]) {
exception = $gvars["!"];
}
else if (exception._isString) {
exception = $scope.RuntimeError.$new(exception);
}
else if (!exception['$is_a?']($scope.Exception)) {
exception = exception.$new(string);
}
throw exception;
;
};
$opal.defn(self, '$fail', def.$raise);
def.$rand = function(max) {
var self = this;
if (max === undefined) {
return Math.random();
}
else if (max._isRange) {
var arr = max.$to_a();
return arr[self.$rand(arr.length)];
}
else {
return Math.floor(Math.random() *
Math.abs($scope.Opal.$coerce_to(max, $scope.Integer, "to_int")));
}
};
$opal.defn(self, '$srand', def.$rand);
def['$respond_to?'] = function(name, include_all) {
var $a, self = this;
if (include_all == null) {
include_all = false
}
if ((($a = self['$respond_to_missing?'](name)) !== nil && (!$a._isBoolean || $a == true))) {
return true};
var body = self['$' + name];
if (typeof(body) === "function" && !body.rb_stub) {
return true;
}
return false;
};
$opal.defn(self, '$send', def.$__send__);
$opal.defn(self, '$public_send', def.$__send__);
def.$singleton_class = function() {
var self = this;
if (self._isClass) {
if (self.__meta__) {
return self.__meta__;
}
var meta = new $opal.Class._alloc;
meta._klass = $opal.Class;
self.__meta__ = meta;
// FIXME - is this right? (probably - methods defined on
// class' singleton should also go to subclasses?)
meta._proto = self.constructor.prototype;
meta._isSingleton = true;
meta.__inc__ = [];
meta._methods = [];
meta._scope = self._scope;
return meta;
}
if (self._isClass) {
return self._klass;
}
if (self.__meta__) {
return self.__meta__;
}
else {
var orig_class = self._klass,
class_id = "#<Class:#<" + orig_class._name + ":" + orig_class._id + ">>";
var Singleton = function () {};
var meta = Opal.boot(orig_class, Singleton);
meta._name = class_id;
meta._proto = self;
self.__meta__ = meta;
meta._klass = orig_class._klass;
meta._scope = orig_class._scope;
meta.__parent = orig_class;
return meta;
}
};
$opal.defn(self, '$sprintf', def.$format);
def.$String = function(str) {
var self = this;
return String(str);
};
def.$tap = TMP_9 = function() {
var self = this, $iter = TMP_9._p, block = $iter || nil;
TMP_9._p = null;
if ($opal.$yield1(block, self) === $breaker) return $breaker.$v;
return self;
};
def.$to_proc = function() {
var self = this;
return self;
};
def.$to_s = function() {
var self = this;
return "#<" + self.$class().$name() + ":" + self._id + ">";
};
def.$freeze = function() {
var self = this;
self.___frozen___ = true;
return self;
};
def['$frozen?'] = function() {
var $a, self = this;
if (self.___frozen___ == null) self.___frozen___ = nil;
return ((($a = self.___frozen___) !== false && $a !== nil) ? $a : false);
};
def['$respond_to_missing?'] = function(method_name) {
var self = this;
return false;
};
def.$require = function(file) {
var self = this;
return $opal.require(file.$to_s());
};
;$opal.donate(self, ["$method_missing", "$=~", "$===", "$<=>", "$method", "$methods", "$Array", "$caller", "$class", "$copy_instance_variables", "$clone", "$initialize_clone", "$define_singleton_method", "$dup", "$initialize_dup", "$enum_for", "$equal?", "$extend", "$format", "$hash", "$initialize_copy", "$inspect", "$instance_of?", "$instance_variable_defined?", "$instance_variable_get", "$instance_variable_set", "$instance_variables", "$Integer", "$Float", "$is_a?", "$kind_of?", "$lambda", "$loop", "$nil?", "$object_id", "$printf", "$private_methods", "$proc", "$puts", "$p", "$print", "$warn", "$raise", "$fail", "$rand", "$srand", "$respond_to?", "$send", "$public_send", "$singleton_class", "$sprintf", "$String", "$tap", "$to_proc", "$to_s", "$freeze", "$frozen?", "$respond_to_missing?", "$require"]);
})(self)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/nil_class"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$raise']);
(function($base, $super) {
function $NilClass(){};
var self = $NilClass = $klass($base, $super, 'NilClass', $NilClass);
var def = self._proto, $scope = self._scope;
def['$!'] = function() {
var self = this;
return true;
};
def['$&'] = function(other) {
var self = this;
return false;
};
def['$|'] = function(other) {
var self = this;
return other !== false && other !== nil;
};
def['$^'] = function(other) {
var self = this;
return other !== false && other !== nil;
};
def['$=='] = function(other) {
var self = this;
return other === nil;
};
def.$dup = function() {
var self = this;
return self.$raise($scope.TypeError);
};
def.$inspect = function() {
var self = this;
return "nil";
};
def['$nil?'] = function() {
var self = this;
return true;
};
def.$singleton_class = function() {
var self = this;
return $scope.NilClass;
};
def.$to_a = function() {
var self = this;
return [];
};
def.$to_h = function() {
var self = this;
return $opal.hash();
};
def.$to_i = function() {
var self = this;
return 0;
};
$opal.defn(self, '$to_f', def.$to_i);
def.$to_s = function() {
var self = this;
return "";
};
def.$object_id = function() {
var self = this;
return $scope.NilClass._id || ($scope.NilClass._id = $opal.uid());
};
return $opal.defn(self, '$hash', def.$object_id);
})(self, null);
return $opal.cdecl($scope, 'NIL', nil);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/boolean"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$undef_method']);
(function($base, $super) {
function $Boolean(){};
var self = $Boolean = $klass($base, $super, 'Boolean', $Boolean);
var def = self._proto, $scope = self._scope;
def._isBoolean = true;
(function(self) {
var $scope = self._scope, def = self._proto;
return self.$undef_method("new")
})(self.$singleton_class());
def['$!'] = function() {
var self = this;
return self != true;
};
def['$&'] = function(other) {
var self = this;
return (self == true) ? (other !== false && other !== nil) : false;
};
def['$|'] = function(other) {
var self = this;
return (self == true) ? true : (other !== false && other !== nil);
};
def['$^'] = function(other) {
var self = this;
return (self == true) ? (other === false || other === nil) : (other !== false && other !== nil);
};
def['$=='] = function(other) {
var self = this;
return (self == true) === other.valueOf();
};
$opal.defn(self, '$equal?', def['$==']);
$opal.defn(self, '$singleton_class', def.$class);
return (def.$to_s = function() {
var self = this;
return (self == true) ? 'true' : 'false';
}, nil) && 'to_s';
})(self, null);
$opal.cdecl($scope, 'TrueClass', $scope.Boolean);
$opal.cdecl($scope, 'FalseClass', $scope.Boolean);
$opal.cdecl($scope, 'TRUE', true);
return $opal.cdecl($scope, 'FALSE', false);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/error"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $module = $opal.module;
$opal.add_stubs(['$attr_reader', '$name', '$class']);
(function($base, $super) {
function $Exception(){};
var self = $Exception = $klass($base, $super, 'Exception', $Exception);
var def = self._proto, $scope = self._scope;
def.message = nil;
self.$attr_reader("message");
$opal.defs(self, '$new', function(message) {
var self = this;
if (message == null) {
message = ""
}
var err = new Error(message);
err._klass = self;
err.name = self._name;
return err;
});
def.$backtrace = function() {
var self = this;
var backtrace = self.stack;
if (typeof(backtrace) === 'string') {
return backtrace.split("\n").slice(0, 15);
}
else if (backtrace) {
return backtrace.slice(0, 15);
}
return [];
};
def.$inspect = function() {
var self = this;
return "#<" + (self.$class().$name()) + ": '" + (self.message) + "'>";
};
return $opal.defn(self, '$to_s', def.$message);
})(self, null);
(function($base, $super) {
function $ScriptError(){};
var self = $ScriptError = $klass($base, $super, 'ScriptError', $ScriptError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.Exception);
(function($base, $super) {
function $SyntaxError(){};
var self = $SyntaxError = $klass($base, $super, 'SyntaxError', $SyntaxError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.ScriptError);
(function($base, $super) {
function $LoadError(){};
var self = $LoadError = $klass($base, $super, 'LoadError', $LoadError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.ScriptError);
(function($base, $super) {
function $NotImplementedError(){};
var self = $NotImplementedError = $klass($base, $super, 'NotImplementedError', $NotImplementedError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.ScriptError);
(function($base, $super) {
function $SystemExit(){};
var self = $SystemExit = $klass($base, $super, 'SystemExit', $SystemExit);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.Exception);
(function($base, $super) {
function $StandardError(){};
var self = $StandardError = $klass($base, $super, 'StandardError', $StandardError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.Exception);
(function($base, $super) {
function $NameError(){};
var self = $NameError = $klass($base, $super, 'NameError', $NameError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
(function($base, $super) {
function $NoMethodError(){};
var self = $NoMethodError = $klass($base, $super, 'NoMethodError', $NoMethodError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.NameError);
(function($base, $super) {
function $RuntimeError(){};
var self = $RuntimeError = $klass($base, $super, 'RuntimeError', $RuntimeError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
(function($base, $super) {
function $LocalJumpError(){};
var self = $LocalJumpError = $klass($base, $super, 'LocalJumpError', $LocalJumpError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
(function($base, $super) {
function $TypeError(){};
var self = $TypeError = $klass($base, $super, 'TypeError', $TypeError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
(function($base, $super) {
function $ArgumentError(){};
var self = $ArgumentError = $klass($base, $super, 'ArgumentError', $ArgumentError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
(function($base, $super) {
function $IndexError(){};
var self = $IndexError = $klass($base, $super, 'IndexError', $IndexError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
(function($base, $super) {
function $StopIteration(){};
var self = $StopIteration = $klass($base, $super, 'StopIteration', $StopIteration);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.IndexError);
(function($base, $super) {
function $KeyError(){};
var self = $KeyError = $klass($base, $super, 'KeyError', $KeyError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.IndexError);
(function($base, $super) {
function $RangeError(){};
var self = $RangeError = $klass($base, $super, 'RangeError', $RangeError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
(function($base, $super) {
function $FloatDomainError(){};
var self = $FloatDomainError = $klass($base, $super, 'FloatDomainError', $FloatDomainError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.RangeError);
(function($base, $super) {
function $IOError(){};
var self = $IOError = $klass($base, $super, 'IOError', $IOError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
(function($base, $super) {
function $SystemCallError(){};
var self = $SystemCallError = $klass($base, $super, 'SystemCallError', $SystemCallError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.StandardError);
return (function($base) {
var self = $module($base, 'Errno');
var def = self._proto, $scope = self._scope;
(function($base, $super) {
function $EINVAL(){};
var self = $EINVAL = $klass($base, $super, 'EINVAL', $EINVAL);
var def = self._proto, $scope = self._scope, TMP_1;
return ($opal.defs(self, '$new', TMP_1 = function() {
var self = this, $iter = TMP_1._p, $yield = $iter || nil;
TMP_1._p = null;
return $opal.find_super_dispatcher(self, 'new', TMP_1, null, $EINVAL).apply(self, ["Invalid argument"]);
}), nil) && 'new'
})(self, $scope.SystemCallError)
})(self);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/regexp"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $gvars = $opal.gvars;
$opal.add_stubs(['$respond_to?', '$to_str', '$to_s', '$coerce_to', '$new', '$raise', '$class', '$call']);
return (function($base, $super) {
function $Regexp(){};
var self = $Regexp = $klass($base, $super, 'Regexp', $Regexp);
var def = self._proto, $scope = self._scope, TMP_1;
def._isRegexp = true;
(function(self) {
var $scope = self._scope, def = self._proto;
self._proto.$escape = function(string) {
var self = this;
return string.replace(/([-[\]/{}()*+?.^$\\| ])/g, '\\$1')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r')
.replace(/[\f]/g, '\\f')
.replace(/[\t]/g, '\\t');
};
self._proto.$quote = self._proto.$escape;
self._proto.$union = function(parts) {
var self = this;
parts = $slice.call(arguments, 0);
return new RegExp(parts.join(''));
};
return (self._proto.$new = function(regexp, options) {
var self = this;
return new RegExp(regexp, options);
}, nil) && 'new';
})(self.$singleton_class());
def['$=='] = function(other) {
var self = this;
return other.constructor == RegExp && self.toString() === other.toString();
};
def['$==='] = function(str) {
var self = this;
if (!str._isString && str['$respond_to?']("to_str")) {
str = str.$to_str();
}
if (!str._isString) {
return false;
}
return self.test(str);
;
};
def['$=~'] = function(string) {
var $a, self = this;
if ((($a = string === nil) !== nil && (!$a._isBoolean || $a == true))) {
$gvars["~"] = $gvars["`"] = $gvars["'"] = nil;
return nil;};
string = $scope.Opal.$coerce_to(string, $scope.String, "to_str").$to_s();
var re = self;
if (re.global) {
// should we clear it afterwards too?
re.lastIndex = 0;
}
else {
// rewrite regular expression to add the global flag to capture pre/post match
re = new RegExp(re.source, 'g' + (re.multiline ? 'm' : '') + (re.ignoreCase ? 'i' : ''));
}
var result = re.exec(string);
if (result) {
$gvars["~"] = $scope.MatchData.$new(re, result);
}
else {
$gvars["~"] = $gvars["`"] = $gvars["'"] = nil;
}
return result ? result.index : nil;
};
$opal.defn(self, '$eql?', def['$==']);
def.$inspect = function() {
var self = this;
return self.toString();
};
def.$match = TMP_1 = function(string, pos) {
var $a, self = this, $iter = TMP_1._p, block = $iter || nil;
TMP_1._p = null;
if ((($a = string === nil) !== nil && (!$a._isBoolean || $a == true))) {
$gvars["~"] = $gvars["`"] = $gvars["'"] = nil;
return nil;};
if ((($a = string._isString == null) !== nil && (!$a._isBoolean || $a == true))) {
if ((($a = string['$respond_to?']("to_str")) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.TypeError, "no implicit conversion of " + (string.$class()) + " into String")
};
string = string.$to_str();};
var re = self;
if (re.global) {
// should we clear it afterwards too?
re.lastIndex = 0;
}
else {
re = new RegExp(re.source, 'g' + (re.multiline ? 'm' : '') + (re.ignoreCase ? 'i' : ''));
}
var result = re.exec(string);
if (result) {
result = $gvars["~"] = $scope.MatchData.$new(re, result);
if (block === nil) {
return result;
}
else {
return block.$call(result);
}
}
else {
return $gvars["~"] = $gvars["`"] = $gvars["'"] = nil;
}
};
def.$source = function() {
var self = this;
return self.source;
};
return $opal.defn(self, '$to_s', def.$source);
})(self, null)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/comparable"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module;
$opal.add_stubs(['$===', '$>', '$<', '$equal?', '$<=>', '$==', '$normalize', '$raise', '$class', '$>=', '$<=']);
return (function($base) {
var self = $module($base, 'Comparable');
var def = self._proto, $scope = self._scope;
$opal.defs(self, '$normalize', function(what) {
var $a, self = this;
if ((($a = $scope.Integer['$==='](what)) !== nil && (!$a._isBoolean || $a == true))) {
return what};
if (what['$>'](0)) {
return 1};
if (what['$<'](0)) {
return -1};
return 0;
});
def['$=='] = function(other) {
var $a, self = this, cmp = nil;
try {
if ((($a = self['$equal?'](other)) !== nil && (!$a._isBoolean || $a == true))) {
return true};
if ((($a = cmp = (self['$<=>'](other))) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return false
};
return $scope.Comparable.$normalize(cmp)['$=='](0);
} catch ($err) {if ($scope.StandardError['$===']($err)) {
return false
}else { throw $err; }
};
};
def['$>'] = function(other) {
var $a, self = this, cmp = nil;
if ((($a = cmp = (self['$<=>'](other))) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")
};
return $scope.Comparable.$normalize(cmp)['$>'](0);
};
def['$>='] = function(other) {
var $a, self = this, cmp = nil;
if ((($a = cmp = (self['$<=>'](other))) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")
};
return $scope.Comparable.$normalize(cmp)['$>='](0);
};
def['$<'] = function(other) {
var $a, self = this, cmp = nil;
if ((($a = cmp = (self['$<=>'](other))) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")
};
return $scope.Comparable.$normalize(cmp)['$<'](0);
};
def['$<='] = function(other) {
var $a, self = this, cmp = nil;
if ((($a = cmp = (self['$<=>'](other))) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")
};
return $scope.Comparable.$normalize(cmp)['$<='](0);
};
def['$between?'] = function(min, max) {
var self = this;
if (self['$<'](min)) {
return false};
if (self['$>'](max)) {
return false};
return true;
};
;$opal.donate(self, ["$==", "$>", "$>=", "$<", "$<=", "$between?"]);
})(self)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/enumerable"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $module = $opal.module;
$opal.add_stubs(['$raise', '$enum_for', '$flatten', '$map', '$==', '$destructure', '$nil?', '$coerce_to!', '$coerce_to', '$===', '$new', '$<<', '$[]', '$[]=', '$inspect', '$__send__', '$yield', '$enumerator_size', '$respond_to?', '$size', '$private', '$compare', '$<=>', '$dup', '$sort', '$call', '$first', '$zip', '$to_a']);
return (function($base) {
var self = $module($base, 'Enumerable');
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12, TMP_13, TMP_14, TMP_15, TMP_16, TMP_17, TMP_18, TMP_19, TMP_20, TMP_22, TMP_23, TMP_24, TMP_25, TMP_26, TMP_27, TMP_28, TMP_29, TMP_30, TMP_31, TMP_32, TMP_33, TMP_35, TMP_36, TMP_40, TMP_41;
def['$all?'] = TMP_1 = function() {
var $a, self = this, $iter = TMP_1._p, block = $iter || nil;
TMP_1._p = null;
var result = true;
if (block !== nil) {
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) === nil || ($a._isBoolean && $a == false))) {
result = false;
return $breaker;
}
}
}
else {
self.$each._p = function(obj) {
if (arguments.length == 1 && (($a = obj) === nil || ($a._isBoolean && $a == false))) {
result = false;
return $breaker;
}
}
}
self.$each();
return result;
};
def['$any?'] = TMP_2 = function() {
var $a, self = this, $iter = TMP_2._p, block = $iter || nil;
TMP_2._p = null;
var result = false;
if (block !== nil) {
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
result = true;
return $breaker;
}
};
}
else {
self.$each._p = function(obj) {
if (arguments.length != 1 || (($a = obj) !== nil && (!$a._isBoolean || $a == true))) {
result = true;
return $breaker;
}
}
}
self.$each();
return result;
};
def.$chunk = TMP_3 = function(state) {
var self = this, $iter = TMP_3._p, block = $iter || nil;
TMP_3._p = null;
return self.$raise($scope.NotImplementedError);
};
def.$collect = TMP_4 = function() {
var self = this, $iter = TMP_4._p, block = $iter || nil;
TMP_4._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("collect")
};
var result = [];
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
result.push(value);
};
self.$each();
return result;
};
def.$collect_concat = TMP_5 = function() {
var $a, $b, TMP_6, self = this, $iter = TMP_5._p, block = $iter || nil;
TMP_5._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("collect_concat")
};
return ($a = ($b = self).$map, $a._p = (TMP_6 = function(item){var self = TMP_6._s || this, $a;
if (item == null) item = nil;
return $a = $opal.$yield1(block, item), $a === $breaker ? $a : $a}, TMP_6._s = self, TMP_6), $a).call($b).$flatten(1);
};
def.$count = TMP_7 = function(object) {
var $a, self = this, $iter = TMP_7._p, block = $iter || nil;
TMP_7._p = null;
var result = 0;
if (object != null) {
block = function() {
return $scope.Opal.$destructure(arguments)['$=='](object);
};
}
else if (block === nil) {
block = function() { return true; };
}
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
result++;
}
}
self.$each();
return result;
};
def.$cycle = TMP_8 = function(n) {
var $a, self = this, $iter = TMP_8._p, block = $iter || nil;
if (n == null) {
n = nil
}
TMP_8._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("cycle", n)
};
if ((($a = n['$nil?']()) !== nil && (!$a._isBoolean || $a == true))) {
} else {
n = $scope.Opal['$coerce_to!'](n, $scope.Integer, "to_int");
if ((($a = n <= 0) !== nil && (!$a._isBoolean || $a == true))) {
return nil};
};
var result,
all = [];
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
all.push(param);
}
self.$each();
if (result !== undefined) {
return result;
}
if (all.length === 0) {
return nil;
}
if ((($a = n['$nil?']()) !== nil && (!$a._isBoolean || $a == true))) {
while (true) {
for (var i = 0, length = all.length; i < length; i++) {
var value = $opal.$yield1(block, all[i]);
if (value === $breaker) {
return $breaker.$v;
}
}
}
} else {
while (n > 1) {
for (var i = 0, length = all.length; i < length; i++) {
var value = $opal.$yield1(block, all[i]);
if (value === $breaker) {
return $breaker.$v;
}
}
n--;
}
};
};
def.$detect = TMP_9 = function(ifnone) {
var $a, self = this, $iter = TMP_9._p, block = $iter || nil;
TMP_9._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("detect", ifnone)
};
var result = undefined;
self.$each._p = function() {
var params = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, params);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
result = params;
return $breaker;
}
};
self.$each();
if (result === undefined && ifnone !== undefined) {
if (typeof(ifnone) === 'function') {
result = ifnone();
}
else {
result = ifnone;
}
}
return result === undefined ? nil : result;
};
def.$drop = function(number) {
var $a, self = this;
number = $scope.Opal.$coerce_to(number, $scope.Integer, "to_int");
if ((($a = number < 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "attempt to drop negative size")};
var result = [],
current = 0;
self.$each._p = function() {
if (number <= current) {
result.push($scope.Opal.$destructure(arguments));
}
current++;
};
self.$each()
return result;
};
def.$drop_while = TMP_10 = function() {
var $a, self = this, $iter = TMP_10._p, block = $iter || nil;
TMP_10._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("drop_while")
};
var result = [],
dropping = true;
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments);
if (dropping) {
var value = $opal.$yield1(block, param);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) === nil || ($a._isBoolean && $a == false))) {
dropping = false;
result.push(param);
}
}
else {
result.push(param);
}
};
self.$each();
return result;
};
def.$each_cons = TMP_11 = function(n) {
var self = this, $iter = TMP_11._p, block = $iter || nil;
TMP_11._p = null;
return self.$raise($scope.NotImplementedError);
};
def.$each_entry = TMP_12 = function() {
var self = this, $iter = TMP_12._p, block = $iter || nil;
TMP_12._p = null;
return self.$raise($scope.NotImplementedError);
};
def.$each_slice = TMP_13 = function(n) {
var $a, self = this, $iter = TMP_13._p, block = $iter || nil;
TMP_13._p = null;
n = $scope.Opal.$coerce_to(n, $scope.Integer, "to_int");
if ((($a = n <= 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "invalid slice size")};
if ((block !== nil)) {
} else {
return self.$enum_for("each_slice", n)
};
var result,
slice = []
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments);
slice.push(param);
if (slice.length === n) {
if ($opal.$yield1(block, slice) === $breaker) {
result = $breaker.$v;
return $breaker;
}
slice = [];
}
};
self.$each();
if (result !== undefined) {
return result;
}
// our "last" group, if smaller than n then won't have been yielded
if (slice.length > 0) {
if ($opal.$yield1(block, slice) === $breaker) {
return $breaker.$v;
}
}
;
return nil;
};
def.$each_with_index = TMP_14 = function(args) {
var $a, self = this, $iter = TMP_14._p, block = $iter || nil;
args = $slice.call(arguments, 0);
TMP_14._p = null;
if ((block !== nil)) {
} else {
return ($a = self).$enum_for.apply($a, ["each_with_index"].concat(args))
};
var result,
index = 0;
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = block(param, index);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
index++;
};
self.$each.apply(self, args);
if (result !== undefined) {
return result;
}
return self;
};
def.$each_with_object = TMP_15 = function(object) {
var self = this, $iter = TMP_15._p, block = $iter || nil;
TMP_15._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("each_with_object", object)
};
var result;
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = block(param, object);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
};
self.$each();
if (result !== undefined) {
return result;
}
return object;
};
def.$entries = function(args) {
var self = this;
args = $slice.call(arguments, 0);
var result = [];
self.$each._p = function() {
result.push($scope.Opal.$destructure(arguments));
};
self.$each.apply(self, args);
return result;
};
$opal.defn(self, '$find', def.$detect);
def.$find_all = TMP_16 = function() {
var $a, self = this, $iter = TMP_16._p, block = $iter || nil;
TMP_16._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("find_all")
};
var result = [];
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
result.push(param);
}
};
self.$each();
return result;
};
def.$find_index = TMP_17 = function(object) {
var $a, self = this, $iter = TMP_17._p, block = $iter || nil;
TMP_17._p = null;
if ((($a = object === undefined && block === nil) !== nil && (!$a._isBoolean || $a == true))) {
return self.$enum_for("find_index")};
var result = nil,
index = 0;
if (object != null) {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments);
if ((param)['$=='](object)) {
result = index;
return $breaker;
}
index += 1;
};
}
else if (block !== nil) {
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
result = index;
return $breaker;
}
index += 1;
};
}
self.$each();
return result;
};
def.$first = function(number) {
var $a, self = this, result = nil;
if ((($a = number === undefined) !== nil && (!$a._isBoolean || $a == true))) {
result = nil;
self.$each._p = function() {
result = $scope.Opal.$destructure(arguments);
return $breaker;
};
self.$each();
;
} else {
result = [];
number = $scope.Opal.$coerce_to(number, $scope.Integer, "to_int");
if ((($a = number < 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "attempt to take negative size")};
if ((($a = number == 0) !== nil && (!$a._isBoolean || $a == true))) {
return []};
var current = 0,
number = $scope.Opal.$coerce_to(number, $scope.Integer, "to_int");
self.$each._p = function() {
result.push($scope.Opal.$destructure(arguments));
if (number <= ++current) {
return $breaker;
}
};
self.$each();
;
};
return result;
};
$opal.defn(self, '$flat_map', def.$collect_concat);
def.$grep = TMP_18 = function(pattern) {
var $a, self = this, $iter = TMP_18._p, block = $iter || nil;
TMP_18._p = null;
var result = [];
if (block !== nil) {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = pattern['$==='](param);
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
value = $opal.$yield1(block, param);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
result.push(value);
}
};
}
else {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = pattern['$==='](param);
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
result.push(param);
}
};
}
self.$each();
return result;
;
};
def.$group_by = TMP_19 = function() {
var $a, $b, $c, self = this, $iter = TMP_19._p, block = $iter || nil, hash = nil;
TMP_19._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("group_by")
};
hash = $scope.Hash.$new();
var result;
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
(($a = value, $b = hash, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, []))))['$<<'](param);
}
self.$each();
if (result !== undefined) {
return result;
}
return hash;
};
def['$include?'] = function(obj) {
var self = this;
var result = false;
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments);
if ((param)['$=='](obj)) {
result = true;
return $breaker;
}
}
self.$each();
return result;
};
def.$inject = TMP_20 = function(object, sym) {
var self = this, $iter = TMP_20._p, block = $iter || nil;
TMP_20._p = null;
var result = object;
if (block !== nil && sym === undefined) {
self.$each._p = function() {
var value = $scope.Opal.$destructure(arguments);
if (result === undefined) {
result = value;
return;
}
value = $opal.$yieldX(block, [result, value]);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
result = value;
};
}
else {
if (sym === undefined) {
if (!$scope.Symbol['$==='](object)) {
self.$raise($scope.TypeError, "" + (object.$inspect()) + " is not a Symbol");
}
sym = object;
result = undefined;
}
self.$each._p = function() {
var value = $scope.Opal.$destructure(arguments);
if (result === undefined) {
result = value;
return;
}
result = (result).$__send__(sym, value);
};
}
self.$each();
return result == undefined ? nil : result;
;
};
def.$lazy = function() {
var $a, $b, TMP_21, self = this;
return ($a = ($b = ($scope.Enumerator)._scope.Lazy).$new, $a._p = (TMP_21 = function(enum$, args){var self = TMP_21._s || this, $a;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
return ($a = enum$).$yield.apply($a, [].concat(args))}, TMP_21._s = self, TMP_21), $a).call($b, self, self.$enumerator_size());
};
def.$enumerator_size = function() {
var $a, self = this;
if ((($a = self['$respond_to?']("size")) !== nil && (!$a._isBoolean || $a == true))) {
return self.$size()
} else {
return nil
};
};
self.$private("enumerator_size");
$opal.defn(self, '$map', def.$collect);
def.$max = TMP_22 = function() {
var self = this, $iter = TMP_22._p, block = $iter || nil;
TMP_22._p = null;
var result;
if (block !== nil) {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments);
if (result === undefined) {
result = param;
return;
}
var value = block(param, result);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if (value === nil) {
self.$raise($scope.ArgumentError, "comparison failed");
}
if (value > 0) {
result = param;
}
};
}
else {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments);
if (result === undefined) {
result = param;
return;
}
if ($scope.Opal.$compare(param, result) > 0) {
result = param;
}
};
}
self.$each();
return result === undefined ? nil : result;
};
def.$max_by = TMP_23 = function() {
var self = this, $iter = TMP_23._p, block = $iter || nil;
TMP_23._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("max_by")
};
var result,
by;
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if (result === undefined) {
result = param;
by = value;
return;
}
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((value)['$<=>'](by) > 0) {
result = param
by = value;
}
};
self.$each();
return result === undefined ? nil : result;
};
$opal.defn(self, '$member?', def['$include?']);
def.$min = TMP_24 = function() {
var self = this, $iter = TMP_24._p, block = $iter || nil;
TMP_24._p = null;
var result;
if (block !== nil) {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments);
if (result === undefined) {
result = param;
return;
}
var value = block(param, result);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if (value === nil) {
self.$raise($scope.ArgumentError, "comparison failed");
}
if (value < 0) {
result = param;
}
};
}
else {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments);
if (result === undefined) {
result = param;
return;
}
if ($scope.Opal.$compare(param, result) < 0) {
result = param;
}
};
}
self.$each();
return result === undefined ? nil : result;
};
def.$min_by = TMP_25 = function() {
var self = this, $iter = TMP_25._p, block = $iter || nil;
TMP_25._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("min_by")
};
var result,
by;
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if (result === undefined) {
result = param;
by = value;
return;
}
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((value)['$<=>'](by) < 0) {
result = param
by = value;
}
};
self.$each();
return result === undefined ? nil : result;
};
def.$minmax = TMP_26 = function() {
var self = this, $iter = TMP_26._p, block = $iter || nil;
TMP_26._p = null;
return self.$raise($scope.NotImplementedError);
};
def.$minmax_by = TMP_27 = function() {
var self = this, $iter = TMP_27._p, block = $iter || nil;
TMP_27._p = null;
return self.$raise($scope.NotImplementedError);
};
def['$none?'] = TMP_28 = function() {
var $a, self = this, $iter = TMP_28._p, block = $iter || nil;
TMP_28._p = null;
var result = true;
if (block !== nil) {
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
result = false;
return $breaker;
}
}
}
else {
self.$each._p = function() {
var value = $scope.Opal.$destructure(arguments);
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
result = false;
return $breaker;
}
};
}
self.$each();
return result;
};
def['$one?'] = TMP_29 = function() {
var $a, self = this, $iter = TMP_29._p, block = $iter || nil;
TMP_29._p = null;
var result = false;
if (block !== nil) {
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
if (result === true) {
result = false;
return $breaker;
}
result = true;
}
}
}
else {
self.$each._p = function() {
var value = $scope.Opal.$destructure(arguments);
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
if (result === true) {
result = false;
return $breaker;
}
result = true;
}
}
}
self.$each();
return result;
};
def.$partition = TMP_30 = function() {
var $a, self = this, $iter = TMP_30._p, block = $iter || nil;
TMP_30._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("partition")
};
var truthy = [], falsy = [];
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
truthy.push(param);
}
else {
falsy.push(param);
}
};
self.$each();
return [truthy, falsy];
};
$opal.defn(self, '$reduce', def.$inject);
def.$reject = TMP_31 = function() {
var $a, self = this, $iter = TMP_31._p, block = $iter || nil;
TMP_31._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("reject")
};
var result = [];
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) === nil || ($a._isBoolean && $a == false))) {
result.push(param);
}
};
self.$each();
return result;
};
def.$reverse_each = TMP_32 = function() {
var self = this, $iter = TMP_32._p, block = $iter || nil;
TMP_32._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("reverse_each")
};
var result = [];
self.$each._p = function() {
result.push(arguments);
};
self.$each();
for (var i = result.length - 1; i >= 0; i--) {
$opal.$yieldX(block, result[i]);
}
return result;
};
$opal.defn(self, '$select', def.$find_all);
def.$slice_before = TMP_33 = function(pattern) {
var $a, $b, TMP_34, self = this, $iter = TMP_33._p, block = $iter || nil;
TMP_33._p = null;
if ((($a = pattern === undefined && block === nil || arguments.length > 1) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "wrong number of arguments (" + (arguments.length) + " for 1)")};
return ($a = ($b = $scope.Enumerator).$new, $a._p = (TMP_34 = function(e){var self = TMP_34._s || this, $a;
if (e == null) e = nil;
var slice = [];
if (block !== nil) {
if (pattern === undefined) {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if ((($a = value) !== nil && (!$a._isBoolean || $a == true)) && slice.length > 0) {
e['$<<'](slice);
slice = [];
}
slice.push(param);
};
}
else {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = block(param, pattern.$dup());
if ((($a = value) !== nil && (!$a._isBoolean || $a == true)) && slice.length > 0) {
e['$<<'](slice);
slice = [];
}
slice.push(param);
};
}
}
else {
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = pattern['$==='](param);
if ((($a = value) !== nil && (!$a._isBoolean || $a == true)) && slice.length > 0) {
e['$<<'](slice);
slice = [];
}
slice.push(param);
};
}
self.$each();
if (slice.length > 0) {
e['$<<'](slice);
}
;}, TMP_34._s = self, TMP_34), $a).call($b);
};
def.$sort = TMP_35 = function() {
var self = this, $iter = TMP_35._p, block = $iter || nil;
TMP_35._p = null;
return self.$raise($scope.NotImplementedError);
};
def.$sort_by = TMP_36 = function() {
var $a, $b, TMP_37, $c, $d, TMP_38, $e, $f, TMP_39, self = this, $iter = TMP_36._p, block = $iter || nil;
TMP_36._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("sort_by")
};
return ($a = ($b = ($c = ($d = ($e = ($f = self).$map, $e._p = (TMP_39 = function(){var self = TMP_39._s || this;
arg = $scope.Opal.$destructure(arguments);
return [block.$call(arg), arg];}, TMP_39._s = self, TMP_39), $e).call($f)).$sort, $c._p = (TMP_38 = function(a, b){var self = TMP_38._s || this;
if (a == null) a = nil;if (b == null) b = nil;
return a['$[]'](0)['$<=>'](b['$[]'](0))}, TMP_38._s = self, TMP_38), $c).call($d)).$map, $a._p = (TMP_37 = function(arg){var self = TMP_37._s || this;
if (arg == null) arg = nil;
return arg[1];}, TMP_37._s = self, TMP_37), $a).call($b);
};
def.$take = function(num) {
var self = this;
return self.$first(num);
};
def.$take_while = TMP_40 = function() {
var $a, self = this, $iter = TMP_40._p, block = $iter || nil;
TMP_40._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("take_while")
};
var result = [];
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = $opal.$yield1(block, param);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if ((($a = value) === nil || ($a._isBoolean && $a == false))) {
return $breaker;
}
result.push(param);
};
self.$each();
return result;
};
$opal.defn(self, '$to_a', def.$entries);
def.$zip = TMP_41 = function(others) {
var $a, self = this, $iter = TMP_41._p, block = $iter || nil;
others = $slice.call(arguments, 0);
TMP_41._p = null;
return ($a = self.$to_a()).$zip.apply($a, [].concat(others));
};
;$opal.donate(self, ["$all?", "$any?", "$chunk", "$collect", "$collect_concat", "$count", "$cycle", "$detect", "$drop", "$drop_while", "$each_cons", "$each_entry", "$each_slice", "$each_with_index", "$each_with_object", "$entries", "$find", "$find_all", "$find_index", "$first", "$flat_map", "$grep", "$group_by", "$include?", "$inject", "$lazy", "$enumerator_size", "$map", "$max", "$max_by", "$member?", "$min", "$min_by", "$minmax", "$minmax_by", "$none?", "$one?", "$partition", "$reduce", "$reject", "$reverse_each", "$select", "$slice_before", "$sort", "$sort_by", "$take", "$take_while", "$to_a", "$zip"]);
})(self)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/enumerator"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$require', '$include', '$allocate', '$new', '$to_proc', '$coerce_to', '$__send__', '$===', '$call', '$enum_for', '$destructure', '$name', '$class', '$inspect', '$empty?', '$+', '$[]', '$raise', '$yield', '$each', '$enumerator_size', '$respond_to?', '$try_convert', '$<', '$for']);
self.$require("corelib/enumerable");
return (function($base, $super) {
function $Enumerator(){};
var self = $Enumerator = $klass($base, $super, 'Enumerator', $Enumerator);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4;
def.size = def.object = def.method = def.args = nil;
self.$include($scope.Enumerable);
$opal.defs(self, '$for', TMP_1 = function(object, method, args) {
var self = this, $iter = TMP_1._p, block = $iter || nil;
args = $slice.call(arguments, 2);
if (method == null) {
method = "each"
}
TMP_1._p = null;
var obj = self.$allocate();
obj.object = object;
obj.size = block;
obj.method = method;
obj.args = args;
return obj;
;
});
def.$initialize = TMP_2 = function() {
var $a, $b, self = this, $iter = TMP_2._p, block = $iter || nil;
TMP_2._p = null;
if (block !== false && block !== nil) {
self.object = ($a = ($b = $scope.Generator).$new, $a._p = block.$to_proc(), $a).call($b);
self.method = "each";
self.args = [];
self.size = arguments[0] || nil;
if ((($a = self.size) !== nil && (!$a._isBoolean || $a == true))) {
return self.size = $scope.Opal.$coerce_to(self.size, $scope.Integer, "to_int")
} else {
return nil
};
} else {
self.object = arguments[0];
self.method = arguments[1] || "each";
self.args = $slice.call(arguments, 2);
return self.size = nil;
};
};
def.$each = TMP_3 = function() {
var $a, $b, self = this, $iter = TMP_3._p, block = $iter || nil;
TMP_3._p = null;
if (block !== false && block !== nil) {
} else {
return self
};
return ($a = ($b = self.object).$__send__, $a._p = block.$to_proc(), $a).apply($b, [self.method].concat(self.args));
};
def.$size = function() {
var $a, self = this;
if ((($a = $scope.Proc['$==='](self.size)) !== nil && (!$a._isBoolean || $a == true))) {
return ($a = self.size).$call.apply($a, [].concat(self.args))
} else {
return self.size
};
};
def.$with_index = TMP_4 = function(offset) {
var self = this, $iter = TMP_4._p, block = $iter || nil;
if (offset == null) {
offset = 0
}
TMP_4._p = null;
if (offset !== false && offset !== nil) {
offset = $scope.Opal.$coerce_to(offset, $scope.Integer, "to_int")
} else {
offset = 0
};
if (block !== false && block !== nil) {
} else {
return self.$enum_for("with_index", offset)
};
var result
self.$each._p = function() {
var param = $scope.Opal.$destructure(arguments),
value = block(param, index);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
index++;
}
self.$each();
if (result !== undefined) {
return result;
}
;
};
$opal.defn(self, '$with_object', def.$each_with_object);
def.$inspect = function() {
var $a, self = this, result = nil;
result = "#<" + (self.$class().$name()) + ": " + (self.object.$inspect()) + ":" + (self.method);
if ((($a = self.args['$empty?']()) !== nil && (!$a._isBoolean || $a == true))) {
} else {
result = result['$+']("(" + (self.args.$inspect()['$[]']($scope.Range.$new(1, -2))) + ")")
};
return result['$+'](">");
};
(function($base, $super) {
function $Generator(){};
var self = $Generator = $klass($base, $super, 'Generator', $Generator);
var def = self._proto, $scope = self._scope, TMP_5, TMP_6;
def.block = nil;
self.$include($scope.Enumerable);
def.$initialize = TMP_5 = function() {
var self = this, $iter = TMP_5._p, block = $iter || nil;
TMP_5._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.LocalJumpError, "no block given")
};
return self.block = block;
};
return (def.$each = TMP_6 = function(args) {
var $a, $b, self = this, $iter = TMP_6._p, block = $iter || nil, yielder = nil;
args = $slice.call(arguments, 0);
TMP_6._p = null;
yielder = ($a = ($b = $scope.Yielder).$new, $a._p = block.$to_proc(), $a).call($b);
try {
args.unshift(yielder);
if ($opal.$yieldX(self.block, args) === $breaker) {
return $breaker.$v;
}
}
catch (e) {
if (e === $breaker) {
return $breaker.$v;
}
else {
throw e;
}
}
;
return self;
}, nil) && 'each';
})(self, null);
(function($base, $super) {
function $Yielder(){};
var self = $Yielder = $klass($base, $super, 'Yielder', $Yielder);
var def = self._proto, $scope = self._scope, TMP_7;
def.block = nil;
def.$initialize = TMP_7 = function() {
var self = this, $iter = TMP_7._p, block = $iter || nil;
TMP_7._p = null;
return self.block = block;
};
def.$yield = function(values) {
var self = this;
values = $slice.call(arguments, 0);
var value = $opal.$yieldX(self.block, values);
if (value === $breaker) {
throw $breaker;
}
return value;
;
};
return (def['$<<'] = function(values) {
var $a, self = this;
values = $slice.call(arguments, 0);
($a = self).$yield.apply($a, [].concat(values));
return self;
}, nil) && '<<';
})(self, null);
return (function($base, $super) {
function $Lazy(){};
var self = $Lazy = $klass($base, $super, 'Lazy', $Lazy);
var def = self._proto, $scope = self._scope, TMP_8, TMP_11, TMP_13, TMP_18, TMP_20, TMP_21, TMP_23, TMP_26, TMP_29;
def.enumerator = nil;
(function($base, $super) {
function $StopLazyError(){};
var self = $StopLazyError = $klass($base, $super, 'StopLazyError', $StopLazyError);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.Exception);
def.$initialize = TMP_8 = function(object, size) {
var TMP_9, self = this, $iter = TMP_8._p, block = $iter || nil;
if (size == null) {
size = nil
}
TMP_8._p = null;
if ((block !== nil)) {
} else {
self.$raise($scope.ArgumentError, "tried to call lazy new without a block")
};
self.enumerator = object;
return $opal.find_super_dispatcher(self, 'initialize', TMP_8, (TMP_9 = function(yielder, each_args){var self = TMP_9._s || this, $a, $b, TMP_10;
if (yielder == null) yielder = nil;each_args = $slice.call(arguments, 1);
try {
return ($a = ($b = object).$each, $a._p = (TMP_10 = function(args){var self = TMP_10._s || this;
args = $slice.call(arguments, 0);
args.unshift(yielder);
if ($opal.$yieldX(block, args) === $breaker) {
return $breaker;
}
;}, TMP_10._s = self, TMP_10), $a).apply($b, [].concat(each_args))
} catch ($err) {if ($scope.Exception['$===']($err)) {
return nil
}else { throw $err; }
}}, TMP_9._s = self, TMP_9)).apply(self, [size]);
};
$opal.defn(self, '$force', def.$to_a);
def.$lazy = function() {
var self = this;
return self;
};
def.$collect = TMP_11 = function() {
var $a, $b, TMP_12, self = this, $iter = TMP_11._p, block = $iter || nil;
TMP_11._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to call lazy map without a block")
};
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_12 = function(enum$, args){var self = TMP_12._s || this;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
var value = $opal.$yieldX(block, args);
if (value === $breaker) {
return $breaker;
}
enum$.$yield(value);
}, TMP_12._s = self, TMP_12), $a).call($b, self, self.$enumerator_size());
};
def.$collect_concat = TMP_13 = function() {
var $a, $b, TMP_14, self = this, $iter = TMP_13._p, block = $iter || nil;
TMP_13._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to call lazy map without a block")
};
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_14 = function(enum$, args){var self = TMP_14._s || this, $a, $b, TMP_15, $c, TMP_16;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
var value = $opal.$yieldX(block, args);
if (value === $breaker) {
return $breaker;
}
if ((value)['$respond_to?']("force") && (value)['$respond_to?']("each")) {
($a = ($b = (value)).$each, $a._p = (TMP_15 = function(v){var self = TMP_15._s || this;
if (v == null) v = nil;
return enum$.$yield(v)}, TMP_15._s = self, TMP_15), $a).call($b)
}
else {
var array = $scope.Opal.$try_convert(value, $scope.Array, "to_ary");
if (array === nil) {
enum$.$yield(value);
}
else {
($a = ($c = (value)).$each, $a._p = (TMP_16 = function(v){var self = TMP_16._s || this;
if (v == null) v = nil;
return enum$.$yield(v)}, TMP_16._s = self, TMP_16), $a).call($c);
}
}
;}, TMP_14._s = self, TMP_14), $a).call($b, self, nil);
};
def.$drop = function(n) {
var $a, $b, TMP_17, self = this, current_size = nil, set_size = nil, dropped = nil;
n = $scope.Opal.$coerce_to(n, $scope.Integer, "to_int");
if (n['$<'](0)) {
self.$raise($scope.ArgumentError, "attempt to drop negative size")};
current_size = self.$enumerator_size();
set_size = (function() {if ((($a = $scope.Integer['$==='](current_size)) !== nil && (!$a._isBoolean || $a == true))) {
if (n['$<'](current_size)) {
return n
} else {
return current_size
}
} else {
return current_size
}; return nil; })();
dropped = 0;
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_17 = function(enum$, args){var self = TMP_17._s || this, $a;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
if (dropped['$<'](n)) {
return dropped = dropped['$+'](1)
} else {
return ($a = enum$).$yield.apply($a, [].concat(args))
}}, TMP_17._s = self, TMP_17), $a).call($b, self, set_size);
};
def.$drop_while = TMP_18 = function() {
var $a, $b, TMP_19, self = this, $iter = TMP_18._p, block = $iter || nil, succeeding = nil;
TMP_18._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to call lazy drop_while without a block")
};
succeeding = true;
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_19 = function(enum$, args){var self = TMP_19._s || this, $a, $b;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
if (succeeding !== false && succeeding !== nil) {
var value = $opal.$yieldX(block, args);
if (value === $breaker) {
return $breaker;
}
if ((($a = value) === nil || ($a._isBoolean && $a == false))) {
succeeding = false;
($a = enum$).$yield.apply($a, [].concat(args));
}
} else {
return ($b = enum$).$yield.apply($b, [].concat(args))
}}, TMP_19._s = self, TMP_19), $a).call($b, self, nil);
};
def.$enum_for = TMP_20 = function(method, args) {
var $a, $b, self = this, $iter = TMP_20._p, block = $iter || nil;
args = $slice.call(arguments, 1);
if (method == null) {
method = "each"
}
TMP_20._p = null;
return ($a = ($b = self.$class()).$for, $a._p = block.$to_proc(), $a).apply($b, [self, method].concat(args));
};
def.$find_all = TMP_21 = function() {
var $a, $b, TMP_22, self = this, $iter = TMP_21._p, block = $iter || nil;
TMP_21._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to call lazy select without a block")
};
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_22 = function(enum$, args){var self = TMP_22._s || this, $a;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
var value = $opal.$yieldX(block, args);
if (value === $breaker) {
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
($a = enum$).$yield.apply($a, [].concat(args));
}
;}, TMP_22._s = self, TMP_22), $a).call($b, self, nil);
};
$opal.defn(self, '$flat_map', def.$collect_concat);
def.$grep = TMP_23 = function(pattern) {
var $a, $b, TMP_24, $c, TMP_25, self = this, $iter = TMP_23._p, block = $iter || nil;
TMP_23._p = null;
if (block !== false && block !== nil) {
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_24 = function(enum$, args){var self = TMP_24._s || this, $a;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
var param = $scope.Opal.$destructure(args),
value = pattern['$==='](param);
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
value = $opal.$yield1(block, param);
if (value === $breaker) {
return $breaker;
}
enum$.$yield($opal.$yield1(block, param));
}
;}, TMP_24._s = self, TMP_24), $a).call($b, self, nil)
} else {
return ($a = ($c = $scope.Lazy).$new, $a._p = (TMP_25 = function(enum$, args){var self = TMP_25._s || this, $a;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
var param = $scope.Opal.$destructure(args),
value = pattern['$==='](param);
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
enum$.$yield(param);
}
;}, TMP_25._s = self, TMP_25), $a).call($c, self, nil)
};
};
$opal.defn(self, '$map', def.$collect);
$opal.defn(self, '$select', def.$find_all);
def.$reject = TMP_26 = function() {
var $a, $b, TMP_27, self = this, $iter = TMP_26._p, block = $iter || nil;
TMP_26._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to call lazy reject without a block")
};
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_27 = function(enum$, args){var self = TMP_27._s || this, $a;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
var value = $opal.$yieldX(block, args);
if (value === $breaker) {
return $breaker;
}
if ((($a = value) === nil || ($a._isBoolean && $a == false))) {
($a = enum$).$yield.apply($a, [].concat(args));
}
;}, TMP_27._s = self, TMP_27), $a).call($b, self, nil);
};
def.$take = function(n) {
var $a, $b, TMP_28, self = this, current_size = nil, set_size = nil, taken = nil;
n = $scope.Opal.$coerce_to(n, $scope.Integer, "to_int");
if (n['$<'](0)) {
self.$raise($scope.ArgumentError, "attempt to take negative size")};
current_size = self.$enumerator_size();
set_size = (function() {if ((($a = $scope.Integer['$==='](current_size)) !== nil && (!$a._isBoolean || $a == true))) {
if (n['$<'](current_size)) {
return n
} else {
return current_size
}
} else {
return current_size
}; return nil; })();
taken = 0;
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_28 = function(enum$, args){var self = TMP_28._s || this, $a;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
if (taken['$<'](n)) {
($a = enum$).$yield.apply($a, [].concat(args));
return taken = taken['$+'](1);
} else {
return self.$raise($scope.StopLazyError)
}}, TMP_28._s = self, TMP_28), $a).call($b, self, set_size);
};
def.$take_while = TMP_29 = function() {
var $a, $b, TMP_30, self = this, $iter = TMP_29._p, block = $iter || nil;
TMP_29._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to call lazy take_while without a block")
};
return ($a = ($b = $scope.Lazy).$new, $a._p = (TMP_30 = function(enum$, args){var self = TMP_30._s || this, $a;
if (enum$ == null) enum$ = nil;args = $slice.call(arguments, 1);
var value = $opal.$yieldX(block, args);
if (value === $breaker) {
return $breaker;
}
if ((($a = value) !== nil && (!$a._isBoolean || $a == true))) {
($a = enum$).$yield.apply($a, [].concat(args));
}
else {
self.$raise($scope.StopLazyError);
}
;}, TMP_30._s = self, TMP_30), $a).call($b, self, nil);
};
$opal.defn(self, '$to_enum', def.$enum_for);
return (def.$inspect = function() {
var self = this;
return "#<" + (self.$class().$name()) + ": " + (self.enumerator.$inspect()) + ">";
}, nil) && 'inspect';
})(self, self);
})(self, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/array"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $gvars = $opal.gvars, $range = $opal.range;
$opal.add_stubs(['$require', '$include', '$new', '$class', '$raise', '$===', '$to_a', '$respond_to?', '$to_ary', '$coerce_to', '$coerce_to?', '$==', '$to_str', '$clone', '$hash', '$<=>', '$inspect', '$empty?', '$enum_for', '$nil?', '$coerce_to!', '$initialize_clone', '$initialize_dup', '$replace', '$eql?', '$length', '$begin', '$end', '$exclude_end?', '$flatten', '$object_id', '$[]', '$to_s', '$join', '$delete_if', '$to_proc', '$each', '$reverse', '$!', '$map', '$rand', '$keep_if', '$shuffle!', '$>', '$<', '$sort', '$times', '$[]=', '$<<', '$at']);
self.$require("corelib/enumerable");
return (function($base, $super) {
function $Array(){};
var self = $Array = $klass($base, $super, 'Array', $Array);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12, TMP_13, TMP_14, TMP_15, TMP_17, TMP_18, TMP_19, TMP_20, TMP_21, TMP_24;
def.length = nil;
self.$include($scope.Enumerable);
def._isArray = true;
$opal.defs(self, '$[]', function(objects) {
var self = this;
objects = $slice.call(arguments, 0);
return objects;
});
def.$initialize = function(args) {
var $a, self = this;
args = $slice.call(arguments, 0);
return ($a = self.$class()).$new.apply($a, [].concat(args));
};
$opal.defs(self, '$new', TMP_1 = function(size, obj) {
var $a, self = this, $iter = TMP_1._p, block = $iter || nil;
if (size == null) {
size = nil
}
if (obj == null) {
obj = nil
}
TMP_1._p = null;
if ((($a = arguments.length > 2) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "wrong number of arguments (" + (arguments.length) + " for 0..2)")};
if ((($a = arguments.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return []};
if ((($a = arguments.length === 1) !== nil && (!$a._isBoolean || $a == true))) {
if ((($a = $scope.Array['$==='](size)) !== nil && (!$a._isBoolean || $a == true))) {
return size.$to_a()
} else if ((($a = size['$respond_to?']("to_ary")) !== nil && (!$a._isBoolean || $a == true))) {
return size.$to_ary()}};
size = $scope.Opal.$coerce_to(size, $scope.Integer, "to_int");
if ((($a = size < 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "negative array size")};
var result = [];
if (block === nil) {
for (var i = 0; i < size; i++) {
result.push(obj);
}
}
else {
for (var i = 0, value; i < size; i++) {
value = block(i);
if (value === $breaker) {
return $breaker.$v;
}
result[i] = value;
}
}
return result;
});
$opal.defs(self, '$try_convert', function(obj) {
var self = this;
return $scope.Opal['$coerce_to?'](obj, $scope.Array, "to_ary");
});
def['$&'] = function(other) {
var $a, self = this;
if ((($a = $scope.Array['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
other = other.$to_a()
} else {
other = $scope.Opal.$coerce_to(other, $scope.Array, "to_ary").$to_a()
};
var result = [],
seen = {};
for (var i = 0, length = self.length; i < length; i++) {
var item = self[i];
if (!seen[item]) {
for (var j = 0, length2 = other.length; j < length2; j++) {
var item2 = other[j];
if (!seen[item2] && (item)['$=='](item2)) {
seen[item] = true;
result.push(item);
}
}
}
}
return result;
};
def['$*'] = function(other) {
var $a, self = this;
if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a._isBoolean || $a == true))) {
return self.join(other.$to_str())};
if ((($a = other['$respond_to?']("to_int")) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.TypeError, "no implicit conversion of " + (other.$class()) + " into Integer")
};
other = $scope.Opal.$coerce_to(other, $scope.Integer, "to_int");
if ((($a = other < 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "negative argument")};
var result = [];
for (var i = 0; i < other; i++) {
result = result.concat(self);
}
return result;
};
def['$+'] = function(other) {
var $a, self = this;
if ((($a = $scope.Array['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
other = other.$to_a()
} else {
other = $scope.Opal.$coerce_to(other, $scope.Array, "to_ary").$to_a()
};
return self.concat(other);
};
def['$-'] = function(other) {
var $a, self = this;
if ((($a = $scope.Array['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
other = other.$to_a()
} else {
other = $scope.Opal.$coerce_to(other, $scope.Array, "to_ary").$to_a()
};
if ((($a = self.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return []};
if ((($a = other.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return self.$clone()};
var seen = {},
result = [];
for (var i = 0, length = other.length; i < length; i++) {
seen[other[i]] = true;
}
for (var i = 0, length = self.length; i < length; i++) {
var item = self[i];
if (!seen[item]) {
result.push(item);
}
}
return result;
};
def['$<<'] = function(object) {
var self = this;
self.push(object);
return self;
};
def['$<=>'] = function(other) {
var $a, self = this;
if ((($a = $scope.Array['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
other = other.$to_a()
} else if ((($a = other['$respond_to?']("to_ary")) !== nil && (!$a._isBoolean || $a == true))) {
other = other.$to_ary().$to_a()
} else {
return nil
};
if (self.$hash() === other.$hash()) {
return 0;
}
if (self.length != other.length) {
return (self.length > other.length) ? 1 : -1;
}
for (var i = 0, length = self.length; i < length; i++) {
var tmp = (self[i])['$<=>'](other[i]);
if (tmp !== 0) {
return tmp;
}
}
return 0;
;
};
def['$=='] = function(other) {
var $a, self = this;
if ((($a = self === other) !== nil && (!$a._isBoolean || $a == true))) {
return true};
if ((($a = $scope.Array['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
if ((($a = other['$respond_to?']("to_ary")) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return false
};
return other['$=='](self);
};
other = other.$to_a();
if ((($a = self.length === other.length) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return false
};
for (var i = 0, length = self.length; i < length; i++) {
var a = self[i],
b = other[i];
if (a._isArray && b._isArray && (a === self)) {
continue;
}
if (!(a)['$=='](b)) {
return false;
}
}
return true;
};
def['$[]'] = function(index, length) {
var $a, self = this;
if ((($a = $scope.Range['$==='](index)) !== nil && (!$a._isBoolean || $a == true))) {
var size = self.length,
exclude = index.exclude,
from = $scope.Opal.$coerce_to(index.begin, $scope.Integer, "to_int"),
to = $scope.Opal.$coerce_to(index.end, $scope.Integer, "to_int");
if (from < 0) {
from += size;
if (from < 0) {
return nil;
}
}
if (from > size) {
return nil;
}
if (to < 0) {
to += size;
if (to < 0) {
return [];
}
}
if (!exclude) {
to += 1;
}
return self.slice(from, to);
;
} else {
index = $scope.Opal.$coerce_to(index, $scope.Integer, "to_int");
var size = self.length;
if (index < 0) {
index += size;
if (index < 0) {
return nil;
}
}
if (length === undefined) {
if (index >= size || index < 0) {
return nil;
}
return self[index];
}
else {
length = $scope.Opal.$coerce_to(length, $scope.Integer, "to_int");
if (length < 0 || index > size || index < 0) {
return nil;
}
return self.slice(index, index + length);
}
};
};
def['$[]='] = function(index, value, extra) {
var $a, self = this, data = nil, length = nil;
if ((($a = $scope.Range['$==='](index)) !== nil && (!$a._isBoolean || $a == true))) {
if ((($a = $scope.Array['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) {
data = value.$to_a()
} else if ((($a = value['$respond_to?']("to_ary")) !== nil && (!$a._isBoolean || $a == true))) {
data = value.$to_ary().$to_a()
} else {
data = [value]
};
var size = self.length,
exclude = index.exclude,
from = $scope.Opal.$coerce_to(index.begin, $scope.Integer, "to_int"),
to = $scope.Opal.$coerce_to(index.end, $scope.Integer, "to_int");
if (from < 0) {
from += size;
if (from < 0) {
self.$raise($scope.RangeError, "" + (index.$inspect()) + " out of range");
}
}
if (to < 0) {
to += size;
}
if (!exclude) {
to += 1;
}
if (from > size) {
for (var i = size; i < from; i++) {
self[i] = nil;
}
}
if (to < 0) {
self.splice.apply(self, [from, 0].concat(data));
}
else {
self.splice.apply(self, [from, to - from].concat(data));
}
return value;
;
} else {
if ((($a = extra === undefined) !== nil && (!$a._isBoolean || $a == true))) {
length = 1
} else {
length = value;
value = extra;
if ((($a = $scope.Array['$==='](value)) !== nil && (!$a._isBoolean || $a == true))) {
data = value.$to_a()
} else if ((($a = value['$respond_to?']("to_ary")) !== nil && (!$a._isBoolean || $a == true))) {
data = value.$to_ary().$to_a()
} else {
data = [value]
};
};
var size = self.length,
index = $scope.Opal.$coerce_to(index, $scope.Integer, "to_int"),
length = $scope.Opal.$coerce_to(length, $scope.Integer, "to_int"),
old;
if (index < 0) {
old = index;
index += size;
if (index < 0) {
self.$raise($scope.IndexError, "index " + (old) + " too small for array; minimum " + (-self.length));
}
}
if (length < 0) {
self.$raise($scope.IndexError, "negative length (" + (length) + ")")
}
if (index > size) {
for (var i = size; i < index; i++) {
self[i] = nil;
}
}
if (extra === undefined) {
self[index] = value;
}
else {
self.splice.apply(self, [index, length].concat(data));
}
return value;
;
};
};
def.$assoc = function(object) {
var self = this;
for (var i = 0, length = self.length, item; i < length; i++) {
if (item = self[i], item.length && (item[0])['$=='](object)) {
return item;
}
}
return nil;
};
def.$at = function(index) {
var self = this;
index = $scope.Opal.$coerce_to(index, $scope.Integer, "to_int");
if (index < 0) {
index += self.length;
}
if (index < 0 || index >= self.length) {
return nil;
}
return self[index];
};
def.$cycle = TMP_2 = function(n) {
var $a, $b, self = this, $iter = TMP_2._p, block = $iter || nil;
if (n == null) {
n = nil
}
TMP_2._p = null;
if ((($a = ((($b = self['$empty?']()) !== false && $b !== nil) ? $b : n['$=='](0))) !== nil && (!$a._isBoolean || $a == true))) {
return nil};
if (block !== false && block !== nil) {
} else {
return self.$enum_for("cycle", n)
};
if ((($a = n['$nil?']()) !== nil && (!$a._isBoolean || $a == true))) {
while (true) {
for (var i = 0, length = self.length; i < length; i++) {
var value = $opal.$yield1(block, self[i]);
if (value === $breaker) {
return $breaker.$v;
}
}
}
} else {
n = $scope.Opal['$coerce_to!'](n, $scope.Integer, "to_int");
if (n <= 0) {
return self;
}
while (n > 0) {
for (var i = 0, length = self.length; i < length; i++) {
var value = $opal.$yield1(block, self[i]);
if (value === $breaker) {
return $breaker.$v;
}
}
n--;
}
};
return self;
};
def.$clear = function() {
var self = this;
self.splice(0, self.length);
return self;
};
def.$clone = function() {
var self = this, copy = nil;
copy = [];
copy.$initialize_clone(self);
return copy;
};
def.$dup = function() {
var self = this, copy = nil;
copy = [];
copy.$initialize_dup(self);
return copy;
};
def.$initialize_copy = function(other) {
var self = this;
return self.$replace(other);
};
def.$collect = TMP_3 = function() {
var self = this, $iter = TMP_3._p, block = $iter || nil;
TMP_3._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("collect")
};
var result = [];
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.$yield1(block, self[i]);
if (value === $breaker) {
return $breaker.$v;
}
result.push(value);
}
return result;
};
def['$collect!'] = TMP_4 = function() {
var self = this, $iter = TMP_4._p, block = $iter || nil;
TMP_4._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("collect!")
};
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.$yield1(block, self[i]);
if (value === $breaker) {
return $breaker.$v;
}
self[i] = value;
}
return self;
};
def.$compact = function() {
var self = this;
var result = [];
for (var i = 0, length = self.length, item; i < length; i++) {
if ((item = self[i]) !== nil) {
result.push(item);
}
}
return result;
};
def['$compact!'] = function() {
var self = this;
var original = self.length;
for (var i = 0, length = self.length; i < length; i++) {
if (self[i] === nil) {
self.splice(i, 1);
length--;
i--;
}
}
return self.length === original ? nil : self;
};
def.$concat = function(other) {
var $a, self = this;
if ((($a = $scope.Array['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
other = other.$to_a()
} else {
other = $scope.Opal.$coerce_to(other, $scope.Array, "to_ary").$to_a()
};
for (var i = 0, length = other.length; i < length; i++) {
self.push(other[i]);
}
return self;
};
def.$delete = function(object) {
var self = this;
var original = self.length;
for (var i = 0, length = original; i < length; i++) {
if ((self[i])['$=='](object)) {
self.splice(i, 1);
length--;
i--;
}
}
return self.length === original ? nil : object;
};
def.$delete_at = function(index) {
var self = this;
index = $scope.Opal.$coerce_to(index, $scope.Integer, "to_int");
if (index < 0) {
index += self.length;
}
if (index < 0 || index >= self.length) {
return nil;
}
var result = self[index];
self.splice(index, 1);
return result;
;
};
def.$delete_if = TMP_5 = function() {
var self = this, $iter = TMP_5._p, block = $iter || nil;
TMP_5._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("delete_if")
};
for (var i = 0, length = self.length, value; i < length; i++) {
if ((value = block(self[i])) === $breaker) {
return $breaker.$v;
}
if (value !== false && value !== nil) {
self.splice(i, 1);
length--;
i--;
}
}
return self;
};
def.$drop = function(number) {
var self = this;
if (number < 0) {
self.$raise($scope.ArgumentError)
}
return self.slice(number);
;
};
$opal.defn(self, '$dup', def.$clone);
def.$each = TMP_6 = function() {
var self = this, $iter = TMP_6._p, block = $iter || nil;
TMP_6._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("each")
};
for (var i = 0, length = self.length; i < length; i++) {
var value = $opal.$yield1(block, self[i]);
if (value == $breaker) {
return $breaker.$v;
}
}
return self;
};
def.$each_index = TMP_7 = function() {
var self = this, $iter = TMP_7._p, block = $iter || nil;
TMP_7._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("each_index")
};
for (var i = 0, length = self.length; i < length; i++) {
var value = $opal.$yield1(block, i);
if (value === $breaker) {
return $breaker.$v;
}
}
return self;
};
def['$empty?'] = function() {
var self = this;
return self.length === 0;
};
def['$eql?'] = function(other) {
var $a, self = this;
if ((($a = self === other) !== nil && (!$a._isBoolean || $a == true))) {
return true};
if ((($a = $scope.Array['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return false
};
other = other.$to_a();
if ((($a = self.length === other.length) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return false
};
for (var i = 0, length = self.length; i < length; i++) {
var a = self[i],
b = other[i];
if (a._isArray && b._isArray && (a === self)) {
continue;
}
if (!(a)['$eql?'](b)) {
return false;
}
}
return true;
};
def.$fetch = TMP_8 = function(index, defaults) {
var self = this, $iter = TMP_8._p, block = $iter || nil;
TMP_8._p = null;
var original = index;
index = $scope.Opal.$coerce_to(index, $scope.Integer, "to_int");
if (index < 0) {
index += self.length;
}
if (index >= 0 && index < self.length) {
return self[index];
}
if (block !== nil) {
return block(original);
}
if (defaults != null) {
return defaults;
}
if (self.length === 0) {
self.$raise($scope.IndexError, "index " + (original) + " outside of array bounds: 0...0")
}
else {
self.$raise($scope.IndexError, "index " + (original) + " outside of array bounds: -" + (self.length) + "..." + (self.length));
}
;
};
def.$fill = TMP_9 = function(args) {
var $a, self = this, $iter = TMP_9._p, block = $iter || nil, one = nil, two = nil, obj = nil, left = nil, right = nil;
args = $slice.call(arguments, 0);
TMP_9._p = null;
if (block !== false && block !== nil) {
if ((($a = args.length > 2) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "wrong number of arguments (" + (args.$length()) + " for 0..2)")};
$a = $opal.to_ary(args), one = ($a[0] == null ? nil : $a[0]), two = ($a[1] == null ? nil : $a[1]);
} else {
if ((($a = args.length == 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "wrong number of arguments (0 for 1..3)")
} else if ((($a = args.length > 3) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "wrong number of arguments (" + (args.$length()) + " for 1..3)")};
$a = $opal.to_ary(args), obj = ($a[0] == null ? nil : $a[0]), one = ($a[1] == null ? nil : $a[1]), two = ($a[2] == null ? nil : $a[2]);
};
if ((($a = $scope.Range['$==='](one)) !== nil && (!$a._isBoolean || $a == true))) {
if (two !== false && two !== nil) {
self.$raise($scope.TypeError, "length invalid with range")};
left = $scope.Opal.$coerce_to(one.$begin(), $scope.Integer, "to_int");
if ((($a = left < 0) !== nil && (!$a._isBoolean || $a == true))) {
left += self.length;};
if ((($a = left < 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.RangeError, "" + (one.$inspect()) + " out of range")};
right = $scope.Opal.$coerce_to(one.$end(), $scope.Integer, "to_int");
if ((($a = right < 0) !== nil && (!$a._isBoolean || $a == true))) {
right += self.length;};
if ((($a = one['$exclude_end?']()) !== nil && (!$a._isBoolean || $a == true))) {
} else {
right += 1;
};
if ((($a = right <= left) !== nil && (!$a._isBoolean || $a == true))) {
return self};
} else if (one !== false && one !== nil) {
left = $scope.Opal.$coerce_to(one, $scope.Integer, "to_int");
if ((($a = left < 0) !== nil && (!$a._isBoolean || $a == true))) {
left += self.length;};
if ((($a = left < 0) !== nil && (!$a._isBoolean || $a == true))) {
left = 0};
if (two !== false && two !== nil) {
right = $scope.Opal.$coerce_to(two, $scope.Integer, "to_int");
if ((($a = right == 0) !== nil && (!$a._isBoolean || $a == true))) {
return self};
right += left;
} else {
right = self.length
};
} else {
left = 0;
right = self.length;
};
if ((($a = left > self.length) !== nil && (!$a._isBoolean || $a == true))) {
for (var i = self.length; i < right; i++) {
self[i] = nil;
}
;};
if ((($a = right > self.length) !== nil && (!$a._isBoolean || $a == true))) {
self.length = right};
if (block !== false && block !== nil) {
for (var length = self.length; left < right; left++) {
var value = block(left);
if (value === $breaker) {
return $breaker.$v;
}
self[left] = value;
}
;
} else {
for (var length = self.length; left < right; left++) {
self[left] = obj;
}
;
};
return self;
};
def.$first = function(count) {
var self = this;
if (count == null) {
return self.length === 0 ? nil : self[0];
}
count = $scope.Opal.$coerce_to(count, $scope.Integer, "to_int");
if (count < 0) {
self.$raise($scope.ArgumentError, "negative array size");
}
return self.slice(0, count);
};
def.$flatten = function(level) {
var self = this;
var result = [];
for (var i = 0, length = self.length; i < length; i++) {
var item = self[i];
if ($scope.Opal['$respond_to?'](item, "to_ary")) {
item = (item).$to_ary();
if (level == null) {
result.push.apply(result, (item).$flatten().$to_a());
}
else if (level == 0) {
result.push(item);
}
else {
result.push.apply(result, (item).$flatten(level - 1).$to_a());
}
}
else {
result.push(item);
}
}
return result;
;
};
def['$flatten!'] = function(level) {
var self = this;
var flattened = self.$flatten(level);
if (self.length == flattened.length) {
for (var i = 0, length = self.length; i < length; i++) {
if (self[i] !== flattened[i]) {
break;
}
}
if (i == length) {
return nil;
}
}
self.$replace(flattened);
;
return self;
};
def.$hash = function() {
var self = this;
return self._id || (self._id = Opal.uid());
};
def['$include?'] = function(member) {
var self = this;
for (var i = 0, length = self.length; i < length; i++) {
if ((self[i])['$=='](member)) {
return true;
}
}
return false;
};
def.$index = TMP_10 = function(object) {
var self = this, $iter = TMP_10._p, block = $iter || nil;
TMP_10._p = null;
if (object != null) {
for (var i = 0, length = self.length; i < length; i++) {
if ((self[i])['$=='](object)) {
return i;
}
}
}
else if (block !== nil) {
for (var i = 0, length = self.length, value; i < length; i++) {
if ((value = block(self[i])) === $breaker) {
return $breaker.$v;
}
if (value !== false && value !== nil) {
return i;
}
}
}
else {
return self.$enum_for("index");
}
return nil;
};
def.$insert = function(index, objects) {
var self = this;
objects = $slice.call(arguments, 1);
index = $scope.Opal.$coerce_to(index, $scope.Integer, "to_int");
if (objects.length > 0) {
if (index < 0) {
index += self.length + 1;
if (index < 0) {
self.$raise($scope.IndexError, "" + (index) + " is out of bounds");
}
}
if (index > self.length) {
for (var i = self.length; i < index; i++) {
self.push(nil);
}
}
self.splice.apply(self, [index, 0].concat(objects));
}
;
return self;
};
def.$inspect = function() {
var self = this;
var i, inspect, el, el_insp, length, object_id;
inspect = [];
object_id = self.$object_id();
length = self.length;
for (i = 0; i < length; i++) {
el = self['$[]'](i);
// Check object_id to ensure it's not the same array get into an infinite loop
el_insp = (el).$object_id() === object_id ? '[...]' : (el).$inspect();
inspect.push(el_insp);
}
return '[' + inspect.join(', ') + ']';
;
};
def.$join = function(sep) {
var $a, self = this;
if ($gvars[","] == null) $gvars[","] = nil;
if (sep == null) {
sep = nil
}
if ((($a = self.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return ""};
if ((($a = sep === nil) !== nil && (!$a._isBoolean || $a == true))) {
sep = $gvars[","]};
var result = [];
for (var i = 0, length = self.length; i < length; i++) {
var item = self[i];
if ($scope.Opal['$respond_to?'](item, "to_str")) {
var tmp = (item).$to_str();
if (tmp !== nil) {
result.push((tmp).$to_s());
continue;
}
}
if ($scope.Opal['$respond_to?'](item, "to_ary")) {
var tmp = (item).$to_ary();
if (tmp !== nil) {
result.push((tmp).$join(sep));
continue;
}
}
if ($scope.Opal['$respond_to?'](item, "to_s")) {
var tmp = (item).$to_s();
if (tmp !== nil) {
result.push(tmp);
continue;
}
}
self.$raise($scope.NoMethodError, "" + ($scope.Opal.$inspect(item)) + " doesn't respond to #to_str, #to_ary or #to_s");
}
if (sep === nil) {
return result.join('');
}
else {
return result.join($scope.Opal['$coerce_to!'](sep, $scope.String, "to_str").$to_s());
}
;
};
def.$keep_if = TMP_11 = function() {
var self = this, $iter = TMP_11._p, block = $iter || nil;
TMP_11._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("keep_if")
};
for (var i = 0, length = self.length, value; i < length; i++) {
if ((value = block(self[i])) === $breaker) {
return $breaker.$v;
}
if (value === false || value === nil) {
self.splice(i, 1);
length--;
i--;
}
}
return self;
};
def.$last = function(count) {
var self = this;
if (count == null) {
return self.length === 0 ? nil : self[self.length - 1];
}
count = $scope.Opal.$coerce_to(count, $scope.Integer, "to_int");
if (count < 0) {
self.$raise($scope.ArgumentError, "negative array size");
}
if (count > self.length) {
count = self.length;
}
return self.slice(self.length - count, self.length);
};
def.$length = function() {
var self = this;
return self.length;
};
$opal.defn(self, '$map', def.$collect);
$opal.defn(self, '$map!', def['$collect!']);
def.$pop = function(count) {
var $a, self = this;
if ((($a = count === undefined) !== nil && (!$a._isBoolean || $a == true))) {
if ((($a = self.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return nil};
return self.pop();};
count = $scope.Opal.$coerce_to(count, $scope.Integer, "to_int");
if ((($a = count < 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "negative array size")};
if ((($a = self.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return []};
if ((($a = count > self.length) !== nil && (!$a._isBoolean || $a == true))) {
return self.splice(0, self.length);
} else {
return self.splice(self.length - count, self.length);
};
};
def.$push = function(objects) {
var self = this;
objects = $slice.call(arguments, 0);
for (var i = 0, length = objects.length; i < length; i++) {
self.push(objects[i]);
}
return self;
};
def.$rassoc = function(object) {
var self = this;
for (var i = 0, length = self.length, item; i < length; i++) {
item = self[i];
if (item.length && item[1] !== undefined) {
if ((item[1])['$=='](object)) {
return item;
}
}
}
return nil;
};
def.$reject = TMP_12 = function() {
var self = this, $iter = TMP_12._p, block = $iter || nil;
TMP_12._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("reject")
};
var result = [];
for (var i = 0, length = self.length, value; i < length; i++) {
if ((value = block(self[i])) === $breaker) {
return $breaker.$v;
}
if (value === false || value === nil) {
result.push(self[i]);
}
}
return result;
};
def['$reject!'] = TMP_13 = function() {
var $a, $b, self = this, $iter = TMP_13._p, block = $iter || nil, original = nil;
TMP_13._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("reject!")
};
original = self.$length();
($a = ($b = self).$delete_if, $a._p = block.$to_proc(), $a).call($b);
if (self.$length()['$=='](original)) {
return nil
} else {
return self
};
};
def.$replace = function(other) {
var $a, self = this;
if ((($a = $scope.Array['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
other = other.$to_a()
} else {
other = $scope.Opal.$coerce_to(other, $scope.Array, "to_ary").$to_a()
};
self.splice(0, self.length);
self.push.apply(self, other);
return self;
};
def.$reverse = function() {
var self = this;
return self.slice(0).reverse();
};
def['$reverse!'] = function() {
var self = this;
return self.reverse();
};
def.$reverse_each = TMP_14 = function() {
var $a, $b, self = this, $iter = TMP_14._p, block = $iter || nil;
TMP_14._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("reverse_each")
};
($a = ($b = self.$reverse()).$each, $a._p = block.$to_proc(), $a).call($b);
return self;
};
def.$rindex = TMP_15 = function(object) {
var self = this, $iter = TMP_15._p, block = $iter || nil;
TMP_15._p = null;
if (object != null) {
for (var i = self.length - 1; i >= 0; i--) {
if ((self[i])['$=='](object)) {
return i;
}
}
}
else if (block !== nil) {
for (var i = self.length - 1, value; i >= 0; i--) {
if ((value = block(self[i])) === $breaker) {
return $breaker.$v;
}
if (value !== false && value !== nil) {
return i;
}
}
}
else if (object == null) {
return self.$enum_for("rindex");
}
return nil;
};
def.$sample = function(n) {
var $a, $b, TMP_16, self = this;
if (n == null) {
n = nil
}
if ((($a = ($b = n['$!'](), $b !== false && $b !== nil ?self['$empty?']() : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return nil};
if ((($a = (($b = n !== false && n !== nil) ? self['$empty?']() : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return []};
if (n !== false && n !== nil) {
return ($a = ($b = ($range(1, n, false))).$map, $a._p = (TMP_16 = function(){var self = TMP_16._s || this;
return self['$[]'](self.$rand(self.$length()))}, TMP_16._s = self, TMP_16), $a).call($b)
} else {
return self['$[]'](self.$rand(self.$length()))
};
};
def.$select = TMP_17 = function() {
var self = this, $iter = TMP_17._p, block = $iter || nil;
TMP_17._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("select")
};
var result = [];
for (var i = 0, length = self.length, item, value; i < length; i++) {
item = self[i];
if ((value = $opal.$yield1(block, item)) === $breaker) {
return $breaker.$v;
}
if (value !== false && value !== nil) {
result.push(item);
}
}
return result;
};
def['$select!'] = TMP_18 = function() {
var $a, $b, self = this, $iter = TMP_18._p, block = $iter || nil;
TMP_18._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("select!")
};
var original = self.length;
($a = ($b = self).$keep_if, $a._p = block.$to_proc(), $a).call($b);
return self.length === original ? nil : self;
};
def.$shift = function(count) {
var $a, self = this;
if ((($a = count === undefined) !== nil && (!$a._isBoolean || $a == true))) {
if ((($a = self.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return nil};
return self.shift();};
count = $scope.Opal.$coerce_to(count, $scope.Integer, "to_int");
if ((($a = count < 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "negative array size")};
if ((($a = self.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return []};
return self.splice(0, count);
};
$opal.defn(self, '$size', def.$length);
def.$shuffle = function() {
var self = this;
return self.$clone()['$shuffle!']();
};
def['$shuffle!'] = function() {
var self = this;
for (var i = self.length - 1; i > 0; i--) {
var tmp = self[i],
j = Math.floor(Math.random() * (i + 1));
self[i] = self[j];
self[j] = tmp;
}
return self;
};
$opal.defn(self, '$slice', def['$[]']);
def['$slice!'] = function(index, length) {
var self = this;
if (index < 0) {
index += self.length;
}
if (length != null) {
return self.splice(index, length);
}
if (index < 0 || index >= self.length) {
return nil;
}
return self.splice(index, 1)[0];
};
def.$sort = TMP_19 = function() {
var $a, self = this, $iter = TMP_19._p, block = $iter || nil;
TMP_19._p = null;
if ((($a = self.length > 1) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return self
};
if (!(block !== nil)) {
block = function(a, b) {
return (a)['$<=>'](b);
};
}
try {
return self.slice().sort(function(x, y) {
var ret = block(x, y);
if (ret === $breaker) {
throw $breaker;
}
else if (ret === nil) {
self.$raise($scope.ArgumentError, "comparison of " + ((x).$inspect()) + " with " + ((y).$inspect()) + " failed");
}
return (ret)['$>'](0) ? 1 : ((ret)['$<'](0) ? -1 : 0);
});
}
catch (e) {
if (e === $breaker) {
return $breaker.$v;
}
else {
throw e;
}
}
;
};
def['$sort!'] = TMP_20 = function() {
var $a, $b, self = this, $iter = TMP_20._p, block = $iter || nil;
TMP_20._p = null;
var result;
if ((block !== nil)) {
result = ($a = ($b = (self.slice())).$sort, $a._p = block.$to_proc(), $a).call($b);
}
else {
result = (self.slice()).$sort();
}
self.length = 0;
for(var i = 0, length = result.length; i < length; i++) {
self.push(result[i]);
}
return self;
;
};
def.$take = function(count) {
var self = this;
if (count < 0) {
self.$raise($scope.ArgumentError);
}
return self.slice(0, count);
;
};
def.$take_while = TMP_21 = function() {
var self = this, $iter = TMP_21._p, block = $iter || nil;
TMP_21._p = null;
var result = [];
for (var i = 0, length = self.length, item, value; i < length; i++) {
item = self[i];
if ((value = block(item)) === $breaker) {
return $breaker.$v;
}
if (value === false || value === nil) {
return result;
}
result.push(item);
}
return result;
};
def.$to_a = function() {
var self = this;
return self;
};
$opal.defn(self, '$to_ary', def.$to_a);
$opal.defn(self, '$to_s', def.$inspect);
def.$transpose = function() {
var $a, $b, TMP_22, self = this, result = nil, max = nil;
if ((($a = self['$empty?']()) !== nil && (!$a._isBoolean || $a == true))) {
return []};
result = [];
max = nil;
($a = ($b = self).$each, $a._p = (TMP_22 = function(row){var self = TMP_22._s || this, $a, $b, TMP_23;
if (row == null) row = nil;
if ((($a = $scope.Array['$==='](row)) !== nil && (!$a._isBoolean || $a == true))) {
row = row.$to_a()
} else {
row = $scope.Opal.$coerce_to(row, $scope.Array, "to_ary").$to_a()
};
((($a = max) !== false && $a !== nil) ? $a : max = row.length);
if ((($a = (row.length)['$=='](max)['$!']()) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.IndexError, "element size differs (" + (row.length) + " should be " + (max))};
return ($a = ($b = (row.length)).$times, $a._p = (TMP_23 = function(i){var self = TMP_23._s || this, $a, $b, $c, entry = nil;
if (i == null) i = nil;
entry = (($a = i, $b = result, ((($c = $b['$[]']($a)) !== false && $c !== nil) ? $c : $b['$[]=']($a, []))));
return entry['$<<'](row.$at(i));}, TMP_23._s = self, TMP_23), $a).call($b);}, TMP_22._s = self, TMP_22), $a).call($b);
return result;
};
def.$uniq = function() {
var self = this;
var result = [],
seen = {};
for (var i = 0, length = self.length, item, hash; i < length; i++) {
item = self[i];
hash = item;
if (!seen[hash]) {
seen[hash] = true;
result.push(item);
}
}
return result;
};
def['$uniq!'] = function() {
var self = this;
var original = self.length,
seen = {};
for (var i = 0, length = original, item, hash; i < length; i++) {
item = self[i];
hash = item;
if (!seen[hash]) {
seen[hash] = true;
}
else {
self.splice(i, 1);
length--;
i--;
}
}
return self.length === original ? nil : self;
};
def.$unshift = function(objects) {
var self = this;
objects = $slice.call(arguments, 0);
for (var i = objects.length - 1; i >= 0; i--) {
self.unshift(objects[i]);
}
return self;
};
return (def.$zip = TMP_24 = function(others) {
var self = this, $iter = TMP_24._p, block = $iter || nil;
others = $slice.call(arguments, 0);
TMP_24._p = null;
var result = [], size = self.length, part, o;
for (var i = 0; i < size; i++) {
part = [self[i]];
for (var j = 0, jj = others.length; j < jj; j++) {
o = others[j][i];
if (o == null) {
o = nil;
}
part[j + 1] = o;
}
result[i] = part;
}
if (block !== nil) {
for (var i = 0; i < size; i++) {
block(result[i]);
}
return nil;
}
return result;
}, nil) && 'zip';
})(self, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/array/inheritance"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$new', '$allocate', '$initialize', '$to_proc', '$__send__', '$clone', '$respond_to?', '$==', '$eql?', '$inspect', '$*', '$class', '$slice', '$uniq', '$flatten']);
(function($base, $super) {
function $Array(){};
var self = $Array = $klass($base, $super, 'Array', $Array);
var def = self._proto, $scope = self._scope;
return ($opal.defs(self, '$inherited', function(klass) {
var self = this, replace = nil;
replace = $scope.Class.$new(($scope.Array)._scope.Wrapper);
klass._proto = replace._proto;
klass._proto._klass = klass;
klass._alloc = replace._alloc;
klass.__parent = ($scope.Array)._scope.Wrapper;
klass.$allocate = replace.$allocate;
klass.$new = replace.$new;
klass["$[]"] = replace["$[]"];
}), nil) && 'inherited'
})(self, null);
return (function($base, $super) {
function $Wrapper(){};
var self = $Wrapper = $klass($base, $super, 'Wrapper', $Wrapper);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5;
def.literal = nil;
$opal.defs(self, '$allocate', TMP_1 = function(array) {
var self = this, $iter = TMP_1._p, $yield = $iter || nil, obj = nil;
if (array == null) {
array = []
}
TMP_1._p = null;
obj = $opal.find_super_dispatcher(self, 'allocate', TMP_1, null, $Wrapper).apply(self, []);
obj.literal = array;
return obj;
});
$opal.defs(self, '$new', TMP_2 = function(args) {
var $a, $b, self = this, $iter = TMP_2._p, block = $iter || nil, obj = nil;
args = $slice.call(arguments, 0);
TMP_2._p = null;
obj = self.$allocate();
($a = ($b = obj).$initialize, $a._p = block.$to_proc(), $a).apply($b, [].concat(args));
return obj;
});
$opal.defs(self, '$[]', function(objects) {
var self = this;
objects = $slice.call(arguments, 0);
return self.$allocate(objects);
});
def.$initialize = TMP_3 = function(args) {
var $a, $b, self = this, $iter = TMP_3._p, block = $iter || nil;
args = $slice.call(arguments, 0);
TMP_3._p = null;
return self.literal = ($a = ($b = $scope.Array).$new, $a._p = block.$to_proc(), $a).apply($b, [].concat(args));
};
def.$method_missing = TMP_4 = function(args) {
var $a, $b, self = this, $iter = TMP_4._p, block = $iter || nil, result = nil;
args = $slice.call(arguments, 0);
TMP_4._p = null;
result = ($a = ($b = self.literal).$__send__, $a._p = block.$to_proc(), $a).apply($b, [].concat(args));
if ((($a = result === self.literal) !== nil && (!$a._isBoolean || $a == true))) {
return self
} else {
return result
};
};
def.$initialize_copy = function(other) {
var self = this;
return self.literal = (other.literal).$clone();
};
def['$respond_to?'] = TMP_5 = function(name) {var $zuper = $slice.call(arguments, 0);
var $a, self = this, $iter = TMP_5._p, $yield = $iter || nil;
TMP_5._p = null;
return ((($a = $opal.find_super_dispatcher(self, 'respond_to?', TMP_5, $iter).apply(self, $zuper)) !== false && $a !== nil) ? $a : self.literal['$respond_to?'](name));
};
def['$=='] = function(other) {
var self = this;
return self.literal['$=='](other);
};
def['$eql?'] = function(other) {
var self = this;
return self.literal['$eql?'](other);
};
def.$to_a = function() {
var self = this;
return self.literal;
};
def.$to_ary = function() {
var self = this;
return self;
};
def.$inspect = function() {
var self = this;
return self.literal.$inspect();
};
def['$*'] = function(other) {
var self = this;
var result = self.literal['$*'](other);
if (result._isArray) {
return self.$class().$allocate(result)
}
else {
return result;
}
;
};
def['$[]'] = function(index, length) {
var self = this;
var result = self.literal.$slice(index, length);
if (result._isArray && (index._isRange || length !== undefined)) {
return self.$class().$allocate(result)
}
else {
return result;
}
;
};
$opal.defn(self, '$slice', def['$[]']);
def.$uniq = function() {
var self = this;
return self.$class().$allocate(self.literal.$uniq());
};
return (def.$flatten = function(level) {
var self = this;
return self.$class().$allocate(self.literal.$flatten(level));
}, nil) && 'flatten';
})($scope.Array, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/hash"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$require', '$include', '$!', '$==', '$call', '$enum_for', '$raise', '$flatten', '$inspect', '$alias_method', '$clone']);
self.$require("corelib/enumerable");
return (function($base, $super) {
function $Hash(){};
var self = $Hash = $klass($base, $super, 'Hash', $Hash);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7, TMP_8, TMP_9, TMP_10, TMP_11, TMP_12;
def.proc = def.none = nil;
self.$include($scope.Enumerable);
$opal.defs(self, '$[]', function(objs) {
var self = this;
objs = $slice.call(arguments, 0);
return $opal.hash.apply(null, objs);
});
$opal.defs(self, '$allocate', function() {
var self = this;
var hash = new self._alloc;
hash.map = {};
hash.keys = [];
return hash;
});
def.$initialize = TMP_1 = function(defaults) {
var self = this, $iter = TMP_1._p, block = $iter || nil;
TMP_1._p = null;
if (defaults != null) {
self.none = defaults;
}
else if (block !== nil) {
self.proc = block;
}
return self;
};
def['$=='] = function(other) {
var self = this;
if (self === other) {
return true;
}
if (!other.map || !other.keys) {
return false;
}
if (self.keys.length !== other.keys.length) {
return false;
}
var map = self.map,
map2 = other.map;
for (var i = 0, length = self.keys.length; i < length; i++) {
var key = self.keys[i], obj = map[key], obj2 = map2[key];
if ((obj)['$=='](obj2)['$!']()) {
return false;
}
}
return true;
};
def['$[]'] = function(key) {
var self = this;
var map = self.map;
if ($opal.hasOwnProperty.call(map, key)) {
return map[key];
}
var proc = self.proc;
if (proc !== nil) {
return (proc).$call(self, key);
}
return self.none;
};
def['$[]='] = function(key, value) {
var self = this;
var map = self.map;
if (!$opal.hasOwnProperty.call(map, key)) {
self.keys.push(key);
}
map[key] = value;
return value;
};
def.$assoc = function(object) {
var self = this;
var keys = self.keys, key;
for (var i = 0, length = keys.length; i < length; i++) {
key = keys[i];
if ((key)['$=='](object)) {
return [key, self.map[key]];
}
}
return nil;
};
def.$clear = function() {
var self = this;
self.map = {};
self.keys = [];
return self;
};
def.$clone = function() {
var self = this;
var map = {},
keys = [];
for (var i = 0, length = self.keys.length; i < length; i++) {
var key = self.keys[i],
value = self.map[key];
keys.push(key);
map[key] = value;
}
var hash = new self._klass._alloc();
hash.map = map;
hash.keys = keys;
hash.none = self.none;
hash.proc = self.proc;
return hash;
};
def.$default = function(val) {
var self = this;
return self.none;
};
def['$default='] = function(object) {
var self = this;
return self.none = object;
};
def.$default_proc = function() {
var self = this;
return self.proc;
};
def['$default_proc='] = function(proc) {
var self = this;
return self.proc = proc;
};
def.$delete = function(key) {
var self = this;
var map = self.map, result = map[key];
if (result != null) {
delete map[key];
self.keys.$delete(key);
return result;
}
return nil;
};
def.$delete_if = TMP_2 = function() {
var self = this, $iter = TMP_2._p, block = $iter || nil;
TMP_2._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("delete_if")
};
var map = self.map, keys = self.keys, value;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], obj = map[key];
if ((value = block(key, obj)) === $breaker) {
return $breaker.$v;
}
if (value !== false && value !== nil) {
keys.splice(i, 1);
delete map[key];
length--;
i--;
}
}
return self;
};
$opal.defn(self, '$dup', def.$clone);
def.$each = TMP_3 = function() {
var self = this, $iter = TMP_3._p, block = $iter || nil;
TMP_3._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("each")
};
var map = self.map,
keys = self.keys;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i],
value = $opal.$yield1(block, [key, map[key]]);
if (value === $breaker) {
return $breaker.$v;
}
}
return self;
};
def.$each_key = TMP_4 = function() {
var self = this, $iter = TMP_4._p, block = $iter || nil;
TMP_4._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("each_key")
};
var keys = self.keys;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
if (block(key) === $breaker) {
return $breaker.$v;
}
}
return self;
};
$opal.defn(self, '$each_pair', def.$each);
def.$each_value = TMP_5 = function() {
var self = this, $iter = TMP_5._p, block = $iter || nil;
TMP_5._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("each_value")
};
var map = self.map, keys = self.keys;
for (var i = 0, length = keys.length; i < length; i++) {
if (block(map[keys[i]]) === $breaker) {
return $breaker.$v;
}
}
return self;
};
def['$empty?'] = function() {
var self = this;
return self.keys.length === 0;
};
$opal.defn(self, '$eql?', def['$==']);
def.$fetch = TMP_6 = function(key, defaults) {
var self = this, $iter = TMP_6._p, block = $iter || nil;
TMP_6._p = null;
var value = self.map[key];
if (value != null) {
return value;
}
if (block !== nil) {
var value;
if ((value = block(key)) === $breaker) {
return $breaker.$v;
}
return value;
}
if (defaults != null) {
return defaults;
}
self.$raise($scope.KeyError, "key not found");
};
def.$flatten = function(level) {
var self = this;
var map = self.map, keys = self.keys, result = [];
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], value = map[key];
result.push(key);
if (value._isArray) {
if (level == null || level === 1) {
result.push(value);
}
else {
result = result.concat((value).$flatten(level - 1));
}
}
else {
result.push(value);
}
}
return result;
};
def['$has_key?'] = function(key) {
var self = this;
return $opal.hasOwnProperty.call(self.map, key);
};
def['$has_value?'] = function(value) {
var self = this;
for (var assoc in self.map) {
if ((self.map[assoc])['$=='](value)) {
return true;
}
}
return false;
;
};
def.$hash = function() {
var self = this;
return self._id;
};
$opal.defn(self, '$include?', def['$has_key?']);
def.$index = function(object) {
var self = this;
var map = self.map, keys = self.keys;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
if ((map[key])['$=='](object)) {
return key;
}
}
return nil;
};
def.$indexes = function(keys) {
var self = this;
keys = $slice.call(arguments, 0);
var result = [], map = self.map, val;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], val = map[key];
if (val != null) {
result.push(val);
}
else {
result.push(self.none);
}
}
return result;
};
$opal.defn(self, '$indices', def.$indexes);
def.$inspect = function() {
var self = this;
var inspect = [], keys = self.keys, map = self.map;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], val = map[key];
if (val === self) {
inspect.push((key).$inspect() + '=>' + '{...}');
} else {
inspect.push((key).$inspect() + '=>' + (map[key]).$inspect());
}
}
return '{' + inspect.join(', ') + '}';
;
};
def.$invert = function() {
var self = this;
var result = $opal.hash(), keys = self.keys, map = self.map,
keys2 = result.keys, map2 = result.map;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], obj = map[key];
keys2.push(obj);
map2[obj] = key;
}
return result;
};
def.$keep_if = TMP_7 = function() {
var self = this, $iter = TMP_7._p, block = $iter || nil;
TMP_7._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("keep_if")
};
var map = self.map, keys = self.keys, value;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], obj = map[key];
if ((value = block(key, obj)) === $breaker) {
return $breaker.$v;
}
if (value === false || value === nil) {
keys.splice(i, 1);
delete map[key];
length--;
i--;
}
}
return self;
};
$opal.defn(self, '$key', def.$index);
$opal.defn(self, '$key?', def['$has_key?']);
def.$keys = function() {
var self = this;
return self.keys.slice(0);
};
def.$length = function() {
var self = this;
return self.keys.length;
};
$opal.defn(self, '$member?', def['$has_key?']);
def.$merge = TMP_8 = function(other) {
var self = this, $iter = TMP_8._p, block = $iter || nil;
TMP_8._p = null;
var keys = self.keys, map = self.map,
result = $opal.hash(), keys2 = result.keys, map2 = result.map;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
keys2.push(key);
map2[key] = map[key];
}
var keys = other.keys, map = other.map;
if (block === nil) {
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
if (map2[key] == null) {
keys2.push(key);
}
map2[key] = map[key];
}
}
else {
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
if (map2[key] == null) {
keys2.push(key);
map2[key] = map[key];
}
else {
map2[key] = block(key, map2[key], map[key]);
}
}
}
return result;
};
def['$merge!'] = TMP_9 = function(other) {
var self = this, $iter = TMP_9._p, block = $iter || nil;
TMP_9._p = null;
var keys = self.keys, map = self.map,
keys2 = other.keys, map2 = other.map;
if (block === nil) {
for (var i = 0, length = keys2.length; i < length; i++) {
var key = keys2[i];
if (map[key] == null) {
keys.push(key);
}
map[key] = map2[key];
}
}
else {
for (var i = 0, length = keys2.length; i < length; i++) {
var key = keys2[i];
if (map[key] == null) {
keys.push(key);
map[key] = map2[key];
}
else {
map[key] = block(key, map[key], map2[key]);
}
}
}
return self;
};
def.$rassoc = function(object) {
var self = this;
var keys = self.keys, map = self.map;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], obj = map[key];
if ((obj)['$=='](object)) {
return [key, obj];
}
}
return nil;
};
def.$reject = TMP_10 = function() {
var self = this, $iter = TMP_10._p, block = $iter || nil;
TMP_10._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("reject")
};
var keys = self.keys, map = self.map,
result = $opal.hash(), map2 = result.map, keys2 = result.keys;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], obj = map[key], value;
if ((value = block(key, obj)) === $breaker) {
return $breaker.$v;
}
if (value === false || value === nil) {
keys2.push(key);
map2[key] = obj;
}
}
return result;
};
def.$replace = function(other) {
var self = this;
var map = self.map = {}, keys = self.keys = [];
for (var i = 0, length = other.keys.length; i < length; i++) {
var key = other.keys[i];
keys.push(key);
map[key] = other.map[key];
}
return self;
};
def.$select = TMP_11 = function() {
var self = this, $iter = TMP_11._p, block = $iter || nil;
TMP_11._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("select")
};
var keys = self.keys, map = self.map,
result = $opal.hash(), map2 = result.map, keys2 = result.keys;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], obj = map[key], value;
if ((value = block(key, obj)) === $breaker) {
return $breaker.$v;
}
if (value !== false && value !== nil) {
keys2.push(key);
map2[key] = obj;
}
}
return result;
};
def['$select!'] = TMP_12 = function() {
var self = this, $iter = TMP_12._p, block = $iter || nil;
TMP_12._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("select!")
};
var map = self.map, keys = self.keys, value, result = nil;
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i], obj = map[key];
if ((value = block(key, obj)) === $breaker) {
return $breaker.$v;
}
if (value === false || value === nil) {
keys.splice(i, 1);
delete map[key];
length--;
i--;
result = self
}
}
return result;
};
def.$shift = function() {
var self = this;
var keys = self.keys, map = self.map;
if (keys.length) {
var key = keys[0], obj = map[key];
delete map[key];
keys.splice(0, 1);
return [key, obj];
}
return nil;
};
$opal.defn(self, '$size', def.$length);
self.$alias_method("store", "[]=");
def.$to_a = function() {
var self = this;
var keys = self.keys, map = self.map, result = [];
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
result.push([key, map[key]]);
}
return result;
};
def.$to_h = function() {
var self = this;
var hash = new Opal.Hash._alloc,
cloned = self.$clone();
hash.map = cloned.map;
hash.keys = cloned.keys;
hash.none = cloned.none;
hash.proc = cloned.proc;
return hash;
;
};
def.$to_hash = function() {
var self = this;
return self;
};
$opal.defn(self, '$to_s', def.$inspect);
$opal.defn(self, '$update', def['$merge!']);
$opal.defn(self, '$value?', def['$has_value?']);
$opal.defn(self, '$values_at', def.$indexes);
return (def.$values = function() {
var self = this;
var map = self.map,
result = [];
for (var key in map) {
result.push(map[key]);
}
return result;
}, nil) && 'values';
})(self, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/string"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $gvars = $opal.gvars;
$opal.add_stubs(['$require', '$include', '$to_str', '$===', '$format', '$coerce_to', '$to_s', '$respond_to?', '$<=>', '$raise', '$=~', '$empty?', '$ljust', '$ceil', '$/', '$+', '$rjust', '$floor', '$to_a', '$each_char', '$to_proc', '$coerce_to!', '$initialize_clone', '$initialize_dup', '$enum_for', '$split', '$chomp', '$escape', '$class', '$to_i', '$name', '$!', '$each_line', '$match', '$new', '$try_convert', '$chars', '$&', '$join', '$is_a?', '$[]', '$str', '$value']);
self.$require("corelib/comparable");
(function($base, $super) {
function $String(){};
var self = $String = $klass($base, $super, 'String', $String);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6, TMP_7;
def.length = nil;
self.$include($scope.Comparable);
def._isString = true;
$opal.defs(self, '$try_convert', function(what) {
var self = this;
try {
return what.$to_str()
} catch ($err) {if (true) {
return nil
}else { throw $err; }
};
});
$opal.defs(self, '$new', function(str) {
var self = this;
if (str == null) {
str = ""
}
return new String(str);
});
def['$%'] = function(data) {
var $a, self = this;
if ((($a = $scope.Array['$==='](data)) !== nil && (!$a._isBoolean || $a == true))) {
return ($a = self).$format.apply($a, [self].concat(data))
} else {
return self.$format(self, data)
};
};
def['$*'] = function(count) {
var self = this;
if (count < 1) {
return '';
}
var result = '',
pattern = self;
while (count > 0) {
if (count & 1) {
result += pattern;
}
count >>= 1;
pattern += pattern;
}
return result;
};
def['$+'] = function(other) {
var self = this;
other = $scope.Opal.$coerce_to(other, $scope.String, "to_str");
return self + other.$to_s();
};
def['$<=>'] = function(other) {
var $a, self = this;
if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a._isBoolean || $a == true))) {
other = other.$to_str().$to_s();
return self > other ? 1 : (self < other ? -1 : 0);
} else {
var cmp = other['$<=>'](self);
if (cmp === nil) {
return nil;
}
else {
return cmp > 0 ? -1 : (cmp < 0 ? 1 : 0);
}
;
};
};
def['$=='] = function(other) {
var $a, self = this;
if ((($a = $scope.String['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return false
};
return self.$to_s() == other.$to_s();
};
$opal.defn(self, '$eql?', def['$==']);
$opal.defn(self, '$===', def['$==']);
def['$=~'] = function(other) {
var self = this;
if (other._isString) {
self.$raise($scope.TypeError, "type mismatch: String given");
}
return other['$=~'](self);
;
};
def['$[]'] = function(index, length) {
var self = this;
var size = self.length;
if (index._isRange) {
var exclude = index.exclude,
length = index.end,
index = index.begin;
if (index < 0) {
index += size;
}
if (length < 0) {
length += size;
}
if (!exclude) {
length += 1;
}
if (index > size) {
return nil;
}
length = length - index;
if (length < 0) {
length = 0;
}
return self.substr(index, length);
}
if (index < 0) {
index += self.length;
}
if (length == null) {
if (index >= self.length || index < 0) {
return nil;
}
return self.substr(index, 1);
}
if (index > self.length || index < 0) {
return nil;
}
return self.substr(index, length);
};
def.$capitalize = function() {
var self = this;
return self.charAt(0).toUpperCase() + self.substr(1).toLowerCase();
};
def.$casecmp = function(other) {
var self = this;
other = $scope.Opal.$coerce_to(other, $scope.String, "to_str").$to_s();
return (self.toLowerCase())['$<=>'](other.toLowerCase());
};
def.$center = function(width, padstr) {
var $a, self = this;
if (padstr == null) {
padstr = " "
}
width = $scope.Opal.$coerce_to(width, $scope.Integer, "to_int");
padstr = $scope.Opal.$coerce_to(padstr, $scope.String, "to_str").$to_s();
if ((($a = padstr['$empty?']()) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "zero width padding")};
if ((($a = width <= self.length) !== nil && (!$a._isBoolean || $a == true))) {
return self};
var ljustified = self.$ljust((width['$+'](self.length))['$/'](2).$ceil(), padstr),
rjustified = self.$rjust((width['$+'](self.length))['$/'](2).$floor(), padstr);
return rjustified + ljustified.slice(self.length);
;
};
def.$chars = TMP_1 = function() {
var $a, $b, self = this, $iter = TMP_1._p, block = $iter || nil;
TMP_1._p = null;
if (block !== false && block !== nil) {
} else {
return self.$each_char().$to_a()
};
return ($a = ($b = self).$each_char, $a._p = block.$to_proc(), $a).call($b);
};
def.$chomp = function(separator) {
var $a, self = this;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (separator == null) {
separator = $gvars["/"]
}
if ((($a = separator === nil || self.length === 0) !== nil && (!$a._isBoolean || $a == true))) {
return self};
separator = $scope.Opal['$coerce_to!'](separator, $scope.String, "to_str").$to_s();
if (separator === "\n") {
return self.replace(/\r?\n?$/, '');
}
else if (separator === "") {
return self.replace(/(\r?\n)+$/, '');
}
else if (self.length > separator.length) {
var tail = self.substr(self.length - separator.length, separator.length);
if (tail === separator) {
return self.substr(0, self.length - separator.length);
}
}
return self;
};
def.$chop = function() {
var self = this;
var length = self.length;
if (length <= 1) {
return "";
}
if (self.charAt(length - 1) === "\n" && self.charAt(length - 2) === "\r") {
return self.substr(0, length - 2);
}
else {
return self.substr(0, length - 1);
}
};
def.$chr = function() {
var self = this;
return self.charAt(0);
};
def.$clone = function() {
var self = this, copy = nil;
copy = self.slice();
copy.$initialize_clone(self);
return copy;
};
def.$dup = function() {
var self = this, copy = nil;
copy = self.slice();
copy.$initialize_dup(self);
return copy;
};
def.$count = function(str) {
var self = this;
return (self.length - self.replace(new RegExp(str, 'g'), '').length) / str.length;
};
$opal.defn(self, '$dup', def.$clone);
def.$downcase = function() {
var self = this;
return self.toLowerCase();
};
def.$each_char = TMP_2 = function() {
var $a, self = this, $iter = TMP_2._p, block = $iter || nil;
TMP_2._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("each_char")
};
for (var i = 0, length = self.length; i < length; i++) {
((($a = $opal.$yield1(block, self.charAt(i))) === $breaker) ? $breaker.$v : $a);
}
return self;
};
def.$each_line = TMP_3 = function(separator) {
var $a, self = this, $iter = TMP_3._p, $yield = $iter || nil;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (separator == null) {
separator = $gvars["/"]
}
TMP_3._p = null;
if (($yield !== nil)) {
} else {
return self.$split(separator)
};
var chomped = self.$chomp(),
trailing = self.length != chomped.length,
splitted = chomped.split(separator);
for (var i = 0, length = splitted.length; i < length; i++) {
if (i < length - 1 || trailing) {
((($a = $opal.$yield1($yield, splitted[i] + separator)) === $breaker) ? $breaker.$v : $a);
}
else {
((($a = $opal.$yield1($yield, splitted[i])) === $breaker) ? $breaker.$v : $a);
}
}
;
return self;
};
def['$empty?'] = function() {
var self = this;
return self.length === 0;
};
def['$end_with?'] = function(suffixes) {
var self = this;
suffixes = $slice.call(arguments, 0);
for (var i = 0, length = suffixes.length; i < length; i++) {
var suffix = $scope.Opal.$coerce_to(suffixes[i], $scope.String, "to_str").$to_s();
if (self.length >= suffix.length &&
self.substr(self.length - suffix.length, suffix.length) == suffix) {
return true;
}
}
return false;
};
$opal.defn(self, '$eql?', def['$==']);
$opal.defn(self, '$equal?', def['$===']);
def.$gsub = TMP_4 = function(pattern, replace) {
var $a, $b, self = this, $iter = TMP_4._p, block = $iter || nil;
TMP_4._p = null;
if ((($a = ((($b = $scope.String['$==='](pattern)) !== false && $b !== nil) ? $b : pattern['$respond_to?']("to_str"))) !== nil && (!$a._isBoolean || $a == true))) {
pattern = (new RegExp("" + $scope.Regexp.$escape(pattern.$to_str())))};
if ((($a = $scope.Regexp['$==='](pattern)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.TypeError, "wrong argument type " + (pattern.$class()) + " (expected Regexp)")
};
var pattern = pattern.toString(),
options = pattern.substr(pattern.lastIndexOf('/') + 1) + 'g',
regexp = pattern.substr(1, pattern.lastIndexOf('/') - 1);
self.$sub._p = block;
return self.$sub(new RegExp(regexp, options), replace);
};
def.$hash = function() {
var self = this;
return self.toString();
};
def.$hex = function() {
var self = this;
return self.$to_i(16);
};
def['$include?'] = function(other) {
var $a, self = this;
if (other._isString) {
return self.indexOf(other) !== -1;
}
if ((($a = other['$respond_to?']("to_str")) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.TypeError, "no implicit conversion of " + (other.$class().$name()) + " into String")
};
return self.indexOf(other.$to_str()) !== -1;
};
def.$index = function(what, offset) {
var $a, self = this, result = nil;
if (offset == null) {
offset = nil
}
if ((($a = $scope.String['$==='](what)) !== nil && (!$a._isBoolean || $a == true))) {
what = what.$to_s()
} else if ((($a = what['$respond_to?']("to_str")) !== nil && (!$a._isBoolean || $a == true))) {
what = what.$to_str().$to_s()
} else if ((($a = $scope.Regexp['$==='](what)['$!']()) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.TypeError, "type mismatch: " + (what.$class()) + " given")};
result = -1;
if (offset !== false && offset !== nil) {
offset = $scope.Opal.$coerce_to(offset, $scope.Integer, "to_int");
var size = self.length;
if (offset < 0) {
offset = offset + size;
}
if (offset > size) {
return nil;
}
if ((($a = $scope.Regexp['$==='](what)) !== nil && (!$a._isBoolean || $a == true))) {
result = ((($a = (what['$=~'](self.substr(offset)))) !== false && $a !== nil) ? $a : -1)
} else {
result = self.substr(offset).indexOf(what)
};
if (result !== -1) {
result += offset;
}
} else if ((($a = $scope.Regexp['$==='](what)) !== nil && (!$a._isBoolean || $a == true))) {
result = ((($a = (what['$=~'](self))) !== false && $a !== nil) ? $a : -1)
} else {
result = self.indexOf(what)
};
if ((($a = result === -1) !== nil && (!$a._isBoolean || $a == true))) {
return nil
} else {
return result
};
};
def.$inspect = function() {
var self = this;
var escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
meta = {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
};
escapable.lastIndex = 0;
return escapable.test(self) ? '"' + self.replace(escapable, function(a) {
var c = meta[a];
return typeof c === 'string' ? c :
'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + self + '"';
};
def.$intern = function() {
var self = this;
return self;
};
def.$lines = function(separator) {
var self = this;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (separator == null) {
separator = $gvars["/"]
}
return self.$each_line(separator).$to_a();
};
def.$length = function() {
var self = this;
return self.length;
};
def.$ljust = function(width, padstr) {
var $a, self = this;
if (padstr == null) {
padstr = " "
}
width = $scope.Opal.$coerce_to(width, $scope.Integer, "to_int");
padstr = $scope.Opal.$coerce_to(padstr, $scope.String, "to_str").$to_s();
if ((($a = padstr['$empty?']()) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "zero width padding")};
if ((($a = width <= self.length) !== nil && (!$a._isBoolean || $a == true))) {
return self};
var index = -1,
result = "";
width -= self.length;
while (++index < width) {
result += padstr;
}
return self + result.slice(0, width);
};
def.$lstrip = function() {
var self = this;
return self.replace(/^\s*/, '');
};
def.$match = TMP_5 = function(pattern, pos) {
var $a, $b, self = this, $iter = TMP_5._p, block = $iter || nil;
TMP_5._p = null;
if ((($a = ((($b = $scope.String['$==='](pattern)) !== false && $b !== nil) ? $b : pattern['$respond_to?']("to_str"))) !== nil && (!$a._isBoolean || $a == true))) {
pattern = (new RegExp("" + $scope.Regexp.$escape(pattern.$to_str())))};
if ((($a = $scope.Regexp['$==='](pattern)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.TypeError, "wrong argument type " + (pattern.$class()) + " (expected Regexp)")
};
return ($a = ($b = pattern).$match, $a._p = block.$to_proc(), $a).call($b, self, pos);
};
def.$next = function() {
var self = this;
if (self.length === 0) {
return "";
}
var initial = self.substr(0, self.length - 1);
var last = String.fromCharCode(self.charCodeAt(self.length - 1) + 1);
return initial + last;
};
def.$ord = function() {
var self = this;
return self.charCodeAt(0);
};
def.$partition = function(str) {
var self = this;
var result = self.split(str);
var splitter = (result[0].length === self.length ? "" : str);
return [result[0], splitter, result.slice(1).join(str.toString())];
};
def.$reverse = function() {
var self = this;
return self.split('').reverse().join('');
};
def.$rindex = function(search, offset) {
var self = this;
var search_type = (search == null ? Opal.NilClass : search.constructor);
if (search_type != String && search_type != RegExp) {
var msg = "type mismatch: " + search_type + " given";
self.$raise($scope.TypeError.$new(msg));
}
if (self.length == 0) {
return search.length == 0 ? 0 : nil;
}
var result = -1;
if (offset != null) {
if (offset < 0) {
offset = self.length + offset;
}
if (search_type == String) {
result = self.lastIndexOf(search, offset);
}
else {
result = self.substr(0, offset + 1).$reverse().search(search);
if (result !== -1) {
result = offset - result;
}
}
}
else {
if (search_type == String) {
result = self.lastIndexOf(search);
}
else {
result = self.$reverse().search(search);
if (result !== -1) {
result = self.length - 1 - result;
}
}
}
return result === -1 ? nil : result;
};
def.$rjust = function(width, padstr) {
var $a, self = this;
if (padstr == null) {
padstr = " "
}
width = $scope.Opal.$coerce_to(width, $scope.Integer, "to_int");
padstr = $scope.Opal.$coerce_to(padstr, $scope.String, "to_str").$to_s();
if ((($a = padstr['$empty?']()) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "zero width padding")};
if ((($a = width <= self.length) !== nil && (!$a._isBoolean || $a == true))) {
return self};
var chars = Math.floor(width - self.length),
patterns = Math.floor(chars / padstr.length),
result = Array(patterns + 1).join(padstr),
remaining = chars - result.length;
return result + padstr.slice(0, remaining) + self;
};
def.$rstrip = function() {
var self = this;
return self.replace(/\s*$/, '');
};
def.$scan = TMP_6 = function(pattern) {
var self = this, $iter = TMP_6._p, block = $iter || nil;
TMP_6._p = null;
if (pattern.global) {
// should we clear it afterwards too?
pattern.lastIndex = 0;
}
else {
// rewrite regular expression to add the global flag to capture pre/post match
pattern = new RegExp(pattern.source, 'g' + (pattern.multiline ? 'm' : '') + (pattern.ignoreCase ? 'i' : ''));
}
var result = [];
var match;
while ((match = pattern.exec(self)) != null) {
var match_data = $scope.MatchData.$new(pattern, match);
if (block === nil) {
match.length == 1 ? result.push(match[0]) : result.push(match.slice(1));
}
else {
match.length == 1 ? block(match[0]) : block.apply(self, match.slice(1));
}
}
return (block !== nil ? self : result);
};
$opal.defn(self, '$size', def.$length);
$opal.defn(self, '$slice', def['$[]']);
def.$split = function(pattern, limit) {
var self = this, $a;
if ($gvars[";"] == null) $gvars[";"] = nil;
if (pattern == null) {
pattern = ((($a = $gvars[";"]) !== false && $a !== nil) ? $a : " ")
}
if (pattern === nil || pattern === undefined) {
pattern = $gvars[";"];
}
var result = [];
if (limit !== undefined) {
limit = $scope.Opal['$coerce_to!'](limit, $scope.Integer, "to_int");
}
if (self.length === 0) {
return [];
}
if (limit === 1) {
return [self];
}
if (pattern && pattern._isRegexp) {
var pattern_str = pattern.toString();
/* Opal and JS's repr of an empty RE. */
var blank_pattern = (pattern_str.substr(0, 3) == '/^/') ||
(pattern_str.substr(0, 6) == '/(?:)/');
/* This is our fast path */
if (limit === undefined || limit === 0) {
result = self.split(blank_pattern ? /(?:)/ : pattern);
}
else {
/* RegExp.exec only has sane behavior with global flag */
if (! pattern.global) {
pattern = eval(pattern_str + 'g');
}
var match_data;
var prev_index = 0;
pattern.lastIndex = 0;
while ((match_data = pattern.exec(self)) !== null) {
var segment = self.slice(prev_index, match_data.index);
result.push(segment);
prev_index = pattern.lastIndex;
if (match_data[0].length === 0) {
if (blank_pattern) {
/* explicitly split on JS's empty RE form.*/
pattern = /(?:)/;
}
result = self.split(pattern);
/* with "unlimited", ruby leaves a trail on blanks. */
if (limit !== undefined && limit < 0 && blank_pattern) {
result.push('');
}
prev_index = undefined;
break;
}
if (limit !== undefined && limit > 1 && result.length + 1 == limit) {
break;
}
}
if (prev_index !== undefined) {
result.push(self.slice(prev_index, self.length));
}
}
}
else {
var splitted = 0, start = 0, lim = 0;
if (pattern === nil || pattern === undefined) {
pattern = ' '
} else {
pattern = $scope.Opal.$try_convert(pattern, $scope.String, "to_str").$to_s();
}
var string = (pattern == ' ') ? self.replace(/[\r\n\t\v]\s+/g, ' ')
: self;
var cursor = -1;
while ((cursor = string.indexOf(pattern, start)) > -1 && cursor < string.length) {
if (splitted + 1 === limit) {
break;
}
if (pattern == ' ' && cursor == start) {
start = cursor + 1;
continue;
}
result.push(string.substr(start, pattern.length ? cursor - start : 1));
splitted++;
start = cursor + (pattern.length ? pattern.length : 1);
}
if (string.length > 0 && (limit < 0 || string.length > start)) {
if (string.length == start) {
result.push('');
}
else {
result.push(string.substr(start, string.length));
}
}
}
if (limit === undefined || limit === 0) {
while (result[result.length-1] === '') {
result.length = result.length - 1;
}
}
if (limit > 0) {
var tail = result.slice(limit - 1).join('');
result.splice(limit - 1, result.length - 1, tail);
}
return result;
;
};
def.$squeeze = function(sets) {
var self = this;
sets = $slice.call(arguments, 0);
if (sets.length === 0) {
return self.replace(/(.)\1+/g, '$1');
}
var set = $scope.Opal.$coerce_to(sets[0], $scope.String, "to_str").$chars();
for (var i = 1, length = sets.length; i < length; i++) {
set = (set)['$&']($scope.Opal.$coerce_to(sets[i], $scope.String, "to_str").$chars());
}
if (set.length === 0) {
return self;
}
return self.replace(new RegExp("([" + $scope.Regexp.$escape((set).$join()) + "])\\1+", "g"), "$1");
;
};
def['$start_with?'] = function(prefixes) {
var self = this;
prefixes = $slice.call(arguments, 0);
for (var i = 0, length = prefixes.length; i < length; i++) {
var prefix = $scope.Opal.$coerce_to(prefixes[i], $scope.String, "to_str").$to_s();
if (self.indexOf(prefix) === 0) {
return true;
}
}
return false;
};
def.$strip = function() {
var self = this;
return self.replace(/^\s*/, '').replace(/\s*$/, '');
};
def.$sub = TMP_7 = function(pattern, replace) {
var self = this, $iter = TMP_7._p, block = $iter || nil;
TMP_7._p = null;
if (typeof(replace) === 'string') {
// convert Ruby back reference to JavaScript back reference
replace = replace.replace(/\\([1-9])/g, '$$$1')
return self.replace(pattern, replace);
}
if (block !== nil) {
return self.replace(pattern, function() {
// FIXME: this should be a formal MatchData object with all the goodies
var match_data = []
for (var i = 0, len = arguments.length; i < len; i++) {
var arg = arguments[i];
if (arg == undefined) {
match_data.push(nil);
}
else {
match_data.push(arg);
}
}
var str = match_data.pop();
var offset = match_data.pop();
var match_len = match_data.length;
// $1, $2, $3 not being parsed correctly in Ruby code
//for (var i = 1; i < match_len; i++) {
// __gvars[String(i)] = match_data[i];
//}
$gvars["&"] = match_data[0];
$gvars["~"] = match_data;
return block(match_data[0]);
});
}
else if (replace !== undefined) {
if (replace['$is_a?']($scope.Hash)) {
return self.replace(pattern, function(str) {
var value = replace['$[]'](self.$str());
return (value == null) ? nil : self.$value().$to_s();
});
}
else {
replace = $scope.String.$try_convert(replace);
if (replace == null) {
self.$raise($scope.TypeError, "can't convert " + (replace.$class()) + " into String");
}
return self.replace(pattern, replace);
}
}
else {
// convert Ruby back reference to JavaScript back reference
replace = replace.toString().replace(/\\([1-9])/g, '$$$1')
return self.replace(pattern, replace);
}
;
};
$opal.defn(self, '$succ', def.$next);
def.$sum = function(n) {
var self = this;
if (n == null) {
n = 16
}
var result = 0;
for (var i = 0, length = self.length; i < length; i++) {
result += (self.charCodeAt(i) % ((1 << n) - 1));
}
return result;
};
def.$swapcase = function() {
var self = this;
var str = self.replace(/([a-z]+)|([A-Z]+)/g, function($0,$1,$2) {
return $1 ? $0.toUpperCase() : $0.toLowerCase();
});
if (self.constructor === String) {
return str;
}
return self.$class().$new(str);
};
def.$to_f = function() {
var self = this;
if (self.charAt(0) === '_') {
return 0;
}
var result = parseFloat(self.replace(/_/g, ''));
if (isNaN(result) || result == Infinity || result == -Infinity) {
return 0;
}
else {
return result;
}
};
def.$to_i = function(base) {
var self = this;
if (base == null) {
base = 10
}
var result = parseInt(self, base);
if (isNaN(result)) {
return 0;
}
return result;
};
def.$to_proc = function() {
var self = this;
var name = '$' + self;
return function(arg) {
var meth = arg[name];
return meth ? meth.call(arg) : arg.$method_missing(name);
};
};
def.$to_s = function() {
var self = this;
return self.toString();
};
$opal.defn(self, '$to_str', def.$to_s);
$opal.defn(self, '$to_sym', def.$intern);
def.$tr = function(from, to) {
var self = this;
if (from.length == 0 || from === to) {
return self;
}
var subs = {};
var from_chars = from.split('');
var from_length = from_chars.length;
var to_chars = to.split('');
var to_length = to_chars.length;
var inverse = false;
var global_sub = null;
if (from_chars[0] === '^') {
inverse = true;
from_chars.shift();
global_sub = to_chars[to_length - 1]
from_length -= 1;
}
var from_chars_expanded = [];
var last_from = null;
var in_range = false;
for (var i = 0; i < from_length; i++) {
var ch = from_chars[i];
if (last_from == null) {
last_from = ch;
from_chars_expanded.push(ch);
}
else if (ch === '-') {
if (last_from === '-') {
from_chars_expanded.push('-');
from_chars_expanded.push('-');
}
else if (i == from_length - 1) {
from_chars_expanded.push('-');
}
else {
in_range = true;
}
}
else if (in_range) {
var start = last_from.charCodeAt(0) + 1;
var end = ch.charCodeAt(0);
for (var c = start; c < end; c++) {
from_chars_expanded.push(String.fromCharCode(c));
}
from_chars_expanded.push(ch);
in_range = null;
last_from = null;
}
else {
from_chars_expanded.push(ch);
}
}
from_chars = from_chars_expanded;
from_length = from_chars.length;
if (inverse) {
for (var i = 0; i < from_length; i++) {
subs[from_chars[i]] = true;
}
}
else {
if (to_length > 0) {
var to_chars_expanded = [];
var last_to = null;
var in_range = false;
for (var i = 0; i < to_length; i++) {
var ch = to_chars[i];
if (last_from == null) {
last_from = ch;
to_chars_expanded.push(ch);
}
else if (ch === '-') {
if (last_to === '-') {
to_chars_expanded.push('-');
to_chars_expanded.push('-');
}
else if (i == to_length - 1) {
to_chars_expanded.push('-');
}
else {
in_range = true;
}
}
else if (in_range) {
var start = last_from.charCodeAt(0) + 1;
var end = ch.charCodeAt(0);
for (var c = start; c < end; c++) {
to_chars_expanded.push(String.fromCharCode(c));
}
to_chars_expanded.push(ch);
in_range = null;
last_from = null;
}
else {
to_chars_expanded.push(ch);
}
}
to_chars = to_chars_expanded;
to_length = to_chars.length;
}
var length_diff = from_length - to_length;
if (length_diff > 0) {
var pad_char = (to_length > 0 ? to_chars[to_length - 1] : '');
for (var i = 0; i < length_diff; i++) {
to_chars.push(pad_char);
}
}
for (var i = 0; i < from_length; i++) {
subs[from_chars[i]] = to_chars[i];
}
}
var new_str = ''
for (var i = 0, length = self.length; i < length; i++) {
var ch = self.charAt(i);
var sub = subs[ch];
if (inverse) {
new_str += (sub == null ? global_sub : ch);
}
else {
new_str += (sub != null ? sub : ch);
}
}
return new_str;
};
def.$tr_s = function(from, to) {
var self = this;
if (from.length == 0) {
return self;
}
var subs = {};
var from_chars = from.split('');
var from_length = from_chars.length;
var to_chars = to.split('');
var to_length = to_chars.length;
var inverse = false;
var global_sub = null;
if (from_chars[0] === '^') {
inverse = true;
from_chars.shift();
global_sub = to_chars[to_length - 1]
from_length -= 1;
}
var from_chars_expanded = [];
var last_from = null;
var in_range = false;
for (var i = 0; i < from_length; i++) {
var ch = from_chars[i];
if (last_from == null) {
last_from = ch;
from_chars_expanded.push(ch);
}
else if (ch === '-') {
if (last_from === '-') {
from_chars_expanded.push('-');
from_chars_expanded.push('-');
}
else if (i == from_length - 1) {
from_chars_expanded.push('-');
}
else {
in_range = true;
}
}
else if (in_range) {
var start = last_from.charCodeAt(0) + 1;
var end = ch.charCodeAt(0);
for (var c = start; c < end; c++) {
from_chars_expanded.push(String.fromCharCode(c));
}
from_chars_expanded.push(ch);
in_range = null;
last_from = null;
}
else {
from_chars_expanded.push(ch);
}
}
from_chars = from_chars_expanded;
from_length = from_chars.length;
if (inverse) {
for (var i = 0; i < from_length; i++) {
subs[from_chars[i]] = true;
}
}
else {
if (to_length > 0) {
var to_chars_expanded = [];
var last_to = null;
var in_range = false;
for (var i = 0; i < to_length; i++) {
var ch = to_chars[i];
if (last_from == null) {
last_from = ch;
to_chars_expanded.push(ch);
}
else if (ch === '-') {
if (last_to === '-') {
to_chars_expanded.push('-');
to_chars_expanded.push('-');
}
else if (i == to_length - 1) {
to_chars_expanded.push('-');
}
else {
in_range = true;
}
}
else if (in_range) {
var start = last_from.charCodeAt(0) + 1;
var end = ch.charCodeAt(0);
for (var c = start; c < end; c++) {
to_chars_expanded.push(String.fromCharCode(c));
}
to_chars_expanded.push(ch);
in_range = null;
last_from = null;
}
else {
to_chars_expanded.push(ch);
}
}
to_chars = to_chars_expanded;
to_length = to_chars.length;
}
var length_diff = from_length - to_length;
if (length_diff > 0) {
var pad_char = (to_length > 0 ? to_chars[to_length - 1] : '');
for (var i = 0; i < length_diff; i++) {
to_chars.push(pad_char);
}
}
for (var i = 0; i < from_length; i++) {
subs[from_chars[i]] = to_chars[i];
}
}
var new_str = ''
var last_substitute = null
for (var i = 0, length = self.length; i < length; i++) {
var ch = self.charAt(i);
var sub = subs[ch]
if (inverse) {
if (sub == null) {
if (last_substitute == null) {
new_str += global_sub;
last_substitute = true;
}
}
else {
new_str += ch;
last_substitute = null;
}
}
else {
if (sub != null) {
if (last_substitute == null || last_substitute !== sub) {
new_str += sub;
last_substitute = sub;
}
}
else {
new_str += ch;
last_substitute = null;
}
}
}
return new_str;
};
def.$upcase = function() {
var self = this;
return self.toUpperCase();
};
def.$freeze = function() {
var self = this;
return self;
};
return (def['$frozen?'] = function() {
var self = this;
return true;
}, nil) && 'frozen?';
})(self, null);
return $opal.cdecl($scope, 'Symbol', $scope.String);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/string/inheritance"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$new', '$allocate', '$initialize', '$to_proc', '$__send__', '$class', '$clone', '$respond_to?', '$==', '$inspect']);
(function($base, $super) {
function $String(){};
var self = $String = $klass($base, $super, 'String', $String);
var def = self._proto, $scope = self._scope;
return ($opal.defs(self, '$inherited', function(klass) {
var self = this, replace = nil;
replace = $scope.Class.$new(($scope.String)._scope.Wrapper);
klass._proto = replace._proto;
klass._proto._klass = klass;
klass._alloc = replace._alloc;
klass.__parent = ($scope.String)._scope.Wrapper;
klass.$allocate = replace.$allocate;
klass.$new = replace.$new;
}), nil) && 'inherited'
})(self, null);
return (function($base, $super) {
function $Wrapper(){};
var self = $Wrapper = $klass($base, $super, 'Wrapper', $Wrapper);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4;
def.literal = nil;
$opal.defs(self, '$allocate', TMP_1 = function(string) {
var self = this, $iter = TMP_1._p, $yield = $iter || nil, obj = nil;
if (string == null) {
string = ""
}
TMP_1._p = null;
obj = $opal.find_super_dispatcher(self, 'allocate', TMP_1, null, $Wrapper).apply(self, []);
obj.literal = string;
return obj;
});
$opal.defs(self, '$new', TMP_2 = function(args) {
var $a, $b, self = this, $iter = TMP_2._p, block = $iter || nil, obj = nil;
args = $slice.call(arguments, 0);
TMP_2._p = null;
obj = self.$allocate();
($a = ($b = obj).$initialize, $a._p = block.$to_proc(), $a).apply($b, [].concat(args));
return obj;
});
$opal.defs(self, '$[]', function(objects) {
var self = this;
objects = $slice.call(arguments, 0);
return self.$allocate(objects);
});
def.$initialize = function(string) {
var self = this;
if (string == null) {
string = ""
}
return self.literal = string;
};
def.$method_missing = TMP_3 = function(args) {
var $a, $b, self = this, $iter = TMP_3._p, block = $iter || nil, result = nil;
args = $slice.call(arguments, 0);
TMP_3._p = null;
result = ($a = ($b = self.literal).$__send__, $a._p = block.$to_proc(), $a).apply($b, [].concat(args));
if ((($a = result._isString != null) !== nil && (!$a._isBoolean || $a == true))) {
if ((($a = result == self.literal) !== nil && (!$a._isBoolean || $a == true))) {
return self
} else {
return self.$class().$allocate(result)
}
} else {
return result
};
};
def.$initialize_copy = function(other) {
var self = this;
return self.literal = (other.literal).$clone();
};
def['$respond_to?'] = TMP_4 = function(name) {var $zuper = $slice.call(arguments, 0);
var $a, self = this, $iter = TMP_4._p, $yield = $iter || nil;
TMP_4._p = null;
return ((($a = $opal.find_super_dispatcher(self, 'respond_to?', TMP_4, $iter).apply(self, $zuper)) !== false && $a !== nil) ? $a : self.literal['$respond_to?'](name));
};
def['$=='] = function(other) {
var self = this;
return self.literal['$=='](other);
};
$opal.defn(self, '$eql?', def['$==']);
$opal.defn(self, '$===', def['$==']);
def.$to_s = function() {
var self = this;
return self.literal;
};
def.$to_str = function() {
var self = this;
return self;
};
return (def.$inspect = function() {
var self = this;
return self.literal.$inspect();
}, nil) && 'inspect';
})($scope.String, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/match_data"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $gvars = $opal.gvars;
$opal.add_stubs(['$attr_reader', '$pre_match', '$post_match', '$[]', '$===', '$!', '$==', '$raise', '$inspect']);
return (function($base, $super) {
function $MatchData(){};
var self = $MatchData = $klass($base, $super, 'MatchData', $MatchData);
var def = self._proto, $scope = self._scope, TMP_1;
def.string = def.matches = def.begin = nil;
self.$attr_reader("post_match", "pre_match", "regexp", "string");
$opal.defs(self, '$new', TMP_1 = function(regexp, match_groups) {
var self = this, $iter = TMP_1._p, $yield = $iter || nil, data = nil;
TMP_1._p = null;
data = $opal.find_super_dispatcher(self, 'new', TMP_1, null, $MatchData).apply(self, [regexp, match_groups]);
$gvars["`"] = data.$pre_match();
$gvars["'"] = data.$post_match();
$gvars["~"] = data;
return data;
});
def.$initialize = function(regexp, match_groups) {
var self = this;
self.regexp = regexp;
self.begin = match_groups.index;
self.string = match_groups.input;
self.pre_match = self.string.substr(0, regexp.lastIndex - match_groups[0].length);
self.post_match = self.string.substr(regexp.lastIndex);
self.matches = [];
for (var i = 0, length = match_groups.length; i < length; i++) {
var group = match_groups[i];
if (group == null) {
self.matches.push(nil);
}
else {
self.matches.push(group);
}
}
};
def['$[]'] = function(args) {
var $a, self = this;
args = $slice.call(arguments, 0);
return ($a = self.matches)['$[]'].apply($a, [].concat(args));
};
def['$=='] = function(other) {
var $a, $b, $c, $d, self = this;
if ((($a = $scope.MatchData['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return false
};
return ($a = ($b = ($c = ($d = self.string == other.string, $d !== false && $d !== nil ?self.regexp == other.regexp : $d), $c !== false && $c !== nil ?self.pre_match == other.pre_match : $c), $b !== false && $b !== nil ?self.post_match == other.post_match : $b), $a !== false && $a !== nil ?self.begin == other.begin : $a);
};
def.$begin = function(pos) {
var $a, $b, self = this;
if ((($a = ($b = pos['$=='](0)['$!'](), $b !== false && $b !== nil ?pos['$=='](1)['$!']() : $b)) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "MatchData#begin only supports 0th element")};
return self.begin;
};
def.$captures = function() {
var self = this;
return self.matches.slice(1);
};
def.$inspect = function() {
var self = this;
var str = "#<MatchData " + (self.matches[0]).$inspect();
for (var i = 1, length = self.matches.length; i < length; i++) {
str += " " + i + ":" + (self.matches[i]).$inspect();
}
return str + ">";
;
};
def.$length = function() {
var self = this;
return self.matches.length;
};
$opal.defn(self, '$size', def.$length);
def.$to_a = function() {
var self = this;
return self.matches;
};
def.$to_s = function() {
var self = this;
return self.matches[0];
};
return (def.$values_at = function(indexes) {
var self = this;
indexes = $slice.call(arguments, 0);
var values = [],
match_length = self.matches.length;
for (var i = 0, length = indexes.length; i < length; i++) {
var pos = indexes[i];
if (pos >= 0) {
values.push(self.matches[pos]);
}
else {
pos += match_length;
if (pos > 0) {
values.push(self.matches[pos]);
}
else {
values.push(nil);
}
}
}
return values;
;
}, nil) && 'values_at';
})(self, null)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/numeric"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$require', '$include', '$coerce', '$===', '$raise', '$class', '$__send__', '$send_coerced', '$to_int', '$coerce_to!', '$-@', '$**', '$-', '$respond_to?', '$==', '$enum_for', '$gcd', '$lcm', '$<', '$>', '$floor', '$/', '$%']);
self.$require("corelib/comparable");
(function($base, $super) {
function $Numeric(){};
var self = $Numeric = $klass($base, $super, 'Numeric', $Numeric);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3, TMP_4, TMP_5, TMP_6;
self.$include($scope.Comparable);
def._isNumber = true;
def.$coerce = function(other, type) {
var self = this, $case = nil;
if (type == null) {
type = "operation"
}
try {
if (other._isNumber) {
return [self, other];
}
else {
return other.$coerce(self);
}
} catch ($err) {if (true) {
return (function() {$case = type;if ("operation"['$===']($case)) {return self.$raise($scope.TypeError, "" + (other.$class()) + " can't be coerce into Numeric")}else if ("comparison"['$===']($case)) {return self.$raise($scope.ArgumentError, "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed")}else { return nil }})()
}else { throw $err; }
};
};
def.$send_coerced = function(method, other) {
var $a, self = this, type = nil, $case = nil, a = nil, b = nil;
type = (function() {$case = method;if ("+"['$===']($case) || "-"['$===']($case) || "*"['$===']($case) || "/"['$===']($case) || "%"['$===']($case) || "&"['$===']($case) || "|"['$===']($case) || "^"['$===']($case) || "**"['$===']($case)) {return "operation"}else if (">"['$===']($case) || ">="['$===']($case) || "<"['$===']($case) || "<="['$===']($case) || "<=>"['$===']($case)) {return "comparison"}else { return nil }})();
$a = $opal.to_ary(self.$coerce(other, type)), a = ($a[0] == null ? nil : $a[0]), b = ($a[1] == null ? nil : $a[1]);
return a.$__send__(method, b);
};
def['$+'] = function(other) {
var self = this;
if (other._isNumber) {
return self + other;
}
else {
return self.$send_coerced("+", other);
}
};
def['$-'] = function(other) {
var self = this;
if (other._isNumber) {
return self - other;
}
else {
return self.$send_coerced("-", other);
}
};
def['$*'] = function(other) {
var self = this;
if (other._isNumber) {
return self * other;
}
else {
return self.$send_coerced("*", other);
}
};
def['$/'] = function(other) {
var self = this;
if (other._isNumber) {
return self / other;
}
else {
return self.$send_coerced("/", other);
}
};
def['$%'] = function(other) {
var self = this;
if (other._isNumber) {
if (other < 0 || self < 0) {
return (self % other + other) % other;
}
else {
return self % other;
}
}
else {
return self.$send_coerced("%", other);
}
};
def['$&'] = function(other) {
var self = this;
if (other._isNumber) {
return self & other;
}
else {
return self.$send_coerced("&", other);
}
};
def['$|'] = function(other) {
var self = this;
if (other._isNumber) {
return self | other;
}
else {
return self.$send_coerced("|", other);
}
};
def['$^'] = function(other) {
var self = this;
if (other._isNumber) {
return self ^ other;
}
else {
return self.$send_coerced("^", other);
}
};
def['$<'] = function(other) {
var self = this;
if (other._isNumber) {
return self < other;
}
else {
return self.$send_coerced("<", other);
}
};
def['$<='] = function(other) {
var self = this;
if (other._isNumber) {
return self <= other;
}
else {
return self.$send_coerced("<=", other);
}
};
def['$>'] = function(other) {
var self = this;
if (other._isNumber) {
return self > other;
}
else {
return self.$send_coerced(">", other);
}
};
def['$>='] = function(other) {
var self = this;
if (other._isNumber) {
return self >= other;
}
else {
return self.$send_coerced(">=", other);
}
};
def['$<=>'] = function(other) {
var self = this;
try {
if (other._isNumber) {
return self > other ? 1 : (self < other ? -1 : 0);
}
else {
return self.$send_coerced("<=>", other);
}
} catch ($err) {if ($scope.ArgumentError['$===']($err)) {
return nil
}else { throw $err; }
};
};
def['$<<'] = function(count) {
var self = this;
return self << count.$to_int();
};
def['$>>'] = function(count) {
var self = this;
return self >> count.$to_int();
};
def['$[]'] = function(bit) {
var self = this, min = nil, max = nil;
bit = $scope.Opal['$coerce_to!'](bit, $scope.Integer, "to_int");
min = ((2)['$**'](30))['$-@']();
max = ((2)['$**'](30))['$-'](1);
return (bit < min || bit > max) ? 0 : (self >> bit) % 2;
};
def['$+@'] = function() {
var self = this;
return +self;
};
def['$-@'] = function() {
var self = this;
return -self;
};
def['$~'] = function() {
var self = this;
return ~self;
};
def['$**'] = function(other) {
var self = this;
if (other._isNumber) {
return Math.pow(self, other);
}
else {
return self.$send_coerced("**", other);
}
};
def['$=='] = function(other) {
var self = this;
if (other._isNumber) {
return self == Number(other);
}
else if (other['$respond_to?']("==")) {
return other['$=='](self);
}
else {
return false;
}
;
};
def.$abs = function() {
var self = this;
return Math.abs(self);
};
def.$ceil = function() {
var self = this;
return Math.ceil(self);
};
def.$chr = function() {
var self = this;
return String.fromCharCode(self);
};
def.$conj = function() {
var self = this;
return self;
};
$opal.defn(self, '$conjugate', def.$conj);
def.$downto = TMP_1 = function(finish) {
var self = this, $iter = TMP_1._p, block = $iter || nil;
TMP_1._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("downto", finish)
};
for (var i = self; i >= finish; i--) {
if (block(i) === $breaker) {
return $breaker.$v;
}
}
return self;
};
$opal.defn(self, '$eql?', def['$==']);
$opal.defn(self, '$equal?', def['$==']);
def['$even?'] = function() {
var self = this;
return self % 2 === 0;
};
def.$floor = function() {
var self = this;
return Math.floor(self);
};
def.$gcd = function(other) {
var $a, self = this;
if ((($a = $scope.Integer['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.TypeError, "not an integer")
};
var min = Math.abs(self),
max = Math.abs(other);
while (min > 0) {
var tmp = min;
min = max % min;
max = tmp;
}
return max;
};
def.$gcdlcm = function(other) {
var self = this;
return [self.$gcd(), self.$lcm()];
};
def.$hash = function() {
var self = this;
return self.toString();
};
def['$integer?'] = function() {
var self = this;
return self % 1 === 0;
};
def['$is_a?'] = TMP_2 = function(klass) {var $zuper = $slice.call(arguments, 0);
var $a, $b, self = this, $iter = TMP_2._p, $yield = $iter || nil;
TMP_2._p = null;
if ((($a = (($b = klass['$==']($scope.Fixnum)) ? $scope.Integer['$==='](self) : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return true};
if ((($a = (($b = klass['$==']($scope.Integer)) ? $scope.Integer['$==='](self) : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return true};
if ((($a = (($b = klass['$==']($scope.Float)) ? $scope.Float['$==='](self) : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return true};
return $opal.find_super_dispatcher(self, 'is_a?', TMP_2, $iter).apply(self, $zuper);
};
$opal.defn(self, '$kind_of?', def['$is_a?']);
def['$instance_of?'] = TMP_3 = function(klass) {var $zuper = $slice.call(arguments, 0);
var $a, $b, self = this, $iter = TMP_3._p, $yield = $iter || nil;
TMP_3._p = null;
if ((($a = (($b = klass['$==']($scope.Fixnum)) ? $scope.Integer['$==='](self) : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return true};
if ((($a = (($b = klass['$==']($scope.Integer)) ? $scope.Integer['$==='](self) : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return true};
if ((($a = (($b = klass['$==']($scope.Float)) ? $scope.Float['$==='](self) : $b)) !== nil && (!$a._isBoolean || $a == true))) {
return true};
return $opal.find_super_dispatcher(self, 'instance_of?', TMP_3, $iter).apply(self, $zuper);
};
def.$lcm = function(other) {
var $a, self = this;
if ((($a = $scope.Integer['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.TypeError, "not an integer")
};
if (self == 0 || other == 0) {
return 0;
}
else {
return Math.abs(self * other / self.$gcd(other));
}
};
$opal.defn(self, '$magnitude', def.$abs);
$opal.defn(self, '$modulo', def['$%']);
def.$next = function() {
var self = this;
return self + 1;
};
def['$nonzero?'] = function() {
var self = this;
return self == 0 ? nil : self;
};
def['$odd?'] = function() {
var self = this;
return self % 2 !== 0;
};
def.$ord = function() {
var self = this;
return self;
};
def.$pred = function() {
var self = this;
return self - 1;
};
def.$round = function() {
var self = this;
return Math.round(self);
};
def.$step = TMP_4 = function(limit, step) {
var $a, self = this, $iter = TMP_4._p, block = $iter || nil;
if (step == null) {
step = 1
}
TMP_4._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("step", limit, step)
};
if ((($a = step == 0) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "step cannot be 0")};
var value = self;
if (step > 0) {
while (value <= limit) {
block(value);
value += step;
}
}
else {
while (value >= limit) {
block(value);
value += step;
}
}
return self;
};
$opal.defn(self, '$succ', def.$next);
def.$times = TMP_5 = function() {
var self = this, $iter = TMP_5._p, block = $iter || nil;
TMP_5._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("times")
};
for (var i = 0; i < self; i++) {
if (block(i) === $breaker) {
return $breaker.$v;
}
}
return self;
};
def.$to_f = function() {
var self = this;
return self;
};
def.$to_i = function() {
var self = this;
return parseInt(self);
};
$opal.defn(self, '$to_int', def.$to_i);
def.$to_s = function(base) {
var $a, $b, self = this;
if (base == null) {
base = 10
}
if ((($a = ((($b = base['$<'](2)) !== false && $b !== nil) ? $b : base['$>'](36))) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.ArgumentError, "base must be between 2 and 36")};
return self.toString(base);
};
$opal.defn(self, '$inspect', def.$to_s);
def.$divmod = function(rhs) {
var self = this, q = nil, r = nil;
q = (self['$/'](rhs)).$floor();
r = self['$%'](rhs);
return [q, r];
};
def.$upto = TMP_6 = function(finish) {
var self = this, $iter = TMP_6._p, block = $iter || nil;
TMP_6._p = null;
if (block !== false && block !== nil) {
} else {
return self.$enum_for("upto", finish)
};
for (var i = self; i <= finish; i++) {
if (block(i) === $breaker) {
return $breaker.$v;
}
}
return self;
};
def['$zero?'] = function() {
var self = this;
return self == 0;
};
def.$size = function() {
var self = this;
return 4;
};
def['$nan?'] = function() {
var self = this;
return isNaN(self);
};
def['$finite?'] = function() {
var self = this;
return self != Infinity && self != -Infinity;
};
def['$infinite?'] = function() {
var self = this;
if (self == Infinity) {
return +1;
}
else if (self == -Infinity) {
return -1;
}
else {
return nil;
}
};
def['$positive?'] = function() {
var self = this;
return 1 / self > 0;
};
return (def['$negative?'] = function() {
var self = this;
return 1 / self < 0;
}, nil) && 'negative?';
})(self, null);
$opal.cdecl($scope, 'Fixnum', $scope.Numeric);
(function($base, $super) {
function $Integer(){};
var self = $Integer = $klass($base, $super, 'Integer', $Integer);
var def = self._proto, $scope = self._scope;
return ($opal.defs(self, '$===', function(other) {
var self = this;
if (!other._isNumber) {
return false;
}
return (other % 1) === 0;
}), nil) && '==='
})(self, $scope.Numeric);
return (function($base, $super) {
function $Float(){};
var self = $Float = $klass($base, $super, 'Float', $Float);
var def = self._proto, $scope = self._scope, $a;
$opal.defs(self, '$===', function(other) {
var self = this;
return !!other._isNumber;
});
$opal.cdecl($scope, 'INFINITY', Infinity);
$opal.cdecl($scope, 'NAN', NaN);
if ((($a = (typeof(Number.EPSILON) !== "undefined")) !== nil && (!$a._isBoolean || $a == true))) {
return $opal.cdecl($scope, 'EPSILON', Number.EPSILON)
} else {
return $opal.cdecl($scope, 'EPSILON', 2.2204460492503130808472633361816E-16)
};
})(self, $scope.Numeric);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/complex"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs([]);
return (function($base, $super) {
function $Complex(){};
var self = $Complex = $klass($base, $super, 'Complex', $Complex);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.Numeric)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/rational"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs([]);
return (function($base, $super) {
function $Rational(){};
var self = $Rational = $klass($base, $super, 'Rational', $Rational);
var def = self._proto, $scope = self._scope;
return nil;
})(self, $scope.Numeric)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/proc"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$raise']);
return (function($base, $super) {
function $Proc(){};
var self = $Proc = $klass($base, $super, 'Proc', $Proc);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2;
def._isProc = true;
def.is_lambda = false;
$opal.defs(self, '$new', TMP_1 = function() {
var self = this, $iter = TMP_1._p, block = $iter || nil;
TMP_1._p = null;
if (block !== false && block !== nil) {
} else {
self.$raise($scope.ArgumentError, "tried to create a Proc object without a block")
};
return block;
});
def.$call = TMP_2 = function(args) {
var self = this, $iter = TMP_2._p, block = $iter || nil;
args = $slice.call(arguments, 0);
TMP_2._p = null;
if (block !== nil) {
self._p = block;
}
var result;
if (self.is_lambda) {
result = self.apply(null, args);
}
else {
result = Opal.$yieldX(self, args);
}
if (result === $breaker) {
return $breaker.$v;
}
return result;
};
$opal.defn(self, '$[]', def.$call);
def.$to_proc = function() {
var self = this;
return self;
};
def['$lambda?'] = function() {
var self = this;
return !!self.is_lambda;
};
return (def.$arity = function() {
var self = this;
return self.length;
}, nil) && 'arity';
})(self, null)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/method"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$attr_reader', '$class', '$arity', '$new', '$name']);
(function($base, $super) {
function $Method(){};
var self = $Method = $klass($base, $super, 'Method', $Method);
var def = self._proto, $scope = self._scope, TMP_1;
def.method = def.receiver = def.owner = def.name = def.obj = nil;
self.$attr_reader("owner", "receiver", "name");
def.$initialize = function(receiver, method, name) {
var self = this;
self.receiver = receiver;
self.owner = receiver.$class();
self.name = name;
return self.method = method;
};
def.$arity = function() {
var self = this;
return self.method.$arity();
};
def.$call = TMP_1 = function(args) {
var self = this, $iter = TMP_1._p, block = $iter || nil;
args = $slice.call(arguments, 0);
TMP_1._p = null;
self.method._p = block;
return self.method.apply(self.receiver, args);
;
};
$opal.defn(self, '$[]', def.$call);
def.$unbind = function() {
var self = this;
return $scope.UnboundMethod.$new(self.owner, self.method, self.name);
};
def.$to_proc = function() {
var self = this;
return self.method;
};
return (def.$inspect = function() {
var self = this;
return "#<Method: " + (self.obj.$class().$name()) + "#" + (self.name) + "}>";
}, nil) && 'inspect';
})(self, null);
return (function($base, $super) {
function $UnboundMethod(){};
var self = $UnboundMethod = $klass($base, $super, 'UnboundMethod', $UnboundMethod);
var def = self._proto, $scope = self._scope;
def.method = def.name = def.owner = nil;
self.$attr_reader("owner", "name");
def.$initialize = function(owner, method, name) {
var self = this;
self.owner = owner;
self.method = method;
return self.name = name;
};
def.$arity = function() {
var self = this;
return self.method.$arity();
};
def.$bind = function(object) {
var self = this;
return $scope.Method.$new(object, self.method, self.name);
};
return (def.$inspect = function() {
var self = this;
return "#<UnboundMethod: " + (self.owner.$name()) + "#" + (self.name) + ">";
}, nil) && 'inspect';
})(self, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/range"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$require', '$include', '$attr_reader', '$include?', '$<=', '$<', '$enum_for', '$succ', '$!', '$==', '$===', '$exclude_end?', '$eql?', '$begin', '$end', '$cover?', '$raise', '$inspect']);
self.$require("corelib/enumerable");
return (function($base, $super) {
function $Range(){};
var self = $Range = $klass($base, $super, 'Range', $Range);
var def = self._proto, $scope = self._scope, TMP_1, TMP_2, TMP_3;
def.begin = def.exclude = def.end = nil;
self.$include($scope.Enumerable);
def._isRange = true;
self.$attr_reader("begin", "end");
def.$initialize = function(first, last, exclude) {
var self = this;
if (exclude == null) {
exclude = false
}
self.begin = first;
self.end = last;
return self.exclude = exclude;
};
def['$=='] = function(other) {
var self = this;
if (!other._isRange) {
return false;
}
return self.exclude === other.exclude &&
self.begin == other.begin &&
self.end == other.end;
};
def['$==='] = function(obj) {
var self = this;
return self['$include?'](obj);
};
def['$cover?'] = function(value) {
var $a, $b, self = this;
return (($a = self.begin['$<='](value)) ? ((function() {if ((($b = self.exclude) !== nil && (!$b._isBoolean || $b == true))) {
return value['$<'](self.end)
} else {
return value['$<='](self.end)
}; return nil; })()) : $a);
};
$opal.defn(self, '$last', def.$end);
def.$each = TMP_1 = function() {
var $a, $b, self = this, $iter = TMP_1._p, block = $iter || nil, current = nil, last = nil;
TMP_1._p = null;
if ((block !== nil)) {
} else {
return self.$enum_for("each")
};
current = self.begin;
last = self.end;
while (current['$<'](last)) {
if ($opal.$yield1(block, current) === $breaker) return $breaker.$v;
current = current.$succ();};
if ((($a = ($b = self.exclude['$!'](), $b !== false && $b !== nil ?current['$=='](last) : $b)) !== nil && (!$a._isBoolean || $a == true))) {
if ($opal.$yield1(block, current) === $breaker) return $breaker.$v};
return self;
};
def['$eql?'] = function(other) {
var $a, $b, self = this;
if ((($a = $scope.Range['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
return false
};
return ($a = ($b = self.exclude['$==='](other['$exclude_end?']()), $b !== false && $b !== nil ?self.begin['$eql?'](other.$begin()) : $b), $a !== false && $a !== nil ?self.end['$eql?'](other.$end()) : $a);
};
def['$exclude_end?'] = function() {
var self = this;
return self.exclude;
};
$opal.defn(self, '$first', def.$begin);
def['$include?'] = function(obj) {
var self = this;
return self['$cover?'](obj);
};
def.$max = TMP_2 = function() {var $zuper = $slice.call(arguments, 0);
var self = this, $iter = TMP_2._p, $yield = $iter || nil;
TMP_2._p = null;
if (($yield !== nil)) {
return $opal.find_super_dispatcher(self, 'max', TMP_2, $iter).apply(self, $zuper)
} else {
return self.exclude ? self.end - 1 : self.end;
};
};
def.$min = TMP_3 = function() {var $zuper = $slice.call(arguments, 0);
var self = this, $iter = TMP_3._p, $yield = $iter || nil;
TMP_3._p = null;
if (($yield !== nil)) {
return $opal.find_super_dispatcher(self, 'min', TMP_3, $iter).apply(self, $zuper)
} else {
return self.begin
};
};
$opal.defn(self, '$member?', def['$include?']);
def.$step = function(n) {
var self = this;
if (n == null) {
n = 1
}
return self.$raise($scope.NotImplementedError);
};
def.$to_s = function() {
var self = this;
return self.begin.$inspect() + (self.exclude ? '...' : '..') + self.end.$inspect();
};
return $opal.defn(self, '$inspect', def.$to_s);
})(self, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/time"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$require', '$include', '$kind_of?', '$to_i', '$coerce_to', '$between?', '$raise', '$new', '$compact', '$nil?', '$===', '$<=>', '$to_f', '$strftime', '$is_a?', '$zero?', '$utc?', '$warn', '$yday', '$rjust', '$ljust', '$zone', '$sec', '$min', '$hour', '$day', '$month', '$year', '$wday', '$isdst']);
self.$require("corelib/comparable");
return (function($base, $super) {
function $Time(){};
var self = $Time = $klass($base, $super, 'Time', $Time);
var def = self._proto, $scope = self._scope;
self.$include($scope.Comparable);
var days_of_week = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
short_days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
short_months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
long_months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
;
$opal.defs(self, '$at', function(seconds, frac) {
var self = this;
if (frac == null) {
frac = 0
}
return new Date(seconds * 1000 + frac);
});
$opal.defs(self, '$new', function(year, month, day, hour, minute, second, utc_offset) {
var self = this;
switch (arguments.length) {
case 1:
return new Date(year, 0);
case 2:
return new Date(year, month - 1);
case 3:
return new Date(year, month - 1, day);
case 4:
return new Date(year, month - 1, day, hour);
case 5:
return new Date(year, month - 1, day, hour, minute);
case 6:
return new Date(year, month - 1, day, hour, minute, second);
case 7:
return new Date(year, month - 1, day, hour, minute, second);
default:
return new Date();
}
});
$opal.defs(self, '$local', function(year, month, day, hour, minute, second, millisecond) {
var $a, self = this;
if (month == null) {
month = nil
}
if (day == null) {
day = nil
}
if (hour == null) {
hour = nil
}
if (minute == null) {
minute = nil
}
if (second == null) {
second = nil
}
if (millisecond == null) {
millisecond = nil
}
if ((($a = arguments.length === 10) !== nil && (!$a._isBoolean || $a == true))) {
var args = $slice.call(arguments).reverse();
second = args[9];
minute = args[8];
hour = args[7];
day = args[6];
month = args[5];
year = args[4];
};
year = (function() {if ((($a = year['$kind_of?']($scope.String)) !== nil && (!$a._isBoolean || $a == true))) {
return year.$to_i()
} else {
return $scope.Opal.$coerce_to(year, $scope.Integer, "to_int")
}; return nil; })();
month = (function() {if ((($a = month['$kind_of?']($scope.String)) !== nil && (!$a._isBoolean || $a == true))) {
return month.$to_i()
} else {
return $scope.Opal.$coerce_to(((($a = month) !== false && $a !== nil) ? $a : 1), $scope.Integer, "to_int")
}; return nil; })();
if ((($a = month['$between?'](1, 12)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "month out of range: " + (month))
};
day = (function() {if ((($a = day['$kind_of?']($scope.String)) !== nil && (!$a._isBoolean || $a == true))) {
return day.$to_i()
} else {
return $scope.Opal.$coerce_to(((($a = day) !== false && $a !== nil) ? $a : 1), $scope.Integer, "to_int")
}; return nil; })();
if ((($a = day['$between?'](1, 31)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "day out of range: " + (day))
};
hour = (function() {if ((($a = hour['$kind_of?']($scope.String)) !== nil && (!$a._isBoolean || $a == true))) {
return hour.$to_i()
} else {
return $scope.Opal.$coerce_to(((($a = hour) !== false && $a !== nil) ? $a : 0), $scope.Integer, "to_int")
}; return nil; })();
if ((($a = hour['$between?'](0, 24)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "hour out of range: " + (hour))
};
minute = (function() {if ((($a = minute['$kind_of?']($scope.String)) !== nil && (!$a._isBoolean || $a == true))) {
return minute.$to_i()
} else {
return $scope.Opal.$coerce_to(((($a = minute) !== false && $a !== nil) ? $a : 0), $scope.Integer, "to_int")
}; return nil; })();
if ((($a = minute['$between?'](0, 59)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "minute out of range: " + (minute))
};
second = (function() {if ((($a = second['$kind_of?']($scope.String)) !== nil && (!$a._isBoolean || $a == true))) {
return second.$to_i()
} else {
return $scope.Opal.$coerce_to(((($a = second) !== false && $a !== nil) ? $a : 0), $scope.Integer, "to_int")
}; return nil; })();
if ((($a = second['$between?'](0, 59)) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.ArgumentError, "second out of range: " + (second))
};
return ($a = self).$new.apply($a, [].concat([year, month, day, hour, minute, second].$compact()));
});
$opal.defs(self, '$gm', function(year, month, day, hour, minute, second, utc_offset) {
var $a, self = this;
if ((($a = year['$nil?']()) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.TypeError, "missing year (got nil)")};
if (month > 12 || day > 31 || hour > 24 || minute > 59 || second > 59) {
self.$raise($scope.ArgumentError);
}
var date = new Date(Date.UTC(year, (month || 1) - 1, (day || 1), (hour || 0), (minute || 0), (second || 0)));
date.tz_offset = 0
return date;
;
});
(function(self) {
var $scope = self._scope, def = self._proto;
self._proto.$mktime = self._proto.$local;
return self._proto.$utc = self._proto.$gm;
})(self.$singleton_class());
$opal.defs(self, '$now', function() {
var self = this;
return new Date();
});
def['$+'] = function(other) {
var $a, self = this;
if ((($a = $scope.Time['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
self.$raise($scope.TypeError, "time + time?")};
other = $scope.Opal.$coerce_to(other, $scope.Integer, "to_int");
var result = new Date(self.getTime() + (other * 1000));
result.tz_offset = self.tz_offset;
return result;
};
def['$-'] = function(other) {
var $a, self = this;
if ((($a = $scope.Time['$==='](other)) !== nil && (!$a._isBoolean || $a == true))) {
return (self.getTime() - other.getTime()) / 1000;
} else {
other = $scope.Opal.$coerce_to(other, $scope.Integer, "to_int");
var result = new Date(self.getTime() - (other * 1000));
result.tz_offset = self.tz_offset;
return result;
};
};
def['$<=>'] = function(other) {
var self = this;
return self.$to_f()['$<=>'](other.$to_f());
};
def['$=='] = function(other) {
var self = this;
return self.$to_f() === other.$to_f();
};
def.$asctime = function() {
var self = this;
return self.$strftime("%a %b %e %H:%M:%S %Y");
};
$opal.defn(self, '$ctime', def.$asctime);
def.$day = function() {
var self = this;
return self.getDate();
};
def.$yday = function() {
var self = this;
// http://javascript.about.com/library/bldayyear.htm
var onejan = new Date(self.getFullYear(), 0, 1);
return Math.ceil((self - onejan) / 86400000);
};
def.$isdst = function() {
var self = this;
return self.$raise($scope.NotImplementedError);
};
def['$eql?'] = function(other) {
var $a, self = this;
return ($a = other['$is_a?']($scope.Time), $a !== false && $a !== nil ?(self['$<=>'](other))['$zero?']() : $a);
};
def['$friday?'] = function() {
var self = this;
return self.getDay() === 5;
};
def.$hour = function() {
var self = this;
return self.getHours();
};
def.$inspect = function() {
var $a, self = this;
if ((($a = self['$utc?']()) !== nil && (!$a._isBoolean || $a == true))) {
return self.$strftime("%Y-%m-%d %H:%M:%S UTC")
} else {
return self.$strftime("%Y-%m-%d %H:%M:%S %z")
};
};
$opal.defn(self, '$mday', def.$day);
def.$min = function() {
var self = this;
return self.getMinutes();
};
def.$mon = function() {
var self = this;
return self.getMonth() + 1;
};
def['$monday?'] = function() {
var self = this;
return self.getDay() === 1;
};
$opal.defn(self, '$month', def.$mon);
def['$saturday?'] = function() {
var self = this;
return self.getDay() === 6;
};
def.$sec = function() {
var self = this;
return self.getSeconds();
};
def.$usec = function() {
var self = this;
self.$warn("Microseconds are not supported");
return 0;
};
def.$zone = function() {
var self = this;
var string = self.toString(),
result;
if (string.indexOf('(') == -1) {
result = string.match(/[A-Z]{3,4}/)[0];
}
else {
result = string.match(/\([^)]+\)/)[0].match(/[A-Z]/g).join('');
}
if (result == "GMT" && /(GMT\W*\d{4})/.test(string)) {
return RegExp.$1;
}
else {
return result;
}
};
def.$getgm = function() {
var self = this;
var result = new Date(self.getTime());
result.tz_offset = 0;
return result;
};
def['$gmt?'] = function() {
var self = this;
return self.tz_offset == 0;
};
def.$gmt_offset = function() {
var self = this;
return -self.getTimezoneOffset() * 60;
};
def.$strftime = function(format) {
var self = this;
return format.replace(/%([\-_#^0]*:{0,2})(\d+)?([EO]*)(.)/g, function(full, flags, width, _, conv) {
var result = "",
width = parseInt(width),
zero = flags.indexOf('0') !== -1,
pad = flags.indexOf('-') === -1,
blank = flags.indexOf('_') !== -1,
upcase = flags.indexOf('^') !== -1,
invert = flags.indexOf('#') !== -1,
colons = (flags.match(':') || []).length;
if (zero && blank) {
if (flags.indexOf('0') < flags.indexOf('_')) {
zero = false;
}
else {
blank = false;
}
}
switch (conv) {
case 'Y':
result += self.getFullYear();
break;
case 'C':
zero = !blank;
result += Match.round(self.getFullYear() / 100);
break;
case 'y':
zero = !blank;
result += (self.getFullYear() % 100);
break;
case 'm':
zero = !blank;
result += (self.getMonth() + 1);
break;
case 'B':
result += long_months[self.getMonth()];
break;
case 'b':
case 'h':
blank = !zero;
result += short_months[self.getMonth()];
break;
case 'd':
zero = !blank
result += self.getDate();
break;
case 'e':
blank = !zero
result += self.getDate();
break;
case 'j':
result += self.$yday();
break;
case 'H':
zero = !blank;
result += self.getHours();
break;
case 'k':
blank = !zero;
result += self.getHours();
break;
case 'I':
zero = !blank;
result += (self.getHours() % 12 || 12);
break;
case 'l':
blank = !zero;
result += (self.getHours() % 12 || 12);
break;
case 'P':
result += (self.getHours() >= 12 ? "pm" : "am");
break;
case 'p':
result += (self.getHours() >= 12 ? "PM" : "AM");
break;
case 'M':
zero = !blank;
result += self.getMinutes();
break;
case 'S':
zero = !blank;
result += self.getSeconds();
break;
case 'L':
zero = !blank;
width = isNaN(width) ? 3 : width;
result += self.getMilliseconds();
break;
case 'N':
width = isNaN(width) ? 9 : width;
result += (self.getMilliseconds().toString()).$rjust(3, "0");
result = (result).$ljust(width, "0");
break;
case 'z':
var offset = self.getTimezoneOffset(),
hours = Math.floor(Math.abs(offset) / 60),
minutes = Math.abs(offset) % 60;
result += offset < 0 ? "+" : "-";
result += hours < 10 ? "0" : "";
result += hours;
if (colons > 0) {
result += ":";
}
result += minutes < 10 ? "0" : "";
result += minutes;
if (colons > 1) {
result += ":00";
}
break;
case 'Z':
result += self.$zone();
break;
case 'A':
result += days_of_week[self.getDay()];
break;
case 'a':
result += short_days[self.getDay()];
break;
case 'u':
result += (self.getDay() + 1);
break;
case 'w':
result += self.getDay();
break;
// TODO: week year
// TODO: week number
case 's':
result += parseInt(self.getTime() / 1000)
break;
case 'n':
result += "\n";
break;
case 't':
result += "\t";
break;
case '%':
result += "%";
break;
case 'c':
result += self.$strftime("%a %b %e %T %Y");
break;
case 'D':
case 'x':
result += self.$strftime("%m/%d/%y");
break;
case 'F':
result += self.$strftime("%Y-%m-%d");
break;
case 'v':
result += self.$strftime("%e-%^b-%4Y");
break;
case 'r':
result += self.$strftime("%I:%M:%S %p");
break;
case 'R':
result += self.$strftime("%H:%M");
break;
case 'T':
case 'X':
result += self.$strftime("%H:%M:%S");
break;
default:
return full;
}
if (upcase) {
result = result.toUpperCase();
}
if (invert) {
result = result.replace(/[A-Z]/, function(c) { c.toLowerCase() }).
replace(/[a-z]/, function(c) { c.toUpperCase() });
}
if (pad && (zero || blank)) {
result = (result).$rjust(isNaN(width) ? 2 : width, blank ? " " : "0");
}
return result;
});
};
def['$sunday?'] = function() {
var self = this;
return self.getDay() === 0;
};
def['$thursday?'] = function() {
var self = this;
return self.getDay() === 4;
};
def.$to_a = function() {
var self = this;
return [self.$sec(), self.$min(), self.$hour(), self.$day(), self.$month(), self.$year(), self.$wday(), self.$yday(), self.$isdst(), self.$zone()];
};
def.$to_f = function() {
var self = this;
return self.getTime() / 1000;
};
def.$to_i = function() {
var self = this;
return parseInt(self.getTime() / 1000);
};
$opal.defn(self, '$to_s', def.$inspect);
def['$tuesday?'] = function() {
var self = this;
return self.getDay() === 2;
};
$opal.defn(self, '$utc?', def['$gmt?']);
def.$utc_offset = function() {
var self = this;
return self.getTimezoneOffset() * -60;
};
def.$wday = function() {
var self = this;
return self.getDay();
};
def['$wednesday?'] = function() {
var self = this;
return self.getDay() === 3;
};
return (def.$year = function() {
var self = this;
return self.getFullYear();
}, nil) && 'year';
})(self, null);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/struct"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass;
$opal.add_stubs(['$==', '$[]', '$upcase', '$const_set', '$new', '$unshift', '$each', '$define_struct_attribute', '$instance_eval', '$to_proc', '$raise', '$<<', '$members', '$define_method', '$instance_variable_get', '$instance_variable_set', '$include', '$each_with_index', '$class', '$===', '$>=', '$size', '$include?', '$to_sym', '$enum_for', '$hash', '$all?', '$length', '$map', '$+', '$name', '$join', '$inspect', '$each_pair']);
return (function($base, $super) {
function $Struct(){};
var self = $Struct = $klass($base, $super, 'Struct', $Struct);
var def = self._proto, $scope = self._scope, TMP_1, TMP_8, TMP_10;
$opal.defs(self, '$new', TMP_1 = function(name, args) {var $zuper = $slice.call(arguments, 0);
var $a, $b, $c, TMP_2, self = this, $iter = TMP_1._p, block = $iter || nil;
args = $slice.call(arguments, 1);
TMP_1._p = null;
if (self['$==']($scope.Struct)) {
} else {
return $opal.find_super_dispatcher(self, 'new', TMP_1, $iter, $Struct).apply(self, $zuper)
};
if (name['$[]'](0)['$=='](name['$[]'](0).$upcase())) {
return $scope.Struct.$const_set(name, ($a = self).$new.apply($a, [].concat(args)))
} else {
args.$unshift(name);
return ($b = ($c = $scope.Class).$new, $b._p = (TMP_2 = function(){var self = TMP_2._s || this, $a, $b, TMP_3, $c;
($a = ($b = args).$each, $a._p = (TMP_3 = function(arg){var self = TMP_3._s || this;
if (arg == null) arg = nil;
return self.$define_struct_attribute(arg)}, TMP_3._s = self, TMP_3), $a).call($b);
if (block !== false && block !== nil) {
return ($a = ($c = self).$instance_eval, $a._p = block.$to_proc(), $a).call($c)
} else {
return nil
};}, TMP_2._s = self, TMP_2), $b).call($c, self);
};
});
$opal.defs(self, '$define_struct_attribute', function(name) {
var $a, $b, TMP_4, $c, TMP_5, self = this;
if (self['$==']($scope.Struct)) {
self.$raise($scope.ArgumentError, "you cannot define attributes to the Struct class")};
self.$members()['$<<'](name);
($a = ($b = self).$define_method, $a._p = (TMP_4 = function(){var self = TMP_4._s || this;
return self.$instance_variable_get("@" + (name))}, TMP_4._s = self, TMP_4), $a).call($b, name);
return ($a = ($c = self).$define_method, $a._p = (TMP_5 = function(value){var self = TMP_5._s || this;
if (value == null) value = nil;
return self.$instance_variable_set("@" + (name), value)}, TMP_5._s = self, TMP_5), $a).call($c, "" + (name) + "=");
});
$opal.defs(self, '$members', function() {
var $a, self = this;
if (self.members == null) self.members = nil;
if (self['$==']($scope.Struct)) {
self.$raise($scope.ArgumentError, "the Struct class has no members")};
return ((($a = self.members) !== false && $a !== nil) ? $a : self.members = []);
});
$opal.defs(self, '$inherited', function(klass) {
var $a, $b, TMP_6, self = this, members = nil;
if (self.members == null) self.members = nil;
if (self['$==']($scope.Struct)) {
return nil};
members = self.members;
return ($a = ($b = klass).$instance_eval, $a._p = (TMP_6 = function(){var self = TMP_6._s || this;
return self.members = members}, TMP_6._s = self, TMP_6), $a).call($b);
});
(function(self) {
var $scope = self._scope, def = self._proto;
return self._proto['$[]'] = self._proto.$new
})(self.$singleton_class());
self.$include($scope.Enumerable);
def.$initialize = function(args) {
var $a, $b, TMP_7, self = this;
args = $slice.call(arguments, 0);
return ($a = ($b = self.$members()).$each_with_index, $a._p = (TMP_7 = function(name, index){var self = TMP_7._s || this;
if (name == null) name = nil;if (index == null) index = nil;
return self.$instance_variable_set("@" + (name), args['$[]'](index))}, TMP_7._s = self, TMP_7), $a).call($b);
};
def.$members = function() {
var self = this;
return self.$class().$members();
};
def['$[]'] = function(name) {
var $a, self = this;
if ((($a = $scope.Integer['$==='](name)) !== nil && (!$a._isBoolean || $a == true))) {
if (name['$>='](self.$members().$size())) {
self.$raise($scope.IndexError, "offset " + (name) + " too large for struct(size:" + (self.$members().$size()) + ")")};
name = self.$members()['$[]'](name);
} else if ((($a = self.$members()['$include?'](name.$to_sym())) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.NameError, "no member '" + (name) + "' in struct")
};
return self.$instance_variable_get("@" + (name));
};
def['$[]='] = function(name, value) {
var $a, self = this;
if ((($a = $scope.Integer['$==='](name)) !== nil && (!$a._isBoolean || $a == true))) {
if (name['$>='](self.$members().$size())) {
self.$raise($scope.IndexError, "offset " + (name) + " too large for struct(size:" + (self.$members().$size()) + ")")};
name = self.$members()['$[]'](name);
} else if ((($a = self.$members()['$include?'](name.$to_sym())) !== nil && (!$a._isBoolean || $a == true))) {
} else {
self.$raise($scope.NameError, "no member '" + (name) + "' in struct")
};
return self.$instance_variable_set("@" + (name), value);
};
def.$each = TMP_8 = function() {
var $a, $b, TMP_9, self = this, $iter = TMP_8._p, $yield = $iter || nil;
TMP_8._p = null;
if (($yield !== nil)) {
} else {
return self.$enum_for("each")
};
($a = ($b = self.$members()).$each, $a._p = (TMP_9 = function(name){var self = TMP_9._s || this, $a;
if (name == null) name = nil;
return $a = $opal.$yield1($yield, self['$[]'](name)), $a === $breaker ? $a : $a}, TMP_9._s = self, TMP_9), $a).call($b);
return self;
};
def.$each_pair = TMP_10 = function() {
var $a, $b, TMP_11, self = this, $iter = TMP_10._p, $yield = $iter || nil;
TMP_10._p = null;
if (($yield !== nil)) {
} else {
return self.$enum_for("each_pair")
};
($a = ($b = self.$members()).$each, $a._p = (TMP_11 = function(name){var self = TMP_11._s || this, $a;
if (name == null) name = nil;
return $a = $opal.$yieldX($yield, [name, self['$[]'](name)]), $a === $breaker ? $a : $a}, TMP_11._s = self, TMP_11), $a).call($b);
return self;
};
def['$eql?'] = function(other) {
var $a, $b, $c, TMP_12, self = this;
return ((($a = self.$hash()['$=='](other.$hash())) !== false && $a !== nil) ? $a : ($b = ($c = other.$each_with_index())['$all?'], $b._p = (TMP_12 = function(object, index){var self = TMP_12._s || this;
if (object == null) object = nil;if (index == null) index = nil;
return self['$[]'](self.$members()['$[]'](index))['$=='](object)}, TMP_12._s = self, TMP_12), $b).call($c));
};
def.$length = function() {
var self = this;
return self.$members().$length();
};
$opal.defn(self, '$size', def.$length);
def.$to_a = function() {
var $a, $b, TMP_13, self = this;
return ($a = ($b = self.$members()).$map, $a._p = (TMP_13 = function(name){var self = TMP_13._s || this;
if (name == null) name = nil;
return self['$[]'](name)}, TMP_13._s = self, TMP_13), $a).call($b);
};
$opal.defn(self, '$values', def.$to_a);
def.$inspect = function() {
var $a, $b, TMP_14, self = this, result = nil;
result = "#<struct ";
if (self.$class()['$==']($scope.Struct)) {
result = result['$+']("" + (self.$class().$name()) + " ")};
result = result['$+'](($a = ($b = self.$each_pair()).$map, $a._p = (TMP_14 = function(name, value){var self = TMP_14._s || this;
if (name == null) name = nil;if (value == null) value = nil;
return "" + (name) + "=" + (value.$inspect())}, TMP_14._s = self, TMP_14), $a).call($b).$join(", "));
result = result['$+'](">");
return result;
};
return $opal.defn(self, '$to_s', def.$inspect);
})(self, null)
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/io"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $klass = $opal.klass, $module = $opal.module, $gvars = $opal.gvars;
if ($gvars.stdout == null) $gvars.stdout = nil;
if ($gvars.stderr == null) $gvars.stderr = nil;
$opal.add_stubs(['$write', '$join', '$map', '$String', '$getbyte', '$getc', '$raise', '$new', '$to_s', '$extend']);
(function($base, $super) {
function $IO(){};
var self = $IO = $klass($base, $super, 'IO', $IO);
var def = self._proto, $scope = self._scope;
$opal.cdecl($scope, 'SEEK_SET', 0);
$opal.cdecl($scope, 'SEEK_CUR', 1);
$opal.cdecl($scope, 'SEEK_END', 2);
(function($base) {
var self = $module($base, 'Writable');
var def = self._proto, $scope = self._scope;
def['$<<'] = function(string) {
var self = this;
self.$write(string);
return self;
};
def.$print = function(args) {
var $a, $b, TMP_1, self = this;
if ($gvars[","] == null) $gvars[","] = nil;
args = $slice.call(arguments, 0);
return self.$write(($a = ($b = args).$map, $a._p = (TMP_1 = function(arg){var self = TMP_1._s || this;
if (arg == null) arg = nil;
return self.$String(arg)}, TMP_1._s = self, TMP_1), $a).call($b).$join($gvars[","]));
};
def.$puts = function(args) {
var $a, $b, TMP_2, self = this;
if ($gvars["/"] == null) $gvars["/"] = nil;
args = $slice.call(arguments, 0);
return self.$write(($a = ($b = args).$map, $a._p = (TMP_2 = function(arg){var self = TMP_2._s || this;
if (arg == null) arg = nil;
return self.$String(arg)}, TMP_2._s = self, TMP_2), $a).call($b).$join($gvars["/"]));
};
;$opal.donate(self, ["$<<", "$print", "$puts"]);
})(self);
return (function($base) {
var self = $module($base, 'Readable');
var def = self._proto, $scope = self._scope;
def.$readbyte = function() {
var self = this;
return self.$getbyte();
};
def.$readchar = function() {
var self = this;
return self.$getc();
};
def.$readline = function(sep) {
var self = this;
if ($gvars["/"] == null) $gvars["/"] = nil;
if (sep == null) {
sep = $gvars["/"]
}
return self.$raise($scope.NotImplementedError);
};
def.$readpartial = function(integer, outbuf) {
var self = this;
if (outbuf == null) {
outbuf = nil
}
return self.$raise($scope.NotImplementedError);
};
;$opal.donate(self, ["$readbyte", "$readchar", "$readline", "$readpartial"]);
})(self);
})(self, null);
$opal.cdecl($scope, 'STDERR', $gvars.stderr = $scope.IO.$new());
$opal.cdecl($scope, 'STDIN', $gvars.stdin = $scope.IO.$new());
$opal.cdecl($scope, 'STDOUT', $gvars.stdout = $scope.IO.$new());
$opal.defs($gvars.stdout, '$write', function(string) {
var self = this;
console.log(string.$to_s());;
return nil;
});
$opal.defs($gvars.stderr, '$write', function(string) {
var self = this;
console.warn(string.$to_s());;
return nil;
});
$gvars.stdout.$extend(($scope.IO)._scope.Writable);
return $gvars.stderr.$extend(($scope.IO)._scope.Writable);
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/main"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice;
$opal.add_stubs(['$include']);
$opal.defs(self, '$to_s', function() {
var self = this;
return "main";
});
return ($opal.defs(self, '$include', function(mod) {
var self = this;
return $scope.Object.$include(mod);
}), nil) && 'include';
};
/* Generated by Opal 0.6.0 */
Opal.modules["corelib/variables"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice, $gvars = $opal.gvars, $hash2 = $opal.hash2;
$opal.add_stubs(['$new']);
$gvars["&"] = $gvars["~"] = $gvars["`"] = $gvars["'"] = nil;
$gvars.LOADED_FEATURES = $gvars["\""] = Opal.modules;
$gvars.LOAD_PATHS = $gvars[":"] = [];
$gvars["/"] = "\n";
$gvars[","] = nil;
$opal.cdecl($scope, 'ARGV', []);
$opal.cdecl($scope, 'ARGF', $scope.Object.$new());
$opal.cdecl($scope, 'ENV', $hash2([], {}));
$gvars.VERBOSE = false;
$gvars.DEBUG = false;
$gvars.SAFE = 0;
$opal.cdecl($scope, 'RUBY_PLATFORM', "opal");
$opal.cdecl($scope, 'RUBY_ENGINE', "opal");
$opal.cdecl($scope, 'RUBY_VERSION', "2.0.0");
$opal.cdecl($scope, 'RUBY_ENGINE_VERSION', "0.6.0");
return $opal.cdecl($scope, 'RUBY_RELEASE_DATE', "2014-03-05");
};
/* Generated by Opal 0.6.0 */
Opal.modules["opal"] = function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice;
$opal.add_stubs(['$require']);
self.$require("corelib/runtime.js");
self.$require("corelib/helpers");
self.$require("corelib/module");
self.$require("corelib/class");
self.$require("corelib/basic_object");
self.$require("corelib/kernel");
self.$require("corelib/nil_class");
self.$require("corelib/boolean");
self.$require("corelib/error");
self.$require("corelib/regexp");
self.$require("corelib/comparable");
self.$require("corelib/enumerable");
self.$require("corelib/enumerator");
self.$require("corelib/array");
self.$require("corelib/array/inheritance");
self.$require("corelib/hash");
self.$require("corelib/string");
self.$require("corelib/string/inheritance");
self.$require("corelib/match_data");
self.$require("corelib/numeric");
self.$require("corelib/complex");
self.$require("corelib/rational");
self.$require("corelib/proc");
self.$require("corelib/method");
self.$require("corelib/range");
self.$require("corelib/time");
self.$require("corelib/struct");
self.$require("corelib/io");
self.$require("corelib/main");
return self.$require("corelib/variables");
};
/* Generated by Opal 0.6.0 */
(function($opal) {
var self = $opal.top, $scope = $opal, nil = $opal.nil, $breaker = $opal.breaker, $slice = $opal.slice;
$opal.add_stubs(['$require', '$puts']);
self.$require("opal");
return self.$puts("hi from opal!");
})(Opal);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment