class SimplestStatus::ModelMethods

Attributes

model[R]
statuses[R]

Public Class Methods

new(model, statuses) click to toggle source
# File lib/simplest_status/model_methods.rb, line 5
def initialize(model, statuses)
  @model    = model
  @statuses = statuses
end

Public Instance Methods

add() click to toggle source
# File lib/simplest_status/model_methods.rb, line 10
def add
  define_statuses_accessor_for statuses

  populate_statuses

  process_each_status

  define_status_label_method_for statuses

  set_validations_for statuses
end

Private Instance Methods

define_class_methods_for(status, status_name) click to toggle source
# File lib/simplest_status/model_methods.rb, line 46
def define_class_methods_for(status, status_name)
  model.send :define_singleton_method, status.symbol do
    where(status_name => status.value)
  end
end
define_instance_methods_for(status) click to toggle source
# File lib/simplest_status/model_methods.rb, line 52
def define_instance_methods_for(status)
  define_predicate(status, statuses.status_name)
  define_status_setter(status, statuses.status_name)
end
define_predicate(status, status_name) click to toggle source
# File lib/simplest_status/model_methods.rb, line 57
def define_predicate(status, status_name)
  model.send :define_method, "#{status.symbol}?" do
    send(status_name) == status.value
  end
end
define_status_label_method_for(statuses) click to toggle source
# File lib/simplest_status/model_methods.rb, line 69
def define_status_label_method_for(statuses)
  model.send :define_method, "#{statuses.status_name}_label" do
    self.class.send(statuses.model_accessor).label_for send(statuses.status_name)
  end
end
define_status_setter(status, status_name) click to toggle source
# File lib/simplest_status/model_methods.rb, line 63
def define_status_setter(status, status_name)
  model.send :define_method, status.symbol do
    update_attributes(status_name => status.value)
  end
end
define_statuses_accessor_for(statuses) click to toggle source
# File lib/simplest_status/model_methods.rb, line 24
def define_statuses_accessor_for(statuses)
  model.send :define_singleton_method, statuses.model_accessor do
    instance_variable_get('@' + statuses.model_accessor)
  end
end
populate_statuses() click to toggle source
# File lib/simplest_status/model_methods.rb, line 30
def populate_statuses
  model.send(:instance_variable_set, '@' + statuses.model_accessor, statuses)
end
process_each_status() click to toggle source
# File lib/simplest_status/model_methods.rb, line 34
def process_each_status
  statuses.each do |status|
    set_constant_for status
    define_class_methods_for status, statuses.status_name
    define_instance_methods_for status
  end
end
set_constant_for(status) click to toggle source
# File lib/simplest_status/model_methods.rb, line 42
def set_constant_for(status)
  model.send :const_set, status.constant_name, status.value
end
set_validations_for(statuses) click to toggle source
# File lib/simplest_status/model_methods.rb, line 75
def set_validations_for(statuses)
  model.send :validates, statuses.status_name, :presence => true, :inclusion => { :in => statuses.values }
end