Sha256: d56c5ba5f8105e4d667c47d7b6b577faf1862673d5f5ac280c9c37673b4b3eaa

Contents?: true

Size: 1.6 KB

Versions: 9

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

require 'lite/errors'

module Lite
  module Command
    module Extensions
      module Errors

        module ClassMethods

          def perform(*args)
            klass = call(*args)

            if klass.success?
              yield(klass.result, Lite::Command::Success, Lite::Command::Failure)
            else
              yield(klass.result, Lite::Command::Failure, Lite::Command::Success)
            end
          end

        end

        class << self

          def included(klass)
            klass.extend(ClassMethods)
          end

        end

        def errors
          @errors ||= Lite::Errors::Messages.new
        end

        def errored?
          !errors.empty?
        end

        def fail!
          raise Lite::Command::ValidationError
        end

        def failure?
          called? && errored?
        end

        def merge_errors!(klass, direction: :from)
          case direction
          when :from then errors.merge!(klass.errors)
          when :to then klass.errors.merge!(errors)
          end

          nil
        end

        def merge_exception!(exception, key: :internal)
          errors.add(key, "#{exception.class} - #{exception.message}")

          nil
        end

        def result!
          result if valid?
        end

        def status
          return :pending unless called?

          success? ? :success : :failure
        end

        def success?
          called? && !errored?
        end

        def validate!
          return true if success?

          fail!
        end

        alias valid? validate!

      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
lite-command-1.2.0 lib/lite/command/extensions/errors.rb
lite-command-1.1.1 lib/lite/command/extensions/errors.rb
lite-command-1.1.0 lib/lite/command/extensions/errors.rb
lite-command-1.0.10 lib/lite/command/extensions/errors.rb
lite-command-1.0.9 lib/lite/command/extensions/errors.rb
lite-command-1.0.8 lib/lite/command/extensions/errors.rb
lite-command-1.0.7 lib/lite/command/extensions/errors.rb
lite-command-1.0.6 lib/lite/command/extensions/errors.rb
lite-command-1.0.5 lib/lite/command/extensions/errors.rb