browse-everything 0.16.1 → 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +3 -0
- data/CODE_OF_CONDUCT.md +36 -0
- data/CONTRIBUTING.md +21 -19
- data/Gemfile +1 -0
- data/README.md +29 -9
- data/SUPPORT.md +5 -0
- data/app/controllers/browse_everything_controller.rb +7 -3
- data/app/views/browse_everything/_files.html.erb +14 -6
- data/app/views/browse_everything/index.html.erb +7 -1
- data/browse-everything.gemspec +5 -5
- data/lib/browse_everything/driver/base.rb +1 -1
- data/lib/browse_everything/driver/box.rb +4 -14
- data/lib/browse_everything/driver/dropbox.rb +34 -11
- data/lib/browse_everything/driver/google_drive.rb +2 -2
- data/lib/browse_everything/driver/s3.rb +8 -14
- data/lib/browse_everything/retriever.rb +4 -5
- data/lib/browse_everything/version.rb +1 -1
- data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +2 -2
- data/spec/controllers/browse_everything_controller_spec.rb +8 -1
- data/spec/lib/browse_everything/driver/box_spec.rb +114 -34
- data/spec/lib/browse_everything/driver/dropbox_spec.rb +53 -5
- data/spec/lib/browse_everything/driver/google_drive_spec.rb +41 -4
- data/spec/lib/browse_everything/driver/s3_spec.rb +27 -18
- data/spec/lib/browse_everything/retriever_spec.rb +65 -2
- data/spec/spec_helper.rb +4 -9
- data/spec/support/capybara.rb +14 -10
- metadata +31 -37
- data/spec/fixtures/vcr_cassettes/box.yml +0 -498
- data/spec/fixtures/vcr_cassettes/dropbox.yml +0 -282
- data/spec/fixtures/vcr_cassettes/google_drive.yml +0 -331
- data/spec/fixtures/vcr_cassettes/retriever.yml +0 -170
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
include BrowserConfigHelper
|
4
4
|
|
5
|
-
describe BrowseEverything::Driver::GoogleDrive
|
5
|
+
describe BrowseEverything::Driver::GoogleDrive do
|
6
6
|
let(:browser) { BrowseEverything::Browser.new(url_options) }
|
7
7
|
let(:provider) { browser.providers['google_drive'] }
|
8
8
|
let(:provider_yml) do
|
@@ -11,9 +11,27 @@ describe BrowseEverything::Driver::GoogleDrive, vcr: { cassette_name: 'google_dr
|
|
11
11
|
url_options: { port: '3000', protocol: 'http://', host: 'example.com' }
|
12
12
|
}
|
13
13
|
end
|
14
|
+
let(:oauth_response_body) do
|
15
|
+
'{
|
16
|
+
"access_token": "access-token",
|
17
|
+
"token_type": "Bearer",
|
18
|
+
"expires_in": 3600,
|
19
|
+
"refresh_token": "refresh-token"
|
20
|
+
}'
|
21
|
+
end
|
14
22
|
|
15
23
|
before do
|
16
24
|
stub_configuration
|
25
|
+
|
26
|
+
stub_request(
|
27
|
+
:post, 'https://oauth2.googleapis.com/token'
|
28
|
+
).to_return(
|
29
|
+
body: oauth_response_body,
|
30
|
+
status: 200,
|
31
|
+
headers: {
|
32
|
+
'Content-Type' => 'application/json; charset=UTF-8'
|
33
|
+
}
|
34
|
+
)
|
17
35
|
end
|
18
36
|
|
19
37
|
after do
|
@@ -30,11 +48,11 @@ describe BrowseEverything::Driver::GoogleDrive, vcr: { cassette_name: 'google_dr
|
|
30
48
|
|
31
49
|
describe '#validate_config' do
|
32
50
|
it 'raises and error with an incomplete configuration' do
|
33
|
-
expect {
|
51
|
+
expect { described_class.new({}) }.to raise_error(BrowseEverything::InitializationError)
|
34
52
|
end
|
35
53
|
|
36
54
|
it 'raises and error with a configuration without a client secret' do
|
37
|
-
expect {
|
55
|
+
expect { described_class.new(client_id: 'test-client-id') }.to raise_error(BrowseEverything::InitializationError)
|
38
56
|
end
|
39
57
|
end
|
40
58
|
|
@@ -69,7 +87,7 @@ describe BrowseEverything::Driver::GoogleDrive, vcr: { cassette_name: 'google_dr
|
|
69
87
|
let(:driver) { described_class.new(provider_yml) }
|
70
88
|
|
71
89
|
before do
|
72
|
-
driver.connect({ code: 'code' }, {})
|
90
|
+
driver.connect({ code: 'code' }, {}, nil)
|
73
91
|
end
|
74
92
|
|
75
93
|
describe '#authorized?' do
|
@@ -139,6 +157,25 @@ describe BrowseEverything::Driver::GoogleDrive, vcr: { cassette_name: 'google_dr
|
|
139
157
|
|
140
158
|
describe '#link_for' do
|
141
159
|
subject(:link) { driver.link_for('asset-id2') }
|
160
|
+
let(:file_response_body) do
|
161
|
+
'{
|
162
|
+
"id": "asset-id2",
|
163
|
+
"name": "asset-name2.pdf",
|
164
|
+
"webContentLink": "https://drive.google.com/uc?id=id&export=download"
|
165
|
+
}'
|
166
|
+
end
|
167
|
+
|
168
|
+
before do
|
169
|
+
stub_request(
|
170
|
+
:get, "https://www.googleapis.com/drive/v3/files/asset-id2?fields=id,%20name,%20size"
|
171
|
+
).to_return(
|
172
|
+
body: file_response_body,
|
173
|
+
status: 200,
|
174
|
+
headers: {
|
175
|
+
'Content-Type' => 'application/json'
|
176
|
+
}
|
177
|
+
)
|
178
|
+
end
|
142
179
|
|
143
180
|
it 'generates the link for a Google Drive asset' do
|
144
181
|
expect(link).to be_an Array
|
@@ -22,30 +22,46 @@ describe BrowseEverything::Driver::S3 do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe 'configuration' do
|
25
|
-
it '
|
25
|
+
it 'rejects an empty config.' do
|
26
26
|
expect { described_class.new({}) }.to raise_error(BrowseEverything::InitializationError)
|
27
27
|
end
|
28
28
|
|
29
|
-
it 'rejects
|
29
|
+
it 'rejects a missing region' do
|
30
30
|
expect { described_class.new(bucket: 'bucket', app_key: 'APP_KEY') }.to raise_error(BrowseEverything::InitializationError)
|
31
31
|
end
|
32
32
|
|
33
|
+
it 'rejects app_key if app_secret is missing' do
|
34
|
+
expect { described_class.new(bucket: 'bucket', region: 'us-east-1', app_key: 'APP_KEY') }.to raise_error(BrowseEverything::InitializationError)
|
35
|
+
end
|
36
|
+
|
33
37
|
it 'rejects app_secret if app_key is missing' do
|
34
|
-
expect { described_class.new(bucket: 'bucket', app_secret: 'APP_SECRET') }.to raise_error(BrowseEverything::InitializationError)
|
38
|
+
expect { described_class.new(bucket: 'bucket', region: 'us-east-1', app_secret: 'APP_SECRET') }.to raise_error(BrowseEverything::InitializationError)
|
35
39
|
end
|
36
40
|
|
37
41
|
it 'accepts app_key and app_secret together' do
|
38
|
-
expect { described_class.new(bucket: 'bucket', app_key: 'APP_KEY', app_secret: 'APP_SECRET') }.not_to raise_error
|
42
|
+
expect { described_class.new(bucket: 'bucket', region: 'us-east-1', app_key: 'APP_KEY', app_secret: 'APP_SECRET') }.not_to raise_error
|
39
43
|
end
|
40
44
|
|
41
45
|
it 'rejects an invalid response type' do
|
42
|
-
expect { described_class.new(bucket: 'bucket', response_type: :foo) }.to raise_error(BrowseEverything::InitializationError)
|
46
|
+
expect { described_class.new(bucket: 'bucket', region: 'us-east-1', response_type: :foo) }.to raise_error(BrowseEverything::InitializationError)
|
43
47
|
end
|
44
48
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
context 'deprecating :signed_url' do
|
50
|
+
it 'sets the value of :signed_url to :response_type' do
|
51
|
+
driver = described_class.new(bucket: 'bucket', region: 'us-east-1', signed_url: false)
|
52
|
+
expect(driver.config).not_to have_key(:signed_url)
|
53
|
+
expect(driver.config[:response_type]).to eq(:public_url)
|
54
|
+
|
55
|
+
signed_driver = described_class.new(bucket: 'bucket', region: 'us-east-1', signed_url: true)
|
56
|
+
expect(signed_driver.config).not_to have_key(:signed_url)
|
57
|
+
expect(signed_driver.config[:response_type]).to eq(:signed_url)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'sets the default value of :response_type to :signed_url' do
|
61
|
+
driver = described_class.new(bucket: 'bucket', region: 'us-east-1')
|
62
|
+
expect(driver.config).not_to have_key(:signed_url)
|
63
|
+
expect(driver.config[:response_type]).to eq(:signed_url)
|
64
|
+
end
|
49
65
|
end
|
50
66
|
end
|
51
67
|
|
@@ -95,15 +111,8 @@ describe BrowseEverything::Driver::S3 do
|
|
95
111
|
|
96
112
|
let(:contents) { provider.contents('foo/') }
|
97
113
|
|
98
|
-
context 'with a single directory' do
|
99
|
-
subject { contents[0] }
|
100
|
-
|
101
|
-
its(:name) { is_expected.to eq('..') }
|
102
|
-
specify { is_expected.to be_container }
|
103
|
-
end
|
104
|
-
|
105
114
|
context 'with a JPEG asset' do
|
106
|
-
subject { contents[
|
115
|
+
subject { contents[0] }
|
107
116
|
|
108
117
|
its(:name) { is_expected.to eq('baz.jpg') }
|
109
118
|
its(:location) { is_expected.to eq('s3:foo/baz.jpg') }
|
@@ -113,7 +122,7 @@ describe BrowseEverything::Driver::S3 do
|
|
113
122
|
end
|
114
123
|
|
115
124
|
context 'with a PNG asset' do
|
116
|
-
subject { contents[
|
125
|
+
subject { contents[1] }
|
117
126
|
|
118
127
|
its(:name) { is_expected.to eq('quux.png') }
|
119
128
|
its(:location) { is_expected.to eq('s3:foo/quux.png') }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
describe BrowseEverything::Retriever
|
3
|
+
describe BrowseEverything::Retriever do
|
4
4
|
let(:retriever) { described_class.new }
|
5
5
|
let(:datafile) { File.expand_path('../../fixtures/file_system/file_1.pdf', __dir__) }
|
6
6
|
let(:datafile_with_spaces) { File.expand_path('../../fixtures/file_system/file 1.pdf', __dir__) }
|
@@ -12,7 +12,7 @@ describe BrowseEverything::Retriever, vcr: { cassette_name: 'retriever', record:
|
|
12
12
|
subject(:computed_file_size) { retriever.file_size(options) }
|
13
13
|
|
14
14
|
let(:url) { URI.parse("file://#{datafile}") }
|
15
|
-
let(:headers) {
|
15
|
+
let(:headers) { {} }
|
16
16
|
let(:file_size) { 0 }
|
17
17
|
let(:options) do
|
18
18
|
{
|
@@ -31,6 +31,25 @@ describe BrowseEverything::Retriever, vcr: { cassette_name: 'retriever', record:
|
|
31
31
|
context 'when retrieving a resource from a cloud storage provider' do
|
32
32
|
let(:url) { URI.parse('https://drive.google.com/uc?id=id&export=download') }
|
33
33
|
|
34
|
+
before do
|
35
|
+
stub_request(
|
36
|
+
:head, "https://drive.google.com/uc?export=download&id=id"
|
37
|
+
).and_return(
|
38
|
+
headers: {
|
39
|
+
'Content-Length' => '1234'
|
40
|
+
}
|
41
|
+
)
|
42
|
+
|
43
|
+
stub_request(
|
44
|
+
:get, "https://drive.google.com/uc?export=download&id=id"
|
45
|
+
).and_return(
|
46
|
+
headers: {
|
47
|
+
'Content-Length' => '1234'
|
48
|
+
},
|
49
|
+
body: 'content'
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
34
53
|
it 'calculates or retrieves the size of a file' do
|
35
54
|
retriever.retrieve(options) do |_chunk, _retrieved, total|
|
36
55
|
expect(total).to eq 1234
|
@@ -80,6 +99,17 @@ describe BrowseEverything::Retriever, vcr: { cassette_name: 'retriever', record:
|
|
80
99
|
end
|
81
100
|
|
82
101
|
context 'when retrieving data using chunked-encoded streams' do
|
102
|
+
before do
|
103
|
+
stub_request(
|
104
|
+
:get, "https://retrieve.cloud.example.com/some/dir/file.pdf"
|
105
|
+
).and_return(
|
106
|
+
headers: {
|
107
|
+
'Content-Type' => 'text/plain'
|
108
|
+
},
|
109
|
+
body: data
|
110
|
+
)
|
111
|
+
end
|
112
|
+
|
83
113
|
it 'content' do
|
84
114
|
content = +''
|
85
115
|
retriever.retrieve(spec['0']) { |chunk, _retrieved, _total| content << chunk }
|
@@ -92,6 +122,17 @@ describe BrowseEverything::Retriever, vcr: { cassette_name: 'retriever', record:
|
|
92
122
|
end
|
93
123
|
|
94
124
|
context 'when downloading content' do
|
125
|
+
before do
|
126
|
+
stub_request(
|
127
|
+
:get, "https://retrieve.cloud.example.com/some/dir/file.pdf"
|
128
|
+
).and_return(
|
129
|
+
headers: {
|
130
|
+
'Content-Type' => 'text/plain'
|
131
|
+
},
|
132
|
+
body: data
|
133
|
+
)
|
134
|
+
end
|
135
|
+
|
95
136
|
it 'content' do
|
96
137
|
file = retriever.download(spec['0'])
|
97
138
|
expect(File.open(file, 'rb', &:read)).to eq(data)
|
@@ -115,6 +156,13 @@ describe BrowseEverything::Retriever, vcr: { cassette_name: 'retriever', record:
|
|
115
156
|
}
|
116
157
|
end
|
117
158
|
let(:download_options) { spec['0'] }
|
159
|
+
before do
|
160
|
+
stub_request(
|
161
|
+
:get, "https://retrieve.cloud.example.com/some/dir/file_error.pdf"
|
162
|
+
).and_return(
|
163
|
+
status: 403
|
164
|
+
)
|
165
|
+
end
|
118
166
|
|
119
167
|
it 'raises an exception' do
|
120
168
|
expect { retriever.download(download_options) }.to raise_error(BrowseEverything::DownloadError, /BrowseEverything::Retriever: Failed to download/)
|
@@ -184,6 +232,14 @@ describe BrowseEverything::Retriever, vcr: { cassette_name: 'retriever', record:
|
|
184
232
|
|
185
233
|
context 'when can retrieve' do
|
186
234
|
let(:url) { 'https://retrieve.cloud.example.com/some/dir/can_retrieve.pdf' }
|
235
|
+
before do
|
236
|
+
stub_request(
|
237
|
+
:get, "https://retrieve.cloud.example.com/some/dir/can_retrieve.pdf"
|
238
|
+
).to_return(
|
239
|
+
status: 206,
|
240
|
+
body: '%'
|
241
|
+
)
|
242
|
+
end
|
187
243
|
|
188
244
|
it 'says it can' do
|
189
245
|
expect(described_class).to be_can_retrieve(url)
|
@@ -192,6 +248,13 @@ describe BrowseEverything::Retriever, vcr: { cassette_name: 'retriever', record:
|
|
192
248
|
|
193
249
|
context 'when cannot retrieve' do
|
194
250
|
let(:url) { 'https://retrieve.cloud.example.com/some/dir/cannot_retrieve.pdf' }
|
251
|
+
before do
|
252
|
+
stub_request(
|
253
|
+
:get, "https://retrieve.cloud.example.com/some/dir/cannot_retrieve.pdf"
|
254
|
+
).to_return(
|
255
|
+
status: 403
|
256
|
+
)
|
257
|
+
end
|
195
258
|
|
196
259
|
it 'says it cannot' do
|
197
260
|
expect(described_class).not_to be_can_retrieve(url)
|
data/spec/spec_helper.rb
CHANGED
@@ -36,19 +36,13 @@ require 'capybara/rspec'
|
|
36
36
|
require 'rspec'
|
37
37
|
require 'rspec/rails'
|
38
38
|
require 'rspec/its'
|
39
|
-
require 'vcr'
|
40
|
-
require 'webmock/rspec'
|
41
39
|
|
42
40
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
43
41
|
# in spec/support/ and its subdirectories.
|
44
42
|
Dir[Pathname.new(File.expand_path('support/**/*.rb', __dir__))].each { |f| require f }
|
45
43
|
|
46
|
-
|
47
|
-
|
48
|
-
c.hook_into :webmock
|
49
|
-
c.configure_rspec_metadata!
|
50
|
-
c.ignore_localhost = true
|
51
|
-
end
|
44
|
+
require 'webmock/rspec'
|
45
|
+
WebMock.disable_net_connect!(allow_localhost: true)
|
52
46
|
|
53
47
|
RSpec.configure do |config|
|
54
48
|
config.expect_with :rspec do |c|
|
@@ -85,7 +79,8 @@ module BrowserConfigHelper
|
|
85
79
|
's3' => {
|
86
80
|
app_key: 'S3AppKey',
|
87
81
|
app_secret: 'S3AppSecret',
|
88
|
-
bucket: 's3.bucket'
|
82
|
+
bucket: 's3.bucket',
|
83
|
+
region: 's3.region'
|
89
84
|
})
|
90
85
|
end
|
91
86
|
|
data/spec/support/capybara.rb
CHANGED
@@ -2,16 +2,20 @@
|
|
2
2
|
|
3
3
|
require 'selenium-webdriver'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
5
|
+
# Temporary pin until chromedriver-helper patched to deal with change in chromedriver versioning
|
6
|
+
# See https://github.com/flavorjones/chromedriver-helper/pull/63
|
7
|
+
# @note In January 2018, TravisCI disabled Chrome sandboxing in its Linux
|
8
|
+
# container build environments to mitigate Meltdown/Spectre
|
9
|
+
# vulnerabilities, at which point Hyrax could no longer use the
|
10
|
+
# Capybara-provided :selenium_chrome_headless driver (which does not
|
11
|
+
# include the `--no-sandbox` argument).
|
12
|
+
Capybara.register_driver :selenium_chrome_headless_sandboxless do |app|
|
13
|
+
browser_options = ::Selenium::WebDriver::Chrome::Options.new
|
14
|
+
browser_options.args << '--headless'
|
15
|
+
browser_options.args << '--disable-gpu'
|
16
|
+
browser_options.args << '--no-sandbox'
|
17
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
|
15
18
|
end
|
16
19
|
|
17
20
|
Capybara.default_max_wait_time = 5
|
21
|
+
Capybara.javascript_driver = :selenium_chrome_headless_sandboxless
|
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: 0.
|
4
|
+
version: 1.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carolyn Cole
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2018-
|
16
|
+
date: 2018-11-06 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: addressable
|
@@ -91,14 +91,14 @@ dependencies:
|
|
91
91
|
requirements:
|
92
92
|
- - "~>"
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: '0.
|
94
|
+
version: '0.23'
|
95
95
|
type: :runtime
|
96
96
|
prerelease: false
|
97
97
|
version_requirements: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
99
|
- - "~>"
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: '0.
|
101
|
+
version: '0.23'
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: google_drive
|
104
104
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,14 +119,14 @@ dependencies:
|
|
119
119
|
requirements:
|
120
120
|
- - '='
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: 0.6.
|
122
|
+
version: 0.6.6
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
126
126
|
requirements:
|
127
127
|
- - '='
|
128
128
|
- !ruby/object:Gem::Version
|
129
|
-
version: 0.6.
|
129
|
+
version: 0.6.6
|
130
130
|
- !ruby/object:Gem::Dependency
|
131
131
|
name: rails
|
132
132
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,14 +189,14 @@ dependencies:
|
|
189
189
|
requirements:
|
190
190
|
- - "~>"
|
191
191
|
- !ruby/object:Gem::Version
|
192
|
-
version: '0.
|
192
|
+
version: '0.19'
|
193
193
|
type: :runtime
|
194
194
|
prerelease: false
|
195
195
|
version_requirements: !ruby/object:Gem::Requirement
|
196
196
|
requirements:
|
197
197
|
- - "~>"
|
198
198
|
- !ruby/object:Gem::Version
|
199
|
-
version: '0.
|
199
|
+
version: '0.19'
|
200
200
|
- !ruby/object:Gem::Dependency
|
201
201
|
name: typhoeus
|
202
202
|
requirement: !ruby/object:Gem::Requirement
|
@@ -257,16 +257,16 @@ dependencies:
|
|
257
257
|
name: chromedriver-helper
|
258
258
|
requirement: !ruby/object:Gem::Requirement
|
259
259
|
requirements:
|
260
|
-
- -
|
260
|
+
- - '='
|
261
261
|
- !ruby/object:Gem::Version
|
262
|
-
version:
|
262
|
+
version: 1.2.0
|
263
263
|
type: :development
|
264
264
|
prerelease: false
|
265
265
|
version_requirements: !ruby/object:Gem::Requirement
|
266
266
|
requirements:
|
267
|
-
- -
|
267
|
+
- - '='
|
268
268
|
- !ruby/object:Gem::Version
|
269
|
-
version:
|
269
|
+
version: 1.2.0
|
270
270
|
- !ruby/object:Gem::Dependency
|
271
271
|
name: coveralls
|
272
272
|
requirement: !ruby/object:Gem::Requirement
|
@@ -323,6 +323,20 @@ dependencies:
|
|
323
323
|
- - "~>"
|
324
324
|
- !ruby/object:Gem::Version
|
325
325
|
version: '2.3'
|
326
|
+
- !ruby/object:Gem::Dependency
|
327
|
+
name: pry-byebug
|
328
|
+
requirement: !ruby/object:Gem::Requirement
|
329
|
+
requirements:
|
330
|
+
- - ">="
|
331
|
+
- !ruby/object:Gem::Version
|
332
|
+
version: '0'
|
333
|
+
type: :development
|
334
|
+
prerelease: false
|
335
|
+
version_requirements: !ruby/object:Gem::Requirement
|
336
|
+
requirements:
|
337
|
+
- - ">="
|
338
|
+
- !ruby/object:Gem::Version
|
339
|
+
version: '0'
|
326
340
|
- !ruby/object:Gem::Dependency
|
327
341
|
name: rails-controller-testing
|
328
342
|
requirement: !ruby/object:Gem::Requirement
|
@@ -449,20 +463,6 @@ dependencies:
|
|
449
463
|
- - ">="
|
450
464
|
- !ruby/object:Gem::Version
|
451
465
|
version: '0'
|
452
|
-
- !ruby/object:Gem::Dependency
|
453
|
-
name: vcr
|
454
|
-
requirement: !ruby/object:Gem::Requirement
|
455
|
-
requirements:
|
456
|
-
- - ">="
|
457
|
-
- !ruby/object:Gem::Version
|
458
|
-
version: '0'
|
459
|
-
type: :development
|
460
|
-
prerelease: false
|
461
|
-
version_requirements: !ruby/object:Gem::Requirement
|
462
|
-
requirements:
|
463
|
-
- - ">="
|
464
|
-
- !ruby/object:Gem::Version
|
465
|
-
version: '0'
|
466
466
|
- !ruby/object:Gem::Dependency
|
467
467
|
name: webmock
|
468
468
|
requirement: !ruby/object:Gem::Requirement
|
@@ -495,12 +495,14 @@ files:
|
|
495
495
|
- ".rubocop.yml"
|
496
496
|
- ".rubocop_todo.yml"
|
497
497
|
- ".travis.yml"
|
498
|
+
- CODE_OF_CONDUCT.md
|
498
499
|
- CONTRIBUTING.md
|
499
500
|
- Gemfile
|
500
501
|
- HISTORY.md
|
501
502
|
- LICENSE.txt
|
502
503
|
- README.md
|
503
504
|
- Rakefile
|
505
|
+
- SUPPORT.md
|
504
506
|
- app/assets/javascripts/browse_everything.js
|
505
507
|
- app/assets/javascripts/browse_everything/behavior.js.coffee
|
506
508
|
- app/assets/stylesheets/browse_everything.scss
|
@@ -552,10 +554,6 @@ files:
|
|
552
554
|
- spec/fixtures/file_system/dir_2/file_4.docx
|
553
555
|
- spec/fixtures/file_system/file 1.pdf
|
554
556
|
- spec/fixtures/file_system/file_1.pdf
|
555
|
-
- spec/fixtures/vcr_cassettes/box.yml
|
556
|
-
- spec/fixtures/vcr_cassettes/dropbox.yml
|
557
|
-
- spec/fixtures/vcr_cassettes/google_drive.yml
|
558
|
-
- spec/fixtures/vcr_cassettes/retriever.yml
|
559
557
|
- spec/helper/browse_everything_controller_helper_spec.rb
|
560
558
|
- spec/javascripts/behavior_spec.js
|
561
559
|
- spec/javascripts/helpers/jasmine-jquery.js
|
@@ -606,12 +604,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
606
604
|
version: '0'
|
607
605
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
608
606
|
requirements:
|
609
|
-
- - "
|
607
|
+
- - ">"
|
610
608
|
- !ruby/object:Gem::Version
|
611
|
-
version:
|
609
|
+
version: 1.3.1
|
612
610
|
requirements: []
|
613
611
|
rubyforge_project:
|
614
|
-
rubygems_version: 2.
|
612
|
+
rubygems_version: 2.6.14.1
|
615
613
|
signing_key:
|
616
614
|
specification_version: 4
|
617
615
|
summary: AJAX/Rails engine file browser for cloud storage services
|
@@ -625,10 +623,6 @@ test_files:
|
|
625
623
|
- spec/fixtures/file_system/dir_2/file_4.docx
|
626
624
|
- spec/fixtures/file_system/file 1.pdf
|
627
625
|
- spec/fixtures/file_system/file_1.pdf
|
628
|
-
- spec/fixtures/vcr_cassettes/box.yml
|
629
|
-
- spec/fixtures/vcr_cassettes/dropbox.yml
|
630
|
-
- spec/fixtures/vcr_cassettes/google_drive.yml
|
631
|
-
- spec/fixtures/vcr_cassettes/retriever.yml
|
632
626
|
- spec/helper/browse_everything_controller_helper_spec.rb
|
633
627
|
- spec/javascripts/behavior_spec.js
|
634
628
|
- spec/javascripts/helpers/jasmine-jquery.js
|