Sha256: 64b39f10e5f38a8528daf75a415f597d5e2e6b3e2def956c63dbcd98cee4d187

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

module Rhino
  class RubyObject < J::ScriptableObject
    include J::Wrapper
    
    def initialize(object)
      super()
      @ruby = object
    end
    
    def unwrap
      @ruby
    end
    
    def getClassName()
      @ruby.class.name
    end
    
    def getPrototype()
      Prototype::Generic
    end
    
    def getIds()
      @ruby.public_methods(false).map {|m| m.gsub(/(.)_(.)/) {java.lang.String.new("#{$1}#{$2.upcase}")}}.to_java
    end
        
    def to_s
      "[Native #{@ruby.class.name}]"
    end
    
    alias_method :prototype, :getPrototype
    
    
    class Prototype < J::ScriptableObject
            
      def get(name, start)
        robject = To.ruby(start)
        if name == "toString" 
          return RubyFunction.new(lambda { "[Ruby #{robject.class.name}]"})
        end
        rb_name = name.gsub(/([a-z])([A-Z])/) {"#{$1}_#{$2.downcase}"}
        if (robject.public_methods(false).include?(rb_name)) 
          method = robject.method(rb_name)
          if method.arity == 0
            To.javascript(method.call)
          else
            RubyFunction.new(method)
          end
        else
          super(name, start)
        end
      end
      
      def has(name, start)
        rb_name = name.gsub(/([a-z])([A-Z])/) {"#{$1}_#{$2.downcase}"}
        To.ruby(start).public_methods(false).respond_to?(rb_name) ? true : super(name,start)
      end
                  
      Generic = new
      
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
therubyrhino-1.72.8 lib/rhino/ruby_object.rb