activemodel-url_validator 0.0.2 → 0.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: e56b625caa120974fe1da3bb4127765ee0bdbb78
4
- data.tar.gz: 04be198ffd543a09e07083727f36cb044b927c1f
3
+ metadata.gz: 6bae84fcd1d6d45196a3c26227939face9d9cfe6
4
+ data.tar.gz: 92eb6f02caa3c8a11297a5d2cefa4c5caaa97262
5
5
  SHA512:
6
- metadata.gz: c779f656931620cef240a08614561d369abd842fbab142ff8c8814854dad4f947db59c44961c96f0f53b4683c293a6655c8ab71d75cc9ab3a862d28ba6c1c344
7
- data.tar.gz: 07decff500d457a1bf8d9dd1f06bab66d46192c346a0c8de2e6d4330258b39d3c5a78b864ae33c35375f5ef1676e20b9a7fffc91f0104bc6cadee926a4a0cec5
6
+ metadata.gz: 4166f3b5878a7c02736e8cd776753811a938f883b468715e783167169d31b007f11d621ffdedeac681a0c642db252707faee6156b03ed8b9496bc25d91f84b45
7
+ data.tar.gz: 07e8f27dc5a60b58c37e26e1efeb0fa3c5111302ab612af9e04663c28ee8562b3102c254a93cb9d243baf2394b3bcf606d88cff19502dba0cdca2199f1a86538
data/README.md CHANGED
@@ -28,6 +28,7 @@ Name | Value | Default | Desc.
28
28
  ----|----|----|----
29
29
  `scheme` | Array of String | nil | Specify allowed scheme types.
30
30
  `allow_no_scheme` | Boolean | false | Whether scheme less URI is allowed.
31
+ `allow_no_host` | Boolean | false | Whether host less URI is allowed.
31
32
 
32
33
  ```rb
33
34
  validates :my_url_attribute, url: { scheme: ['https'] }
data/lib/url_validator.rb CHANGED
@@ -3,17 +3,38 @@ class UrlValidator < ActiveModel::EachValidator
3
3
  def valid?(value, options = {})
4
4
  options = default_options.merge(options)
5
5
  uri = URI.parse(value)
6
- if uri.scheme.nil?
7
- !!options[:allow_no_scheme]
8
- else
9
- options[:scheme] ? options[:scheme].include?(uri.scheme) : true
6
+
7
+ [:scheme_appearance, :host_appearance, :scheme_type].all? do |method|
8
+ send("validate_#{method}", uri, options)
10
9
  end
11
10
  rescue URI::Error
12
11
  false
13
12
  end
14
13
 
15
14
  def default_options
16
- { scheme: nil, allow_no_scheme: false }
15
+ { scheme: nil, allow_no_scheme: false, allow_no_host: false }
16
+ end
17
+
18
+ private
19
+
20
+ def validate_scheme_appearance(uri, options)
21
+ uri.scheme.nil? ? options[:allow_no_scheme] : true
22
+ end
23
+
24
+ def validate_host_appearance(uri, options)
25
+ uri.host.nil? ? options[:allow_no_host] : true
26
+ end
27
+
28
+ def validate_scheme_type(uri, options)
29
+ if options[:scheme]
30
+ if uri.scheme.nil? && options[:allow_no_scheme]
31
+ true
32
+ else
33
+ options[:scheme].include?(uri.scheme)
34
+ end
35
+ else
36
+ true
37
+ end
17
38
  end
18
39
  end
19
40
 
@@ -1,3 +1,3 @@
1
1
  class UrlValidator
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -14,6 +14,12 @@ shared_examples_for 'scheme less value is given', given: :scheme_less do
14
14
  end
15
15
  end
16
16
 
17
+ shared_examples_for 'host less value is given', given: :host_less do
18
+ let(:value) do
19
+ 'http:///host/less'
20
+ end
21
+ end
22
+
17
23
  [:http, :https].each do |scheme|
18
24
  shared_examples_for "#{scheme} URI is given", given: scheme do
19
25
  let(:value) do
@@ -30,6 +36,12 @@ shared_examples_for 'allow_no_scheme is true', allow_no_scheme: true do
30
36
  end
31
37
  end
32
38
 
39
+ shared_examples_for 'allow_no_host is true', allow_no_host: true do
40
+ let(:allow_no_host) do
41
+ true
42
+ end
43
+ end
44
+
33
45
  shared_examples_for 'scheme includes http', scheme: :http do
34
46
  let(:scheme) do
35
47
  ['http']
@@ -72,6 +84,14 @@ describe UrlValidator do
72
84
  end
73
85
  end
74
86
 
87
+ context 'when a host less URI is given', given: :host_less do
88
+ it { should be_falsey }
89
+
90
+ context 'and host less URI is allowed', allow_no_host: true do
91
+ it { should be_truthy }
92
+ end
93
+ end
94
+
75
95
  context 'when a HTTP URI is given', given: :http do
76
96
  it { should be_truthy }
77
97
 
@@ -109,6 +129,10 @@ describe UrlValidator do
109
129
  it { should be_invalid }
110
130
  end
111
131
 
132
+ context 'and a valid host less value is given', given: :host_less do
133
+ it { should be_invalid }
134
+ end
135
+
112
136
  context 'and a valid http value is given', given: :http do
113
137
  it { should be_valid }
114
138
  end
@@ -130,6 +154,18 @@ describe UrlValidator do
130
154
  end
131
155
  end
132
156
 
157
+ context 'when allow_no_host is true' do
158
+ let(:model_class) do
159
+ Class.new(TestModel) do
160
+ validates :attr, url: { allow_no_host: true }
161
+ end
162
+ end
163
+
164
+ context 'and a valid host less value is given', given: :host_less do
165
+ it { should be_valid }
166
+ end
167
+ end
168
+
133
169
  context 'when http scheme is allowed', scheme: :http do
134
170
  let(:model_class) do
135
171
  Class.new(TestModel) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemodel-url_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuku Takahashi