Class: GraphQL::Client::GraphObject

Inherits:
Object
  • Object
show all
Includes:
Deserialization
Defined in:
lib/graphql_client/graph_object.rb

Direct Known Subclasses

GraphConnection, GraphNode

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query:, data:, parent: nil) ⇒ GraphObject

Returns a new instance of GraphObject.



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
# File 'lib/graphql_client/graph_object.rb', line 10

def initialize(query:, data:, parent: nil)
  @query = query
  @data = Hash(data)
  @parent = parent

  @data.each do |field_name, value|
    field = query.selection_set.lookup(field_name)

    graph_object = case value
    when Hash
      klass = if field.connection?
        GraphConnection
      elsif field.node?
        GraphNode
      else
        GraphObject
      end

      klass.new(query: field, data: value, parent: self)
    when Array
      value.map do |v|
        if v.is_a? Hash
          self.class.new(query: field, data: v, parent: self)
        else
          v
        end
      end
    else
      value
    end

    create_accessor_methods(field_name, graph_object)
  end
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



8
9
10
# File 'lib/graphql_client/graph_object.rb', line 8

def data
  @data
end

#parentObject (readonly)

Returns the value of attribute parent.



8
9
10
# File 'lib/graphql_client/graph_object.rb', line 8

def parent
  @parent
end

#queryObject (readonly)

Returns the value of attribute query.



8
9
10
# File 'lib/graphql_client/graph_object.rb', line 8

def query
  @query
end

Instance Method Details

#build_minimal_queryObject



45
46
47
48
49
50
51
52
53
# File 'lib/graphql_client/graph_object.rb', line 45

def build_minimal_query
  if parent
    parent.build_minimal_query do |context|
      yield context.add_field(query.field_defn.name, as: query.name, **query.arguments)
    end
  else
    Query::QueryDocument.new(query.schema) { |root| yield root }
  end
end