qa 5.6.0 → 5.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5243eb90da94a9c62eb091f5ae6f6d0552887328fda21adf61e814a45b48c52
4
- data.tar.gz: ba091c8b6a42ee2a899fd60268952e8752bd5dbda825f7c631c293b085899406
3
+ metadata.gz: 3fb01e5ca2c9435b8c22af76ace78a1486d2ad22ee54f0a8e1a40ba24b64e218
4
+ data.tar.gz: '0825479f37ac4eb299c944981fff9b670e8efd86eb8b05c3341f7d2a9300361c'
5
5
  SHA512:
6
- metadata.gz: 3e8bcb1894706a6aa6b54a409b33474a6f07603b3299df98236c8d03c8e3bd53b9ff04a420e8e720a8ab526c8fcc169cb123232dc98447e881d4550ffa13d0fb
7
- data.tar.gz: b091c31f1abba47d48207a4e02e01936ba5c2b6d89c98d4c105839886c33d2e0c03b514ef096e226d089d0518364d596a45c463774f4d80c249ee016e00d4172
6
+ metadata.gz: 80792bf55b1f8cf6f7401657d7b7844fbeff0dbc4e4597e16869a63a65a6cf1e271d88d631bd0dd9f4f8dbcdda2caadac47974d8d282f21ee1696308022bb201
7
+ data.tar.gz: 7d700e24566d6047cb061731e941affa72d3c260eb7822c421421986127ddfd819f2d6d4cd1c968cd9e527b3276c392a7403564ebce8e5ee4210fb86863072d0
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Questioning Authority
2
2
 
3
- Code: [![Gem Version](https://badge.fury.io/rb/qa.png)](http://badge.fury.io/rb/qa) [![Build Status](https://circleci.com/gh/samvera/questioning_authority.svg?style=svg)](https://circleci.com/gh/samvera/questioning_authority) [![Coverage Status](https://coveralls.io/repos/github/samvera/questioning_authority/badge.svg?branch=master)](https://coveralls.io/github/samvera/questioning_authority?branch=master)
3
+ Code: [![Gem Version](https://badge.fury.io/rb/qa.png)](http://badge.fury.io/rb/qa) [![Build Status](https://circleci.com/gh/samvera/questioning_authority.svg?style=svg)](https://circleci.com/gh/samvera/questioning_authority) [![Coverage Status](https://coveralls.io/repos/github/samvera/questioning_authority/badge.svg?branch=main)](https://coveralls.io/github/samvera/questioning_authority?branch=main)
4
4
 
5
5
  Docs: [![Contribution Guidelines](http://img.shields.io/badge/CONTRIBUTING-Guidelines-blue.svg)](./CONTRIBUTING.md) [![Apache 2.0 License](http://img.shields.io/badge/APACHE2-license-blue.svg)](./LICENSE)
6
6
 
@@ -145,6 +145,12 @@ rake ci
145
145
 
146
146
  Commit your features into a new branch and submit a pull request.
147
147
 
148
+ ## Contributing
149
+
150
+ If you're working on PR for this project, create a feature branch off of `main`.
151
+
152
+ This repository follows the [Samvera Community Code of Conduct](https://samvera.atlassian.net/wiki/spaces/samvera/pages/405212316/Code+of+Conduct) and [language recommendations](https://github.com/samvera/maintenance/blob/main/templates/CONTRIBUTING.md#language). Please ***do not*** create a branch called `master` for this repository or as part of your pull request; the branch will either need to be removed or renamed before it can be considered for inclusion in the code base and history of this repository.
153
+
148
154
  ## Compatibility
149
155
 
150
156
  - Ruby 2.5 or the latest 2.4 version is recommended. Later versions may also work.
@@ -169,7 +175,7 @@ Questioning Authority is a Core Component of the Samvera community. The document
169
175
  github_changelog_generator --user samvera --project questioning_authority --token YOUR_GITHUB_TOKEN_HERE
170
176
  ```
171
177
 
172
- 5. Commit these changes to the master branch
178
+ 5. Commit these changes to the main branch
173
179
 
174
180
  6. Run `rake release`
175
181
 
@@ -27,12 +27,21 @@ class Qa::TermsController < ::ApplicationController
27
27
  end
28
28
 
29
29
  # If the subauthority supports it, return all the information for a given term
30
+ # Expects id to be part of the request path (e.g. http://my.app/qa/show/auth/subauth/{:id})
30
31
  def show
31
32
  term = @authority.method(:find).arity == 2 ? @authority.find(params[:id], self) : @authority.find(params[:id])
32
33
  cors_allow_origin_header(response)
33
34
  render json: term, content_type: content_type_for_format
34
35
  end
35
36
 
37
+ # If the subauthority supports it, return all the information for a given term
38
+ # Expects uri to be a request parameter (e.g. http://my.app/qa/show/auth/subauth?uri={:uri})
39
+ def fetch
40
+ term = @authority.method(:find).arity == 2 ? @authority.find(params[:uri], self) : @authority.find(params[:uri])
41
+ cors_allow_origin_header(response)
42
+ render json: term, content_type: content_type_for_format
43
+ end
44
+
36
45
  def check_vocab_param
37
46
  return if params[:vocab].present?
38
47
  msg = "Required param 'vocab' is missing or empty"
data/config/routes.rb CHANGED
@@ -9,6 +9,8 @@ Qa::Engine.routes.draw do
9
9
  get "/search/:vocab(/:subauthority)", controller: :terms, action: :search
10
10
  get "/show/:vocab/:id", controller: :terms, action: :show
11
11
  get "/show/:vocab/:subauthority/:id", controller: :terms, action: :show
12
+ get "/fetch/:vocab", controller: :terms, action: :fetch
13
+ get "/fetch/:vocab/:subauthority", controller: :terms, action: :fetch
12
14
 
13
15
  match "/search/linked_data/:vocab(/:subauthority)", to: 'application#options', via: [:options]
14
16
  match "/show/linked_data/:vocab/:id", to: 'application#options', via: [:options]
@@ -17,4 +19,6 @@ Qa::Engine.routes.draw do
17
19
  match "/search/:vocab(/:subauthority)", to: 'application#options', via: [:options]
18
20
  match "/show/:vocab/:id", to: 'application#options', via: [:options]
19
21
  match "/show/:vocab/:subauthority/:id", to: 'application#options', via: [:options]
22
+ match "/fetch/:vocab", to: 'application#options', via: [:options]
23
+ match "/fetch/:vocab/:subauthority", to: 'application#options', via: [:options]
20
24
  end
@@ -8,13 +8,14 @@ module Qa::Authorities
8
8
  def search(q)
9
9
  r = q.blank? ? [] : terms.select { |term| /\b#{q.downcase}/.match(term[:term].downcase) }
10
10
  r.map do |res|
11
- { id: res[:id], label: res[:term] }.with_indifferent_access
11
+ { id: res[:id], label: res[:term], uri: res.fetch(:uri, nil) }.compact.with_indifferent_access
12
12
  end
13
13
  end
14
14
 
15
15
  def all
16
16
  terms.map do |res|
17
- { id: res[:id], label: res[:term], active: res.fetch(:active, true) }.with_indifferent_access
17
+ { id: res[:id], label: res[:term], active: res.fetch(:active, true), uri: res.fetch(:uri, nil) }
18
+ .compact.with_indifferent_access
18
19
  end
19
20
  end
20
21
 
data/lib/qa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qa
2
- VERSION = "5.6.0".freeze
2
+ VERSION = "5.7.0".freeze
3
3
  end
@@ -253,4 +253,33 @@ describe Qa::TermsController, type: :controller do
253
253
  end
254
254
  end
255
255
  end
256
+
257
+ describe "#fetch" do
258
+ context "with supported authorities" do
259
+ it "returns an individual state term" do
260
+ get :fetch, params: { vocab: "local", subauthority: "authority_U", uri: "http://my.domain/terms/a2" }
261
+ expect(response).to be_successful
262
+ end
263
+
264
+ context 'when cors headers are enabled' do
265
+ before do
266
+ Qa.config.enable_cors_headers
267
+ end
268
+ it 'Access-Control-Allow-Origin is *' do
269
+ get :fetch, params: { vocab: "local", subauthority: "authority_U", uri: "http://my.domain/terms/a2" }
270
+ expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
271
+ end
272
+ end
273
+
274
+ context 'when cors headers are disabled' do
275
+ before do
276
+ Qa.config.disable_cors_headers
277
+ end
278
+ it 'Access-Control-Allow-Origin is not present' do
279
+ get :fetch, params: { vocab: "local", subauthority: "authority_U", uri: "http://my.domain/terms/a2" }
280
+ expect(response.headers.key?('Access-Control-Allow-Origin')).to be false
281
+ end
282
+ end
283
+ end
284
+ end
256
285
  end
@@ -0,0 +1,13 @@
1
+ :terms:
2
+ - :id: A1
3
+ :term: Abc Term A1
4
+ :uri: http://my.domain/terms/a1
5
+ :active: true
6
+ - :id: A2
7
+ :term: Term A2
8
+ :uri: http://my.domain/terms/a2
9
+ :active: false
10
+ - :id: A3
11
+ :term: Abc Term A3
12
+ :uri: http://my.domain/terms/a3
13
+ :active: true
@@ -5,6 +5,7 @@ describe Qa::Authorities::Local::FileBasedAuthority do
5
5
  let(:authority_b) { Qa::Authorities::Local.subauthority_for("authority_B") }
6
6
  let(:authority_c) { Qa::Authorities::Local.subauthority_for("authority_C") }
7
7
  let(:authority_d) { Qa::Authorities::Local.subauthority_for("authority_D") }
8
+ let(:authority_u) { Qa::Authorities::Local.subauthority_for("authority_U") }
8
9
 
9
10
  describe "#all" do
10
11
  let(:expected) do
@@ -35,6 +36,16 @@ describe Qa::Authorities::Local::FileBasedAuthority do
35
36
  expect(authority_c.all).to eq(expected)
36
37
  end
37
38
  end
39
+ context "when terms have uris" do
40
+ let(:expected) do
41
+ [{ 'id' => "A1", 'label' => "Abc Term A1", 'active' => true, 'uri' => 'http://my.domain/terms/a1' },
42
+ { 'id' => "A2", 'label' => "Term A2", 'active' => false, 'uri' => 'http://my.domain/terms/a2' },
43
+ { 'id' => "A3", 'label' => "Abc Term A3", 'active' => true, 'uri' => 'http://my.domain/terms/a3' }]
44
+ end
45
+ it "sets the id to be same as the label" do
46
+ expect(authority_u.all).to eq(expected)
47
+ end
48
+ end
38
49
  context "YAML file is malformed" do
39
50
  it "raises an error" do
40
51
  expect { authority_d.all }.to raise_error Psych::SyntaxError
@@ -33,7 +33,9 @@ describe Qa::Authorities::Local do
33
33
 
34
34
  describe "#names" do
35
35
  it "returns a list of yaml files" do
36
- expect(described_class.names).to include("authority_A", "authority_B", "authority_C", "authority_D", "states")
36
+ expect(described_class.names)
37
+ .to include("authority_A", "authority_B", "authority_C",
38
+ "authority_D", "authority_U", "states")
37
39
  end
38
40
 
39
41
  context "when the path doesn't exist" do
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: 5.6.0
4
+ version: 5.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Anderson
@@ -16,7 +16,7 @@ authors:
16
16
  autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2021-01-11 00:00:00.000000000 Z
19
+ date: 2021-11-04 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: activerecord-import
@@ -479,6 +479,7 @@ files:
479
479
  - spec/fixtures/authorities/authority_B.yml
480
480
  - spec/fixtures/authorities/authority_C.yml
481
481
  - spec/fixtures/authorities/authority_D.yml
482
+ - spec/fixtures/authorities/authority_U.yml
482
483
  - spec/fixtures/authorities/linked_data/lod_encoding_config.json
483
484
  - spec/fixtures/authorities/linked_data/lod_full_config.json
484
485
  - spec/fixtures/authorities/linked_data/lod_full_config_1_0.json
@@ -559,7 +560,6 @@ files:
559
560
  - spec/lib/authorities/crossref_spec.rb
560
561
  - spec/lib/authorities/discogs/generic_authority_spec.rb
561
562
  - spec/lib/authorities/discogs_spec.rb
562
- - spec/lib/authorities/file_based_authority_spec.rb
563
563
  - spec/lib/authorities/geonames_spec.rb
564
564
  - spec/lib/authorities/getty/aat_spec.rb
565
565
  - spec/lib/authorities/getty/tgn_spec.rb
@@ -572,12 +572,13 @@ files:
572
572
  - spec/lib/authorities/linked_data/search_query_spec.rb
573
573
  - spec/lib/authorities/linked_data/term_config_spec.rb
574
574
  - spec/lib/authorities/loc_spec.rb
575
+ - spec/lib/authorities/local/file_based_authority_spec.rb
576
+ - spec/lib/authorities/local/mysql_table_based_authority_spec.rb
577
+ - spec/lib/authorities/local/table_based_authority_spec.rb
575
578
  - spec/lib/authorities/local_spec.rb
576
579
  - spec/lib/authorities/mesh_spec.rb
577
- - spec/lib/authorities/mysql_table_based_authority_spec.rb
578
580
  - spec/lib/authorities/oclcts_spec.rb
579
581
  - spec/lib/authorities/space_fix_encoder.rb
580
- - spec/lib/authorities/table_based_authority_spec.rb
581
582
  - spec/lib/authorities/tgnlang_spec.rb
582
583
  - spec/lib/authorities_loc_subauthorities.rb
583
584
  - spec/lib/configuration_spec.rb
@@ -662,16 +663,16 @@ test_files:
662
663
  - spec/lib/authorities/tgnlang_spec.rb
663
664
  - spec/lib/authorities/crossref_spec.rb
664
665
  - spec/lib/authorities/oclcts_spec.rb
665
- - spec/lib/authorities/file_based_authority_spec.rb
666
+ - spec/lib/authorities/local/file_based_authority_spec.rb
667
+ - spec/lib/authorities/local/table_based_authority_spec.rb
668
+ - spec/lib/authorities/local/mysql_table_based_authority_spec.rb
666
669
  - spec/lib/authorities/space_fix_encoder.rb
667
670
  - spec/lib/authorities/assign_fast_spec.rb
668
- - spec/lib/authorities/table_based_authority_spec.rb
669
671
  - spec/lib/authorities/getty/tgn_spec.rb
670
672
  - spec/lib/authorities/getty/ulan_spec.rb
671
673
  - spec/lib/authorities/getty/aat_spec.rb
672
674
  - spec/lib/authorities/discogs_spec.rb
673
675
  - spec/lib/authorities/mesh_spec.rb
674
- - spec/lib/authorities/mysql_table_based_authority_spec.rb
675
676
  - spec/lib/authorities/local_spec.rb
676
677
  - spec/lib/authorities/discogs/generic_authority_spec.rb
677
678
  - spec/lib/authorities/geonames_spec.rb
@@ -750,6 +751,7 @@ test_files:
750
751
  - spec/fixtures/authorities/authority_D.yml
751
752
  - spec/fixtures/authorities/authority_A.yml
752
753
  - spec/fixtures/authorities/authority_C.yml
754
+ - spec/fixtures/authorities/authority_U.yml
753
755
  - spec/fixtures/authorities/authority_B.yml
754
756
  - spec/fixtures/geonames-response.json
755
757
  - spec/fixtures/tgn-response.txt