Module: WorkflowActiverecord::Scopes
- Defined in:
- lib/workflow-activerecord.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
49 50 51 52 53 54 |
# File 'lib/workflow-activerecord.rb', line 49 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(&specification) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/workflow-activerecord.rb', line 56 def workflow_with_scopes(&specification) workflow_without_scopes(&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.to_s) end define_singleton_method("without_#{state}_state") do where.not("#{table_name}.#{self.workflow_column.to_sym} = ?", state.to_s) end end end |