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