Class: ActiveModel::Validations::UrlValidator
- Inherits:
-
EachValidator
- Object
- EachValidator
- ActiveModel::Validations::UrlValidator
- Defined in:
- lib/validators/validates_url_format_of.rb
Constant Summary collapse
- TLD_FILE_PATH =
File.('../../../data/tld.txt', __FILE__)
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.tlds ⇒ Object
6 7 8 |
# File 'lib/validators/validates_url_format_of.rb', line 6 def self.tlds @tld ||= File.read(TLD_FILE_PATH).lines.map(&:chomp) end |
Instance Method Details
#url?(url) ⇒ Boolean
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/validators/validates_url_format_of.rb', line 19 def url?(url) uri = URI(url) regex = [:tld] ? Validators::URL_FORMAT_WITHOUT_TLD_VALIDATION : Validators::URL_FORMAT uri.kind_of?(URI::HTTP) && url.match(regex) && valid_tld?(uri.host) rescue URI::InvalidURIError false end |
#valid_tld?(host) ⇒ Boolean
31 32 33 34 35 36 |
# File 'lib/validators/validates_url_format_of.rb', line 31 def valid_tld?(host) return true unless [:tld] tld = host[/\.(.*?)$/, 1].to_s.downcase self.class.tlds.include?(tld) end |
#validate_each(record, attribute, value) ⇒ Object
10 11 12 13 14 15 16 17 |
# File 'lib/validators/validates_url_format_of.rb', line 10 def validate_each(record, attribute, value) return if url?(value.to_s) record.errors.add(attribute, :invalid_url, :message => [:message], :value => value ) end |