class FormLogic::Base

Attributes

instances[R]

Public Class Methods

declare_model_name(name) click to toggle source

@param [Sting, Symbol] @example

declare_model_name :user

This name will be use to build an [ActiveModel::Name]

# File lib/form_logic/base.rb, line 16
def declare_model_name(name)
  @@declared_model_name = name.to_s
end
model_name() click to toggle source
# File lib/form_logic/base.rb, line 41
def model_name
  ActiveModel::Name.new(self, nil, declared_model_name || self.name)
end
new(*instances) click to toggle source

@example UserForm.new(User.new(params))

# File lib/form_logic/base.rb, line 48
def initialize(*instances)
  @instances = instances
  instances.each do |instance|
    self.class.send(:define_method, instance_to_accessor_name(instance)) { instance }
  end
end
property(*names, to: nil) click to toggle source

@param [String, Symbol] name of an attribute @option to [Symbol] object-receiver (the name of an instance) @example

property :email, :to => :user

Actually this is just an syntax sugar over the `delegate` method

# File lib/form_logic/base.rb, line 27
def property(*names, to: nil)
  receiver = to || (raise ArgumentError.new ':to option must be set') 
  names.each do |name|
    class_eval { delegate(name, to: receiver) }  
  end
end
virtual(*names) click to toggle source

@param [Symbol]

# File lib/form_logic/base.rb, line 35
def virtual(*names)
  names.each do |name|
    class_eval { attr_accessor(name) }
  end
end

Public Instance Methods

valid?() click to toggle source

Copies vaidation errors of declared models to self

Calls superclass method
# File lib/form_logic/base.rb, line 57
def valid?
  super
  copy_errors_to_self!
  if self.class.method_defined?(:while_validation)
    while_validation()
  end
  !errors.present?
end

Protected Instance Methods

copy_errors_to_self!() click to toggle source

copies errors from passed instancies to self

# File lib/form_logic/base.rb, line 69
def copy_errors_to_self!
  instances.each do |instance|
    instance.valid?
    instance.errors.each do |attribute, description|
      self.errors.add(attribute, description)
    end
  end
end

Private Instance Methods

instance_to_accessor_name(instance) click to toggle source
# File lib/form_logic/base.rb, line 80
def instance_to_accessor_name(instance)
  instance.class.name.split('::').join('_').underscore
end