Class: GraphQL::Client::Schema::ObjectClass
| Relationships & Source Files | |
| Inherits: | Object | 
| Defined in: | lib/graphql/client/schema/object_type.rb | 
Class Method Summary
Instance Method Summary
- #_definer
 - #_spreads
 - 
    
      #errors  
    
    
Public: Return errors associated with data.
 - #inspect
 - #method_missing(name, *args)
 - #respond_to_missing?(name, priv) ⇒ Boolean
 - #source_definition
 - 
    
      #to_h  
    
    
Public: Returns the raw response data.
 - #has_attribute?(attr) ⇒ Boolean private
 - #read_attribute(attr, type) private
 - #verify_collocated_path private
 
Constructor Details
    .new(data = {}, errors = Errors.new, definer = nil)  ⇒ ObjectClass 
  
# File 'lib/graphql/client/schema/object_type.rb', line 177
def initialize(data = {}, errors = Errors.new, definer = nil) @data = data @casted_data = {} @errors = errors # If we are not provided a definition, we can use this empty default definer ||= ObjectType::WithDefinition.new(self.class, {}, nil, []) @definer = definer @enforce_collocated_callers = source_definition && source_definition.client.enforce_collocated_callers end
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args)
[ GitHub ]# File 'lib/graphql/client/schema/object_type.rb', line 231
def method_missing(name, *args) if (attr = self.class::READERS[name]) && (type = @definer.defined_fields[attr]) if @enforce_collocated_callers verify_collocated_path do read_attribute(attr, type) end else read_attribute(attr, type) end elsif (attr = self.class::PREDICATES[name]) && @definer.defined_fields[attr] has_attribute?(attr) else begin super rescue NoMethodError => e type = self.class.type if ActiveSupport::Inflector.underscore(e.name.to_s) != e.name.to_s raise e end all_fields = type.respond_to?(:all_fields) ? type.all_fields : type.fields.values field = all_fields.find do |f| f.name == e.name.to_s || ActiveSupport::Inflector.underscore(f.name) == e.name.to_s end unless field raise UnimplementedFieldError, "undefined field `#{e.name}' on #{type.graphql_name} type. https://git.io/v1y3m" end if @data.key?(field.name) raise ImplicitlyFetchedFieldError, "implicitly fetched field `#{field.name}' on #{type} type. https://git.io/v1yGL" else raise UnfetchedFieldError, "unfetched field `#{field.name}' on #{type} type. https://git.io/v1y3U" end end end end
Instance Method Details
#_definer
[ GitHub ]# File 'lib/graphql/client/schema/object_type.rb', line 196
def _definer @definer end
#_spreads
[ GitHub ]# File 'lib/graphql/client/schema/object_type.rb', line 200
def _spreads @definer.spreads end
#errors
Public: Return errors associated with data.
It’s possible to define “errors” as a field. Ideally this shouldn’t happen, but if it does we should prefer the field rather than the builtin error type.
Returns Errors collection.
# File 'lib/graphql/client/schema/object_type.rb', line 223
def errors if type = @definer.defined_fields["errors"] read_attribute("errors", type) else @errors end end
    #has_attribute?(attr)  ⇒ Boolean  (private)
  
# File 'lib/graphql/client/schema/object_type.rb', line 306
def has_attribute?(attr) !!@data[attr] end
#inspect
[ GitHub ]# File 'lib/graphql/client/schema/object_type.rb', line 270
def inspect parent = self.class until parent.superclass == ObjectClass parent = parent.superclass end ivars = @data.map { |key, value| if value.is_a?(Hash) || value.is_a?(Array) "#{key}=..." else "#{key}=#{value.inspect}" end } buf = "#<#{parent.name}".dup buf << " " << ivars.join(" ") if ivars.any? buf << ">" buf end
#read_attribute(attr, type) (private)
[ GitHub ]# File 'lib/graphql/client/schema/object_type.rb', line 300
def read_attribute(attr, type) @casted_data.fetch(attr) do @casted_data[attr] = type.cast(@data[attr], @errors.filter_by_path(attr)) end end
    #respond_to_missing?(name, priv)  ⇒ Boolean 
  
# File 'lib/graphql/client/schema/object_type.rb', line 208
def respond_to_missing?(name, priv) if (attr = self.class::READERS[name]) || (attr = self.class::PREDICATES[name]) @definer.defined_fields.key?(attr) || super else super end end
#source_definition
[ GitHub ]# File 'lib/graphql/client/schema/object_type.rb', line 204
def source_definition @definer.definition end
#to_h
Public: Returns the raw response data
Returns Hash
# File 'lib/graphql/client/schema/object_type.rb', line 192
def to_h @data end
#verify_collocated_path (private)
[ GitHub ]# File 'lib/graphql/client/schema/object_type.rb', line 292
def verify_collocated_path location = caller_locations(2, 1)[0] CollocatedEnforcement.verify_collocated_path(location, source_definition.source_location[0]) do yield end end