Sha256: 2d6e17606169fecaaa7b73d08f1561a5aaed582bab5a1514ecc49cd6da1811e6
Contents?: true
Size: 1.42 KB
Versions: 4
Compression:
Stored size: 1.42 KB
Contents
# frozen_string_literal: true require 'json' module BooticClient module ResponseHandlers class Set def initialize(handlers = []) @handlers = handlers end def resolve(response, client) custom = @handlers.find do |handler| obj = handler.call(response, client) break obj if obj nil end # if no handler found, # return raw Faraday response custom || response end def append(handler) @handlers << handler end def prepend(handler) @handlers.unshift handler end def to_a @handlers end end JSON_MIME_EXP = /^application\/json/.freeze IMAGE_MIME_EXP = /^image\//.freeze CONTENT_TYPE = 'Content-Type'.freeze IO = Struct.new(:io, :file_name, :mime_type) do def read(length = nil, outbuff = nil) io.read(length, outbuff) end end Hal = Proc.new do |resp, client| if resp.headers[CONTENT_TYPE] =~ JSON_MIME_EXP body = resp.body data = body.strip.empty? ? {} : ::JSON.parse(body) Entity.new(data, client) end end File = Proc.new do |resp, client| if resp.headers[CONTENT_TYPE] =~ IMAGE_MIME_EXP fname = ::File.basename(resp.env[:url].to_s) IO.new( StringIO.new(resp.body), fname, resp.headers[CONTENT_TYPE] ) end end end end
Version data entries
4 entries across 4 versions & 1 rubygems