mais_orcid_client 0.1.0 → 0.2.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: 0e2c78bcd8751c9a2f6d972c46874a7637165d94f26ae15e360d73c1f522ce41
4
- data.tar.gz: e8f6bef5eff960802afceacf18054bd394e105f67ec3e95a3c63c7b7cd07942a
3
+ metadata.gz: 78b55c51d036f61b67cae0d7fd72ec1bc231e787301d1f4b4b1298dc45ef9a60
4
+ data.tar.gz: 2826a1359658edc044a94abd4163827e810b6f9b64063d17837fc0441aab350d
5
5
  SHA512:
6
- metadata.gz: ee77115c58f6ebc00b095e6d3938d5094deefb22be8d8317b2b7659fe46c1e38a56540ae7dc6a682907de4c11f60f97926dc79bff6454f22c2fac297c1230a1c
7
- data.tar.gz: f3b4d14e03c95d3ea9f9f7b40f9340433c7d757743cc89229529aa87063573af087e690ee568647aa63c967f74a6e31e3bd9a615538e82e0d4a9908b5009323c
6
+ metadata.gz: 1f31a13fb73f0643476343081e33dc50b3fb22847f32abb0f95599252efa13293c3f1a94d684dbfec11d3e0799b4370f166db2d4e436f9eb5ce05def99986cbb
7
+ data.tar.gz: e930d20928af633900545f1cfd8aca7df794c1340b753042704dbbe6a037f95b109aeaadb23f948418f459f720f8d4e094c56dbe4a238faaa44f1cbc12ff6136
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mais_orcid_client (0.1.0)
4
+ mais_orcid_client (0.2.0)
5
5
  activesupport (>= 4.2, < 8)
6
6
  faraday
7
7
  faraday-retry
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/mais_orcid_client.svg)](https://badge.fury.io/rb/mais_orcid_client)
2
2
  [![CircleCI](https://circleci.com/gh/sul-dlss/mais_orcid_client.svg?style=svg)](https://circleci.com/gh/sul-dlss/mais_orcid_client)
3
- [![Maintainability](https://api.codeclimate.com/v1/badges/5919e7ae4cd162861585/maintainability)](https://codeclimate.com/github/sul-dlss/mais_orcid_client/maintainability)
4
- [![Test Coverage](https://api.codeclimate.com/v1/badges/5919e7ae4cd162861585/test_coverage)](https://codeclimate.com/github/sul-dlss/mais_orcid_client/test_coverage)
3
+ [![Maintainability](https://api.codeclimate.com/v1/badges/25b4a4111f831121dda5/maintainability)](https://codeclimate.com/github/sul-dlss/mais_orcid_client/maintainability)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/25b4a4111f831121dda5/test_coverage)](https://codeclimate.com/github/sul-dlss/mais_orcid_client/test_coverage)
5
5
 
6
6
  # mais_orcid_client
7
7
  API client for accessing MAIS's ORCID endpoints.
@@ -58,3 +58,19 @@ end
58
58
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
59
59
 
60
60
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
61
+
62
+ ## VCR Cassettes
63
+
64
+ VCR gem is used to record the results of the API calls for the tests. If you need to
65
+ record or re-create existing cassettes, you may need to adjust expectations in the tests
66
+ as the results coming back from the API may be different than when the cassettes were
67
+ recorded.
68
+
69
+ To record new cassettes:
70
+ 1. Temporarily adjust the configuration (client_id, client_secret for the MaIS UAT URL) at the top of `spec/mais_orcid_client_spec.rb` so it matches the real MaIS UAT environment.
71
+ 2. Add your new spec with a new cassette name (or delete a cassette to re-create it).
72
+ 3. Run just that new spec.
73
+ 4. You should get a new cassette with the name you specified in the spec.
74
+ 5. The cassette should have access tokens and secrets sanitized by the config in `spec_helper.rb`, but you can double check, EXCEPT for user access tokens in the user response. These should be sanitized manaully (e.g. "access_token":"8d13b8bb-XXXX-YYYY-b7d6-87aecd5a8975")
75
+ 6. Set your configuration at the top of the spec back to the fake client_id and client_secret values.
76
+ 7. Re-run all the specs - they should pass now without making real calls.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class MaisOrcidClient
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -57,9 +57,21 @@ class MaisOrcidClient
57
57
  end
58
58
  end
59
59
 
60
+ # Fetch a user details, including scope and token, given either a SUNetID or ORCIDID
61
+ # @param [string] sunetid of user to fetch
62
+ # @param [orcid] orcidid of user to fetch (ignored if sunetid is also provided)
63
+ # @return [<OrcidUser>, nil] orcid user or nil if not found
64
+ def fetch_orcid_user(sunetid: nil, orcidid: nil)
65
+ raise "must provide either a sunetid or orcidid" unless sunetid || orcidid
66
+
67
+ sunetid ? fetch_by_sunetid(sunetid) : fetch_by_orcidid(orcidid)
68
+ end
69
+
70
+ private
71
+
60
72
  # @param [string] sunet to fetch
61
73
  # @return [<OrcidUser>, nil] orcid user or nil if not found
62
- def fetch_orcid_user(sunetid:)
74
+ def fetch_by_sunetid(sunetid)
63
75
  result = get_response("/users/#{sunetid}", allow404: true)
64
76
 
65
77
  return if result.nil?
@@ -67,9 +79,29 @@ class MaisOrcidClient
67
79
  OrcidUser.new(result[:sunet_id], result[:orcid_id], result[:scope], result[:access_token], result[:last_updated])
68
80
  end
69
81
 
70
- private
82
+ # @param [string] orcidid to fetch
83
+ # @return [<OrcidUser>, nil] orcid user or nil if not found
84
+ def fetch_by_orcidid(orcidid)
85
+ # NOTE: This is intended to be a temporary implementation that iterates over all users
86
+ # until we find the orcidid of interest and then return it. It can be slow (1-2 minutes)
87
+ # if the orcidid queried is at the end of the list (or doesn't exist).
88
+ # The idea is that when MaIS implements this functionality in their API, we replace this
89
+ # iteration with a simple call to their API.
90
+ # see https://github.com/sul-dlss/happy-heron/issues/3164
91
+ next_page = first_page
92
+ loop do
93
+ response = get_response(next_page)
94
+ response[:results].each do |result|
95
+ if result[:orcid_id] == orcidid
96
+ return OrcidUser.new(result[:sunet_id], result[:orcid_id], result[:scope], result[:access_token], result[:last_updated])
97
+ end
98
+ end
99
+ next_page = response.dig(:links, :next)
100
+ return nil if last_page?(response[:links])
101
+ end
102
+ end
71
103
 
72
- def first_page(page_size)
104
+ def first_page(page_size = nil)
73
105
  path = "/users?scope=ANY"
74
106
  path += "&page_size=#{page_size}" if page_size
75
107
  path
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mais_orcid_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Mangiafico
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-07-07 00:00:00.000000000 Z
12
+ date: 2023-07-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport