lite-validators 1.5.0 → 1.7.1

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: ade5bbd1d906e70f20bc1b5e5187604f2fd6775e88ece1e3c46032428853b77c
4
- data.tar.gz: '0284aa1c3c38963f35fa9f3907a702bb5217ebda36902262232b6aa8730d67a0'
3
+ metadata.gz: 0cbc212144b10828145cc04c3117cd994c6b5b5ffd6539b8e9cb08d45e05b15b
4
+ data.tar.gz: 31deca154872899b7faa80838416c68c1830d97982c948301dc373238bc1a3b1
5
5
  SHA512:
6
- metadata.gz: f7cc8549f33870a80054ab8b9e2429acda6cc5d4298063b8a0ed42a09ef4dca81e32e364f16fa4dc1db6170770ed0394340e973e6adc41f0a9b2bea422c75054
7
- data.tar.gz: 77cd74e2c98c3258bfcb5caabfd4c06e931c9e6bb722e1f5d7b253c5cb9d14c92abbffce230fed9276474d0ba461da0e3636e40a8a6ccf6518920aa837c8915f
6
+ metadata.gz: da30d06d89209f263bd559b008db96618947228c0a4ca358df3301fdbcc09adcfe04e6e2b0b07d426ca15cff22baf8e804deefc21e80e08b94372d2bee912535
7
+ data.tar.gz: a6219df0e0563e79ded1216f7b81794bbf02f85aa4c68fa69b395b0a31a9a2286a3d35076dc9a1aadd67955f6badf63b76dd06f69b4437d633f92183d583d646
data/CHANGELOG.md CHANGED
@@ -6,6 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.7.1] - 2022-03-17
10
+ ### Changed
11
+ - Added polymorphic support to reference validator
12
+
13
+ ## [1.7.0] - 2022-03-17
14
+ ### Added
15
+ - Added Reference validator
16
+
17
+ ## [1.6.0] - 2022-02-17
18
+ ### Added
19
+ - Added List validator
20
+ ### Changed
21
+ - Update to use public_send instead of send
22
+
9
23
  ## [1.5.0] - 2022-02-17
10
24
  ### Changed
11
25
  - Added `include_address` to ip_address validator
data/Gemfile.lock CHANGED
@@ -1,28 +1,28 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-validators (1.5.0)
4
+ lite-validators (1.7.1)
5
5
  activemodel
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actionpack (7.0.2.2)
11
- actionview (= 7.0.2.2)
12
- activesupport (= 7.0.2.2)
10
+ actionpack (7.0.2.3)
11
+ actionview (= 7.0.2.3)
12
+ activesupport (= 7.0.2.3)
13
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 (7.0.2.2)
18
- activesupport (= 7.0.2.2)
17
+ actionview (7.0.2.3)
18
+ activesupport (= 7.0.2.3)
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 (7.0.2.2)
24
- activesupport (= 7.0.2.2)
25
- activesupport (7.0.2.2)
23
+ activemodel (7.0.2.3)
24
+ activesupport (= 7.0.2.3)
25
+ activesupport (7.0.2.3)
26
26
  concurrent-ruby (~> 1.0, >= 1.0.2)
27
27
  i18n (>= 1.6, < 2)
28
28
  minitest (>= 5.1)
@@ -39,17 +39,17 @@ GEM
39
39
  ruby_parser (>= 3.14.1)
40
40
  i18n (1.10.0)
41
41
  concurrent-ruby (~> 1.0)
42
- loofah (2.14.0)
42
+ loofah (2.15.0)
43
43
  crass (~> 1.0.2)
44
44
  nokogiri (>= 1.5.9)
45
45
  method_source (1.0.0)
46
- mini_portile2 (2.7.1)
46
+ mini_portile2 (2.8.0)
47
47
  minitest (5.15.0)
48
- nokogiri (1.13.1)
49
- mini_portile2 (~> 2.7.0)
48
+ nokogiri (1.13.3)
49
+ mini_portile2 (~> 2.8.0)
50
50
  racc (~> 1.4)
51
51
  parallel (1.21.0)
52
- parser (3.1.0.0)
52
+ parser (3.1.1.0)
53
53
  ast (~> 2.4.1)
54
54
  racc (1.6.0)
55
55
  rack (2.2.3)
@@ -60,9 +60,9 @@ GEM
60
60
  nokogiri (>= 1.6)
61
61
  rails-html-sanitizer (1.4.2)
62
62
  loofah (~> 2.3)
63
- railties (7.0.2.2)
64
- actionpack (= 7.0.2.2)
65
- activesupport (= 7.0.2.2)
63
+ railties (7.0.2.3)
64
+ actionpack (= 7.0.2.3)
65
+ activesupport (= 7.0.2.3)
66
66
  method_source
67
67
  rake (>= 12.2)
68
68
  thor (~> 1.0)
@@ -83,7 +83,7 @@ GEM
83
83
  rspec-mocks (3.11.0)
84
84
  diff-lcs (>= 1.2.0, < 2.0)
85
85
  rspec-support (~> 3.11.0)
86
- rspec-rails (5.1.0)
86
+ rspec-rails (5.1.1)
87
87
  actionpack (>= 5.2)
88
88
  activesupport (>= 5.2)
89
89
  railties (>= 5.2)
@@ -92,23 +92,23 @@ GEM
92
92
  rspec-mocks (~> 3.10)
93
93
  rspec-support (~> 3.10)
94
94
  rspec-support (3.11.0)
95
- rubocop (1.25.1)
95
+ rubocop (1.26.0)
96
96
  parallel (~> 1.10)
97
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.15.1, < 2.0)
101
+ rubocop-ast (>= 1.16.0, < 2.0)
102
102
  ruby-progressbar (~> 1.7)
103
103
  unicode-display_width (>= 1.4.0, < 3.0)
104
- rubocop-ast (1.15.2)
105
- parser (>= 3.0.1.1)
106
- rubocop-performance (1.13.2)
104
+ rubocop-ast (1.16.0)
105
+ parser (>= 3.1.1.0)
106
+ rubocop-performance (1.13.3)
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.8.0)
111
+ rubocop-rspec (2.9.0)
112
112
  rubocop (~> 1.19)
113
113
  ruby-progressbar (1.11.0)
114
114
  ruby_parser (3.18.1)
data/README.md CHANGED
@@ -51,10 +51,12 @@ Or install it yourself as:
51
51
  * [IP address](https://github.com/drexed/lite-validators/blob/master/docs/IP_ADDRESS.md)
52
52
  * [ISBN](https://github.com/drexed/lite-validators/blob/master/docs/ISBN.md)
53
53
  * [ISIN](https://github.com/drexed/lite-validators/blob/master/docs/ISIN.md)
54
+ * [List](https://github.com/drexed/lite-validators/blob/master/docs/LIST.md)
54
55
  * [MAC address](https://github.com/drexed/lite-validators/blob/master/docs/MAC.md)
55
56
  * [Name](https://github.com/drexed/lite-validators/blob/master/docs/NAME.md)
56
57
  * [Password](https://github.com/drexed/lite-validators/blob/master/docs/PASSWORD.md)
57
58
  * [Phone number](https://github.com/drexed/lite-validators/blob/master/docs/PHONE_NUMBER.md)
59
+ * [Reference](https://github.com/drexed/lite-validators/blob/master/docs/REFERENCE.md)
58
60
  * [SEDOL](https://github.com/drexed/lite-validators/blob/master/docs/SEDOL.md)
59
61
  * [Slug](https://github.com/drexed/lite-validators/blob/master/docs/SLUG.md)
60
62
  * [SSN](https://github.com/drexed/lite-validators/blob/master/docs/SSN.md)
data/docs/LIST.md ADDED
@@ -0,0 +1,28 @@
1
+ # List
2
+
3
+ #### Rules
4
+
5
+ ```ruby
6
+ # 1. Check
7
+ ```
8
+
9
+ #### Options
10
+
11
+ Option | Type | Available | Default
12
+ --- | --- | --- | ---
13
+ all | array | |
14
+ any | array | |
15
+ none | array | |
16
+
17
+ #### Usage
18
+
19
+ ```ruby
20
+ class User < ActiveRecord::Base
21
+
22
+ validates :input0, list: { all: %w[monday tuesday] }
23
+ validates :input1, list: { any: %w[saturday sunday] }
24
+ validates :input2, list: { none: %w[wednesday thursday] }
25
+ validates :input3, list: { any: %w[saturday sunday], none: %w[wednesday thursday] }
26
+
27
+ end
28
+ ```
data/docs/REFERENCE.md ADDED
@@ -0,0 +1,27 @@
1
+ # Reference
2
+
3
+ #### Rules
4
+
5
+ ```ruby
6
+ # 1. Pattern
7
+ /\A[+-]?\d+\z/
8
+ ```
9
+
10
+ #### Options
11
+
12
+ Option | Type | Available | Default
13
+ --- | --- | --- | ---
14
+ association | symbol | object method | attribute without `_id`
15
+ polymorphic | symbol | true, false | false
16
+
17
+ #### Usage
18
+
19
+ ```ruby
20
+ class User < ActiveRecord::Base
21
+
22
+ validates :input_id, reference: true
23
+ validates :output_id, reference: { polymorphic: true }
24
+ validates :output_id, reference: { association: :input }
25
+
26
+ end
27
+ ```
@@ -34,8 +34,8 @@ class CompareValidator < BaseValidator
34
34
  end
35
35
 
36
36
  def valid_attr?
37
- other = record.send(options[:to])
38
- value.send(CHECKS[check], other)
37
+ other = record.public_send(options[:to])
38
+ value.public_send(CHECKS[check], other)
39
39
  end
40
40
 
41
41
  end
@@ -59,9 +59,9 @@ class FileSizeValidator < BaseValidator
59
59
  return false if size.nil?
60
60
 
61
61
  if option_value.is_a?(Range)
62
- option_value.send(CHECKS[option], size)
62
+ option_value.public_send(CHECKS[option], size)
63
63
  else
64
- size.send(CHECKS[option], option_value)
64
+ size.public_send(CHECKS[option], option_value)
65
65
  end
66
66
  end
67
67
 
@@ -37,7 +37,7 @@ class IpAddressValidator < BaseValidator
37
37
  return true unless addresses
38
38
 
39
39
  check = options[:include_address] ? :any? : :none?
40
- check = Array(addresses).send(check) { |address| value.include?(address.to_s) }
40
+ check = Array(addresses).public_send(check) { |address| value.include?(address.to_s) }
41
41
  return true if check
42
42
 
43
43
  record.errors.add(attribute, error_message_for(:address))
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ListValidator < BaseValidator
4
+
5
+ def validate_each(record, attribute, value)
6
+ assert_valid_all_or_any_or_none!
7
+ assign_attr_readers(record, attribute, value)
8
+ valid?
9
+ end
10
+
11
+ private
12
+
13
+ def assert_valid_all_or_any_or_none!
14
+ return if options.key?(:all) || options.key?(:any) || options.key?(:none)
15
+
16
+ raise ArgumentError, 'Missing ":all", ":any" or ":none" attribute for comparison.'
17
+ end
18
+
19
+ def valid_attr?
20
+ options.slice(:all, :any, :none).each do |option, option_value|
21
+ validate_check(option, option_value)
22
+ end
23
+ end
24
+
25
+ def valid_content_type?(option, option_value)
26
+ Array(value).public_send("#{option}?") { |val| option_value.include?(val) }
27
+ end
28
+
29
+ def validate_check(option, option_value)
30
+ return if valid_content_type?(option, option_value)
31
+
32
+ record.errors.add(attribute, *error_message)
33
+ end
34
+
35
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ReferenceValidator < BaseValidator
4
+
5
+ REGEXP = /\A[+-]?\d+\z/
6
+
7
+ private
8
+
9
+ def valid?
10
+ (valid_id? && valid_type?) || valid_object?
11
+ end
12
+
13
+ def valid_id?
14
+ if value.blank?
15
+ false
16
+ elsif !valid_regexp?
17
+ record.errors.add(attribute, *error_message)
18
+ else
19
+ !value.to_i.negative?
20
+ end
21
+ end
22
+
23
+ def valid_object?
24
+ association_object = options[:association] || attribute.to_s.chomp('_id')
25
+ return true if record.send(association_object).present?
26
+
27
+ record.errors.add(association_object, *error_message)
28
+ end
29
+
30
+ def valid_type?
31
+ return true unless options[:polymorphic]
32
+
33
+ association_type = "#{attribute.to_s.chomp('_id')}_type"
34
+ record.send(association_type).present?
35
+ end
36
+
37
+ end
@@ -44,7 +44,7 @@ class UrlValidator < BaseValidator
44
44
 
45
45
  value_downcased = value.host.to_s.downcase
46
46
  check = options[:include_host] ? :any? : :none?
47
- check = Array(hosts).send(check) { |host| value_downcased.include?(host.to_s.downcase) }
47
+ check = Array(hosts).public_send(check) { |host| value_downcased.include?(host.to_s.downcase) }
48
48
  return true if check
49
49
 
50
50
  record.errors.add(attribute, error_message_for(:host))
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Validators
5
5
 
6
- VERSION = '1.5.0'
6
+ VERSION = '1.7.1'
7
7
 
8
8
  end
9
9
  end
@@ -25,10 +25,12 @@ require 'lite/validators/imei_validator'
25
25
  require 'lite/validators/ip_address_validator'
26
26
  require 'lite/validators/isbn_validator'
27
27
  require 'lite/validators/isin_validator'
28
+ require 'lite/validators/list_validator'
28
29
  require 'lite/validators/mac_address_validator'
29
30
  require 'lite/validators/name_validator'
30
31
  require 'lite/validators/password_validator'
31
32
  require 'lite/validators/phone_number_validator'
33
+ require 'lite/validators/reference_validator'
32
34
  require 'lite/validators/sedol_validator'
33
35
  require 'lite/validators/slug_validator'
34
36
  require 'lite/validators/ssn_validator'
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.5.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-17 00:00:00.000000000 Z
11
+ date: 2022-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -205,10 +205,12 @@ files:
205
205
  - docs/IP_ADDRESS.md
206
206
  - docs/ISBN.md
207
207
  - docs/ISIN.md
208
+ - docs/LIST.md
208
209
  - docs/MAC_ADDRESS.md
209
210
  - docs/NAME.md
210
211
  - docs/PASSWORD.md
211
212
  - docs/PHONE_NUMBER.md
213
+ - docs/REFERENCE.md
212
214
  - docs/SEDOL.md
213
215
  - docs/SLUG.md
214
216
  - docs/SSN.md
@@ -239,11 +241,13 @@ files:
239
241
  - lib/lite/validators/ip_address_validator.rb
240
242
  - lib/lite/validators/isbn_validator.rb
241
243
  - lib/lite/validators/isin_validator.rb
244
+ - lib/lite/validators/list_validator.rb
242
245
  - lib/lite/validators/mac_address_validator.rb
243
246
  - lib/lite/validators/name_validator.rb
244
247
  - lib/lite/validators/password_validator.rb
245
248
  - lib/lite/validators/phone_number_validator.rb
246
249
  - lib/lite/validators/railtie.rb
250
+ - lib/lite/validators/reference_validator.rb
247
251
  - lib/lite/validators/sedol_validator.rb
248
252
  - lib/lite/validators/slug_validator.rb
249
253
  - lib/lite/validators/ssn_validator.rb