browse-everything 1.6.1 → 2.0.0.alpha.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/Gemfile +4 -6
- data/README.md +25 -0
- data/app/assets/javascripts/browse_everything/behavior.js +1 -6
- data/browse-everything.gemspec +0 -3
- data/lib/browse_everything/driver/box.rb +8 -1
- data/lib/browse_everything/driver/dropbox.rb +9 -1
- data/lib/browse_everything/driver/s3.rb +6 -28
- data/lib/browse_everything/version.rb +1 -1
- data/lib/browse_everything.rb +4 -2
- data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +20 -7
- data/spec/helper/browse_everything_controller_helper_spec.rb +2 -0
- data/spec/lib/browse_everything/browser_spec.rb +11 -11
- data/spec/lib/browse_everything/driver/box_spec.rb +2 -0
- data/spec/lib/browse_everything/driver/dropbox_spec.rb +2 -0
- data/spec/lib/browse_everything/driver/s3_spec.rb +4 -44
- metadata +2 -44
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 64351da415814ba91aa2beebfc70fa27cbcc7c09ba0175f07425870b5ff4c364
|
|
4
|
+
data.tar.gz: 4908e6bd8ec3c2e6801fe112f3fc9458dd3ccb20b3c5e5a538a813659ddf9ea3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1d14bf7d52f5d04fcffda8ced44b90c78aab2f9288b059a930b0c7a3c183a1b0a3c3be13ad2dc4e1e8bb780fc9744078a08ecea3988d92d3e1d6931956618fcd
|
|
7
|
+
data.tar.gz: 24ee1844450045c9985514d9f06e3db47f5275fe8ce9d2e0104e86af39a0adb931628e25e68b1dfb25fc7d9d4dc523ba73264aff12baae10df69c3573950fb4a
|
data/Gemfile
CHANGED
|
@@ -9,6 +9,10 @@ group :development, :test do
|
|
|
9
9
|
gem 'pry-byebug' unless ENV['CI']
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
# "soft"/"optional" dependency, but needed for our tests of dropbox driver to pass
|
|
13
|
+
gem 'dropbox_api', '>= 0.1.20'
|
|
14
|
+
gem 'ruby-box'
|
|
15
|
+
|
|
12
16
|
# == Extra dependencies for dummy test app ==
|
|
13
17
|
#
|
|
14
18
|
# Extra dependencies for dummy test app are in .gemspec as a development dependency
|
|
@@ -25,12 +29,6 @@ end
|
|
|
25
29
|
|
|
26
30
|
ENV['RAILS_VERSION'] ||= "8.0.0"
|
|
27
31
|
|
|
28
|
-
# json 3 dropped the quirks_mode option that ActiveSupport before 8.1 passes
|
|
29
|
-
# when encoding, so Hash#to_json raises ArgumentError under it.
|
|
30
|
-
if ENV['RAILS_VERSION'] != 'edge' && Gem::Version.new(ENV['RAILS_VERSION']) < Gem::Version.new('8.1')
|
|
31
|
-
gem 'json', '< 3'
|
|
32
|
-
end
|
|
33
|
-
|
|
34
32
|
if ENV['RAILS_VERSION']
|
|
35
33
|
if ENV['RAILS_VERSION'] == 'edge'
|
|
36
34
|
gem 'rails', github: 'rails/rails'
|
data/README.md
CHANGED
|
@@ -24,6 +24,31 @@ download the files.
|
|
|
24
24
|
|
|
25
25
|
**This gem does not depend on hydra-head**
|
|
26
26
|
|
|
27
|
+
## Certain drivers needing maintenance require extra setup
|
|
28
|
+
|
|
29
|
+
Certain drivers need additional development work if they are to be fully
|
|
30
|
+
supported again, and for now require extra opt-in setup.
|
|
31
|
+
|
|
32
|
+
### Dropbox
|
|
33
|
+
|
|
34
|
+
The driver has a dependency on unmaintained dropbox_api gem with it's [own
|
|
35
|
+
dependency on old unmaintained `oauth2` 1.x](https://github.com/Jesus/dropbox_api/issues/96), so requires some opt-in setup and configuration. https://github.com/samvera/browse-everything/pull/448
|
|
36
|
+
|
|
37
|
+
* Add `dropbox_api, '>= 0.1.20'` to your Gemfile.
|
|
38
|
+
* Add `require 'browse_everything/driver/dropbox'` to a startup file, eg
|
|
39
|
+
`config/application.rb`.
|
|
40
|
+
|
|
41
|
+
### Box.com
|
|
42
|
+
|
|
43
|
+
The driver uses unmaintained [ruby-box](https://github.com/attachmentsme/ruby-box)
|
|
44
|
+
gem, which should probably be replaced with [boxr](https://github.com/cburnette/boxr).
|
|
45
|
+
See unfinished work at https://github.com/samvera/browse-everything/pull/185
|
|
46
|
+
|
|
47
|
+
* Add `ruby-box` to your Gemfile.
|
|
48
|
+
* Add `require 'browse_everything/driver/box'` to a startup file, eg
|
|
49
|
+
`config/application.rb`.
|
|
50
|
+
|
|
51
|
+
|
|
27
52
|
## Technical Debt/Legacy warning
|
|
28
53
|
|
|
29
54
|
This project has been receiving very limited maintenance for at least 2-4 years
|
|
@@ -323,12 +323,7 @@ $(function () {
|
|
|
323
323
|
|
|
324
324
|
$(document).on('click', 'button.ev-submit', function (event) {
|
|
325
325
|
event.preventDefault();
|
|
326
|
-
|
|
327
|
-
// button widget owns $.fn.button instead, it throws on the call and the
|
|
328
|
-
// selection is never submitted. startWait() disables the button either way.
|
|
329
|
-
if ($.fn.button && $.fn.button.Constructor) {
|
|
330
|
-
$(this).button('loading');
|
|
331
|
-
}
|
|
326
|
+
$(this).button('loading');
|
|
332
327
|
startWait();
|
|
333
328
|
$('form.ev-submit-form').append(Array.from(selected_files.values()));
|
|
334
329
|
var main_form = $(this).closest('form');
|
data/browse-everything.gemspec
CHANGED
|
@@ -20,12 +20,9 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
|
|
21
21
|
spec.add_dependency 'addressable', '~> 2.5'
|
|
22
22
|
spec.add_dependency 'aws-sdk-s3'
|
|
23
|
-
spec.add_dependency 'dropbox_api', '>= 0.1.20'
|
|
24
23
|
spec.add_dependency 'google-apis-drive_v3'
|
|
25
24
|
spec.add_dependency 'googleauth', '>= 0.6.6', '< 2.0'
|
|
26
25
|
spec.add_dependency 'rails', '>= 4.2', '< 8.1'
|
|
27
|
-
spec.add_dependency 'ruby-box'
|
|
28
|
-
spec.add_dependency 'signet', '~> 0.8'
|
|
29
26
|
spec.add_dependency 'faraday', "~> 2.0"
|
|
30
27
|
|
|
31
28
|
# Development dependencies include dependencies necessary for running
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'ruby-box'
|
|
4
3
|
require_relative 'authentication_factory'
|
|
5
4
|
|
|
5
|
+
begin
|
|
6
|
+
gem 'ruby-box'
|
|
7
|
+
rescue Gem::LoadError => e
|
|
8
|
+
new_raise = Gem::LoadError.new("Loading BrowseEverything::Driver:Box requires the availability of gem ruby-box #{e.requirement}, please add it to your Gemfile")
|
|
9
|
+
new_raise.requirement = e.requirement
|
|
10
|
+
raise new_raise, cause: nil # cause is confusing and unneeded here.
|
|
11
|
+
end
|
|
12
|
+
|
|
6
13
|
module BrowseEverything
|
|
7
14
|
module Driver
|
|
8
15
|
# Driver for accessing the Box API (https://www.box.com/home)
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'tmpdir'
|
|
4
|
-
require 'dropbox_api'
|
|
5
4
|
require_relative 'authentication_factory'
|
|
6
5
|
|
|
6
|
+
# We have an unspecified "optional" dependency, not great but it's what we got
|
|
7
|
+
begin
|
|
8
|
+
gem 'dropbox_api', '>= 0.1.20'
|
|
9
|
+
rescue Gem::LoadError => e
|
|
10
|
+
new_raise = Gem::LoadError.new("Loading BrowseEverything::Driver:Dropbox requires the availability of gem dropbox_api '#{e.requirement}', please add it to your Gemfile")
|
|
11
|
+
new_raise.requirement = e.requirement
|
|
12
|
+
raise new_raise, cause: nil # cause is confusing and unneeded here.
|
|
13
|
+
end
|
|
14
|
+
|
|
7
15
|
module BrowseEverything
|
|
8
16
|
module Driver
|
|
9
17
|
class Dropbox < Base
|
|
@@ -55,19 +55,17 @@ module BrowseEverything
|
|
|
55
55
|
def link_for(path)
|
|
56
56
|
obj = bucket.object(full_path(path))
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
extras = {
|
|
59
|
+
file_name: File.basename(path),
|
|
60
|
+
expires: (config[:expires_in] if config[:response_type] == :signed_url)
|
|
61
|
+
}.compact
|
|
62
|
+
|
|
63
|
+
url = case config[:response_type].to_sym
|
|
60
64
|
when :signed_url then obj.presigned_url(:get, expires_in: config[:expires_in])
|
|
61
65
|
when :public_url then obj.public_url
|
|
62
66
|
when :s3_uri then "s3://#{obj.bucket_name}/#{obj.key}"
|
|
63
67
|
end
|
|
64
68
|
|
|
65
|
-
extras = {
|
|
66
|
-
file_name: File.basename(path),
|
|
67
|
-
file_size: object_size(obj),
|
|
68
|
-
expires: (signed_url_expiry(url) if response_type == :signed_url)
|
|
69
|
-
}.compact
|
|
70
|
-
|
|
71
69
|
[url, extras]
|
|
72
70
|
end
|
|
73
71
|
|
|
@@ -81,26 +79,6 @@ module BrowseEverything
|
|
|
81
79
|
|
|
82
80
|
private
|
|
83
81
|
|
|
84
|
-
# The size is a convenience for consumers, so credentials that can list
|
|
85
|
-
# but not read an object (enough for an :s3_uri link) leave it out
|
|
86
|
-
# rather than fail the link.
|
|
87
|
-
def object_size(obj)
|
|
88
|
-
obj.content_length
|
|
89
|
-
rescue Aws::S3::Errors::ServiceError, Seahorse::Client::NetworkingError
|
|
90
|
-
nil
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Retriever#retrieve parses `expires` as a time, so send when the link
|
|
94
|
-
# expires, as the Box and Google Drive drivers do. It is read from the
|
|
95
|
-
# signed URL itself because the SDK can sign for less than expires_in,
|
|
96
|
-
# for example when the signing credentials are temporary.
|
|
97
|
-
def signed_url_expiry(url)
|
|
98
|
-
params = Rack::Utils.parse_query(URI(url).query)
|
|
99
|
-
return unless params['X-Amz-Date'] && params['X-Amz-Expires']
|
|
100
|
-
|
|
101
|
-
Time.strptime(params['X-Amz-Date'], '%Y%m%dT%H%M%S%z') + params['X-Amz-Expires'].to_i
|
|
102
|
-
end
|
|
103
|
-
|
|
104
82
|
def strip(path)
|
|
105
83
|
path.sub %r{^/?(.+?)/?$}, '\1'
|
|
106
84
|
end
|
data/lib/browse_everything.rb
CHANGED
|
@@ -12,11 +12,13 @@ module BrowseEverything
|
|
|
12
12
|
module Driver
|
|
13
13
|
autoload :Base, 'browse_everything/driver/base'
|
|
14
14
|
autoload :FileSystem, 'browse_everything/driver/file_system'
|
|
15
|
-
autoload :Dropbox, 'browse_everything/driver/dropbox'
|
|
16
|
-
autoload :Box, 'browse_everything/driver/box'
|
|
17
15
|
autoload :GoogleDrive, 'browse_everything/driver/google_drive'
|
|
18
16
|
autoload :S3, 'browse_everything/driver/s3'
|
|
19
17
|
|
|
18
|
+
# Intentionally require explicit require, as it has a non-declared dependency
|
|
19
|
+
# autoload :Dropbox, 'browse_everything/driver/dropbox'
|
|
20
|
+
# autoload :Box, 'browse_everything/driver/box'
|
|
21
|
+
|
|
20
22
|
# Access the sorter set for the base driver class
|
|
21
23
|
# @return [Proc]
|
|
22
24
|
def sorter
|
|
@@ -2,16 +2,10 @@
|
|
|
2
2
|
# To make browse-everything aware of a provider, uncomment the info for that provider and add your API key information.
|
|
3
3
|
# The file_system provider can be a path to any directory on the server where your application is running.
|
|
4
4
|
#
|
|
5
|
-
# dropbox:
|
|
6
|
-
# client_id: YOUR_DROPBOX_APP_KEY
|
|
7
|
-
# client_secret: YOUR_DROPBOX_APP_SECRET
|
|
8
|
-
# download_directory: tmp/
|
|
9
|
-
# box:
|
|
10
|
-
# client_id: YOUR_BOX_CLIENT_ID
|
|
11
|
-
# client_secret: YOUR_BOX_CLIENT_SECRET
|
|
12
5
|
# google_drive:
|
|
13
6
|
# client_id: YOUR_GOOGLE_API_CLIENT_ID
|
|
14
7
|
# client_secret: YOUR_GOOGLE_API_CLIENT_SECRET
|
|
8
|
+
#
|
|
15
9
|
# s3:
|
|
16
10
|
# bucket: YOUR_AWS_S3_BUCKET
|
|
17
11
|
# response_type: signed_url # set to :public_url for public urls or :s3_uri for an s3://BUCKET/KEY uri
|
|
@@ -20,3 +14,22 @@
|
|
|
20
14
|
# app_secret: YOUR_AWS_S3_SECRET # explicitly here, or left out to use system-configured
|
|
21
15
|
# region: YOUR_AWS_S3_REGION # defaults.
|
|
22
16
|
# See https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/
|
|
17
|
+
#
|
|
18
|
+
# file_system:
|
|
19
|
+
# allow_relative_home: true
|
|
20
|
+
# home: ./browseable_files
|
|
21
|
+
#
|
|
22
|
+
# # Note: dropbox requires manual addition of `dropbox_api` gem to Gemfile, and
|
|
23
|
+
# # `require 'browse_everything/driver/dropbox'` in a startup file.
|
|
24
|
+
#
|
|
25
|
+
# dropbox:
|
|
26
|
+
# client_id: YOUR_DROPBOX_APP_KEY
|
|
27
|
+
# client_secret: YOUR_DROPBOX_APP_SECRET
|
|
28
|
+
# download_directory: tmp/
|
|
29
|
+
#
|
|
30
|
+
# # Note: box requires addition of `ruby-box` to Gemfile, and
|
|
31
|
+
# # `require 'browse_everything/driver/box'` in a startup file.
|
|
32
|
+
#
|
|
33
|
+
# box:
|
|
34
|
+
# client_id: YOUR_BOX_CLIENT_ID
|
|
35
|
+
# client_secret: YOUR_BOX_CLIENT_SECRET
|
|
@@ -4,7 +4,7 @@ include BrowserConfigHelper
|
|
|
4
4
|
|
|
5
5
|
describe BrowseEverything::Browser do
|
|
6
6
|
let(:file_config) do
|
|
7
|
-
"file_system:\n home: '/file/config/home'\
|
|
7
|
+
"file_system:\n home: '/file/config/home'\ngoogle_drive:\n client_id: 'GoogleDriveId'\n client_secret: 'GoogleDriveClientSecret'\n download_directory: 'tmp/'"
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
let(:global_config) do
|
|
@@ -12,7 +12,7 @@ describe BrowseEverything::Browser do
|
|
|
12
12
|
file_system: {
|
|
13
13
|
home: '/global/config/home'
|
|
14
14
|
},
|
|
15
|
-
|
|
15
|
+
google_drive: {
|
|
16
16
|
client_id: 'DropboxId',
|
|
17
17
|
client_secret: 'DropboxClientSecret',
|
|
18
18
|
download_directory: 'tmp/'
|
|
@@ -25,9 +25,9 @@ describe BrowseEverything::Browser do
|
|
|
25
25
|
file_system: {
|
|
26
26
|
home: '/local/config/home'
|
|
27
27
|
},
|
|
28
|
-
|
|
29
|
-
client_id: '
|
|
30
|
-
client_secret: '
|
|
28
|
+
google_drive: {
|
|
29
|
+
client_id: 'GoogleDriveId',
|
|
30
|
+
client_secret: 'GoogleDriveClientSecret',
|
|
31
31
|
download_directory: 'tmp/'
|
|
32
32
|
},
|
|
33
33
|
url_options: url_options
|
|
@@ -43,9 +43,9 @@ describe BrowseEverything::Browser do
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
it 'has 2 providers' do
|
|
46
|
-
expect(browser.providers.keys).to eq(%w[file_system
|
|
46
|
+
expect(browser.providers.keys).to eq(%w[file_system google_drive])
|
|
47
47
|
expect(browser.providers[:file_system]).to be_a BrowseEverything::Driver::FileSystem
|
|
48
|
-
expect(browser.providers[:
|
|
48
|
+
expect(browser.providers[:google_drive]).to be_a BrowseEverything::Driver::GoogleDrive
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
it 'uses the file configuration' do
|
|
@@ -60,9 +60,9 @@ describe BrowseEverything::Browser do
|
|
|
60
60
|
before { BrowseEverything.configure(global_config) }
|
|
61
61
|
|
|
62
62
|
it 'has 2 providers' do
|
|
63
|
-
expect(browser.providers.keys).to eq(%w[file_system
|
|
63
|
+
expect(browser.providers.keys).to eq(%w[file_system google_drive])
|
|
64
64
|
expect(browser.providers[:file_system]).to be_a BrowseEverything::Driver::FileSystem
|
|
65
|
-
expect(browser.providers[:
|
|
65
|
+
expect(browser.providers[:google_drive]).to be_a BrowseEverything::Driver::GoogleDrive
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
it 'uses the global configuration' do
|
|
@@ -75,9 +75,9 @@ describe BrowseEverything::Browser do
|
|
|
75
75
|
let(:browser) { described_class.new(local_config) }
|
|
76
76
|
|
|
77
77
|
it 'has 2 providers' do
|
|
78
|
-
expect(browser.providers.keys).to eq(%w[file_system
|
|
78
|
+
expect(browser.providers.keys).to eq(%w[file_system google_drive])
|
|
79
79
|
expect(browser.providers[:file_system]).to be_a BrowseEverything::Driver::FileSystem
|
|
80
|
-
expect(browser.providers[:
|
|
80
|
+
expect(browser.providers[:google_drive]).to be_a BrowseEverything::Driver::GoogleDrive
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
it 'uses the local configuration' do
|
|
@@ -134,68 +134,28 @@ describe BrowseEverything::Driver::S3 do
|
|
|
134
134
|
context 'when retrieving the link for an asset' do
|
|
135
135
|
subject { contents[2] }
|
|
136
136
|
|
|
137
|
-
let(:signed_at) { Time.now.utc.change(usec: 0) }
|
|
138
|
-
let(:presigned_url) do
|
|
139
|
-
"https://s3.amazonaws.com/presigned_url?X-Amz-Date=#{signed_at.strftime('%Y%m%dT%H%M%SZ')}&X-Amz-Expires=3600"
|
|
140
|
-
end
|
|
141
|
-
|
|
142
137
|
before do
|
|
143
138
|
object = instance_double(Aws::S3::Object)
|
|
144
|
-
allow(object).to receive(:presigned_url).and_return(presigned_url)
|
|
139
|
+
allow(object).to receive(:presigned_url).and_return('https://s3.amazonaws.com/presigned_url')
|
|
145
140
|
allow(object).to receive(:public_url).and_return('https://s3.amazonaws.com/public_url')
|
|
146
141
|
allow(object).to receive(:bucket_name).and_return('s3.bucket')
|
|
147
142
|
allow(object).to receive(:key).and_return('foo/quux.png')
|
|
148
|
-
allow(object).to receive(:content_length).and_return(1_511_860)
|
|
149
143
|
allow(provider.bucket).to receive(:object).and_return(object)
|
|
150
144
|
end
|
|
151
145
|
|
|
152
146
|
it ':signed_url' do
|
|
153
147
|
provider.config[:response_type] = :signed_url
|
|
154
|
-
expect(provider.link_for('foo/quux.png')).to eq [presigned_url, { file_name: 'quux.png',
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it ':signed_url reports the lifetime the URL was signed for, not expires_in' do
|
|
158
|
-
provider.config[:response_type] = :signed_url
|
|
159
|
-
provider.config[:expires_in] = 14400
|
|
160
|
-
expect(provider.link_for('foo/quux.png').last[:expires]).to eq signed_at + 3600
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it ':signed_url configured as a string still sends the expiry' do
|
|
164
|
-
provider.config[:response_type] = 'signed_url'
|
|
165
|
-
expect(provider.link_for('foo/quux.png').last[:expires]).to eq signed_at + 3600
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
[Aws::S3::Errors::Forbidden.new(nil, 'Forbidden'), Seahorse::Client::NetworkingError.new(Errno::ECONNRESET.new)].each do |error|
|
|
169
|
-
it "leaves out the size when reading it raises #{error.class}" do
|
|
170
|
-
provider.config[:response_type] = :s3_uri
|
|
171
|
-
allow(provider.bucket.object('foo/quux.png')).to receive(:content_length).and_raise(error)
|
|
172
|
-
expect(provider.link_for('foo/quux.png')).to eq ['s3://s3.bucket/foo/quux.png', { file_name: 'quux.png' }]
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it ':s3_uri keeps a key that is not a valid URI' do
|
|
177
|
-
provider.config[:response_type] = :s3_uri
|
|
178
|
-
allow(provider.bucket.object('foo/quux.png')).to receive(:key).and_return('foo/résumé file.pdf')
|
|
179
|
-
expect(provider.link_for('foo/quux.png').first).to eq 's3://s3.bucket/foo/résumé file.pdf'
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
it ':signed_url gives an expiry the retriever accepts' do
|
|
183
|
-
provider.config[:response_type] = :signed_url
|
|
184
|
-
url, extras = provider.link_for('foo/quux.png')
|
|
185
|
-
spec = { 'url' => url, 'expires' => extras[:expires].to_s, 'file_size' => extras[:file_size] }
|
|
186
|
-
retriever = BrowseEverything::Retriever.new
|
|
187
|
-
allow(retriever).to receive(:retrieve_http)
|
|
188
|
-
expect { retriever.retrieve(spec) }.not_to raise_error
|
|
148
|
+
expect(provider.link_for('foo/quux.png')).to eq ['https://s3.amazonaws.com/presigned_url', { file_name: 'quux.png', expires: 14400 }]
|
|
189
149
|
end
|
|
190
150
|
|
|
191
151
|
it ':public_url' do
|
|
192
152
|
provider.config[:response_type] = :public_url
|
|
193
|
-
expect(provider.link_for('foo/quux.png')).to eq ['https://s3.amazonaws.com/public_url', { file_name: 'quux.png'
|
|
153
|
+
expect(provider.link_for('foo/quux.png')).to eq ['https://s3.amazonaws.com/public_url', { file_name: 'quux.png' }]
|
|
194
154
|
end
|
|
195
155
|
|
|
196
156
|
it ':s3_uri' do
|
|
197
157
|
provider.config[:response_type] = :s3_uri
|
|
198
|
-
expect(provider.link_for('foo/quux.png')).to eq ['s3://s3.bucket/foo/quux.png', { file_name: 'quux.png'
|
|
158
|
+
expect(provider.link_for('foo/quux.png')).to eq ['s3://s3.bucket/foo/quux.png', { file_name: 'quux.png' }]
|
|
199
159
|
end
|
|
200
160
|
end
|
|
201
161
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: browse-everything
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0.alpha.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Carolyn Cole
|
|
@@ -42,20 +42,6 @@ dependencies:
|
|
|
42
42
|
- - ">="
|
|
43
43
|
- !ruby/object:Gem::Version
|
|
44
44
|
version: '0'
|
|
45
|
-
- !ruby/object:Gem::Dependency
|
|
46
|
-
name: dropbox_api
|
|
47
|
-
requirement: !ruby/object:Gem::Requirement
|
|
48
|
-
requirements:
|
|
49
|
-
- - ">="
|
|
50
|
-
- !ruby/object:Gem::Version
|
|
51
|
-
version: 0.1.20
|
|
52
|
-
type: :runtime
|
|
53
|
-
prerelease: false
|
|
54
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
55
|
-
requirements:
|
|
56
|
-
- - ">="
|
|
57
|
-
- !ruby/object:Gem::Version
|
|
58
|
-
version: 0.1.20
|
|
59
45
|
- !ruby/object:Gem::Dependency
|
|
60
46
|
name: google-apis-drive_v3
|
|
61
47
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -110,34 +96,6 @@ dependencies:
|
|
|
110
96
|
- - "<"
|
|
111
97
|
- !ruby/object:Gem::Version
|
|
112
98
|
version: '8.1'
|
|
113
|
-
- !ruby/object:Gem::Dependency
|
|
114
|
-
name: ruby-box
|
|
115
|
-
requirement: !ruby/object:Gem::Requirement
|
|
116
|
-
requirements:
|
|
117
|
-
- - ">="
|
|
118
|
-
- !ruby/object:Gem::Version
|
|
119
|
-
version: '0'
|
|
120
|
-
type: :runtime
|
|
121
|
-
prerelease: false
|
|
122
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
123
|
-
requirements:
|
|
124
|
-
- - ">="
|
|
125
|
-
- !ruby/object:Gem::Version
|
|
126
|
-
version: '0'
|
|
127
|
-
- !ruby/object:Gem::Dependency
|
|
128
|
-
name: signet
|
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
|
130
|
-
requirements:
|
|
131
|
-
- - "~>"
|
|
132
|
-
- !ruby/object:Gem::Version
|
|
133
|
-
version: '0.8'
|
|
134
|
-
type: :runtime
|
|
135
|
-
prerelease: false
|
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
-
requirements:
|
|
138
|
-
- - "~>"
|
|
139
|
-
- !ruby/object:Gem::Version
|
|
140
|
-
version: '0.8'
|
|
141
99
|
- !ruby/object:Gem::Dependency
|
|
142
100
|
name: faraday
|
|
143
101
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -629,7 +587,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
629
587
|
- !ruby/object:Gem::Version
|
|
630
588
|
version: '0'
|
|
631
589
|
requirements: []
|
|
632
|
-
rubygems_version:
|
|
590
|
+
rubygems_version: 3.7.1
|
|
633
591
|
specification_version: 4
|
|
634
592
|
summary: AJAX/Rails engine file browser for cloud storage services
|
|
635
593
|
test_files:
|