class EleetScript::RubyToEleetWrapper

Public Class Methods

new(ruby_obj, engine, options = {}) click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 3
def initialize(ruby_obj, engine, options = {})
  @ruby_obj = ruby_obj
  @engine = engine
  @options = options
  if @options[:lock]
    @options[:lock] = [@options[:lock]] unless @options[:lock].kind_of?(Array)
  end
  if @options[:allow]
    @options[:allow] = [@options[:allow]] unless @options[:allow].kind_of?(Array)
  end
end

Public Instance Methods

call(method_name, args = []) click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 15
def call(method_name, args = [])
  unless can_call_method?(method_name)
    @engine["Errors"] < "Attempt to call locked method \"#{method_name}\" failed."
    return Values.to_eleet_value(@engine["nil"], @engine)
  end
  if method_name.to_sym == :to_string
    method_name = :to_s
  elsif method_name.to_sym == :class_ref
    method_name = :class
  elsif method_name.to_sym == :class_name
    cls = if @ruby_obj.class == Class
      @ruby_obj
    else
      @ruby_obj.class
    end
    return Values.to_eleet_value(cls.name, @engine)
  end
  ruby_args = args.map { |arg| Values.to_ruby_value(arg, @engine) }
  block = if ruby_args.length > 0 && ruby_args.last.is_a?(RubyLambda)
    ruby_args.pop
  else
    nil
  end
  begin
    Values.to_eleet_value(@ruby_obj.send(method_name, *ruby_args, &block), @engine)
  rescue NoMethodError => e
    Values.to_eleet_value(@engine["nil"], @engine)
  end
end
can_call_method?(method_name) click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 45
def can_call_method?(method_name)
  method_name = method_name.to_sym
  # Check our options first, they can override class defined locks/allows.
  if @options[:allow]
    if @options[:allow].include?(method_name)
      return true
    else
      return false
    end
  end
  if @options[:lock]
    if @options[:lock].include?(method_name)
      return false
    else
      return true
    end
  end
  # Check the Whitelist
  if @ruby_obj.respond_to?(:eleetscript_allow_methods)
    val = @ruby_obj.eleetscript_allow_methods
    return false if val == :none
    return true if val == :all
    if val.kind_of?(Array) && val.include?(method_name)
      return true
    else
      return false
    end
  end
  # Check the Blacklist
  if @ruby_obj.respond_to?(:eleetscript_lock_methods)
    val = @ruby_obj.eleetscript_lock_methods
    return true if val == :none
    return false if val == :all
    if val.kind_of?(Array) && val.include?(method_name)
      return false
    else
      return true
    end
  end
  # If not specifically allowed/denied, then it can be accessed.
  true
end
class?() click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 108
def class?
  Values.to_eleet_value(@ruby_obj.class == Class, @engine)
end
instance?() click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 112
def instance?
  !class?
end
is_a?(name) click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 92
def is_a?(name)
  cls = if @ruby_obj.class == Class
    @ruby_obj
  else
    @ruby_obj.class
  end
  cls_names = cls.ancestors.map do |a|
    if a.name.nil?
      nil
    else
      a.name.split("::").last
    end
  end
  cls_names.compact.include?(name)
end
name() click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 116
def name
  if @ruby_obj.class == Class
    @ruby_obj.name
  else
    @ruby_obj.class.name
  end
end
raw() click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 88
def raw
  @ruby_obj
end
runtime_class() click to toggle source
# File lib/engine/ruby_to_eleet_wrapper.rb, line 124
def runtime_class
  cls = if @ruby_obj.class == Class
    @ruby_obj
  else
    @ruby_obj.class
  end
  Values.to_eleet_value(cls)
end