Module: Workflow::Adapter::ActiveRecord::Scopes
- Defined in:
- lib/workflow/adapters/active_record.rb
Overview
This module will automatically generate ActiveRecord scopes based on workflow states. The name of each generated scope will be something like ‘with_<state_name>_state`
Examples:
Article.with_pending_state # => ActiveRecord::Relation Payment.without_refunded_state # => ActiveRecord::Relation ‘ Example above just adds `where(:state_column_name => ’pending’)‘ or `where.not(:state_column_name => ’pending’)‘ to AR query and returns ActiveRecord::Relation.
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.extended(object) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/workflow/adapters/active_record.rb', line 46 def self.extended(object) class << object alias_method :workflow_without_scopes, :workflow unless method_defined?(:workflow_without_scopes) alias_method :workflow, :workflow_with_scopes end end |
Instance Method Details
#workflow_with_scopes(column = nil, &specification) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/workflow/adapters/active_record.rb', line 53 def workflow_with_scopes(column=nil, &specification) workflow_without_scopes(column, &specification) states = workflow_spec.states.values states.each do |state| define_singleton_method("with_#{state}_state") do where("#{table_name}.#{self.workflow_column.to_sym} = ?", state.value) end define_singleton_method("without_#{state}_state") do where("#{table_name}.#{self.workflow_column.to_sym} != ?", state.value) end define_method("without_#{state}_state") do where("#{table_name}.#{self.workflow_column.to_sym} <> ?", state.to_s) end end end |