validy 1.0.99 → 1.1.4
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/lib/validy.rb +34 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5ba15eaa85e57c3dad933c2ec2529bedab3b4df3c7ee872fa2b6e76ec84c48f
|
4
|
+
data.tar.gz: 6b2c4411763c4a9759c90297700b82d28a133199eeba688df55b3aba45a107ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28042c029f3d322ff70540f5ebe5cbe5a8121463f820320bab838823e0882028ccae920536a2f0429430d9866e8f7396beedc2d0b0fd1bbab717bf98856d88b8
|
7
|
+
data.tar.gz: 6badd77f876d0803f286c2bc11be71499075b481885a14761e4c08c5a6df733ab99064adf4b22dcd3650f4090d6b8179aa8cce3ed80291d9b8e12f38a6d591ca
|
data/lib/validy.rb
CHANGED
@@ -15,7 +15,7 @@ module Validy
|
|
15
15
|
def initialize(*)
|
16
16
|
@errors = {}
|
17
17
|
@valid = true
|
18
|
-
@
|
18
|
+
@evaluating_attribute_value = nil
|
19
19
|
|
20
20
|
super
|
21
21
|
|
@@ -31,8 +31,9 @@ module Validy
|
|
31
31
|
|
32
32
|
module ClassMethods
|
33
33
|
# @param [String] method - indicates custom, must be implemented method for which will be triggered for defining
|
34
|
+
# @param [Array<String>] - optional, list of the instance variables for checking valid state while using setter
|
34
35
|
# validation state
|
35
|
-
def validy_on(method:)
|
36
|
+
def validy_on(method:, setters: [])
|
36
37
|
method_with_bang_name = (method[-1] == '!' ? method.to_s : "#{method}!")
|
37
38
|
method_without_bang_name = method_with_bang_name.gsub('!', '')
|
38
39
|
|
@@ -55,6 +56,15 @@ module Validy
|
|
55
56
|
end
|
56
57
|
raise ::Validy::Error, stringified_error unless valid?
|
57
58
|
end
|
59
|
+
|
60
|
+
if setters.any?
|
61
|
+
setters.each do |name|
|
62
|
+
define_method("#{name}=".to_sym) do |val|
|
63
|
+
instance_variable_set("@#{name}", val)
|
64
|
+
method[-1] == '!' ? send(method_with_bang) : send(method_without_bang)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
58
68
|
end
|
59
69
|
prepend hooks
|
60
70
|
end
|
@@ -74,6 +84,12 @@ module Validy
|
|
74
84
|
@valid
|
75
85
|
end
|
76
86
|
|
87
|
+
# "invalid?" returns opposite value of inner valid state
|
88
|
+
# @return [Boolean]
|
89
|
+
def invalid?
|
90
|
+
!valid?
|
91
|
+
end
|
92
|
+
|
77
93
|
# "errors" returns errors hash
|
78
94
|
# @return [Hash]
|
79
95
|
def errors
|
@@ -86,6 +102,7 @@ module Validy
|
|
86
102
|
# @param [Proc] block
|
87
103
|
def condition(method, error = nil, &block)
|
88
104
|
return self unless valid?
|
105
|
+
return self if skip_optional?
|
89
106
|
|
90
107
|
condition = method.respond_to?(:call) ? method.call : send(method)
|
91
108
|
validate_condition(condition, error, &block)
|
@@ -99,8 +116,8 @@ module Validy
|
|
99
116
|
def required(attribute, error = nil, &block)
|
100
117
|
return self unless valid?
|
101
118
|
|
102
|
-
@
|
103
|
-
validate_condition(@
|
119
|
+
@evaluating_attribute_value = instance_variable_get("@#{attribute}")
|
120
|
+
validate_condition(@evaluating_attribute_value, error || "#{attribute} required!", &block)
|
104
121
|
self
|
105
122
|
end
|
106
123
|
|
@@ -109,7 +126,8 @@ module Validy
|
|
109
126
|
def optional(attribute)
|
110
127
|
return self unless valid?
|
111
128
|
|
112
|
-
@
|
129
|
+
@optional = true
|
130
|
+
@evaluating_attribute_value = instance_variable_get("@#{attribute}")
|
113
131
|
self
|
114
132
|
end
|
115
133
|
|
@@ -119,14 +137,21 @@ module Validy
|
|
119
137
|
# @param [Proc] block
|
120
138
|
def type(clazz, error = nil, &block)
|
121
139
|
return self unless valid?
|
140
|
+
return self if skip_optional?
|
122
141
|
|
123
|
-
validate_condition(@
|
124
|
-
error || "`#{@
|
142
|
+
validate_condition(@evaluating_attribute_value&.is_a?(clazz),
|
143
|
+
error || "`#{@evaluating_attribute_value}` is not a type #{clazz}", &block)
|
125
144
|
self
|
126
145
|
end
|
127
146
|
|
128
147
|
private
|
129
148
|
|
149
|
+
def skip_optional?
|
150
|
+
return false unless @optional
|
151
|
+
|
152
|
+
@evaluating_attribute_value.nil?
|
153
|
+
end
|
154
|
+
|
130
155
|
def method_presented?(method)
|
131
156
|
method_to_symed = method.to_sym
|
132
157
|
methods.any? { |m| m == method_to_symed }
|
@@ -145,8 +170,8 @@ module Validy
|
|
145
170
|
def validate_condition(condition, error = nil, &block)
|
146
171
|
return if condition
|
147
172
|
|
148
|
-
error_hash = error_hash
|
149
|
-
add_error
|
173
|
+
error_hash = error_hash error
|
174
|
+
add_error error_hash
|
150
175
|
|
151
176
|
block.call if block_given?
|
152
177
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Saltykov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|