module Qyu::Workers::Concerns::PayloadValidator

Qyu::Workers::Concerns::PayloadValidator

Adds ability to workers to perform validations on params for the task to be processed

Usage:

Qyu::Worker.new do

validates :user_id,    presence: true, type: :integer, unless: :no_user
validates :name,       presence: true, type: :string
validates :hotels,     presence: true, type: :array
validates :account_id, absence: true,  if: :customer_id
validates :account_id, presence: true, unless: :customer_id

end

Public Instance Methods

validate_payload!(model) click to toggle source

Validates payload in processing task and raises a Qyu::Errors::PayloadValidationError if any of the conditions do not hold up

@param [Task] task with payload @return [nil] @raise [Qyu::Errors::PayloadValidationError]

# File lib/qyu/workers/concerns/payload_validator.rb, line 43
def validate_payload!(model)
  return unless @_validations
  payload = Qyu::Utils.stringify_hash_keys(model.payload || {})
  validation_errors = {}
  @_validations.each do |attribute, opts|
    # example: attribute :name
    # example opts { presence: true, type: integer }
    next unless if_validation(payload, opts['if'])
    next unless unless_validation(payload, opts['unless'])
    opts.map do |option, value|
      error = run_validation(option, payload[attribute.to_s], value)
      # next if error is nil
      next unless error
      validation_errors["#{attribute}.#{option}"] = error
    end
  end

  if validation_errors.size.positive?
    fail Qyu::Errors::PayloadValidationError, validation_errors
  end
  nil
end
validates(parameter, opts = {}) click to toggle source

Adds a validation option to worker

validates :user_id,    presence: true, type: :integer, unless: :no_user
validates :name,       presence: true, type: :string
validates :account_id, absence: true,  if: :customer_id
validates :account_id, presence: true, unless: :customer_id

@param [Symbol] payload key to validate @param [Hash] options for validation @return [Hash] registereds services

# File lib/qyu/workers/concerns/payload_validator.rb, line 32
def validates(parameter, opts = {})
  @_validations ||= {}
  @_validations[parameter.to_s] = Qyu::Utils.stringify_hash_keys(opts)
end