class Rickai::Client

Public Class Methods

new(agent_url, options = {}) click to toggle source
# File lib/rickai/client.rb, line 11
def initialize(agent_url, options = {})
  @agent_url = agent_url
  @base_uri = options[:base_uri] || DEFAULT_BASE_URI
  @timeout = options[:timeout] || DEFAULT_TIMEOUT
end

Public Instance Methods

check(attributes) click to toggle source
# File lib/rickai/client.rb, line 25
def check(attributes)
  verify_response(request(url_check, attributes))
end
create(attributes) click to toggle source
# File lib/rickai/client.rb, line 21
def create(attributes)
  verify_response(request(url_create, attributes))
end
update(attributes) click to toggle source
# File lib/rickai/client.rb, line 17
def update(attributes)
  verify_response(request(url_update, attributes))
end

Private Instance Methods

request(path, body = nil, headers = {}) click to toggle source
# File lib/rickai/client.rb, line 51
def request(path, body = nil, headers = {})
  uri = URI.join(@base_uri, path)

  session = Net::HTTP.new(uri.host, uri.port)
  session.use_ssl = (uri.scheme == 'https')
  session.open_timeout = @timeout
  session.read_timeout = @timeout

  req = Net::HTTP::Post.new(uri.path)
  req.initialize_http_header(headers)

  req.add_field('Content-Type', 'application/json')

  unless body.nil?
    attributes =
      if body.is_a?(Hash)
        Hash[body.map { |(k, v)| [k.to_sym, v] }]
      else
        body.map { |item| Hash[item.map { |(k, v)| [k.to_sym, v] }] }
      end

    req.body = MultiJson.dump(attributes)
  end

  session.start do |http|
    http.request(req)
  end
end
url_check() click to toggle source
# File lib/rickai/client.rb, line 39
def url_check
  "/transactions/#{@agent_url}/check"
end
url_create() click to toggle source
# File lib/rickai/client.rb, line 31
def url_create
  "/transactions/#{@agent_url}/create"
end
url_update() click to toggle source
# File lib/rickai/client.rb, line 35
def url_update
  "/transactions/#{@agent_url}/update"
end
verify_response(response) click to toggle source
# File lib/rickai/client.rb, line 43
def verify_response(response)
  if response.code.to_i >= 200 && response.code.to_i < 300
    response
  else
    raise InvalidResponse, "Rick.ai API returned an invalid response: #{response.code} - #{response.message}"
  end
end