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