mealib 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/initializers/core_ext/hash.rb +55 -0
- data/lib/mealib.rb +0 -27
- data/lib/mealib/version.rb +1 -1
- metadata +3 -26
- data/lib/dry/errors.rb +0 -77
- data/lib/dry/rule.rb +0 -69
- data/lib/dry/rules/and.rb +0 -11
- data/lib/dry/rules/between.rb +0 -18
- data/lib/dry/rules/binary.rb +0 -16
- data/lib/dry/rules/collection.rb +0 -16
- data/lib/dry/rules/composite.rb +0 -19
- data/lib/dry/rules/equal.rb +0 -18
- data/lib/dry/rules/format.rb +0 -18
- data/lib/dry/rules/greater_than.rb +0 -18
- data/lib/dry/rules/greater_than_or_equal.rb +0 -18
- data/lib/dry/rules/included.rb +0 -18
- data/lib/dry/rules/length_between.rb +0 -18
- data/lib/dry/rules/length_equal.rb +0 -18
- data/lib/dry/rules/less_than.rb +0 -18
- data/lib/dry/rules/less_than_or_equal.rb +0 -18
- data/lib/dry/rules/max_length.rb +0 -18
- data/lib/dry/rules/min_length.rb +0 -18
- data/lib/dry/rules/not_equal.rb +0 -18
- data/lib/dry/rules/or.rb +0 -13
- data/lib/dry/rules/present.rb +0 -21
- data/lib/dry/rules/then.rb +0 -13
- data/lib/dry/rules_factory.rb +0 -118
- data/lib/dry/schema.rb +0 -148
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ff7ddd718879b0d25a984ffb27775b4fe75801d6d798e404cf5241a6fe727cf
|
4
|
+
data.tar.gz: a49286f7887760301878f98be9fe7100518c1e14236bddfeba656b90b65a4344
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77979d02e2257d148278949318598ff9a318e84a76111496ddb7c02be611c977db2c94f0066d2e3be7b2d847cf7a19604b65ae48c1a18f8668e47002235119cc
|
7
|
+
data.tar.gz: 4231c29c6bf5eb36045d0366a3fd17622f5ba13593bdd9d9d83ad367aea60ac610fcc2c202e6648553e5913fb7442900d13d18a8bc50b7659e5ed26534fc3528
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
def camelcase_keys(type: :symbol, first: :lower)
|
4
|
+
transform_keys &camelcase_proc(type: type, first: first)
|
5
|
+
end
|
6
|
+
|
7
|
+
|
8
|
+
def camelcase_keys!(type: :symbol, first: :lower)
|
9
|
+
transform_keys! &camelcase_proc(type: type, first: first)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def deep_camelcase_keys(type: :symbol, first: :lower)
|
14
|
+
deep_transform_keys &camelcase_proc(type: type, first: first)
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def deep_camelcase_keys!(type: :symbol, first: :lower)
|
19
|
+
deep_transform_keys! &camelcase_proc(type: type, first: first)
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def underscore_keys!(symbol = false)
|
24
|
+
transform_keys! &underscore_proc(symbol)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def underscore_keys(symbol = false)
|
29
|
+
self.dup.underscore_keys(symbol)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def deep_underscore_keys!(symbol = false)
|
34
|
+
deep_transform_keys! &underscore_proc(symbol)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def deep_underscore_keys(symbol = false)
|
39
|
+
self.dup.deep_underscore_keys!(symbol)
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
|
46
|
+
def camelcase_proc(type: :symbol, first: :lower)
|
47
|
+
proc { |key| type == :symbol ? key.to_s.camelcase(first).to_sym : key.to_s.camelcase(first) }
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def underscore_proc(symbol)
|
52
|
+
proc { |key| new_key = key.to_s.underscore; symbol ? new_key.to_sym : new_key }
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
data/lib/mealib.rb
CHANGED
@@ -3,33 +3,6 @@ lambda do
|
|
3
3
|
lib_path = '%s/**/*.rb' % File.expand_path('../mealib', __FILE__)
|
4
4
|
# noinspection RubyResolve
|
5
5
|
Dir[lib_path].each { |f| require_relative f }
|
6
|
-
|
7
|
-
require_relative 'dry/errors'
|
8
|
-
require_relative 'dry/schema'
|
9
|
-
require_relative 'dry/rule'
|
10
|
-
|
11
|
-
require_relative 'dry/rules/binary'
|
12
|
-
require_relative 'dry/rules/composite'
|
13
|
-
require_relative 'dry/rules/between'
|
14
|
-
require_relative 'dry/rules/min_length'
|
15
|
-
require_relative 'dry/rules/greater_than'
|
16
|
-
require_relative 'dry/rules/not_equal'
|
17
|
-
require_relative 'dry/rules/less_than'
|
18
|
-
require_relative 'dry/rules/greater_than_or_equal'
|
19
|
-
require_relative 'dry/rules/collection'
|
20
|
-
require_relative 'dry/rules/length_between'
|
21
|
-
require_relative 'dry/rules/or'
|
22
|
-
require_relative 'dry/rules/and'
|
23
|
-
require_relative 'dry/rules/less_than_or_equal'
|
24
|
-
require_relative 'dry/rules/then'
|
25
|
-
require_relative 'dry/rules/format'
|
26
|
-
require_relative 'dry/rules/present'
|
27
|
-
require_relative 'dry/rules/length_equal'
|
28
|
-
require_relative 'dry/rules/included'
|
29
|
-
require_relative 'dry/rules/equal'
|
30
|
-
require_relative 'dry/rules/max_length'
|
31
|
-
|
32
|
-
require_relative 'dry/rules_factory'
|
33
6
|
end.call
|
34
7
|
|
35
8
|
# загружаем все классы из директории app
|
data/lib/mealib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mealib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- C80609A
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -54,31 +54,8 @@ files:
|
|
54
54
|
- bin/console
|
55
55
|
- bin/rails
|
56
56
|
- bin/setup
|
57
|
+
- config/initializers/core_ext/hash.rb
|
57
58
|
- config/initializers/core_ext/string.rb
|
58
|
-
- lib/dry/errors.rb
|
59
|
-
- lib/dry/rule.rb
|
60
|
-
- lib/dry/rules/and.rb
|
61
|
-
- lib/dry/rules/between.rb
|
62
|
-
- lib/dry/rules/binary.rb
|
63
|
-
- lib/dry/rules/collection.rb
|
64
|
-
- lib/dry/rules/composite.rb
|
65
|
-
- lib/dry/rules/equal.rb
|
66
|
-
- lib/dry/rules/format.rb
|
67
|
-
- lib/dry/rules/greater_than.rb
|
68
|
-
- lib/dry/rules/greater_than_or_equal.rb
|
69
|
-
- lib/dry/rules/included.rb
|
70
|
-
- lib/dry/rules/length_between.rb
|
71
|
-
- lib/dry/rules/length_equal.rb
|
72
|
-
- lib/dry/rules/less_than.rb
|
73
|
-
- lib/dry/rules/less_than_or_equal.rb
|
74
|
-
- lib/dry/rules/max_length.rb
|
75
|
-
- lib/dry/rules/min_length.rb
|
76
|
-
- lib/dry/rules/not_equal.rb
|
77
|
-
- lib/dry/rules/or.rb
|
78
|
-
- lib/dry/rules/present.rb
|
79
|
-
- lib/dry/rules/then.rb
|
80
|
-
- lib/dry/rules_factory.rb
|
81
|
-
- lib/dry/schema.rb
|
82
59
|
- lib/mealib.rb
|
83
60
|
- lib/mealib/abstract_serializer.rb
|
84
61
|
- lib/mealib/dict.rb
|
data/lib/dry/errors.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
module Dry
|
2
|
-
class Errors
|
3
|
-
|
4
|
-
attr_reader :messages
|
5
|
-
|
6
|
-
def initialize(messages = {})
|
7
|
-
@messages = messages
|
8
|
-
end
|
9
|
-
|
10
|
-
|
11
|
-
def add(key, message)
|
12
|
-
keys = key.to_s.split('.').map!(&:to_sym)
|
13
|
-
old = messages.dig(*keys[0...-1]) rescue {}
|
14
|
-
old = {} unless old.is_a?(Hash)
|
15
|
-
new = keys[0...-1].inject(messages) { |h, k| h[k] ||= {} rescue h = {}; h[k] = {} }
|
16
|
-
new[keys.last] = [] unless new.is_a?(Array)
|
17
|
-
new[keys.last] << message
|
18
|
-
new.merge!(old)
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
|
-
def merge!(error, parent_key = nil)
|
23
|
-
hash_to_dots(error.messages, {}, parent_key).each do |key, messages|
|
24
|
-
messages.each { |message| add(key, message) }
|
25
|
-
end
|
26
|
-
messages
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
def any?
|
31
|
-
messages.any?
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
def has_key?(key)
|
36
|
-
keys = key.to_s.split('.').map!(&:to_sym)
|
37
|
-
keys.size == 1 ? messages[keys.first].present? : (messages.dig(*keys[0...-1])[keys.last].present? rescue false)
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
def first_message
|
42
|
-
fetch_messages(messages.values.first).first
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
def clone
|
47
|
-
self.class.new(messages.clone)
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
|
54
|
-
def hash_to_dots(hash, results = {}, start_key = '')
|
55
|
-
hash.each do |key, value|
|
56
|
-
key = key.to_s
|
57
|
-
key_value = start_key.present? ? sprintf('%s.%s', start_key, key) : key
|
58
|
-
if value.is_a?(Hash)
|
59
|
-
results.merge!(hash_to_dots(value, results, key_value))
|
60
|
-
else
|
61
|
-
results[key_value] = value
|
62
|
-
end
|
63
|
-
end
|
64
|
-
results
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
def fetch_messages(value)
|
69
|
-
if value.is_a?(Hash)
|
70
|
-
fetch_messages(value.values.first)
|
71
|
-
else
|
72
|
-
value
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
end
|
data/lib/dry/rule.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
module Dry
|
2
|
-
class Rule
|
3
|
-
|
4
|
-
attr_reader :value, :errors, :args
|
5
|
-
|
6
|
-
def initialize(value, errors = Dry::Errors.new, **args)
|
7
|
-
@value = value
|
8
|
-
@errors = errors
|
9
|
-
@args = args.symbolize_keys
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
def name
|
14
|
-
args[:name]
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
def add_error
|
19
|
-
errors.add(key, messages[name.to_s] || 'invalid')
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
def clone
|
24
|
-
self.class.new(value, errors.clone, args)
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
|
-
def and(right)
|
29
|
-
Dry::Rules::And.new(self, errors, args.merge(right: right))
|
30
|
-
end
|
31
|
-
alias :& :and
|
32
|
-
|
33
|
-
|
34
|
-
def then(right)
|
35
|
-
Dry::Rules::Then.new(self, errors, args.merge(right: right))
|
36
|
-
end
|
37
|
-
alias :> :then
|
38
|
-
|
39
|
-
|
40
|
-
def or(right)
|
41
|
-
Dry::Rules::Or.new(self, errors, args.merge(right: right))
|
42
|
-
end
|
43
|
-
alias :| :or
|
44
|
-
|
45
|
-
|
46
|
-
def +(right)
|
47
|
-
Dry::Rules::Collection.new(self, errors, args.merge(right: right))
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
def valid?
|
52
|
-
raise NotImplementedError
|
53
|
-
end
|
54
|
-
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
|
59
|
-
def messages
|
60
|
-
@messages ||= (args[:messages] || {}).deep_stringify_keys
|
61
|
-
end
|
62
|
-
|
63
|
-
|
64
|
-
def key
|
65
|
-
@key ||= args[:key] || (raise 'Missing required param "key"')
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
end
|
data/lib/dry/rules/and.rb
DELETED
data/lib/dry/rules/between.rb
DELETED
data/lib/dry/rules/binary.rb
DELETED
data/lib/dry/rules/collection.rb
DELETED
data/lib/dry/rules/composite.rb
DELETED
data/lib/dry/rules/equal.rb
DELETED
data/lib/dry/rules/format.rb
DELETED
data/lib/dry/rules/included.rb
DELETED
data/lib/dry/rules/less_than.rb
DELETED
data/lib/dry/rules/max_length.rb
DELETED
data/lib/dry/rules/min_length.rb
DELETED
data/lib/dry/rules/not_equal.rb
DELETED
data/lib/dry/rules/or.rb
DELETED
data/lib/dry/rules/present.rb
DELETED
data/lib/dry/rules/then.rb
DELETED
data/lib/dry/rules_factory.rb
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
module Dry
|
2
|
-
class RulesFactory
|
3
|
-
|
4
|
-
attr_reader :value, :errors, :args
|
5
|
-
|
6
|
-
def initialize(value, errors = Dry::Errors.new, **args)
|
7
|
-
@value = value
|
8
|
-
@errors = errors
|
9
|
-
@args = args.symbolize_keys
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
def present?
|
14
|
-
Dry::Rules::Present.new(value, errors, args)
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
def equal?(right)
|
19
|
-
Dry::Rules::Equal.new(value, errors, build_args(right))
|
20
|
-
end
|
21
|
-
alias :eq? :equal?
|
22
|
-
|
23
|
-
|
24
|
-
def not_equal?(right)
|
25
|
-
Dry::Rules::NotEqual.new(value, errors, build_args(right))
|
26
|
-
end
|
27
|
-
alias :not_eq? :not_equal?
|
28
|
-
|
29
|
-
|
30
|
-
def greater_than?(right)
|
31
|
-
Dry::Rules::GreaterThan.new(value, errors, build_args(right))
|
32
|
-
end
|
33
|
-
alias :gt? :greater_than?
|
34
|
-
|
35
|
-
|
36
|
-
def greater_than_or_equal?(right)
|
37
|
-
Dry::Rules::GreaterThanOrEqual.new(value, errors, build_args(right))
|
38
|
-
end
|
39
|
-
alias :gt_eq? :greater_than_or_equal?
|
40
|
-
|
41
|
-
|
42
|
-
def less_than?(right)
|
43
|
-
Dry::Rules::LessThan.new(value, errors, build_args(right))
|
44
|
-
end
|
45
|
-
alias :lt? :less_than?
|
46
|
-
|
47
|
-
|
48
|
-
def less_than_or_equal?(right)
|
49
|
-
Dry::Rules::LessThanOrEqual.new(value, errors, build_args(right))
|
50
|
-
end
|
51
|
-
alias :lt_eq? :less_than_or_equal?
|
52
|
-
|
53
|
-
|
54
|
-
def included?(right)
|
55
|
-
Dry::Rules::Included.new(value, errors, build_args(right))
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
def length_equal?(right)
|
60
|
-
Dry::Rules::LengthEqual.new(value, errors, build_args(right))
|
61
|
-
end
|
62
|
-
|
63
|
-
|
64
|
-
def min_length?(right)
|
65
|
-
Dry::Rules::MinLength.new(value, errors, build_args(right))
|
66
|
-
end
|
67
|
-
|
68
|
-
|
69
|
-
def max_length?(right)
|
70
|
-
Dry::Rules::MaxLength.new(value, errors, build_args(right))
|
71
|
-
end
|
72
|
-
|
73
|
-
|
74
|
-
def between?(right)
|
75
|
-
Dry::Rules::Between.new(value, errors, build_args(right))
|
76
|
-
end
|
77
|
-
|
78
|
-
|
79
|
-
def length_between?(right)
|
80
|
-
Dry::Rules::LengthBetween.new(value, errors, build_args(right))
|
81
|
-
end
|
82
|
-
|
83
|
-
|
84
|
-
def format?(right)
|
85
|
-
Dry::Rules::Format.new(value, errors, build_args(right))
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
def each(&block)
|
90
|
-
return if value.blank?
|
91
|
-
value.inject(nil) do |rule, e|
|
92
|
-
_rule = self.class.new(e, errors, args).instance_exec(&block)
|
93
|
-
rule = rule ? rule & _rule : _rule
|
94
|
-
rule
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
|
99
|
-
def each_value(&block)
|
100
|
-
return if value.blank?
|
101
|
-
value.inject(nil) do |rule, (k, v)|
|
102
|
-
_rule = self.class.new(v, errors, args).instance_exec(&block)
|
103
|
-
rule = rule ? rule & _rule : _rule
|
104
|
-
rule
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
|
109
|
-
private
|
110
|
-
|
111
|
-
|
112
|
-
def build_args(right)
|
113
|
-
rt = right.is_a?(self.class) ? right.value : right
|
114
|
-
args.merge(right: rt)
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
end
|
data/lib/dry/schema.rb
DELETED
@@ -1,148 +0,0 @@
|
|
1
|
-
module Dry
|
2
|
-
module Schema
|
3
|
-
|
4
|
-
attr_reader :attributes, :errors
|
5
|
-
|
6
|
-
def initialize(params)
|
7
|
-
@errors = Dry::Errors.new
|
8
|
-
@attributes = cast({ wrap: params }.deep_symbolize_keys[:wrap], schema)
|
9
|
-
JSON::Validator.validate!(schema, attributes)
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
def [](key)
|
14
|
-
attributes[key.to_sym]
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
def valid?
|
19
|
-
validate_attributes(attributes, schema)
|
20
|
-
validate_additional
|
21
|
-
!errors.any?
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
def schema
|
26
|
-
raise NotImplemented
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
|
33
|
-
def validate_additional
|
34
|
-
end
|
35
|
-
|
36
|
-
|
37
|
-
def validate_attributes(props, schema, parents = [], key = nil)
|
38
|
-
case props
|
39
|
-
when Dry::Schema
|
40
|
-
errors.merge!(props.errors, (parents + [key]).compact.join('.')) unless props.valid?
|
41
|
-
else
|
42
|
-
[schema[:rule]].flatten.compact.each do |rule|
|
43
|
-
rule = rule.arity == 0 ? rule(key, parents, &rule) : rule.call(parents)
|
44
|
-
rule.valid? if rule
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
if schema[:properties]
|
49
|
-
(schema[:properties] || {}).each do |_key, data|
|
50
|
-
validate_attributes((props.present? ? props : {})[_key.to_sym], data, (parents + [key]).compact, _key)
|
51
|
-
end
|
52
|
-
elsif schema[:items]
|
53
|
-
(props.present? ? props : []).each_with_index do |e, i|
|
54
|
-
validate_attributes(e, schema[:items], (parents + [key]).compact, i)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
if schema[:oneOf] || schema[:allOf] || schema[:anyOf]
|
59
|
-
[:oneOf, :allOf, :anyOf].each do |k|
|
60
|
-
s = schema[k]
|
61
|
-
case s
|
62
|
-
when Hash
|
63
|
-
validate_attributes(props, s, parents, key)
|
64
|
-
when Array
|
65
|
-
s.each { |_s| validate_attributes(props, _s, parents, key) if _s.is_a?(Hash) }
|
66
|
-
else
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
|
73
|
-
def cast(params, schema)
|
74
|
-
props = schema.is_a?(Hash) && schema[:cast] ? schema[:cast].call(params) : params
|
75
|
-
|
76
|
-
case props
|
77
|
-
when Hash
|
78
|
-
props.each_with_object({}) do |(key, value), result|
|
79
|
-
result[key] = find_schemas_for_attribute(key, schema).inject((value.dup rescue value)) do
|
80
|
-
|_value, _schema| _value = cast(_value, _schema); _value
|
81
|
-
end
|
82
|
-
end
|
83
|
-
when Array
|
84
|
-
props.map { |e| cast(e, (schema[:items] rescue nil)) }
|
85
|
-
else
|
86
|
-
props
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
|
91
|
-
def rule(attrs, parents, messages = {}, name = nil, &block)
|
92
|
-
if block.arity == 0
|
93
|
-
_attrs = [attrs].flatten.compact
|
94
|
-
raise 'Invalid rule' if _attrs.size > 1
|
95
|
-
single_rule(parents + _attrs, messages, &block)
|
96
|
-
else
|
97
|
-
multi_rule(attrs, parents, messages, name, &block)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
|
102
|
-
def single_rule(keys, messages = {}, &block)
|
103
|
-
value = attributes.dig(*keys) rescue nil
|
104
|
-
factory = Dry::RulesFactory.new(value, errors, key: keys.join('.'), messages: messages)
|
105
|
-
factory.instance_exec &block
|
106
|
-
end
|
107
|
-
|
108
|
-
|
109
|
-
def multi_rule(keys, parents, messages = {}, name = nil, &block)
|
110
|
-
_keys = [keys].flatten.compact
|
111
|
-
data = parents.present? ? attributes.dig(*parents) : attributes
|
112
|
-
|
113
|
-
data = _keys.inject({}) do |res, key|
|
114
|
-
res[key.to_sym] = data[key.to_sym] rescue nil; res
|
115
|
-
end
|
116
|
-
|
117
|
-
factories = data.map do |key, value|
|
118
|
-
_key = name || key
|
119
|
-
_key = (parents + [_key]).join('.')
|
120
|
-
Dry::RulesFactory.new(value, errors, key: _key, messages: messages)
|
121
|
-
end
|
122
|
-
|
123
|
-
block.call *factories
|
124
|
-
end
|
125
|
-
|
126
|
-
|
127
|
-
def find_schemas_for_attribute(key, schema, schemas = [])
|
128
|
-
case schema
|
129
|
-
when Hash
|
130
|
-
s = schema[:properties][key] rescue nil
|
131
|
-
schemas << s if s
|
132
|
-
[:allOf, :anyOf, :oneOf].each { |k| find_schemas_for_attribute(key, schema[k], schemas) }
|
133
|
-
when Array
|
134
|
-
schema.each { |s| find_schemas_for_attribute(key, s, schemas) }
|
135
|
-
else
|
136
|
-
end
|
137
|
-
|
138
|
-
|
139
|
-
schemas
|
140
|
-
end
|
141
|
-
|
142
|
-
|
143
|
-
def method_missing(method)
|
144
|
-
attributes[method.to_sym]
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
end
|