Module: StateShifter::Definition::ActiveRecordIntegrationMethods

Defined in:
lib/state_shifter/definition/active_record_integration_methods.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.include_state_scopes(base) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/state_shifter/definition/active_record_integration_methods.rb', line 7

def self.include_state_scopes(base)
  base.state_machine_definition.states.each do |name, definition|
    base.class_eval do
      scope name, -> { where(persist_attr_name => name) } unless respond_to?(name)
    end
  end

  base.state_machine_definition.state_tags.each do |name, states|
    base.class_eval do
      scope name, -> { where(persist_attr_name => states) } unless respond_to?(name)
    end
  end
end

Instance Method Details

#check_attr_presenceObject



21
22
23
# File 'lib/state_shifter/definition/active_record_integration_methods.rb', line 21

def check_attr_presence
  raise StatePersistenceAttributeNotPresent unless self.attribute_names.include? self.class.persist_attr_name.to_s
end

#get_current_stateObject



25
26
27
28
# File 'lib/state_shifter/definition/active_record_integration_methods.rb', line 25

def get_current_state
  check_attr_presence
  read_attribute self.class.persist_attr_name
end

#set_current_state(value) ⇒ Object



30
31
32
33
# File 'lib/state_shifter/definition/active_record_integration_methods.rb', line 30

def set_current_state value
  check_attr_presence
  update_attribute self.class.persist_attr_name, value
end

#write_initial_stateObject



35
36
37
38
# File 'lib/state_shifter/definition/active_record_integration_methods.rb', line 35

def write_initial_state
  raise StatePersistenceAttributeNotPresent unless self.attribute_names.include?(self.class.persist_attr_name.to_s)
  write_attribute self.class.persist_attr_name, self.class.state_machine_definition.initial_state.name.to_sym
end