class Goaltender::Base

Attributes

inputs[RW]
params[R]

Public Class Methods

new(args) click to toggle source
# File lib/goaltender/base.rb, line 16
def initialize(args)
  @params = HashWithIndifferentAccess.new(args)
  @inputs = set_inputs
  after_init(@params)
end

Public Instance Methods

save() click to toggle source
# File lib/goaltender/base.rb, line 31
def save
  before_save
  success = valid_form? ? persist! : false
  if success
    after_save
    true
  else
    false
  end
end
to_h() click to toggle source
# File lib/goaltender/base.rb, line 22
def to_h
  hash = {}
  inputs.each do |input|
    value = instance_variable_get("@#{input.variable_name}")
    hash[input.variable_name] = value
  end
  hash
end

Private Instance Methods

after_init(args) click to toggle source

METHODS FOR CHILDREN

# File lib/goaltender/base.rb, line 83
def after_init(args)
  # this method is optionally implemented by children to
  # override default initialization behavior
end
after_save() click to toggle source
# File lib/goaltender/base.rb, line 92
def after_save
  # optionally implemented by children
end
before_save() click to toggle source
# File lib/goaltender/base.rb, line 96
def before_save
  # optionally implemented by children
end
object() click to toggle source
# File lib/goaltender/base.rb, line 88
def object
  # optionally implemented by children
end
persist!() click to toggle source
# File lib/goaltender/base.rb, line 77
def persist!
  object.save
end
set_inputs() click to toggle source
# File lib/goaltender/base.rb, line 44
def set_inputs
  current_class_name = self.class.name
  relevant_classes = [current_class_name]
  classes = current_class_name.split("::")
  while classes.present?
    classes.pop
    possibility = classes.join("::")
    relevant_classes << possibility unless possibility.exclude?("::")
    current_class_name = possibility
  end

  all_inputs = []
  Goaltender::Base.input_definitions.each do |class_name, form_inputs|
    if relevant_classes.include?(class_name)
      form_inputs.each do |form_input|
        name = form_input[0]
        type = form_input[1]
        options = form_input[2]
        input_value = params[name]
        input = Goaltender::Input.new(self, name, type, input_value, options)
        self.class.__send__(:attr_accessor, input.variable_name)
        instance_variable_set("@#{input.variable_name.to_s}", input.parsed_value)
        all_inputs << input
      end
    end
  end
  all_inputs
end
valid_form?() click to toggle source
# File lib/goaltender/base.rb, line 73
def valid_form?
  valid? && object.valid?
end