valid_hostname 2.0.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.
@@ -0,0 +1,148 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe ValidateHostname do
6
+ context 'with valid?' do
7
+ it 'valid single label' do
8
+ expect(described_class).to be_valid('test')
9
+ end
10
+
11
+ it 'valid multiple labels' do
12
+ expect(described_class).to be_valid('test1.test2.com')
13
+ end
14
+
15
+ it 'valid label length' do
16
+ expect(described_class).not_to be_valid("my#{'t' * 62}.hostname")
17
+ end
18
+
19
+ it 'invalid hostname length' do
20
+ expect(described_class).not_to be_valid("my#{'t' * 254}.hostname")
21
+ end
22
+
23
+ it 'valid hyphens' do
24
+ expect(described_class).to be_valid('my-host.hostname')
25
+ end
26
+
27
+ it 'invalid hyphens' do
28
+ expect(described_class).not_to be_valid('-myhost.hostname')
29
+ expect(described_class).not_to be_valid('myhost-.hostname')
30
+ expect(described_class).not_to be_valid('-myhost-.hostname')
31
+ expect(described_class).not_to be_valid('myhost.-hostname')
32
+ end
33
+
34
+ it 'invalid root label' do
35
+ expect(described_class).not_to be_valid('.')
36
+ expect(described_class).not_to be_valid('test.')
37
+ end
38
+
39
+ it 'valid root label with allow_root_label' do
40
+ expect(described_class).to be_valid('.', allow_root_label: true)
41
+ expect(described_class).to be_valid('test.', allow_root_label: true)
42
+ end
43
+ end
44
+
45
+ context 'with valid_length?' do
46
+ it 'valid hostname length' do
47
+ expect(described_class).to be_valid_length("my#{'t' * 253}")
48
+ end
49
+
50
+ it 'invalid hostname length' do
51
+ expect(described_class).not_to be_valid_length("my#{'t' * 254}")
52
+ expect(described_class).not_to be_valid_length('')
53
+ expect(described_class).not_to be_valid_length(nil)
54
+ end
55
+ end
56
+
57
+ context 'with valid_label_length?' do
58
+ it 'valid label length' do
59
+ expect(described_class).to be_valid_label_length("my#{'t' * 61}.hostname")
60
+ end
61
+
62
+ it 'invalid label length' do
63
+ expect(described_class).not_to be_valid_label_length("my#{'t' * 62}.hostname")
64
+ expect(described_class).not_to be_valid_label_length('')
65
+ expect(described_class).not_to be_valid_label_length(nil)
66
+ end
67
+ end
68
+
69
+ context 'with valid_hyphens?' do
70
+ it 'valid hyphens' do
71
+ expect(described_class).to be_valid_hyphens('my-host.hostname')
72
+ end
73
+
74
+ it 'invalid hyphens' do
75
+ expect(described_class).not_to be_valid_hyphens('-myhost.hostname')
76
+ expect(described_class).not_to be_valid_hyphens('myhost-.hostname')
77
+ expect(described_class).not_to be_valid_hyphens('-myhost-.hostname')
78
+ expect(described_class).not_to be_valid_hyphens('myhost.-hostname')
79
+ expect(described_class).not_to be_valid_hyphens("\n-myhost.hostname")
80
+ expect(described_class).not_to be_valid_hyphens("myhost.\n-hostname")
81
+ expect(described_class).not_to be_valid_hyphens("myhost.hostname-\n")
82
+ end
83
+ end
84
+
85
+ context 'with valid_numeric_only?' do
86
+ it 'valid numeric only' do
87
+ expect(described_class).to be_valid_numeric_only('my-host.hostname', allow_numeric_hostname: true)
88
+ expect(described_class).to be_valid_numeric_only('1234.hostname', allow_numeric_hostname: true)
89
+ expect(described_class).to be_valid_numeric_only('test.1234.hostname')
90
+ expect(described_class).to be_valid_numeric_only('')
91
+ expect(described_class).to be_valid_numeric_only(nil)
92
+ end
93
+
94
+ it 'invalid numeric only' do
95
+ expect(described_class).not_to be_valid_numeric_only('1234.hostname')
96
+ end
97
+ end
98
+
99
+ context 'with valid_dots?' do
100
+ it 'valid dots' do
101
+ expect(described_class).to be_valid_dots('test.hostname')
102
+ expect(described_class).to be_valid_dots('')
103
+ expect(described_class).to be_valid_dots(nil)
104
+ end
105
+
106
+ it 'invalid dots' do
107
+ expect(described_class).not_to be_valid_dots('1234..hostname')
108
+ expect(described_class).not_to be_valid_dots('hostname..')
109
+ expect(described_class).not_to be_valid_dots('..hostname')
110
+ end
111
+ end
112
+
113
+ context 'with valid_characters?' do
114
+ it 'valid characters' do
115
+ expect(described_class).to be_valid_characters('localhost')
116
+ expect(described_class).to be_valid_characters('localhost.domain1')
117
+ expect(described_class).to be_valid_characters('localhost.dom-ain1')
118
+ expect(described_class).to be_valid_characters('')
119
+ expect(described_class).to be_valid_characters(nil)
120
+ expect(described_class).to be_valid_characters('test.host_name', allow_underscore: true)
121
+ expect(described_class).to be_valid_characters('*.domain1', allow_wildcard_hostname: true)
122
+ end
123
+
124
+ it 'invalid characters' do
125
+ expect(described_class).not_to be_valid_characters('test.host_name')
126
+ expect(described_class).not_to be_valid_characters('*.domain1')
127
+ expect(described_class).not_to be_valid_characters('localhost.tes,t')
128
+ expect(described_class).not_to be_valid_characters('localhost.tes;t')
129
+ expect(described_class).not_to be_valid_characters('localhost.teßt')
130
+ expect(described_class).not_to be_valid_characters("localhost\n.test")
131
+ end
132
+ end
133
+
134
+ context 'with valid_tld?' do
135
+ it 'valid tlds' do
136
+ expect(described_class).to be_valid_tld('test.org')
137
+ expect(described_class).to be_valid_tld('test.ccc', valid_tlds: ['ccc'])
138
+ expect(described_class).to be_valid_tld('test.ccc', require_valid_tld: false)
139
+ expect(described_class).to be_valid_tld('')
140
+ expect(described_class).to be_valid_tld(nil)
141
+ end
142
+
143
+ it 'invalid tlds' do
144
+ expect(described_class).not_to be_valid_tld('test.ccc')
145
+ expect(described_class).not_to be_valid_tld('test')
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path 'lib', __dir__
4
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include? lib
5
+ require 'valid_hostname/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'valid_hostname'
9
+ spec.version = ValidHostname::VERSION
10
+ spec.metadata = { 'rubygems_mfa_required' => 'true' }
11
+
12
+ spec.authors = ['Kim Nøgaard', 'Alexander Meindl']
13
+ spec.description = 'Extension to ActiveRecord::Base for validating hostnames'
14
+ spec.summary = 'Checks for valid hostnames'
15
+ spec.email = ['jasen@jasen.dk', 'a.meindl@alphanodes.com']
16
+ spec.homepage = 'https://github.com/AlphaNodes/valid_hostname'
17
+ spec.licenses = ['MIT']
18
+ spec.required_ruby_version = '>= 2.7'
19
+
20
+ spec.files = `git ls-files`.split "\n"
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_runtime_dependency 'activemodel'
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'debug' if ENV['ENABLE_DEBUG']
26
+ spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'rspec', '~> 3.10'
28
+ spec.add_development_dependency 'rubocop'
29
+ spec.add_development_dependency 'rubocop-performance'
30
+ spec.add_development_dependency 'rubocop-rspec'
31
+ spec.add_development_dependency 'solargraph'
32
+ end
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: valid_hostname
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kim Nøgaard
8
+ - Alexander Meindl
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2022-10-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activemodel
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: debug
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '3.10'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '3.10'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rubocop
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rubocop-performance
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop-rspec
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: solargraph
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ description: Extension to ActiveRecord::Base for validating hostnames
141
+ email:
142
+ - jasen@jasen.dk
143
+ - a.meindl@alphanodes.com
144
+ executables: []
145
+ extensions: []
146
+ extra_rdoc_files: []
147
+ files:
148
+ - ".github/workflows/rubocop.yml"
149
+ - ".github/workflows/tests.yml"
150
+ - ".gitignore"
151
+ - ".rspec"
152
+ - ".rubocop.yml"
153
+ - CHANGELOG.md
154
+ - Gemfile
155
+ - LICENSE
156
+ - README.md
157
+ - Rakefile
158
+ - config/locales/de.yml
159
+ - config/locales/en.yml
160
+ - config/valid_hostname.yml
161
+ - lib/valid_hostname.rb
162
+ - lib/valid_hostname/domainname_validator.rb
163
+ - lib/valid_hostname/hostname_validator.rb
164
+ - lib/valid_hostname/validate_hostname.rb
165
+ - lib/valid_hostname/version.rb
166
+ - spec/record_valid_hostname_spec.rb
167
+ - spec/spec_helper.rb
168
+ - spec/test_model.rb
169
+ - spec/validate_hostname_spec.rb
170
+ - valid_hostname.gemspec
171
+ homepage: https://github.com/AlphaNodes/valid_hostname
172
+ licenses:
173
+ - MIT
174
+ metadata:
175
+ rubygems_mfa_required: 'true'
176
+ post_install_message:
177
+ rdoc_options: []
178
+ require_paths:
179
+ - lib
180
+ required_ruby_version: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '2.7'
185
+ required_rubygems_version: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ requirements: []
191
+ rubygems_version: 3.3.7
192
+ signing_key:
193
+ specification_version: 4
194
+ summary: Checks for valid hostnames
195
+ test_files: []