module Etat::ActiveRecord::ClassMethods

Public Instance Methods

event(event_name, &block) click to toggle source
# File lib/etat/active_record.rb, line 27
def event event_name, &block
  define_method(event_name) do
    instance_eval &block
  end
end
has_states(*states) click to toggle source
# File lib/etat/active_record.rb, line 14
def has_states *states
  @states = []
  states.each do |state|
    if state.is_a?(Symbol)
      create_state_with state
      create_scopes state
      @states << state
    else
      raise 'States should be symbol'
    end
  end
end
states() click to toggle source
# File lib/etat/active_record.rb, line 33
def states
  @states
end

Private Instance Methods

create_scopes(state) click to toggle source
# File lib/etat/active_record.rb, line 38
      def create_scopes state
        self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
          scope "all_#{state}", -> { where(state: state) }
          scope "all_but_#{state}", -> { where("state != ?", state) }
        RUBY
      end
create_state_with(state) click to toggle source
# File lib/etat/active_record.rb, line 46
def create_state_with state
  define_method("#{state}?") do
    self.state == state.to_sym
  end
end