module Jot::Ruby::Js::Impl::ImplHelpers

Private Instance Methods

escape(str) click to toggle source
# File lib/jot/ruby/js/impl.rb, line 67
def escape(str)
  ::JSON.generate(str, quirks_mode: true, max_nesting: false)
end
js_eval(str = nil) { || ... } click to toggle source
# File lib/jot/ruby/js/impl.rb, line 20
def js_eval(str = nil)
  if block_given?
    val = yield
    Impl.runtime.eval(val)
  elsif str
    Impl.runtime.eval(str)
  end
rescue ExecJS::ProgramError => e
  raise Errors::ImplError, e.message
end
js_jot_method(method_name, *args) click to toggle source
# File lib/jot/ruby/js/impl.rb, line 39
def js_jot_method(method_name, *args)
  "jot.#{js_method(method_name, *args)}"
end
js_method(method_name, *args) click to toggle source
# File lib/jot/ruby/js/impl.rb, line 31
def js_method(method_name, *args)
  "#{method_name}(#{transform_args(*args)})"
end
js_operation_method(op, method_name, *args) click to toggle source
# File lib/jot/ruby/js/impl.rb, line 35
def js_operation_method(op, method_name, *args)
  "#{raw_op(op)}.#{js_method(method_name, *args)}"
end
new_serialized_jot_eval(method_name, *args) click to toggle source
# File lib/jot/ruby/js/impl.rb, line 59
def new_serialized_jot_eval(method_name, *args)
  js_eval do
    serialize_op do
      ['new', js_jot_method(method_name, *args)].join(' ')
    end
  end
end
raw_op(op) click to toggle source
# File lib/jot/ruby/js/impl.rb, line 43
def raw_op(op)
  "jot.deserialize(#{escape(op.serialized)})"
end
serialize_op() click to toggle source
# File lib/jot/ruby/js/impl.rb, line 47
def serialize_op
  "(#{yield}).serialize()"
end
serialized_jot_eval(method_name, *args) click to toggle source
# File lib/jot/ruby/js/impl.rb, line 51
def serialized_jot_eval(method_name, *args)
  js_eval do
    serialize_op do
      js_jot_method(method_name, *args)
    end
  end
end
transform_args(*args) click to toggle source
# File lib/jot/ruby/js/impl.rb, line 71
def transform_args(*args)
  args.map! do |arg|
    case arg
    when Hash
      MultiJson.dump(arg)
    when Operation
      raw_op(arg)
    when Numeric
      arg
    when Array
      "[#{arg.flat_map { |i| transform_args(i) }.join(', ')}]"
    else
      escape(arg)
    end
  end
  args.join(', ')
end