Sha256: 7363001a41966e55ebd47d546a72cf4286407522bc40ed6570db5286f63169f5

Contents?: true

Size: 1.79 KB

Versions: 5

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

class Serega
  module SeregaPlugins
    module Batch
      #
      # Validator for option :loader in attribute :batch option
      #
      class CheckBatchOptLoader
        class << self
          #
          # Checks option :loader of attribute :batch option
          #
          # @param loader [nil, #call] Attribute :batch option :loader
          #
          # @raise [SeregaError] validation error
          #
          # @return [void]
          #
          def call(loader, serializer_class)
            if loader.is_a?(Symbol)
              check_symbol(loader, serializer_class)
            else
              check_callable(loader)
            end
          end

          private

          def check_symbol(loader_name, serializer_class)
            defined_loaders = serializer_class.config.batch.loaders
            return if defined_loaders[loader_name]

            raise SeregaError, <<~ERR.strip
              Please define loader before adding it to attribute.
                Example: `config.batch.define(:#{loader_name}) { |ids| ... }`
            ERR
          end

          def check_callable(loader)
            raise SeregaError, must_be_callable unless loader.respond_to?(:call)

            SeregaValidations::Utils::CheckExtraKeywordArg.call(loader, ":batch option :loader")
            params_count = SeregaUtils::ParamsCount.call(loader, max_count: 3)
            raise SeregaError, params_count_error if params_count > 3
          end

          def params_count_error
            "Invalid :batch option :loader. It can accept maximum 3 parameters (ids, context, plan)"
          end

          def must_be_callable
            "Invalid :batch option :loader. It must be a Symbol, a Proc or respond to :call"
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
serega-0.21.0 lib/serega/plugins/batch/lib/validations/check_batch_opt_loader.rb
serega-0.20.1 lib/serega/plugins/batch/lib/validations/check_batch_opt_loader.rb
serega-0.20.0 lib/serega/plugins/batch/lib/validations/check_batch_opt_loader.rb
serega-0.19.0 lib/serega/plugins/batch/lib/validations/check_batch_opt_loader.rb
serega-0.18.0 lib/serega/plugins/batch/lib/validations/check_batch_opt_loader.rb