Sha256: a2a40dc7c0e7a0a3b19508ddc0f244b9622ca60b5493acb0c35509c9eeb02981

Contents?: true

Size: 1.55 KB

Versions: 5

Compression:

Stored size: 1.55 KB

Contents

module TelphinApi
  # A module that handles method result processing.
  #
  # It implements method blocks support, result typecasting and raises `TelphinApi::Error` in case of an error response.
  module Result
    class << self
      # The main method result processing.
      # @param [Hashie::Mash] response The server response in mash format.
      # @param [Symbol] type The expected result type (`:boolean` or `:anything`).
      # @param [Proc] block A block passed to the API method.
      # @return [Array, Hashie::Mash] The processed result.
      # @raise [TelphinApi::Error] raised when Telphin returns an error response.
      def process(response, type, block)
        result = extract_result(response)
        
        if result.respond_to?(:each)
          # enumerable result receives :map with a block when called with a block
          # or is returned untouched otherwise
          block.nil? ? result : result.map(&block)
        else
          # non-enumerable result is typecasted
          # (and yielded if block_given?)
          result = typecast(result, type)
          block.nil? ? result : block.call(result)
        end
      end
      
    private
      def extract_result(response)
        if response.error?
          raise TelphinApi::Error.new(response.error)
        else
          response
        end
      end
      
      def typecast(parameter, type)
        case type
        when :boolean
          # '1' becomes true, '0' becomes false
          !parameter.to_i.zero?
        else
          parameter
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
telphin_api-1.0.4 lib/telphin_api/result.rb
telphin_api-1.0.3 lib/telphin_api/result.rb
telphin_api-1.0.2 lib/telphin_api/result.rb
telphin_api-1.0.1 lib/telphin_api/result.rb
telphin_api-1.0.0 lib/telphin_api/result.rb