Skip to content

Instantly share code, notes, and snippets.

@hendricius
Created September 22, 2013 12:12
Show Gist options
  • Save hendricius/6659331 to your computer and use it in GitHub Desktop.
Save hendricius/6659331 to your computer and use it in GitHub Desktop.
class UrlValidator < ActiveModel::EachValidator
# Credits to Lee Machin https://coderwall.com/p/ztig5g
# Place this in lib/validators/url_validator.rb
# class Something < ActiveRecord::Base
# validates :link, url: true
# end
def validate_each(record, attribute, value)
record.errors[attribute] << (options[:message] || I18n.t(:must_be_valid_url)) unless url_valid?(value)
end
def url_valid?(url)
self.class.url_valid?(url)
end
# A URL may be technically well-formed but may
# not actually be valid, so this checks for both.
# Optionall in case you need to access the url validator directly:
# UrlValidator.url_valid?("foo")
# => false
def self.url_valid?(url)
url = URI.parse(url) rescue false
url.kind_of?(URI::HTTP) || url.kind_of?(URI::HTTPS)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment