Sha256: d105adc19b1b9be3bbe5bee8347656de483ef3603d5928c78496c438d2e5e3e4
Contents?: true
Size: 1.53 KB
Versions: 1
Compression:
Stored size: 1.53 KB
Contents
# frozen_string_literal: true module GraphQL module StaticValidation class FieldsWillMerge def validate(context) context.each_irep_node do |node| if node.ast_nodes.size > 1 # Check for more than one GraphQL::Field backing this node: if node.definitions.size > 1 defn_names = node.definitions.map { |d| d.name }.sort.join(" or ") msg = "Field '#{node.name}' has a field conflict: #{defn_names}?" context.errors << GraphQL::StaticValidation::Message.new(msg, nodes: node.ast_nodes.to_a) end # Check for incompatible / non-identical arguments on this node: args = node.ast_nodes.map do |n| n.arguments.reduce({}) do |memo, a| arg_value = a.value memo[a.name] = case arg_value when GraphQL::Language::Nodes::VariableIdentifier "$#{arg_value.name}" when GraphQL::Language::Nodes::Enum "#{arg_value.name}" else GraphQL::Language.serialize(arg_value) end memo end end args.uniq! if args.length > 1 msg = "Field '#{node.name}' has an argument conflict: #{args.map{ |arg| GraphQL::Language.serialize(arg) }.join(" or ")}?" context.errors << GraphQL::StaticValidation::Message.new(msg, nodes: node.ast_nodes.to_a) end end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
graphql-1.5.3 | lib/graphql/static_validation/rules/fields_will_merge.rb |