valkyrie 2.0.0.RC7 → 2.0.0.RC8

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: e035ce1a5ecfcf72ef4934d014e66f9d9ab26c312a1de286c72d84228d98b369
4
- data.tar.gz: 46c4902f29cd8536991d248a14eb80fbafdf5c66fa5a7d56b392cd4696a21e9d
3
+ metadata.gz: 1242297f1c266e9f2ac26d998acc53d5336b40f8a5eba9af2fb48700264a7354
4
+ data.tar.gz: 3f3e3f76fad663011aec778d5834d209160fe6c1327e23fdb6fa54548e999229
5
5
  SHA512:
6
- metadata.gz: 933808a7a1a329191d34c903c700b5f6a010fc45d1387af3d1cb74332ddf3624d98693b43a94e943c8ecc70fd363adbcd6b60a4262ded2c11e808639d284d41d
7
- data.tar.gz: 846a9707b4c1782b7d0983f921f6461bfe4d58688850986b719bab08969c96d7efc49989ba4d436d12db3ddaa215f9dc8c7ee5c2581b1dec6023e66961aec719
6
+ metadata.gz: 33acf17faa1554a6a3b493f9df4c64b8e4ce006d8f83c2c032057805ecb59e08465cb9a197f92231ef96a4e4f1c64eb9f1a727c4049d66f792f228c466d6bfc9
7
+ data.tar.gz: a2bd7732e83f4f81ab394e62429c78929a515faf5bc4715cdf9b6afd6881f9fb01091e9dcfe1f7f656e5d7f36cb1e4a0f189f6bb67dd363e4c9f7fcde9eaea69
data/CHANGELOG.md CHANGED
@@ -70,7 +70,21 @@ involved for their contributions in the last year:
70
70
  [stkenny](https://github.com/stkenny)
71
71
  [tpendragon](https://github.com/tpendragon)
72
72
 
73
- # v1.6.0 2018-04-17
73
+ # v1.7.0 2019-05-29
74
+
75
+ ## Changes since last release
76
+
77
+ * Permit storage adapters to have arbitrary arguments to #upload.
78
+ [jrgriffiniii](https://github.com/jrgriffiniii)
79
+ * Storage adapters can now all upload regular IO objects.
80
+ [tpendragon](https://github.com/tpendragon)
81
+ * Fedora Storage Adapter has a configurable `resource_uri_transformer` for going
82
+ from a `Resource` to a Fedora path.
83
+ [elrayle](https://github.com/elrayle)
84
+ * Improve Gem metadata and allow Bundler 2
85
+ [jcoyne](https://github.com/jcoyne)
86
+
87
+ # v1.6.0 2019-04-17
74
88
 
75
89
  ## Changes since last release
76
90
 
@@ -88,7 +102,7 @@ this release:
88
102
  [escowles](https://github.com/escowles)
89
103
  [no-reply](https://github.com/no-reply)
90
104
 
91
- # v1.5.1 2018-02-08
105
+ # v1.5.1 2019-02-08
92
106
 
93
107
  ## Changes since last release
94
108
 
@@ -101,7 +115,7 @@ this release:
101
115
  [cjcolvar](https://github.com/cjcolvar)
102
116
  [escowles](https://github.com/escowles)
103
117
 
104
- # v1.5.0 2018-02-06
118
+ # v1.5.0 2019-02-06
105
119
 
106
120
  ## Changes since last release
107
121
 
@@ -148,7 +162,7 @@ this release:
148
162
  [no-reply](https://github.com/no-reply)
149
163
  [revgum](https://github.com/revgum)
150
164
 
151
- # v1.5.0 RC2 2018-02-01
165
+ # v1.5.0 RC2 2019-02-01
152
166
 
153
167
  ## Changes since last release
154
168
 
@@ -159,7 +173,7 @@ Additional thanks to the following for code review:
159
173
 
160
174
  [mjgiarlo](https://github.com/mjgiarlo)
161
175
 
162
- # v1.5.0 RC1 2018-02-01
176
+ # v1.5.0 RC1 2019-02-01
163
177
 
164
178
  ## Changes since last release
165
179
 
@@ -203,7 +217,7 @@ this release:
203
217
  [no-reply](https://github.com/no-reply)
204
218
  [revgum](https://github.com/revgum)
205
219
 
206
- # v1.4.0 2018-01-08
220
+ # v1.4.0 2019-01-08
207
221
 
208
222
  ## Changes since last release.
209
223
 
@@ -17,11 +17,24 @@ RSpec.shared_examples 'a Valkyrie::StorageAdapter' do
17
17
  it { is_expected.to respond_to(:delete).with_keywords(:id) }
18
18
  it { is_expected.to respond_to(:upload).with_keywords(:file, :resource, :original_filename) }
19
19
 
20
+ it "can upload a file which is just an IO" do
21
+ io_file = Tempfile.new('temp_io')
22
+ io_file.write File.read(ROOT_PATH.join("spec", "fixtures", "files", "example.tif"))
23
+ io_file.rewind
24
+ sha1 = Digest::SHA1.file(io_file).to_s
25
+
26
+ resource = Valkyrie::Specs::CustomResource.new(id: SecureRandom.uuid)
27
+
28
+ expect(uploaded_file = storage_adapter.upload(file: io_file, original_filename: 'foo.jpg', resource: resource, fake_upload_argument: true)).to be_kind_of Valkyrie::StorageAdapter::File
29
+
30
+ expect(uploaded_file.valid?(digests: { sha1: sha1 })).to be true
31
+ end
32
+
20
33
  it "can upload, validate, re-fetch, and delete a file" do
21
34
  resource = Valkyrie::Specs::CustomResource.new(id: "test")
22
35
  sha1 = Digest::SHA1.file(file).to_s
23
36
  size = file.size
24
- expect(uploaded_file = storage_adapter.upload(file: file, original_filename: 'foo.jpg', resource: resource)).to be_kind_of Valkyrie::StorageAdapter::File
37
+ expect(uploaded_file = storage_adapter.upload(file: file, original_filename: 'foo.jpg', resource: resource, fake_upload_argument: true)).to be_kind_of Valkyrie::StorageAdapter::File
25
38
 
26
39
  expect(uploaded_file).to respond_to(:checksum).with_keywords(:digests)
27
40
  expect(uploaded_file).to respond_to(:valid?).with_keywords(:size, :digests)
@@ -12,8 +12,9 @@ module Valkyrie::Storage
12
12
  # @param file [IO]
13
13
  # @param original_filename [String]
14
14
  # @param resource [Valkyrie::Resource]
15
+ # @param _extra_arguments [Hash] additional arguments which may be passed to other adapters
15
16
  # @return [Valkyrie::StorageAdapter::File]
16
- def upload(file:, original_filename:, resource: nil)
17
+ def upload(file:, original_filename:, resource: nil, **_extra_arguments)
17
18
  new_path = path_generator.generate(resource: resource, file: file, original_filename: original_filename)
18
19
  FileUtils.mkdir_p(new_path.parent)
19
20
  file_mover.call(file.path, new_path)
@@ -4,6 +4,7 @@ module Valkyrie::Storage
4
4
  class Fedora
5
5
  attr_reader :connection, :base_path, :fedora_version
6
6
  PROTOCOL = 'fedora://'
7
+ SLASH = '/'
7
8
 
8
9
  # @param [Ldp::Client] connection
9
10
  def initialize(connection:, base_path: "/", fedora_version: 5)
@@ -29,17 +30,22 @@ module Valkyrie::Storage
29
30
  # @param file [IO]
30
31
  # @param original_filename [String]
31
32
  # @param resource [Valkyrie::Resource]
33
+ # @param content_type [String] content type of file (e.g. 'image/tiff') (default='application/octet-stream')
34
+ # @param resource_uri_transformer [Lambda] transforms the resource's id (e.g. 'DDS78RK') into a uri (optional)
35
+ # @param extra_arguments [Hash] additional arguments which may be passed to other adapters
32
36
  # @return [Valkyrie::StorageAdapter::StreamFile]
33
- def upload(file:, original_filename:, resource:)
34
- identifier = id_to_uri(resource.id) + '/original'
37
+ def upload(file:, original_filename:, resource:, content_type: "application/octet-stream", # rubocop:disable Metrics/ParameterLists
38
+ resource_uri_transformer: default_resource_uri_transformer, **_extra_arguments)
39
+ identifier = resource_uri_transformer.call(resource, base_url) + '/original'
35
40
  sha1 = fedora_version == 5 ? "sha" : "sha1"
36
41
  connection.http.put do |request|
37
42
  request.url identifier
38
- request.headers['Content-Type'] = file.content_type
43
+ request.headers['Content-Type'] = content_type
44
+ request.headers['Content-Length'] = file.length.to_s
39
45
  request.headers['Content-Disposition'] = "attachment; filename=\"#{original_filename}\""
40
46
  request.headers['digest'] = "#{sha1}=#{Digest::SHA1.file(file)}"
41
47
  request.headers['link'] = "<http://www.w3.org/ns/ldp#NonRDFSource>; rel=\"type\""
42
- io = Faraday::UploadIO.new(file.tempfile.path, file.content_type)
48
+ io = Faraday::UploadIO.new(file, content_type, original_filename)
43
49
  request.body = io
44
50
  end
45
51
  find_by(id: Valkyrie::ID.new(identifier.to_s.sub(/^.+\/\//, PROTOCOL)))
@@ -68,6 +74,13 @@ module Valkyrie::Storage
68
74
  end
69
75
  private_constant :IOProxy
70
76
 
77
+ # Translate the Valkrie ID into a URL for the fedora file
78
+ # @return [RDF::URI]
79
+ def fedora_identifier(id:)
80
+ identifier = id.to_s.sub(PROTOCOL, "#{connection.http.scheme}://")
81
+ RDF::URI(identifier)
82
+ end
83
+
71
84
  private
72
85
 
73
86
  # @return [IOProxy]
@@ -77,19 +90,17 @@ module Valkyrie::Storage
77
90
  IOProxy.new(response.body)
78
91
  end
79
92
 
80
- # Translate the Valkrie ID into a URL for the fedora file
81
- # @return [RDF::URI]
82
- def fedora_identifier(id:)
83
- identifier = id.to_s.sub(PROTOCOL, "#{connection.http.scheme}://")
84
- RDF::URI(identifier)
85
- end
86
-
87
- def id_to_uri(id)
88
- RDF::URI("#{connection_prefix}/#{CGI.escape(id.to_s)}")
93
+ def default_resource_uri_transformer
94
+ lambda do |resource, base_url|
95
+ id = CGI.escape(resource.id.to_s)
96
+ RDF::URI.new(base_url + id)
97
+ end
89
98
  end
90
99
 
91
- def connection_prefix
92
- "#{connection.http.url_prefix}/#{base_path}"
100
+ def base_url
101
+ pre_divider = base_path.starts_with?(SLASH) ? '' : SLASH
102
+ post_divider = base_path.ends_with?(SLASH) ? '' : SLASH
103
+ "#{connection.http.url_prefix}#{pre_divider}#{base_path}#{post_divider}"
93
104
  end
94
105
  end
95
106
  end
@@ -13,8 +13,9 @@ module Valkyrie::Storage
13
13
  # @param file [IO]
14
14
  # @param original_filename [String]
15
15
  # @param resource [Valkyrie::Resource]
16
+ # @param _extra_arguments [Hash] additional arguments which may be passed to other adapters
16
17
  # @return [Valkyrie::StorageAdapter::StreamFile]
17
- def upload(file:, original_filename:, resource: nil)
18
+ def upload(file:, original_filename:, resource: nil, **_extra_arguments)
18
19
  identifier = Valkyrie::ID.new("memory://#{resource.id}")
19
20
  cache[identifier] = Valkyrie::StorageAdapter::StreamFile.new(id: identifier, io: file)
20
21
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Valkyrie
3
- VERSION = "2.0.0.RC7"
3
+ VERSION = "2.0.0.RC8"
4
4
  end
data/valkyrie.gemspec CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.email = ["tpendragon@princeton.edu"]
12
12
 
13
13
  spec.summary = 'An ORM using the Data Mapper pattern, specifically built to solve Digital Repository use cases.'
14
+ spec.homepage = "https://github.com/samvera/valkyrie"
14
15
 
15
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
17
  f.match(%r{^(test|spec|features)/})
@@ -33,7 +34,7 @@ Gem::Specification.new do |spec|
33
34
  spec.add_dependency 'rdf-vocab'
34
35
  spec.add_dependency 'disposable', '~> 0.4.5'
35
36
 
36
- spec.add_development_dependency "bundler", "~> 1.16"
37
+ spec.add_development_dependency "bundler", "> 1.16.0", "< 3"
37
38
  spec.add_development_dependency "rake", "~> 10.0"
38
39
  spec.add_development_dependency "rspec", "~> 3.0"
39
40
  spec.add_development_dependency "pry"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: valkyrie
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.RC7
4
+ version: 2.0.0.RC8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trey Pendragon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-15 00:00:00.000000000 Z
11
+ date: 2019-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -196,16 +196,22 @@ dependencies:
196
196
  name: bundler
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - "~>"
199
+ - - ">"
200
+ - !ruby/object:Gem::Version
201
+ version: 1.16.0
202
+ - - "<"
200
203
  - !ruby/object:Gem::Version
201
- version: '1.16'
204
+ version: '3'
202
205
  type: :development
203
206
  prerelease: false
204
207
  version_requirements: !ruby/object:Gem::Requirement
205
208
  requirements:
206
- - - "~>"
209
+ - - ">"
210
+ - !ruby/object:Gem::Version
211
+ version: 1.16.0
212
+ - - "<"
207
213
  - !ruby/object:Gem::Version
208
- version: '1.16'
214
+ version: '3'
209
215
  - !ruby/object:Gem::Dependency
210
216
  name: rake
211
217
  requirement: !ruby/object:Gem::Requirement
@@ -552,7 +558,7 @@ files:
552
558
  - tasks/docker.rake
553
559
  - valkyrie.gemspec
554
560
  - valkyrie_logo.png
555
- homepage:
561
+ homepage: https://github.com/samvera/valkyrie
556
562
  licenses: []
557
563
  metadata: {}
558
564
  post_install_message: