class AWS::Record::CountValidator

@private

Constants

ACCEPTED_OPTIONS

Public Instance Methods

setup(record_class) click to toggle source
# File lib/aws/record/validators/count.rb, line 28
def setup record_class
  ensure_at_least_one(:within, :exactly, :minimum, :maximum)
  ensure_exclusive(:within, :exactly, [:minimum, :maximum])
  ensure_type(Range, :within)
  ensure_type(Integer, :exactly, :minimum, :maximum)
  ensure_type(String, :too_many, :too_few, :wrong_number)
end
validate_attribute(record, attribute_name, value) click to toggle source
# File lib/aws/record/validators/count.rb, line 36
def validate_attribute record, attribute_name, value

  count = case value
  when nil then 0
  when String then 1
  when Enumerable then value.count
  else 1
  end

  if exact = options[:exactly]
    unless count == exact
      record.errors.add(attribute_name, wrong_number(exact, count))
    end
  end

  if within = options[:within]
    if count < within.first
      record.errors.add(attribute_name, too_few(within.first, count))
    end
    if count > within.last
      record.errors.add(attribute_name, too_many(within.last, count))
    end
  end

  if min = options[:minimum]
    if count < min
      record.errors.add(attribute_name, too_few(min, count))
    end
  end

  if max = options[:maximum]
    if count > max
      record.errors.add(attribute_name, too_many(max, count))
    end
  end

end

Protected Instance Methods

interpolate(message_with_placeholders, values) click to toggle source
# File lib/aws/record/validators/count.rb, line 97
def interpolate message_with_placeholders, values
  msg = message_with_placeholders.dup 
  values.each_pair do |key,value|
    msg.gsub!(%r%\{#{key}\}/, value.to_s)
  end
  msg
end
too_few(min, got) click to toggle source

@private

# File lib/aws/record/validators/count.rb, line 84
def too_few min, got
  msg = options[:too_few] || "has too few values (minimum is %{minimum})"
  interpolate(msg, :minimum => min, :count => got)
end
too_many(max, got) click to toggle source

@private

# File lib/aws/record/validators/count.rb, line 91
def too_many max, got
  msg = options[:too_many] || "has too many values (maximum is %{maximum})"
  interpolate(msg, :maximum => max, :count => got)
end
wrong_number(exactly, got) click to toggle source

@private

# File lib/aws/record/validators/count.rb, line 76
def wrong_number exactly, got
  msg = options[:wrong_number] || 
    "has the wrong number of values (should have %{exactly})"
  interpolate(msg, :exactly => exactly, :count => got)
end