Sha256: 3b89b146c620b9a4b1b84e418e1176d0581257a23218bf61c5f068035ad77021

Contents?: true

Size: 925 Bytes

Versions: 1

Compression:

Stored size: 925 Bytes

Contents

require "interactor/context"
require "interactor/organizer"

module Interactor
  def self.included(base)
    base.class_eval do
      extend ClassMethods
      include InstanceMethods

      attr_reader :context
    end
  end

  module ClassMethods
    def perform(context = {})
      new(context).tap(&:perform)
    end

    def rollback(context = {})
      new(context).tap(&:rollback)
    end
  end

  module InstanceMethods
    def initialize(context = {})
      @context = Context.build(context)
      setup
    end

    def setup
    end

    def perform
    end

    def rollback
    end

    def success?
      context.success?
    end

    def failure?
      context.failure?
    end

    def fail!(*args)
      context.fail!(*args)
    end

    def method_missing(method, *)
      context.fetch(method) { super }
    end

    def respond_to_missing?(method, *)
      context.key?(method) || super
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
interactor-1.0.0 lib/interactor.rb