Class: Ecoportal::API::GraphQL::Base::QueryConnection

Inherits:
Query
  • Object
show all
Includes:
Enumerable
Defined in:
lib/ecoportal/api/graphql/base/query_connection.rb

Direct Known Subclasses

Query::Actions, Query::ContractorEntities

Instance Attribute Summary collapse

Attributes inherited from Query

#client

Instance Method Summary collapse

Methods inherited from Query

accepted_params, #access_point, clear_accepted_params, #request, slice_params, #wrap_response

Constructor Details

#initialize(*args, path: default_base_path, **kargs) ⇒ QueryConnection

Returns a new instance of QueryConnection.



11
12
13
14
# File 'lib/ecoportal/api/graphql/base/query_connection.rb', line 11

def initialize(*args, path: default_base_path, **kargs)
  @path = path
  super(*args, **kargs)
end

Instance Attribute Details

#pathObject (readonly)

Returns the value of attribute path.



9
10
11
# File 'lib/ecoportal/api/graphql/base/query_connection.rb', line 9

def path
  @path
end

Instance Method Details

#default_base_pathObject



58
59
60
# File 'lib/ecoportal/api/graphql/base/query_connection.rb', line 58

def default_base_path
  ["currentOrganization"]
end

#each(connection_block: nil, **kargs, &block) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/ecoportal/api/graphql/base/query_connection.rb', line 32

def each(connection_block: nil, **kargs, &block)
  return to_enum(:each, **kargs, connection_block: connection_block) unless block
  cursor = nil; results = 0
  loop do
    kargs.update(after: cursor) if cursor
    connection = query(**kargs, &connection_block)
    #total    = connection.totalCount
    pageInfo = connection.pageInfo
    connection.nodes.each do |item|
      yield item
    end
    break unless cursor = pageInfo.endCursor
  end
end

#graphql_query(**kargs, &block) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/ecoportal/api/graphql/base/query_connection.rb', line 23

def graphql_query(**kargs, &block)
  query_params = self.class.slice_params(kargs)
  client.query(query_params, &block)
rescue Faraday::ParsingError => e
  puts "Internal Error with these params:"
  pp kargs
  raise
end

#query(path: default_base_path, **kargs, &block) ⇒ Object



16
17
18
19
20
21
# File 'lib/ecoportal/api/graphql/base/query_connection.rb', line 16

def query(path: default_base_path, **kargs, &block)
  path ||= default_base_path
  kargs = self.class.slice_params(kargs)
  ap = access_point(path)
  raise "Missuse. You have to implement this method in the child class"
end

#response_classObject



47
48
49
50
51
52
53
54
55
56
# File 'lib/ecoportal/api/graphql/base/query_connection.rb', line 47

def response_class
  return connection_class if respond_to?(:connection_class)
  @response_class ||= self.class.new_class(
    item_class,
    inherits: Ecoportal::API::GraphQL::Base::Connection,
    namespace: "Ecoportal::API::GraphQL::Connection"
  ) do |klass|
      klass.item_class = item_class
  end
end