Sha256: 1594506bd31654e623f48e978d582ee9505003334c5f9367a24d8fca8f02d489
Contents?: true
Size: 1.77 KB
Versions: 2
Compression:
Stored size: 1.77 KB
Contents
# frozen_string_literal: true require 'uri' module Billomat # This class provides the possibility to query the resources. class Search # Creates a new search object. # # @param [Class] resource The resource class to be queried # @param [Hash] hash The query def initialize(resource, hash) @resource = resource @hash = hash end # @return [String] the path including the query def path "#{@resource.base_path}?#{hash_to_query}" end # Runs the query and calls the gateway. # Currently it will always return an empty array when no query is provided. # # @return [Array<Billomat::Model::Base>] def run return [] if @hash.compact.empty? to_array(Billomat::Gateway.new(:get, path).run) end # Corrects the response to always return an array. # # @todo Due to a strange API behaviour we have to fix the reponse here. # This may be fixed in a new API version. # # @param [Hash] resp The response from the gateway # @return [Array<Billomat::Model::Base>] def to_array(resp) case count(resp) when 0 [] when 1 # Necessary due to strange API behaviour [@resource.new(resp["#{name}s"][name])] else resp["#{name}s"][name].map do |c| @resource.new(c) end end end # @return [String] the name of the resource def name @resource.resource_name end # @param [Hash] resp The response from the gateway # @return [Integer] the number of records found def count(resp) return 0 if resp.nil? resp["#{name}s"]['@total'].to_i end private # @return [String] the query as www encoded string def hash_to_query URI.encode_www_form(@hash) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
billomat-1.1.0 | lib/billomat/search.rb |
billomat-1.0.0 | lib/billomat/search.rb |