Sha256: afb2ad105ad8bdb86bdd414a5d1a3b48846691e659623eea3a8b3fea0eea3db2

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

# typed: strict
# frozen_string_literal: true

module Muina
  class Action
    class Step < Value
      # Final step of a successful Action
      class Result < self
        class Caller
          class Successful < self
            def initialize(action, result)
              super()
              @action = action
              @result = result
            end

            def call
              @action.instance_variable_set(:@__result__, @result)
            end
          end

          class Failed < self
            def initialize(action, result)
              super()
              @action = action
              @result = result
            end

            def call
              @action.instance_variable_set(:@__failure__, @result)
            end
          end

          def self.for(action, step)
            case result = Muina::Result() { action.instance_eval(&step) }
            when Muina::Result::Success then Caller::Successful.new(action, result)
            when Muina::Result::Failure then Caller::Failed.new(action, result)
            else T.absurd(result)
            end
          end
        end

        def call(action = Object.new)
          return if action.instance_variable_get(:@__failure__)

          Caller.for(action, step).call
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
muina-0.2.7 lib/muina/action/step/result.rb