Sha256: 850565bee75a0beb6f7d39242de33ebebb8103a43ebfdcda484c50e288d3971c
Contents?: true
Size: 1.72 KB
Versions: 6
Compression:
Stored size: 1.72 KB
Contents
# frozen_string_literal: true require 'http' require 'json' require_relative './response' require_relative './introspection' require_relative './version' module GQLi # GraphQL HTTP Client class Client attr_reader :url, :params, :headers, :validate_query, :schema def initialize(url, params: {}, headers: {}, validate_query: true) @url = url @params = params @headers = headers @validate_query = validate_query @schema = Introspection.new(self) if validate_query end # Executes a query # If validations are enabled, will perform validation check before request. def execute(query) if validate_query validation = schema.validate(query) fail validation_error_message(validation) unless validation.valid? end execute!(query) end # Executres a query # Ignores validations def execute!(query) http_response = HTTP.headers(request_headers).post(@url, params: @params, json: { query: query.to_gql }) fail "Error: #{http_response.reason}\nBody: #{http_response.body}" if http_response.status >= 300 data = JSON.parse(http_response.to_s)['data'] Response.new(data, query) end # Validates a query against the schema def valid?(query) return true unless validate_query schema.valid?(query) end protected def validation_error_message(validation) <<~ERROR Validation Error: query is invalid - HTTP Request not sent. Errors: - #{validation.errors.join("\n - ")} ERROR end def request_headers { accept: 'application/json', user_agent: "gqli.rb/#{VERSION}; http.rb/#{HTTP::VERSION}" }.merge(@headers) end end end
Version data entries
6 entries across 6 versions & 1 rubygems
Version | Path |
---|---|
gqli-1.0.0 | lib/gqli/client.rb |
gqli-0.6.1 | lib/gqli/client.rb |
gqli-0.6.0 | lib/gqli/client.rb |
gqli-0.5.0 | lib/gqli/client.rb |
gqli-0.4.0 | lib/gqli/client.rb |
gqli-0.3.0 | lib/gqli/client.rb |