Sha256: 6664d974e958aff39fa38dbcb5bf8b1068f45e7719eb373cfb07ee20d49a3c18

Contents?: true

Size: 1.38 KB

Versions: 14

Compression:

Stored size: 1.38 KB

Contents

module StateMachine
  module YARD
    module Handlers
      # Handles and processes #transition
      class Transition < Base
        handles method_call(:transition)
        
        def process
          if [StateMachine::Machine, StateMachine::Event, StateMachine::State].include?(owner.class)
            options = {}
            
            # Extract requirements
            ast = statement.parameters.first
            ast.children.each do |assoc|
              # Skip conditionals
              next if %w(if unless).include?(assoc[0].jump(:ident).source)
              
              options[extract_requirement(assoc[0])] = extract_requirement(assoc[1])
            end
            
            owner.transition(options)
          end
        end

        private
          # Extracts the statement requirement from the given node
          def extract_requirement(ast)
            case ast.type
            when :symbol_literal, :string_literal, :array
              extract_node_names(ast, false)
            when :binary
              AllMatcher.instance - extract_node_names(ast.children.last)
            when :var_ref, :vcall
              case ast.source
              when 'nil'
                nil
              when 'same'
                LoopbackMatcher.instance
              else
                AllMatcher.instance
              end
            end
          end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 9 rubygems

Version Path
state_machine_updated_for_ruby_3_2-2.0.0 lib/state_machine/yard/handlers/transition.rb
telvue_state_machine-1.2.3 lib/state_machine/yard/handlers/transition.rb
telvue_state_machine-1.2.2 lib/state_machine/yard/handlers/transition.rb
state_machine_deuxito-0.0.1 lib/state_machine/yard/handlers/transition.rb
telvue_state_machine-1.2.1 lib/state_machine/yard/handlers/transition.rb
cm-state_machine-1.2.0.1 lib/state_machine/yard/handlers/transition.rb
spree-state_machine-2.0.0.beta4 lib/state_machine/yard/handlers/transition.rb
spree-state_machine-2.0.0.beta3 lib/state_machine/yard/handlers/transition.rb
spree-state_machine-2.0.0.beta2 lib/state_machine/yard/handlers/transition.rb
spree-state_machine-2.0.0.beta1 lib/state_machine/yard/handlers/transition.rb
culturecode-state_machine-1.2.1 lib/state_machine/yard/handlers/transition.rb
automat-1.2.0 lib/state_machine/yard/handlers/transition.rb
glebtv_state_machine-1.3.0 lib/state_machine/yard/handlers/transition.rb
state_machine-1.2.0 lib/state_machine/yard/handlers/transition.rb