validators 2.8.1 → 3.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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +86 -0
  3. data/.travis.yml +12 -9
  4. data/Gemfile +2 -0
  5. data/Rakefile +10 -1
  6. data/bin/sync-disposable-hostnames +3 -3
  7. data/data/disposable.json +854 -4
  8. data/data/tld.json +2 -5
  9. data/lib/validators/constants.rb +9 -7
  10. data/lib/validators/disposable_hostnames.rb +4 -2
  11. data/lib/validators/hostname.rb +12 -10
  12. data/lib/validators/ip.rb +7 -3
  13. data/lib/validators/tld.rb +5 -2
  14. data/lib/validators/validates_cnpj_format_of.rb +6 -2
  15. data/lib/validators/validates_cpf_format_of.rb +6 -2
  16. data/lib/validators/validates_datetime.rb +23 -22
  17. data/lib/validators/validates_email_format_of.rb +4 -2
  18. data/lib/validators/validates_hostname_format_of.rb +2 -0
  19. data/lib/validators/validates_ip_address.rb +5 -1
  20. data/lib/validators/validates_ownership_of.rb +5 -1
  21. data/lib/validators/validates_ssh_private_key.rb +5 -5
  22. data/lib/validators/validates_ssh_public_key.rb +3 -1
  23. data/lib/validators/validates_url_format_of.rb +11 -5
  24. data/lib/validators/version.rb +6 -4
  25. data/lib/validators.rb +2 -0
  26. data/test/schema.rb +2 -0
  27. data/test/support/dates.rb +4 -2
  28. data/test/support/emails.rb +8 -6
  29. data/test/support/hostnames.rb +6 -4
  30. data/test/support/ips.rb +4 -2
  31. data/test/support/models.rb +2 -0
  32. data/test/support/urls.rb +8 -7
  33. data/test/test_helper.rb +21 -6
  34. data/test/validators/disposable_email_test.rb +2 -0
  35. data/test/validators/ip_test.rb +2 -0
  36. data/test/validators/validates_cnpj_format_of_test.rb +22 -7
  37. data/test/validators/validates_cpf_format_of_test.rb +22 -7
  38. data/test/validators/validates_datetime/after_option_test.rb +27 -1
  39. data/test/validators/validates_datetime/before_option_test.rb +2 -0
  40. data/test/validators/validates_datetime/defaults_test.rb +2 -0
  41. data/test/validators/validates_email_format_of_test.rb +2 -0
  42. data/test/validators/validates_hostname_format_of/with_tld_validation_test.rb +2 -0
  43. data/test/validators/validates_hostname_format_of/without_tld_validation_test.rb +7 -0
  44. data/test/validators/validates_ip_address/ipv4_test.rb +8 -0
  45. data/test/validators/validates_ip_address/ipv6_test.rb +2 -0
  46. data/test/validators/validates_ip_address_test.rb +2 -0
  47. data/test/validators/validates_ownership_of_test.rb +2 -0
  48. data/test/validators/validates_ssh_private_key/bits_test.rb +12 -8
  49. data/test/validators/validates_ssh_private_key/common_test.rb +22 -7
  50. data/test/validators/validates_ssh_private_key/dsa_test.rb +12 -8
  51. data/test/validators/validates_ssh_private_key/rsa_test.rb +12 -8
  52. data/test/validators/validates_ssh_public_key_test.rb +22 -7
  53. data/test/validators/validates_url_format_of/with_tld_validation_test.rb +2 -0
  54. data/test/validators/validates_url_format_of/without_tld_validation_test.rb +2 -0
  55. data/validators.gemspec +12 -7
  56. metadata +52 -10
data/data/tld.json CHANGED
@@ -15,7 +15,6 @@
15
15
  "accountant",
16
16
  "accountants",
17
17
  "aco",
18
- "active",
19
18
  "actor",
20
19
  "ad",
21
20
  "adac",
@@ -145,7 +144,6 @@
145
144
  "bj",
146
145
  "black",
147
146
  "blackfriday",
148
- "blanco",
149
147
  "blockbuster",
150
148
  "blog",
151
149
  "bloomberg",
@@ -391,7 +389,6 @@
391
389
  "engineer",
392
390
  "engineering",
393
391
  "enterprises",
394
- "epost",
395
392
  "epson",
396
393
  "equipment",
397
394
  "er",
@@ -1151,13 +1148,13 @@
1151
1148
  "sony",
1152
1149
  "soy",
1153
1150
  "space",
1154
- "spiegel",
1155
1151
  "sport",
1156
1152
  "spot",
1157
1153
  "spreadbetting",
1158
1154
  "sr",
1159
1155
  "srl",
1160
1156
  "srt",
1157
+ "ss",
1161
1158
  "st",
1162
1159
  "stada",
1163
1160
  "staples",
@@ -1451,6 +1448,7 @@
1451
1448
  "xn--mgbaakc7dvf",
1452
1449
  "xn--mgbaam7a8h",
1453
1450
  "xn--mgbab2bd",
1451
+ "xn--mgbah1a3hjkrd",
1454
1452
  "xn--mgbai9azgqp6j",
1455
1453
  "xn--mgbayh7gpa",
1456
1454
  "xn--mgbb9fbpob",
@@ -1529,7 +1527,6 @@
1529
1527
  "zara",
1530
1528
  "zero",
1531
1529
  "zip",
1532
- "zippo",
1533
1530
  "zm",
1534
1531
  "zone",
1535
1532
  "zuerich",
@@ -1,29 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Validators
2
- EMAIL_FORMAT = /\A[a-z0-9]+([-._][a-z0-9]+)*(\+[^@]+)?@[a-z0-9]+([.-][a-z0-9]+)*\.[a-z]{2,}\z/i
3
- MICROSOFT_EMAIL_FORMAT = /\A[\w][\w\d._-]*[\w\d_-]+(\+[\w\d]+)?@(hotmail|outlook).com\z/i
4
+ EMAIL_FORMAT = /\A[a-z0-9]+([-._][a-z0-9]+)*(\+[^@]+)?@[a-z0-9]+([.-][a-z0-9]+)*\.[a-z]{2,}\z/i.freeze
5
+ MICROSOFT_EMAIL_FORMAT = /\A[\w][\w\d._-]*[\w\d_-]+(\+[\w\d]+)?@(hotmail|outlook).com\z/i.freeze
4
6
 
5
7
  # Source: https://github.com/henrik/validates_url_format_of
6
- IPv4_PART = /\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/ # 0-255
8
+ IPV4_PART = /\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/.freeze # 0-255
7
9
 
8
10
  URL_FORMAT = %r[
9
11
  \A
10
12
  https?:// # http:// or https://
11
13
  ([^\s:@]+:[^\s:@]*@)? # optional username:pw@
12
14
  ( (([^\W_]+\.)*xn--)?[^\W_]+([-.][^\W_]+)*\.[a-z]{2,6}\.? | # domain (including Punycode/IDN)...
13
- #{IPv4_PART}(\.#{IPv4_PART}){3} ) # or IPv4
15
+ #{IPV4_PART}(\.#{IPV4_PART}){3} ) # or IPv4
14
16
  (:\d{1,5})? # optional port
15
17
  ([/?]\S*)? # optional /whatever or ?whatever
16
18
  \z
17
- ]ixs
19
+ ]ixs.freeze
18
20
 
19
21
  URL_FORMAT_WITHOUT_TLD_VALIDATION = %r[
20
22
  \A
21
23
  https?:// # http:// or https://
22
24
  ([^\s:@]+:[^\s:@]*@)? # optional username:pw@
23
25
  ( (([^\W_]+\.)*xn--)?[^\W_]+([-.][^\W_]+)*\..{2,}\.? | # domain (including Punycode/IDN)...
24
- #{IPv4_PART}(\.#{IPv4_PART}){3} ) # or IPv4
26
+ #{IPV4_PART}(\.#{IPV4_PART}){3} ) # or IPv4
25
27
  (:\d{1,5})? # optional port
26
28
  ([/?]\S*)? # optional /whatever or ?whatever
27
29
  \z
28
- ]ixs
30
+ ]ixs.freeze
29
31
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Validators
2
4
  class DisposableHostnames
3
- FILE_PATH = File.expand_path("../../../data/disposable.json", __FILE__)
5
+ FILE_PATH = File.expand_path("../../data/disposable.json", __dir__)
4
6
 
5
7
  def self.all
6
- @tld ||= JSON.load(File.read(FILE_PATH))
8
+ @all ||= JSON.parse(File.read(FILE_PATH))
7
9
  end
8
10
  end
9
11
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Validators
2
4
  class Hostname
3
5
  def self.valid?(host)
@@ -5,22 +7,22 @@ module Validators
5
7
  uri = URI(host)
6
8
 
7
9
  host.present? &&
8
- uri.host.nil? &&
9
- uri.scheme.nil? &&
10
- uri.fragment.nil? &&
11
- uri.query.nil? &&
12
- uri.path == host &&
13
- host.split(".").all? {|label| valid_label?(label) } &&
14
- host.size <= 255 &&
15
- Validators::TLD.host_with_valid_tld?(host)
10
+ uri.host.nil? &&
11
+ uri.scheme.nil? &&
12
+ uri.fragment.nil? &&
13
+ uri.query.nil? &&
14
+ uri.path == host &&
15
+ host.split(".").all? {|label| valid_label?(label) } &&
16
+ host.size <= 255 &&
17
+ Validators::TLD.host_with_valid_tld?(host)
16
18
  rescue URI::InvalidURIError
17
19
  false
18
20
  end
19
21
 
20
22
  def self.valid_label?(label)
21
23
  !label.start_with?("-") &&
22
- !label.match(/\A\d+\z/) &&
23
- label.match(/\A[a-z0-9-]{1,63}\z/i)
24
+ !label.match(/\A\d+\z/) &&
25
+ label.match(/\A[a-z0-9-]{1,63}\z/i)
24
26
  end
25
27
  end
26
28
  end
data/lib/validators/ip.rb CHANGED
@@ -1,11 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Validators
2
4
  module Ip
3
- extend self
4
-
5
5
  # Extracted from Ruby 1.8.7
6
6
  def v4?(addr)
7
7
  matches = addr.match(/\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z/)
8
- matches && matches.captures.all? {|i| i.to_i < 256}
8
+ matches&.captures&.all? {|i| i.to_i < 256 }
9
9
  end
10
10
 
11
11
  # Extracted from Ruby 1.8.7
@@ -25,5 +25,9 @@ module Validators
25
25
  def valid?(addr)
26
26
  v4?(addr) || v6?(addr)
27
27
  end
28
+
29
+ module_function :v4?
30
+ module_function :v6?
31
+ module_function :valid?
28
32
  end
29
33
  end
@@ -1,13 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Validators
2
4
  class TLD
3
- FILE_PATH = File.expand_path("../../../data/tld.json", __FILE__)
5
+ FILE_PATH = File.expand_path("../../data/tld.json", __dir__)
4
6
 
5
7
  def self.all
6
- @tld ||= JSON.load(File.read(FILE_PATH))
8
+ @all ||= JSON.parse(File.read(FILE_PATH))
7
9
  end
8
10
 
9
11
  def self.host_with_valid_tld?(host)
10
12
  return false if host.split(".").size == 1
13
+
11
14
  valid? host[/\.([^.]+)$/, 1].to_s.downcase
12
15
  end
13
16
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class CnpjValidator < EachValidator
@@ -6,7 +8,9 @@ module ActiveModel
6
8
  return if value.nil? && options[:allow_nil]
7
9
  return if CNPJ.valid?(value)
8
10
 
9
- record.errors.add(attribute, :invalid_cnpj,
11
+ record.errors.add(
12
+ attribute,
13
+ :invalid_cnpj,
10
14
  message: options[:message],
11
15
  value: value
12
16
  )
@@ -24,7 +28,7 @@ module ActiveModel
24
28
  require "cnpj"
25
29
  validates_with CnpjValidator, _merge_attributes(attr_names)
26
30
  rescue LoadError
27
- fail "cpf_cnpj is not part of the bundle. Add it to Gemfile."
31
+ raise "cpf_cnpj is not part of the bundle. Add it to Gemfile."
28
32
  end
29
33
 
30
34
  alias_method :validates_cnpj, :validates_cnpj_format_of
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class CpfValidator < EachValidator
@@ -6,7 +8,9 @@ module ActiveModel
6
8
  return if value.nil? && options[:allow_nil]
7
9
  return if CPF.valid?(value)
8
10
 
9
- record.errors.add(attribute, :invalid_cpf,
11
+ record.errors.add(
12
+ attribute,
13
+ :invalid_cpf,
10
14
  message: options[:message],
11
15
  value: value
12
16
  )
@@ -24,7 +28,7 @@ module ActiveModel
24
28
  require "cpf"
25
29
  validates_with CpfValidator, _merge_attributes(attr_names)
26
30
  rescue LoadError
27
- fail "cpf_cnpj is not part of the bundle. Add it to Gemfile."
31
+ raise "cpf_cnpj is not part of the bundle. Add it to Gemfile."
28
32
  end
29
33
 
30
34
  alias_method :validates_cpf, :validates_cpf_format_of
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class DatetimeValidator < EachValidator
4
6
  def date?(value)
5
- value.kind_of?(Date) || value.kind_of?(Time)
7
+ value.is_a?(Date) || value.is_a?(Time)
6
8
  end
7
9
 
8
10
  def validate_each(record, attribute, value)
@@ -18,37 +20,36 @@ module ActiveModel
18
20
  )
19
21
  end
20
22
 
21
- if date?(value)
22
- validate_after_option(record, attribute, value)
23
- validate_before_option(record, attribute, value)
24
- end
23
+ return unless date?(value)
24
+
25
+ validate_after_option(record, attribute, value)
26
+ validate_before_option(record, attribute, value)
25
27
  end
26
28
 
27
- private
28
- def date_for(record, value, option)
29
+ private def date_for(record, value, option)
29
30
  date = case option
30
- when :today
31
- Date.today
32
- when :now
33
- Time.now
34
- when Time, Date, DateTime, ActiveSupport::TimeWithZone
35
- option
36
- when Proc
37
- option.call(record)
38
- else
39
- record.__send__(option) if record.respond_to?(option)
40
- end
31
+ when :today
32
+ Date.today
33
+ when :now
34
+ Time.now
35
+ when Time, Date, DateTime, ActiveSupport::TimeWithZone
36
+ option
37
+ when Proc
38
+ option.call(record)
39
+ else
40
+ record.__send__(option) if record.respond_to?(option)
41
+ end
41
42
 
42
- if date.kind_of?(Time)
43
+ if date.is_a?(Time)
43
44
  value = value.to_time
44
- elsif date.kind_of?(Date)
45
+ elsif date.is_a?(Date)
45
46
  value = value.to_date
46
47
  end
47
48
 
48
49
  [date, value]
49
50
  end
50
51
 
51
- def validate_after_option(record, attribute, value)
52
+ private def validate_after_option(record, attribute, value)
52
53
  return unless options[:after]
53
54
 
54
55
  date, value = date_for(record, value, options[:after])
@@ -64,7 +65,7 @@ module ActiveModel
64
65
  )
65
66
  end
66
67
 
67
- def validate_before_option(record, attribute, value)
68
+ private def validate_before_option(record, attribute, value)
68
69
  return unless options[:before]
69
70
 
70
71
  date, value = date_for(record, value, options[:before])
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class EmailValidator < EachValidator
4
- AT_SIGN = "@".freeze
6
+ AT_SIGN = "@"
5
7
 
6
8
  def validate_each(record, attribute, value)
7
9
  allow_disposable = options.fetch(:disposable, false)
@@ -39,7 +41,7 @@ module ActiveModel
39
41
  )
40
42
  end
41
43
 
42
- def validate_disposable_email(record, attribute, value, options)
44
+ def validate_disposable_email(record, attribute, value, _options)
43
45
  hostname = value.to_s.split(AT_SIGN).last.to_s.downcase
44
46
 
45
47
  return unless Validators::DisposableHostnames.all.include?(hostname)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class HostnameValidator < EachValidator
@@ -1,6 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class IpAddressValidator < EachValidator
6
+ PROTOCOL_OPTIONS = %i[v4 v6].freeze
7
+
4
8
  def validate_each(record, attribute, value)
5
9
  return if value.blank? && options[:allow_blank]
6
10
  return if value.nil? && options[:allow_nil]
@@ -30,7 +34,7 @@ module ActiveModel
30
34
 
31
35
  def check_validity!
32
36
  return unless options.key?(:only)
33
- return if [:v4, :v6].include?(options[:only])
37
+ return if PROTOCOL_OPTIONS.include?(options[:only])
34
38
 
35
39
  raise ArgumentError, ":only accepts a symbol that can be either :v6 or :v4"
36
40
  end
@@ -1,6 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class OwnershipValidator < EachValidator
6
+ WITH_OPTIONS = %w[String Symbol].freeze
7
+
4
8
  def validate_each(record, attribute, value)
5
9
  owner = record.send(options[:with])
6
10
  actual_owner = value ? value.send(options[:with]) : nil
@@ -17,7 +21,7 @@ module ActiveModel
17
21
 
18
22
  def check_validity!
19
23
  raise ArgumentError, ":with is required" unless options.key?(:with)
20
- raise ArgumentError, ":with option must be a string or a symbol" unless ["String", "Symbol"].include?(options[:with].class.name)
24
+ raise ArgumentError, ":with option must be a string or a symbol" unless WITH_OPTIONS.include?(options[:with].class.name)
21
25
  end
22
26
  end
23
27
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class SshPrivateKeyValidator < EachValidator
@@ -17,9 +19,7 @@ module ActiveModel
17
19
  )
18
20
  end
19
21
 
20
- private
21
-
22
- def validate_type(record, attribute, sshkey)
22
+ private def validate_type(record, attribute, sshkey)
23
23
  return unless options[:type]
24
24
 
25
25
  valid = [options[:type]].flatten.compact.map(&:to_s).include?(sshkey.type)
@@ -34,7 +34,7 @@ module ActiveModel
34
34
  )
35
35
  end
36
36
 
37
- def validate_bits(record, attribute, sshkey)
37
+ private def validate_bits(record, attribute, sshkey)
38
38
  return unless options[:bits]
39
39
  return if sshkey.bits >= options[:bits].to_i
40
40
 
@@ -59,7 +59,7 @@ module ActiveModel
59
59
  require "sshkey"
60
60
  validates_with SshPrivateKeyValidator, _merge_attributes(attr_names)
61
61
  rescue LoadError
62
- fail "sshkey is not part of the bundle. Add it to Gemfile."
62
+ raise "sshkey is not part of the bundle. Add it to Gemfile."
63
63
  end
64
64
  end
65
65
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class SshPublicKeyValidator < EachValidator
@@ -26,7 +28,7 @@ module ActiveModel
26
28
  require "sshkey"
27
29
  validates_with SshPublicKeyValidator, _merge_attributes(attr_names)
28
30
  rescue LoadError
29
- fail "sshkey is not part of the bundle. Add it to Gemfile."
31
+ raise "sshkey is not part of the bundle. Add it to Gemfile."
30
32
  end
31
33
  end
32
34
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveModel
2
4
  module Validations
3
5
  class UrlValidator < EachValidator
@@ -16,18 +18,22 @@ module ActiveModel
16
18
 
17
19
  def url?(url)
18
20
  uri = URI(url)
19
- regex = options[:tld] ? Validators::URL_FORMAT_WITHOUT_TLD_VALIDATION :
20
- Validators::URL_FORMAT
21
+ regex = if options[:tld]
22
+ Validators::URL_FORMAT_WITHOUT_TLD_VALIDATION
23
+ else
24
+ Validators::URL_FORMAT
25
+ end
21
26
 
22
- uri.kind_of?(URI::HTTP) &&
23
- url.match(regex) &&
24
- valid_tld?(uri.host)
27
+ uri.is_a?(URI::HTTP) &&
28
+ url.match(regex) &&
29
+ valid_tld?(uri.host)
25
30
  rescue URI::InvalidURIError
26
31
  false
27
32
  end
28
33
 
29
34
  def valid_tld?(host)
30
35
  return true unless options[:tld]
36
+
31
37
  Validators::TLD.host_with_valid_tld?(host)
32
38
  end
33
39
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Validators
2
4
  module Version
3
- MAJOR = 2
4
- MINOR = 8
5
- PATCH = 1
6
- STRING = "#{MAJOR}.#{MINOR}.#{PATCH}".freeze
5
+ MAJOR = 3
6
+ MINOR = 0
7
+ PATCH = 0
8
+ STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
9
  end
8
10
  end
data/lib/validators.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "json"
2
4
 
3
5
  module Validators
data/test/schema.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Schema.define(version: 0) do
2
4
  create_table :users do |t|
3
5
  t.string :email, :corporate_email, :url
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  VALID_DATES = [
2
4
  "2010-04-26",
3
5
  "2010-04-26 23:59:00",
@@ -9,11 +11,11 @@ VALID_DATES = [
9
11
  Date.today,
10
12
  DateTime.now,
11
13
  Time.zone.now
12
- ]
14
+ ].freeze
13
15
 
14
16
  INVALID_DATES = [
15
17
  "invalid",
16
18
  nil,
17
19
  "",
18
20
  "4/26"
19
- ]
21
+ ].freeze
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  INVALID_EMAILS = [
2
4
  "invalid@example-com",
3
5
  # period can not start local part
@@ -19,12 +21,12 @@ INVALID_EMAILS = [
19
21
  "invalid@example.",
20
22
  # from http://tools.ietf.org/html/rfc3696, page 5
21
23
  # corrected in http://www.rfc-editor.org/errata_search.php?rfc=3696
22
- 'Fred\ Bloggs_@example.com',
24
+ "Fred\ Bloggs_@example.com",
23
25
  'Abc\@def+@example.com',
24
26
  'Joe.\\Blow@example.com',
25
- 'invalid.@hotmail.com',
26
- 'invalid.@outlook.com',
27
- ]
27
+ "invalid.@hotmail.com",
28
+ "invalid.@outlook.com"
29
+ ].freeze
28
30
 
29
31
  VALID_EMAILS = [
30
32
  "valid@somedomain.com",
@@ -46,5 +48,5 @@ VALID_EMAILS = [
46
48
  "valid_-_-_-_-_-_@hotmail.com",
47
49
  "valid_-_-_-_-_-_@outlook.com",
48
50
  "sub_total-5+8@hotmail.com",
49
- "sub_total-5+8@outlook.com",
50
- ]
51
+ "sub_total-5+8@outlook.com"
52
+ ].freeze
@@ -1,4 +1,6 @@
1
- VALID_HOSTNAMES = %W[
1
+ # frozen_string_literal: true
2
+
3
+ VALID_HOSTNAMES = %w[
2
4
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com
3
5
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com
4
6
  a-b.com
@@ -7,12 +9,12 @@ VALID_HOSTNAMES = %W[
7
9
  123a.com
8
10
  ABC123.com
9
11
  123ABC.com
10
- ]
12
+ ].freeze
11
13
 
12
14
  INVALID_HOSTNAMES = %W[
13
15
  192.168.42.42
14
16
  a..com
15
- #{'a'*64}.com
17
+ #{'a' * 64}.com
16
18
  http://example.com
17
19
  https://example.com
18
20
  example.com?a=1
@@ -23,4 +25,4 @@ INVALID_HOSTNAMES = %W[
23
25
  example.1234.com
24
26
  example_domain.com
25
27
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com
26
- ]
28
+ ].freeze
data/test/support/ips.rb CHANGED
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  VALID_IPV4 = [
2
4
  "192.168.1.1",
3
5
  "64.233.163.104",
4
6
  "127.0.0.1",
5
7
  "0.0.0.0"
6
- ]
8
+ ].freeze
7
9
 
8
10
  VALID_IPV6 = [
9
11
  "FE80:0000:0000:0000:0202:B3FF:FE1E:8329",
@@ -17,4 +19,4 @@ VALID_IPV6 = [
17
19
  "3ffe:1900:4545:3:200:f8ff:fe21:67cf",
18
20
  "fe80:0:0:0:200:f8ff:fe21:67cf",
19
21
  "fe80::200:f8ff:fe21:67cf"
20
- ]
22
+ ].freeze
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class User < ActiveRecord::Base
2
4
  has_many :tasks
3
5
  has_many :categories
data/test/support/urls.rb CHANGED
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  VALID_URLS = [
3
4
  "http://example.com",
4
5
  "http://example.com/",
@@ -17,14 +18,14 @@ VALID_URLS = [
17
18
  "http://1.2.3.4:80",
18
19
  "HttP://example.com",
19
20
  "https://example.com",
20
- # "http://räksmörgås.nu", # IDN
21
- "http://xn--rksmrgs-5wao1o.nu", # Punycode
21
+ # "http://räksmörgås.nu", # IDN
22
+ "http://xn--rksmrgs-5wao1o.nu", # Punycode
22
23
  "http://www.xn--rksmrgs-5wao1o.nu",
23
24
  "http://foo.bar.xn--rksmrgs-5wao1o.nu",
24
- "http://example.xy", # Only valid TLD
25
- "http://example.com.", # Explicit TLD root period
25
+ "http://example.xy", # Only valid TLD
26
+ "http://example.com.", # Explicit TLD root period
26
27
  "http://example.com./foo"
27
- ]
28
+ ].freeze
28
29
 
29
30
  INVALID_URLS = [
30
31
  "url",
@@ -40,4 +41,4 @@ INVALID_URLS = [
40
41
  "http://example",
41
42
  "http://example.c",
42
43
  "http://example.toolongtld"
43
- ]
44
+ ].freeze