Sha256: a5270442082566c6a988eeb8c5d2e9298c4d7329badc870e808ef292fce704e1

Contents?: true

Size: 1.39 KB

Versions: 12

Compression:

Stored size: 1.39 KB

Contents

module Johnson #:nodoc:
  module SpiderMonkey #:nodoc:
    class RubyLandProxy # native
      include Enumerable
      
      def initialize
        raise Johnson::Error, "#{self.class.name} is an internal support class."
      end
      
      private :initialize
      
      # FIXME: need to revisit array vs non-array proxy, to_a/to_ary semantics, etc.
      alias_method :size, :length
      alias_method :to_ary, :to_a
      
      def to_proc
        @proc ||= Proc.new { |*args| call(*args) }
      end

      def call(*args)
        call_using(runtime.global, *args)
      end

      def call_using(this, *args)
        native_call(this, *args)
      end
      
      def inspect
        toString
      end
      
      def method_missing(sym, *args, &block)
        args << block if block_given?
        
        name = sym.to_s
        assignment = "=" == name[-1, 1]
        
        # default behavior if the slot's not there
        return super unless assignment || respond_to?(sym)
        
        unless function_property?(name)
          # for arity 0, treat it as a get
          return self[name] if args.empty?

          # arity 1 and quacking like an assignment, treat it as a set
          return self[name[0..-2]] = args[0] if assignment && 1 == args.size
        end        
        
        # okay, must really be a function
        call_function_property(name, *args)
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
jbarnette-johnson-1.0.0.200811251942 lib/johnson/spidermonkey/ruby_land_proxy.rb
jbarnette-johnson-1.0.0.20081126120511 lib/johnson/spidermonkey/ruby_land_proxy.rb
jbarnette-johnson-1.0.0.20090127202936 lib/johnson/spidermonkey/ruby_land_proxy.rb
jbarnette-johnson-1.0.0.20090225110820 lib/johnson/spidermonkey/ruby_land_proxy.rb
jbarnette-johnson-1.0.0.20090326122910 lib/johnson/spidermonkey/ruby_land_proxy.rb
jbarnette-johnson-1.0.0.20090326154650 lib/johnson/spidermonkey/ruby_land_proxy.rb
jbarnette-johnson-1.0.0.20090326161333 lib/johnson/spidermonkey/ruby_land_proxy.rb
jbarnette-johnson-1.0.0.20090402144841 lib/johnson/spidermonkey/ruby_land_proxy.rb
jbarnette-johnson-1.0.0.20090402155420 lib/johnson/spidermonkey/ruby_land_proxy.rb
johnson-1.1.1 lib/johnson/spidermonkey/ruby_land_proxy.rb
johnson-1.1.2 lib/johnson/spidermonkey/ruby_land_proxy.rb
johnson-1.1.0 lib/johnson/spidermonkey/ruby_land_proxy.rb