module GraphQL::Schema::Validation::Rules
def self.assert_named_items_are_valid(item_name, get_items_proc)
def self.assert_named_items_are_valid(item_name, get_items_proc) -> (type) { items = get_items_proc.call(type) error_message = nil items.each do |item| item_message = GraphQL::Schema::Validation.validate(item) if item_message error_message = "#{item_name} #{item.name.inspect} #{item_message}" break end end error_message } end
def self.assert_property(property_name, *allowed_classes)
-
(Proc)
- A proc which will validate the input by calling `property_name` and asserting it is an instance of one of `allowed_classes`
Parameters:
-
allowed_classes
(Class
) -- Classes which the return value may be an instance of -
property_name
(Symbol
) -- The method to validate
def self.assert_property(property_name, *allowed_classes) allowed_classes_message = allowed_classes.map(&:name).join(" or ") -> (obj) { property_value = obj.public_send(property_name) is_valid_value = allowed_classes.any? { |allowed_class| property_value.is_a?(allowed_class) } is_valid_value ? nil : "#{property_name} must return #{allowed_classes_message}, not #{property_value.class.name} (#{property_value.inspect})" } end
def self.assert_property_list_of(property_name, list_member_class)
-
(Proc)
- A proc to validate the input by calling `property_name` and asserting that the return is an Array of `list_member_class` instances
Parameters:
-
list_member_class
(Class
) -- The class which each member of the returned array should be an instance of -
property_name
(Symbol
) -- The method whose return value will be validated
def self.assert_property_list_of(property_name, list_member_class) -> (obj) { property_value = obj.public_send(property_name) if !property_value.is_a?(Array) "#{property_name} must be an Array of #{list_member_class.name}, not a #{property_value.class.name} (#{property_value.inspect})" else invalid_member = property_value.find { |value| !value.is_a?(list_member_class) } if invalid_member "#{property_name} must contain #{list_member_class.name}, not #{invalid_member.class.name} (#{invalid_member.inspect})" else nil # OK end end } end
def self.assert_property_mapping(property_name, from_class, to_class)
-
(Proc)
- A proc to validate that validates the input by calling `property_name` and asserting that the return value is a Hash of `{from_class => to_class}` pairs
Parameters:
-
to_class
(Class
) -- The class for values in the return value -
from_class
(Class
) -- The class for keys in the return value -
property_name
(Symbol
) -- The method whose return value will be validated
def self.assert_property_mapping(property_name, from_class, to_class) -> (obj) { property_value = obj.public_send(property_name) error_message = nil if !property_value.is_a?(Hash) "#{property_name} must be a hash of {#{from_class.name} => #{to_class.name}}, not a #{property_value.class.name} (#{property_value.inspect})" else invalid_key, invalid_value = property_value.find { |key, value| !key.is_a?(from_class) || !value.is_a?(to_class) } if invalid_key "#{property_name} must map #{from_class} => #{to_class}, not #{invalid_key.class.name} => #{invalid_value.class.name} (#{invalid_key.inspect} => #{invalid_value.inspect})" else nil # OK end end } end