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

Version Path
bootic_client-0.0.32 lib/bootic_client/response_handlers.rb
bootic_client-0.0.31 lib/bootic_client/response_handlers.rb
bootic_client-0.0.30 lib/bootic_client/response_handlers.rb
bootic_client-0.0.29 lib/bootic_client/response_handlers.rb