browse-everything 0.14.2 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +0 -19
- data/README.md +9 -9
- data/app/helpers/font_awesome_version_helper.rb +17 -0
- data/app/views/browse_everything/index.html.erb +24 -22
- data/browse-everything.gemspec +2 -3
- data/lib/browse_everything.rb +0 -1
- data/lib/browse_everything/driver/s3.rb +1 -1
- data/lib/browse_everything/version.rb +1 -1
- data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +0 -3
- data/spec/spec_helper.rb +0 -4
- data/spec/support/app/views/file_handler/main.html.erb +2 -2
- metadata +9 -26
- data/app/helpers/bootstrap_version_helper.rb +0 -33
- data/lib/browse_everything/driver/sky_drive.rb +0 -125
- data/spec/unit/sky_drive_spec.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 730808dd49026de8e75b8344369e54ccd437b397
|
4
|
+
data.tar.gz: fd60f9a6709d2dae71fedb6b6f1d5a62a0174219
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d5c2642e90c7dbd4babdaff36ea7408418813e00467c2a321abae41fb963bbec09aede9dfb111d7b082f7ed5781f63a81bf3f78b3088f2303ce1fe18c828347
|
7
|
+
data.tar.gz: 976c6e152a9712df3bf074a6a84df9a1d7321fe111386ed6f7c6235f8a5bde2056606b1e66ce8a5a6337dd59b16e1bc8e03301858c5124906f4388396947c919
|
data/.rubocop_todo.yml
CHANGED
@@ -64,12 +64,10 @@ Rails/OutputSafety:
|
|
64
64
|
Rails/TimeZone:
|
65
65
|
Exclude:
|
66
66
|
- 'lib/browse_everything/driver/google_drive.rb'
|
67
|
-
- 'lib/browse_everything/driver/sky_drive.rb'
|
68
67
|
- 'lib/browse_everything/retriever.rb'
|
69
68
|
- 'spec/unit/browse_everything_helper_spec.rb'
|
70
69
|
- 'spec/unit/file_entry_spec.rb'
|
71
70
|
- 'spec/unit/retriever_spec.rb'
|
72
|
-
- 'spec/unit/sky_drive_spec.rb'
|
73
71
|
- 'spec/views/browse_everything/_file.html.erb_spec.rb'
|
74
72
|
|
75
73
|
# Offense count: 3
|
@@ -96,7 +94,6 @@ Style/FileName:
|
|
96
94
|
Style/GuardClause:
|
97
95
|
Exclude:
|
98
96
|
- 'lib/browse_everything/driver/google_drive.rb'
|
99
|
-
- 'lib/browse_everything/driver/sky_drive.rb'
|
100
97
|
|
101
98
|
# Offense count: 1
|
102
99
|
Style/MultilineBlockChain:
|
@@ -109,22 +106,6 @@ Style/MultilineBlockLayout:
|
|
109
106
|
Exclude:
|
110
107
|
- 'spec/unit/dropbox_spec.rb'
|
111
108
|
|
112
|
-
# Offense count: 2
|
113
|
-
# Cop supports --auto-correct.
|
114
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
115
|
-
# SupportedStyles: symmetrical, new_line, same_line
|
116
|
-
Style/MultilineHashBraceLayout:
|
117
|
-
Exclude:
|
118
|
-
- 'spec/unit/sky_drive_spec.rb'
|
119
|
-
|
120
|
-
# Offense count: 4
|
121
|
-
# Cop supports --auto-correct.
|
122
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
123
|
-
# SupportedStyles: aligned, indented, indented_relative_to_receiver
|
124
|
-
Style/MultilineMethodCallIndentation:
|
125
|
-
Exclude:
|
126
|
-
- 'spec/unit/sky_drive_spec.rb'
|
127
|
-
|
128
109
|
# Offense count: 1
|
129
110
|
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
130
111
|
# NamePrefix: is_, has_, have_
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
[![Gem Version](https://badge.fury.io/rb/browse-everything.png)](http://badge.fury.io/rb/browse-everything)
|
2
|
-
[![Build Status](https://travis-ci.org/
|
3
|
-
[![Coverage Status](https://coveralls.io/repos/
|
2
|
+
[![Build Status](https://travis-ci.org/samvera/browse-everything.svg?branch=master)](https://travis-ci.org/samvera/browse-everything)
|
3
|
+
[![Coverage Status](https://coveralls.io/repos/samvera/browse-everything/badge.svg?branch=master&service=github)](https://coveralls.io/github/samvera/browse-everything?branch=master)
|
4
4
|
|
5
5
|
# BrowseEverything
|
6
6
|
|
7
7
|
This Gem allows your rails application to access user files from cloud storage.
|
8
8
|
Currently there are drivers implemented for [Dropbox](http://www.dropbox.com),
|
9
|
-
[
|
9
|
+
[Google Drive](http://drive.google.com),
|
10
10
|
[Box](http://www.box.com), [Amazon S3](https://aws.amazon.com/s3/),
|
11
11
|
and a server-side directory share.
|
12
12
|
|
@@ -39,7 +39,7 @@ After installing the gem, run the generator
|
|
39
39
|
|
40
40
|
This generator will set up the _config/browse_everything_providers.yml_ file and add the browse-everything engine to your application's routes.
|
41
41
|
|
42
|
-
If you prefer not to use the generator, or need info on how to set up providers in the browse_everything_providers.yml, use the info on [Configuring browse-everything](https://github.com/
|
42
|
+
If you prefer not to use the generator, or need info on how to set up providers in the browse_everything_providers.yml, use the info on [Configuring browse-everything](https://github.com/samvera/browse-everything/wiki/Configuring-browse-everything).
|
43
43
|
|
44
44
|
### Include the CSS and JavaScript
|
45
45
|
|
@@ -57,8 +57,8 @@ In `app/assets/javascripts/application.js` include jquery and the BrowseEverythi
|
|
57
57
|
|
58
58
|
### Adding Providers
|
59
59
|
In order to connect to a provider like [Dropbox](http://www.dropbox.com),
|
60
|
-
[
|
61
|
-
[Box](http://www.box.com), you must provide API keys in _config/browse_everything_providers.yml_. For info on how to edit this file, see [Configuring browse-everything](https://github.com/
|
60
|
+
[Google Drive](http://drive.google.com), or
|
61
|
+
[Box](http://www.box.com), you must provide API keys in _config/browse_everything_providers.yml_. For info on how to edit this file, see [Configuring browse-everything](https://github.com/samvera/browse-everything/wiki/Configuring-browse-everything)
|
62
62
|
|
63
63
|
### Views
|
64
64
|
|
@@ -103,7 +103,7 @@ $('#browse').browseEverything({
|
|
103
103
|
})
|
104
104
|
```
|
105
105
|
|
106
|
-
See [JavaScript Methods](https://github.com/
|
106
|
+
See [JavaScript Methods](https://github.com/samvera/browse-everything/wiki/JavaScript-Methods) for more info on using javascript to trigger browse-everything.
|
107
107
|
|
108
108
|
### The Results (Data Structure)
|
109
109
|
|
@@ -133,7 +133,7 @@ If you initialized browse-everything via JavaScript, the results data passed to
|
|
133
133
|
}
|
134
134
|
]
|
135
135
|
```
|
136
|
-
See [JavaScript Methods](https://github.com/
|
136
|
+
See [JavaScript Methods](https://github.com/samvera/browse-everything/wiki/JavaScript-Methods) for more info on using javascript to trigger browse-everything.
|
137
137
|
|
138
138
|
If you initialized browse-everything via data-attributes and set the _target_ option (via the _data-target_ attribute or via the _target_ option on the javascript method), the results data be written as hidden fields in the `<form>` you've specified as the target. When the user submits that form, the results will look like this:
|
139
139
|
```ruby
|
@@ -193,4 +193,4 @@ create a fully-functioning demo app in `spec/internal` (though you will have to
|
|
193
193
|
|
194
194
|
## Help
|
195
195
|
|
196
|
-
For help with
|
196
|
+
For help with Browse Everything, contact <samvera-tech@googlegroups.com>.
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module FontAwesomeVersionHelper
|
2
|
+
def font_awesome_four?
|
3
|
+
Bundler.environment.specs['font-awesome-rails'].first.version >= Gem::Version.new('4')
|
4
|
+
end
|
5
|
+
|
6
|
+
def fa3(if3)
|
7
|
+
fa3or4(if3, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
def fa4(if4)
|
11
|
+
fa3or4('', if4)
|
12
|
+
end
|
13
|
+
|
14
|
+
def fa3or4(if3, if4)
|
15
|
+
font_awesome_four? ? if4 : if3
|
16
|
+
end
|
17
|
+
end
|
@@ -1,26 +1,28 @@
|
|
1
|
-
|
2
|
-
<div class="modal-
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
<div class="modal-body ev-body" tabindex="-1">
|
9
|
-
<div class="loading-progress" aria-live="assertive">
|
10
|
-
<span class="loading-text">Loading...</span>
|
1
|
+
<div class="modal-dialog">
|
2
|
+
<div class="modal-content">
|
3
|
+
<div class="modal-header">
|
4
|
+
<h4 class="sr-only" id="beModalLabel">Select a provider in the list to browse your files.</h4>
|
5
|
+
<div class="ev-providers">
|
6
|
+
<%= render :partial => 'providers' %>
|
7
|
+
</div>
|
11
8
|
</div>
|
12
|
-
<div class="
|
13
|
-
<div class="
|
14
|
-
|
9
|
+
<div class="modal-body ev-body" tabindex="-1">
|
10
|
+
<div class="loading-progress" aria-live="assertive">
|
11
|
+
<span class="loading-text">Loading...</span>
|
12
|
+
</div>
|
13
|
+
<div class="ev-browser row" aria-live="polite">
|
14
|
+
<div class="<%=fa3or4('fa3','fa4')%> col-xs-12 ev-files list">
|
15
|
+
<%= render :partial => 'files' if provider.present? %>
|
16
|
+
</div>
|
15
17
|
</div>
|
16
18
|
</div>
|
19
|
+
<div class="modal-footer">
|
20
|
+
<span class="pull-left ev-status">0 files selected</span>
|
21
|
+
<%= form_tag '#', :class => "ev-submit-form form-horizontal", :data => { :resolver => browse_everything_engine.resolver_path } do %>
|
22
|
+
<input type="hidden" name="context" value=""/>
|
23
|
+
<button class="ev-cancel btn btn-danger"><%= t('browse_everything.modal_form.cancel')%></button>
|
24
|
+
<button class="ev-submit btn btn-primary" data-loading-text="Loading..."><%= t('browse_everything.modal_form.submit')%></button>
|
25
|
+
<% end %>
|
26
|
+
</div>
|
17
27
|
</div>
|
18
|
-
|
19
|
-
<span class="pull-left ev-status">0 files selected</span>
|
20
|
-
<%= form_tag '#', :class => "ev-submit-form form-horizontal", :data => { :resolver => browse_everything_engine.resolver_path } do %>
|
21
|
-
<input type="hidden" name="context" value=""/>
|
22
|
-
<button class="ev-cancel btn btn-danger"><%= t('browse_everything.modal_form.cancel')%></button>
|
23
|
-
<button class="ev-submit btn btn-primary" data-loading-text="Loading..."><%= t('browse_everything.modal_form.submit')%></button>
|
24
|
-
<% end %>
|
25
|
-
</div>
|
26
|
-
<% if bootstrap_three? %></div></div><% end %>
|
28
|
+
</div>
|
data/browse-everything.gemspec
CHANGED
@@ -22,15 +22,14 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'addressable', '~> 2.5'
|
23
23
|
spec.add_dependency 'google_drive'
|
24
24
|
spec.add_dependency 'dropbox-sdk', '>= 1.6.2'
|
25
|
-
spec.add_dependency 'skydrive'
|
26
25
|
spec.add_dependency 'ruby-box'
|
27
26
|
spec.add_dependency 'sass-rails'
|
28
|
-
spec.add_dependency 'bootstrap-sass'
|
27
|
+
spec.add_dependency 'bootstrap-sass', '~> 3.2'
|
29
28
|
spec.add_dependency 'font-awesome-rails'
|
30
29
|
spec.add_dependency 'google-api-client', '~> 0.9'
|
31
30
|
spec.add_dependency 'signet'
|
32
31
|
spec.add_dependency 'httparty'
|
33
|
-
spec.add_dependency 'aws-sdk'
|
32
|
+
spec.add_dependency 'aws-sdk-s3'
|
34
33
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
35
34
|
spec.add_development_dependency 'rspec-rails'
|
36
35
|
spec.add_development_dependency 'rspec-its'
|
data/lib/browse_everything.rb
CHANGED
@@ -12,7 +12,6 @@ module BrowseEverything
|
|
12
12
|
autoload :Base, 'browse_everything/driver/base'
|
13
13
|
autoload :FileSystem, 'browse_everything/driver/file_system'
|
14
14
|
autoload :Dropbox, 'browse_everything/driver/dropbox'
|
15
|
-
autoload :SkyDrive, 'browse_everything/driver/sky_drive'
|
16
15
|
autoload :Box, 'browse_everything/driver/box'
|
17
16
|
autoload :GoogleDrive, 'browse_everything/driver/google_drive'
|
18
17
|
autoload :S3, 'browse_everything/driver/s3'
|
@@ -18,6 +18,3 @@
|
|
18
18
|
# :app_secret: YOUR_AWS_S3_SECRET # explicitly here, or left out to use system-configured
|
19
19
|
# :region: YOUR_AWS_S3_REGION # defaults.
|
20
20
|
# See https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/
|
21
|
-
# sky_drive:
|
22
|
-
# :client_id: YOUR_MS_LIVE_CONNECT_CLIENT_ID
|
23
|
-
# :client_secret: YOUR_MS_LIVE_CONNECT_CLIENT_SECRET
|
data/spec/spec_helper.rb
CHANGED
@@ -60,10 +60,6 @@ module BrowserConfigHelper
|
|
60
60
|
client_id: 'GoogleClientId',
|
61
61
|
client_secret: 'GoogleClientSecret'
|
62
62
|
},
|
63
|
-
'sky_drive' => {
|
64
|
-
client_id: 'SkyDriveClientId',
|
65
|
-
client_secret: 'SkyDriveClientSecret'
|
66
|
-
},
|
67
63
|
's3' => {
|
68
64
|
app_key: 'S3AppKey',
|
69
65
|
app_secret: 'S3AppSecret',
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="jumbotron">
|
2
2
|
<h1>Welcome!</h1>
|
3
3
|
|
4
4
|
<p>Please click the button below to start pickin' files!</p>
|
@@ -19,4 +19,4 @@
|
|
19
19
|
.cancel(function() { window.alert('Canceled!') });
|
20
20
|
});
|
21
21
|
</script>
|
22
|
-
</div>
|
22
|
+
</div>
|
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: 0.15.0
|
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: 2017-
|
16
|
+
date: 2017-10-11 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: rails
|
@@ -71,20 +71,6 @@ dependencies:
|
|
71
71
|
- - ">="
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: 1.6.2
|
74
|
-
- !ruby/object:Gem::Dependency
|
75
|
-
name: skydrive
|
76
|
-
requirement: !ruby/object:Gem::Requirement
|
77
|
-
requirements:
|
78
|
-
- - ">="
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '0'
|
81
|
-
type: :runtime
|
82
|
-
prerelease: false
|
83
|
-
version_requirements: !ruby/object:Gem::Requirement
|
84
|
-
requirements:
|
85
|
-
- - ">="
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '0'
|
88
74
|
- !ruby/object:Gem::Dependency
|
89
75
|
name: ruby-box
|
90
76
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,16 +103,16 @@ dependencies:
|
|
117
103
|
name: bootstrap-sass
|
118
104
|
requirement: !ruby/object:Gem::Requirement
|
119
105
|
requirements:
|
120
|
-
- - "
|
106
|
+
- - "~>"
|
121
107
|
- !ruby/object:Gem::Version
|
122
|
-
version: '
|
108
|
+
version: '3.2'
|
123
109
|
type: :runtime
|
124
110
|
prerelease: false
|
125
111
|
version_requirements: !ruby/object:Gem::Requirement
|
126
112
|
requirements:
|
127
|
-
- - "
|
113
|
+
- - "~>"
|
128
114
|
- !ruby/object:Gem::Version
|
129
|
-
version: '
|
115
|
+
version: '3.2'
|
130
116
|
- !ruby/object:Gem::Dependency
|
131
117
|
name: font-awesome-rails
|
132
118
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,7 +170,7 @@ dependencies:
|
|
184
170
|
- !ruby/object:Gem::Version
|
185
171
|
version: '0'
|
186
172
|
- !ruby/object:Gem::Dependency
|
187
|
-
name: aws-sdk
|
173
|
+
name: aws-sdk-s3
|
188
174
|
requirement: !ruby/object:Gem::Requirement
|
189
175
|
requirements:
|
190
176
|
- - ">="
|
@@ -479,8 +465,8 @@ files:
|
|
479
465
|
- app/assets/stylesheets/browse_everything/_browse_everything.scss
|
480
466
|
- app/assets/stylesheets/jquery.treetable.theme.browse.css
|
481
467
|
- app/controllers/browse_everything_controller.rb
|
482
|
-
- app/helpers/bootstrap_version_helper.rb
|
483
468
|
- app/helpers/browse_everything_helper.rb
|
469
|
+
- app/helpers/font_awesome_version_helper.rb
|
484
470
|
- app/views/browse_everything/_auth.html.erb
|
485
471
|
- app/views/browse_everything/_file.html.erb
|
486
472
|
- app/views/browse_everything/_files.html.erb
|
@@ -502,7 +488,6 @@ files:
|
|
502
488
|
- lib/browse_everything/driver/file_system.rb
|
503
489
|
- lib/browse_everything/driver/google_drive.rb
|
504
490
|
- lib/browse_everything/driver/s3.rb
|
505
|
-
- lib/browse_everything/driver/sky_drive.rb
|
506
491
|
- lib/browse_everything/engine.rb
|
507
492
|
- lib/browse_everything/file_entry.rb
|
508
493
|
- lib/browse_everything/retriever.rb
|
@@ -544,7 +529,6 @@ files:
|
|
544
529
|
- spec/unit/file_system_spec.rb
|
545
530
|
- spec/unit/retriever_spec.rb
|
546
531
|
- spec/unit/s3_spec.rb
|
547
|
-
- spec/unit/sky_drive_spec.rb
|
548
532
|
- spec/views/browse_everything/_file.html.erb_spec.rb
|
549
533
|
- tasks/ci.rake
|
550
534
|
- vendor/assets/javascripts/jquery.treetable.js
|
@@ -570,7 +554,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
570
554
|
version: '0'
|
571
555
|
requirements: []
|
572
556
|
rubyforge_project:
|
573
|
-
rubygems_version: 2.
|
557
|
+
rubygems_version: 2.6.13
|
574
558
|
signing_key:
|
575
559
|
specification_version: 4
|
576
560
|
summary: AJAX/Rails engine file browser for cloud storage services
|
@@ -607,5 +591,4 @@ test_files:
|
|
607
591
|
- spec/unit/file_system_spec.rb
|
608
592
|
- spec/unit/retriever_spec.rb
|
609
593
|
- spec/unit/s3_spec.rb
|
610
|
-
- spec/unit/sky_drive_spec.rb
|
611
594
|
- spec/views/browse_everything/_file.html.erb_spec.rb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module BootstrapVersionHelper
|
2
|
-
def bootstrap_three?
|
3
|
-
Bundler.environment.specs['bootstrap-sass'].first.version >= Gem::Version.new('3')
|
4
|
-
end
|
5
|
-
|
6
|
-
def bs2(if2)
|
7
|
-
bs2or3(if2, '')
|
8
|
-
end
|
9
|
-
|
10
|
-
def bs3(if3)
|
11
|
-
bs2or3('', if3)
|
12
|
-
end
|
13
|
-
|
14
|
-
def bs2or3(if2, if3)
|
15
|
-
bootstrap_three? ? if3 : if2
|
16
|
-
end
|
17
|
-
|
18
|
-
def font_awesome_four?
|
19
|
-
Bundler.environment.specs['font-awesome-rails'].first.version >= Gem::Version.new('4')
|
20
|
-
end
|
21
|
-
|
22
|
-
def fa3(if3)
|
23
|
-
fa3or4(if3, '')
|
24
|
-
end
|
25
|
-
|
26
|
-
def fa4(if4)
|
27
|
-
fa3or4('', if4)
|
28
|
-
end
|
29
|
-
|
30
|
-
def fa3or4(if3, if4)
|
31
|
-
font_awesome_four? ? if4 : if3
|
32
|
-
end
|
33
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
module BrowseEverything
|
2
|
-
module Driver
|
3
|
-
class SkyDrive < Base
|
4
|
-
require 'skydrive'
|
5
|
-
|
6
|
-
def icon
|
7
|
-
'windows'
|
8
|
-
end
|
9
|
-
|
10
|
-
def container_items
|
11
|
-
%w(folder album)
|
12
|
-
end
|
13
|
-
|
14
|
-
def validate_config
|
15
|
-
unless config[:client_id]
|
16
|
-
raise BrowseEverything::InitializationError, 'SkyDrive driver requires a :client_id argument'
|
17
|
-
end
|
18
|
-
unless config[:client_secret]
|
19
|
-
raise BrowseEverything::InitializationError, 'SkyDrive driver requires a :client_secret argument'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def contents(path = '')
|
24
|
-
result = []
|
25
|
-
token_obj = rehydrate_token
|
26
|
-
client = Skydrive::Client.new(token_obj)
|
27
|
-
if path == ''
|
28
|
-
folder = client.my_skydrive
|
29
|
-
# TODO: do some loop to get down to my path
|
30
|
-
else
|
31
|
-
folder = client.get("/#{path.tr('-', '.')}/")
|
32
|
-
result += [parent_folder_details(folder)] if folder.parent_id
|
33
|
-
end
|
34
|
-
|
35
|
-
files = folder.files
|
36
|
-
files.items.each do |item|
|
37
|
-
if container_items.include? item.type
|
38
|
-
result += [folder_details(item)]
|
39
|
-
else
|
40
|
-
Rails.logger.warn("\n\nID #{item.id} #{item.type}")
|
41
|
-
result += [file_details(item)]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
result
|
45
|
-
end
|
46
|
-
|
47
|
-
def link_for(path)
|
48
|
-
response = Skydrive::Client.new(rehydrate_token).get("/#{real_id(path)}/")
|
49
|
-
[response.download_link, { expires: 1.hour.from_now, file_name: File.basename(path), file_size: response.size.to_i }]
|
50
|
-
end
|
51
|
-
|
52
|
-
def file_details(file)
|
53
|
-
BrowseEverything::FileEntry.new(
|
54
|
-
safe_id(file.id),
|
55
|
-
"#{key}:#{safe_id(file.id)}",
|
56
|
-
file.name,
|
57
|
-
file.size,
|
58
|
-
file.updated_time,
|
59
|
-
false
|
60
|
-
)
|
61
|
-
end
|
62
|
-
|
63
|
-
def parent_folder_details(file)
|
64
|
-
BrowseEverything::FileEntry.new(
|
65
|
-
safe_id(file.parent_id),
|
66
|
-
"#{key}:#{safe_id(file.parent_id)}",
|
67
|
-
'..',
|
68
|
-
0,
|
69
|
-
Time.now,
|
70
|
-
true
|
71
|
-
)
|
72
|
-
end
|
73
|
-
|
74
|
-
def folder_details(folder)
|
75
|
-
BrowseEverything::FileEntry.new(
|
76
|
-
safe_id(folder.id),
|
77
|
-
"#{key}:#{safe_id(folder.id)}",
|
78
|
-
folder.name,
|
79
|
-
0,
|
80
|
-
folder.updated_time,
|
81
|
-
true,
|
82
|
-
'directory' # TODO: how are we getting mime type
|
83
|
-
)
|
84
|
-
end
|
85
|
-
|
86
|
-
def auth_link
|
87
|
-
oauth_client.authorize_url
|
88
|
-
end
|
89
|
-
|
90
|
-
def authorized?
|
91
|
-
return false unless @token.present?
|
92
|
-
!rehydrate_token.expired?
|
93
|
-
end
|
94
|
-
|
95
|
-
def connect(params, _data)
|
96
|
-
Rails.logger.warn "params #{params.inspect}"
|
97
|
-
token = oauth_client.get_access_token(params[:code])
|
98
|
-
@token = { token: token.token, expires_at: token.expires_at }
|
99
|
-
end
|
100
|
-
|
101
|
-
private
|
102
|
-
|
103
|
-
def oauth_client
|
104
|
-
Skydrive::Oauth::Client.new(config[:client_id], config[:client_secret], callback.to_s, 'wl.skydrive')
|
105
|
-
# TODO: error checking here
|
106
|
-
end
|
107
|
-
|
108
|
-
def rehydrate_token
|
109
|
-
return @rehydrate_token if @rehydrate_token
|
110
|
-
token_str = @token[:token]
|
111
|
-
token_expires = @token[:expires_at]
|
112
|
-
Rails.logger.warn "\n\n Rehydrating: #{@token} #{token_str} #{token_expires}"
|
113
|
-
@rehydrate_token = oauth_client.get_access_token_from_hash(token_str, expires_at: token_expires)
|
114
|
-
end
|
115
|
-
|
116
|
-
def safe_id(id)
|
117
|
-
id.tr('.', '-')
|
118
|
-
end
|
119
|
-
|
120
|
-
def real_id(id)
|
121
|
-
id.tr('-', '.')
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
data/spec/unit/sky_drive_spec.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
describe BrowseEverything::Driver::SkyDrive do
|
2
|
-
include BrowseEverything::Engine.routes.url_helpers
|
3
|
-
|
4
|
-
let(:provider_yml) do
|
5
|
-
{
|
6
|
-
client_id: 'CLIENTID', client_secret: 'CLIENTSECRET',
|
7
|
-
url_options: { port: '3000', protocol: 'http://', host: 'example.com' }
|
8
|
-
}
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:redirect_url) { connector_response_url(provider_yml[:url_options]) }
|
12
|
-
|
13
|
-
let(:response_body) do
|
14
|
-
{
|
15
|
-
'client_id' => 'CLIENTID', 'client_secret' => 'CLIENTSECRET', 'code' => 'code',
|
16
|
-
'grant_type' => 'authorization_code', 'redirect_uri' => redirect_url.to_s
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
let(:driver) { described_class.new(provider_yml) }
|
21
|
-
|
22
|
-
subject { driver }
|
23
|
-
|
24
|
-
context 'when expiration is in the future' do
|
25
|
-
before do
|
26
|
-
stub_request(:post, 'https://login.live.com/oauth20_token.srf')
|
27
|
-
.with(body: response_body)
|
28
|
-
.to_return(status: 200,
|
29
|
-
body: {
|
30
|
-
'token_type' => 'bearer',
|
31
|
-
'expires_at' => (Time.now + (60 * 60 * 24)).to_i,
|
32
|
-
'scope' => 'wl.skydrive_update,wl.offline_access',
|
33
|
-
'access_token' => 'access_token',
|
34
|
-
'refresh_token' => 'refresh_token',
|
35
|
-
'authentication_token' => 'authentication_token'
|
36
|
-
}.to_json,
|
37
|
-
headers: {
|
38
|
-
'content-type' => 'application/json' })
|
39
|
-
driver.connect({ code: 'code' }, {})
|
40
|
-
end
|
41
|
-
|
42
|
-
it { is_expected.to be_authorized }
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'when the session has expired' do
|
46
|
-
before do
|
47
|
-
stub_request(:post, 'https://login.live.com/oauth20_token.srf')
|
48
|
-
.with(body: response_body)
|
49
|
-
.to_return(status: 200,
|
50
|
-
body: {
|
51
|
-
'token_type' => 'bearer',
|
52
|
-
'expires_at' => (Time.now - (60 * 60 * 24)).to_i,
|
53
|
-
'scope' => 'wl.skydrive_update,wl.offline_access',
|
54
|
-
'access_token' => 'access_token',
|
55
|
-
'refresh_token' => 'refresh_token',
|
56
|
-
'authentication_token' => 'authentication_token'
|
57
|
-
}.to_json,
|
58
|
-
headers: {
|
59
|
-
'content-type' => 'application/json' })
|
60
|
-
driver.connect({ code: 'code' }, {})
|
61
|
-
end
|
62
|
-
|
63
|
-
it { is_expected.not_to be_authorized }
|
64
|
-
end
|
65
|
-
end
|