Sha256: de0986dec81236f299f5de008d5ff2c82b32208cc263037e75611c7940ec0af1

Contents?: true

Size: 1.42 KB

Versions: 5

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

module FiniteMachine
  # A class responsible for defining state query methods on state machine
  #
  # Used by {TranstionBuilder} to add state query definition
  # to the {StateMachine} instance.
  #
  # @api private
  class StateDefinition
    # Initialize a StateDefinition
    #
    # @param [StateMachine] machine
    #
    # @api public
    def initialize(machine)
      @machine = machine
    end

    # Define query methods for states
    #
    # @param [Hash] states
    #   the states that require query helpers
    #
    # @return [nil]
    #
    # @api public
    def apply(states)
      define_state_query_methods(states)
    end

    private

    # The current state machine
    attr_reader :machine

    # Define helper state mehods for the transition states
    #
    # @param [Hash] states
    #   the states to define helpers for
    #
    # @return [nil]
    #
    # @api private
    def define_state_query_methods(states)
      states.to_a.flatten.each do |state|
        define_state_query_method(state)
      end
    end

    # Define state helper method
    #
    # @param [Symbol] state
    #   the state to define helper for
    #
    # @api private
    def define_state_query_method(state)
      return if machine.respond_to?("#{state}?")
      machine.send(:define_singleton_method, "#{state}?") do
        machine.is?(state.to_sym)
      end
    end
  end # StateDefinition
end # FiniteMachine

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
finite_machine-0.14.1 lib/finite_machine/state_definition.rb
finite_machine-0.14.0 lib/finite_machine/state_definition.rb
finite_machine-0.13.0 lib/finite_machine/state_definition.rb
finite_machine-0.12.1 lib/finite_machine/state_definition.rb
finite_machine-0.12.0 lib/finite_machine/state_definition.rb