class Temporaries::Values::Helpers
Attributes
name[R]
Public Class Methods
new(name)
click to toggle source
# File lib/temporaries/values.rb, line 62 def initialize(name) @name = name end
Public Instance Methods
define(mod)
click to toggle source
# File lib/temporaries/values.rb, line 93 def define(mod) if exists save = "original_value = #{exists} ? #{get} : Temporaries::Values::UNDEFINED" restore = "value.equal?(Temporaries::Values::UNDEFINED) ? #{remove} : #{set}" else save = "original_value = #{get}" restore = set end mod.class_eval <<-EOS, __FILE__, __LINE__ + 1 def push_#{name}(#{signature}, value) #{save} push_temporary(#{stack_key}, original_value) #{set} end def pop_#{name}(#{signature}) value = pop_temporary(#{stack_key}) #{restore} end def with_#{name}(#{signature}, value) push_#{name}(#{signature}, value) begin yield ensure pop_#{name}(#{signature}) end end EOS mod::ClassMethods.module_eval <<-EOS, __FILE__, __LINE__ + 1 def use_#{name}(#{signature}, value) temporaries_adapter.before do push_#{name}(#{signature}, value) end temporaries_adapter.after do pop_#{name}(#{signature}) end end EOS end
signature(signature = nil)
click to toggle source
# File lib/temporaries/values.rb, line 67 def signature(signature = nil) if signature @signature = signature else @signature end end
stack_key()
click to toggle source
# File lib/temporaries/values.rb, line 88 def stack_key sig_ids = signature.split(/\s*,\s*/).map{|s| s + '.__id__'}.join(', ') "[:#{name}, #{sig_ids}]" end