Module: ValidatesUrlFormatOf

Defined in:
lib/validates_url_format_of.rb

Constant Summary collapse

IPv4_PART =

0-255

/\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/
REGEXP =
%r{
  \A
  https?://                                        # http:// or https://
  ([^\s:@]+:[^\s:@]*@)?                            # optional username:pw@
  ( (xn--)?[a-z0-9]+([-.][a-z0-9]+)*\.[a-z]{2,6}\.? |  # domain (including Punycode/IDN)...
      #{IPv4_PART}(\.#{IPv4_PART}){3} )            # or IPv4
  (:\d{1,5})?                                      # optional port
  ([/?]\S*)?                                       # optional /whatever or ?whatever
  \Z
}iux
DEFAULT_MESSAGE =
'does not appear to be a valid URL'
DEFAULT_MESSAGE_URL =
'does not appear to be valid'

Instance Method Summary collapse

Instance Method Details

#validates_url_format_of(*attr_names) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/validates_url_format_of.rb', line 19

def validates_url_format_of(*attr_names)
  options = { :allow_nil => false,
              :allow_blank => false,
              :with => REGEXP }
  options = options.merge(attr_names.pop) if attr_names.last.is_a?(Hash)

  attr_names.each do |attr_name|
    message = attr_name.to_s.match(/(_|\b)URL(_|\b)/i) ? DEFAULT_MESSAGE_URL : DEFAULT_MESSAGE
    validates_format_of(attr_name, { :message => message }.merge(options))
  end
end