Class: BusinessFlow::DSL::Field

Inherits:
Object
  • Object
show all
Defined in:
lib/business_flow/dsl.rb

Overview

Helper class to manage logic around adding fields

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(field) ⇒ Field

Returns a new instance of Field.



346
347
348
349
350
351
352
# File 'lib/business_flow/dsl.rb', line 346

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

Class Method Details

.eval_method(klass, name, str) ⇒ Object



363
364
365
366
367
# File 'lib/business_flow/dsl.rb', line 363

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

.setter_factory(_field, ivar_name) ⇒ Object



374
375
376
377
378
# File 'lib/business_flow/dsl.rb', line 374

def self.setter_factory(_field, ivar_name)
  "    \#{ivar_name} = new_value\n  SETTER\nend\n"

.unsafe_eval_method(klass, name, str) ⇒ Object



369
370
371
372
# File 'lib/business_flow/dsl.rb', line 369

def self.unsafe_eval_method(klass, name, str)
  body = ["private def #{name}", str, 'end'].join("\n")
  klass.class_eval body, __FILE__, __LINE__
end

Instance Method Details

#add_to(klass) ⇒ Object



354
355
356
357
# File 'lib/business_flow/dsl.rb', line 354

def add_to(klass)
  Field.eval_method(klass, field, getter)
  Field.eval_method(klass, setter_name, setter)
end

#nameObject



359
360
361
# File 'lib/business_flow/dsl.rb', line 359

def name
  field
end