Sha256: 137abc542da2f1616264ea052f2f564f18d15627cd8b372749af8068a6209245

Contents?: true

Size: 1020 Bytes

Versions: 1

Compression:

Stored size: 1020 Bytes

Contents

require "active_support"
require "active_model"

module UseCasePattern
  module Base
    extend ActiveSupport::Concern
    include ActiveModel::Validations

    module ClassMethods
      # The perform method of a UseCase should always return itself
      def perform(*args)
        new(*args).tap do |use_case|
          if use_case.valid?
            use_case.perform
          end
        end
      end

      # Raise a validation error if perform has created any errors
      def perform!(*args)
        new(*args).tap { |use_case| use_case.perform! }
      end
    end

    # Implement all the steps required to complete this use case
    def perform
      raise NotImplementedError
    end

    def perform!
      if valid?
        perform
      end

      if failure?
        raise_validation_error
      end
    end

    # Did the use case performed its task without errors?
    def success?
      errors.none?
    end

    # Did the use case have any errors?
    def failure?
      errors.any?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
use_case_pattern-1.0.1 lib/use_case_pattern/base.rb