Sha256: 9506b8d7f9d85d7fd4036b0e862558c10de059688c824d274214df6401e48f12

Contents?: true

Size: 1.65 KB

Versions: 66

Compression:

Stored size: 1.65 KB

Contents

require "execjs/runtime"

module ExecJS
  class MustangRuntime < Runtime
    class Context < Runtime::Context
      def initialize(runtime, source = "")
        source = encode(source)

        @v8_context = ::Mustang::Context.new
        @v8_context.eval(source)
      end

      def exec(source, options = {})
        source = encode(source)

        if /\S/ =~ source
          eval "(function(){#{source}})()", options
        end
      end

      def eval(source, options = {})
        source = encode(source)

        if /\S/ =~ source
          unbox @v8_context.eval("(#{source})")
        end
      end

      def call(properties, *args)
        unbox @v8_context.eval(properties).call(*args)
      rescue NoMethodError => e
        raise ProgramError, e.message
      end

      def unbox(value)
        case value
        when Mustang::V8::Array
          value.map { |v| unbox(v) }
        when Mustang::V8::Boolean
          value.to_bool
        when Mustang::V8::NullClass, Mustang::V8::UndefinedClass
          nil
        when Mustang::V8::Function
          nil
        when Mustang::V8::SyntaxError
          raise RuntimeError, value.message
        when Mustang::V8::Error
          raise ProgramError, value.message
        when Mustang::V8::Object
          value.inject({}) { |h, (k, v)|
            v = unbox(v)
            h[k] = v if v
            h
          }
        else
          value.respond_to?(:delegate) ? value.delegate : value
        end
      end
    end

    def name
      "Mustang (V8)"
    end

    def available?
      require "mustang"
      true
    rescue LoadError
      false
    end

    def deprecated?
      true
    end
  end
end

Version data entries

66 entries across 66 versions & 5 rubygems

Version Path
classiccms-0.7.5 vendor/bundle/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb
classiccms-0.7.4 vendor/bundle/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb
classiccms-0.7.3 vendor/bundle/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb
active_mailer-0.0.10 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb
execjs-2.2.2 lib/execjs/mustang_runtime.rb
execjs-1.4.1 lib/execjs/mustang_runtime.rb
execjs-2.2.1 lib/execjs/mustang_runtime.rb
execjs-2.2.0 lib/execjs/mustang_runtime.rb
execjs-2.1.0 lib/execjs/mustang_runtime.rb
mango-0.8.0 vendor/bundler/ruby/2.1.0/gems/execjs-2.0.2/lib/execjs/mustang_runtime.rb
mango-0.7.1 vendor/bundler/ruby/2.0.0/gems/execjs-2.0.2/lib/execjs/mustang_runtime.rb
mango-0.7.0 vendor/bundler/ruby/2.0.0/gems/execjs-2.0.2/lib/execjs/mustang_runtime.rb
execjs-2.0.2 lib/execjs/mustang_runtime.rb
execjs-2.0.1 lib/execjs/mustang_runtime.rb
execjs-2.0.0 lib/execjs/mustang_runtime.rb
classiccms-0.7.2 vendor/bundle/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb
classiccms-0.7.1 vendor/bundle/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb
active_mailer-0.0.9 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb
active_mailer-0.0.8 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb
active_mailer-0.0.7 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/execjs-1.4.0/lib/execjs/mustang_runtime.rb