activemodel 5.2.2.1 → 6.0.2
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/CHANGELOG.md +144 -51
- data/MIT-LICENSE +1 -1
- data/README.rdoc +4 -2
- data/lib/active_model.rb +1 -1
- data/lib/active_model/attribute.rb +3 -4
- data/lib/active_model/attribute/user_provided_default.rb +1 -2
- data/lib/active_model/attribute_assignment.rb +1 -1
- data/lib/active_model/attribute_methods.rb +54 -15
- data/lib/active_model/attribute_mutation_tracker.rb +88 -34
- data/lib/active_model/attribute_set.rb +2 -10
- data/lib/active_model/attribute_set/builder.rb +1 -3
- data/lib/active_model/attribute_set/yaml_encoder.rb +1 -2
- data/lib/active_model/attributes.rb +60 -33
- data/lib/active_model/callbacks.rb +10 -7
- data/lib/active_model/conversion.rb +1 -1
- data/lib/active_model/dirty.rb +36 -99
- data/lib/active_model/errors.rb +104 -20
- data/lib/active_model/gem_version.rb +3 -3
- data/lib/active_model/naming.rb +19 -3
- data/lib/active_model/railtie.rb +6 -0
- data/lib/active_model/secure_password.rb +47 -48
- data/lib/active_model/serializers/json.rb +10 -9
- data/lib/active_model/type/binary.rb +1 -1
- data/lib/active_model/type/boolean.rb +10 -1
- data/lib/active_model/type/date.rb +2 -5
- data/lib/active_model/type/date_time.rb +4 -7
- data/lib/active_model/type/float.rb +0 -2
- data/lib/active_model/type/helpers.rb +1 -0
- data/lib/active_model/type/helpers/accepts_multiparameter_time.rb +4 -0
- data/lib/active_model/type/helpers/numeric.rb +9 -2
- data/lib/active_model/type/helpers/time_value.rb +16 -15
- data/lib/active_model/type/helpers/timezone.rb +19 -0
- data/lib/active_model/type/integer.rb +7 -19
- data/lib/active_model/type/registry.rb +2 -10
- data/lib/active_model/type/string.rb +2 -2
- data/lib/active_model/type/time.rb +2 -1
- data/lib/active_model/validations.rb +0 -2
- data/lib/active_model/validations/acceptance.rb +33 -25
- data/lib/active_model/validations/clusivity.rb +1 -1
- data/lib/active_model/validations/confirmation.rb +2 -2
- data/lib/active_model/validations/inclusion.rb +1 -1
- data/lib/active_model/validations/length.rb +1 -1
- data/lib/active_model/validations/numericality.rb +20 -11
- data/lib/active_model/validations/validates.rb +2 -2
- data/lib/active_model/validator.rb +1 -1
- metadata +13 -9
@@ -32,7 +32,7 @@ module ActiveModel
|
|
32
32
|
value = options[key]
|
33
33
|
|
34
34
|
unless (value.is_a?(Integer) && value >= 0) || value == Float::INFINITY || value.is_a?(Symbol) || value.is_a?(Proc)
|
35
|
-
raise ArgumentError, ":#{key} must be a
|
35
|
+
raise ArgumentError, ":#{key} must be a non-negative Integer, Infinity, Symbol, or Proc"
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "bigdecimal/util"
|
4
|
+
|
3
5
|
module ActiveModel
|
4
6
|
module Validations
|
5
7
|
class NumericalityValidator < EachValidator # :nodoc:
|
@@ -9,6 +11,8 @@ module ActiveModel
|
|
9
11
|
|
10
12
|
RESERVED_OPTIONS = CHECKS.keys + [:only_integer]
|
11
13
|
|
14
|
+
INTEGER_REGEX = /\A[+-]?\d+\z/
|
15
|
+
|
12
16
|
def check_validity!
|
13
17
|
keys = CHECKS.keys - [:odd, :even]
|
14
18
|
options.slice(*keys).each do |option, value|
|
@@ -49,11 +53,7 @@ module ActiveModel
|
|
49
53
|
return
|
50
54
|
end
|
51
55
|
|
52
|
-
|
53
|
-
value = raw_value
|
54
|
-
else
|
55
|
-
value = parse_raw_value_as_a_number(raw_value)
|
56
|
-
end
|
56
|
+
value = parse_as_number(raw_value)
|
57
57
|
|
58
58
|
options.slice(*CHECKS.keys).each do |option, option_value|
|
59
59
|
case option
|
@@ -69,6 +69,8 @@ module ActiveModel
|
|
69
69
|
option_value = record.send(option_value)
|
70
70
|
end
|
71
71
|
|
72
|
+
option_value = parse_as_number(option_value)
|
73
|
+
|
72
74
|
unless value.send(CHECKS[option], option_value)
|
73
75
|
record.errors.add(attr_name, option, filtered_options(value).merge!(count: option_value))
|
74
76
|
end
|
@@ -79,22 +81,29 @@ module ActiveModel
|
|
79
81
|
private
|
80
82
|
|
81
83
|
def is_number?(raw_value)
|
82
|
-
!
|
84
|
+
!parse_as_number(raw_value).nil?
|
83
85
|
rescue ArgumentError, TypeError
|
84
86
|
false
|
85
87
|
end
|
86
88
|
|
87
|
-
def
|
88
|
-
|
89
|
-
|
89
|
+
def parse_as_number(raw_value)
|
90
|
+
if raw_value.is_a?(Float)
|
91
|
+
raw_value.to_d
|
92
|
+
elsif raw_value.is_a?(Numeric)
|
93
|
+
raw_value
|
94
|
+
elsif is_integer?(raw_value)
|
95
|
+
raw_value.to_i
|
96
|
+
elsif !is_hexadecimal_literal?(raw_value)
|
97
|
+
Kernel.Float(raw_value).to_d
|
98
|
+
end
|
90
99
|
end
|
91
100
|
|
92
101
|
def is_integer?(raw_value)
|
93
|
-
|
102
|
+
INTEGER_REGEX.match?(raw_value.to_s)
|
94
103
|
end
|
95
104
|
|
96
105
|
def is_hexadecimal_literal?(raw_value)
|
97
|
-
/\A0[xX]
|
106
|
+
/\A0[xX]/.match?(raw_value.to_s)
|
98
107
|
end
|
99
108
|
|
100
109
|
def filtered_options(value)
|
@@ -63,7 +63,7 @@ module ActiveModel
|
|
63
63
|
# and strings in shortcut form.
|
64
64
|
#
|
65
65
|
# validates :email, format: /@/
|
66
|
-
# validates :
|
66
|
+
# validates :role, inclusion: %(admin contributor)
|
67
67
|
# validates :password, length: 6..20
|
68
68
|
#
|
69
69
|
# When using shortcut form, ranges and arrays are passed to your
|
@@ -116,7 +116,7 @@ module ActiveModel
|
|
116
116
|
key = "#{key.to_s.camelize}Validator"
|
117
117
|
|
118
118
|
begin
|
119
|
-
validator = key.include?("::"
|
119
|
+
validator = key.include?("::") ? key.constantize : const_get(key)
|
120
120
|
rescue NameError
|
121
121
|
raise ArgumentError, "Unknown validator: '#{key}'"
|
122
122
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemodel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 6.0.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 6.0.2
|
27
27
|
description: A toolkit for building modeling frameworks like Active Record. Rich support
|
28
28
|
for attributes, callbacks, validations, serialization, internationalization, and
|
29
29
|
testing.
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- lib/active_model/type/helpers/mutable.rb
|
74
74
|
- lib/active_model/type/helpers/numeric.rb
|
75
75
|
- lib/active_model/type/helpers/time_value.rb
|
76
|
+
- lib/active_model/type/helpers/timezone.rb
|
76
77
|
- lib/active_model/type/immutable_string.rb
|
77
78
|
- lib/active_model/type/integer.rb
|
78
79
|
- lib/active_model/type/registry.rb
|
@@ -96,12 +97,15 @@ files:
|
|
96
97
|
- lib/active_model/validations/with.rb
|
97
98
|
- lib/active_model/validator.rb
|
98
99
|
- lib/active_model/version.rb
|
99
|
-
homepage:
|
100
|
+
homepage: https://rubyonrails.org
|
100
101
|
licenses:
|
101
102
|
- MIT
|
102
103
|
metadata:
|
103
|
-
|
104
|
-
changelog_uri: https://github.com/rails/rails/blob/
|
104
|
+
bug_tracker_uri: https://github.com/rails/rails/issues
|
105
|
+
changelog_uri: https://github.com/rails/rails/blob/v6.0.2/activemodel/CHANGELOG.md
|
106
|
+
documentation_uri: https://api.rubyonrails.org/v6.0.2/
|
107
|
+
mailing_list_uri: https://groups.google.com/forum/#!forum/rubyonrails-talk
|
108
|
+
source_code_uri: https://github.com/rails/rails/tree/v6.0.2/activemodel
|
105
109
|
post_install_message:
|
106
110
|
rdoc_options: []
|
107
111
|
require_paths:
|
@@ -110,14 +114,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
114
|
requirements:
|
111
115
|
- - ">="
|
112
116
|
- !ruby/object:Gem::Version
|
113
|
-
version: 2.
|
117
|
+
version: 2.5.0
|
114
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
119
|
requirements:
|
116
120
|
- - ">="
|
117
121
|
- !ruby/object:Gem::Version
|
118
122
|
version: '0'
|
119
123
|
requirements: []
|
120
|
-
rubygems_version: 3.0.
|
124
|
+
rubygems_version: 3.0.3
|
121
125
|
signing_key:
|
122
126
|
specification_version: 4
|
123
127
|
summary: A toolkit for building modeling frameworks (part of Rails).
|