Sha256: 965e0f966b09c0c545bc0105ec0e7bc7ee67f6a1e6714bd787484c04a60a5c55
Contents?: true
Size: 1.82 KB
Versions: 2
Compression:
Stored size: 1.82 KB
Contents
module Zendesk2::Searchable def self.included(klass) klass.send(:extend, Zendesk2::Searchable::Attributes) end # Search for resources of a certain type. # # If you need more control over your search (see Zendesk2::Client::Real#search) # # @example search with a simple hash # client.users.search("email" => "jlane@engineyard.com") # @example search with fully qualified query # client.tickets.search("created>2012-06-17+type:ticket+organization:'Mondocam Photo'") # # @param [String, Hash] seach terms. This will be converted to a qualified Zendesk search String # @see http://developer.zendesk.com/documentation/rest_api/search.html def search(terms) query = if terms.is_a?(Hash) terms.merge("type" => self.class.search_type). merge(self.class.scopes.inject({}){|r,k| r.merge(k.to_s => public_send(k))}). map { |k,v| "#{k}:#{v}" }.join(" ") else additional_terms = ["type:#{self.class.search_type}"] additional_terms += self.class.scopes.inject([]) { |r,k| ["#{k}:#{public_send(k)}"] } additional_terms.inject(terms.to_s) do |qualified_search, qualification| if !qualified_search.include?(qualification) "#{qualified_search} #{qualification}" else qualified_search end end end body = connection.send(self.class.search_request, query).body if data = body.delete("results") collection = self.clone.load(data) collection.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page")) collection end end module Attributes attr_accessor :search_type attr_writer :search_request def search_request @search_request ||= :search end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
zendesk2-1.1.3 | lib/zendesk2/searchable.rb |
zendesk2-1.1.2 | lib/zendesk2/searchable.rb |