Sha256: 08df434a8846cd29c65440396b3f49467ba5e57288664985805b24b2acd1c753

Contents?: true

Size: 1.83 KB

Versions: 3

Compression:

Stored size: 1.83 KB

Contents

# frozen string literal: true

require 'dry-struct'
require 'game_validator/validator/validate_to_action'
require 'spy_alley_application/types/array_of_equipment'
require 'spy_alley_application/validator/confiscate_materials'
require 'spy_alley_application/validator/confiscate_materials/full_validator'
require 'spy_alley_application/validator/confiscate_materials/validate_target_player_id'

module SpyAlleyApplication
  module Models
    module Validator
      class ConfiscatingMaterials < Dry::Struct
        attribute :name, ::Types::Value('confiscate_materials')
        attribute :wrap_result, ::Types::Callable
        attribute :target_player, ::Types::Array do
          attribute :target_player_id, ::Types::Coercible::String
          attribute :targetable_equipment, SpyAlleyApplication::Types::ArrayOfEquipment
        end

        def build(options={})
          @validate_to_action ||= GameValidator::Validator::ValidateToAction::new(
            validate: validate,
            wrap: wrap_result)
          @validate_to_action
        end

        private
        def validate
          validate_target_player_id =
            SpyAlleyApplication::Validator::ConfiscateMaterials::ValidatetargetPlayerId::new(
              target_player_id_list: target_player.map(&:target_player_id))
          full_validator_for = target_player.map do |p|
            [ 
              p.target_player_id,
              SpyAlleyApplication::Validator::ConfiscateMaterials::FullValidator::new(
                target_player_id: p.target_player_id,
                targetable_equipment: p.targetable_equipment)
            ]
          end.to_h

          SpyAlleyApplication::Validator::ConfiscateMaterials::new(
            validate_target_player_id: validate_target_player_id,
            full_validator_for: full_validator_for)
        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/models/validator/confiscating_materials.rb
spy_alley_application-0.3.1 lib/spy_alley_application/models/validator/confiscating_materials.rb
spy_alley_application-0.3.0 lib/spy_alley_application/models/validator/confiscating_materials.rb