Sha256: e0b23b7a0a73845421a6471bbb38b76b88c8a19b05d959c2396e07dfbf51dc06

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

require_relative 'success_and_fail'
require_relative 'validate_params'
require_relative 'rescue_logical_errors'
require_relative 'aggregate_validations'
require_relative 'namespace'

module Voom
  module Commands
    class Base
      include Commands::SuccessAndFail
      include Commands::ValidateParams
      include Commands::AggregateValidations
      include Commands::Namespace
      class << self
        include Commands::RescueLogicalErrors
      end

      attr_reader :params

      def initialize(*args, **params_, &block)
        @params = params_.any? ? validate_params(**params_) : {}
        @block = block
      end

      def call
        response = self.perform
        response = response.respond_to?(:success?) ? response : success
        response2 = @block.call(response, self) if @block
        response = response2.respond_to?(:success?) ? response2 : response
        response.respond_to?(:success?) ? response : success
      end

      def self.call(*args, **params, &block)
        rescue_logical_errors {new(*args, **params, &block).call(&block)}
      end

      def self.call!(*args, **params, &block)
        self.new(*args, **params, &block).call(&block)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
voom-commands-0.1.1 lib/voom/commands/base.rb
voom-commands-0.1.0 lib/voom/commands/base.rb