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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f3ccfb2cfe9cffb46673c90f34143c228c14e6548b006a3ed7c4283d14874f4
4
- data.tar.gz: '084a34d678a15b3ecd4a4d2d4cc9925c2c3a75dbd96c688ab09503e2257927d9'
3
+ metadata.gz: '09ad2711308c18cd301eecd01ca9caf828c81909f9be6597c96a6353513ba4b4'
4
+ data.tar.gz: 79cff60db8a311481607f39f89191e84682f6d809e02710908f6aacb535b038f
5
5
  SHA512:
6
- metadata.gz: fb03dfe7046c594597816b020693dd84b5439b2257eb9a17390f5cc9342c6747c9492b65759049fa1cc42f1455a7008d6e34a8b30033deef1679b13825927ad1
7
- data.tar.gz: c8319f9221b87948857ddaf1a5cdd78e2b290364553749a5a0f49a3bbba84cfacc14bdb270d5cbc25937d2d4d80f4f8cf125fd4234498e3351e67c1f627b3201
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.3)
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 (5.2.5)
10
- activesupport (= 5.2.5)
11
- activerecord (5.2.5)
12
- activemodel (= 5.2.5)
13
- activesupport (= 5.2.5)
14
- arel (>= 9.0)
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 (>= 0.7, < 2)
18
- minitest (~> 5.1)
19
- tzinfo (~> 1.1)
20
- arel (9.0.0)
21
- concurrent-ruby (1.1.8)
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 (10.5.0)
25
+ rake (13.0.6)
26
26
  sqlite3 (1.4.2)
27
- thread_safe (0.3.6)
28
- tzinfo (1.2.9)
29
- thread_safe (~> 0.1)
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 (~> 5)
35
+ activerecord (~> 6)
36
36
  be_valid!
37
- bundler (~> 1.17)
37
+ bundler (~> 2)
38
38
  minitest (~> 5.0)
39
- rake (~> 10.0)
39
+ rake (~> 13.0)
40
40
  sqlite3 (~> 1.4)
41
41
 
42
42
  BUNDLED WITH
43
- 1.17.2
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 = '>= 2.3'
26
+ spec.required_ruby_version = '>= 3.0'
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.17"
29
- spec.add_development_dependency "rake", "~> 10.0"
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", "~> 5"
33
+ spec.add_development_dependency "activerecord", "~> 6"
32
34
  spec.add_development_dependency "sqlite3", "~> 1.4"
33
35
  end
@@ -1,3 +1,3 @@
1
1
  module BeValid
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.8"
3
3
  end
data/lib/be_valid.rb CHANGED
@@ -1,9 +1,21 @@
1
- require 'be_valid/be_valid'
2
-
3
- begin
1
+ module BeValid
4
2
  require 'validators/date_validator'
5
3
  require 'validators/must_be_validator'
6
- rescue
7
- 'unable to loan be_valid validator'
8
- nil
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 = record.read_attribute_before_type_cast( attribute )
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
- date = date.to_date unless options[:time]
82
- if date.is_a?(Time)
83
- value = value.to_time
84
- elsif date.is_a?(Date)
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 'active_record'
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 "must_be_validator requires at least one comparison operator for attribute." unless options.slice(MATCHERS.keys + [:blank, :present])
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 = record.read_attribute_before_type_cast( attribute )
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?(record[field])
74
- condition_errors << "#{field} = #{record[field]}"
77
+ return if !values.match?(field_value)
78
+ condition_errors << "#{field} = #{field_value}"
75
79
  when Array
76
- return if !values.include?(record[field])
77
- condition_errors << "#{field} = #{record[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 != record[field]
89
- condition_errors << "#{field} = #{record[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.3
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-04-19 00:00:00.000000000 Z
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: '1.17'
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: '1.17'
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: '10.0'
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: '10.0'
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: '5'
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: '5'
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: '2.3'
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.0.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
@@ -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