mealib 0.1.0 → 1.0.0
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/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
|