Class: Qa::Authorities::AssignFast::GenericAuthority

Inherits:
Base
  • Object
show all
Includes:
WebServiceBase
Defined in:
lib/qa/authorities/assign_fast/generic_authority.rb

Overview

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

Instance Attribute Summary collapse

Attributes included from WebServiceBase

#raw_response

Instance Method Summary collapse

Methods included from WebServiceBase

#json

Methods inherited from Base

#all, #find

Constructor Details

#initialize(subauthority) ⇒ GenericAuthority

Returns a new instance of GenericAuthority.



8
9
10
11
# File 'lib/qa/authorities/assign_fast/generic_authority.rb', line 8

def initialize(subauthority)
  super()
  @subauthority = subauthority
end

Instance Attribute Details

#subauthorityObject (readonly)

Returns the value of attribute subauthority.



6
7
8
# File 'lib/qa/authorities/assign_fast/generic_authority.rb', line 6

def subauthority
  @subauthority
end

Instance Method Details

#build_query_url(q) ⇒ String

Build a FAST API url

Parameters:

  • the (String)

    query

Returns:

  • (String)

    the url



44
45
46
47
48
49
50
51
52
53
# 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) ⇒ Object

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



17
18
19
20
21
22
23
# 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

#search(q) ⇒ Object

Search the FAST api

Parameters:

  • the (String)

    query

Returns:

  • json results



29
30
31
32
33
34
35
36
37
38
# File 'lib/qa/authorities/assign_fast/generic_authority.rb', line 29

def search(q)
  url = build_query_url q
  begin
    raw_response = json(url)
  rescue JSON::ParserError
    Rails.logger.info "Could not parse response as JSON. Request url: #{url}"
    return []
  end
  parse_authority_response(raw_response)
end