class Qa::Authorities::AssignFast::GenericAuthority

A wrapper around the FAST api for use with questioning_authority API documentation: www.oclc.org/developer/develop/web-services/fast-api/assign-fast.en.html

Attributes

subauthority[R]

Public Class Methods

new(subauthority) click to toggle source
Calls superclass method
# File lib/qa/authorities/assign_fast/generic_authority.rb, line 8
def initialize(subauthority)
  super()
  @subauthority = subauthority
end

Public Instance Methods

build_query_url(q) click to toggle source

Build a FAST API url

@param [String] the query @return [String] the url

# File lib/qa/authorities/assign_fast/generic_authority.rb, line 44
def build_query_url(q)
  escaped_query = clean_query_string q
  index = AssignFast.index_for_authority(subauthority)
  return_data = "#{index}%2Cidroot%2Cauth%2Ctype"
  num_rows = 20 # max allowed by the API

  # sort=usage+desc is not documented by OCLC but seems necessary to get the sort
  # we formerly got without specifying, that is most useful in our use case.
  "http://fast.oclc.org/searchfast/fastsuggest?&query=#{escaped_query}&queryIndex=#{index}&queryReturn=#{return_data}&suggest=autoSubject&rows=#{num_rows}&sort=usage+desc"
end
response(url) click to toggle source

FAST requires spaces to be encoded as %20 and will not accept + which is Faraday’s default encoding

# File lib/qa/authorities/assign_fast/generic_authority.rb, line 17
def response(url)
  space_fix_encoder = AssignFast::SpaceFixEncoder.new
  Faraday.get(url) do |req|
    req.options.params_encoder = space_fix_encoder
    req.headers['Accept'] = 'application/json'
  end
end

Private Instance Methods

clean_query_string(q) click to toggle source

Removes characters from the query string that are not tolerated by the API

See oclc sample code at
http://experimental.worldcat.org/fast/assignfast/js/assignFASTComplete.js
# File lib/qa/authorities/assign_fast/generic_authority.rb, line 60
def clean_query_string(q)
  ERB::Util.url_encode(q.gsub(/-|\(|\)|:/, ""))
end
parse_authority_response(raw_response) click to toggle source
# File lib/qa/authorities/assign_fast/generic_authority.rb, line 64
def parse_authority_response(raw_response)
  raw_response['response']['docs'].map do |doc|
    index = AssignFast.index_for_authority(subauthority)
    term = doc[index].first
    term += ' USE ' + doc['auth'] if doc['type'] == 'alt'
    { id: doc['idroot'], label: term, value: doc['auth'] }
  end
end