validates_host 0.2.0 → 1.2.0
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 +7 -0
- data/.gitignore +5 -4
- data/.rubocop.yml +53 -0
- data/.ruby-gemset +1 -0
- data/.travis.yml +31 -0
- data/Gemfile +3 -1
- data/README.md +24 -3
- data/Rakefile +9 -4
- data/gemfiles/Gemfile.rails3 +6 -0
- data/gemfiles/Gemfile.rails4 +5 -0
- data/gemfiles/Gemfile.rails5 +5 -0
- data/lib/validates_host.rb +16 -5
- data/lib/validates_host/domain_name.rb +15 -0
- data/lib/validates_host/domain_name_validator.rb +3 -19
- data/lib/validates_host/host_name.rb +15 -0
- data/lib/validates_host/host_name_validator.rb +3 -19
- data/lib/validates_host/ip.rb +17 -0
- data/lib/validates_host/ip_validator.rb +3 -19
- data/lib/validates_host/{shoulda-matchers/domain_name_matcher.rb → require_a_valid_domain_name_matcher.rb} +9 -11
- data/lib/validates_host/{shoulda-matchers/host_name_matcher.rb → require_a_valid_host_name_matcher.rb} +9 -11
- data/lib/validates_host/{shoulda-matchers/ip_matcher.rb → require_a_valid_ip_matcher.rb} +9 -11
- data/lib/validates_host/require_a_valid_subnet_matcher.rb +35 -0
- data/lib/validates_host/subnet.rb +15 -0
- data/lib/validates_host/subnet_validator.rb +7 -0
- data/lib/validates_host/version.rb +3 -1
- data/spec/fake_app/server.rb +19 -5
- data/spec/fake_app/subnet.rb +11 -0
- 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 +11 -7
- data/spec/validates_host/domain_name_validator_spec.rb +41 -0
- data/spec/validates_host/host_name_validator_spec.rb +41 -0
- data/spec/validates_host/ip_validator_spec.rb +56 -0
- data/spec/validates_host/subnet_validator_spec.rb +41 -0
- data/validates_host.gemspec +22 -19
- metadata +89 -88
- data/lib/validates_host/remarkable.rb +0 -3
- data/lib/validates_host/remarkable/domain_name_matcher.rb +0 -29
- data/lib/validates_host/remarkable/host_name_matcher.rb +0 -29
- data/lib/validates_host/remarkable/ip_matcher.rb +0 -29
- data/lib/validates_host/shoulda-matchers.rb +0 -3
- data/spec/fake_app/db/migrations/create_servers.rb +0 -13
- data/spec/validates_host.rb/domain_name_validator_spec.rb +0 -40
- data/spec/validates_host.rb/host_name_validator_spec.rb +0 -40
- data/spec/validates_host.rb/ip_validator_spec.rb +0 -40
- data/spec/validates_host.rb/remarkable/domain_name_matcher_spec.rb +0 -20
- data/spec/validates_host.rb/remarkable/host_name_matcher_spec.rb +0 -20
- data/spec/validates_host.rb/remarkable/ip_matcher_spec.rb +0 -20
- data/spec/validates_host.rb/shoulda-matchers/domain_name_matcher_spec.rb +0 -20
- data/spec/validates_host.rb/shoulda-matchers/host_name_matcher_spec.rb +0 -20
- data/spec/validates_host.rb/shoulda-matchers/ip_matcher_spec.rb +0 -20
| @@ -1,17 +1,15 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'shoulda-matchers'
         | 
| 2 4 |  | 
| 3 5 | 
             
            module Shoulda
         | 
| 4 6 | 
             
              module Matchers
         | 
| 5 7 | 
             
                module ActiveModel
         | 
| 6 8 | 
             
                  def require_a_valid_ip(attribute = :ip)
         | 
| 7 | 
            -
                     | 
| 9 | 
            +
                    RequireAValidIpMatcher.new(attribute)
         | 
| 8 10 | 
             
                  end
         | 
| 9 11 |  | 
| 10 | 
            -
                  class  | 
| 11 | 
            -
                    def initialize(attribute)
         | 
| 12 | 
            -
                      @attribute = attribute
         | 
| 13 | 
            -
                    end
         | 
| 14 | 
            -
             | 
| 12 | 
            +
                  class RequireAValidIpMatcher < ValidationMatcher
         | 
| 15 13 | 
             
                    def description
         | 
| 16 14 | 
             
                      "require #{@attribute} to be a valid ip"
         | 
| 17 15 | 
             
                    end
         | 
| @@ -19,19 +17,19 @@ module Shoulda | |
| 19 17 | 
             
                    def matches?(subject)
         | 
| 20 18 | 
             
                      super(subject)
         | 
| 21 19 |  | 
| 22 | 
            -
                      disallows_invalid_value  | 
| 20 | 
            +
                      disallows_invalid_value && allows_valid_value
         | 
| 23 21 | 
             
                    end
         | 
| 24 22 |  | 
| 25 23 | 
             
                    private
         | 
| 26 24 |  | 
| 27 25 | 
             
                    def disallows_invalid_value
         | 
| 28 | 
            -
                      disallows_value_of( | 
| 26 | 
            +
                      disallows_value_of('10.0.0')
         | 
| 29 27 | 
             
                    end
         | 
| 30 28 |  | 
| 31 29 | 
             
                    def allows_valid_value
         | 
| 32 | 
            -
                      allows_value_of( | 
| 30 | 
            +
                      allows_value_of('10.10.10.1')
         | 
| 33 31 | 
             
                    end
         | 
| 34 32 | 
             
                  end
         | 
| 35 33 | 
             
                end
         | 
| 36 34 | 
             
              end
         | 
| 37 | 
            -
            end
         | 
| 35 | 
            +
            end
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'shoulda-matchers'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Shoulda
         | 
| 6 | 
            +
              module Matchers
         | 
| 7 | 
            +
                module ActiveModel
         | 
| 8 | 
            +
                  def require_a_valid_subnet(attribute = :value)
         | 
| 9 | 
            +
                    RequireAValidSubnetMatcher.new(attribute)
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  class RequireAValidSubnetMatcher < ValidationMatcher
         | 
| 13 | 
            +
                    def description
         | 
| 14 | 
            +
                      "require #{@attribute} to be a valid subnet"
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    def matches?(subject)
         | 
| 18 | 
            +
                      super(subject)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                      disallows_invalid_value && allows_valid_value
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    private
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def disallows_invalid_value
         | 
| 26 | 
            +
                      disallows_value_of('10.0.0')
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    def allows_valid_value
         | 
| 30 | 
            +
                      allows_value_of('10.10.10.1/28')
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module ValidatesHost
         | 
| 4 | 
            +
              class Subnet
         | 
| 5 | 
            +
                def initialize(subnet)
         | 
| 6 | 
            +
                  @subnet = subnet
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def valid?
         | 
| 10 | 
            +
                  return true if @subnet.blank?
         | 
| 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)$}
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
    
        data/spec/fake_app/server.rb
    CHANGED
    
    | @@ -1,5 +1,19 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
               | 
| 5 | 
            -
             | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class Server
         | 
| 4 | 
            +
              include ActiveModel::Validations
         | 
| 5 | 
            +
              include ActiveModel::Conversion
         | 
| 6 | 
            +
              extend ActiveModel::Naming
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              attr_accessor :domain_name, :host_name, :ip
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              validates :domain_name, domain_name: true
         | 
| 11 | 
            +
              validates :host_name, host_name: true
         | 
| 12 | 
            +
              validates :ip, ip: true
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def initialize(attributes = {})
         | 
| 15 | 
            +
                attributes.each do |name, value|
         | 
| 16 | 
            +
                  send("#{name}=", value)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            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,10 +1,14 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            require "rspec"
         | 
| 3 | 
            -
            require "active_record"
         | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 4 2 |  | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 3 | 
            +
            require 'rspec'
         | 
| 4 | 
            +
            require 'active_model'
         | 
| 5 | 
            +
            require 'coveralls'
         | 
| 6 | 
            +
            require 'shoulda-matchers'
         | 
| 7 7 |  | 
| 8 | 
            -
             | 
| 8 | 
            +
            Coveralls.wear!
         | 
| 9 9 |  | 
| 10 | 
            -
             | 
| 10 | 
            +
            require 'validates_host'
         | 
| 11 | 
            +
            require 'fake_app/server'
         | 
| 12 | 
            +
            require 'fake_app/subnet'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            include Shoulda::Matchers::ActiveModel
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe DomainNameValidator do
         | 
| 6 | 
            +
              let(:server) { Server.new }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              context 'when domain_name is invalid' do
         | 
| 9 | 
            +
                before do
         | 
| 10 | 
            +
                  server.domain_name = 'http://'
         | 
| 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[:domain_name]).to eq(['is invalid'])
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              context 'when domain_name is valid' do
         | 
| 24 | 
            +
                before do
         | 
| 25 | 
            +
                  server.domain_name = 'example.com'
         | 
| 26 | 
            +
                  server.valid?
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it 'sets object as valid' do
         | 
| 30 | 
            +
                  expect(server).to be_valid
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                it 'does not set an error on attribute' do
         | 
| 34 | 
            +
                  expect(server.errors[:domain_name]).to be_blank
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              it 'is valid with a nil value' do
         | 
| 39 | 
            +
                expect(server).to be_valid
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe HostNameValidator do
         | 
| 6 | 
            +
              let(:server) { Server.new }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              context 'when host_name is invalid' do
         | 
| 9 | 
            +
                before do
         | 
| 10 | 
            +
                  server.host_name = 'http://'
         | 
| 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[:host_name]).to eq(['is invalid'])
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              context 'when host_name is valid' do
         | 
| 24 | 
            +
                before do
         | 
| 25 | 
            +
                  server.host_name = 'bd01'
         | 
| 26 | 
            +
                  server.valid?
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it 'sets object as valid' do
         | 
| 30 | 
            +
                  expect(server).to be_valid
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                it 'does not set an error on attribute' do
         | 
| 34 | 
            +
                  expect(server.errors[:host_name]).to be_blank
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              it 'is valid with a nil value' do
         | 
| 39 | 
            +
                expect(server).to be_valid
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
| @@ -0,0 +1,56 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe IpValidator do
         | 
| 6 | 
            +
              let(:server) { Server.new }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              context 'when ip is invalid' do
         | 
| 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?
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it 'sets object as valid' do
         | 
| 30 | 
            +
                  expect(server).to be_valid
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                it 'does not set an error on attribute' do
         | 
| 34 | 
            +
                  expect(server.errors[:ip]).to be_blank
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 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?
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                it 'sets object as valid' do
         | 
| 45 | 
            +
                  expect(server).to be_valid
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                it 'does not set an error on attribute' do
         | 
| 49 | 
            +
                  expect(server.errors[:ip]).to be_blank
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              it 'is valid with a nil value' do
         | 
| 54 | 
            +
                expect(server).to be_valid
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
            end
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe SubnetValidator do
         | 
| 6 | 
            +
              let(:subnet) { Subnet.new }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              context 'when subnet is invalid' do
         | 
| 9 | 
            +
                before do
         | 
| 10 | 
            +
                  subnet.value = '127.0.0'
         | 
| 11 | 
            +
                  subnet.valid?
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                it 'sets object as invalid' do
         | 
| 15 | 
            +
                  expect(subnet).not_to be_valid
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                it 'sets an error' do
         | 
| 19 | 
            +
                  expect(subnet.errors[:value]).to eq(['is invalid'])
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              context 'when subnet is valid' do
         | 
| 24 | 
            +
                before do
         | 
| 25 | 
            +
                  subnet.value = '10.10.10.1/28'
         | 
| 26 | 
            +
                  subnet.valid?
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it 'sets object as valid' do
         | 
| 30 | 
            +
                  expect(subnet).to be_valid
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                it 'does not set an error on attribute' do
         | 
| 34 | 
            +
                  expect(subnet.errors[:value]).to be_blank
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              it 'is valid with a nil value' do
         | 
| 39 | 
            +
                expect(subnet).to be_valid
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         |