lite-validators 1.3.2 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c37efc593f813e90d3bdd6969673232ce5fb342e7bca15b149fd2315bc25926
4
- data.tar.gz: e295cb6a4173f32d656a2ad209c2506afe12e21319f157fc414cb218338e1286
3
+ metadata.gz: e1e56debf660c1cb16481c4ba7e331c1d5f36f6666484b111fd4f54fd5dfe680
4
+ data.tar.gz: 1b2b174b568d7e5f2a830fb98acd79064672477911d9ab2f2ce9128e22b4fbb5
5
5
  SHA512:
6
- metadata.gz: 60a0f783a9c482a6dda7da03371c83707d9daa9589955dac3ba9e6de75cf3eafc88006d9320312bc5b4ffbdab071b3168232d8843cb7b424f88cbdb9ad159774
7
- data.tar.gz: 97420a77ce746cca98d4cf074d700c6df49035a15c8416a87633823c1506428e8f8a23fd0f79aa8b47962db0a51531b132dbc3a2c632776672525cc0eeacad56
6
+ metadata.gz: b6bff3d5c92d63169e7fe5a73e88383d3e40a17e1a18ece15fa5efea477acdf577618d4ef4b5e9e3498b7bd50de77a4af53b2d468e368053c5f2180b6f9d6fbe
7
+ data.tar.gz: 48b1f4e567f69000dd903420c7e0d3d93d55568c34cd00c3849cbd8678fa528f0d14c366e51c2f4921e2b706970ab2c135a0f805e9047b13669d709710af3f8e
data/.rubocop.yml CHANGED
@@ -7,6 +7,8 @@ AllCops:
7
7
  NewCops: enable
8
8
  DisplayCopNames: true
9
9
  DisplayStyleGuide: true
10
+ Gemspec/RequireMFA:
11
+ Enabled: false
10
12
  Gemspec/RequiredRubyVersion:
11
13
  Enabled: false
12
14
  Layout/EmptyLinesAroundAttributeAccessor:
data/CHANGELOG.md CHANGED
@@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.4.0] - 2022-02-11
10
+ ### Changed
11
+ - Added `include_host` to url validator
12
+ - Added `exclude_host` to url validator
13
+
9
14
  ## [1.3.2] - 2021-07-22
10
15
  ### Changed
11
16
  - Improved setup
data/Gemfile.lock CHANGED
@@ -1,89 +1,89 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-validators (1.3.2)
4
+ lite-validators (1.4.0)
5
5
  activemodel
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actionpack (6.1.4)
11
- actionview (= 6.1.4)
12
- activesupport (= 6.1.4)
13
- rack (~> 2.0, >= 2.0.9)
10
+ actionpack (7.0.2.2)
11
+ actionview (= 7.0.2.2)
12
+ activesupport (= 7.0.2.2)
13
+ rack (~> 2.0, >= 2.2.0)
14
14
  rack-test (>= 0.6.3)
15
15
  rails-dom-testing (~> 2.0)
16
16
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
17
- actionview (6.1.4)
18
- activesupport (= 6.1.4)
17
+ actionview (7.0.2.2)
18
+ activesupport (= 7.0.2.2)
19
19
  builder (~> 3.1)
20
20
  erubi (~> 1.4)
21
21
  rails-dom-testing (~> 2.0)
22
22
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
23
- activemodel (6.1.4)
24
- activesupport (= 6.1.4)
25
- activesupport (6.1.4)
23
+ activemodel (7.0.2.2)
24
+ activesupport (= 7.0.2.2)
25
+ activesupport (7.0.2.2)
26
26
  concurrent-ruby (~> 1.0, >= 1.0.2)
27
27
  i18n (>= 1.6, < 2)
28
28
  minitest (>= 5.1)
29
29
  tzinfo (~> 2.0)
30
- zeitwerk (~> 2.3)
31
30
  ast (2.4.2)
32
31
  builder (3.2.4)
33
32
  colorize (0.8.1)
34
33
  concurrent-ruby (1.1.9)
35
34
  crass (1.0.6)
36
- diff-lcs (1.4.4)
35
+ diff-lcs (1.5.0)
37
36
  erubi (1.10.0)
38
37
  fasterer (0.9.0)
39
38
  colorize (~> 0.7)
40
39
  ruby_parser (>= 3.14.1)
41
- i18n (1.8.10)
40
+ i18n (1.9.1)
42
41
  concurrent-ruby (~> 1.0)
43
- loofah (2.10.0)
42
+ loofah (2.14.0)
44
43
  crass (~> 1.0.2)
45
44
  nokogiri (>= 1.5.9)
46
45
  method_source (1.0.0)
47
- mini_portile2 (2.5.3)
48
- minitest (5.14.4)
49
- nokogiri (1.11.7)
50
- mini_portile2 (~> 2.5.0)
46
+ mini_portile2 (2.7.1)
47
+ minitest (5.15.0)
48
+ nokogiri (1.13.1)
49
+ mini_portile2 (~> 2.7.0)
51
50
  racc (~> 1.4)
52
- parallel (1.20.1)
53
- parser (3.0.2.0)
51
+ parallel (1.21.0)
52
+ parser (3.1.0.0)
54
53
  ast (~> 2.4.1)
55
- racc (1.5.2)
54
+ racc (1.6.0)
56
55
  rack (2.2.3)
57
56
  rack-test (1.1.0)
58
57
  rack (>= 1.0, < 3)
59
58
  rails-dom-testing (2.0.3)
60
59
  activesupport (>= 4.2.0)
61
60
  nokogiri (>= 1.6)
62
- rails-html-sanitizer (1.3.0)
61
+ rails-html-sanitizer (1.4.2)
63
62
  loofah (~> 2.3)
64
- railties (6.1.4)
65
- actionpack (= 6.1.4)
66
- activesupport (= 6.1.4)
63
+ railties (7.0.2.2)
64
+ actionpack (= 7.0.2.2)
65
+ activesupport (= 7.0.2.2)
67
66
  method_source
68
- rake (>= 0.13)
67
+ rake (>= 12.2)
69
68
  thor (~> 1.0)
70
- rainbow (3.0.0)
69
+ zeitwerk (~> 2.5)
70
+ rainbow (3.1.1)
71
71
  rake (13.0.6)
72
- regexp_parser (2.1.1)
72
+ regexp_parser (2.2.0)
73
73
  rexml (3.2.5)
74
- rspec (3.10.0)
75
- rspec-core (~> 3.10.0)
76
- rspec-expectations (~> 3.10.0)
77
- rspec-mocks (~> 3.10.0)
78
- rspec-core (3.10.1)
79
- rspec-support (~> 3.10.0)
80
- rspec-expectations (3.10.1)
74
+ rspec (3.11.0)
75
+ rspec-core (~> 3.11.0)
76
+ rspec-expectations (~> 3.11.0)
77
+ rspec-mocks (~> 3.11.0)
78
+ rspec-core (3.11.0)
79
+ rspec-support (~> 3.11.0)
80
+ rspec-expectations (3.11.0)
81
81
  diff-lcs (>= 1.2.0, < 2.0)
82
- rspec-support (~> 3.10.0)
83
- rspec-mocks (3.10.2)
82
+ rspec-support (~> 3.11.0)
83
+ rspec-mocks (3.11.0)
84
84
  diff-lcs (>= 1.2.0, < 2.0)
85
- rspec-support (~> 3.10.0)
86
- rspec-rails (5.0.1)
85
+ rspec-support (~> 3.11.0)
86
+ rspec-rails (5.1.0)
87
87
  actionpack (>= 5.2)
88
88
  activesupport (>= 5.2)
89
89
  railties (>= 5.2)
@@ -91,35 +91,34 @@ GEM
91
91
  rspec-expectations (~> 3.10)
92
92
  rspec-mocks (~> 3.10)
93
93
  rspec-support (~> 3.10)
94
- rspec-support (3.10.2)
95
- rubocop (1.18.3)
94
+ rspec-support (3.11.0)
95
+ rubocop (1.25.1)
96
96
  parallel (~> 1.10)
97
- parser (>= 3.0.0.0)
97
+ parser (>= 3.1.0.0)
98
98
  rainbow (>= 2.2.2, < 4.0)
99
99
  regexp_parser (>= 1.8, < 3.0)
100
100
  rexml
101
- rubocop-ast (>= 1.7.0, < 2.0)
101
+ rubocop-ast (>= 1.15.1, < 2.0)
102
102
  ruby-progressbar (~> 1.7)
103
103
  unicode-display_width (>= 1.4.0, < 3.0)
104
- rubocop-ast (1.8.0)
104
+ rubocop-ast (1.15.1)
105
105
  parser (>= 3.0.1.1)
106
- rubocop-performance (1.11.4)
106
+ rubocop-performance (1.13.2)
107
107
  rubocop (>= 1.7.0, < 2.0)
108
108
  rubocop-ast (>= 0.4.0)
109
109
  rubocop-rake (0.6.0)
110
110
  rubocop (~> 1.0)
111
- rubocop-rspec (2.4.0)
112
- rubocop (~> 1.0)
113
- rubocop-ast (>= 1.1.0)
111
+ rubocop-rspec (2.8.0)
112
+ rubocop (~> 1.19)
114
113
  ruby-progressbar (1.11.0)
115
- ruby_parser (3.16.0)
116
- sexp_processor (~> 4.15, >= 4.15.1)
117
- sexp_processor (4.15.3)
118
- thor (1.1.0)
114
+ ruby_parser (3.18.1)
115
+ sexp_processor (~> 4.16)
116
+ sexp_processor (4.16.0)
117
+ thor (1.2.1)
119
118
  tzinfo (2.0.4)
120
119
  concurrent-ruby (~> 1.0)
121
- unicode-display_width (2.0.0)
122
- zeitwerk (2.4.2)
120
+ unicode-display_width (2.1.0)
121
+ zeitwerk (2.5.4)
123
122
 
124
123
  PLATFORMS
125
124
  ruby
data/docs/URL.md CHANGED
@@ -22,7 +22,9 @@ class User < ActiveRecord::Base
22
22
  validates :input0, url: true
23
23
  validates :input1, url: { domain: [:com, 'org'] }
24
24
  validates :input2, url: { scheme: :https }
25
- validates :input3, url: { root_only: true }
25
+ validates :input3, url: { include_host: ['example', 'test.org'] }
26
+ validates :input4, url: { exclude_host: ['example', 'test.org'] }
27
+ validates :input5, url: { root_only: true }
26
28
 
27
29
  end
28
30
  ```
@@ -18,7 +18,7 @@ class CusipValidator < BaseValidator
18
18
  odd_values = digits.values_at(*digits.each_index.select(&:odd?))
19
19
 
20
20
  values = odd_values.map { |int| int * 2 }.zip(even_values).flatten
21
- values = values.inject(0) { |sum, int| sum + (int / 10) + int % 10 }
21
+ values = values.inject(0) { |sum, int| sum + (int / 10) + (int % 10) }
22
22
 
23
23
  ((10 - values) % 10) % 10
24
24
  end
@@ -17,7 +17,7 @@ class SedolValidator < BaseValidator
17
17
  total = 0
18
18
  digits = value.chars.map { |dgt| /[A-Z]/.match?(dgt) ? (dgt.ord - 55) : dgt.to_i }
19
19
  digits.each_with_index { |dgt, idx| total += (WEIGHTS[idx] * dgt) }
20
- (10 - total % 10) % 10
20
+ (10 - (total % 10)) % 10
21
21
  end
22
22
 
23
23
  end
@@ -11,27 +11,23 @@ class UrlValidator < BaseValidator
11
11
  def validate_each(record, attribute, value)
12
12
  assign_attr_readers(record, attribute, URI.parse(value.to_s))
13
13
  valid_attr?
14
- rescue URI::InvalidURIError
14
+ rescue URI::BadURIError, URI::InvalidURIError
15
15
  record.errors.add(attribute, *error_message)
16
16
  end
17
17
 
18
18
  private
19
19
 
20
- def scheme
21
- options[:scheme] || UrlValidator::SCHEMES
22
- end
23
-
24
20
  def error_message_for(option)
25
21
  options[:message] || I18n.t("errors.messages.url.#{option}")
26
22
  end
27
23
 
24
+ # rubocop:disable Layout/LineLength, Metrics/AbcSize
28
25
  def valid_attr?
29
26
  raise URI::InvalidURIError if value.to_s.strip.empty?
30
27
 
31
- valid_uri? && valid_domain? && valid_scheme? && valid_root?
28
+ valid_uri? && valid_host? && valid_domain? && valid_scheme? && valid_root?
32
29
  end
33
30
 
34
- # rubocop:disable Layout/LineLength, Metrics/AbcSize
35
31
  def valid_domain?
36
32
  return true unless options[:domain]
37
33
 
@@ -39,7 +35,16 @@ class UrlValidator < BaseValidator
39
35
  check = Array(options[:domain]).any? { |domain| value_downcased.end_with?(".#{domain.downcase}") }
40
36
  record.errors.add(attribute, error_message_for(:domain)) unless check
41
37
  end
42
- # rubocop:enable Layout/LineLength, Metrics/AbcSize
38
+
39
+ def valid_host?
40
+ hosts = options[:include_host] || options[:exclude_host]
41
+ return true unless hosts
42
+
43
+ value_downcased = value.host.to_s.downcase
44
+ check = options[:include_host] ? :any? : :none?
45
+ check = Array(hosts).send(check) { |host| value_downcased.include?(host.to_s.downcase) }
46
+ record.errors.add(attribute, error_message_for(:host)) unless check
47
+ end
43
48
 
44
49
  def valid_root?
45
50
  return true unless options[:root_only]
@@ -52,12 +57,14 @@ class UrlValidator < BaseValidator
52
57
  return true unless options[:scheme]
53
58
 
54
59
  value_downcased = value.scheme.to_s.downcase
55
- check = Array(scheme).any? { |sch| value_downcased == sch.to_s.downcase }
60
+ schemes = options[:scheme] || SCHEMES
61
+ check = Array(schemes).any? { |scheme| value_downcased == scheme.to_s.downcase }
56
62
  record.errors.add(attribute, error_message_for(:scheme)) unless check
57
63
  end
58
64
 
59
65
  def valid_uri?
60
66
  value.is_a?(URI::Generic)
61
67
  end
68
+ # rubocop:enable Layout/LineLength, Metrics/AbcSize
62
69
 
63
70
  end
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Validators
5
5
 
6
- VERSION = '1.3.2'
6
+ VERSION = '1.4.0'
7
7
 
8
8
  end
9
9
  end
data/lib/locales/en.yml CHANGED
@@ -23,5 +23,6 @@ en:
23
23
  not_equal_to: "file size is equal to %{count} but shouldn't"
24
24
  url:
25
25
  domain: "has an invalid domain"
26
+ host: "has an invalid host"
26
27
  root: "has a url path but shouldn't"
27
28
  scheme: "has an invalid scheme"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lite-validators
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-22 00:00:00.000000000 Z
11
+ date: 2022-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -274,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
274
  - !ruby/object:Gem::Version
275
275
  version: '0'
276
276
  requirements: []
277
- rubygems_version: 3.2.24
277
+ rubygems_version: 3.3.4
278
278
  signing_key:
279
279
  specification_version: 4
280
280
  summary: Collection of ActiveModel/ActiveRecord validators