scholarsphere-client 0.1.0 → 0.1.1
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 +4 -4
- data/.rubocop.yml +4 -0
- data/.yardopts +2 -0
- data/README.md +5 -1
- data/lib/scholarsphere/client/collection.rb +4 -4
- data/lib/scholarsphere/client/config.rb +15 -0
- data/lib/scholarsphere/client/ingest.rb +4 -4
- data/lib/scholarsphere/client/version.rb +1 -1
- data/lib/scholarsphere/s3/uploaded_file.rb +37 -12
- data/lib/scholarsphere/s3/uploader.rb +3 -3
- data/scholarsphere-client.gemspec +7 -5
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84b082e1c474c137dd8202b5ae6666eb73938f9b1bd806f053308a715272c28f
|
4
|
+
data.tar.gz: c94c0532b48c3b0f9f3b9918f01275a572f75a8ff3f7d5112837b7fd78e474ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 517ddf088ccad9da2fbdae7b0d674c3017c5085e850d568f23fa0eaff95899e4bfe728de6f144f2480d09d65025801c22e0929eeb60bf3548c7613e041b40cb8
|
7
|
+
data.tar.gz: a7b2df6784f547a3ceb9b9de3e82497398e76b794dfe0fe22cdbbc6214e7a068940b8df7957195b61a417f9f8d4f4b1dd115693630467661b821907675b32b94
|
data/.rubocop.yml
CHANGED
data/.yardopts
ADDED
data/README.md
CHANGED
@@ -20,4 +20,8 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
You can read the [ruby docs](https://www.rubydoc.info/gems/scholarsphere-client) for the latest features.
|
24
|
+
|
25
|
+
**Warning!**
|
26
|
+
|
27
|
+
This is not yet in 1.0 status and features will change without the customary deprecation warnings.
|
@@ -5,10 +5,10 @@ module Scholarsphere
|
|
5
5
|
class Collection
|
6
6
|
attr_reader :metadata, :depositor, :permissions, :work_noids
|
7
7
|
|
8
|
-
# @param [Hash]
|
9
|
-
# @param [String] depositor
|
10
|
-
# @param
|
11
|
-
# @param
|
8
|
+
# @param metadata [Hash] Attributes for the collection
|
9
|
+
# @param depositor [String] Access ID of the depositor
|
10
|
+
# @param permissions [Hash] Additional permissions for the collection (optional)
|
11
|
+
# @param work_noids [Array<String>] List of of identifiers for works that belong to the collection
|
12
12
|
def initialize(metadata:, depositor:, permissions: {}, work_noids: [])
|
13
13
|
@metadata = metadata
|
14
14
|
@depositor = depositor
|
@@ -2,18 +2,33 @@
|
|
2
2
|
|
3
3
|
module Scholarsphere
|
4
4
|
module Client
|
5
|
+
##
|
6
|
+
#
|
7
|
+
# Loads the yaml configuration file for the client. The default location is `config/scholarsphere-client.yml` and
|
8
|
+
# the client will load this file automatically whenever it is invoked.
|
9
|
+
#
|
10
|
+
# The configuration file should contain the endpoint of the Scholarsphere API.
|
11
|
+
#
|
12
|
+
# # Example
|
13
|
+
#
|
14
|
+
# SS4_ENDPOINT: "http://scholarsphere.psu.edu/api/v1"
|
15
|
+
#
|
5
16
|
class Config
|
17
|
+
# @private
|
6
18
|
def self.load_defaults
|
7
19
|
new.load_config
|
8
20
|
end
|
9
21
|
|
22
|
+
# @return [Pathname]
|
10
23
|
attr_reader :file
|
11
24
|
|
25
|
+
# @param [Pathname] file
|
12
26
|
def initialize(file = Pathname.pwd.join('config', 'scholarsphere-client.yml'))
|
13
27
|
@file = file
|
14
28
|
load_config
|
15
29
|
end
|
16
30
|
|
31
|
+
# @private
|
17
32
|
def load_config
|
18
33
|
return unless file.exist?
|
19
34
|
|
@@ -5,10 +5,10 @@ module Scholarsphere
|
|
5
5
|
class Ingest
|
6
6
|
attr_reader :content, :metadata, :depositor, :permissions
|
7
7
|
|
8
|
-
# @param [Hash]
|
9
|
-
# @param [Array<File,IO,Pathnme
|
10
|
-
# @param [String] depositor
|
11
|
-
# @param
|
8
|
+
# @param metadata [Hash] Metadata attributes
|
9
|
+
# @param files [Array<File,IO,Pathnme>,Hash] An array of File or IO objects, or a hash with a :file param
|
10
|
+
# @param depositor [String] The access ID of the depositor
|
11
|
+
# @param permissions [Hash] (optional) Additional permissions to apply to the resource
|
12
12
|
def initialize(metadata:, files:, depositor:, permissions: {})
|
13
13
|
@content = build_content_hash(files)
|
14
14
|
@metadata = metadata
|
@@ -2,17 +2,39 @@
|
|
2
2
|
|
3
3
|
module Scholarsphere
|
4
4
|
module S3
|
5
|
+
##
|
6
|
+
#
|
7
|
+
# Represents a file on the client's file system that will be uploaded, but hasn't been yet. The object is
|
8
|
+
# constructed using a pathname for the file, and if desired, a checksum. The checksum is not required, and if it is
|
9
|
+
# not provided, the client will calculate one. Once initialized, the uploaded file object can be used by the client
|
10
|
+
# to make additional calls to the application.
|
11
|
+
#
|
12
|
+
# ## Examples
|
13
|
+
#
|
14
|
+
# The most common use case would be:
|
15
|
+
#
|
16
|
+
# pathname = Pathname.new('path/to/your/file')
|
17
|
+
# uploaded_file = UploadedFile.new(pathname)
|
18
|
+
#
|
19
|
+
# If the file is large, then calculating a checksum could be time-intensive. Providing one can avoid that. Or, if
|
20
|
+
# you already have a checksum from a trusted source, you can pass that along for the client to use:
|
21
|
+
#
|
22
|
+
# uploaded_file = UploadedFile.new(pathname, checksum: '[md5 checksum hash]')
|
23
|
+
#
|
5
24
|
class UploadedFile
|
6
|
-
|
25
|
+
# @return [Pathname] The location of the file to be uploaded
|
26
|
+
attr_reader :source
|
7
27
|
|
8
|
-
# @param [Pathname]
|
9
|
-
# @
|
28
|
+
# @param source [Pathname] The file to be uploaded
|
29
|
+
# @param options [Hash]
|
30
|
+
# @option options [String] :checksum The file's md5 checksum. If one is not provided, it will be calculated at
|
31
|
+
# upload
|
10
32
|
def initialize(source, options = {})
|
11
33
|
@source = source
|
12
34
|
@checksum = options[:checksum]
|
13
35
|
end
|
14
36
|
|
15
|
-
# @return [Hash]
|
37
|
+
# @return [Hash] Set of metadata needed by Shrine to upload the file
|
16
38
|
# @note this can be passed to a controller for uploading the file to Shrine
|
17
39
|
def to_shrine
|
18
40
|
{
|
@@ -22,22 +44,22 @@ module Scholarsphere
|
|
22
44
|
}
|
23
45
|
end
|
24
46
|
|
25
|
-
# @return [String]
|
26
|
-
# @note This
|
27
|
-
#
|
47
|
+
# @return [String] A unique, randomly-generated UUID
|
48
|
+
# @note This serves as the name of the file in the S3 bucket. However, this original name of the file is kept as
|
49
|
+
# metadata within the application so that it can be downloaded.
|
28
50
|
def id
|
29
51
|
@id ||= "#{SecureRandom.uuid}#{source.extname}"
|
30
52
|
end
|
31
53
|
|
32
|
-
# @return [String]
|
33
|
-
# @note Path of the file relative to the bucket
|
54
|
+
# @return [String] Path of the file relative to the bucket in S3
|
34
55
|
def key
|
35
56
|
"#{prefix}/#{id}"
|
36
57
|
end
|
37
58
|
|
38
|
-
# @return [String]
|
39
|
-
#
|
40
|
-
# checksum be base64
|
59
|
+
# @return [String] The md5 checksum encoded in base64. If you provided a checksum at initialization, that one will
|
60
|
+
# be encoded, if not, a checksum will be calculated and then encoded.
|
61
|
+
# @note When sending the checksum to verify the file's integrity, Amazon requires that the value be base64
|
62
|
+
# encoded.
|
41
63
|
# @example The equivalent operation in bash would be:
|
42
64
|
# openssl dgst -md5 -binary file.jpg | openssl enc -base64
|
43
65
|
def content_md5
|
@@ -48,12 +70,15 @@ module Scholarsphere
|
|
48
70
|
end
|
49
71
|
end
|
50
72
|
|
73
|
+
# @return [String] Size of the file in bytes
|
51
74
|
def size
|
52
75
|
source.size
|
53
76
|
end
|
54
77
|
|
55
78
|
private
|
56
79
|
|
80
|
+
attr_reader :checksum
|
81
|
+
|
57
82
|
def metadata
|
58
83
|
{
|
59
84
|
size: source.size,
|
@@ -15,9 +15,9 @@ module Scholarsphere
|
|
15
15
|
@multipart_threshold = options[:multipart_threshold] || FIFTEEN_MEGABYTES
|
16
16
|
end
|
17
17
|
|
18
|
-
# @param [UploadedFile]
|
19
|
-
# @param [Hash] of additional options
|
20
|
-
# @
|
18
|
+
# @param [UploadedFile] uploaded_file
|
19
|
+
# @param [Hash] options of additional options
|
20
|
+
# @option options [String] content_md5 a base64-encoded string representating the md5 checksum
|
21
21
|
# @return [void]
|
22
22
|
# @note The content_md5 hash cannot be used when doing a multipart upload.
|
23
23
|
def upload(uploaded_file, options = {})
|
@@ -14,11 +14,12 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.description = 'Client software to create new content for the Scholarsphere repository at Penn State.'
|
15
15
|
spec.homepage = 'https://github.com/psu-stewardship/scholarsphere-client'
|
16
16
|
|
17
|
-
spec.metadata
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
spec.metadata = {
|
18
|
+
'homepage_uri' => spec.homepage,
|
19
|
+
'source_code_uri' => spec.homepage,
|
20
|
+
'documentation' => 'https://www.rubydoc.info/gems/scholarsphere-client',
|
21
|
+
'allowed_push_host' => 'https://rubygems.org'
|
22
|
+
}
|
22
23
|
|
23
24
|
# Specify which files should be added to the gem when it is released.
|
24
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -41,4 +42,5 @@ Gem::Specification.new do |spec|
|
|
41
42
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
42
43
|
spec.add_development_dependency 'rspec-its', '~> 1.3'
|
43
44
|
spec.add_development_dependency 'simplecov', '~> 0.18'
|
45
|
+
spec.add_development_dependency 'yard', '< 1.0'
|
44
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scholarsphere-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Wead
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-s3
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0.18'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: yard
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "<"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '1.0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "<"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '1.0'
|
167
181
|
description: Client software to create new content for the Scholarsphere repository
|
168
182
|
at Penn State.
|
169
183
|
email:
|
@@ -175,6 +189,7 @@ files:
|
|
175
189
|
- ".gitignore"
|
176
190
|
- ".rspec"
|
177
191
|
- ".rubocop.yml"
|
192
|
+
- ".yardopts"
|
178
193
|
- Gemfile
|
179
194
|
- README.md
|
180
195
|
- Rakefile
|
@@ -193,9 +208,10 @@ files:
|
|
193
208
|
homepage: https://github.com/psu-stewardship/scholarsphere-client
|
194
209
|
licenses: []
|
195
210
|
metadata:
|
196
|
-
allowed_push_host: https://rubygems.org
|
197
211
|
homepage_uri: https://github.com/psu-stewardship/scholarsphere-client
|
198
212
|
source_code_uri: https://github.com/psu-stewardship/scholarsphere-client
|
213
|
+
documentation: https://www.rubydoc.info/gems/scholarsphere-client
|
214
|
+
allowed_push_host: https://rubygems.org
|
199
215
|
post_install_message:
|
200
216
|
rdoc_options: []
|
201
217
|
require_paths:
|