HasUrl

Adds validations on URL attributes for ActiveRecord models. URL scheme will be checked and added before updating the database if necessary. A raw_#attribute method will also be added to display the url without HTTP(S) scheme or trailing slash.

Usage

In your AR model: has_url :attribute, options

Options :

  • valid_schemes : Array of schemes or single scheme accepted for the attribute. Default ['http', 'https']
  • default_scheme : Scheme appended to the attribute if none found (supply the scheme string without '://'). Default 'http'
  • message : Provide a error string or symbol (which will be translated, see ActiveRecord::Errors#generate_message). Default :invalid

Example

    class Person < ActiveRecord::Base
      has_url :blog_link
    end

    person.blog_link = 'example.com'
    person.save
    person.blog_link #=> 'http://example.com/'
    person.raw_blog_link #=> 'example.com'

    class Person < ActiveRecord::Base
      has_url [:blog_link, :website_url], :default_scheme => 'https', :valid_schemes => ['http', 'https', 'ftp']
    end

Requirements

  • Addressable for URI parsing

TODO

  • Refactor using ActiveModel::Validator
  • More tests
  • Improve the raw_ method stripping, and have it accept an option to specify which schemes to strip (schemes array or boolean to strip all valid schemes)
  • Add a shoulda macro (should_have_url)
  • Check existence of the given attributes ?
  • Optionally test the url validity with an HTTP request ?

This plugin was inspired by the url_validation and validates_url_of plugins.

Copyright (c) 2012 Pickabee. Released under the MIT licence, see LICENSE for details.