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