Class: Statesman::Adapters::ActiveRecordQueries::QueryBuilder

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

Instance Method Summary collapse

Constructor Details

#initialize(model, transition_class:, initial_state:, most_recent_transition_alias: nil, transition_name: nil) ⇒ QueryBuilder

Returns a new instance of QueryBuilder.



85
86
87
88
89
90
91
92
93
# 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

Instance Method Details

#most_recent_transition_joinObject



105
106
107
108
109
110
# 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}.id = " \
          "#{most_recent_transition_alias}.#{model_foreign_key} " \
     "AND #{most_recent_transition_alias}.most_recent = #{db_true}"
end

#states_where(states) ⇒ Object



95
96
97
98
99
100
101
102
103
# 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