Sha256: 00351e18d876664ef6994b0bd2bcdeead527af7603b2100b15a69202669b8a58

Contents?: true

Size: 1.15 KB

Versions: 7

Compression:

Stored size: 1.15 KB

Contents

JS.Ruby = function(klass, define) {
  define.call(new JS.Ruby.ClassBuilder(klass));
};

JS.extend(JS.Ruby, {
  extendDSL: function(builder, source) {
    for (var method in source) {
      if (builder[method] || !JS.isFn(source[method])) continue;
      this.addMethod(builder, source, method);
    }
  },
  
  addMethod: function(builder, source, method) {
    builder[method] = function() {
      var result = source[method].apply(source, arguments);
      JS.Ruby.extendDSL(builder, source);
      return result;
    };
  },
  
  alias: function(object, builder) {
    return function(newName, oldName) {
      var old = object[oldName];
      if (old !== undefined) this.def(newName, old);
      if (builder) JS.Ruby.extendDSL(builder, object);
    };
  },
  
  ClassBuilder: function(klass) {
    this.def    = klass.method('define');
    this.alias  = JS.Ruby.alias(klass.prototype);
    
    this.self = {
      def: JS.bind(function(name, method) {
        var def = {}; def[name] = method;
        klass.extend(def);
        JS.Ruby.extendDSL(this, klass);
      }, this),
      alias: JS.Ruby.alias(klass, this)
    };
    
    JS.Ruby.extendDSL(this, klass);
  }
});

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
spontaneous-0.1.0.alpha1 application/js/vendor/JS.Class-2.1.5/src/ruby.js
acts_as_dashboard-0.4.1 generators/dashboard/templates/js.class-2.1.4/src/ruby.js
acts_as_dashboard-0.4.0 generators/dashboard/templates/js.class-2.1.4/src/ruby.js
acts_as_dashboard-0.3.3 generators/dashboard/templates/js.class-2.1.4/src/ruby.js
acts_as_dashboard-0.3.2 generators/dashboard/templates/js.class-2.1.4/src/ruby.js
acts_as_dashboard-0.3.0 generators/dashboard/templates/js.class-2.1.4/src/ruby.js
acts_as_dashboard-0.1.0 generators/dashboard/templates/js.class-2.1.4/src/ruby.js