-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathhas_validators.rb
More file actions
63 lines (56 loc) · 1.82 KB
/
has_validators.rb
File metadata and controls
63 lines (56 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# frozen_string_literal: true
module GraphQL
class Schema
class Member
module HasValidators
include GraphQL::EmptyObjects
# Build {GraphQL::Schema::Validator}s based on the given configuration
# and use them for this schema member
# @param validation_config [Hash{Symbol => Hash}]
# @return [void]
def validates(validation_config)
validation_config.each do |validator_name, _options|
if validator_name.is_a?(Class) || !GraphQL::Schema::Validator.all_validators.key?(validator_name)
GraphQL::Schema::Validator::CustomValidatorWarning.warn_for(validator_name)
end
end
new_validators = GraphQL::Schema::Validator.from_config(self, validation_config)
@own_validators ||= []
@own_validators.concat(new_validators)
nil
end
# @return [Array<GraphQL::Schema::Validator>]
def validators
@own_validators || EMPTY_ARRAY
end
module ClassConfigured
def inherited(child_cls)
super
child_cls.extend(ClassValidators)
end
module ClassValidators
include GraphQL::EmptyObjects
def validators
inherited_validators = superclass.validators
if !inherited_validators.empty?
if @own_validators.nil?
inherited_validators
else
inherited_validators + @own_validators
end
elsif @own_validators.nil?
EMPTY_ARRAY
else
@own_validators
end
end
end
end
def self.extended(child_cls)
super
child_cls.extend(ClassConfigured)
end
end
end
end
end