doc/api/examples/ruby/example_2.rb
require "net/http"
require "json"
API_ENDPOINT = "https://demo.consuldemocracy.org/graphql".freeze
def make_request(query_string)
uri = URI(API_ENDPOINT)
uri.query = URI.encode_www_form(query: query_string.delete("\n").delete(" "))
request = Net::HTTP::Get.new(uri)
request[:accept] = "application/json"
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |https|
https.request(request)
end
end
def build_query(options = {})
page_size = options[:page_size] || 25
page_size_parameter = "first: #{page_size}"
page_number = options[:page_number] || 0
after_parameter = page_number.positive? ? ", after: \"#{options[:next_cursor]}\"" : ""
<<-GRAPHQL
{
proposals(#{page_size_parameter}#{after_parameter}) {
pageInfo {
endCursor,
hasNextPage
},
edges {
node {
id,
title,
public_created_at
}
}
}
}
GRAPHQL
end
page_number = 0
next_cursor = nil
proposals = []
loop do
puts "> Requesting page #{page_number}"
query = build_query(page_size: 25, page_number: page_number, next_cursor: next_cursor)
response = make_request(query)
response_hash = JSON.parse(response.body)
page_info = response_hash["data"]["proposals"]["pageInfo"]
has_next_page = page_info["hasNextPage"]
next_cursor = page_info["endCursor"]
proposal_edges = response_hash["data"]["proposals"]["edges"]
puts "\tHTTP code: #{response.code}"
proposal_edges.each do |edge|
proposals << edge["node"]
end
page_number += 1
break unless has_next_page
end