preservation-client 3.2.1 → 3.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 346519c8c530b30507578d91469ffd1f50cf08fe3b6b5f5e46905f35e6d870ab
4
- data.tar.gz: 38afa1c113b86737ac3593101b3bfc1133de42bc58398de19250636bbdbefc05
3
+ metadata.gz: 859dd579bd9f390d624b4017952f76cd4f7ee652e24cd1a3e6a26ad997df921f
4
+ data.tar.gz: 210a26faa77c81accc7e694306e6b51f6ed61a6f2e4bf130a01f0e759b835792
5
5
  SHA512:
6
- metadata.gz: 81c98f1a410de28f6c8bf90dff39c5537670aa4c8ce4625779d21bd8fbbe3c6341a0930f0fc8572a417d6fd1bd5cba4d69586deb402cf8d9d70e695114138306
7
- data.tar.gz: 38e22150bc23cf59501893becb24a39c98eb51d8ac12b5acad80f0a8ad108381a6d9cf88a5f1120a32e9388cfc36c0d1e1dfea5c6cf8b3cf42de74e2c6bda5d7
6
+ metadata.gz: 1a69642114e5eae5c81bbbc5928e521b29fea8680005579ea7538ed9b9cbefc89c7ff6ce948cfcd4652e29d2f648f4643784ea2b0dbfb6dc3766a3f174db4c91
7
+ data.tar.gz: 5338f001b55fc8823164b9a11798cda7dc6910178a76b87dbdd529d86bf7e483e5ed1c3565b80d15c70533b645c4d72e6bcdfdf840f11a7ccef0c49694284979
@@ -0,0 +1,35 @@
1
+ version: 2.1
2
+
3
+ jobs:
4
+ build:
5
+ docker:
6
+ - image: circleci/ruby:2.7.1
7
+ environment:
8
+ CC_TEST_REPORTER_ID: 02e8afad8d0b699828dd69b6f45b598e7317b2d9828ea23380c3a97113068a0c
9
+ RAILS_ENV: test
10
+ steps:
11
+ - checkout
12
+ - run:
13
+ name: Install Bundler
14
+ command: gem install bundler
15
+ - run:
16
+ name: Which bundler?
17
+ command: bundle -v
18
+ - run:
19
+ name: Bundle Install
20
+ command: bundle check || bundle install
21
+ - run:
22
+ name: Lint using rubocop
23
+ command: bundle exec rubocop
24
+ - run:
25
+ name: Setup Code Climate test-reporter
26
+ command: |
27
+ curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
28
+ chmod +x ./cc-test-reporter
29
+ ./cc-test-reporter before-build
30
+ - run:
31
+ name: rspec
32
+ command: bundle exec rspec
33
+ - run:
34
+ name: upload test coverage report to Code Climate
35
+ command: ./cc-test-reporter after-build --coverage-input-type simplecov --exit-code $?
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/preservation-client.svg)](https://badge.fury.io/rb/preservation-client)
2
- [![Build Status](https://travis-ci.org/sul-dlss/preservation-client.svg?branch=master)](https://travis-ci.org/sul-dlss/preservation-client)
2
+ [![CircleCI](https://circleci.com/gh/sul-dlss/preservation-client.svg?style=svg)](https://circleci.com/gh/sul-dlss/preservation-client)
3
3
  [![Maintainability](https://api.codeclimate.com/v1/badges/00d2d8957226777105b3/maintainability)](https://codeclimate.com/github/sul-dlss/preservation-client/maintainability)
4
4
  [![Test Coverage](https://api.codeclimate.com/v1/badges/00d2d8957226777105b3/test_coverage)](https://codeclimate.com/github/sul-dlss/preservation-client/test_coverage)
5
5
 
@@ -92,6 +92,10 @@ Note that the preservation service is behind a firewall.
92
92
 
93
93
  - `client.objects.primary_moab_location(druid: 'ooo000oo0000')` - returns the path to the storage location for the primary moab
94
94
 
95
+ ### Validate the Moab
96
+
97
+ - `client.objects.validate_moab(druid: 'ooo000oo0000')` - validates that the Moab object, used by preservationWF to ensure we have a valid Moab before replicating to various preservation endpoints
98
+
95
99
  ### Get difference information between passed contentMetadata.xml and files in the Moab
96
100
 
97
101
  - `client.objects.content_inventory_diff(druid: 'oo000oo0000', content_metadata: '<contentMetadata>...</contentMetadata>')` - returns Moab::FileInventoryDifference containing differences between passed content metadata and latest version for subset 'all'
@@ -71,10 +71,20 @@ module Preservation
71
71
  file(druid, 'metadata', filepath, version)
72
72
  end
73
73
 
74
+ # calls the endpoint to queue a ValidateMoab job for a specific druid
75
+ # typically called by a preservationIngestWF robot
76
+ # @param [String] druid - with or without prefix: 'druid:ab123cd4567' or 'ab123cd4567'
77
+ # @return [String] "ok" when job queued
78
+ # @raise [Preservation::Client::NotFoundError] when druid is not found
79
+ def validate_moab(druid:)
80
+ get("objects/#{druid}/validate_moab", {}, on_data: nil)
81
+ end
82
+
74
83
  # retrieve the storage location for the primary moab of the given druid
75
84
  # @param [String] druid - with or without prefix: 'druid:ab123cd4567' or 'ab123cd4567'
76
85
  # @return [String] the storage location of the primary moab for the given druid
77
86
  # @raise [Preservation::Client::NotFoundError] when druid is not found
87
+ # @raise [Preservation::Client::LockedError] when druid is in locked state (not available for versioning)
78
88
  def primary_moab_location(druid:)
79
89
  get("objects/#{druid}/primary_moab_location", {}, on_data: nil)
80
90
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Preservation
4
4
  class Client
5
- VERSION = '3.2.1'
5
+ VERSION = '3.5.0'
6
6
  end
7
7
  end
@@ -25,14 +25,14 @@ module Preservation
25
25
 
26
26
  errmsg = ResponseErrorFormatter
27
27
  .format(response: resp, object_id: object_id, client_method_name: caller_locations.first.label)
28
- raise Preservation::Client::UnexpectedResponseError, errmsg
28
+ raise UnexpectedResponseError, errmsg
29
29
  rescue Faraday::ResourceNotFound
30
30
  errmsg = "#{object_id} not found in Preservation at #{connection.url_prefix}#{req_url}"
31
- raise Preservation::Client::NotFoundError, errmsg
31
+ raise NotFoundError, errmsg
32
32
  rescue Faraday::Error => e
33
33
  errmsg = "Preservation::Client.#{caller_locations.first.label} for #{object_id} " \
34
34
  "got #{e.response[:status]} from Preservation at #{req_url}: #{e.response[:body]}"
35
- raise Preservation::Client::UnexpectedResponseError, errmsg
35
+ raise UnexpectedResponseError, errmsg
36
36
  end
37
37
 
38
38
  # @param path [String] path to be appended to connection url (no leading slash)
@@ -83,18 +83,20 @@ module Preservation
83
83
  request_json = params.to_json if params&.any?
84
84
  connection.public_send(method, req_url, request_json, 'Content-Type' => 'application/json')
85
85
  end
86
+
86
87
  return resp.body if resp.success?
87
88
 
88
89
  errmsg = ResponseErrorFormatter.format(response: resp, client_method_name: caller_locations.first.label)
89
- raise Preservation::Client::UnexpectedResponseError, errmsg
90
+ raise UnexpectedResponseError, errmsg
90
91
  rescue Faraday::ResourceNotFound => e
91
92
  errmsg = "Preservation::Client.#{caller_locations.first.label} " \
92
93
  "got #{e.response[:status]} from Preservation at #{req_url}: #{e.response[:body]}"
93
- raise Preservation::Client::NotFoundError, errmsg
94
+ raise NotFoundError, errmsg
94
95
  rescue Faraday::Error => e
95
96
  errmsg = "Preservation::Client.#{caller_locations.first.label} " \
96
97
  "got #{e.response[:status]} from Preservation at #{req_url}: #{e.response[:body]}"
97
- raise Preservation::Client::UnexpectedResponseError, errmsg
98
+ exception_class = e.response[:status] == 423 ? LockedError : UnexpectedResponseError
99
+ raise exception_class, errmsg
98
100
  end
99
101
  end
100
102
  end
@@ -17,13 +17,18 @@ module Preservation
17
17
  class Client
18
18
  class Error < StandardError; end
19
19
 
20
- # Error that is raised when the remote server returns a 404 Not Found
20
+ # Error raised when server returns 404 Not Found
21
21
  class NotFoundError < Error; end
22
22
 
23
- # Error that is raised when the remote server returns some unexpected response
24
- # e.g. 4xx or 5xx status
23
+ # Error raised when server returns 423 Locked
24
+ class LockedError < Error; end
25
+
26
+ # Error raised when server returns an unexpected response
27
+ # e.g., 4xx or 5xx status not otherwise handled
25
28
  class UnexpectedResponseError < Error; end
26
29
 
30
+ # Error raised when Faraday gem fails to connect, e.g., on SSL errors or
31
+ # timeouts
27
32
  class ConnectionFailedError < Error; end
28
33
 
29
34
  DEFAULT_API_VERSION = 'v1'
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ['lib']
30
30
 
31
- spec.add_dependency 'activesupport', '>= 4.2', '< 7'
31
+ spec.add_dependency 'activesupport', '>= 4.2', '< 8'
32
32
  spec.add_dependency 'faraday', '>= 0.15', '< 2.0'
33
33
  spec.add_dependency 'moab-versioning', '~> 4.3'
34
34
  spec.add_dependency 'zeitwerk', '~> 2.1'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: preservation-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naomi Dushay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-25 00:00:00.000000000 Z
11
+ date: 2022-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '4.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '7'
22
+ version: '8'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '4.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '7'
32
+ version: '8'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: faraday
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -184,12 +184,12 @@ executables: []
184
184
  extensions: []
185
185
  extra_rdoc_files: []
186
186
  files:
187
+ - ".circleci/config.yml"
187
188
  - ".github/pull_request_template.md"
188
189
  - ".gitignore"
189
190
  - ".rspec"
190
191
  - ".rubocop.yml"
191
192
  - ".rubocop_todo.yml"
192
- - ".travis.yml"
193
193
  - Gemfile
194
194
  - LICENSE
195
195
  - README.md
@@ -225,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
225
  - !ruby/object:Gem::Version
226
226
  version: '0'
227
227
  requirements: []
228
- rubygems_version: 3.1.2
228
+ rubygems_version: 3.1.4
229
229
  signing_key:
230
230
  specification_version: 4
231
231
  summary: A thin client for getting info from SDR preservation.
data/.travis.yml DELETED
@@ -1,25 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- rvm:
4
- - 2.5.3
5
- - 2.6.4
6
- - 2.7.1
7
-
8
- env:
9
- jobs:
10
- - RAILS_VERSION=5.2.3
11
- - RAILS_VERSION=6.0.0
12
- global:
13
- - CC_TEST_REPORTER_ID=02e8afad8d0b699828dd69b6f45b598e7317b2d9828ea23380c3a97113068a0c
14
-
15
- before_install: gem install bundler -v 2.1.2
16
-
17
- before_script:
18
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
19
- - chmod +x ./cc-test-reporter
20
- - ./cc-test-reporter before-build
21
- after_script:
22
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
23
-
24
- notifications:
25
- email: false