qa 4.3.0 → 5.0.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 +5 -5
- data/app/controllers/qa/linked_data_terms_controller.rb +1 -1
- data/app/services/qa/linked_data/performance_data_service.rb +26 -0
- data/app/services/qa/linked_data/request_header_service.rb +1 -1
- data/lib/qa/authorities/linked_data/config.rb +4 -0
- data/lib/qa/authorities/linked_data/config/search_config.rb +18 -2
- data/lib/qa/authorities/linked_data/find_term.rb +18 -16
- data/lib/qa/authorities/linked_data/search_query.rb +18 -16
- data/lib/qa/authorities/loc/generic_authority.rb +2 -2
- data/lib/qa/version.rb +1 -1
- data/spec/controllers/linked_data_terms_controller_spec.rb +4 -14
- data/spec/controllers/terms_controller_spec.rb +2 -2
- data/spec/fixtures/authorities/linked_data/lod_full_config.json +6 -2
- data/spec/lib/authorities/linked_data/config_spec.rb +10 -6
- data/spec/lib/authorities/linked_data/find_term_spec.rb +2 -4
- data/spec/lib/authorities/linked_data/search_config_spec.rb +40 -1
- data/spec/lib/authorities/linked_data/search_query_spec.rb +1 -2
- data/spec/lib/authorities/loc_spec.rb +9 -9
- data/spec/services/linked_data/performance_data_service_spec.rb +27 -0
- data/spec/services/linked_data/request_header_service_spec.rb +6 -6
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bc29035b13c98a73e85662eaeb115eabd0d12372
|
4
|
+
data.tar.gz: c509732acf8103e7587fcec0f1fd61824b6490ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4dbb5d3904901814ad948f8d2f80bda6a1709ba4b84d65cde4746ffae13354255c4617825d88c58322bdb6d6345913ff034b25d658734ef56740d737c75d40b1
|
7
|
+
data.tar.gz: f4d641ec0744de995d7358c304220a39a4d0a37de684a66c1d9e2cdd3561ba5b5bf8d411f92148f09bfb1d756cf1d06f7478dda1ab86c39fc9f88201c480c939
|
@@ -154,7 +154,7 @@ class Qa::LinkedDataTermsController < ::ApplicationController
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def create_request_header_service
|
157
|
-
@request_header_service = request_header_service_class.new(request, params)
|
157
|
+
@request_header_service = request_header_service_class.new(request: request, params: params)
|
158
158
|
end
|
159
159
|
|
160
160
|
def init_authority
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Service to construct a request header that includes optional attributes for search and fetch requests.
|
2
|
+
module Qa
|
3
|
+
module LinkedData
|
4
|
+
class PerformanceDataService
|
5
|
+
# Construct performance data structure to include in the returned results (linked data module).
|
6
|
+
# @param access_time_s [Float] time to fetch the data from the external source and populate it in an RDF graph
|
7
|
+
# @param normalization_time_s [Float] time for QA to normalize the data
|
8
|
+
# @param fetched_size [Float] size of data in the RDF graph (in bytes)
|
9
|
+
# @param normalized_size [Float] size of the normalized data string (in bytes)
|
10
|
+
# @returns [Hash] performance data
|
11
|
+
# @see Qa::Authorities::LinkedData::SearchQuery
|
12
|
+
# @see Qa::Authorities::LinkedData::FindTerm
|
13
|
+
def self.performance_data(access_time_s:, normalize_time_s:, fetched_size:, normalized_size:)
|
14
|
+
{
|
15
|
+
fetch_time_s: access_time_s,
|
16
|
+
normalization_time_s: normalize_time_s,
|
17
|
+
fetched_bytes: fetched_size,
|
18
|
+
normalized_bytes: normalized_size,
|
19
|
+
fetch_bytes_per_s: fetched_size / access_time_s,
|
20
|
+
normalization_bytes_per_s: normalized_size / normalize_time_s,
|
21
|
+
total_time_s: (access_time_s + normalize_time_s)
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -12,7 +12,7 @@ module Qa
|
|
12
12
|
# @option context [Boolean] true if context should be returned with the results; otherwise, false (default: false) (search only)
|
13
13
|
# @option format [String] return data in this format (fetch only)
|
14
14
|
# @note params may have additional attribute-value pairs that are passed through via replacements (only configured replacements are used)
|
15
|
-
def initialize(request
|
15
|
+
def initialize(request:, params:)
|
16
16
|
@request = request
|
17
17
|
@params = params
|
18
18
|
end
|
@@ -39,6 +39,10 @@ module Qa::Authorities
|
|
39
39
|
@prefixes ||= authority_config.fetch(:prefixes, {})
|
40
40
|
end
|
41
41
|
|
42
|
+
def service_uri
|
43
|
+
@service_uri ||= authority_config.fetch(:service_uri, nil)
|
44
|
+
end
|
45
|
+
|
42
46
|
def config_version
|
43
47
|
@config_version ||= authority_config.fetch(:QA_CONFIG_VERSION, '1.0')
|
44
48
|
end
|
@@ -8,7 +8,7 @@ module Qa::Authorities
|
|
8
8
|
attr_reader :prefixes, :full_config, :search_config
|
9
9
|
private :full_config, :search_config
|
10
10
|
|
11
|
-
delegate :authority_name, to: :full_config
|
11
|
+
delegate :authority_name, :service_uri, to: :full_config
|
12
12
|
|
13
13
|
# @param [Hash] config the search portion of the config
|
14
14
|
# @param [Hash<Symbol><String>] prefixes URL map of prefixes to use with ldpaths
|
@@ -146,7 +146,7 @@ module Qa::Authorities
|
|
146
146
|
search_config.fetch(:qa_replacement_patterns, {})
|
147
147
|
end
|
148
148
|
|
149
|
-
# @return [Boolean] true if supports
|
149
|
+
# @return [Boolean] true if supports subauthorities; otherwise, false
|
150
150
|
def supports_subauthorities?
|
151
151
|
qa_replacement_patterns.key?(:subauth) && subauthorities?
|
152
152
|
end
|
@@ -182,6 +182,22 @@ module Qa::Authorities
|
|
182
182
|
@subauthorities ||= search_config.fetch(:subauthorities)
|
183
183
|
end
|
184
184
|
|
185
|
+
# @return [String] name of parameter holding start record number
|
186
|
+
def start_record_parameter
|
187
|
+
qa_replacement_patterns.key?(:start_record) ? qa_replacement_patterns[:start_record] : nil
|
188
|
+
end
|
189
|
+
|
190
|
+
# @return [String] name of parameter holding number of requested records
|
191
|
+
def requested_records_parameter
|
192
|
+
qa_replacement_patterns.key?(:requested_records) ? qa_replacement_patterns[:requested_records] : nil
|
193
|
+
end
|
194
|
+
|
195
|
+
# @return [String] ldpath of the triple that holds the total number of available records for a search
|
196
|
+
# @see #service_subject_uri
|
197
|
+
def total_count_ldpath
|
198
|
+
search_config.key?(:total_count_ldpath) ? search_config[:total_count_ldpath] : nil
|
199
|
+
end
|
200
|
+
|
185
201
|
def info
|
186
202
|
return [] unless supports_search?
|
187
203
|
auth_name = authority_name.downcase.to_s
|
@@ -15,8 +15,8 @@ module Qa::Authorities
|
|
15
15
|
@term_config = term_config
|
16
16
|
end
|
17
17
|
|
18
|
-
attr_reader :term_config, :full_graph, :filtered_graph, :language, :id, :uri, :access_time_s, :normalize_time_s, :
|
19
|
-
private :full_graph, :filtered_graph, :language, :id, :uri, :access_time_s, :normalize_time_s, :
|
18
|
+
attr_reader :term_config, :full_graph, :filtered_graph, :language, :id, :uri, :access_time_s, :normalize_time_s, :subauthority, :request_header
|
19
|
+
private :full_graph, :filtered_graph, :language, :id, :uri, :access_time_s, :normalize_time_s, :subauthority, :request_header
|
20
20
|
|
21
21
|
delegate :term_subauthority?, :prefixes, :authority_name, to: :term_config
|
22
22
|
|
@@ -63,7 +63,6 @@ module Qa::Authorities
|
|
63
63
|
|
64
64
|
access_end_dt = Time.now.utc
|
65
65
|
@access_time_s = access_end_dt - access_start_dt
|
66
|
-
@fetched_size = full_graph.triples.to_s.size if performance_data?
|
67
66
|
Rails.logger.info("Time to receive data from authority: #{access_time_s}s")
|
68
67
|
end
|
69
68
|
|
@@ -74,9 +73,8 @@ module Qa::Authorities
|
|
74
73
|
|
75
74
|
normalize_end_dt = Time.now.utc
|
76
75
|
@normalize_time_s = normalize_end_dt - normalize_start_dt
|
77
|
-
@normalized_size = results.to_s.size if performance_data?
|
78
76
|
Rails.logger.info("Time to normalize data: #{normalize_time_s}s")
|
79
|
-
results =
|
77
|
+
results = append_data_outside_results(results)
|
80
78
|
results
|
81
79
|
end
|
82
80
|
|
@@ -93,6 +91,7 @@ module Qa::Authorities
|
|
93
91
|
end
|
94
92
|
|
95
93
|
def unpack_request_header(request_header)
|
94
|
+
@request_header = request_header
|
96
95
|
@subauthority = request_header.fetch(:subauthority, nil)
|
97
96
|
@format = request_header.fetch(:format, 'json')
|
98
97
|
@performance_data = request_header.fetch(:performance_data, false)
|
@@ -282,17 +281,20 @@ module Qa::Authorities
|
|
282
281
|
predicates_hash
|
283
282
|
end
|
284
283
|
|
285
|
-
def
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
284
|
+
def append_data_outside_results(results)
|
285
|
+
return results unless performance_data?
|
286
|
+
full_results = {}
|
287
|
+
full_results[:results] = results
|
288
|
+
full_results[:performance] = performance(results)
|
289
|
+
full_results
|
290
|
+
end
|
291
|
+
|
292
|
+
def performance(results)
|
293
|
+
normalized_size = results.to_s.size
|
294
|
+
fetched_size = full_graph.triples.to_s.size
|
295
|
+
perf_data = Qa::LinkedData::PerformanceDataService.performance_data(access_time_s: access_time_s, normalize_time_s: normalize_time_s,
|
296
|
+
fetched_size: fetched_size, normalized_size: normalized_size)
|
297
|
+
perf_data
|
296
298
|
end
|
297
299
|
|
298
300
|
# This is providing support for calling build_url with individual parameters instead of the request_header.
|
@@ -15,8 +15,8 @@ module Qa::Authorities
|
|
15
15
|
@search_config = search_config
|
16
16
|
end
|
17
17
|
|
18
|
-
attr_reader :search_config, :full_graph, :filtered_graph, :language, :access_time_s, :normalize_time_s, :
|
19
|
-
private :full_graph, :filtered_graph, :language, :access_time_s, :normalize_time_s, :
|
18
|
+
attr_reader :search_config, :full_graph, :filtered_graph, :language, :access_time_s, :normalize_time_s, :subauthority, :request_header
|
19
|
+
private :full_graph, :filtered_graph, :language, :access_time_s, :normalize_time_s, :subauthority, :request_header
|
20
20
|
|
21
21
|
delegate :subauthority?, :supports_sort?, :prefixes, :authority_name, to: :search_config
|
22
22
|
|
@@ -53,22 +53,20 @@ module Qa::Authorities
|
|
53
53
|
|
54
54
|
access_end_dt = Time.now.utc
|
55
55
|
@access_time_s = access_end_dt - access_start_dt
|
56
|
-
@fetched_size = full_graph.triples.to_s.size if performance_data?
|
57
56
|
Rails.logger.info("Time to receive data from authority: #{access_time_s}s")
|
58
57
|
end
|
59
58
|
|
60
59
|
def normalize_results
|
61
60
|
normalize_start_dt = Time.now.utc
|
62
61
|
|
63
|
-
@filtered_graph = graph_service.filter(graph:
|
62
|
+
@filtered_graph = graph_service.filter(graph: full_graph, language: language)
|
64
63
|
results = map_results
|
65
64
|
json = convert_results_to_json(results)
|
66
65
|
|
67
66
|
normalize_end_dt = Time.now.utc
|
68
67
|
@normalize_time_s = normalize_end_dt - normalize_start_dt
|
69
|
-
@normalized_size = json.to_s.size if performance_data?
|
70
68
|
Rails.logger.info("Time to normalize data: #{normalize_time_s}s")
|
71
|
-
json =
|
69
|
+
json = append_data_outside_results(json)
|
72
70
|
json
|
73
71
|
end
|
74
72
|
|
@@ -92,6 +90,7 @@ module Qa::Authorities
|
|
92
90
|
end
|
93
91
|
|
94
92
|
def unpack_request_header(request_header)
|
93
|
+
@request_header = request_header
|
95
94
|
@subauthority = request_header.fetch(:subauthority, nil)
|
96
95
|
@context = request_header.fetch(:context, false)
|
97
96
|
@performance_data = request_header.fetch(:performance_data, false)
|
@@ -179,16 +178,19 @@ module Qa::Authorities
|
|
179
178
|
lbl
|
180
179
|
end
|
181
180
|
|
182
|
-
def
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
181
|
+
def append_data_outside_results(results)
|
182
|
+
return results unless performance_data?
|
183
|
+
full_results = {}
|
184
|
+
full_results[:results] = results
|
185
|
+
full_results[:performance] = performance(results)
|
186
|
+
full_results
|
187
|
+
end
|
188
|
+
|
189
|
+
def performance(results)
|
190
|
+
normalized_size = results.to_s.size
|
191
|
+
fetched_size = full_graph.triples.to_s.size
|
192
|
+
Qa::LinkedData::PerformanceDataService.performance_data(access_time_s: access_time_s, normalize_time_s: normalize_time_s,
|
193
|
+
fetched_size: fetched_size, normalized_size: normalized_size)
|
192
194
|
end
|
193
195
|
|
194
196
|
# This is providing support for calling build_url with individual parameters instead of the request_header.
|
@@ -26,7 +26,7 @@ module Qa::Authorities
|
|
26
26
|
def build_query_url(q)
|
27
27
|
escaped_query = ERB::Util.url_encode(q)
|
28
28
|
authority_fragment = Loc.get_url_for_authority(subauthority) + ERB::Util.url_encode(subauthority)
|
29
|
-
"
|
29
|
+
"http://id.loc.gov/search/?q=#{escaped_query}&q=#{authority_fragment}&format=json"
|
30
30
|
end
|
31
31
|
|
32
32
|
def find(id)
|
@@ -34,7 +34,7 @@ module Qa::Authorities
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def find_url(id)
|
37
|
-
"
|
37
|
+
"http://id.loc.gov/authorities/#{@subauthority}/#{id}.json"
|
38
38
|
end
|
39
39
|
|
40
40
|
private
|
data/lib/qa/version.rb
CHANGED
@@ -307,12 +307,10 @@ describe Qa::LinkedDataTermsController, type: :controller do
|
|
307
307
|
results = JSON.parse(response.body)
|
308
308
|
expect(results).to be_kind_of Hash
|
309
309
|
expect(results.keys).to match_array ['performance', 'results']
|
310
|
-
expect(results['performance'].keys).to match_array ['
|
310
|
+
expect(results['performance'].keys).to match_array ['fetch_time_s', 'normalization_time_s',
|
311
311
|
'fetched_bytes', 'normalized_bytes', 'fetch_bytes_per_s',
|
312
312
|
'normalization_bytes_per_s', 'total_time_s']
|
313
313
|
expect(results['performance']['total_time_s']).to eq results['performance']['fetch_time_s'] + results['performance']['normalization_time_s']
|
314
|
-
expect(results['performance']['result_count']).to eq 3
|
315
|
-
expect(results['results'].count).to eq 3
|
316
314
|
end
|
317
315
|
|
318
316
|
it "returns basic data only when performance_data='false'" do
|
@@ -320,7 +318,6 @@ describe Qa::LinkedDataTermsController, type: :controller do
|
|
320
318
|
expect(response).to be_successful
|
321
319
|
results = JSON.parse(response.body)
|
322
320
|
expect(results).to be_kind_of Array
|
323
|
-
expect(results.size).to eq 3
|
324
321
|
end
|
325
322
|
end
|
326
323
|
end
|
@@ -495,12 +492,9 @@ describe Qa::LinkedDataTermsController, type: :controller do
|
|
495
492
|
results = JSON.parse(response.body)
|
496
493
|
expect(results).to be_kind_of Hash
|
497
494
|
expect(results.keys).to match_array ['performance', 'results']
|
498
|
-
expect(results['performance'].keys).to match_array ['
|
499
|
-
'
|
500
|
-
'normalization_bytes_per_s', 'total_time_s']
|
495
|
+
expect(results['performance'].keys).to match_array ['fetch_time_s', 'normalization_time_s', 'fetched_bytes', 'normalized_bytes',
|
496
|
+
'fetch_bytes_per_s', 'normalization_bytes_per_s', 'total_time_s']
|
501
497
|
expect(results['performance']['total_time_s']).to eq results['performance']['fetch_time_s'] + results['performance']['normalization_time_s']
|
502
|
-
expect(results['performance']['predicate_count']).to eq 15
|
503
|
-
expect(results['results']['predicates'].count).to eq 15
|
504
498
|
end
|
505
499
|
|
506
500
|
it "returns basic data only when performance_data='false'" do
|
@@ -509,7 +503,6 @@ describe Qa::LinkedDataTermsController, type: :controller do
|
|
509
503
|
results = JSON.parse(response.body)
|
510
504
|
expect(results).to be_kind_of Hash
|
511
505
|
expect(results.keys).not_to include('performance')
|
512
|
-
expect(results['predicates'].size).to eq 15
|
513
506
|
end
|
514
507
|
end
|
515
508
|
end
|
@@ -671,12 +664,10 @@ describe Qa::LinkedDataTermsController, type: :controller do
|
|
671
664
|
results = JSON.parse(response.body)
|
672
665
|
expect(results).to be_kind_of Hash
|
673
666
|
expect(results.keys).to match_array ['performance', 'results']
|
674
|
-
expect(results['performance'].keys).to match_array ['
|
667
|
+
expect(results['performance'].keys).to match_array ['fetch_time_s', 'normalization_time_s',
|
675
668
|
'fetched_bytes', 'normalized_bytes', 'fetch_bytes_per_s',
|
676
669
|
'normalization_bytes_per_s', 'total_time_s']
|
677
670
|
expect(results['performance']['total_time_s']).to eq results['performance']['fetch_time_s'] + results['performance']['normalization_time_s']
|
678
|
-
expect(results['performance']['predicate_count']).to eq 7
|
679
|
-
expect(results['results']['predicates'].count).to eq 7
|
680
671
|
end
|
681
672
|
|
682
673
|
it "returns basic data only when performance_data='false'" do
|
@@ -685,7 +676,6 @@ describe Qa::LinkedDataTermsController, type: :controller do
|
|
685
676
|
results = JSON.parse(response.body)
|
686
677
|
expect(results).to be_kind_of Hash
|
687
678
|
expect(results.keys).not_to include('performance')
|
688
|
-
expect(results['predicates'].size).to eq 7
|
689
679
|
end
|
690
680
|
end
|
691
681
|
end
|
@@ -82,7 +82,7 @@ describe Qa::TermsController, type: :controller do
|
|
82
82
|
|
83
83
|
context "loc" do
|
84
84
|
before do
|
85
|
-
stub_request(:get, "
|
85
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names")
|
86
86
|
.with(headers: { 'Accept' => 'application/json' })
|
87
87
|
.to_return(body: webmock_fixture("loc-names-response.txt"), status: 200)
|
88
88
|
end
|
@@ -188,7 +188,7 @@ describe Qa::TermsController, type: :controller do
|
|
188
188
|
describe "#show" do
|
189
189
|
context "with supported authorities" do
|
190
190
|
before do
|
191
|
-
stub_request(:get, "
|
191
|
+
stub_request(:get, "http://id.loc.gov/authorities/subjects/sh85077565.json")
|
192
192
|
.with(headers: { 'Accept' => 'application/json' })
|
193
193
|
.to_return(status: 200, body: webmock_fixture("loc-names-response.txt"), headers: {})
|
194
194
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
{
|
2
|
-
"QA_CONFIG_VERSION": "2.
|
2
|
+
"QA_CONFIG_VERSION": "2.2",
|
3
|
+
"service_uri": "http://ld4l.org/ld4l_services/cache",
|
3
4
|
"prefixes": {
|
4
5
|
"schema": "http://www.w3.org/2000/01/rdf-schema#",
|
5
6
|
"skos": "http://www.w3.org/2004/02/skos/core#"
|
@@ -114,9 +115,12 @@
|
|
114
115
|
"qa_replacement_patterns": {
|
115
116
|
"query": "query",
|
116
117
|
"subauth": "subauth",
|
117
|
-
"lang": "lang"
|
118
|
+
"lang": "lang",
|
119
|
+
"start_record": "startRecord",
|
120
|
+
"requested_records": "maxRecords"
|
118
121
|
},
|
119
122
|
"language": [ "en", "fr", "de" ],
|
123
|
+
"total_count_ldpath": "vivo:count",
|
120
124
|
"results": {
|
121
125
|
"id_predicate": "http://purl.org/dc/terms/identifier",
|
122
126
|
"label_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel",
|
@@ -25,7 +25,8 @@ describe Qa::Authorities::LinkedData::Config do
|
|
25
25
|
describe '#authority_config' do
|
26
26
|
let(:full_auth_config) do
|
27
27
|
{
|
28
|
-
QA_CONFIG_VERSION: "2.
|
28
|
+
QA_CONFIG_VERSION: "2.2",
|
29
|
+
service_uri: "http://ld4l.org/ld4l_services/cache",
|
29
30
|
prefixes: {
|
30
31
|
schema: "http://www.w3.org/2000/01/rdf-schema#",
|
31
32
|
skos: "http://www.w3.org/2004/02/skos/core#"
|
@@ -140,9 +141,12 @@ describe Qa::Authorities::LinkedData::Config do
|
|
140
141
|
qa_replacement_patterns: {
|
141
142
|
query: 'query',
|
142
143
|
subauth: 'subauth',
|
143
|
-
lang: 'lang'
|
144
|
+
lang: 'lang',
|
145
|
+
start_record: 'startRecord',
|
146
|
+
requested_records: 'maxRecords'
|
144
147
|
},
|
145
148
|
language: ['en', 'fr', 'de'],
|
149
|
+
total_count_ldpath: "vivo:count",
|
146
150
|
results: {
|
147
151
|
id_predicate: 'http://purl.org/dc/terms/identifier',
|
148
152
|
label_predicate: 'http://www.w3.org/2004/02/skos/core#prefLabel',
|
@@ -377,7 +381,7 @@ describe Qa::Authorities::LinkedData::Config do
|
|
377
381
|
let(:authority_config) { full_config.authority_config }
|
378
382
|
let(:authority_config_1_0) { full_config_1_0.authority_config }
|
379
383
|
|
380
|
-
it 'returns hash of the full authority 2.
|
384
|
+
it 'returns hash of the full authority 2.2 configuration' do
|
381
385
|
expect(authority_config).to eq full_auth_config
|
382
386
|
end
|
383
387
|
|
@@ -468,18 +472,18 @@ describe Qa::Authorities::LinkedData::Config do
|
|
468
472
|
|
469
473
|
context 'when version is specified in the config file' do
|
470
474
|
it 'returns the version from the config file' do
|
471
|
-
expect(full_config.config_version).to eq '2.
|
475
|
+
expect(full_config.config_version).to eq '2.2'
|
472
476
|
end
|
473
477
|
end
|
474
478
|
end
|
475
479
|
|
476
480
|
describe '#config_version?' do
|
477
481
|
it "returns true if the passed in version matches the authority's version" do
|
478
|
-
expect(full_config.config_version?('2.
|
482
|
+
expect(full_config.config_version?('2.2')).to eq true
|
479
483
|
end
|
480
484
|
|
481
485
|
it "returns false if the passed in version does NOT match the authority's version" do
|
482
|
-
expect(full_config_1_0.config_version?('2.
|
486
|
+
expect(full_config_1_0.config_version?('2.2')).to eq false
|
483
487
|
end
|
484
488
|
end
|
485
489
|
end
|
@@ -28,10 +28,8 @@ RSpec.describe Qa::Authorities::LinkedData::FindTerm do
|
|
28
28
|
end
|
29
29
|
it 'includes performance in return hash' do
|
30
30
|
expect(results.keys).to match_array [:performance, :results]
|
31
|
-
expect(results[:performance].keys).to match_array [:
|
32
|
-
:
|
33
|
-
:normalization_bytes_per_s, :total_time_s]
|
34
|
-
expect(results[:performance][:predicate_count]).to eq 7
|
31
|
+
expect(results[:performance].keys).to match_array [:fetch_time_s, :normalization_time_s, :fetched_bytes, :normalized_bytes,
|
32
|
+
:fetch_bytes_per_s, :normalization_bytes_per_s, :total_time_s]
|
35
33
|
expect(results[:performance][:total_time_s]).to eq results[:performance][:fetch_time_s] + results[:performance][:normalization_time_s]
|
36
34
|
end
|
37
35
|
end
|
@@ -68,9 +68,12 @@ RSpec.describe Qa::Authorities::LinkedData::SearchConfig do
|
|
68
68
|
qa_replacement_patterns: {
|
69
69
|
query: 'query',
|
70
70
|
subauth: 'subauth',
|
71
|
-
lang: 'lang'
|
71
|
+
lang: 'lang',
|
72
|
+
start_record: 'startRecord',
|
73
|
+
requested_records: 'maxRecords'
|
72
74
|
},
|
73
75
|
language: ['en', 'fr', 'de'],
|
76
|
+
total_count_ldpath: "vivo:count",
|
74
77
|
results: {
|
75
78
|
id_predicate: 'http://purl.org/dc/terms/identifier',
|
76
79
|
label_predicate: 'http://www.w3.org/2004/02/skos/core#prefLabel',
|
@@ -408,6 +411,42 @@ RSpec.describe Qa::Authorities::LinkedData::SearchConfig do
|
|
408
411
|
end
|
409
412
|
end
|
410
413
|
|
414
|
+
describe '#start_record_parameter' do
|
415
|
+
it 'returns nil if only term configuration is defined' do
|
416
|
+
expect(term_only_config.start_record_parameter).to eq nil
|
417
|
+
end
|
418
|
+
it 'returns nil if not defined' do
|
419
|
+
expect(min_config.start_record_parameter).to eq nil
|
420
|
+
end
|
421
|
+
it 'returns parameter name if defined' do
|
422
|
+
expect(full_config.start_record_parameter).to eq 'startRecord'
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
describe '#requested_records_parameter' do
|
427
|
+
it 'returns nil if only term configuration is defined' do
|
428
|
+
expect(term_only_config.requested_records_parameter).to eq nil
|
429
|
+
end
|
430
|
+
it 'returns nil if not defined' do
|
431
|
+
expect(min_config.requested_records_parameter).to eq nil
|
432
|
+
end
|
433
|
+
it 'returns parameter name if defined' do
|
434
|
+
expect(full_config.requested_records_parameter).to eq 'maxRecords'
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
438
|
+
describe '#total_count_ldpath' do
|
439
|
+
it 'returns nil if only term configuration is defined' do
|
440
|
+
expect(term_only_config.total_count_ldpath).to eq nil
|
441
|
+
end
|
442
|
+
it 'returns nil if not defined' do
|
443
|
+
expect(min_config.total_count_ldpath).to eq nil
|
444
|
+
end
|
445
|
+
it 'returns parameter name if defined' do
|
446
|
+
expect(full_config.total_count_ldpath).to eq 'vivo:count'
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
411
450
|
describe '#info' do
|
412
451
|
let(:term_details) do
|
413
452
|
{
|
@@ -16,11 +16,10 @@ RSpec.describe Qa::Authorities::LinkedData::SearchQuery do
|
|
16
16
|
it 'includes performance in return hash' do
|
17
17
|
expect(results).to be_kind_of Hash
|
18
18
|
expect(results.keys).to match_array [:performance, :results]
|
19
|
-
expect(results[:performance].keys).to match_array [:
|
19
|
+
expect(results[:performance].keys).to match_array [:fetch_time_s, :normalization_time_s,
|
20
20
|
:fetched_bytes, :normalized_bytes, :fetch_bytes_per_s,
|
21
21
|
:normalization_bytes_per_s, :total_time_s]
|
22
22
|
expect(results[:performance][:total_time_s]).to eq results[:performance][:fetch_time_s] + results[:performance][:normalization_time_s]
|
23
|
-
expect(results[:performance][:result_count]).to eq 3
|
24
23
|
expect(results[:results].count).to eq 3
|
25
24
|
end
|
26
25
|
end
|
@@ -28,14 +28,14 @@ describe Qa::Authorities::Loc do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
context "for searching" do
|
31
|
-
let(:url) { '
|
31
|
+
let(:url) { 'http://id.loc.gov/search/?q=foo&q=cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects&format=json' }
|
32
32
|
it "returns a url" do
|
33
33
|
expect(authority.build_query_url("foo")).to eq(url)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
context "for returning single terms" do
|
38
|
-
let(:url) { "
|
38
|
+
let(:url) { "http://id.loc.gov/authorities/subjects/sh2002003586.json" }
|
39
39
|
it "returns a url with an authority and id" do
|
40
40
|
expect(authority.find_url("sh2002003586")).to eq(url)
|
41
41
|
end
|
@@ -49,15 +49,15 @@ describe Qa::Authorities::Loc do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
before do
|
52
|
-
stub_request(:get, "
|
52
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=cs:http://id.loc.gov/authorities/subjects")
|
53
53
|
.with(headers: { 'Accept' => 'application/json' })
|
54
54
|
.to_return(status: 200, body: "")
|
55
55
|
end
|
56
56
|
|
57
57
|
context "with flat params encoded" do
|
58
|
-
let(:url) { '
|
58
|
+
let(:url) { 'http://id.loc.gov/search/?q=foo&q=cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects&format=json' }
|
59
59
|
it "returns a response" do
|
60
|
-
flat_params_url = "
|
60
|
+
flat_params_url = "http://id.loc.gov/search/?format=json&q=foo&q=cs%3Ahttp%3A%2F%2Fid.loc.gov%2Fauthorities%2Fsubjects"
|
61
61
|
expect(subject.env.url.to_s).to eq(flat_params_url)
|
62
62
|
end
|
63
63
|
end
|
@@ -66,7 +66,7 @@ describe Qa::Authorities::Loc do
|
|
66
66
|
describe "#search" do
|
67
67
|
context "any LOC authorities" do
|
68
68
|
let :authority do
|
69
|
-
stub_request(:get, "
|
69
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=s&q=cs:http://id.loc.gov/vocabulary/geographicAreas")
|
70
70
|
.with(headers: { 'Accept' => 'application/json' })
|
71
71
|
.to_return(body: webmock_fixture("loc-response.txt"), status: 200)
|
72
72
|
described_class.subauthority_for("geographicAreas")
|
@@ -95,7 +95,7 @@ describe Qa::Authorities::Loc do
|
|
95
95
|
|
96
96
|
context "subject terms" do
|
97
97
|
let :results do
|
98
|
-
stub_request(:get, "
|
98
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=History--&q=cs:http://id.loc.gov/authorities/subjects")
|
99
99
|
.with(headers: { 'Accept' => 'application/json' })
|
100
100
|
.to_return(body: webmock_fixture("loc-subjects-response.txt"), status: 200)
|
101
101
|
described_class.subauthority_for("subjects").search("History--")
|
@@ -111,7 +111,7 @@ describe Qa::Authorities::Loc do
|
|
111
111
|
|
112
112
|
context "name terms" do
|
113
113
|
let :results do
|
114
|
-
stub_request(:get, "
|
114
|
+
stub_request(:get, "http://id.loc.gov/search/?format=json&q=Berry&q=cs:http://id.loc.gov/authorities/names")
|
115
115
|
.with(headers: { 'Accept' => 'application/json' })
|
116
116
|
.to_return(body: webmock_fixture("loc-names-response.txt"), status: 200)
|
117
117
|
described_class.subauthority_for("names").search("Berry")
|
@@ -125,7 +125,7 @@ describe Qa::Authorities::Loc do
|
|
125
125
|
describe "#find" do
|
126
126
|
context "using a subject id" do
|
127
127
|
let :results do
|
128
|
-
stub_request(:get, "
|
128
|
+
stub_request(:get, "http://id.loc.gov/authorities/subjects/sh2002003586.json")
|
129
129
|
.with(headers: { 'Accept' => 'application/json' })
|
130
130
|
.to_return(status: 200, body: webmock_fixture("loc-subject-find-response.txt"), headers: {})
|
131
131
|
described_class.subauthority_for("subjects").find("sh2002003586")
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Qa::LinkedData::PerformanceDataService do
|
4
|
+
let(:request) { double }
|
5
|
+
|
6
|
+
describe '.performance_data' do
|
7
|
+
context 'when all data passed in' do
|
8
|
+
let(:access_time_s) { 0.5 }
|
9
|
+
let(:normalize_time_s) { 0.3 }
|
10
|
+
let(:fetched_size) { 11 }
|
11
|
+
let(:normalized_size) { 8 }
|
12
|
+
it 'uses passed in params' do
|
13
|
+
expected_results =
|
14
|
+
{
|
15
|
+
fetch_time_s: access_time_s,
|
16
|
+
normalization_time_s: normalize_time_s,
|
17
|
+
fetched_bytes: fetched_size,
|
18
|
+
normalized_bytes: normalized_size,
|
19
|
+
fetch_bytes_per_s: (fetched_size / access_time_s),
|
20
|
+
normalization_bytes_per_s: (normalized_size / normalize_time_s),
|
21
|
+
total_time_s: (access_time_s + normalize_time_s)
|
22
|
+
}
|
23
|
+
expect(described_class.performance_data(access_time_s: access_time_s, normalize_time_s: normalize_time_s, fetched_size: fetched_size, normalized_size: normalized_size)).to eq expected_results
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -25,7 +25,7 @@ RSpec.describe Qa::LinkedData::RequestHeaderService do
|
|
25
25
|
subauthority: 'person',
|
26
26
|
user_language: ['sp']
|
27
27
|
}
|
28
|
-
expect(described_class.new(request, search_params).search_header).to eq expected_results
|
28
|
+
expect(described_class.new(request: request, params: search_params).search_header).to eq expected_results
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -41,7 +41,7 @@ RSpec.describe Qa::LinkedData::RequestHeaderService do
|
|
41
41
|
subauthority: nil,
|
42
42
|
user_language: nil
|
43
43
|
}
|
44
|
-
expect(described_class.new(request, {}).search_header).to eq expected_results
|
44
|
+
expect(described_class.new(request: request, params: {}).search_header).to eq expected_results
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -56,7 +56,7 @@ RSpec.describe Qa::LinkedData::RequestHeaderService do
|
|
56
56
|
subauthority: nil,
|
57
57
|
user_language: ['de']
|
58
58
|
}
|
59
|
-
expect(described_class.new(request, {}).search_header).to eq expected_results
|
59
|
+
expect(described_class.new(request: request, params: {}).search_header).to eq expected_results
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -85,7 +85,7 @@ RSpec.describe Qa::LinkedData::RequestHeaderService do
|
|
85
85
|
subauthority: 'person',
|
86
86
|
user_language: ['sp']
|
87
87
|
}
|
88
|
-
expect(described_class.new(request, fetch_params).fetch_header).to eq expected_results
|
88
|
+
expect(described_class.new(request: request, params: fetch_params).fetch_header).to eq expected_results
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -101,7 +101,7 @@ RSpec.describe Qa::LinkedData::RequestHeaderService do
|
|
101
101
|
subauthority: nil,
|
102
102
|
user_language: nil
|
103
103
|
}
|
104
|
-
expect(described_class.new(request, {}).fetch_header).to eq expected_results
|
104
|
+
expect(described_class.new(request: request, params: {}).fetch_header).to eq expected_results
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
@@ -116,7 +116,7 @@ RSpec.describe Qa::LinkedData::RequestHeaderService do
|
|
116
116
|
subauthority: nil,
|
117
117
|
user_language: ['de']
|
118
118
|
}
|
119
|
-
expect(described_class.new(request, {}).fetch_header).to eq expected_results
|
119
|
+
expect(described_class.new(request: request, params: {}).fetch_header).to eq expected_results
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Anderson
|
@@ -13,10 +13,10 @@ authors:
|
|
13
13
|
- Mike Stroming
|
14
14
|
- Adam Wead
|
15
15
|
- E. Lynette Rayle
|
16
|
-
autorequire:
|
16
|
+
autorequire:
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
|
-
date:
|
19
|
+
date: 2019-11-18 00:00:00.000000000 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: activerecord-import
|
@@ -322,6 +322,7 @@ files:
|
|
322
322
|
- app/services/qa/linked_data/mapper/graph_predicate_mapper_service.rb
|
323
323
|
- app/services/qa/linked_data/mapper/search_results_mapper_service.rb
|
324
324
|
- app/services/qa/linked_data/mapper/term_results_mapper_service.rb
|
325
|
+
- app/services/qa/linked_data/performance_data_service.rb
|
325
326
|
- app/services/qa/linked_data/request_header_service.rb
|
326
327
|
- app/views/layouts/qa/application.html.erb
|
327
328
|
- config/authorities.yml
|
@@ -556,6 +557,7 @@ files:
|
|
556
557
|
- spec/services/linked_data/mapper/graph_predicate_mapper_service_spec.rb
|
557
558
|
- spec/services/linked_data/mapper/search_results_mapper_service_spec.rb
|
558
559
|
- spec/services/linked_data/mapper/term_results_mapper_service_spec.rb
|
560
|
+
- spec/services/linked_data/performance_data_service_spec.rb
|
559
561
|
- spec/services/linked_data/request_header_service_spec.rb
|
560
562
|
- spec/spec_helper.rb
|
561
563
|
- spec/support/matchers/include_hash.rb
|
@@ -565,7 +567,7 @@ homepage: https://github.com/projecthydra/questioning_authority
|
|
565
567
|
licenses:
|
566
568
|
- APACHE-2
|
567
569
|
metadata: {}
|
568
|
-
post_install_message:
|
570
|
+
post_install_message:
|
569
571
|
rdoc_options: []
|
570
572
|
require_paths:
|
571
573
|
- lib
|
@@ -580,8 +582,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
580
582
|
- !ruby/object:Gem::Version
|
581
583
|
version: '0'
|
582
584
|
requirements: []
|
583
|
-
|
584
|
-
|
585
|
+
rubyforge_project:
|
586
|
+
rubygems_version: 2.6.14
|
587
|
+
signing_key:
|
585
588
|
specification_version: 4
|
586
589
|
summary: You should question your authorities.
|
587
590
|
test_files:
|
@@ -724,6 +727,7 @@ test_files:
|
|
724
727
|
- spec/services/linked_data/mapper/context_mapper_service_spec.rb
|
725
728
|
- spec/services/linked_data/mapper/graph_predicate_mapper_service_spec.rb
|
726
729
|
- spec/services/linked_data/deep_sort_service_spec.rb
|
730
|
+
- spec/services/linked_data/performance_data_service_spec.rb
|
727
731
|
- spec/services/linked_data/language_service_spec.rb
|
728
732
|
- spec/services/linked_data/authority_url_service_spec.rb
|
729
733
|
- spec/services/iri_template_service_spec.rb
|