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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -21
  3. data/Rakefile +1 -1
  4. data/app/controllers/qa/terms_controller.rb +22 -53
  5. data/config/routes.rb +4 -7
  6. data/lib/qa/authorities.rb +3 -1
  7. data/lib/qa/authorities/base.rb +27 -8
  8. data/lib/qa/authorities/getty.rb +56 -0
  9. data/lib/qa/authorities/loc.rb +27 -131
  10. data/lib/qa/authorities/loc_subauthority.rb +90 -0
  11. data/lib/qa/authorities/local.rb +38 -21
  12. data/lib/qa/authorities/local_subauthority.rb +18 -0
  13. data/lib/qa/authorities/mesh.rb +16 -23
  14. data/lib/qa/authorities/mesh_tools/mesh_data_parser.rb +0 -25
  15. data/lib/qa/authorities/mesh_tools/mesh_importer.rb +0 -2
  16. data/lib/qa/authorities/oclcts.rb +17 -24
  17. data/lib/qa/authorities/tgnlang.rb +4 -18
  18. data/lib/qa/authorities/web_service_base.rb +3 -10
  19. data/lib/qa/version.rb +1 -1
  20. data/spec/controllers/terms_controller_spec.rb +93 -44
  21. data/spec/fixtures/aat-response.txt +108 -0
  22. data/spec/fixtures/getty-aat-find-response.json +2494 -0
  23. data/spec/fixtures/loc-response.txt +1521 -17
  24. data/spec/fixtures/loc-subject-find-response.txt +24 -0
  25. data/spec/internal/Gemfile +16 -13
  26. data/spec/internal/Gemfile.lock +121 -86
  27. data/spec/internal/app/assets/javascripts/application.js +1 -1
  28. data/spec/internal/app/assets/stylesheets/application.css +1 -1
  29. data/spec/internal/bin/rails +1 -5
  30. data/spec/internal/bin/rake +0 -4
  31. data/spec/internal/bin/setup +29 -0
  32. data/spec/internal/config.ru +1 -1
  33. data/spec/internal/config/application.rb +3 -0
  34. data/spec/internal/config/boot.rb +1 -2
  35. data/spec/internal/config/environments/development.rb +4 -0
  36. data/spec/internal/config/environments/production.rb +14 -18
  37. data/spec/internal/config/environments/test.rb +5 -2
  38. data/spec/internal/config/initializers/assets.rb +11 -0
  39. data/spec/internal/config/initializers/cookies_serializer.rb +1 -1
  40. data/spec/internal/config/secrets.yml +2 -2
  41. data/spec/internal/db/development.sqlite3 +0 -0
  42. data/spec/internal/db/migrate/{20140620210534_create_qa_subject_mesh_terms.qa.rb → 20150311214117_create_qa_subject_mesh_terms.qa.rb} +0 -0
  43. data/spec/internal/db/migrate/{20140620210535_create_qa_mesh_tree.qa.rb → 20150311214118_create_qa_mesh_tree.qa.rb} +0 -0
  44. 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
  45. data/spec/internal/db/schema.rb +3 -3
  46. data/spec/internal/db/test.sqlite3 +0 -0
  47. data/spec/internal/lib/generators/test_app_generator.rb +0 -1
  48. data/spec/internal/log/development.log +498 -207
  49. data/spec/internal/test/test_helper.rb +0 -3
  50. data/spec/lib/authorities_getty_spec.rb +71 -0
  51. data/spec/lib/authorities_loc_spec.rb +98 -65
  52. data/spec/lib/authorities_loc_subauthorities.rb +81 -0
  53. data/spec/lib/authorities_local_spec.rb +53 -79
  54. data/spec/lib/authorities_local_subauthorities_spec.rb +43 -0
  55. data/spec/lib/authorities_mesh_spec.rb +16 -12
  56. data/spec/lib/authorities_oclcts_spec.rb +17 -17
  57. data/spec/lib/authorities_tgnlang_spec.rb +4 -7
  58. data/spec/lib/mesh_data_parser_spec.rb +13 -13
  59. data/spec/lib/tasks/mesh.rake_spec.rb +4 -4
  60. data/spec/models/subject_mesh_term_spec.rb +5 -5
  61. data/spec/routing/route_spec.rb +34 -0
  62. data/spec/spec_helper.rb +5 -22
  63. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -1
  64. metadata +44 -12
  65. data/lib/qa/authorities/local/subauthority.rb +0 -65
  66. data/spec/internal/bin/spring +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5476914ef50c24ee9e61ae4de9b22256afb74f14
4
- data.tar.gz: 14ccb1b89224b5f8b7c92c795ace430059d8f869
3
+ metadata.gz: 0e22891ac5c80978a68ef9606122e197fb348c47
4
+ data.tar.gz: dc3f442fa9a2f974100fea8e6ca7f42ae3f0c953
5
5
  SHA512:
6
- metadata.gz: fedee18c0bfe503d1cc4d9f2d67515a012d28e826bcd0aa64e01e0802649923c1c92529104d52ba8fd2c2ac9b4504a76bf23f72b0670e345ef6dce3a2af231da
7
- data.tar.gz: 112f321514ff9bb46fc832f0b3cdb8a60dcc0283f68afc530b0ddafaf156e7501e7d52d7139aa07f1435c3c7fb330d6ac16f0773511c761f6e2f7dbff4c984fd
6
+ metadata.gz: 972243b9cd33d2267e14cb341765f87e7c0ac83cc3f8252f1b9f18e6a4e0078452e85ee9d58d62b0d31173ae317a054fd7499fdda883b6e5116a51095c5b9d85
7
+ data.tar.gz: ad6c420a0e4507ff26b191f1c3b455f5eb900d06ca60638f84abf6ecc4f66c681feae69fe210e24c46f7357262554bc899740abd8bcf1de3d92f4efc66c98502
data/README.md CHANGED
@@ -162,25 +162,34 @@ using the file's name as the sub-authority. For example, if I create `foo.yml`,
162
162
  :term: Term 2
163
163
  :active: false
164
164
 
165
- # Experimental Features
166
-
167
- ## Medical Subject Headings (MeSH)
165
+ ### Medical Subject Headings (MeSH)
168
166
 
169
167
  Provides autocompletion of [MeSH terms](http://www.nlm.nih.gov/mesh/introduction.html). This
170
168
  implementation is simple, and only provides *descriptors* and does not implement *qualifiers* (in
171
169
  the technical MeSH sense of these terms). The terms are stored in a local database, which is then
172
170
  queried to provide the suggestions.
173
171
 
174
- ### Loading Terms
172
+ To use, run the included rake task to copy over the relevant database migrations into your application:
173
+
174
+ rake qa:install:migrations
175
+
176
+ Then, create the tables in your database
177
+
178
+ rake db:migrate
179
+
180
+ Now that you've setup your application to use MeSH terms, you'll now need to load the tems into your
181
+ database so you can query them locally.
175
182
 
176
183
  To import the mesh terms into the local database, first download the MeSH descriptor dump in ASCII
177
- format (see [http://www.nlm.nih.gov/mesh/filelist.html][]). Once you have this file, the rake task
178
- `mesh:import` will load the entire file of terms into the database. It does not do an update (yet!).
184
+ format. You can read about doing this [here](http://www.nlm.nih.gov/mesh/filelist.html). Once you have this file, use the
185
+ following rake task to load the terms into your database:
179
186
 
180
187
  MESH_FILE=path/to/mesh.txt rake mesh:import
181
188
 
182
189
  This may take a few minutes to finish.
183
190
 
191
+ **Note:** Updating the tables with new terms is currently not supported.
192
+
184
193
  # Developer Notes
185
194
 
186
195
  [How to Contribute](./CONTRIBUTING.md)
@@ -188,12 +197,17 @@ This may take a few minutes to finish.
188
197
  To develop this gem, clone the repository, then run:
189
198
 
190
199
  bundle install
191
- rake
200
+ rake ci
201
+
202
+ This will install the gems, create a dummy application under spec/internal and run the tests. After you've made changes,
203
+ make sure you've included tests and run the test suite with a new sample application:
204
+
205
+ rake engine_cart:clean
206
+ rake ci
192
207
 
193
- This will install the gems, create a dummy application under spec/internal and run the tests. After you've made changes, remove the entire spec/internal
194
- directory so that further tests and run against a new dummy application.
208
+ Commit your features into a new branch and submit a pull request.
195
209
 
196
- ## Compatability
210
+ ## Compatibility
197
211
 
198
212
  Currently, it is compatible with Rails 4.0 and 4.1 under both Ruby 2.0 and 2.1.
199
213
 
@@ -201,17 +215,6 @@ Currently, it is compatible with Rails 4.0 and 4.1 under both Ruby 2.0 and 2.1.
201
215
 
202
216
  For help with Questioning Authority, contact <hydra-tech@googlegroups.com>.
203
217
 
204
- # Original Authors
205
-
206
- * [Stephen Anderson](https://github.com/scande3)
207
- * [Don Brower](https://github.com/dbrower)
208
- * [Jim Coble](https://github.com/coblej)
209
- * [Mike Durbin](https://github.com/mikedurbin)
210
- * [Randall Floyd](https://github.com/stormfin)
211
- * [Eric James](https://github.com/yulgit1)
212
- * [Mike Stroming](https://github.com/mstroming)
213
- * [Adam Wead](https://github.com/awead)
214
-
215
218
  ### Special thanks to...
216
219
 
217
220
  [Jeremy Friesen](https://github.com/jeremyf) who gave us the name for our gem.
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  require 'bundler/gem_tasks'
3
- require 'rspec/core/rake_task'
4
3
  require 'engine_cart/rake_task'
4
+ require 'rspec/core/rake_task'
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
@@ -4,74 +4,38 @@
4
4
 
5
5
  class Qa::TermsController < ApplicationController
6
6
 
7
- before_action :check_search_params, only:[:search]
8
- before_action :check_vocab_param, :check_authority, :check_sub_authority
7
+ before_action :check_vocab_param, :init_authority
8
+ before_action :check_query_param, only: :search
9
9
 
10
- #search that returns all results
10
+ # If the subauthority supports it, return a list of all terms in the authority
11
11
  def index
12
- #initialize the authority and run the search. if there's a sub-authority and it's valid, include that param
13
- @authority = authority_class.constantize.new
14
- @authority.search(params[:q], params[:sub_authority])
15
-
16
- respond_to do |format|
17
- format.html { render :layout => false, json: @authority.results }
18
- format.json { render :layout => false, json: @authority.results }
19
- format.js { render :layout => false, :text => @authority.results }
20
- end
12
+ render json: @authority.all
21
13
  end
22
14
 
15
+ # Return a list of terms based on a query
23
16
  def search
24
- #convert wildcard to be URI encoded
25
- params[:q].gsub!("*", "%2A")
26
-
27
- #initialize the authority and run the search. if there's a sub-authority and it's valid, include that param
28
- @authority = authority_class.constantize.new
29
- @authority.search(params[:q], params[:sub_authority])
30
-
31
- respond_to do |format|
32
- format.html { render :layout => false, :text => @authority.results.to_json }
33
- format.json { render :layout => false, :text => @authority.results.to_json }
34
- format.js { render :layout => false, :text => @authority.results }
35
- end
36
-
17
+ terms = @authority.search(url_search)
18
+ render json: terms
37
19
  end
38
20
 
21
+ # If the subauthority supports it, return all the information for a given term
39
22
  def show
40
- check_sub_authority
41
- authority = authority_class.constantize.new
42
- result = authority.full_record(params[:id], params[:sub_authority])
43
-
44
- respond_to do |format|
45
- format.html { render :layout => false, :text => result.to_json }
46
- format.json { render :layout => false, :text => result.to_json }
47
- format.js { render :layout => false, :text => result }
48
- end
23
+ term = @authority.find(params[:id])
24
+ render json: term
49
25
  end
50
26
 
51
27
  def check_vocab_param
52
- unless params[:vocab].present?
53
- head :bad_request
54
- end
28
+ head :not_found unless params[:vocab].present?
55
29
  end
56
30
 
57
- def check_search_params
58
- unless params[:q].present? && params[:vocab].present?
59
- head :bad_request
60
- end
31
+ def init_authority
32
+ @authority = authority_class.constantize.new(params[:sub_authority])
33
+ rescue
34
+ head :not_found
61
35
  end
62
36
 
63
- def check_authority
64
- begin
65
- authority_class.constantize
66
- rescue
67
- head :bad_request
68
- end
69
- end
70
-
71
- def check_sub_authority
72
- unless params[:sub_authority].nil?
73
- head :bad_request unless authority_class.constantize.authority_valid?(params[:sub_authority])
74
- end
37
+ def check_query_param
38
+ head :not_found unless params[:q].present?
75
39
  end
76
40
 
77
41
  private
@@ -80,4 +44,9 @@ class Qa::TermsController < ApplicationController
80
44
  "Qa::Authorities::"+params[:vocab].capitalize
81
45
  end
82
46
 
47
+ # converts wildcards into URL-encoded characters
48
+ def url_search
49
+ params[:q].gsub("*", "%2A")
50
+ end
51
+
83
52
  end
@@ -1,9 +1,6 @@
1
1
  Qa::Engine.routes.draw do
2
- match "/search/:vocab" => "terms#search", :via=>:get
3
- match "/search/:vocab/:sub_authority" => "terms#search", :via=>:get
4
- match "/terms/:vocab" => "terms#index", :via=>:get
5
- match "/terms/:vocab/:sub_authority" => "terms#index", :via=>:get
6
- match "/terms" => "terms#index", :via=>:get
7
- match "/show/:vocab/:id" => "terms#show", :via=>:get
8
- match "/show/:vocab/:sub_authority/:id" => "terms#show", :via=>:get
2
+ get "/terms/:vocab(/:sub_authority)", controller: :terms, action: :index
3
+ get "/search/:vocab(/:sub_authority)", controller: :terms, action: :search
4
+ get "/show/:vocab/:id", controller: :terms, action: :show
5
+ get "/show/:vocab/:sub_authority/:id", controller: :terms, action: :show
9
6
  end
@@ -2,9 +2,11 @@ module Qa::Authorities
2
2
  extend ActiveSupport::Autoload
3
3
 
4
4
  autoload :Base
5
+ autoload :Getty
5
6
  autoload :Loc
7
+ autoload :LocSubauthority
6
8
  autoload :Local
7
- autoload :Subauthority, 'qa/authorities/local/subauthority'
9
+ autoload :LocalSubauthority
8
10
  autoload :Mesh
9
11
  autoload :MeshTools
10
12
  autoload :Oclcts
@@ -2,21 +2,40 @@ require 'deprecation'
2
2
 
3
3
  module Qa::Authorities
4
4
  class Base
5
+ extend Deprecation
5
6
 
6
- # do an autocomplete search
7
- def search(query, sub_authority=nil)
7
+ attr_accessor :sub_authority
8
+
9
+ # Registers the authority and its sub-authority if it has one
10
+ def initialize *args
11
+ if args.first
12
+ raise "Invalid sub-authority" unless sub_authorities.include?(args.first)
13
+ end
14
+ end
15
+
16
+ # By default, an authority has no subauthorities unless they
17
+ # are defined by the subclassed authority.
18
+ def sub_authorities
19
+ []
8
20
  end
9
21
 
10
- # return information on a specific record
11
- def get_full_record(id, sub_authority=nil)
22
+ # By default, #all is not implemented.
23
+ # If the subclassed authority does have this feature
24
+ # then you will overide the #all method in the subclassed authority.
25
+ # TODO: need to set some kind of error here
26
+ def all
12
27
  end
13
28
 
14
- def self.authority_valid?(sub_authority)
15
- sub_authority == nil || sub_authorities.include?(sub_authority)
29
+ # By default, #find is not implemented.
30
+ # If the subclassed authority does have this feature
31
+ # then you will overide the #find method in the subclassed authority.
32
+ # TODO: need to set some kind of error here
33
+ def find id
16
34
  end
17
35
 
18
- def self.sub_authorities
19
- [] #Overwrite if you have sub_authorities
36
+ def full_record id, sub_authority=nil
37
+ Deprecation.warn(".full_record is deprecated. Use .find instead")
38
+ find(id)
20
39
  end
21
40
 
22
41
  end
@@ -0,0 +1,56 @@
1
+ require 'uri'
2
+
3
+ module Qa::Authorities
4
+ class Getty < WebServiceBase
5
+
6
+ def initialize *args
7
+ super
8
+ @sub_authority ||= args.first
9
+ raise "No sub-authority provided" if sub_authority.nil?
10
+ end
11
+
12
+ def sub_authorities
13
+ [ "aat" ]
14
+ end
15
+
16
+ def search q
17
+ parse_authority_response(json(build_query_url(q)))
18
+ end
19
+
20
+ # get_json is not ideomatic, so we'll make an alias
21
+ def json(*args)
22
+ get_json(*args)
23
+ end
24
+
25
+ def build_query_url q
26
+ untainted = q.gsub(/[\w\s-]/, '')
27
+ sparql = "PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
28
+ SELECT * WHERE { ?s skos:prefLabel ?name .
29
+ ?s skos:inScheme <http://vocab.getty.edu/#{@sub_authority}/> .
30
+ ?s rdf:type <http://vocab.getty.edu/ontology#Concept> .
31
+ FILTER regex(?name, \"#{untainted}\", \"i\") .
32
+ FILTER langMatches( lang(?name), \"EN\" ) .
33
+ } LIMIT 10"
34
+ "http://vocab.getty.edu/sparql.json?query=#{URI.escape(sparql)}&_implicit=false&implicit=true&_equivalent=false&_form=%2Fsparql"
35
+ end
36
+
37
+ def find id
38
+ json(find_url(id))
39
+ end
40
+
41
+ def find_url id
42
+ "http://vocab.getty.edu/#{@sub_authority}/#{id}.json"
43
+ end
44
+
45
+ private
46
+
47
+ # Reformats the data received from the LOC service
48
+ def parse_authority_response(response)
49
+ response['results']['bindings'].map do |result|
50
+ { 'id' => result['s']['value'], 'label' => result['name']['value'] }
51
+ end
52
+ end
53
+
54
+ end
55
+ end
56
+
@@ -1,97 +1,44 @@
1
1
  require 'uri'
2
2
 
3
3
  module Qa::Authorities
4
- class Loc < Qa::Authorities::WebServiceBase
5
- extend Deprecation
4
+ class Loc < WebServiceBase
6
5
 
7
- # Initialze the Loc class with a query and get the http response from LOC's server.
8
- # This is set to a JSON object
9
- def initialize
10
- end
11
-
12
- def search(q, sub_authority=nil)
13
- if ! (sub_authority.nil? || Loc.sub_authorities.include?(sub_authority))
14
- @raw_response = nil
15
- @response = nil
16
- return
17
- end
6
+ include Qa::Authorities::LocSubauthority
18
7
 
19
- q = URI.escape(q)
20
- authority_fragment = sub_authorityURL(sub_authority)
21
- query_url = "http://id.loc.gov/search/?q=#{q}&q=#{authority_fragment}&format=json"
22
- @raw_response = get_json(query_url)
23
- @response = parse_authority_response(@raw_response)
8
+ def initialize *args
9
+ super
10
+ @sub_authority ||= args.first
11
+ raise "No sub-authority provided" if sub_authority.nil?
24
12
  end
25
13
 
26
- def self.sub_authority_table
27
- @sub_authority_table ||=
28
- begin
29
- vocab_base_url = 'cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fvocabulary%2F'
30
- authority_base_url = 'cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2F'
31
- datatype_base_url = 'cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fdatatypes%2F'
32
- vocab_preservation_base_url = 'cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fvocabulary%2Fpreservation%2F'
33
- {
34
- 'subjects' => authority_base_url,
35
- 'names' => authority_base_url,
36
- 'classification' => authority_base_url,
37
- 'childrensSubjects' => authority_base_url,
38
- 'genreForms' => authority_base_url,
39
- 'graphicMaterials' => vocab_base_url,
40
- 'organizations' => vocab_base_url,
41
- 'relators' => vocab_base_url,
42
- 'countries' => vocab_base_url,
43
- 'geographicAreas' => vocab_base_url,
44
- 'languages' => vocab_base_url,
45
- 'iso639-1' => vocab_base_url,
46
- 'iso639-2' => vocab_base_url,
47
- 'iso639-5' => vocab_base_url,
48
- 'edtf' => datatype_base_url,
49
- 'preservation' => vocab_base_url,
50
- 'actionsGranted' => vocab_base_url,
51
- 'agentType' => vocab_base_url,
52
- 'contentLocationType' => vocab_preservation_base_url,
53
- 'copyrightStatus' => vocab_preservation_base_url,
54
- 'cryptographicHashFunctions' => vocab_preservation_base_url,
55
- 'environmentCharacteristic' => vocab_preservation_base_url,
56
- 'environmentPurpose' => vocab_preservation_base_url,
57
- 'eventRelatedAgentRole' => vocab_preservation_base_url,
58
- 'eventRelatedObjectRole' => vocab_preservation_base_url,
59
- 'eventType' => vocab_preservation_base_url,
60
- 'formatRegistryRole' => vocab_preservation_base_url,
61
- 'hardwareType' => vocab_preservation_base_url,
62
- 'inhibitorTarget' => vocab_preservation_base_url,
63
- 'inhibitorType' => vocab_preservation_base_url,
64
- 'objectCategory' => vocab_preservation_base_url,
65
- 'preservationLevelRole' => vocab_preservation_base_url,
66
- 'relationshipSubType' => vocab_preservation_base_url,
67
- 'relationshipType' => vocab_preservation_base_url,
68
- 'rightsBasis' => vocab_preservation_base_url,
69
- 'rightsRelatedAgentRole' => vocab_preservation_base_url,
70
- 'signatureEncoding' => vocab_preservation_base_url,
71
- 'signatureMethod' => vocab_preservation_base_url,
72
- 'softwareType' => vocab_preservation_base_url,
73
- 'storageMedium' => vocab_preservation_base_url
74
- }
75
- end
14
+ def sub_authorities
15
+ authorities + vocabularies + datatypes + preservation
76
16
  end
77
17
 
18
+ def search q
19
+ @raw_response = get_json(build_query_url(q))
20
+ parse_authority_response
21
+ end
78
22
 
79
- def sub_authorityURL(sub_authority)
80
- base_url = Loc.sub_authority_table[sub_authority]
81
- return "" if base_url.nil?
82
- base_url + URI.escape(sub_authority)
23
+ def build_query_url q
24
+ escaped_query = URI.escape(q)
25
+ authority_fragment = get_url_for_authority(sub_authority) + URI.escape(sub_authority)
26
+ return "http://id.loc.gov/search/?q=#{escaped_query}&q=#{authority_fragment}&format=json"
83
27
  end
84
28
 
85
- def self.authority_valid?(authority)
86
- self.sub_authorities.include?(authority)
29
+ def find id
30
+ get_json(find_url(id))
87
31
  end
88
32
 
89
- def self.sub_authorities
90
- @sub_authorities ||= sub_authority_table.keys
33
+ def find_url id
34
+ "http://id.loc.gov/authorities/#{@sub_authority}/#{id}.json"
91
35
  end
92
36
 
93
- def parse_authority_response(raw_responses)
94
- raw_responses.select {|response| response[0] == "atom:entry"}.map do |response|
37
+ private
38
+
39
+ # Reformats the data received from the LOC service
40
+ def parse_authority_response
41
+ @raw_response.select {|response| response[0] == "atom:entry"}.map do |response|
95
42
  loc_response_to_qa(response_to_struct(response))
96
43
  end
97
44
  end
@@ -101,7 +48,7 @@ module Qa::Authorities
101
48
  # Note that this is a pretty naive conversion. There should probably just
102
49
  # be a class that properly translates and stores the various pieces of
103
50
  # data, especially if this logic could be useful in other auth lookups.
104
- def response_to_struct(response)
51
+ def response_to_struct response
105
52
  result = response.each_with_object({}) do |result_parts, result|
106
53
  next unless result_parts[0]
107
54
  key = result_parts[0].sub('atom:', '').sub('dcterms:', '')
@@ -121,63 +68,12 @@ module Qa::Authorities
121
68
  end
122
69
 
123
70
  # Simple conversion from LoC-based struct to QA hash
124
- def loc_response_to_qa(data)
71
+ def loc_response_to_qa data
125
72
  {
126
73
  "id" => data.id || data.title,
127
74
  "label" => data.title
128
75
  }
129
76
  end
130
77
 
131
- def find_record_in_response(raw_response, id)
132
- raw_response.each do |single_response|
133
- next if single_response[0] != "atom:entry"
134
- single_response.each do |result_part|
135
- if (result_part[0] == 'atom:title' ||
136
- result_part[0] == 'atom:id') && id == result_part[2]
137
- return single_response
138
- end
139
- end
140
- end
141
- return nil
142
- end
143
-
144
- def get_full_record(id, sub_authority)
145
- Deprecation.warn(Loc, "get_full_record is deprecated and will be removed in 0.1.0. Use full_record instead", caller)
146
- full_record(id, sub_authority)
147
- end
148
-
149
- def full_record(id, sub_authority)
150
- search(id, sub_authority)
151
- full_record = find_record_in_response(@raw_response, id)
152
-
153
- if full_record.nil?
154
- # record not found
155
- return {}
156
- end
157
-
158
- parsed_result = {}
159
- full_record.each do |section|
160
- if section.class == Array
161
- label = section[0].split(':').last.to_s
162
- case label
163
- when 'title', 'id', 'updated', 'created'
164
- parsed_result[label] = section[2]
165
- when 'link'
166
- if section[1]['type'] != nil
167
- parsed_result[label + "||#{section[1]['type']}"] = section[1]["href"]
168
- else
169
- parsed_result[label] = section[1]["href"]
170
- end
171
- when 'author'
172
- author_list = []
173
- #FIXME: Find example with two authors to better understand this data.
174
- author_list << section[2][2]
175
- parsed_result[label] = author_list
176
- end
177
- end
178
- end
179
- parsed_result
180
- end
181
-
182
78
  end
183
79
  end