module StateMachine::Integrations::Base::ClassMethods

Attributes

defaults[R]

The default options to use for state machines using this integration

Public Instance Methods

available?() click to toggle source

Whether this integration is available for the current library. This is usually only true if the ORM that the integration is for is currently defined. Default is false.

   # File lib/state_machine/integrations/base.rb
23 def available?
24   false
25 end
extended(base) click to toggle source

Extends the given object with any version overrides that are currently active

   # File lib/state_machine/integrations/base.rb
77 def extended(base)
78   versions.each do |version|
79      base.extend(version) if version.active?
80   end
81 end
integration_name() click to toggle source

The name of the integration

   # File lib/state_machine/integrations/base.rb
10 def integration_name
11   @integration_name ||= begin
12     name = self.name.split('::').last
13     name.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
14     name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
15     name.downcase!
16     name.to_sym
17   end
18 end
locale_path() click to toggle source

The path to the locale file containing translations for this integration. This file will only exist for integrations that actually support i18n.

   # File lib/state_machine/integrations/base.rb
70 def locale_path
71   path = "#{File.dirname(__FILE__)}/#{integration_name}/locale.rb"
72   path if File.exists?(path)
73 end
matches?(klass) click to toggle source

Whether the integration should be used for the given class. Default is false.

   # File lib/state_machine/integrations/base.rb
29 def matches?(klass)
30   false
31 end
version(name, &block) click to toggle source

Creates a new version override for an integration. When this integration is activated, each version that is marked as active will also extend the integration.

Example

module StateMachine
  module Integrations
    module ORMLibrary
      version '0.2.x - 0.3.x' do
        def self.active?
          ::ORMLibrary::VERSION >= '0.2.0' && ::ORMLibrary::VERSION < '0.4.0'
        end

        def invalidate(object, attribute, message, values = [])
          # Override here...
        end
      end
    end
  end
end

In the above example, a version override is defined for the ORMLibrary integration when the version is between 0.2.x and 0.3.x.

   # File lib/state_machine/integrations/base.rb
62 def version(name, &block)
63   versions << mod = Module.new(&block)
64   mod
65 end
versions() click to toggle source

Tracks the various version overrides for an integration

   # File lib/state_machine/integrations/base.rb
34 def versions
35   @versions ||= []
36 end