Module: StateMachine::Integrations

Defined in:
lib/state_machine/integrations.rb,
lib/state_machine/integrations/base.rb,
lib/state_machine/integrations/sequel.rb,
lib/state_machine/integrations/mongoid.rb,
lib/state_machine/integrations/data_mapper.rb,
lib/state_machine/integrations/active_model.rb,
lib/state_machine/integrations/mongo_mapper.rb,
lib/state_machine/integrations/active_record.rb,
lib/state_machine/integrations/sequel/versions.rb,
lib/state_machine/integrations/mongoid/versions.rb,
lib/state_machine/integrations/data_mapper/observer.rb,
lib/state_machine/integrations/data_mapper/versions.rb,
lib/state_machine/integrations/active_model/observer.rb,
lib/state_machine/integrations/mongo_mapper/versions.rb,
lib/state_machine/integrations/active_model/versions.rb,
lib/state_machine/integrations/active_record/versions.rb

Overview

:nodoc:

Defined Under Namespace

Modules: ActiveModel, ActiveRecord, Base, DataMapper, MongoMapper, Mongoid, Sequel

Class Method Summary collapse

Class Method Details

.allObject

Gets a list of all of the available integrations for use. This will always list the ActiveModel integration last.

Example

StateMachine::Integrations.all
# => [StateMachine::Integrations::ActiveRecord, StateMachine::Integrations::DataMapper
#     StateMachine::Integrations::Mongoid, StateMachine::Integrations::MongoMapper,
#     StateMachine::Integrations::Sequel, StateMachine::Integrations::ActiveModel]


104
105
106
107
# File 'lib/state_machine/integrations.rb', line 104

def self.all
  constants = self.constants.map {|c| c.to_s}.select {|c| c != 'ActiveModel'}.sort << 'ActiveModel'
  constants.map {|c| const_get(c)}
end

.find_by_name(name) ⇒ Object

Finds an integration with the given name. If the integration cannot be found, then a NameError exception will be raised.

Examples

StateMachine::Integrations.find_by_name(:active_record) # => StateMachine::Integrations::ActiveRecord
StateMachine::Integrations.find_by_name(:active_model)  # => StateMachine::Integrations::ActiveModel
StateMachine::Integrations.find_by_name(:data_mapper)   # => StateMachine::Integrations::DataMapper
StateMachine::Integrations.find_by_name(:mongoid)       # => StateMachine::Integrations::Mongoid
StateMachine::Integrations.find_by_name(:mongo_mapper)  # => StateMachine::Integrations::MongoMapper
StateMachine::Integrations.find_by_name(:sequel)        # => StateMachine::Integrations::Sequel
StateMachine::Integrations.find_by_name(:invalid)       # => StateMachine::IntegrationNotFound: :invalid is an invalid integration


91
92
93
# File 'lib/state_machine/integrations.rb', line 91

def self.find_by_name(name)
  all.detect {|integration| integration.integration_name == name} || raise(IntegrationNotFound.new(name))
end

.match(klass) ⇒ Object

Attempts to find an integration that matches the given class. This will look through all of the built-in integrations under the StateMachine::Integrations namespace and find one that successfully matches the class.

Examples

class Vehicle
end

class ActiveModelVehicle
  include ActiveModel::Observing
  include ActiveModel::Validations
end

class ActiveRecordVehicle < ActiveRecord::Base
end

class DataMapperVehicle
  include DataMapper::Resource
end

class MongoidVehicle
  include Mongoid::Document
end

class MongoMapperVehicle
  include MongoMapper::Document
end

class SequelVehicle < Sequel::Model
end

StateMachine::Integrations.match(Vehicle)             # => nil
StateMachine::Integrations.match(ActiveModelVehicle)  # => StateMachine::Integrations::ActiveModel
StateMachine::Integrations.match(ActiveRecordVehicle) # => StateMachine::Integrations::ActiveRecord
StateMachine::Integrations.match(DataMapperVehicle)   # => StateMachine::Integrations::DataMapper
StateMachine::Integrations.match(MongoidVehicle)      # => StateMachine::Integrations::Mongoid
StateMachine::Integrations.match(MongoMapperVehicle)  # => StateMachine::Integrations::MongoMapper
StateMachine::Integrations.match(SequelVehicle)       # => StateMachine::Integrations::Sequel


75
76
77
# File 'lib/state_machine/integrations.rb', line 75

def self.match(klass)
  all.detect {|integration| integration.available? && integration.matches?(klass)}
end