Module: Statesman::Adapters::ActiveRecordQueries
- Defined in:
- lib/statesman/adapters/active_record_queries.rb
Defined Under Namespace
Classes: ClassMethods, QueryBuilder
Class Method Summary
collapse
Class Method Details
.[](**args) ⇒ Object
32
33
34
|
# File 'lib/statesman/adapters/active_record_queries.rb', line 32
def self.[](**args)
ClassMethods.new(**args)
end
|
.check_missing_methods!(base) ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
|
# File 'lib/statesman/adapters/active_record_queries.rb', line 6
def self.check_missing_methods!(base)
missing_methods = %i[transition_class initial_state].
reject { |m| base.respond_to?(m) }
return if missing_methods.none?
raise NotImplementedError,
"#{missing_methods.join(', ')} method(s) should be defined on " \
"the model. Alternatively, use the new form of `include " \
"Statesman::Adapters::ActiveRecordQueries[" \
"transition_class: MyTransition, " \
"initial_state: :some_state]`"
end
|
.included(base) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/statesman/adapters/active_record_queries.rb', line 19
def self.included(base)
check_missing_methods!(base)
base.include(
ClassMethods.new(
transition_class: base.transition_class,
initial_state: base.initial_state,
most_recent_transition_alias: base.try(:most_recent_transition_alias),
transition_name: base.try(:transition_name),
),
)
end
|
.transition_reflection_for(model, transition_class) ⇒ Object
Finds the has_many association on model that targets transition_class -
matching by klass rather than by name, since callers (e.g.
ConfigureCachedCurrentState) may not know what the association was named.
39
40
41
42
43
44
45
46
|
# File 'lib/statesman/adapters/active_record_queries.rb', line 39
def self.transition_reflection_for(model, transition_class)
model.reflect_on_all_associations(:has_many).find do |reflection|
reflection.klass == transition_class
end || raise(
MissingTransitionAssociation,
"Could not find has_many association between #{model} and #{transition_class}.",
)
end
|