Sha256: f722479888bf26a6e4c90471e3d0b8dd848b499875a3960daf71a0acd9b69cf7

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

begin
  require 'nokogiri'
rescue LoadError
end

module Arbetsformedlingen
  module API
    # API response object
    class Response
      attr_reader :uri

      # Initialize response
      def initialize(response, uri = nil)
        @response = response
        @json = nil
        @uri = uri
      end

      # True if response is 200
      # @return [Boolean] true if response code is 200
      def success?
        response.code == '200'
      end

      # Response body
      # @return [String] the response body
      def body
        response.read_body
      end

      # Response JSON
      # @return [Hash] response json - empty if JSON is invalid
      def json
        @json ||= parse_json(body)
      end

      # Response XML
      # @return [Nokogiri::XML::Document] response - empty is XML is invalid
      def xml
        @xml ||= parse_xml(body)
      end

      # Delegate missing values to response
      def method_missing(method_name, *arguments, &block)
        if response.respond_to?(method_name)
          response.public_send(method_name, *arguments, &block)
        else
          super
        end
      end

      # Return true if missing method can be delegated
      def respond_to_missing?(method_name, include_private = false)
        response.respond_to?(method_name) || super
      end

      private

      attr_reader :response

      def parse_json(string)
        JSON.parse(string.to_s)
      rescue JSON::ParserError => _e
        {}
      end

      def parse_xml(string)
        Nokogiri::XML(string).tap(&:remove_namespaces!)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
arbetsformedlingen-0.7.0 lib/arbetsformedlingen/api/response.rb