@@ -7,9 +7,15 @@ class Qa::LinkedDataTermsController < ::ApplicationController
7
7
before_action :check_show_subauthority , :check_id_param , only : :show
8
8
before_action :check_uri_param , only : :fetch
9
9
before_action :validate_auth_reload_token , only : :reload
10
+ before_action :create_request_header_service , only : [ :search , :show , :fetch ]
10
11
11
12
delegate :cors_allow_origin_header , to : Qa ::ApplicationController
12
13
14
+ class_attribute :request_header_service_class
15
+ self . request_header_service_class = Qa ::LinkedData ::RequestHeaderService
16
+
17
+ attr_reader :request_header_service
18
+
13
19
# Provide a warning if there is a request for all terms.
14
20
def index
15
21
logger . warn 'Linked data authorities do not support retrieving all terms.'
@@ -35,8 +41,8 @@ def reload
35
41
# Return a list of terms based on a query
36
42
# get "/search/linked_data/:vocab(/:subauthority)"
37
43
# @see Qa::Authorities::LinkedData::SearchQuery#search
38
- def search # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
39
- terms = @authority . search ( query , subauth : subauthority , language : language , replacements : replacement_params , context : context? , performance_data : performance_data? )
44
+ def search # rubocop:disable Metrics/MethodLength
45
+ terms = @authority . search ( query , request_header : request_header_service . search_header )
40
46
cors_allow_origin_header ( response )
41
47
render json : terms
42
48
rescue Qa ::ServiceUnavailable
@@ -59,9 +65,9 @@ def search # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
59
65
# get "/show/linked_data/:vocab/:subauthority/:id
60
66
# @see Qa::Authorities::LinkedData::FindTerm#find
61
67
def show # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
62
- term = @authority . find ( id , subauth : subauthority , language : language , replacements : replacement_params , format : format , performance_data : performance_data? )
68
+ term = @authority . find ( id , request_header : request_header_service . fetch_header )
63
69
cors_allow_origin_header ( response )
64
- render json : term , content_type : content_type_for_format
70
+ render json : term , content_type : request_header_service . content_type_for_format
65
71
rescue Qa ::TermNotFound
66
72
msg = "Term Not Found - Fetch term #{ id } unsuccessful for#{ subauth_warn_msg } authority #{ vocab_param } "
67
73
logger . warn msg
@@ -89,9 +95,9 @@ def show # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
89
95
# get "/fetch/linked_data/:vocab"
90
96
# @see Qa::Authorities::LinkedData::FindTerm#find
91
97
def fetch # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
92
- term = @authority . find ( uri , subauth : subauthority , language : language , replacements : replacement_params , format : format , performance_data : performance_data? )
98
+ term = @authority . find ( uri , request_header : request_header_service . fetch_header )
93
99
cors_allow_origin_header ( response )
94
- render json : term , content_type : content_type_for_format
100
+ render json : term , content_type : request_header_service . content_type_for_format
95
101
rescue Qa ::TermNotFound
96
102
msg = "Term Not Found - Fetch term #{ uri } unsuccessful for#{ subauth_warn_msg } authority #{ vocab_param } "
97
103
logger . warn msg
@@ -147,6 +153,10 @@ def check_show_subauthority
147
153
end
148
154
end
149
155
156
+ def create_request_header_service
157
+ @request_header_service = request_header_service_class . new ( request , params )
158
+ end
159
+
150
160
def init_authority
151
161
@authority = Qa ::Authorities ::LinkedData ::GenericAuthority . new ( vocab_param )
152
162
rescue Qa ::InvalidLinkedDataAuthority => e
@@ -190,64 +200,19 @@ def id
190
200
params [ :id ]
191
201
end
192
202
193
- def language
194
- request_language = request . env [ 'HTTP_ACCEPT_LANGUAGE' ]
195
- request_language = request_language . scan ( /^[a-z]{2}/ ) . first if request_language . present?
196
- params [ :lang ] || request_language
197
- end
198
-
199
203
def subauthority
200
204
params [ :subauthority ]
201
205
end
202
206
203
- def replacement_params
204
- params . reject { |k , _v | [ 'q' , 'vocab' , 'controller' , 'action' , 'subauthority' , 'lang' , 'id' ] . include? ( k ) }
205
- end
206
-
207
207
def subauth_warn_msg
208
208
subauthority . blank? ? "" : " sub-authority #{ subauthority } in"
209
209
end
210
210
211
- def format
212
- return 'json' unless params . key? ( :format )
213
- return 'json' if params [ :format ] . blank?
214
- params [ :format ]
215
- end
216
-
217
- def jsonld?
218
- format . casecmp? ( 'jsonld' )
219
- end
220
-
221
- def n3?
222
- format . casecmp? ( 'n3' )
223
- end
224
-
225
- def ntriples?
226
- format . casecmp? ( 'ntriples' )
227
- end
228
-
229
- def content_type_for_format
230
- return 'application/ld+json' if jsonld?
231
- return 'text/n3' if n3?
232
- return 'application/n-triples' if ntriples?
233
- 'application/json'
234
- end
235
-
236
- def context?
237
- context = params . fetch ( :context , 'false' )
238
- context . casecmp? ( 'true' )
239
- end
240
-
241
211
def details?
242
212
details = params . fetch ( :details , 'false' )
243
213
details . casecmp? ( 'true' )
244
214
end
245
215
246
- def performance_data?
247
- performance_data = params . fetch ( :performance_data , 'false' )
248
- performance_data . casecmp? ( 'true' )
249
- end
250
-
251
216
def validate_auth_reload_token
252
217
token = params . key? ( :auth_token ) ? params [ :auth_token ] : nil
253
218
valid = Qa . config . valid_authority_reload_token? ( token )
0 commit comments