preservation-client 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -16
- data/lib/preservation/client/objects.rb +28 -0
- data/lib/preservation/client/version.rb +1 -1
- data/preservation-client.gemspec +2 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c390947fedbff620ee7ff2afa122451db405591f54fae1c1772bbcb80b563fc
|
4
|
+
data.tar.gz: 180421d85a8c49b9a32d9d7ca4de3d57c186451d3097a8dd4c6d4044f96ce1f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b95502f28aecd1f92bb58a1b4c61910f7bbd2eca0f4afab19a8c7b1610f2a4f42245dbf6a2eda9e6e0ab7fd1e15f5076ad4a862f7d7d53e89b10dca57d421789
|
7
|
+
data.tar.gz: 2bd69f1bbe51930ebac3bb02629cc1053e807ab36c73b5c1aa62f737cba104eed3a3457d154cc41e9d44a40c448fcea9edfe1d953048ade738014b6a158ef314
|
data/README.md
CHANGED
@@ -3,9 +3,9 @@
|
|
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
|
|
6
|
-
#
|
6
|
+
# preservation-client
|
7
7
|
|
8
|
-
|
8
|
+
preservation-client is a Ruby gem that acts as a client to the RESTful HTTP APIs provided by [preservation_catalog](https://github.com/sul-dlss/preservation_catalog).
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
|
@@ -25,14 +25,11 @@ Or install it yourself as:
|
|
25
25
|
|
26
26
|
## Usage
|
27
27
|
|
28
|
-
To configure and use the client, here's an example:
|
29
|
-
|
30
28
|
```ruby
|
31
29
|
require 'preservation/client'
|
32
30
|
|
33
31
|
def do_the_thing
|
34
|
-
|
35
|
-
current_version_as_integer = client.current_version(params: { druid: 'druid:123' })
|
32
|
+
current_version_as_integer = client.current_version('druid:oo000oo0000')
|
36
33
|
end
|
37
34
|
|
38
35
|
private
|
@@ -48,16 +45,37 @@ Note that the preservation service is behind a firewall.
|
|
48
45
|
|
49
46
|
## API Coverage
|
50
47
|
|
51
|
-
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
-
|
60
|
-
-
|
48
|
+
druids may be with or without the "druid:" prefix - 'oo000oo0000' or 'druid:oo000oo0000'
|
49
|
+
|
50
|
+
### Get the current version of a preserved object (Moab)
|
51
|
+
|
52
|
+
- `client.objects.current_version('oo000oo0000')` - returns latest version as an Integer
|
53
|
+
|
54
|
+
### Retrieve file signature (checksum) information
|
55
|
+
|
56
|
+
- `client.objects.checksums(druids: druids)` - returns info as raw csv
|
57
|
+
- `client.objects.checksums(druids: druids, format: 'json')` - returns info as json
|
58
|
+
|
59
|
+
### Retrieve individual files from preservation
|
60
|
+
|
61
|
+
- `client.objects.content(druid: 'oo000oo0000', filepath: 'my_file.pdf')` - returns contents of my_file.pdf in most recent version of Moab object
|
62
|
+
- You may specify the version:
|
63
|
+
- `client.objects.content(druid: 'oo000oo0000', filepath: 'my_file.pdf', version: '1')` - returns contents of my_file.pdf in version 1 of Moab object
|
64
|
+
- `client.objects.manifest(druid: 'oo000oo0000', filepath: 'versionInventory.xml')` - returns contents of versionInventory.xml in most recent version of Moab object
|
65
|
+
- You may specify the version:
|
66
|
+
- `client.objects.manifest(druid: 'oo000oo0000', filepath: 'versionInventory.xml', version: '3')` - returns contents of versionInventory.xml in version 3 of Moab object
|
67
|
+
- `client.objects.metadata(druid: 'oo000oo0000', filepath: 'identityMetadata.xml')` - returns contents of identityMetadata.xml in most recent version of Moab object
|
68
|
+
- You may specify the version:
|
69
|
+
- `client.objects.metadata(druid: 'oo000oo0000', filepath: 'identityMetadata.xml', version: '8')` - returns contents of identityMetadata.xml in version 8 of Moab object
|
70
|
+
- `client.objects.signature_catalog(druid: 'oo000oo0000')` - returns contents of latest version of signatureCatalog.xml from Moab object
|
71
|
+
|
72
|
+
### Get difference information between passed contentMetadata.xml and files in the Moab
|
73
|
+
|
74
|
+
- `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'
|
75
|
+
- you may specify the subset (all|shelve|preserve|publish) and/or the version:
|
76
|
+
- `client.objects.content_inventory_diff(druid: 'oo000oo0000', subset: 'publish', version: '1', content_metadata: '<contentMetadata>...</contentMetadata>')`
|
77
|
+
|
78
|
+
- `client.objects.shelve_content_diff(druid: 'oo000oo0000', content_metadata: '<contentMetadata>...</contentMetadata>')` - returns Moab::FileGroupDifference containing differences between passed content metadata and latest version for subset 'shelve'
|
61
79
|
|
62
80
|
## Development
|
63
81
|
|
@@ -1,5 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'moab'
|
4
|
+
|
5
|
+
# NOTE: this class makes use of data structures from moab-versioning gem,
|
6
|
+
# but it does NOT directly access any preservation storage roots
|
3
7
|
module Preservation
|
4
8
|
class Client
|
5
9
|
# API calls that are about Preserved Objects
|
@@ -11,6 +15,30 @@ module Preservation
|
|
11
15
|
post('objects/checksums', druids: druids, format: resp_format)
|
12
16
|
end
|
13
17
|
|
18
|
+
# @param [String] druid - with or without prefix: 'druid:bb123cd4567' OR 'bb123cd4567'
|
19
|
+
# @param [String] content_metadata - contentMetadata.xml to be compared against a version of Moab
|
20
|
+
# @param [String] subset - (default: 'all') which subset of files to compare (all|shelve|preserve|publish)
|
21
|
+
# @param [String] version - version of Moab to be compared against (defaults to nil for latest version)
|
22
|
+
# @return [Moab::FileInventoryDifference] differences of passed contentMetadata.xml
|
23
|
+
# with latest (or specified) version in Moab for all files (default) or
|
24
|
+
# a specified subset (shelve|preserve|publish)
|
25
|
+
def content_inventory_diff(druid:, content_metadata:, subset: 'all', version: nil)
|
26
|
+
result = post("objects/#{druid}/content_diff",
|
27
|
+
content_metadata: content_metadata, subset: subset, version: version)
|
28
|
+
Moab::FileInventoryDifference.parse(result)
|
29
|
+
end
|
30
|
+
|
31
|
+
# convenience method for retrieving the differences in content files that should be "shelved" (altered in stacks)
|
32
|
+
# (or nil if no such differences)
|
33
|
+
# @param [String] druid - with or without prefix: 'druid:bb123cd4567' OR 'bb123cd4567'
|
34
|
+
# @param [String] content_metadata - most recent contentMetadata.xml to be compared against latest version of Moab
|
35
|
+
# @return [Moab::FileGroupDifference] differences in content files that should be "shelved" (altered in stacks)
|
36
|
+
# (or nil if not found)
|
37
|
+
def shelve_content_diff(druid:, content_metadata:)
|
38
|
+
inventory_diff = content_inventory_diff(druid: druid, content_metadata: content_metadata, subset: 'shelve')
|
39
|
+
inventory_diff.group_difference('content')
|
40
|
+
end
|
41
|
+
|
14
42
|
# @param [String] druid - with or without prefix: 'druid:ab123cd4567' OR 'ab123cd4567'
|
15
43
|
# @return [Integer] the current version of the Preserved Object
|
16
44
|
def current_version(druid)
|
data/preservation-client.gemspec
CHANGED
@@ -30,13 +30,14 @@ Gem::Specification.new do |spec|
|
|
30
30
|
|
31
31
|
spec.add_dependency 'activesupport', '>= 4.2', '< 7'
|
32
32
|
spec.add_dependency 'faraday', '~> 0.15'
|
33
|
+
spec.add_dependency 'moab-versioning', '~> 4.3'
|
33
34
|
spec.add_dependency 'zeitwerk', '~> 2.1'
|
34
35
|
|
35
36
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
36
37
|
spec.add_development_dependency 'pry-byebug'
|
37
38
|
spec.add_development_dependency 'rake', '~> 10.0'
|
38
39
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
39
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
40
|
+
spec.add_development_dependency 'rubocop', '~> 0.77.0'
|
40
41
|
spec.add_development_dependency 'simplecov'
|
41
42
|
spec.add_development_dependency 'webmock'
|
42
43
|
end
|
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: 0.
|
4
|
+
version: 0.4.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: 2019-12-
|
11
|
+
date: 2019-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0.15'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: moab-versioning
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '4.3'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '4.3'
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: zeitwerk
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,14 +134,14 @@ dependencies:
|
|
120
134
|
requirements:
|
121
135
|
- - "~>"
|
122
136
|
- !ruby/object:Gem::Version
|
123
|
-
version: 0.
|
137
|
+
version: 0.77.0
|
124
138
|
type: :development
|
125
139
|
prerelease: false
|
126
140
|
version_requirements: !ruby/object:Gem::Requirement
|
127
141
|
requirements:
|
128
142
|
- - "~>"
|
129
143
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
144
|
+
version: 0.77.0
|
131
145
|
- !ruby/object:Gem::Dependency
|
132
146
|
name: simplecov
|
133
147
|
requirement: !ruby/object:Gem::Requirement
|