class Statesman::Adapters::ActiveRecordQueries::QueryBuilder
Attributes
initial_state[R]
model[R]
transition_class[R]
Public Class Methods
new(model, transition_class:, initial_state:, most_recent_transition_alias: nil, transition_name: nil)
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 85 def initialize(model, transition_class:, initial_state:, most_recent_transition_alias: nil, transition_name: nil) @model = model @transition_class = transition_class @initial_state = initial_state @most_recent_transition_alias = most_recent_transition_alias @transition_name = transition_name end
Public Instance Methods
most_recent_transition_join()
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 105 def most_recent_transition_join "LEFT OUTER JOIN #{model_table} AS #{most_recent_transition_alias} " \ "ON #{model.table_name}.#{model_primary_key} = " \ "#{most_recent_transition_alias}.#{model_foreign_key} " \ "AND #{most_recent_transition_alias}.most_recent = #{db_true}" end
states_where(states)
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 95 def states_where(states) if initial_state.to_s.in?(states.map(&:to_s)) "#{most_recent_transition_alias}.to_state IN (?) OR " \ "#{most_recent_transition_alias}.to_state IS NULL" else "#{most_recent_transition_alias}.to_state IN (?) AND " \ "#{most_recent_transition_alias}.to_state IS NOT NULL" end end
Private Instance Methods
db_true()
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 147 def db_true ::ActiveRecord::Base.connection.quote(true) end
model_foreign_key()
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 134 def model_foreign_key transition_reflection.foreign_key end
model_primary_key()
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 130 def model_primary_key transition_reflection.active_record_primary_key end
model_table()
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 138 def model_table transition_reflection.table_name end
most_recent_transition_alias()
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 142 def most_recent_transition_alias @most_recent_transition_alias || "most_recent_#{transition_name.to_s.singularize}" end
transition_name()
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 116 def transition_name @transition_name || transition_class.table_name.to_sym end
transition_reflection()
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 120 def transition_reflection model.reflect_on_all_associations(:has_many).each do |value| return value if value.klass == transition_class end raise MissingTransitionAssociation, "Could not find has_many association between #{self.class} " \ "and #{transition_class}." end