Sha256: 3aa94613c01fb44051039c60d5e8a18e1037acc5ceb2570bbfc8c3af7d248a8c

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

require 'comandor/version'

# Service Objects
module Comandor
  attr_reader :result

  # Callback on `extend Comandor`
  def self.extended(base)
    base.prepend(self)
    base.extend(ClassMethods)
  end

  # ClassName.perform
  module ClassMethods
    def perform(*args, &block)
      new.perform(*args, &block)
    end
  end

  # @return [self]
  def perform(*args, &block)
    raise NoMethodError unless defined?(:perform)
    @result = super
    @done = true
    self
  end

  # Add new error to key array
  # @param key [Symbol]
  # @param message [String]
  # @return [self]
  def error(key, message)
    errors[key] ||= []
    if message.is_a? Array
      errors[key] = errors[key] + message
    else
      errors[key] << message
    end
    self
  end

  # Are we done here?
  # @return [Boolean]
  def success?
    done? && !errors?
  end

  # Are we failed?
  # @return [Boolean]
  def fail?
    done? && errors?
  end
  alias failed? fail?

  # List of errors
  # @return [Hash<Symbol => Array>]
  def errors
    @errors ||= {}
  end

  private

  def done?
    @done ||= false
  end

  def errors?
    errors.any?
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
comandor-0.1.3 lib/comandor.rb