validate_url 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a9370dd3549d270bff452c951a9de3ae4d0288b
4
- data.tar.gz: 342adc16d0211b47d822d590f0395aa53ea74b8a
3
+ metadata.gz: 5f0f637da31e1ad9ccb51ac9dee234805c35ccbc
4
+ data.tar.gz: d2222f7e3844215454a43626c1d283a62a86d13a
5
5
  SHA512:
6
- metadata.gz: ce037a673542945b111562d32cb1633dfcc955fa5a256ad16823b2094da17d8715fa28b9a4bf252ceb0809f52d88e797c3534a7f0f88d5a0c30e3024b8da3538
7
- data.tar.gz: 702b42045a2f850bcc2f5595299177ce97171caa05ca0a4732d78f7ec5b9c81c83b84c700e0a2605c870ff175bbf60232871e04b3b3c7db2ec6735089fd7cebc
6
+ metadata.gz: 8e39fcb677c0f7f96083bc4aaa37d5ca17fc9d0b375ac7f0d1ffb57d81ab3c827d5c4d4f4e979f4924c896a9f51a58860aa8c9eb82ac96843f5a0a4e23d4a31d
7
+ data.tar.gz: 300b61a831028476ccf33182a82c50ebba2cca03d1bc75e9710d7b316fae1ca0d239a3c8e0a9d86396e254fc48ebc4bf71b1a86bd56106af6e6eb8c9608b9a22
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Validates URL
2
2
 
3
- This gem adds the capability of validating URLs to ActiveRecord and ActiveModel (Rails 3).
3
+ This gem adds the capability of validating URLs to ActiveRecord and ActiveModel.
4
4
 
5
5
  ## Installation
6
-
7
- ```
6
+
7
+ ```
8
8
  # add this to your Gemfile
9
9
  gem "validate_url"
10
10
 
@@ -16,19 +16,25 @@ sudo gem install validate_url
16
16
 
17
17
  ### With ActiveRecord
18
18
 
19
- ```ruby
19
+ ```ruby
20
20
  class Pony < ActiveRecord::Base
21
21
  # standard validation
22
- validates :homepage, :url => true
22
+ validates :homepage, url: true
23
23
 
24
24
  # with allow_nil
25
- validates :homepage, :url => {:allow_nil => true}
25
+ validates :homepage, url: { allow_nil: true }
26
26
 
27
27
  # with allow_blank
28
- validates :homepage, :url => {:allow_blank => true}
28
+ validates :homepage, url: { allow_blank: true }
29
29
 
30
30
  # without local hostnames
31
- validates :homepage, :url => {:no_local => true}
31
+ validates :homepage, url: { no_local: true }
32
+
33
+ # with custom schemes
34
+ validates :homepage, url: { schemes: ['https'] }
35
+
36
+ # with public suffix database https://publicsuffix.org/
37
+ validates :homepage, url: { public_suffix: true }
32
38
  end
33
39
  ```
34
40
 
@@ -41,14 +47,14 @@ class Unicorn
41
47
  attr_accessor :homepage
42
48
 
43
49
  # with legacy syntax (the syntax above works also)
44
- validates_url :homepage, :allow_blank => true
50
+ validates_url :homepage, allow_blank: true
45
51
  end
46
52
  ```
47
53
 
48
54
  ### I18n
49
55
 
50
- The default error message `is not valid url`.
51
- You can pass the `:message => "my custom error"` option to your validation to define your own, custom message.
56
+ The default error message `is not a valid URL`.
57
+ You can pass the `message: "my custom error"` option to your validation to define your own, custom message.
52
58
 
53
59
 
54
60
  ## Contributing
@@ -63,4 +69,4 @@ Validates URL is created and maintained by [PerfectLine](http://www.perfectline.
63
69
  ## License
64
70
 
65
71
  Validates URL is Copyright © 2010-2014 [PerfectLine](http://www.perfectline.co), LLC. It is free software, and may be
66
- redistributed under the terms specified in the LICENSE file.
72
+ redistributed under the terms specified in the LICENSE file.
@@ -0,0 +1,4 @@
1
+ fr:
2
+ errors:
3
+ messages:
4
+ url: "n'est pas une URL valide"
@@ -0,0 +1,4 @@
1
+ km:
2
+ errors:
3
+ messages:
4
+ url: "មិនត្រឹមត្រូវ"
@@ -0,0 +1,4 @@
1
+ ro:
2
+ errors:
3
+ messages:
4
+ url: nu este un URL valid
@@ -0,0 +1,4 @@
1
+ ru:
2
+ errors:
3
+ messages:
4
+ url: некорректный URL
@@ -0,0 +1,4 @@
1
+ zh-CN:
2
+ errors:
3
+ messages:
4
+ url: '网址格式不正确'
@@ -0,0 +1,4 @@
1
+ zh-TW:
2
+ errors:
3
+ messages:
4
+ url: '網址格式不正確'
@@ -0,0 +1,12 @@
1
+ RSpec::Matchers.define :validate_url_of do |attribute|
2
+ match do
3
+ actual = subject.is_a?(Class) ? subject.new : subject
4
+ actual.send(:"#{attribute}=", "htp://invalidurl")
5
+ expect(actual).to be_invalid
6
+ @expected_message ||= I18n.t("errors.messages.url")
7
+ expect(actual.errors.messages[attribute.to_sym]).to include(@expected_message)
8
+ end
9
+ chain :with_message do |message|
10
+ @expected_message = message
11
+ end
12
+ end
@@ -1,18 +1,18 @@
1
- require 'addressable/uri'
2
1
  require 'active_model'
3
2
  require 'active_support/i18n'
4
- I18n.load_path << File.dirname(__FILE__) + '/locale/en.yml'
5
- I18n.load_path << File.dirname(__FILE__) + '/locale/tr.yml'
6
- I18n.load_path << File.dirname(__FILE__) + '/locale/ja.yml'
3
+ require 'public_suffix'
4
+ I18n.load_path += Dir[File.dirname(__FILE__) + "/locale/*.yml"]
7
5
 
8
6
  module ActiveModel
9
7
  module Validations
10
8
  class UrlValidator < ActiveModel::EachValidator
9
+ RESERVED_OPTIONS = [:schemes, :no_local]
11
10
 
12
11
  def initialize(options)
13
- options.reverse_merge!(:schemes => %w(http https))
14
- options.reverse_merge!(:message => :url)
15
- options.reverse_merge!(:no_local => false)
12
+ options.reverse_merge!(schemes: %w(http https))
13
+ options.reverse_merge!(message: :url)
14
+ options.reverse_merge!(no_local: false)
15
+ options.reverse_merge!(public_suffix: false)
16
16
 
17
17
  super(options)
18
18
  end
@@ -20,14 +20,29 @@ module ActiveModel
20
20
  def validate_each(record, attribute, value)
21
21
  schemes = [*options.fetch(:schemes)].map(&:to_s)
22
22
  begin
23
- uri = Addressable::URI.parse(value)
24
- unless uri && uri.host && schemes.include?(uri.scheme) && (!options.fetch(:no_local) || uri.host.include?('.'))
25
- record.errors.add(attribute, options.fetch(:message), :value => value)
23
+ uri = URI.parse(value)
24
+ host = uri && uri.host
25
+ scheme = uri && uri.scheme
26
+
27
+ valid_suffix = !options.fetch(:public_suffix) || (host && PublicSuffix.valid?(host, :default_rule => nil))
28
+ valid_no_local = !options.fetch(:no_local) || (host && host.include?('.'))
29
+ valid_scheme = host && scheme && schemes.include?(scheme)
30
+
31
+ unless valid_scheme && valid_no_local && valid_suffix
32
+ record.errors.add(attribute, options.fetch(:message), value: value)
26
33
  end
27
- rescue Addressable::URI::InvalidURIError
28
- record.errors.add(attribute, options.fetch(:message), :value => value)
34
+ rescue URI::InvalidURIError
35
+ record.errors.add(attribute, :url, filtered_options(value))
29
36
  end
30
37
  end
38
+
39
+ protected
40
+
41
+ def filtered_options(value)
42
+ filtered = options.except(*RESERVED_OPTIONS)
43
+ filtered[:value] = value
44
+ filtered
45
+ end
31
46
  end
32
47
 
33
48
  module ClassMethods
@@ -36,8 +51,8 @@ module ActiveModel
36
51
  # class Unicorn
37
52
  # include ActiveModel::Validations
38
53
  # attr_accessor :homepage, :ftpsite
39
- # validates_url :homepage, :allow_blank => true
40
- # validates_url :ftpsite, :schemes => ['ftp']
54
+ # validates_url :homepage, allow_blank: true
55
+ # validates_url :ftpsite, schemes: ['ftp']
41
56
  # end
42
57
  # Configuration options:
43
58
  # * <tt>:message</tt> - A custom error message (default is: "is not a valid URL").
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validate_url
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tanel Suurhans
@@ -10,30 +10,44 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-07-21 00:00:00.000000000 Z
13
+ date: 2019-03-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: activemodel
16
+ name: validate_url
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 3.0.0
21
+ version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: 3.0.0
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: diff-lcs
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 1.1.2
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.1.2
29
43
  - !ruby/object:Gem::Dependency
30
- name: addressable
44
+ name: rake
31
45
  requirement: !ruby/object:Gem::Requirement
32
46
  requirements:
33
47
  - - ">="
34
48
  - !ruby/object:Gem::Version
35
49
  version: '0'
36
- type: :runtime
50
+ type: :development
37
51
  prerelease: false
38
52
  version_requirements: !ruby/object:Gem::Requirement
39
53
  requirements:
@@ -41,7 +55,7 @@ dependencies:
41
55
  - !ruby/object:Gem::Version
42
56
  version: '0'
43
57
  - !ruby/object:Gem::Dependency
44
- name: rspec
58
+ name: jeweler
45
59
  requirement: !ruby/object:Gem::Requirement
46
60
  requirements:
47
61
  - - ">="
@@ -55,19 +69,61 @@ dependencies:
55
69
  - !ruby/object:Gem::Version
56
70
  version: '0'
57
71
  - !ruby/object:Gem::Dependency
58
- name: diff-lcs
72
+ name: sqlite3
59
73
  requirement: !ruby/object:Gem::Requirement
60
74
  requirements:
61
75
  - - ">="
62
76
  - !ruby/object:Gem::Version
63
- version: 1.1.2
77
+ version: '0'
64
78
  type: :development
65
79
  prerelease: false
66
80
  version_requirements: !ruby/object:Gem::Requirement
67
81
  requirements:
68
82
  - - ">="
69
83
  - !ruby/object:Gem::Version
70
- version: 1.1.2
84
+ version: '0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: activerecord
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ - !ruby/object:Gem::Dependency
100
+ name: activemodel
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: 3.0.0
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 3.0.0
113
+ - !ruby/object:Gem::Dependency
114
+ name: rspec
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
71
127
  description: Library for validating urls in Rails.
72
128
  email:
73
129
  - tanel.suurhans@perfectline.co
@@ -85,10 +141,17 @@ files:
85
141
  - install.rb
86
142
  - lib/locale/de.yml
87
143
  - lib/locale/en.yml
144
+ - lib/locale/fr.yml
88
145
  - lib/locale/it.yml
89
146
  - lib/locale/ja.yml
147
+ - lib/locale/km.yml
90
148
  - lib/locale/pt-BR.yml
149
+ - lib/locale/ro.yml
150
+ - lib/locale/ru.yml
91
151
  - lib/locale/tr.yml
152
+ - lib/locale/zh-CN.yml
153
+ - lib/locale/zh-TW.yml
154
+ - lib/rspec_matcher.rb
92
155
  - lib/validate_url.rb
93
156
  homepage: http://github.com/perfectline/validates_url/tree/master
94
157
  licenses: []
@@ -109,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
172
  version: '0'
110
173
  requirements: []
111
174
  rubyforge_project:
112
- rubygems_version: 2.4.5
175
+ rubygems_version: 2.6.14
113
176
  signing_key:
114
177
  specification_version: 4
115
178
  summary: Library for validating urls in Rails.