class BusinessFlow::DSL::MemoizedField
Helper class around memoized fields
Attributes
field[R]
retriever[R]
setter_factory[R]
Public Class Methods
new(field, retriever, setter_factory)
click to toggle source
# File lib/business_flow/dsl.rb, line 400 def initialize(field, retriever, setter_factory) @field = field @retriever = retriever @setter_factory = setter_factory end
Public Instance Methods
add_to(klass)
click to toggle source
# File lib/business_flow/dsl.rb, line 406 def add_to(klass) setter = setter_factory.call(field, safe_ivar_name) Field.unsafe_eval_method( klass, field, memoized(safe_ivar_name, setter, retriever) ) end
name()
click to toggle source
# File lib/business_flow/dsl.rb, line 413 def name field end
Private Instance Methods
memoized(ivar_name, setter, retriever)
click to toggle source
# File lib/business_flow/dsl.rb, line 421 def memoized(ivar_name, setter, retriever) <<-MEMOIZED return #{ivar_name} if defined?(#{ivar_name}) new_value = begin #{retriever} end #{setter} MEMOIZED end
safe_ivar_name()
click to toggle source
# File lib/business_flow/dsl.rb, line 431 def safe_ivar_name @safe_ivar_name ||= begin "@business_flow_dsl_#{field}" .sub(/\?$/, '_query') .sub(/\!$/, '_bang') .to_sym end end