validates_host 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +53 -0
- data/.travis.yml +26 -17
- data/Gemfile +3 -1
- data/README.md +1 -1
- data/Rakefile +9 -4
- data/lib/validates_host.rb +3 -1
- data/lib/validates_host/domain_name.rb +5 -2
- data/lib/validates_host/domain_name_validator.rb +3 -1
- data/lib/validates_host/host_name.rb +4 -1
- data/lib/validates_host/host_name_validator.rb +3 -1
- data/lib/validates_host/ip.rb +10 -5
- data/lib/validates_host/ip_validator.rb +3 -1
- data/lib/validates_host/require_a_valid_domain_name_matcher.rb +7 -5
- data/lib/validates_host/require_a_valid_host_name_matcher.rb +7 -5
- data/lib/validates_host/require_a_valid_ip_matcher.rb +7 -5
- data/lib/validates_host/require_a_valid_subnet_matcher.rb +7 -5
- data/lib/validates_host/subnet.rb +5 -2
- data/lib/validates_host/subnet_validator.rb +3 -1
- data/lib/validates_host/version.rb +4 -2
- data/spec/fake_app/server.rb +6 -4
- data/spec/fake_app/subnet.rb +4 -8
- data/spec/shoulda/matchers/active_model/require_a_valid_domain_name_matcher_spec.rb +23 -0
- data/spec/shoulda/matchers/active_model/require_a_valid_host_name_matcher_spec.rb +23 -0
- data/spec/shoulda/matchers/active_model/require_a_valid_ip_matcher_spec.rb +23 -0
- data/spec/shoulda/matchers/active_model/require_a_valid_subnet_matcher_spec.rb +23 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/validates_host/domain_name_validator_spec.rb +21 -18
- data/spec/validates_host/host_name_validator_spec.rb +21 -18
- data/spec/validates_host/ip_validator_spec.rb +37 -19
- data/spec/validates_host/subnet_validator_spec.rb +21 -18
- data/validates_host.gemspec +13 -10
- metadata +42 -15
- data/.ruby-version +0 -1
- data/spec/validates_host/require_a_valid_domain_name_matcher_spec.rb +0 -23
- data/spec/validates_host/require_a_valid_host_name_matcher_spec.rb +0 -23
- data/spec/validates_host/require_a_valid_ip_matcher_spec.rb +0 -23
- data/spec/validates_host/require_a_valid_subnet_matcher_spec.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f5b11543c72bb9ea5223f7f216d24f79606ca13e2f9d97967718132ef9589158
|
4
|
+
data.tar.gz: 3338ae72f989b7fa89cc546918519b69cd2000ef0c081a14afe465720ce0ae4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4146e5334ec9aa078d6f715f225296e73625a10c3508bfa67bbaca3a85092326049873ae7cf8a7d0a5cec4bbbdd5a04c262bc1d7b70e6c100b8101d0263e755
|
7
|
+
data.tar.gz: 8d122306cf4753d4e077a0b76c92d5f8da7c9623f17cf1ff3c5f40368c42794f3da1ccb02e2cb66d68e923cd767e367fcfbfc63585bf5082780a7f97454b1530
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
|
3
|
+
Layout/EmptyLinesAroundAttributeAccessor:
|
4
|
+
Enabled: true
|
5
|
+
|
6
|
+
Layout/LineLength:
|
7
|
+
Max: 150
|
8
|
+
|
9
|
+
Layout/SpaceAroundMethodCallOperator:
|
10
|
+
Enabled: true
|
11
|
+
|
12
|
+
Lint/DeprecatedOpenSSLConstant:
|
13
|
+
Enabled: true
|
14
|
+
|
15
|
+
Lint/MixedRegexpCaptureTypes:
|
16
|
+
Enabled: true
|
17
|
+
|
18
|
+
Lint/RaiseException:
|
19
|
+
Enabled: true
|
20
|
+
|
21
|
+
Lint/StructNewOverride:
|
22
|
+
Enabled: true
|
23
|
+
|
24
|
+
Metrics/BlockLength:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
Style/Documentation:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
Style/ExponentialNotation:
|
31
|
+
Enabled: true
|
32
|
+
|
33
|
+
Style/HashEachMethods:
|
34
|
+
Enabled: true
|
35
|
+
|
36
|
+
Style/HashTransformKeys:
|
37
|
+
Enabled: true
|
38
|
+
|
39
|
+
Style/HashTransformValues:
|
40
|
+
Enabled: true
|
41
|
+
|
42
|
+
Style/MixinUsage:
|
43
|
+
Exclude:
|
44
|
+
- 'spec/spec_helper.rb'
|
45
|
+
|
46
|
+
Style/RedundantRegexpCharacterClass:
|
47
|
+
Enabled: true
|
48
|
+
|
49
|
+
Style/RedundantRegexpEscape:
|
50
|
+
Enabled: true
|
51
|
+
|
52
|
+
Style/SlicingWithRange:
|
53
|
+
Enabled: true
|
data/.travis.yml
CHANGED
@@ -1,22 +1,31 @@
|
|
1
|
-
rvm:
|
2
|
-
- 2.0
|
3
|
-
- 2.1
|
4
|
-
- 2.2
|
5
|
-
- 2.3
|
6
|
-
- 2.4
|
7
|
-
gemfile:
|
8
|
-
- gemfiles/Gemfile.rails3
|
9
|
-
- gemfiles/Gemfile.rails4
|
10
|
-
- gemfiles/Gemfile.rails5
|
11
1
|
matrix:
|
12
|
-
|
13
|
-
- rvm: 2.
|
2
|
+
include:
|
3
|
+
- rvm: 2.0
|
14
4
|
gemfile: gemfiles/Gemfile.rails3
|
15
|
-
- rvm: 2.
|
5
|
+
- rvm: 2.0
|
6
|
+
gemfile: gemfiles/Gemfile.rails4
|
7
|
+
- rvm: 2.1
|
16
8
|
gemfile: gemfiles/Gemfile.rails3
|
9
|
+
- rvm: 2.1
|
10
|
+
gemfile: gemfiles/Gemfile.rails4
|
11
|
+
- rvm: 2.2
|
12
|
+
gemfile: gemfiles/Gemfile.rails4
|
13
|
+
- rvm: 2.2
|
14
|
+
gemfile: gemfiles/Gemfile.rails5
|
15
|
+
- rvm: 2.3
|
16
|
+
gemfile: gemfiles/Gemfile.rails4
|
17
|
+
- rvm: 2.3
|
18
|
+
gemfile: gemfiles/Gemfile.rails5
|
19
|
+
- rvm: 2.4
|
20
|
+
gemfile: gemfiles/Gemfile.rails4
|
17
21
|
- rvm: 2.4
|
18
|
-
gemfile: gemfiles/Gemfile.rails3
|
19
|
-
- rvm: 2.0
|
20
22
|
gemfile: gemfiles/Gemfile.rails5
|
21
|
-
- rvm: 2.
|
22
|
-
gemfile: gemfiles/Gemfile.
|
23
|
+
- rvm: 2.5
|
24
|
+
gemfile: gemfiles/Gemfile.rails4
|
25
|
+
- rvm: 2.5
|
26
|
+
gemfile: gemfiles/Gemfile.rails5
|
27
|
+
- rvm: 2.6
|
28
|
+
gemfile: gemfiles/Gemfile.rails4
|
29
|
+
- rvm: 2.6
|
30
|
+
gemfile: gemfiles/Gemfile.rails5
|
31
|
+
script: rake complete
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# ValidatesHost
|
2
2
|
|
3
|
-
[![Gem Version](https://badge.fury.io/rb/validates_host.png)](http://badge.fury.io/rb/validates_host) [![Build Status](https://secure.travis-ci.org/plribeiro3000/validates_host.png?branch=master)](http://travis-ci.org/plribeiro3000/validates_host) [![
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/validates_host.png)](http://badge.fury.io/rb/validates_host) [![Build Status](https://secure.travis-ci.org/plribeiro3000/validates_host.png?branch=master)](http://travis-ci.org/plribeiro3000/validates_host) [![Coverage Status](https://coveralls.io/repos/plribeiro3000/validates_host/badge.png?branch=master)](https://coveralls.io/r/plribeiro3000/validates_host) [![Code Climate](https://codeclimate.com/github/plribeiro3000/validates_host.png)](https://codeclimate.com/github/plribeiro3000/validates_host)
|
4
4
|
|
5
5
|
Validates host attributes and test it in a simple way
|
6
6
|
|
data/Rakefile
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'rubocop/rake_task'
|
3
6
|
|
4
7
|
RSpec::Core::RakeTask.new
|
8
|
+
RuboCop::RakeTask.new
|
5
9
|
|
6
|
-
desc
|
7
|
-
task :
|
10
|
+
desc 'Default Task'
|
11
|
+
task default: [:spec]
|
12
|
+
task complete: %i[spec rubocop]
|
data/lib/validates_host.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/core_ext/array/wrap'
|
2
4
|
require 'validates_host/host_name_validator'
|
3
5
|
require 'validates_host/domain_name_validator'
|
@@ -16,4 +18,4 @@ module ValidatesHost
|
|
16
18
|
autoload :Ip, 'validates_host/ip'
|
17
19
|
autoload :HostName, 'validates_host/host_name'
|
18
20
|
autoload :DomainName, 'validates_host/domain_name'
|
19
|
-
end
|
21
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ValidatesHost
|
2
4
|
class DomainName
|
3
5
|
def initialize(domain_name)
|
@@ -6,7 +8,8 @@ module ValidatesHost
|
|
6
8
|
|
7
9
|
def valid?
|
8
10
|
return true if @domain_name.blank?
|
9
|
-
|
11
|
+
|
12
|
+
@domain_name =~ %r{^[a-z0-9]+([\-.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(/.*)?$}
|
10
13
|
end
|
11
14
|
end
|
12
|
-
end
|
15
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ValidatesHost
|
2
4
|
class HostName
|
3
5
|
def initialize(host_name)
|
@@ -6,7 +8,8 @@ module ValidatesHost
|
|
6
8
|
|
7
9
|
def valid?
|
8
10
|
return true if @host_name.blank?
|
11
|
+
|
9
12
|
@host_name =~ /^[a-z][a-z0-9-]+$/
|
10
13
|
end
|
11
14
|
end
|
12
|
-
end
|
15
|
+
end
|
data/lib/validates_host/ip.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'resolv'
|
4
|
+
|
1
5
|
module ValidatesHost
|
2
6
|
class Ip
|
3
|
-
def initialize(
|
4
|
-
@
|
7
|
+
def initialize(value)
|
8
|
+
@value = value
|
5
9
|
end
|
6
10
|
|
7
11
|
def valid?
|
8
|
-
return true if @
|
9
|
-
|
12
|
+
return true if @value.blank?
|
13
|
+
|
14
|
+
@value =~ Regexp.union(Resolv::IPv4::Regex, Resolv::IPv6::Regex)
|
10
15
|
end
|
11
16
|
end
|
12
|
-
end
|
17
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'shoulda-matchers'
|
2
4
|
|
3
5
|
module Shoulda
|
4
6
|
module Matchers
|
@@ -15,19 +17,19 @@ module Shoulda
|
|
15
17
|
def matches?(subject)
|
16
18
|
super(subject)
|
17
19
|
|
18
|
-
disallows_invalid_value
|
20
|
+
disallows_invalid_value && allows_valid_value
|
19
21
|
end
|
20
22
|
|
21
23
|
private
|
22
24
|
|
23
25
|
def disallows_invalid_value
|
24
|
-
disallows_value_of(
|
26
|
+
disallows_value_of('example')
|
25
27
|
end
|
26
28
|
|
27
29
|
def allows_valid_value
|
28
|
-
allows_value_of(
|
30
|
+
allows_value_of('example.com')
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
33
|
-
end
|
35
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'shoulda-matchers'
|
2
4
|
|
3
5
|
module Shoulda
|
4
6
|
module Matchers
|
@@ -15,19 +17,19 @@ module Shoulda
|
|
15
17
|
def matches?(subject)
|
16
18
|
super(subject)
|
17
19
|
|
18
|
-
disallows_invalid_value
|
20
|
+
disallows_invalid_value && allows_valid_value
|
19
21
|
end
|
20
22
|
|
21
23
|
private
|
22
24
|
|
23
25
|
def disallows_invalid_value
|
24
|
-
disallows_value_of(
|
26
|
+
disallows_value_of('1bd')
|
25
27
|
end
|
26
28
|
|
27
29
|
def allows_valid_value
|
28
|
-
allows_value_of(
|
30
|
+
allows_value_of('bd01')
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
33
|
-
end
|
35
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'shoulda-matchers'
|
2
4
|
|
3
5
|
module Shoulda
|
4
6
|
module Matchers
|
@@ -15,19 +17,19 @@ module Shoulda
|
|
15
17
|
def matches?(subject)
|
16
18
|
super(subject)
|
17
19
|
|
18
|
-
disallows_invalid_value
|
20
|
+
disallows_invalid_value && allows_valid_value
|
19
21
|
end
|
20
22
|
|
21
23
|
private
|
22
24
|
|
23
25
|
def disallows_invalid_value
|
24
|
-
disallows_value_of(
|
26
|
+
disallows_value_of('10.0.0')
|
25
27
|
end
|
26
28
|
|
27
29
|
def allows_valid_value
|
28
|
-
allows_value_of(
|
30
|
+
allows_value_of('10.10.10.1')
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
33
|
-
end
|
35
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'shoulda-matchers'
|
2
4
|
|
3
5
|
module Shoulda
|
4
6
|
module Matchers
|
@@ -15,19 +17,19 @@ module Shoulda
|
|
15
17
|
def matches?(subject)
|
16
18
|
super(subject)
|
17
19
|
|
18
|
-
disallows_invalid_value
|
20
|
+
disallows_invalid_value && allows_valid_value
|
19
21
|
end
|
20
22
|
|
21
23
|
private
|
22
24
|
|
23
25
|
def disallows_invalid_value
|
24
|
-
disallows_value_of(
|
26
|
+
disallows_value_of('10.0.0')
|
25
27
|
end
|
26
28
|
|
27
29
|
def allows_valid_value
|
28
|
-
allows_value_of(
|
30
|
+
allows_value_of('10.10.10.1/28')
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
33
|
-
end
|
35
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ValidatesHost
|
2
4
|
class Subnet
|
3
5
|
def initialize(subnet)
|
@@ -6,7 +8,8 @@ module ValidatesHost
|
|
6
8
|
|
7
9
|
def valid?
|
8
10
|
return true if @subnet.blank?
|
9
|
-
|
11
|
+
|
12
|
+
@subnet =~ %r{^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}/(2[4-9]|30)$}
|
10
13
|
end
|
11
14
|
end
|
12
|
-
end
|
15
|
+
end
|
data/spec/fake_app/server.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Server
|
2
4
|
include ActiveModel::Validations
|
3
5
|
include ActiveModel::Conversion
|
@@ -5,13 +7,13 @@ class Server
|
|
5
7
|
|
6
8
|
attr_accessor :domain_name, :host_name, :ip
|
7
9
|
|
8
|
-
validates :domain_name, :
|
9
|
-
validates :host_name, :
|
10
|
-
validates :ip, :
|
10
|
+
validates :domain_name, domain_name: true
|
11
|
+
validates :host_name, host_name: true
|
12
|
+
validates :ip, ip: true
|
11
13
|
|
12
14
|
def initialize(attributes = {})
|
13
15
|
attributes.each do |name, value|
|
14
16
|
send("#{name}=", value)
|
15
17
|
end
|
16
18
|
end
|
17
|
-
end
|
19
|
+
end
|
data/spec/fake_app/subnet.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Subnet
|
2
4
|
include ActiveModel::Validations
|
3
5
|
include ActiveModel::Conversion
|
@@ -5,11 +7,5 @@ class Subnet
|
|
5
7
|
|
6
8
|
attr_accessor :id, :value
|
7
9
|
|
8
|
-
validates :value, :
|
9
|
-
|
10
|
-
def initialize(attributes = {})
|
11
|
-
attributes.each do |name, value|
|
12
|
-
send("#{name}=", value)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
10
|
+
validates :value, subnet: true
|
11
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Shoulda::Matchers::ActiveModel::RequireAValidDomainNameMatcher do
|
6
|
+
let(:server) { Server.new }
|
7
|
+
|
8
|
+
it 'accepts on domain_name' do
|
9
|
+
expect(server).to require_a_valid_domain_name(:domain_name)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'accepts without a specified attribute' do
|
13
|
+
expect(server).to require_a_valid_domain_name
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'rejects on host_name' do
|
17
|
+
expect(server).not_to require_a_valid_domain_name(:host_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has a description message' do
|
21
|
+
expect(require_a_valid_domain_name.description).to eq('require domain_name to be a valid domain name')
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Shoulda::Matchers::ActiveModel::RequireAValidHostNameMatcher do
|
6
|
+
let(:server) { Server.new }
|
7
|
+
|
8
|
+
it 'accepts on host_name' do
|
9
|
+
expect(server).to require_a_valid_host_name(:host_name)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'accepts without a specified attribute' do
|
13
|
+
expect(server).to require_a_valid_host_name
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'rejects on domain_name' do
|
17
|
+
expect(server).not_to require_a_valid_host_name(:domain_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has a description message' do
|
21
|
+
expect(require_a_valid_host_name.description).to eq('require host_name to be a valid host name')
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Shoulda::Matchers::ActiveModel::RequireAValidIpMatcher do
|
6
|
+
let(:server) { Server.new }
|
7
|
+
|
8
|
+
it 'accepts on ip' do
|
9
|
+
expect(server).to require_a_valid_ip(:ip)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'accepts without a specified attribute' do
|
13
|
+
expect(server).to require_a_valid_ip
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'rejects on domain_name' do
|
17
|
+
expect(server).not_to require_a_valid_ip(:domain_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has a description message' do
|
21
|
+
expect(require_a_valid_ip.description).to eq('require ip to be a valid ip')
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Shoulda::Matchers::ActiveModel::RequireAValidSubnetMatcher do
|
6
|
+
let(:subnet) { Subnet.new }
|
7
|
+
|
8
|
+
it 'accepts on value' do
|
9
|
+
expect(subnet).to require_a_valid_subnet(:value)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'accepts without a specified attribute' do
|
13
|
+
expect(subnet).to require_a_valid_subnet
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'rejects on id' do
|
17
|
+
expect(subnet).not_to require_a_valid_subnet(:id)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has a description message' do
|
21
|
+
expect(require_a_valid_subnet.description).to eq('require value to be a valid subnet')
|
22
|
+
end
|
23
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rspec'
|
2
4
|
require 'active_model'
|
3
5
|
require 'coveralls'
|
@@ -9,4 +11,4 @@ require 'validates_host'
|
|
9
11
|
require 'fake_app/server'
|
10
12
|
require 'fake_app/subnet'
|
11
13
|
|
12
|
-
include Shoulda::Matchers::ActiveModel
|
14
|
+
include Shoulda::Matchers::ActiveModel
|
@@ -1,38 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe DomainNameValidator do
|
6
|
+
let(:server) { Server.new }
|
7
|
+
|
4
8
|
context 'when domain_name is invalid' do
|
5
|
-
before
|
6
|
-
|
9
|
+
before do
|
10
|
+
server.domain_name = 'http://'
|
11
|
+
server.valid?
|
7
12
|
end
|
8
13
|
|
9
|
-
it '
|
10
|
-
expect(
|
14
|
+
it 'sets object as invalid' do
|
15
|
+
expect(server).not_to be_valid
|
11
16
|
end
|
12
17
|
|
13
|
-
it '
|
14
|
-
|
15
|
-
expect(@server.errors[:domain_name]).to eq(['is invalid'])
|
18
|
+
it 'sets an error' do
|
19
|
+
expect(server.errors[:domain_name]).to eq(['is invalid'])
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
23
|
context 'when domain_name is valid' do
|
20
|
-
before
|
21
|
-
|
24
|
+
before do
|
25
|
+
server.domain_name = 'example.com'
|
26
|
+
server.valid?
|
22
27
|
end
|
23
28
|
|
24
|
-
it '
|
25
|
-
expect(
|
29
|
+
it 'sets object as valid' do
|
30
|
+
expect(server).to be_valid
|
26
31
|
end
|
27
32
|
|
28
|
-
it '
|
29
|
-
|
30
|
-
expect(@server.errors[:domain_name]).to be_blank
|
33
|
+
it 'does not set an error on attribute' do
|
34
|
+
expect(server.errors[:domain_name]).to be_blank
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
34
|
-
it '
|
35
|
-
|
36
|
-
expect(@server.valid?).to be_truthy
|
38
|
+
it 'is valid with a nil value' do
|
39
|
+
expect(server).to be_valid
|
37
40
|
end
|
38
|
-
end
|
41
|
+
end
|
@@ -1,38 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe HostNameValidator do
|
6
|
+
let(:server) { Server.new }
|
7
|
+
|
4
8
|
context 'when host_name is invalid' do
|
5
|
-
before
|
6
|
-
|
9
|
+
before do
|
10
|
+
server.host_name = 'http://'
|
11
|
+
server.valid?
|
7
12
|
end
|
8
13
|
|
9
|
-
it '
|
10
|
-
expect(
|
14
|
+
it 'sets object as invalid' do
|
15
|
+
expect(server).not_to be_valid
|
11
16
|
end
|
12
17
|
|
13
|
-
it '
|
14
|
-
|
15
|
-
expect(@server.errors[:host_name]).to eq(['is invalid'])
|
18
|
+
it 'sets an error' do
|
19
|
+
expect(server.errors[:host_name]).to eq(['is invalid'])
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
23
|
context 'when host_name is valid' do
|
20
|
-
before
|
21
|
-
|
24
|
+
before do
|
25
|
+
server.host_name = 'bd01'
|
26
|
+
server.valid?
|
22
27
|
end
|
23
28
|
|
24
|
-
it '
|
25
|
-
expect(
|
29
|
+
it 'sets object as valid' do
|
30
|
+
expect(server).to be_valid
|
26
31
|
end
|
27
32
|
|
28
|
-
it '
|
29
|
-
|
30
|
-
expect(@server.errors[:host_name]).to be_blank
|
33
|
+
it 'does not set an error on attribute' do
|
34
|
+
expect(server.errors[:host_name]).to be_blank
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
34
|
-
it '
|
35
|
-
|
36
|
-
expect(@server.valid?).to be_truthy
|
38
|
+
it 'is valid with a nil value' do
|
39
|
+
expect(server).to be_valid
|
37
40
|
end
|
38
|
-
end
|
41
|
+
end
|
@@ -1,38 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe IpValidator do
|
6
|
+
let(:server) { Server.new }
|
7
|
+
|
4
8
|
context 'when ip is invalid' do
|
5
|
-
before
|
6
|
-
|
9
|
+
before do
|
10
|
+
server.ip = '127.0.0'
|
11
|
+
server.valid?
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'sets object as invalid' do
|
15
|
+
expect(server).not_to be_valid
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'sets an error' do
|
19
|
+
expect(server.errors[:ip]).to eq(['is invalid'])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when ip is IPV4 valid' do
|
24
|
+
before do
|
25
|
+
server.ip = '10.10.10.1'
|
26
|
+
server.valid?
|
7
27
|
end
|
8
28
|
|
9
|
-
it '
|
10
|
-
expect(
|
29
|
+
it 'sets object as valid' do
|
30
|
+
expect(server).to be_valid
|
11
31
|
end
|
12
32
|
|
13
|
-
it '
|
14
|
-
|
15
|
-
expect(@server.errors[:ip]).to eq(['is invalid'])
|
33
|
+
it 'does not set an error on attribute' do
|
34
|
+
expect(server.errors[:ip]).to be_blank
|
16
35
|
end
|
17
36
|
end
|
18
37
|
|
19
|
-
context 'when ip is valid' do
|
20
|
-
before
|
21
|
-
|
38
|
+
context 'when ip is IPV6 valid' do
|
39
|
+
before do
|
40
|
+
server.ip = 'fd92:fe56:b43a:062e:ffff:ffff:ffff:ffff'
|
41
|
+
server.valid?
|
22
42
|
end
|
23
43
|
|
24
|
-
it '
|
25
|
-
expect(
|
44
|
+
it 'sets object as valid' do
|
45
|
+
expect(server).to be_valid
|
26
46
|
end
|
27
47
|
|
28
|
-
it '
|
29
|
-
|
30
|
-
expect(@server.errors[:ip]).to be_blank
|
48
|
+
it 'does not set an error on attribute' do
|
49
|
+
expect(server.errors[:ip]).to be_blank
|
31
50
|
end
|
32
51
|
end
|
33
52
|
|
34
|
-
it '
|
35
|
-
|
36
|
-
expect(@server.valid?).to be_truthy
|
53
|
+
it 'is valid with a nil value' do
|
54
|
+
expect(server).to be_valid
|
37
55
|
end
|
38
|
-
end
|
56
|
+
end
|
@@ -1,38 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe SubnetValidator do
|
6
|
+
let(:subnet) { Subnet.new }
|
7
|
+
|
4
8
|
context 'when subnet is invalid' do
|
5
|
-
before
|
6
|
-
|
9
|
+
before do
|
10
|
+
subnet.value = '127.0.0'
|
11
|
+
subnet.valid?
|
7
12
|
end
|
8
13
|
|
9
|
-
it '
|
10
|
-
expect(
|
14
|
+
it 'sets object as invalid' do
|
15
|
+
expect(subnet).not_to be_valid
|
11
16
|
end
|
12
17
|
|
13
|
-
it '
|
14
|
-
|
15
|
-
expect(@subnet.errors[:value]).to eq(['is invalid'])
|
18
|
+
it 'sets an error' do
|
19
|
+
expect(subnet.errors[:value]).to eq(['is invalid'])
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
23
|
context 'when subnet is valid' do
|
20
|
-
before
|
21
|
-
|
24
|
+
before do
|
25
|
+
subnet.value = '10.10.10.1/28'
|
26
|
+
subnet.valid?
|
22
27
|
end
|
23
28
|
|
24
|
-
it '
|
25
|
-
expect(
|
29
|
+
it 'sets object as valid' do
|
30
|
+
expect(subnet).to be_valid
|
26
31
|
end
|
27
32
|
|
28
|
-
it '
|
29
|
-
|
30
|
-
expect(@subnet.errors[:value]).to be_blank
|
33
|
+
it 'does not set an error on attribute' do
|
34
|
+
expect(subnet.errors[:value]).to be_blank
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
34
|
-
it '
|
35
|
-
|
36
|
-
expect(@subnet.valid?).to be_truthy
|
38
|
+
it 'is valid with a nil value' do
|
39
|
+
expect(subnet).to be_valid
|
37
40
|
end
|
38
|
-
end
|
41
|
+
end
|
data/validates_host.gemspec
CHANGED
@@ -1,24 +1,27 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path('lib/validates_host/version', __dir__)
|
3
4
|
|
4
5
|
Gem::Specification.new do |gem|
|
5
6
|
gem.name = 'validates_host'
|
6
7
|
gem.version = ValidatesHost::VERSION
|
7
|
-
gem.authors =
|
8
|
-
gem.email =
|
9
|
-
gem.summary =
|
8
|
+
gem.authors = 'Paulo Henrique Lopes Ribeiro'
|
9
|
+
gem.email = 'plribeiro3000@gmail.com'
|
10
|
+
gem.summary = 'Validates Host, Domain and IP and test it with matchers in a simple way.'
|
10
11
|
|
11
|
-
gem.files = `git ls-files`.split(
|
12
|
+
gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
12
13
|
gem.test_files = `git ls-files -- {test,spec,features,examples,gemfiles}/*`.split("\n")
|
13
|
-
gem.executables = `git ls-files -- bin/*`.split('\n').map{ |f| File.basename(f) }
|
14
|
-
gem.require_paths = %w
|
14
|
+
gem.executables = `git ls-files -- bin/*`.split('\n').map { |f| File.basename(f) }
|
15
|
+
gem.require_paths = %w[lib]
|
15
16
|
|
16
17
|
gem.license = 'MIT'
|
17
18
|
|
19
|
+
gem.add_development_dependency 'coveralls'
|
18
20
|
gem.add_development_dependency 'rake'
|
19
21
|
gem.add_development_dependency 'rspec'
|
22
|
+
gem.add_development_dependency 'rubocop'
|
23
|
+
gem.add_development_dependency 'rubocop-rspec'
|
20
24
|
gem.add_development_dependency 'shoulda-matchers'
|
21
|
-
gem.add_development_dependency 'coveralls'
|
22
25
|
|
23
26
|
gem.add_dependency 'activemodel', '>= 3.0.0'
|
24
|
-
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_host
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paulo Henrique Lopes Ribeiro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: coveralls
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rake
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +53,7 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: rubocop
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -53,7 +67,21 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: rubocop-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: shoulda-matchers
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
87
|
- - ">="
|
@@ -88,8 +116,8 @@ extra_rdoc_files: []
|
|
88
116
|
files:
|
89
117
|
- ".gitignore"
|
90
118
|
- ".rspec"
|
119
|
+
- ".rubocop.yml"
|
91
120
|
- ".ruby-gemset"
|
92
|
-
- ".ruby-version"
|
93
121
|
- ".travis.yml"
|
94
122
|
- Gemfile
|
95
123
|
- LICENSE
|
@@ -114,14 +142,14 @@ files:
|
|
114
142
|
- lib/validates_host/version.rb
|
115
143
|
- spec/fake_app/server.rb
|
116
144
|
- spec/fake_app/subnet.rb
|
145
|
+
- spec/shoulda/matchers/active_model/require_a_valid_domain_name_matcher_spec.rb
|
146
|
+
- spec/shoulda/matchers/active_model/require_a_valid_host_name_matcher_spec.rb
|
147
|
+
- spec/shoulda/matchers/active_model/require_a_valid_ip_matcher_spec.rb
|
148
|
+
- spec/shoulda/matchers/active_model/require_a_valid_subnet_matcher_spec.rb
|
117
149
|
- spec/spec_helper.rb
|
118
150
|
- spec/validates_host/domain_name_validator_spec.rb
|
119
151
|
- spec/validates_host/host_name_validator_spec.rb
|
120
152
|
- spec/validates_host/ip_validator_spec.rb
|
121
|
-
- spec/validates_host/require_a_valid_domain_name_matcher_spec.rb
|
122
|
-
- spec/validates_host/require_a_valid_host_name_matcher_spec.rb
|
123
|
-
- spec/validates_host/require_a_valid_ip_matcher_spec.rb
|
124
|
-
- spec/validates_host/require_a_valid_subnet_matcher_spec.rb
|
125
153
|
- spec/validates_host/subnet_validator_spec.rb
|
126
154
|
- validates_host.gemspec
|
127
155
|
homepage:
|
@@ -143,8 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
171
|
- !ruby/object:Gem::Version
|
144
172
|
version: '0'
|
145
173
|
requirements: []
|
146
|
-
|
147
|
-
rubygems_version: 2.6.14
|
174
|
+
rubygems_version: 3.1.3
|
148
175
|
signing_key:
|
149
176
|
specification_version: 4
|
150
177
|
summary: Validates Host, Domain and IP and test it with matchers in a simple way.
|
@@ -154,12 +181,12 @@ test_files:
|
|
154
181
|
- gemfiles/Gemfile.rails5
|
155
182
|
- spec/fake_app/server.rb
|
156
183
|
- spec/fake_app/subnet.rb
|
184
|
+
- spec/shoulda/matchers/active_model/require_a_valid_domain_name_matcher_spec.rb
|
185
|
+
- spec/shoulda/matchers/active_model/require_a_valid_host_name_matcher_spec.rb
|
186
|
+
- spec/shoulda/matchers/active_model/require_a_valid_ip_matcher_spec.rb
|
187
|
+
- spec/shoulda/matchers/active_model/require_a_valid_subnet_matcher_spec.rb
|
157
188
|
- spec/spec_helper.rb
|
158
189
|
- spec/validates_host/domain_name_validator_spec.rb
|
159
190
|
- spec/validates_host/host_name_validator_spec.rb
|
160
191
|
- spec/validates_host/ip_validator_spec.rb
|
161
|
-
- spec/validates_host/require_a_valid_domain_name_matcher_spec.rb
|
162
|
-
- spec/validates_host/require_a_valid_host_name_matcher_spec.rb
|
163
|
-
- spec/validates_host/require_a_valid_ip_matcher_spec.rb
|
164
|
-
- spec/validates_host/require_a_valid_subnet_matcher_spec.rb
|
165
192
|
- spec/validates_host/subnet_validator_spec.rb
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.3.6
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::RequireAValidDomainNameMatcher do
|
4
|
-
before :each do
|
5
|
-
@server = Server.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should accept on domain_name' do
|
9
|
-
expect(@server).to require_a_valid_domain_name(:domain_name)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should accept without a specified attribute' do
|
13
|
-
expect(@server).to require_a_valid_domain_name
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should reject on host_name' do
|
17
|
-
expect(@server).not_to require_a_valid_domain_name(:host_name)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should have a description message' do
|
21
|
-
expect(require_a_valid_domain_name.description).to eq('require domain_name to be a valid domain name')
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::RequireAValidHostNameMatcher do
|
4
|
-
before :each do
|
5
|
-
@server = Server.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should accept on host_name' do
|
9
|
-
expect(@server).to require_a_valid_host_name(:host_name)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should accept without a specified attribute' do
|
13
|
-
expect(@server).to require_a_valid_host_name
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should reject on domain_name' do
|
17
|
-
expect(@server).not_to require_a_valid_host_name(:domain_name)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should have a description message' do
|
21
|
-
expect(require_a_valid_host_name.description).to eq('require host_name to be a valid host name')
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::RequireAValidIpMatcher do
|
4
|
-
before :each do
|
5
|
-
@server = Server.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should accept on ip' do
|
9
|
-
expect(@server).to require_a_valid_ip(:ip)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should accept without a specified attribute' do
|
13
|
-
expect(@server).to require_a_valid_ip
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should reject on domain_name' do
|
17
|
-
expect(@server).not_to require_a_valid_ip(:domain_name)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should have a description message' do
|
21
|
-
expect(require_a_valid_ip.description).to eq('require ip to be a valid ip')
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveModel::RequireAValidSubnetMatcher do
|
4
|
-
before :each do
|
5
|
-
@subnet = Subnet.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should accept on value' do
|
9
|
-
expect(@subnet).to require_a_valid_subnet(:value)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should accept without a specified attribute' do
|
13
|
-
expect(@subnet).to require_a_valid_subnet
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should reject on id' do
|
17
|
-
expect(@subnet).not_to require_a_valid_subnet(:id)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should have a description message' do
|
21
|
-
expect(require_a_valid_subnet.description).to eq('require value to be a valid subnet')
|
22
|
-
end
|
23
|
-
end
|