Class: Rockbox::HttpTransport

Inherits:
Object
  • Object
show all
Defined in:
lib/rockbox/transport.rb

Overview


HTTP transport — POSTs GraphQL queries to rockboxd.

Every outgoing variables hash is camelCased and every incoming ‘data` payload is deep-snakeized so callers see idiomatic Ruby keys.


Constant Summary collapse

DEFAULT_OPEN_TIMEOUT =
5
DEFAULT_READ_TIMEOUT =
30

Instance Method Summary collapse

Constructor Details

#initialize(url, open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT) ⇒ HttpTransport

Returns a new instance of HttpTransport.



22
23
24
25
26
# File 'lib/rockbox/transport.rb', line 22

def initialize(url, open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT)
  @uri = URI.parse(url)
  @open_timeout = open_timeout
  @read_timeout = read_timeout
end

Instance Method Details

#execute(query, variables = nil) ⇒ Object

Execute a GraphQL operation. Returns the snake-cased ‘data` Hash.



29
30
31
32
33
34
35
# File 'lib/rockbox/transport.rb', line 29

def execute(query, variables = nil)
  body = { query: query }
  body[:variables] = CaseConversion.deep_camelize(variables) if variables && !variables.empty?

  response = perform_request(body)
  parse_response(response)
end