validate_url 1.0.4 → 1.0.15
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 +5 -5
- data/README.md +40 -3
- data/lib/locale/ar.yml +4 -0
- data/lib/locale/es.yml +4 -0
- data/lib/locale/it.yml +1 -1
- data/lib/locale/ja.yml +1 -1
- data/lib/locale/nl.yml +4 -0
- data/lib/locale/pl.yml +4 -0
- data/lib/locale/pt-PT.yml +4 -0
- data/lib/locale/pt.yml +4 -0
- data/lib/locale/vi.yml +4 -0
- data/lib/validate_url.rb +34 -12
- metadata +39 -19
- /data/lib/{rspec_matcher.rb → validate_url/rspec_matcher.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 58b59a8faf6055485804d8dbc80aa6f70cec016dabf65eb0fa79d0cb9d3c6db5
|
4
|
+
data.tar.gz: b9015820dc18729bab6cbe3e67d982918e7727ad611d7ab916e854dbf39b7a74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a630fa8358388a40491e00d3275fa543076a8d4c00df65d18a1e5d70426e862245b5631125782c72eab76cdbbdcff18f857f5a047e04cb8ec7bac36ccb770983
|
7
|
+
data.tar.gz: '09bd75d874a0087033f3984646b44466ffd275c58b77128dac06b4f8a1fe8bd13ab277a9e1317769a34407174f524380313b462b75f95f9be6a35340f15bf753'
|
data/README.md
CHANGED
@@ -4,11 +4,15 @@ This gem adds the capability of validating URLs to ActiveRecord and ActiveModel.
|
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
Add this to your `Gemfile`:
|
8
|
+
|
9
|
+
```ruby
|
9
10
|
gem "validate_url"
|
11
|
+
```
|
12
|
+
|
13
|
+
Or install it yourself:
|
10
14
|
|
11
|
-
|
15
|
+
```sh
|
12
16
|
sudo gem install validate_url
|
13
17
|
```
|
14
18
|
|
@@ -35,6 +39,9 @@ class Pony < ActiveRecord::Base
|
|
35
39
|
|
36
40
|
# with public suffix database https://publicsuffix.org/
|
37
41
|
validates :homepage, url: { public_suffix: true }
|
42
|
+
|
43
|
+
# with Postgres array of urls, described [here](https://guides.rubyonrails.org/active_record_postgresql.html#array)
|
44
|
+
validates :homepage, url: { accept_array: true }
|
38
45
|
end
|
39
46
|
```
|
40
47
|
|
@@ -51,6 +58,22 @@ class Unicorn
|
|
51
58
|
end
|
52
59
|
```
|
53
60
|
|
61
|
+
### With RSpec
|
62
|
+
|
63
|
+
Require the matcher in `spec_helper.rb` or `rails_helper.rb`:
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
require 'validate_url/rspec_matcher'
|
67
|
+
```
|
68
|
+
|
69
|
+
In your spec:
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
RSpec.describe Unicorn
|
73
|
+
it { is_expected.to validate_url_of(:homepage) }
|
74
|
+
end
|
75
|
+
```
|
76
|
+
|
54
77
|
### I18n
|
55
78
|
|
56
79
|
The default error message `is not a valid URL`.
|
@@ -70,3 +93,17 @@ Validates URL is created and maintained by [PerfectLine](http://www.perfectline.
|
|
70
93
|
|
71
94
|
Validates URL is Copyright © 2010-2014 [PerfectLine](http://www.perfectline.co), LLC. It is free software, and may be
|
72
95
|
redistributed under the terms specified in the LICENSE file.
|
96
|
+
|
97
|
+
## How to push a new version
|
98
|
+
|
99
|
+
```sh
|
100
|
+
rake version:bump:patch
|
101
|
+
rake gemspec
|
102
|
+
```
|
103
|
+
|
104
|
+
Manually update `validate_url.gemspec` to remove incorrect strings.
|
105
|
+
|
106
|
+
```sh
|
107
|
+
gem build validate_url.gemspec
|
108
|
+
gem push validate_url-1.0.8.gem
|
109
|
+
```
|
data/lib/locale/ar.yml
ADDED
data/lib/locale/es.yml
ADDED
data/lib/locale/it.yml
CHANGED
data/lib/locale/ja.yml
CHANGED
data/lib/locale/nl.yml
ADDED
data/lib/locale/pl.yml
ADDED
data/lib/locale/pt.yml
ADDED
data/lib/locale/vi.yml
ADDED
data/lib/validate_url.rb
CHANGED
@@ -13,27 +13,32 @@ module ActiveModel
|
|
13
13
|
options.reverse_merge!(message: :url)
|
14
14
|
options.reverse_merge!(no_local: false)
|
15
15
|
options.reverse_merge!(public_suffix: false)
|
16
|
+
options.reverse_merge!(accept_array: false)
|
16
17
|
|
17
18
|
super(options)
|
18
19
|
end
|
19
20
|
|
20
21
|
def validate_each(record, attribute, value)
|
21
22
|
schemes = [*options.fetch(:schemes)].map(&:to_s)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
if value.respond_to?(:each)
|
24
|
+
# Error out if we're not allowing arrays
|
25
|
+
if !options.include?(:accept_array) || !options.fetch(:accept_array)
|
26
|
+
record.errors.add(attribute, :url, **filtered_options(value))
|
27
|
+
end
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
# We have to manually handle `:allow_nil` and `:allow_blank` since it's not caught by
|
30
|
+
# ActiveRecord's own validators. We do that by just removing all the nil's if we want to
|
31
|
+
# allow them so it's not passed on later.
|
32
|
+
value = value.reject(&:nil?) if options.include?(:allow_nil) && options.fetch(:allow_nil)
|
33
|
+
value = value.reject(&:blank?) if options.include?(:allow_blank) && options.fetch(:allow_blank)
|
30
34
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
record.errors.add(attribute, :url, filtered_options(value))
|
35
|
+
result = value.flat_map { |v| validate_url(record, attribute, v, schemes) }
|
36
|
+
errors = result.reject(&:nil?)
|
37
|
+
|
38
|
+
return errors.any? ? errors.first : true
|
36
39
|
end
|
40
|
+
|
41
|
+
validate_url(record, attribute, value, schemes)
|
37
42
|
end
|
38
43
|
|
39
44
|
protected
|
@@ -43,6 +48,23 @@ module ActiveModel
|
|
43
48
|
filtered[:value] = value
|
44
49
|
filtered
|
45
50
|
end
|
51
|
+
|
52
|
+
def validate_url(record, attribute, value, schemes)
|
53
|
+
uri = URI.parse(value)
|
54
|
+
host = uri && uri.host
|
55
|
+
scheme = uri && uri.scheme
|
56
|
+
|
57
|
+
valid_raw_url = scheme && value =~ /\A#{URI::regexp([scheme])}\z/
|
58
|
+
valid_scheme = host && scheme && schemes.include?(scheme)
|
59
|
+
valid_no_local = !options.fetch(:no_local) || (host && host.include?('.'))
|
60
|
+
valid_suffix = !options.fetch(:public_suffix) || (host && PublicSuffix.valid?(host, :default_rule => nil))
|
61
|
+
|
62
|
+
unless valid_raw_url && valid_scheme && valid_no_local && valid_suffix
|
63
|
+
record.errors.add(attribute, options.fetch(:message), value: value)
|
64
|
+
end
|
65
|
+
rescue URI::InvalidURIError, URI::InvalidComponentError
|
66
|
+
record.errors.add(attribute, :url, **filtered_options(value))
|
67
|
+
end
|
46
68
|
end
|
47
69
|
|
48
70
|
module ClassMethods
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validate_url
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tanel Suurhans
|
8
8
|
- Tarmo Lehtpuu
|
9
9
|
- Vladimir Krylov
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2022-05-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: jeweler
|
@@ -55,47 +55,61 @@ dependencies:
|
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
58
|
+
name: rspec
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
64
|
-
type: :
|
63
|
+
version: '0'
|
64
|
+
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
70
|
+
version: '0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: diff-lcs
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - ">="
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 1.1.2
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
84
|
+
version: 1.1.2
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
86
|
+
name: activemodel
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
89
|
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
92
|
-
type: :
|
91
|
+
version: 3.0.0
|
92
|
+
type: :runtime
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version:
|
98
|
+
version: 3.0.0
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: public_suffix
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
99
113
|
description: Library for validating urls in Rails.
|
100
114
|
email:
|
101
115
|
- tanel.suurhans@perfectline.co
|
@@ -111,24 +125,31 @@ files:
|
|
111
125
|
- README.md
|
112
126
|
- init.rb
|
113
127
|
- install.rb
|
128
|
+
- lib/locale/ar.yml
|
114
129
|
- lib/locale/de.yml
|
115
130
|
- lib/locale/en.yml
|
131
|
+
- lib/locale/es.yml
|
116
132
|
- lib/locale/fr.yml
|
117
133
|
- lib/locale/it.yml
|
118
134
|
- lib/locale/ja.yml
|
119
135
|
- lib/locale/km.yml
|
136
|
+
- lib/locale/nl.yml
|
137
|
+
- lib/locale/pl.yml
|
120
138
|
- lib/locale/pt-BR.yml
|
139
|
+
- lib/locale/pt-PT.yml
|
140
|
+
- lib/locale/pt.yml
|
121
141
|
- lib/locale/ro.yml
|
122
142
|
- lib/locale/ru.yml
|
123
143
|
- lib/locale/tr.yml
|
144
|
+
- lib/locale/vi.yml
|
124
145
|
- lib/locale/zh-CN.yml
|
125
146
|
- lib/locale/zh-TW.yml
|
126
|
-
- lib/rspec_matcher.rb
|
127
147
|
- lib/validate_url.rb
|
148
|
+
- lib/validate_url/rspec_matcher.rb
|
128
149
|
homepage: http://github.com/perfectline/validates_url/tree/master
|
129
150
|
licenses: []
|
130
151
|
metadata: {}
|
131
|
-
post_install_message:
|
152
|
+
post_install_message:
|
132
153
|
rdoc_options: []
|
133
154
|
require_paths:
|
134
155
|
- lib
|
@@ -143,9 +164,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
164
|
- !ruby/object:Gem::Version
|
144
165
|
version: '0'
|
145
166
|
requirements: []
|
146
|
-
|
147
|
-
|
148
|
-
signing_key:
|
167
|
+
rubygems_version: 3.0.8
|
168
|
+
signing_key:
|
149
169
|
specification_version: 4
|
150
170
|
summary: Library for validating urls in Rails.
|
151
171
|
test_files: []
|
File without changes
|