scholarsphere-client 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|