be_valid 0.1.3 → 0.1.8
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 +4 -4
- data/.github/workflows/ruby.yml +24 -0
- data/Gemfile.lock +21 -21
- data/be_valid.gemspec +6 -4
- data/lib/be_valid/version.rb +1 -1
- data/lib/be_valid.rb +18 -6
- data/lib/validators/date_validator.rb +9 -8
- data/lib/validators/must_be_validator.rb +22 -11
- metadata +25 -11
- data/lib/be_valid/be_valid.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09ad2711308c18cd301eecd01ca9caf828c81909f9be6597c96a6353513ba4b4'
|
4
|
+
data.tar.gz: 79cff60db8a311481607f39f89191e84682f6d809e02710908f6aacb535b038f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35c8e9420efe9154f461af5857a9e2c8bd81ef1cacd525b1be4f176b39d51b4e7ebcabade66152c308429b8b653dd76aeb230f11c8a5e80bde24661a7a8e20b4
|
7
|
+
data.tar.gz: a4475627627e9d0338f7117254b9dc3785de4b8500b5e960900eb90069e27347792dc8f7e2c232c00a36966fd3388ea5bd05e30acfd1effd30f423bac8b57147
|
@@ -0,0 +1,24 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby-version: ['3.0']
|
15
|
+
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v2
|
18
|
+
- name: Set up Ruby
|
19
|
+
uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby-version }}
|
22
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
23
|
+
- name: Run tests
|
24
|
+
run: bundle exec rake
|
data/Gemfile.lock
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
be_valid (0.1.
|
4
|
+
be_valid (0.1.8)
|
5
|
+
activemodel (~> 6.1)
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
8
9
|
specs:
|
9
|
-
activemodel (
|
10
|
-
activesupport (=
|
11
|
-
activerecord (
|
12
|
-
activemodel (=
|
13
|
-
activesupport (=
|
14
|
-
|
15
|
-
activesupport (5.2.5)
|
10
|
+
activemodel (6.1.4.1)
|
11
|
+
activesupport (= 6.1.4.1)
|
12
|
+
activerecord (6.1.4.1)
|
13
|
+
activemodel (= 6.1.4.1)
|
14
|
+
activesupport (= 6.1.4.1)
|
15
|
+
activesupport (6.1.4.1)
|
16
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
-
i18n (>=
|
18
|
-
minitest (
|
19
|
-
tzinfo (~>
|
20
|
-
|
21
|
-
concurrent-ruby (1.1.
|
17
|
+
i18n (>= 1.6, < 2)
|
18
|
+
minitest (>= 5.1)
|
19
|
+
tzinfo (~> 2.0)
|
20
|
+
zeitwerk (~> 2.3)
|
21
|
+
concurrent-ruby (1.1.9)
|
22
22
|
i18n (1.8.10)
|
23
23
|
concurrent-ruby (~> 1.0)
|
24
24
|
minitest (5.14.4)
|
25
|
-
rake (
|
25
|
+
rake (13.0.6)
|
26
26
|
sqlite3 (1.4.2)
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
tzinfo (2.0.4)
|
28
|
+
concurrent-ruby (~> 1.0)
|
29
|
+
zeitwerk (2.5.1)
|
30
30
|
|
31
31
|
PLATFORMS
|
32
32
|
ruby
|
33
33
|
|
34
34
|
DEPENDENCIES
|
35
|
-
activerecord (~>
|
35
|
+
activerecord (~> 6)
|
36
36
|
be_valid!
|
37
|
-
bundler (~>
|
37
|
+
bundler (~> 2)
|
38
38
|
minitest (~> 5.0)
|
39
|
-
rake (~>
|
39
|
+
rake (~> 13.0)
|
40
40
|
sqlite3 (~> 1.4)
|
41
41
|
|
42
42
|
BUNDLED WITH
|
43
|
-
|
43
|
+
2.2.22
|
data/be_valid.gemspec
CHANGED
@@ -23,11 +23,13 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
24
|
spec.require_paths = ["lib"]
|
25
25
|
|
26
|
-
spec.required_ruby_version = '>=
|
26
|
+
spec.required_ruby_version = '>= 3.0'
|
27
27
|
|
28
|
-
spec.
|
29
|
-
|
28
|
+
spec.add_dependency "activemodel", "~> 6.1"
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler", "~> 2"
|
31
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
30
32
|
spec.add_development_dependency "minitest", "~> 5.0"
|
31
|
-
spec.add_development_dependency "activerecord", "~>
|
33
|
+
spec.add_development_dependency "activerecord", "~> 6"
|
32
34
|
spec.add_development_dependency "sqlite3", "~> 1.4"
|
33
35
|
end
|
data/lib/be_valid/version.rb
CHANGED
data/lib/be_valid.rb
CHANGED
@@ -1,9 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
begin
|
1
|
+
module BeValid
|
4
2
|
require 'validators/date_validator'
|
5
3
|
require 'validators/must_be_validator'
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
|
5
|
+
def self.config
|
6
|
+
@@config ||= Configuration.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.configure
|
10
|
+
self.config ||= Configuration.new
|
11
|
+
yield(config)
|
12
|
+
end
|
13
|
+
|
14
|
+
class Configuration
|
15
|
+
attr_accessor :rules
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@rules = {}
|
19
|
+
end
|
20
|
+
end
|
9
21
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
|
1
3
|
class DateValidator < ActiveModel::EachValidator
|
2
4
|
|
3
5
|
# https://stackoverflow.com/questions/28538080/rails-validate-dates-in-model-before-type-cast
|
@@ -6,14 +8,15 @@ class DateValidator < ActiveModel::EachValidator
|
|
6
8
|
|
7
9
|
@error_hash = options[:error_level].present? ? record.send(options[:error_level]) : record.errors
|
8
10
|
|
9
|
-
original_value =
|
11
|
+
original_value = value
|
12
|
+
original_value = record.read_attribute_before_type_cast( attribute ) rescue nil # only in rails
|
10
13
|
# dont display date format error unless date could not be parsed
|
11
14
|
if value.nil?
|
12
15
|
# if blank date was given it's still not a format issue, still show message if desired
|
13
16
|
return if original_value.blank? && options[:allow_blank]
|
14
17
|
|
15
18
|
# display helpful date format validation message with original value
|
16
|
-
message = options[:time] ? ": #{original_value} is not a valid value. Value must be a date in YYYY-MM-DD or YYYY-MM-DD HH:MM:SS format." : ": #{original_value} is not a valid value. Value must be a date in YYYY-MM-DD."
|
19
|
+
message = options[:time] ? ": #{original_value} is not a valid value. Value must be a date in YYYY-MM-DD or YYYY-MM-DD HH:MM:SS format." : ": #{original_value} is not a valid value. Value must be a date in YYYY-MM-DD format."
|
17
20
|
@error_hash.add(attribute, (options[:message] || message))
|
18
21
|
else
|
19
22
|
# handle validation options on valid date instances
|
@@ -78,13 +81,11 @@ class DateValidator < ActiveModel::EachValidator
|
|
78
81
|
record.__send__(option) if record.respond_to?(option)
|
79
82
|
end
|
80
83
|
return unless date.present?
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
value = value.to_date
|
84
|
+
if options[:time]
|
85
|
+
return [date.to_time, value.to_time]
|
86
|
+
else
|
87
|
+
return [date.to_date, value.to_date]
|
86
88
|
end
|
87
|
-
[date, value]
|
88
89
|
end
|
89
90
|
|
90
91
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'active_model'
|
2
2
|
|
3
3
|
module ActiveModel
|
4
4
|
module Validations
|
@@ -11,16 +11,19 @@ module ActiveModel
|
|
11
11
|
less_or_equal_to: :<=,
|
12
12
|
not_equal_to: :!=,
|
13
13
|
matching: :=~,
|
14
|
-
# one_of: :in?
|
15
14
|
}.freeze
|
15
|
+
|
16
|
+
REQD_OPTS = (MATCHERS.keys + [:blank, :present, :one_of, :not_any_of, :only_from, :before, :after])
|
16
17
|
|
17
18
|
MESSAGE_PREFIX = "must be"
|
18
19
|
ERRORS_METHOD = :errors
|
19
20
|
|
20
21
|
def validate_each(record, attribute, value)
|
21
|
-
raise "
|
22
|
+
raise "Requires at least one comparison operator for attribute." unless (options.keys & REQD_OPTS).length > 0
|
23
|
+
return if options[:rule_name] && BeValid.config.rules&.fetch(options[:rule_name], {})[:disabled]
|
22
24
|
|
23
|
-
original_value =
|
25
|
+
original_value = value
|
26
|
+
original_value = record.read_attribute_before_type_cast( attribute ) rescue nil # only in rails
|
24
27
|
|
25
28
|
message = self.class::MESSAGE_PREFIX.dup
|
26
29
|
|
@@ -30,7 +33,7 @@ module ActiveModel
|
|
30
33
|
return if options[:present] && value.present?
|
31
34
|
message << " present" if options[:present]
|
32
35
|
|
33
|
-
return if options[:one_of] && options[:one_of].include?(value)
|
36
|
+
return if options[:one_of] && Array(options[:one_of]).flatten.include?(value)
|
34
37
|
message = ": '#{value}' is not a valid value" if options[:one_of]
|
35
38
|
|
36
39
|
return if options[:not_any_of] && !(options[:not_any_of].include?(value))
|
@@ -68,13 +71,14 @@ module ActiveModel
|
|
68
71
|
message << " when "
|
69
72
|
condition_errors = []
|
70
73
|
conditions.each do |field, values|
|
74
|
+
field_value = record.send(field)
|
71
75
|
case values
|
72
76
|
when Regexp
|
73
|
-
return if !values.match?(
|
74
|
-
condition_errors << "#{field} = #{
|
77
|
+
return if !values.match?(field_value)
|
78
|
+
condition_errors << "#{field} = #{field_value}"
|
75
79
|
when Array
|
76
|
-
return if !values.include?(
|
77
|
-
condition_errors << "#{field} = #{
|
80
|
+
return if !values.flatten.include?(field_value)
|
81
|
+
condition_errors << "#{field} = #{field_value}"
|
78
82
|
when :blank
|
79
83
|
return unless record.send(field).blank?
|
80
84
|
condition_errors << "#{field} is #{values.to_s.gsub('?', '')}"
|
@@ -85,8 +89,8 @@ module ActiveModel
|
|
85
89
|
return if !record.send(field)&.send(values)
|
86
90
|
condition_errors << "#{field} is #{values.to_s.gsub('?', '')}"
|
87
91
|
else
|
88
|
-
return if values !=
|
89
|
-
condition_errors << "#{field} = #{
|
92
|
+
return if values != field_value
|
93
|
+
condition_errors << "#{field} = #{field_value}"
|
90
94
|
end
|
91
95
|
end
|
92
96
|
message << condition_errors.join(' and ')
|
@@ -104,6 +108,13 @@ module ActiveModel
|
|
104
108
|
|
105
109
|
record.send(self.class::ERRORS_METHOD).add(attribute, (options[:message] || "#{message}."), rule_name: options[:rule_name])
|
106
110
|
end
|
111
|
+
module ClassMethods
|
112
|
+
def validates_must_be_valid(*attr_names)
|
113
|
+
validates_with MustBeValidator, _merge_attributes(attr_names)
|
114
|
+
end
|
115
|
+
|
116
|
+
alias_method :validates_must_be, :validates_must_be_valid
|
117
|
+
end
|
107
118
|
end
|
108
119
|
end
|
109
120
|
end
|
metadata
CHANGED
@@ -1,43 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: be_valid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Stewart (johnsinco)
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '6.1'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
33
|
+
version: '2'
|
20
34
|
type: :development
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
40
|
+
version: '2'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
47
|
+
version: '13.0'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '13.0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: minitest
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +72,14 @@ dependencies:
|
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '6'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '6'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: sqlite3
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,6 +101,7 @@ executables: []
|
|
87
101
|
extensions: []
|
88
102
|
extra_rdoc_files: []
|
89
103
|
files:
|
104
|
+
- ".github/workflows/ruby.yml"
|
90
105
|
- ".gitignore"
|
91
106
|
- Gemfile
|
92
107
|
- Gemfile.lock
|
@@ -97,7 +112,6 @@ files:
|
|
97
112
|
- bin/console
|
98
113
|
- bin/setup
|
99
114
|
- lib/be_valid.rb
|
100
|
-
- lib/be_valid/be_valid.rb
|
101
115
|
- lib/be_valid/version.rb
|
102
116
|
- lib/validators/date_validator.rb
|
103
117
|
- lib/validators/must_be_validator.rb
|
@@ -113,14 +127,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
127
|
requirements:
|
114
128
|
- - ">="
|
115
129
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
130
|
+
version: '3.0'
|
117
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
132
|
requirements:
|
119
133
|
- - ">="
|
120
134
|
- !ruby/object:Gem::Version
|
121
135
|
version: '0'
|
122
136
|
requirements: []
|
123
|
-
rubygems_version: 3.
|
137
|
+
rubygems_version: 3.2.22
|
124
138
|
signing_key:
|
125
139
|
specification_version: 4
|
126
140
|
summary: Custom Ruby on Rails Validation library supporting 'conditional' validation
|
data/lib/be_valid/be_valid.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module BeValid
|
2
|
-
def self.config
|
3
|
-
@@config ||= Configuration.new
|
4
|
-
end
|
5
|
-
|
6
|
-
def self.configure
|
7
|
-
self.config ||= Configuration.new
|
8
|
-
yield(config)
|
9
|
-
end
|
10
|
-
|
11
|
-
class Configuration
|
12
|
-
attr_accessor :notice_rules
|
13
|
-
|
14
|
-
def initialize
|
15
|
-
@notice_rules= []
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|