Sha256: a44f2be33b1397c2c75b4b664f1aba1e46c54807e9da98473d1ddcf4c8abc9e9

Contents?: true

Size: 1.39 KB

Versions: 3

Compression:

Stored size: 1.39 KB

Contents

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

3 entries across 3 versions & 1 rubygems

Version Path
bootic_client-0.0.28 lib/bootic_client/response_handlers.rb
bootic_client-0.0.27 lib/bootic_client/response_handlers.rb
bootic_client-0.0.26 lib/bootic_client/response_handlers.rb