module Exlibris::Primo::ChainGang::Search

Primo ChainGang Search

These search attributes are included in Exlibris::Primo::Search and allow for chaining methods together.

Examples

Search.new.title("Travels", "title", "contains").
      and.add_query_term("Greene", "creator", "contains").search

Public Class Methods

included(klass) click to toggle source
# File lib/exlibris/primo/chain_gang/search.rb, line 14
def self.included(klass)
  klass.class_eval do
    extend ClassAttributes
  end
end

Public Instance Methods

add_adaptor_location(location) click to toggle source

Adds an adaptor location to the search. Suitable for chaining, e.g.

Search.new.add_adaptor_location("primo_central_multiple_fe").
  add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 302
def add_adaptor_location(location)
  add_location("adaptor", location)
end
add_display_field(*args) click to toggle source

Adds a display field (for highlighting) to the search. Suitable for chaining, e.g.

Search.new.add_display_field("creator").
  add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 267
def add_display_field(*args)
  search_request.add_display_field(*args)
  self
end
add_language(*args) click to toggle source

Adds a language to the search. Suitable for chaining, e.g.

Search.new.add_language("eng").
  add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 240
def add_language(*args)
  search_request.add_language(*args)
  self
end
add_local_location(location) click to toggle source

Adds a local location to the search. Suitable for chaining, e.g.

Search.new.add_local_location("scope:(VOLCANO)").
  add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 291
def add_local_location(location)
  add_location("local", location)
end
add_location(*args) click to toggle source

Adds a location to the search. Suitable for chaining, e.g.

Search.new.add_location("local", "scope:(VOLCANO)").
  add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 279
def add_location(*args)
  search_request.add_location(*args)
  self
end
add_query_term(*args) click to toggle source

Adds a query term to the search. Suitable for chaining, e.g.

Search.new.add_query_term("Travels", "title", "begins_with").
  add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 71
def add_query_term(*args)
  search_request.add_query_term(*args)
  self
end
add_remote_location(location) click to toggle source

Adds a remote location to the search. Suitable for chaining, e.g.

Search.new.add_remote_location("quickset_name").
  add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 313
def add_remote_location(location)
  add_location("remote", location)
end
add_sort_by(*args) click to toggle source

Adds a sort by to the search. Currently the Primo API only supports one sort by value. Add multiple sort bys at your own peril. Suitable for chaining, e.g.

Search.new.add_sort_by("stitle").
  add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 255
def add_sort_by(*args)
  search_request.add_sort_by(*args)
  self
end
and() click to toggle source

Set the boolean operator for the search to “AND”. Suitable for chaining, e.g.

Search.new.add_query_term("Travels", "title", "contains").
  and.add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 46
def and
  search_request.boolean_operator = "AND"
  self
end
disable_did_u_mean() click to toggle source

Disable “Did U Mean” functionality for the search. Suitable for chaining, e.g.

Search.new.disable_did_u_mean.add_query_term("Digital dvide", "any", "contains").
  search.did_u_mean => nil
# File lib/exlibris/primo/chain_gang/search.rb, line 204
def disable_did_u_mean
  request_attributes[:did_u_mean_enabled] = "false"
  self
end
disable_highlighting() click to toggle source

Disable highlighting functionality for the search. Suitable for chaining, e.g.

Search.new.disable_highlighting.add_query_term("Digital dvide", "any", "contains").
  search.did_u_mean => nil
# File lib/exlibris/primo/chain_gang/search.rb, line 228
def disable_highlighting
  request_attributes[:highlighting_enabled] = "false"
  self
end
enable_did_u_mean() click to toggle source

Enable “Did U Mean” functionality for the search. Suitable for chaining, e.g.

Search.new.enable_did_u_mean.add_query_term("Digital dvide", "any", "contains").
  search.did_u_mean => "digital video"
# File lib/exlibris/primo/chain_gang/search.rb, line 192
def enable_did_u_mean
  request_attributes[:did_u_mean_enabled] = "true"
  self
end
enable_highlighting() click to toggle source

Enable highlighting functionality for the search. Suitable for chaining, e.g.

Search.new.enable_highlighting.add_query_term("Digital dvide", "any", "contains").
  search.did_u_mean => "digital d vide"
# File lib/exlibris/primo/chain_gang/search.rb, line 216
def enable_highlighting
  request_attributes[:highlighting_enabled] = "true"
  self
end
method_missing(method, *args, &block) click to toggle source

Dynamically sets chainable accessor for indexes and precisions Suitable for chaining, e.g.

Search.new.title_begins_with("Travels").
  creator_contains("Greene").search
Calls superclass method
# File lib/exlibris/primo/chain_gang/search.rb, line 84
def method_missing(method, *args, &block)
  if matches? method
    self.class.send(:define_method, method) { |value|
      index = indexize(method)
      index = (indexes_map[index] || index)
      precision = precisionize(method)
      precision = (precisions_map[precision] || precision)
      add_query_term value, index, precision
    }
    send method, *args, &block
  else
    super
  end
end
or() click to toggle source

Set the boolean operator for the search to “OR”. Suitable for chaining, e.g.

Search.new.add_query_term("Travels", "title", "contains").
  or.add_query_term("Greene", "creator", "contains").search
# File lib/exlibris/primo/chain_gang/search.rb, line 59
def or
  search_request.boolean_operator = "OR"
  self
end
page_size!(page_size) click to toggle source

Set page size for the search. Suitable for chaining, e.g.

Search.new.page_size!(10).
  add_query_term("Digital divide", "any", "contains").
    search.records.size => 10
# File lib/exlibris/primo/chain_gang/search.rb, line 179
def page_size!(page_size)
  request_attributes[:bulk_size] = "#{page_size}"
  self
end
Also aliased as: page_size=
page_size=(page_size)
Alias for: page_size!
respond_to?(method, include_private=false) click to toggle source

Returns true if the method can be evaluated to a method name and parameter.

Calls superclass method
# File lib/exlibris/primo/chain_gang/search.rb, line 101
def respond_to? method, include_private=false
  if(matches? method)
    return true
  else
    super
  end
end
start_index!(start_index) click to toggle source

Set start index for the search. Suitable for chaining, e.g.

Search.new.start_index!(11).
  add_query_term("Digital divide", "any", "contains").
    search.records.first => 11th record from the search
# File lib/exlibris/primo/chain_gang/search.rb, line 165
def start_index!(start_index)
  request_attributes[:start_index] = "#{start_index}"
  self
end
Also aliased as: start_index=
start_index=(start_index)
Alias for: start_index!

Private Instance Methods

indexes() click to toggle source

Supported indexes

# File lib/exlibris/primo/chain_gang/search.rb, line 110
def indexes
  @indexes ||= self.class.indexes
end
indexes_map() click to toggle source

Alternative indexes mapping

# File lib/exlibris/primo/chain_gang/search.rb, line 116
def indexes_map
  @indexes_map ||= self.class.indexes_map
end
indexize(method) click to toggle source

Get the index from the method.

# File lib/exlibris/primo/chain_gang/search.rb, line 134
def indexize(method)
  parse_method(method).first.to_sym
end
matches?(method) click to toggle source

Does this match our indexes and precisions.

# File lib/exlibris/primo/chain_gang/search.rb, line 152
def matches? method
  indexes.include? indexize(method) and precisions.include? precisionize(method)
end
parse_method(method, delimiter="_") click to toggle source

Parse the method on the first occurence of delimiter.

# File lib/exlibris/primo/chain_gang/search.rb, line 146
def parse_method(method, delimiter="_")
  method.to_s.split(delimiter, 2)
end
precisionize(method) click to toggle source

Get the precision from the method.

# File lib/exlibris/primo/chain_gang/search.rb, line 140
def precisionize(method)
  parse_method(method).last.to_sym
end
precisions() click to toggle source

Supported precisions

# File lib/exlibris/primo/chain_gang/search.rb, line 122
def precisions
  @precisions ||= self.class.precisions
end
precisions_map() click to toggle source

Alternative precisions mapping

# File lib/exlibris/primo/chain_gang/search.rb, line 128
def precisions_map
  @precisions_map ||= self.class.precisions_map
end