Class: Statesman::Adapters::ActiveRecordQueries::ClassMethods

Inherits:
Module
  • Object
show all
Defined in:
lib/statesman/adapters/active_record_queries.rb

Instance Method Summary collapse

Constructor Details

#initialize(**args) ⇒ ClassMethods

Returns a new instance of ClassMethods.



49
50
51
# File 'lib/statesman/adapters/active_record_queries.rb', line 49

def initialize(**args)
  @args = args
end

Instance Method Details

#included(base) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/statesman/adapters/active_record_queries.rb', line 53

def included(base)
  ensure_inheritance(base) if base.respond_to?(:subclasses) && base.subclasses.any?

  query_builder = QueryBuilder.new(
    base,
    transition_class: @args[:transition_class],
    initial_state: @args[:initial_state],
    most_recent_transition_alias: @args[:most_recent_transition_alias],
    transition_name: @args[:transition_name],
  )

  base.define_singleton_method(:most_recent_transition_join) do
    query_builder.most_recent_transition_join
  end

  define_in_state(base, query_builder)
  define_not_in_state(base, query_builder)

  define_method(:reload) do |*a|
    instance = super(*a)
    if instance.respond_to?(:state_machine, true)
      instance.send(:state_machine).reset
    end
    instance
  end
end