class Tosuto::API

Constants

DEFAULT_HOST

Public Class Methods

new(host = DEFAULT_HOST) click to toggle source
# File lib/tosuto/api.rb, line 45
def initialize(host = DEFAULT_HOST)
  @host = host
end

Public Instance Methods

request(method, endpoint, body: nil, params: {}, headers: {}, token: nil, restaurant_id: nil) click to toggle source
# File lib/tosuto/api.rb, line 49
def request(method, endpoint, body: nil, params: {}, headers: {}, token: nil, restaurant_id: nil)
  uri = build_uri(endpoint, params)
  http_start(uri) { |http|
    http.request(
      build_request(
        method,
        uri,
        body: body,
        headers: headers,
        token: token,
        restaurant_id: restaurant_id,
      )
    )
  }
end

Private Instance Methods

build_request(method, uri, body: nil, headers: {}, token: nil, restaurant_id: nil) click to toggle source
# File lib/tosuto/api.rb, line 75
def build_request(method, uri, body: nil, headers: {}, token: nil, restaurant_id: nil)
  method_class = case method
                 when :get
                   Net::HTTP::Get
                 when :post
                   Net::HTTP::Post
                 end
  method_class.new(uri.request_uri).tap { |r|
    headers.each do |key, value|
      r.add_field(key, value)
    end
    r.add_field "Accept", "application/json"
    unless token.nil?
      access_token = token.is_a?(OauthToken) ? token.access_token : token
      r.add_field "Authorization", "Bearer #{access_token}"
    end
    unless restaurant_id.nil?
      r.add_field "Toast-Restaurant-External-ID", restaurant_id
    end

    if body.is_a? String
      r.body = body
    elsif !body.nil?
      r.add_field "Content-Type", "application/json"
      r.body = body.to_json
    end
  }
end
build_uri(endpoint, params = nil) click to toggle source
# File lib/tosuto/api.rb, line 67
def build_uri(endpoint, params = nil)
  URI.parse("#{@host}#{endpoint}").tap { |uri|
    next if params.nil?

    uri.query = Resource.encode_form_data(params)
  }
end
http_opts() click to toggle source
# File lib/tosuto/api.rb, line 108
def http_opts
  { use_ssl: true }
end
http_start(uri, &block) click to toggle source
# File lib/tosuto/api.rb, line 104
def http_start(uri, &block)
  Response.new(Net::HTTP.start(uri.host, uri.port, http_opts, &block))
end