Sha256: 5417d9ed09cc88cc4d714f7f586eb661faf48348c54804e39e592e0b22813add

Contents?: true

Size: 1.47 KB

Versions: 18

Compression:

Stored size: 1.47 KB

Contents

module StateManager
  # State helper methods. Examples:
  #
  #    @post.event! # send_event! :event
  #    @post.active? # in_state? :active
  #    @post.can_event? # respond_to_event? :event
  #
  module Helpers

    module Methods
      def self.define_methods(specification, target_class, property)
        self.define_methods_helper(specification, target_class, [], property)
      end

      def self.define_methods_helper(specification, target_class, name_parts, property)
        sm_proc = Proc.new do
          self.send "#{property}_manager"
        end

        specification.events.each do |name, event|
          target_class.send :define_method, "#{name.to_s}!" do | *args |
            state_manager = instance_eval &sm_proc
            state_manager.send_event! name, *args
          end

          target_class.send :define_method, "can_#{name.to_s}?" do
            state_manager = instance_eval &sm_proc
            state_manager.respond_to_event?(name)
          end
        end

        specification.states.each do |name, child_class|
          state_name_parts = name_parts.dup << name
          method = state_name_parts.join('_')
          path = state_name_parts.join('.')
          target_class.send :define_method, "#{method}?" do
            state_manager = instance_eval &sm_proc
            state_manager.in_state?(path)
          end

          define_methods_helper(child_class.specification, target_class, state_name_parts, property)
        end
      end
    end

  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
state_manager-0.4.0 lib/state_manager/helpers.rb
state_manager-0.3.5 lib/state_manager/helpers.rb
state_manager-0.3.4 lib/state_manager/helpers.rb
state_manager-0.3.3 lib/state_manager/helpers.rb
state_manager-0.3.2 lib/state_manager/helpers.rb
state_manager-0.3.1 lib/state_manager/helpers.rb
state_manager-0.3.0 lib/state_manager/helpers.rb
state_manager-0.2.13 lib/state_manager/helpers.rb
state_manager-0.2.12 lib/state_manager/helpers.rb
state_manager-0.2.11 lib/state_manager/helpers.rb
state_manager-0.2.10 lib/state_manager/helpers.rb
state_manager-0.2.9 lib/state_manager/helpers.rb
state_manager-0.2.8 lib/state_manager/helpers.rb
state_manager-0.2.7 lib/state_manager/helpers.rb
state_manager-0.2.6 lib/state_manager/helpers.rb
state_manager-0.2.5 lib/state_manager/helpers.rb
state_manager-0.2.4 lib/state_manager/helpers.rb
state_manager-0.2.3 lib/state_manager/helpers.rb