module Cult::Drivers::Common::ClassMethods

Public Instance Methods

memoize(method_name) click to toggle source
# File lib/cult/drivers/common.rb, line 21
def memoize(method_name)
  old_method_name = "#{method_name}_unmemoized".to_sym

  alias_method old_method_name, method_name

  var_name = "@#{method_name}".to_sym

  define_method(method_name) do
    if !instance_variable_defined?(var_name)
      instance_variable_set(var_name, send(old_method_name))
    end
    instance_variable_get(var_name)
  end

  define_method("#{method_name}_unmemo!") do
    remove_instance_variable(var_name)
  end
end
with_id_mapping(method_name) click to toggle source

Lets us write a method “something_map” that returns {'ident' => …}, and also get a function “something” that returns the keys.

# File lib/cult/drivers/common.rb, line 13
def with_id_mapping(method_name)
  new_method = method_name.to_s.sub(/_map\z/, '')
  define_method(new_method) do
    send(method_name).keys
  end
end