class BusinessFlow::DSL::Field

Helper class to manage logic around adding fields

Attributes

field[R]
getter[R]
setter[R]

Public Class Methods

eval_method(klass, name, str) click to toggle source
# File lib/business_flow/dsl.rb, line 349
def self.eval_method(klass, name, str)
  return if klass.method_defined?(name) ||
            klass.private_method_defined?(name)
  unsafe_eval_method(klass, name, str)
end
new(field) click to toggle source
# File lib/business_flow/dsl.rb, line 332
def initialize(field)
  @field = field
  # For proc bindings.
  ivar_name = instance_variable_name
  @getter = ivar_name
  @setter = self.class.setter_factory(field, ivar_name)
end
setter_factory(field, ivar_name) click to toggle source
# File lib/business_flow/dsl.rb, line 360
      def self.setter_factory(field, ivar_name)
        <<-SETTER
          #{ivar_name} = new_value
        SETTER
      end
unsafe_eval_method(klass, name, str) click to toggle source
# File lib/business_flow/dsl.rb, line 355
def self.unsafe_eval_method(klass, name, str)
  body = ["private def #{name}", str, 'end'].join("\n")
  klass.class_eval body, __FILE__, __LINE__
end

Public Instance Methods

add_to(klass) click to toggle source
# File lib/business_flow/dsl.rb, line 340
def add_to(klass)
  Field.eval_method(klass, field, getter)
  Field.eval_method(klass, setter_name, setter)
end
name() click to toggle source
# File lib/business_flow/dsl.rb, line 345
def name
  field
end

Private Instance Methods

instance_variable_name() click to toggle source
# File lib/business_flow/dsl.rb, line 374
def instance_variable_name
  @instance_variable_name ||= "@#{field}"
end
setter_name() click to toggle source
# File lib/business_flow/dsl.rb, line 370
def setter_name
  @setter_name ||= "#{field}=(new_value)"
end