class Statesman::Adapters::ActiveRecordQueries::ClassMethods
Public Class Methods
new(**args)
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 37 def initialize(**args) @args = args end
Public Instance Methods
included(base)
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 41 def included(base) ensure_inheritance(base) query_builder = QueryBuilder.new(base, **@args) 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) end
Private Instance Methods
define_in_state(base, query_builder)
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 65 def define_in_state(base, query_builder) base.define_singleton_method(:in_state) do |*states| states = states.flatten joins(most_recent_transition_join). where(query_builder.states_where(states), states) end end
define_not_in_state(base, query_builder)
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 74 def define_not_in_state(base, query_builder) base.define_singleton_method(:not_in_state) do |*states| states = states.flatten joins(most_recent_transition_join). where("NOT (#{query_builder.states_where(states)})", states) end end
ensure_inheritance(base)
click to toggle source
# File lib/statesman/adapters/active_record_queries.rb, line 56 def ensure_inheritance(base) klass = self existing_inherited = base.method(:inherited) base.define_singleton_method(:inherited) do |subclass| existing_inherited.call(subclass) subclass.send(:include, klass) end end