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
-
.find(name) ⇒ Object
Finds an integration with the given name.
-
.match(klass) ⇒ Object
Attempts to find an integration that matches the given class.
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 |