class Mirador::Client

Constants

CHUNK_SIZE

the number of items to actuall send in a request

Public Class Methods

new(api_key, opt={}) click to toggle source
# File lib/mirador/client.rb, line 24
def initialize(api_key, opt={})
  raise AuthenticationError.new("api key required") if not api_key

  @options = { api_key: api_key }
  @parser = opt[:parser] || ResultList
  @chunk_size = opt[:chunk_size] || CHUNK_SIZE
end

Protected Instance Methods

chunked_request(req, &mthd) click to toggle source

given a request and a block, call the block X number of times where X is request.length / MAX_LEN

# File lib/mirador/client.rb, line 80
def chunked_request req, &mthd
  output = @parser.new

  req.each_slice(@chunk_size).each do |slice|
    output.update(mthd.call(slice))
  end

  return output
end
flexible_request(args, params={}, &cb) click to toggle source
# File lib/mirador/client.rb, line 50
def flexible_request(args, params={}, &cb)
  req = (if args.is_a? Hash

    Hash[args.map do |k, v|
      process_param(k, v)
    end]

  elsif args.is_a? String
    Hash[[process_argument(args)]]

  elsif args and args.length
    Hash[args.each_with_index.map do |a, idx|
      process_argument(a, idx)
    end]

  elsif params
    Hash[params.map do |k, v|
      process_param(k, v)
    end]
  end)

  chunked_request(req) do |item|
    make_request(cb.call(item))
  end
end
make_request(params) click to toggle source

base method to actually make the request

# File lib/mirador/client.rb, line 91
def make_request params

  res = self.class.post(
    "/v1/classify",
    {
      body: @options.merge(params),
      headers: {"User-Agent" => "Mirador Client v1.0/Ruby"}
    }
  )

  k = 'results'

  if res['errors']

    if not res['result']
      raise ApiError, res
    else
      k = 'result'
    end

  elsif not res
    raise ApiError, "no response: #{ res.code }"
  end

  return @parser.parse_results(res[k])
end