qa 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +24 -21
- data/Rakefile +1 -1
- data/app/controllers/qa/terms_controller.rb +22 -53
- data/config/routes.rb +4 -7
- data/lib/qa/authorities.rb +3 -1
- data/lib/qa/authorities/base.rb +27 -8
- data/lib/qa/authorities/getty.rb +56 -0
- data/lib/qa/authorities/loc.rb +27 -131
- data/lib/qa/authorities/loc_subauthority.rb +90 -0
- data/lib/qa/authorities/local.rb +38 -21
- data/lib/qa/authorities/local_subauthority.rb +18 -0
- data/lib/qa/authorities/mesh.rb +16 -23
- data/lib/qa/authorities/mesh_tools/mesh_data_parser.rb +0 -25
- data/lib/qa/authorities/mesh_tools/mesh_importer.rb +0 -2
- data/lib/qa/authorities/oclcts.rb +17 -24
- data/lib/qa/authorities/tgnlang.rb +4 -18
- data/lib/qa/authorities/web_service_base.rb +3 -10
- data/lib/qa/version.rb +1 -1
- data/spec/controllers/terms_controller_spec.rb +93 -44
- data/spec/fixtures/aat-response.txt +108 -0
- data/spec/fixtures/getty-aat-find-response.json +2494 -0
- data/spec/fixtures/loc-response.txt +1521 -17
- data/spec/fixtures/loc-subject-find-response.txt +24 -0
- data/spec/internal/Gemfile +16 -13
- data/spec/internal/Gemfile.lock +121 -86
- data/spec/internal/app/assets/javascripts/application.js +1 -1
- data/spec/internal/app/assets/stylesheets/application.css +1 -1
- data/spec/internal/bin/rails +1 -5
- data/spec/internal/bin/rake +0 -4
- data/spec/internal/bin/setup +29 -0
- data/spec/internal/config.ru +1 -1
- data/spec/internal/config/application.rb +3 -0
- data/spec/internal/config/boot.rb +1 -2
- data/spec/internal/config/environments/development.rb +4 -0
- data/spec/internal/config/environments/production.rb +14 -18
- data/spec/internal/config/environments/test.rb +5 -2
- data/spec/internal/config/initializers/assets.rb +11 -0
- data/spec/internal/config/initializers/cookies_serializer.rb +1 -1
- data/spec/internal/config/secrets.yml +2 -2
- data/spec/internal/db/development.sqlite3 +0 -0
- data/spec/internal/db/migrate/{20140620210534_create_qa_subject_mesh_terms.qa.rb → 20150311214117_create_qa_subject_mesh_terms.qa.rb} +0 -0
- data/spec/internal/db/migrate/{20140620210535_create_qa_mesh_tree.qa.rb → 20150311214118_create_qa_mesh_tree.qa.rb} +0 -0
- data/spec/internal/db/migrate/{20140620210536_add_term_lower_to_qa_subject_mesh_terms.qa.rb → 20150311214119_add_term_lower_to_qa_subject_mesh_terms.qa.rb} +0 -0
- data/spec/internal/db/schema.rb +3 -3
- data/spec/internal/db/test.sqlite3 +0 -0
- data/spec/internal/lib/generators/test_app_generator.rb +0 -1
- data/spec/internal/log/development.log +498 -207
- data/spec/internal/test/test_helper.rb +0 -3
- data/spec/lib/authorities_getty_spec.rb +71 -0
- data/spec/lib/authorities_loc_spec.rb +98 -65
- data/spec/lib/authorities_loc_subauthorities.rb +81 -0
- data/spec/lib/authorities_local_spec.rb +53 -79
- data/spec/lib/authorities_local_subauthorities_spec.rb +43 -0
- data/spec/lib/authorities_mesh_spec.rb +16 -12
- data/spec/lib/authorities_oclcts_spec.rb +17 -17
- data/spec/lib/authorities_tgnlang_spec.rb +4 -7
- data/spec/lib/mesh_data_parser_spec.rb +13 -13
- data/spec/lib/tasks/mesh.rake_spec.rb +4 -4
- data/spec/models/subject_mesh_term_spec.rb +5 -5
- data/spec/routing/route_spec.rb +34 -0
- data/spec/spec_helper.rb +5 -22
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -1
- metadata +44 -12
- data/lib/qa/authorities/local/subauthority.rb +0 -65
- data/spec/internal/bin/spring +0 -18
@@ -0,0 +1,90 @@
|
|
1
|
+
module Qa::Authorities::LocSubauthority
|
2
|
+
|
3
|
+
def get_url_for_authority authority
|
4
|
+
case
|
5
|
+
when authorities.include?(authority) then authority_base_url
|
6
|
+
when vocabularies.include?(authority) then vocab_base_url
|
7
|
+
when datatypes.include?(authority) then datatype_base_url
|
8
|
+
when preservation.include?(authority) then vocab_preservation_base_url
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def authorities
|
13
|
+
[
|
14
|
+
"subjects",
|
15
|
+
"names",
|
16
|
+
"classification",
|
17
|
+
"childrensSubjects",
|
18
|
+
"genreForms",
|
19
|
+
"performanceMediums"
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
def vocabularies
|
24
|
+
[
|
25
|
+
"graphicMaterials",
|
26
|
+
"organizations",
|
27
|
+
"relators",
|
28
|
+
"countries",
|
29
|
+
"ethnographicTerms",
|
30
|
+
"geographicAreas",
|
31
|
+
"languages",
|
32
|
+
"iso639-1",
|
33
|
+
"iso639-2",
|
34
|
+
"iso639-5",
|
35
|
+
"preservation",
|
36
|
+
"actionsGranted",
|
37
|
+
"agentType"
|
38
|
+
]
|
39
|
+
end
|
40
|
+
|
41
|
+
def datatypes
|
42
|
+
["edtf"]
|
43
|
+
end
|
44
|
+
|
45
|
+
def preservation
|
46
|
+
[
|
47
|
+
"contentLocationType",
|
48
|
+
"copyrightStatus",
|
49
|
+
"cryptographicHashFunctions",
|
50
|
+
"environmentCharacteristic",
|
51
|
+
"environmentPurpose",
|
52
|
+
"eventRelatedAgentRole",
|
53
|
+
"eventRelatedObjectRole",
|
54
|
+
"eventType",
|
55
|
+
"formatRegistryRole",
|
56
|
+
"hardwareType",
|
57
|
+
"inhibitorTarget",
|
58
|
+
"inhibitorType",
|
59
|
+
"objectCategory",
|
60
|
+
"preservationLevelRole",
|
61
|
+
"relationshipSubType",
|
62
|
+
"relationshipType",
|
63
|
+
"rightsBasis",
|
64
|
+
"rightsRelatedAgentRole",
|
65
|
+
"signatureEncoding",
|
66
|
+
"signatureMethod",
|
67
|
+
"softwareType",
|
68
|
+
"storageMedium"
|
69
|
+
]
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def vocab_base_url
|
75
|
+
"cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fvocabulary%2F"
|
76
|
+
end
|
77
|
+
|
78
|
+
def authority_base_url
|
79
|
+
"cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2F"
|
80
|
+
end
|
81
|
+
|
82
|
+
def datatype_base_url
|
83
|
+
"cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fdatatypes%2F"
|
84
|
+
end
|
85
|
+
|
86
|
+
def vocab_preservation_base_url
|
87
|
+
"cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fvocabulary%2Fpreservation%2F"
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
data/lib/qa/authorities/local.rb
CHANGED
@@ -1,39 +1,56 @@
|
|
1
1
|
module Qa::Authorities
|
2
|
+
class Local < Base
|
2
3
|
|
3
|
-
|
4
|
-
extend Deprecation
|
4
|
+
include Qa::Authorities::LocalSubauthority
|
5
5
|
|
6
|
-
|
6
|
+
def initialize *args
|
7
|
+
super
|
8
|
+
@sub_authority ||= args.first
|
9
|
+
raise "No sub-authority provided" if sub_authority.nil?
|
10
|
+
end
|
7
11
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
raise ArgumentError, "Invalid sub-authority '#{name}'" unless Subauthority.names.include?(name)
|
12
|
-
@sub_authorities[name] ||= Subauthority.new(name)
|
13
|
-
end
|
12
|
+
def sub_authorities
|
13
|
+
names
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
def search(q)
|
17
|
+
r = q.blank? ? [] : terms.select { |term| /\b#{q.downcase}/.match(term[:term].downcase) }
|
18
|
+
r.map do |res|
|
19
|
+
{ :id => res[:id], :label => res[:term] }.with_indifferent_access
|
17
20
|
end
|
21
|
+
end
|
18
22
|
|
19
|
-
|
20
|
-
|
23
|
+
def all
|
24
|
+
terms.map do |res|
|
25
|
+
{ :id => res[:id], :label => res[:term] }.with_indifferent_access
|
21
26
|
end
|
22
27
|
end
|
23
28
|
|
24
|
-
|
29
|
+
def find(id)
|
30
|
+
terms.find { |term| term[:id] == id } || {}
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
25
34
|
|
26
|
-
def
|
27
|
-
|
35
|
+
def terms
|
36
|
+
sub_authority_hash = YAML.load(File.read(sub_authority_filename))
|
37
|
+
terms = sub_authority_hash.with_indifferent_access.fetch(:terms, [])
|
38
|
+
normalize_terms(terms)
|
28
39
|
end
|
29
40
|
|
30
|
-
def
|
31
|
-
|
41
|
+
def sub_authority_filename
|
42
|
+
File.join(sub_authorities_path, "#{sub_authority}.yml")
|
32
43
|
end
|
33
44
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
45
|
+
def normalize_terms(terms)
|
46
|
+
terms.map do |term|
|
47
|
+
if term.is_a? String
|
48
|
+
{ :id => term, :term => term }.with_indifferent_access
|
49
|
+
else
|
50
|
+
term[:id] ||= term[:term]
|
51
|
+
term
|
52
|
+
end
|
53
|
+
end
|
37
54
|
end
|
38
55
|
|
39
56
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Qa::Authorities::LocalSubauthority
|
2
|
+
|
3
|
+
# Path to sub-authority files is either the full path to a directory or
|
4
|
+
# the path to a directory relative to the Rails application
|
5
|
+
def sub_authorities_path
|
6
|
+
if AUTHORITIES_CONFIG[:local_path].starts_with?(File::Separator)
|
7
|
+
AUTHORITIES_CONFIG[:local_path]
|
8
|
+
else
|
9
|
+
File.join(Rails.root, AUTHORITIES_CONFIG[:local_path])
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Local sub-authorities are any YAML files in the sub_authorities_path
|
14
|
+
def names
|
15
|
+
Dir.entries(sub_authorities_path).map { |f| File.basename(f, ".yml") if f.match(/yml$/) }.compact
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/lib/qa/authorities/mesh.rb
CHANGED
@@ -1,32 +1,25 @@
|
|
1
1
|
module Qa::Authorities
|
2
|
-
class Mesh
|
3
|
-
extend Deprecation
|
2
|
+
class Mesh < Base
|
4
3
|
|
5
|
-
def
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
def search q
|
5
|
+
begin
|
6
|
+
r = Qa::SubjectMeshTerm.where('term_lower LIKE ?', "#{@q}%").limit(10)
|
7
|
+
r.map { |t| {id: t.term_id, label: t.term} }
|
8
|
+
end
|
10
9
|
end
|
11
10
|
|
12
|
-
def
|
13
|
-
|
11
|
+
def find id
|
12
|
+
begin
|
13
|
+
r = Qa::SubjectMeshTerm.where(term_id: id).limit(1).first
|
14
|
+
r.nil? ? nil : {id: r.term_id, label: r.term, synonyms: r.synonyms}
|
15
|
+
end
|
14
16
|
end
|
15
17
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
def get_full_record(id)
|
24
|
-
Deprecation.warn(Mesh, "get_full_record is deprecated and will be removed in 0.1.0. Use full_record instead", caller)
|
25
|
-
full_record(id)
|
26
|
-
end
|
27
|
-
|
28
|
-
# satisfy TermsController
|
29
|
-
def parse_authority_response
|
18
|
+
def all
|
19
|
+
begin
|
20
|
+
r = Qa::SubjectMeshTerm.all
|
21
|
+
r.map { |t| {id: t.term_id, label: t.term} }
|
22
|
+
end
|
30
23
|
end
|
31
24
|
|
32
25
|
end
|
@@ -35,31 +35,6 @@ module Qa::Authorities
|
|
35
35
|
return result
|
36
36
|
end
|
37
37
|
|
38
|
-
### XXX: delete everything below?
|
39
|
-
|
40
|
-
def self.get_synonyms(record)
|
41
|
-
return [] if record['ENTRY'].blank?
|
42
|
-
record['ENTRY'].map { |synonym| synonym.split('|').first }
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.get_print_synonyms(record)
|
46
|
-
return [] if record['PRINT ENTRY'].blank?
|
47
|
-
record['PRINT ENTRY'].map { |synonym| synonym.split('|').first }
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.get_description(record)
|
51
|
-
return [] if record['MS'].blank?
|
52
|
-
record['MS']
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.get_tree(record)
|
56
|
-
return [] if record['MN'].blank?
|
57
|
-
record['MN']
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.get_term(record)
|
61
|
-
record['MH'].first
|
62
|
-
end
|
63
38
|
end
|
64
39
|
end
|
65
40
|
end
|
@@ -2,26 +2,22 @@ require 'open-uri'
|
|
2
2
|
require 'nokogiri'
|
3
3
|
|
4
4
|
module Qa::Authorities
|
5
|
-
class Oclcts <
|
6
|
-
extend Deprecation
|
5
|
+
class Oclcts < WebServiceBase
|
7
6
|
|
8
7
|
SRU_SERVER_CONFIG = YAML.load_file(Rails.root.join("config", "oclcts-authorities.yml"))
|
9
|
-
|
10
|
-
attr_accessor :sub_authority
|
11
8
|
|
12
|
-
def initialize
|
9
|
+
def initialize *args
|
10
|
+
super
|
11
|
+
@sub_authority ||= args.first
|
12
|
+
raise "No sub-authority provided" if sub_authority.nil?
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
|
15
|
+
def sub_authorities
|
16
|
+
SRU_SERVER_CONFIG["authorities"].map { |sub_authority| sub_authority[0] }
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
def search(q, sub_authority=nil)
|
24
|
-
raw_response = get_raw_response("prefix-query", q, sub_authority)
|
19
|
+
def search q
|
20
|
+
get_raw_response("prefix-query", q)
|
25
21
|
r = Array.new
|
26
22
|
raw_response.xpath('sru:searchRetrieveResponse/sru:records/sru:record/sru:recordData', 'sru' => 'http://www.loc.gov/zing/srw/').each do |record|
|
27
23
|
r.append({"id" => record.xpath('Zthes/term/termId').first.content, "label" => record.xpath('Zthes/term/termName').first.content})
|
@@ -29,19 +25,16 @@ module Qa::Authorities
|
|
29
25
|
r
|
30
26
|
end
|
31
27
|
|
32
|
-
def
|
33
|
-
|
34
|
-
parse_full_record(
|
28
|
+
def find id
|
29
|
+
get_raw_response("id-lookup", id)
|
30
|
+
parse_full_record(id)
|
35
31
|
end
|
36
32
|
|
37
|
-
|
38
|
-
Deprecation.warn(Oclcts, "get_full_record is deprecated and will be removed in 0.1.0. Use full_record instead", caller)
|
39
|
-
full_record(id, sub_authority)
|
40
|
-
end
|
33
|
+
private
|
41
34
|
|
42
|
-
def parse_full_record
|
35
|
+
def parse_full_record id
|
43
36
|
a = {}
|
44
|
-
zthes_record =
|
37
|
+
zthes_record = raw_response.xpath("sru:searchRetrieveResponse/sru:records/sru:record/sru:recordData/Zthes/term[termId='#{id}']", 'sru' => 'http://www.loc.gov/zing/srw/')
|
45
38
|
zthes_record.children.each do |child|
|
46
39
|
if (child.is_a? Nokogiri::XML::Element) && (!child.children.nil?) && (child.children.size == 1) && (child.children.first.is_a? Nokogiri::XML::Text)
|
47
40
|
a[child.name] = child.children.first.to_s
|
@@ -50,9 +43,9 @@ module Qa::Authorities
|
|
50
43
|
a
|
51
44
|
end
|
52
45
|
|
53
|
-
def get_raw_response
|
46
|
+
def get_raw_response query_type, id
|
54
47
|
query_url = SRU_SERVER_CONFIG["url-pattern"][query_type].gsub("{query}", id).gsub("{id}", id).gsub("{authority-id}", sub_authority)
|
55
|
-
Nokogiri::XML(open(query_url))
|
48
|
+
@raw_response = Nokogiri::XML(open(query_url))
|
56
49
|
end
|
57
50
|
end
|
58
51
|
end
|
@@ -1,15 +1,10 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
|
3
3
|
module Qa::Authorities
|
4
|
-
class Tgnlang
|
5
|
-
attr_accessor :response
|
6
|
-
extend Deprecation
|
4
|
+
class Tgnlang < Base
|
7
5
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
def search(q, sub_authority='')
|
12
|
-
self.response = getTgnLang(q)
|
6
|
+
def search(q)
|
7
|
+
getTgnLang(q)
|
13
8
|
end
|
14
9
|
|
15
10
|
def getTgnLang(q)
|
@@ -39,16 +34,7 @@ module Qa::Authorities
|
|
39
34
|
end
|
40
35
|
end
|
41
36
|
|
42
|
-
def
|
43
|
-
self.response
|
44
|
-
end
|
45
|
-
|
46
|
-
def get_full_record(id, sub_authority)
|
47
|
-
Deprecation.warn(Tgnlang, "get_full_record is deprecated and will be removed in 0.1.0. Use full_record instead", caller)
|
48
|
-
full_record(id, sub_authority)
|
49
|
-
end
|
50
|
-
|
51
|
-
def full_record(id, sub_authority)
|
37
|
+
def find(id)
|
52
38
|
id = id.downcase
|
53
39
|
Tgnlang.languages.each do |h|
|
54
40
|
if h["label"].downcase == id
|
@@ -1,20 +1,13 @@
|
|
1
1
|
require 'rest_client'
|
2
|
-
require 'deprecation'
|
3
2
|
|
4
3
|
module Qa::Authorities
|
5
|
-
class WebServiceBase
|
6
|
-
attr_accessor :
|
4
|
+
class WebServiceBase < Base
|
5
|
+
attr_accessor :raw_response
|
7
6
|
|
8
7
|
# mix-in to retreive and parse JSON content from the web
|
9
8
|
def get_json(url)
|
10
9
|
r = RestClient.get url, {accept: :json}
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
# This method should be removed
|
15
|
-
# use #response instead
|
16
|
-
def results
|
17
|
-
self.response
|
10
|
+
JSON.parse(r)
|
18
11
|
end
|
19
12
|
end
|
20
13
|
end
|
data/lib/qa/version.rb
CHANGED
@@ -1,78 +1,127 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Qa::TermsController do
|
3
|
+
describe Qa::TermsController, :type => :controller do
|
4
4
|
|
5
5
|
before do
|
6
6
|
@routes = Qa::Engine.routes
|
7
7
|
end
|
8
8
|
|
9
|
-
describe "#
|
9
|
+
describe "#check_vocab_param" do
|
10
|
+
it "should return 404 if the vocabulary is missing" do
|
11
|
+
get :search, { :q => "a query", :vocab => "" }
|
12
|
+
expect(response.code).to eq("404")
|
13
|
+
end
|
14
|
+
end
|
10
15
|
|
11
|
-
|
16
|
+
describe "#check_query_param" do
|
17
|
+
it "should return 404 if the query is missing" do
|
18
|
+
get :search, { :q => "", :vocab => "tgnlang" }
|
19
|
+
expect(response.code).to eq("404")
|
20
|
+
end
|
21
|
+
end
|
12
22
|
|
13
|
-
|
14
|
-
|
15
|
-
|
23
|
+
describe "#init_authority" do
|
24
|
+
context "when the authority does not exist" do
|
25
|
+
it "should return 404" do
|
26
|
+
get :search, { :q => "a query", :vocab => "non-existent-authority" }
|
27
|
+
expect(response.code).to eq("404")
|
16
28
|
end
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
29
|
+
end
|
30
|
+
context "when a sub-authority does not exist" do
|
31
|
+
it "should return 404 if a sub-authority does not exist" do
|
32
|
+
get :search, { :q => "a query", :vocab => "loc", :sub_authority => "non-existent-subauthority" }
|
33
|
+
expect(response.code).to eq("404")
|
21
34
|
end
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
35
|
+
end
|
36
|
+
context "when a sub-authority is absent" do
|
37
|
+
it "should return 404 for LOC" do
|
38
|
+
get :search, { :q => "a query", :vocab => "loc" }
|
39
|
+
expect(response.code).to eq("404")
|
26
40
|
end
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
expect(response.code).to eq("400")
|
41
|
+
it "should return 404 for oclcts" do
|
42
|
+
get :search, { :q => "a query", :vocab => "oclcts" }
|
43
|
+
expect(response.code).to eq("404")
|
31
44
|
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#search" do
|
32
49
|
|
50
|
+
before :each do
|
51
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names").
|
52
|
+
with(:headers => {'Accept'=>'application/json'}).
|
53
|
+
to_return(:body => webmock_fixture("loc-names-response.txt"), :status => 200)
|
33
54
|
end
|
34
55
|
|
35
|
-
|
56
|
+
it "should return a set of terms for a tgnlang query" do
|
57
|
+
get :search, {:q => "Tibetan", :vocab => "tgnlang" }
|
58
|
+
expect(response).to be_success
|
59
|
+
end
|
36
60
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
stub_request(:get, "http://id.loc.gov/search/?format=json&q=cs:http://id.loc.gov/vocabulary/relators").
|
42
|
-
with(:headers => {'Accept'=>'application/json'}).
|
43
|
-
to_return(:body => webmock_fixture("loc-response.txt"), :status => 200)
|
44
|
-
end
|
61
|
+
it "should not return 404 if sub_authority is valid" do
|
62
|
+
get :search, { :q => "Berry", :vocab => "loc", :sub_authority => "names" }
|
63
|
+
expect(response).to be_success
|
64
|
+
end
|
45
65
|
|
46
|
-
|
47
|
-
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#index" do
|
69
|
+
|
70
|
+
context "with supported authorities" do
|
71
|
+
it "should return all local authority state terms" do
|
72
|
+
get :index, { :vocab => "local", :sub_authority => "states" }
|
48
73
|
expect(response).to be_success
|
49
74
|
end
|
75
|
+
it "should return all MeSH terms" do
|
76
|
+
get :index, { :vocab => "mesh" }
|
77
|
+
expect(response).to be_success
|
78
|
+
end
|
79
|
+
end
|
50
80
|
|
51
|
-
|
52
|
-
|
53
|
-
|
81
|
+
context "when the authority does not support #all" do
|
82
|
+
it "should return null for tgnlang" do
|
83
|
+
get :index, { :vocab => "tgnlang" }
|
84
|
+
expect(response.body).to eq("null")
|
54
85
|
end
|
86
|
+
it "should return null for oclcts" do
|
87
|
+
get :index, { :vocab => "oclcts", :sub_authority => "mesh" }
|
88
|
+
expect(response.body).to eq("null")
|
89
|
+
end
|
90
|
+
it "should return null for LOC authorities" do
|
91
|
+
get :index, { :vocab => "loc", :sub_authority => "relators" }
|
92
|
+
expect(response.body).to eq("null")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "#show" do
|
99
|
+
|
100
|
+
context "with supported authorities" do
|
55
101
|
|
56
|
-
|
57
|
-
get
|
58
|
-
|
102
|
+
before do
|
103
|
+
stub_request(:get, "http://id.loc.gov/authorities/subjects/sh85077565.json").
|
104
|
+
with(:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'User-Agent'=>'Ruby'}).
|
105
|
+
to_return(:status => 200, :body => webmock_fixture("loc-names-response.txt"), :headers => {})
|
59
106
|
end
|
60
107
|
|
61
|
-
|
108
|
+
it "should return an individual state term" do
|
109
|
+
get :show, { :vocab => "local", :sub_authority => "states", id: "OH" }
|
110
|
+
expect(response).to be_success
|
111
|
+
end
|
62
112
|
|
63
|
-
|
113
|
+
it "should return an individual MeSH term" do
|
114
|
+
get :show, { vocab: "mesh", id: "D000001" }
|
115
|
+
expect(response).to be_success
|
116
|
+
end
|
64
117
|
|
65
|
-
it "should return
|
66
|
-
get :
|
67
|
-
response.
|
118
|
+
it "should return an individual subject term" do
|
119
|
+
get :show, { vocab: "loc", sub_authority: "subjects", id: "sh85077565" }
|
120
|
+
expect(response).to be_success
|
68
121
|
end
|
69
122
|
|
70
123
|
end
|
71
124
|
|
72
125
|
end
|
73
126
|
|
74
|
-
describe "#show" do
|
75
|
-
it "the path resolves"
|
76
|
-
end
|
77
|
-
|
78
127
|
end
|