Module: StateMachine::Integrations

Defined in:
lib/state_machine/integrations.rb,
lib/state_machine/integrations/sequel.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/data_mapper/observer.rb,
lib/state_machine/integrations/active_model/observer.rb

Overview

:nodoc:

Defined Under Namespace

Modules: ActiveModel, ActiveRecord, DataMapper, MongoMapper, Sequel

Class Method Summary collapse

Class Method Details

.find(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(:active_record)   # => StateMachine::Integrations::ActiveRecord
StateMachine::Integrations.find(:active_model)    # => StateMachine::Integrations::ActiveModel
StateMachine::Integrations.find(:data_mapper)     # => StateMachine::Integrations::DataMapper
StateMachine::Integrations.find(:mongo_mapper)    # => StateMachine::Integrations::MongoMapper
StateMachine::Integrations.find(:sequel)          # => StateMachine::Integrations::Sequel
StateMachine::Integrations.find(:invalid)         # => NameError: wrong constant name Invalid


79
80
81
# File 'lib/state_machine/integrations.rb', line 79

def self.find(name)
  const_get(name.to_s.gsub(/(?:^|_)(.)/) {$1.upcase})
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::Dirty
  include ActiveModel::Observing
  include ActiveModel::Validations
end

class ActiveRecordVehicle < ActiveRecord::Base
end

class DataMapperVehicle
  include DataMapper::Resource
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(MongoMapperVehicle)  # => StateMachine::Integrations::MongoMapper
StateMachine::Integrations.match(SequelVehicle)       # => StateMachine::Integrations::Sequel


61
62
63
64
65
66
# File 'lib/state_machine/integrations.rb', line 61

def self.match(klass)
  constants = self.constants.map {|c| c.to_s}.select {|c| c != 'ActiveModel'}.sort << 'ActiveModel'
  if integration = constants.find {|name| const_get(name).matches?(klass)}
    find(integration)
  end
end