Sha256: 44a55434d764d4052e2b962b6b484c05aa386205531bd416c122cb6daa7be023

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

# frozen string literal: true

require 'dry-validation'
require 'spy_alley_application/types/array_of_equipment'
require 'spy_alley_application/types/coercible_integer_one_to_six'

module SpyAlleyApplication
  module Validator
    class BuyEquipment < Dry::Validation::Contract
      t = SpyAlleyApplication::Types
      @@equipment_regex =
        /\A(#{t::Nationality.values.join('|')}) (#{t::EquipmentType.values.join('|')})\z/

      option :options, type: SpyAlleyApplication::Types::ArrayOfEquipment
      option :limit, type: SpyAlleyApplication::Types::CoercibleIntegerOneToSix

      params do
        required(:equipment_to_buy)
          .filled(::Types::Array::of(::Types::String.constrained(format: @@equipment_regex)))
      end

      rule(:equipment_to_buy) do
        opts = options.map(&:to_s)
        if !values[:equipment_to_buy].all?{|e| opts.include?(e)}
          key.failure({text: "non allowable equipment is included", status: 422})
        end

        if !values[:equipment_to_buy].uniq.size.eql?(values[:equipment_to_buy].size)
          key.failure({text: 'all equipment bought must be distinct', status: 400})
        end

        if values[:equipment_to_buy].size > limit
          key.failure({text: "buying too many items, limit is #{limit}", status: 400})
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
spy_alley_application-0.3.2 lib/spy_alley_application/validator/buy_equipment.rb
spy_alley_application-0.3.1 lib/spy_alley_application/validator/buy_equipment.rb
spy_alley_application-0.3.0 lib/spy_alley_application/validator/buy_equipment.rb