class RubyReportable::Sandbox

Public Class Methods

new(_methods = {}) click to toggle source
# File lib/ruby_reportable/sandbox.rb, line 7
def initialize(_methods = {})
  @values = {}

  _methods.map do |key, value|
    define(key, value)
  end
end

Public Instance Methods

[](key) click to toggle source
# File lib/ruby_reportable/sandbox.rb, line 20
def [](key)
  @values[key]
end
[]=(key, value) click to toggle source
# File lib/ruby_reportable/sandbox.rb, line 24
def []=(key, value)
  if value.is_a?(Proc)
    @values[key] = value.call
  else
    @values[key] = value
  end
end
build(base, block) click to toggle source
# File lib/ruby_reportable/sandbox.rb, line 15
def build(base, block)
  @values[base] = instance_eval(&block)
  self
end
define(key, value) click to toggle source
# File lib/ruby_reportable/sandbox.rb, line 32
def define(key, value)
  if self.class.respond_to?(:define_singleton_method)
    define_singleton_method(key) do
      if value.is_a?(Proc)
        @values[key] ||= value.call
      else
        @values[key] ||= value
      end
    end
  else
    metaclass.send(:define_method, key, Proc.new do
                     if value.is_a?(Proc)
                       @values[key] ||= value.call
                     else
                       @values[key] ||= value
                     end
                   end)
  end
end
metaclass() click to toggle source
# File lib/ruby_reportable/sandbox.rb, line 3
def metaclass
  class << self; self; end
end