class GQLi::Client
GraphQL HTTP Client
Attributes
headers[R]
options[R]
params[R]
schema[R]
url[R]
validate_query[R]
Public Class Methods
new(url, params: {}, headers: {}, validate_query: true, options: {})
click to toggle source
# File lib/gqli/client.rb, line 14 def initialize(url, params: {}, headers: {}, validate_query: true, options: {}) @url = url @params = params @headers = headers @validate_query = validate_query @options = options @options[:read_timeout] ||= 60 @options[:write_timeout] ||= 60 @options[:connect_timeout] ||= 60 @schema = Introspection.new(self) if validate_query end
Public Instance Methods
execute(query)
click to toggle source
Executes a query If validations are enabled, will perform validation check before request.
# File lib/gqli/client.rb, line 29 def execute(query) if validate_query validation = schema.validate(query) fail validation_error_message(validation) unless validation.valid? end execute!(query) end
execute!(query)
click to toggle source
Executres a query Ignores validations
# File lib/gqli/client.rb, line 40 def execute!(query) http_response = request.post(@url, params: @params, json: { query: query.to_gql }) fail "Error: #{http_response.reason}\nBody: #{http_response.body}" if http_response.status >= 300 parsed_response = JSON.parse(http_response.to_s) data = parsed_response['data'] errors = parsed_response['errors'] Response.new(data, errors, query) end
request()
click to toggle source
# File lib/gqli/client.rb, line 59 def request HTTP.headers(request_headers).timeout(timeout_options) end
valid?(query)
click to toggle source
Validates a query against the schema
# File lib/gqli/client.rb, line 53 def valid?(query) return true unless validate_query schema.valid?(query) end
Protected Instance Methods
request_headers()
click to toggle source
# File lib/gqli/client.rb, line 74 def request_headers { accept: 'application/json', user_agent: "gqli.rb/#{VERSION}; http.rb/#{HTTP::VERSION}" }.merge(@headers) end
timeout_options()
click to toggle source
# File lib/gqli/client.rb, line 81 def timeout_options { write: options[:write_timeout], connect: options[:connect_timeout], read: options[:read_timeout] } end
validation_error_message(validation)
click to toggle source
# File lib/gqli/client.rb, line 65 def validation_error_message(validation) <<~ERROR Validation Error: query is invalid - HTTP Request not sent. Errors: - #{validation.errors.join("\n - ")} ERROR end