class BulkValidator attr_accessor :items, :bulk_validations def initialize(items, validations) @items = items @bulk_validations = build_bulk_validations(validations) end def candidates bulk_validations.each do |validation| @items = validation.apply items end items end def invalidate_candidates end private def build_bulk_validations(validations) validations.map do |validation| case validation.validation_type when "presence" then PresenceValidation.new(validation.options) ... else fail("Unknown validation type #{validation.validation_type}") end end end