module Zendesk2::Searchable
Defines {#search} on relevant collections
Public Class Methods
included(klass)
click to toggle source
# File lib/zendesk2/searchable.rb, line 4 def self.included(klass) klass.send(:extend, Zendesk2::Searchable::Attributes) # @note signal to underlying collection that a search request # must be use when requesting associated pages klass.send(:attribute, :filtered, type: :boolean) end
Public Instance Methods
search(terms, params = {})
click to toggle source
Search
for resources of a certain type.
If you need more control over your search (see Zendesk2::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 developer.zendesk.com/documentation/rest_api/search.html
# File lib/zendesk2/searchable.rb, line 22 def search(terms, params = {}) query = (terms.is_a?(Hash) ? search_by_hash(terms) : search_by_string(terms)) body = cistern.send(self.class.search_request, query, params).body data = body.delete('results') return nil unless data load(data) merge_attributes(Cistern::Hash.slice(body, 'count', 'next_page', 'previous_page').merge('filtered' => true)) self end
Private Instance Methods
search_by_hash(terms)
click to toggle source
# File lib/zendesk2/searchable.rb, line 37 def search_by_hash(terms) terms['type'] = self.class.search_type if self.class.search_type terms.merge(self.class.scopes.inject({}) do |r, k| val = public_send(k) val.nil? ? r : r.merge(k.to_s => val) end,).map { |k, v| "#{k}:#{v}" }.join(' ',) end
search_by_string(terms)
click to toggle source
# File lib/zendesk2/searchable.rb, line 45 def search_by_string(terms) additional_terms = [] additional_terms = ["type:#{self.class.search_type}"] if self.class.search_type additional_terms += self.class.scopes.inject([]) do |r, k| val = public_send(k) val.nil? ? r : ["#{k}:#{val}"] end additional_terms.inject(terms.to_s) do |qualified_search, qualification| if !qualified_search.include?(qualification) "#{qualified_search} #{qualification}" else qualified_search end end end