TuShare lets people give away things they no longer need. It turns out that some people think that putting their headings in ALLCAPS will get more attention... but we think it just annoys people (nobody likes to BE YELLED AT!). Here's a quick snippet that lets you validate that your users aren't YELLING AT YOU! in any given field.
1) create a custom validator in app/validators/not_allcaps_validator.rb with the following code:
# we don't want our users YELLING AT US! class NotAllcapsValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) if value.present? && (value.upcase == value) record.errors[attribute] << (options[:message] || ""is in ALLCAPS. Please don't YELL AT US (we're sensitive types). Instead, just use normal sentence case. I promise we'll still hear you from over here. :)") end end end
2) use it in your model like this:
validate :name, :description, :not_allcaps => true
3) Add a custom matcher for rspec:
# validates that this field has the "not_allcaps" validator RSpec::Matchers.define :validate_not_allcaps do |attribute| match_for_should do match do |model| model.send("#{attribute}=", "AN ALLCAPS VALUE") !model.valid? && model.errors.has_key?(attribute) end failure_message_for_should do |model| "#{model.class} should validate that #{attribute.inspect} cannot accept ALLCAPS VALUES" end failure_message_for_should_not do |model| "#{model.class} should validate that #{attribute.inspect} can accept ALLCAPS VALUES" end end end
4) test each field in your model specs with:
it { should validate_not_allcaps(:name) } it { should validate_not_allcaps(:description) }
No comments:
Post a Comment