Class: GraphQL::Client::Errors
- Inherits:
-
Object
- Object
- GraphQL::Client::Errors
- Includes:
- Enumerable
- Defined in:
- lib/graphql/client/errors.rb
Overview
Public: Collection of errors associated with GraphQL object type.
Inspired by ActiveModel::Errors.
Class Method Summary collapse
-
.normalize_error_paths(data = nil, errors = []) ⇒ Object
Internal: Normalize GraphQL Error “path” ensuring the path exists.
Instance Method Summary collapse
-
#[](key) ⇒ Object
Public: When passed a symbol or a name of a field, returns an array of errors for the method.
-
#all ⇒ Object
Public: Return collection of all nested errors.
-
#details ⇒ Object
Public: Access Hash of error objects.
-
#each ⇒ Object
Public: Iterates through each error key, value pair in the error messages hash.
-
#empty? ⇒ Boolean
(also: #blank?)
Public: Check if there are no errors on object.
-
#filter_by_path(field) ⇒ Object
Internal: Return collection of errors for a given subfield.
-
#include?(field) ⇒ Boolean
(also: #has_key?, #key?)
Public: Check if there are any errors on a given field.
-
#initialize(errors = [], path = [], all = false) ⇒ Errors
constructor
Internal: Initalize from collection of errors.
-
#inspect ⇒ Object
Public: Display console friendly representation of errors collection.
-
#keys ⇒ Object
Public: Returns all message keys.
-
#messages ⇒ Object
Public: Access Hash of error messages.
-
#size ⇒ Object
(also: #count)
Public: Count the number of errors on object.
-
#values ⇒ Object
Public: Returns all message values.
Constructor Details
#initialize(errors = [], path = [], all = false) ⇒ Errors
Internal: Initalize from collection of errors.
errors - Array of GraphQL Hash error objects path - Array of String|Integer fields to data all - Boolean flag if all nested errors should be available
38 39 40 41 42 |
# File 'lib/graphql/client/errors.rb', line 38 def initialize(errors = [], path = [], all = false) @ast_path = path @all = all @raw_errors = errors end |
Class Method Details
.normalize_error_paths(data = nil, errors = []) ⇒ Object
Internal: Normalize GraphQL Error “path” ensuring the path exists.
Records “normalizedPath” value to error object.
data - Hash of response data errors - Array of error Hashes
Returns nothing.
19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/graphql/client/errors.rb', line 19 def self.normalize_error_paths(data = nil, errors = []) errors.each do |error| path = ["data"] current = data error.fetch("path", []).each do |key| break unless current path << key current = current[key] end error["normalizedPath"] = path end errors end |
Instance Method Details
#[](key) ⇒ Object
Public: When passed a symbol or a name of a field, returns an array of errors for the method.
data.errors[:node] # => ["couldn't find node by id"]
data.errors['node'] # => ["couldn't find node by id"]
Returns Array of errors.
121 122 123 |
# File 'lib/graphql/client/errors.rb', line 121 def [](key) .fetch(key, []) end |
#all ⇒ Object
Public: Return collection of all nested errors.
data.errors[:node]
data.errors.all[:node]
Returns Errors collection.
50 51 52 53 54 55 56 |
# File 'lib/graphql/client/errors.rb', line 50 def all if @all self else self.class.new(@raw_errors, @ast_path, true) end end |
#details ⇒ Object
Public: Access Hash of error objects.
data.errors.details["node"]
data.errors.details[:node]
Returns HashWithIndifferentAccess.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/graphql/client/errors.rb', line 94 def details return @details if defined? @details details = {} @raw_errors.each do |error| path = error.fetch("normalizedPath", []) matched_path = @all ? path[0, @ast_path.length] : path[0...-1] next unless @ast_path == matched_path field = path[@ast_path.length] next unless field details[field] ||= [] details[field] << error end @details = HashWithIndifferentAccess.new(details) end |
#each ⇒ Object
Public: Iterates through each error key, value pair in the error messages hash. Yields the field and the error for that attribute. If the field has more than one error message, yields once for each error message.
129 130 131 132 133 134 |
# File 'lib/graphql/client/errors.rb', line 129 def each return enum_for(:each) unless block_given? .keys.each do |field| [field].each { |error| yield field, error } end end |
#empty? ⇒ Boolean Also known as: blank?
Public: Check if there are no errors on object.
data.errors. # => {"node"=>["couldn't find node by id"]}
data.errors.empty? # => false
Returns true if no errors are found, otherwise false.
167 168 169 |
# File 'lib/graphql/client/errors.rb', line 167 def empty? size.zero? end |
#filter_by_path(field) ⇒ Object
Internal: Return collection of errors for a given subfield.
data.errors.filter_by_path("node")
Returns Errors collection.
63 64 65 |
# File 'lib/graphql/client/errors.rb', line 63 def filter_by_path(field) self.class.new(@raw_errors, @ast_path + [field], @all) end |
#include?(field) ⇒ Boolean Also known as: has_key?, key?
Public: Check if there are any errors on a given field.
data.errors. # => {"node"=>["couldn't find node by id", "unauthorized"]}
data.errors.include?("node") # => true
data.errors.include?("version") # => false
Returns true if the error messages include an error for the given field, otherwise false.
144 145 146 |
# File 'lib/graphql/client/errors.rb', line 144 def include?(field) self[field].any? end |
#inspect ⇒ Object
Public: Display console friendly representation of errors collection.
Returns String.
195 196 197 |
# File 'lib/graphql/client/errors.rb', line 195 def inspect "#<#{self.class} @messages=#{.inspect} @details=#{details.inspect}>" end |
#keys ⇒ Object
Public: Returns all message keys.
data.errors. # => {"node"=>["couldn't find node by id"]}
data.errors.values # => ["node"]
Returns Array of String field names.
178 179 180 |
# File 'lib/graphql/client/errors.rb', line 178 def keys .keys end |
#messages ⇒ Object
Public: Access Hash of error messages.
data.errors.["node"]
data.errors.[:node]
Returns HashWithIndifferentAccess.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/graphql/client/errors.rb', line 73 def return @messages if defined? @messages = {} details.each do |field, errors| [field] ||= [] errors.each do |error| [field] << error.fetch("message") end end @messages = HashWithIndifferentAccess.new() end |
#size ⇒ Object Also known as: count
Public: Count the number of errors on object.
data.errors. # => {"node"=>["couldn't find node by id", "unauthorized"]}
data.errors.size # => 2
Returns the number of error messages.
156 157 158 |
# File 'lib/graphql/client/errors.rb', line 156 def size values.flatten.size end |
#values ⇒ Object
Public: Returns all message values.
data.errors. # => {"node"=>["couldn't find node by id"]}
data.errors.values # => [["couldn't find node by id"]]
Returns Array of Array String messages.
188 189 190 |
# File 'lib/graphql/client/errors.rb', line 188 def values .values end |