Sha256: baeff2a685884cb14afd92e1b7ce6f8c8c41c2572c51250ab84cd8780dd7e3a8

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'
require 'json'

module EacEnvs
  module Http
    class Response < ::StandardError
      module Body
        delegate :response_body_data_proc, to: :request

        def body_data
          r = body_data_method_name.if_present(body_str) do |v|
            respond_to?(v, true) ? send(v) : body_str
          end
          r = response_body_data_proc.call(r) if response_body_data_proc.present?
          r
        end

        # @return [Object]
        # @raise [EacEnvs::Http::Response]
        def body_data!
          raise_unless_200

          body_data
        end

        # @deprecated Use {#body_data!} instead.
        # @return [Object]
        # @raise [EacEnvs::Http::Response]
        def body_data_or_raise
          body_data!
        end

        # @return [String]
        def body_str
          performed.body
        end

        def body_str_or_raise
          raise_unless_200

          body_str
        end

        # @param path [Pathname]
        def write_body(path)
          ::File.binwrite(path, performed.body)
        end

        private

        def body_data_from_application_json
          ::JSON.parse(body_str)
        end

        def body_data_from_application_xml
          Hash.from_xml(body_str)
        end

        # @return [String]
        def body_data_method_name
          content_type.if_present do |v|
            "body_data_from_#{v.split(';').first.force_encoding(::Encoding::UTF_8).variableize}"
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
eac_envs-http-0.5.1 lib/eac_envs/http/response/body.rb
eac_envs-http-0.5.0 lib/eac_envs/http/response/body.rb