browse-everything 0.15.1 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +61 -9
- data/.rubocop_todo.yml +2 -15
- data/.travis.yml +19 -19
- data/CONTRIBUTING.md +6 -6
- data/Gemfile +12 -8
- data/README.md +30 -0
- data/Rakefile +2 -1
- data/app/assets/javascripts/browse_everything/behavior.js.coffee +5 -0
- data/app/controllers/browse_everything_controller.rb +75 -23
- data/app/helpers/browse_everything_helper.rb +2 -8
- data/app/helpers/font_awesome_version_helper.rb +9 -8
- data/app/services/browse_everything_session.rb +10 -0
- data/app/services/browse_everything_session/provider_session.rb +42 -0
- data/app/services/browser_factory.rb +25 -0
- data/app/views/browse_everything/_files.html.erb +56 -6
- data/browse-everything.gemspec +29 -25
- data/config/routes.rb +7 -2
- data/lib/browse-everything.rb +2 -0
- data/lib/browse_everything.rb +45 -12
- data/lib/browse_everything/auth/google/credentials.rb +28 -0
- data/lib/browse_everything/auth/google/request_parameters.rb +61 -0
- data/lib/browse_everything/browser.rb +11 -4
- data/lib/browse_everything/driver/authentication_factory.rb +22 -0
- data/lib/browse_everything/driver/base.rb +72 -19
- data/lib/browse_everything/driver/box.rb +46 -17
- data/lib/browse_everything/driver/dropbox.rb +36 -10
- data/lib/browse_everything/driver/file_system.rb +14 -26
- data/lib/browse_everything/driver/google_drive.rb +187 -54
- data/lib/browse_everything/driver/s3.rb +81 -75
- data/lib/browse_everything/engine.rb +3 -2
- data/lib/browse_everything/file_entry.rb +3 -1
- data/lib/browse_everything/retriever.rb +103 -31
- data/lib/browse_everything/version.rb +3 -1
- data/lib/generators/browse_everything/assets_generator.rb +3 -2
- data/lib/generators/browse_everything/config_generator.rb +11 -9
- data/lib/generators/browse_everything/install_generator.rb +3 -2
- data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +12 -11
- data/spec/controllers/browse_everything_controller_spec.rb +80 -0
- data/spec/features/select_files_spec.rb +13 -13
- data/spec/features/test_compiling_stylesheets_spec.rb +2 -0
- data/spec/fixtures/vcr_cassettes/google_drive.yml +331 -0
- data/spec/fixtures/vcr_cassettes/retriever.yml +93 -0
- data/spec/helper/browse_everything_controller_helper_spec.rb +21 -7
- data/spec/javascripts/jasmine_spec.rb +2 -0
- data/spec/javascripts/support/jasmine_helper.rb +1 -0
- data/spec/lib/browse_everything/auth/google/credentials_spec.rb +41 -0
- data/spec/{unit → lib/browse_everything}/browse_everything_helper_spec.rb +2 -0
- data/spec/lib/browse_everything/browser_spec.rb +109 -0
- data/spec/{unit → lib/browse_everything/driver}/base_spec.rb +5 -4
- data/spec/{unit → lib/browse_everything/driver}/box_spec.rb +20 -5
- data/spec/{unit → lib/browse_everything/driver}/dropbox_spec.rb +15 -18
- data/spec/{unit → lib/browse_everything/driver}/file_system_spec.rb +32 -26
- data/spec/lib/browse_everything/driver/google_drive_spec.rb +171 -0
- data/spec/{unit → lib/browse_everything/driver}/s3_spec.rb +38 -21
- data/spec/lib/browse_everything/driver_spec.rb +38 -0
- data/spec/{unit → lib/browse_everything}/file_entry_spec.rb +4 -1
- data/spec/lib/browse_everything/retriever_spec.rb +200 -0
- data/spec/lib/browse_everything_spec.rb +67 -0
- data/spec/services/browse_everything_session/provider_session_spec.rb +50 -0
- data/spec/services/browser_factory_spec.rb +40 -0
- data/spec/spec_helper.rb +39 -18
- data/spec/support/app/controllers/file_handler_controller.rb +4 -4
- data/spec/support/app/views/file_handler/main.html.erb +1 -1
- data/spec/support/capybara.rb +17 -0
- data/spec/support/rake.rb +3 -1
- data/spec/support/wait_for_ajax.rb +14 -0
- data/spec/test_app_templates/Gemfile.extra +1 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +10 -4
- data/spec/views/browse_everything/{_file.html.erb_spec.rb → _files.html.erb_spec.rb} +24 -18
- data/tasks/ci.rake +2 -0
- metadata +159 -107
- data/app/views/browse_everything/_file.html.erb +0 -52
- data/app/views/browse_everything/resolve.html.erb +0 -1
- data/spec/unit/browser_spec.rb +0 -76
- data/spec/unit/retriever_spec.rb +0 -109
@@ -1,12 +1,6 @@
|
|
1
|
-
|
2
|
-
def array_to_hidden_fields(array, key)
|
3
|
-
fields = array.to_query(key).split(Rack::Utils::DEFAULT_SEP).collect do |pair|
|
4
|
-
key, value = pair.split('=', 2).map { |str| Rack::Utils.unescape(str) }
|
5
|
-
hidden_field_tag(key, value)
|
6
|
-
end
|
7
|
-
fields.join("\n").html_safe
|
8
|
-
end
|
1
|
+
# frozen_string_literal: true
|
9
2
|
|
3
|
+
module BrowseEverythingHelper
|
10
4
|
# Extracted from Rack::Mime 1.5.2 for use with earlier versions of Rack/Rails
|
11
5
|
# @param [String] value
|
12
6
|
# @param [String] matcher
|
@@ -1,16 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FontAwesomeVersionHelper
|
4
|
+
|
5
|
+
# Determines if the App uses Font Awesome releases 3.x or 4.x
|
6
|
+
# @return [TrueClass, FalseClass]
|
2
7
|
def font_awesome_four?
|
3
8
|
Bundler.environment.specs['font-awesome-rails'].first.version >= Gem::Version.new('4')
|
4
9
|
end
|
5
10
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
def fa4(if4)
|
11
|
-
fa3or4('', if4)
|
12
|
-
end
|
13
|
-
|
11
|
+
# Selects one of two HTML element classes depending upon the release of Font Awesome used by the App
|
12
|
+
# @param if3 [String] the Font Awesome 3 HTML class
|
13
|
+
# @param if4 [String] the Font Awesome 4 HTML class
|
14
|
+
# @return [String] the Font Awesome HTML class
|
14
15
|
def fa3or4(if3, if4)
|
15
16
|
font_awesome_four? ? if4 : if3
|
16
17
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Object for handling session cookies containing cached values
|
4
|
+
class BrowseEverythingSession
|
5
|
+
class ProviderSession < Base
|
6
|
+
class_attribute :sessions
|
7
|
+
self.sessions = {}
|
8
|
+
|
9
|
+
def self.for(session:, name:)
|
10
|
+
ProviderSession.new(session: session, name: name)
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(session:, name:)
|
14
|
+
@name = name
|
15
|
+
super(session: session)
|
16
|
+
end
|
17
|
+
|
18
|
+
def token=(value)
|
19
|
+
@session["#{@name}_token"] = value
|
20
|
+
end
|
21
|
+
|
22
|
+
def token
|
23
|
+
@session["#{@name}_token"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def code=(value)
|
27
|
+
@session["#{@name}_code"] = value
|
28
|
+
end
|
29
|
+
|
30
|
+
def code
|
31
|
+
@session["#{@name}_code"]
|
32
|
+
end
|
33
|
+
|
34
|
+
def data=(value)
|
35
|
+
@session["#{@name}_data"] = value
|
36
|
+
end
|
37
|
+
|
38
|
+
def data
|
39
|
+
@session["#{@name}_data"]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class BrowserFactory
|
5
|
+
class << self
|
6
|
+
def build(session:, url_options:)
|
7
|
+
browser = BrowseEverything::Browser.new(url_options)
|
8
|
+
browser.providers.each_value do |provider_handler|
|
9
|
+
# The authentication token must be set here
|
10
|
+
provider_session = BrowseEverythingSession::ProviderSession.for(session: session, name: provider_handler.key.to_sym)
|
11
|
+
provider_handler.token = provider_session.token if provider_session.token
|
12
|
+
end
|
13
|
+
browser
|
14
|
+
end
|
15
|
+
|
16
|
+
def for(name:, url_options: {})
|
17
|
+
browser(url_options: url_options).providers[name]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.browser(url_options: {})
|
22
|
+
BrowseEverything::Browser.new(url_options)
|
23
|
+
end
|
24
|
+
private_class_method :browser
|
25
|
+
end
|
@@ -8,9 +8,59 @@
|
|
8
8
|
<th role="columnheader">Modified</th>
|
9
9
|
</tr>
|
10
10
|
</thead>
|
11
|
-
<%
|
12
|
-
<%
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
<% provider_contents.each_with_index do |file, index| %>
|
12
|
+
<% path = browse_everything_engine.contents_path(provider_name, file.id) %>
|
13
|
+
<% parent = params[:parent] %>
|
14
|
+
<% if file.container? || provider.config[:max_upload_file_size].blank? %>
|
15
|
+
<% disabled = false %>
|
16
|
+
<% else %>
|
17
|
+
<% max_size = provider.config[:max_upload_file_size].to_i %>
|
18
|
+
<% disabled = file.size > max_size %>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<tr role="row"
|
22
|
+
tabindex="-1"
|
23
|
+
data-ev-location="<%= file.location %>"
|
24
|
+
data-tt-id="<%= path %>"
|
25
|
+
data-tt-parent-id="<%= parent %>"
|
26
|
+
data-tt-branch="<%= file.container? ? 'true' : 'false' %>">
|
27
|
+
|
28
|
+
<td role="gridcell" title="<%= file.name %>" class="<%=file.container? ? 'ev-container' : 'ev-file'%> ev-file-name">
|
29
|
+
<% if disabled %>
|
30
|
+
<span title="<%= t('browse_everything.size_disabled', max_size: number_to_human_size(max_size)) %>"
|
31
|
+
class="<%=file.container? ? 'folder' : 'file'%>" aria-hidden="true">
|
32
|
+
<%= file.name %>
|
33
|
+
</span>
|
34
|
+
<span class="sr-only"><%= file.container? ? ', folder' : ', file' %> </span>
|
35
|
+
<% else %>
|
36
|
+
<%= link_to browse_everything_engine.contents_path(provider_name, file.id), class: 'ev-link' do %>
|
37
|
+
<span class="<%=file.container? ? 'folder' : 'file'%>" aria-hidden="true"/>
|
38
|
+
<%= file.name %>
|
39
|
+
<span class="sr-only"><%= file.container? ? ', folder' : ', file' %> </span>
|
40
|
+
<% end %>
|
41
|
+
<% end %>
|
42
|
+
</td>
|
43
|
+
<% if file.container? %>
|
44
|
+
<td role="gridcell" class="ev-directory-select">
|
45
|
+
<%= check_box_tag(:select_all, "0", false, class: "ev-select-all") %>
|
46
|
+
</td>
|
47
|
+
<% else %>
|
48
|
+
<td role="gridcell" class="ev-file-select">
|
49
|
+
<%= check_box_tag(file.id.to_s.parameterize, "0", false, class: "ev-select-file") %>
|
50
|
+
</td>
|
51
|
+
<% end %>
|
52
|
+
|
53
|
+
<td role="gridcell" class="ev-file-size">
|
54
|
+
<%= number_to_human_size(file.size).sub(/Bytes/,'bytes') %>
|
55
|
+
</td>
|
56
|
+
|
57
|
+
<td role="gridcell" class="ev-file-kind">
|
58
|
+
<%= file.type %>
|
59
|
+
</td>
|
60
|
+
|
61
|
+
<td role="gridcell" class="ev-file-date">
|
62
|
+
<%= file.mtime.strftime('%F %R') %>
|
63
|
+
</td>
|
64
|
+
</tr>
|
65
|
+
<% end %>
|
66
|
+
</table>
|
data/browse-everything.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'browse_everything/version'
|
5
6
|
|
@@ -13,39 +14,42 @@ Gem::Specification.new do |spec|
|
|
13
14
|
spec.homepage = 'https://github.com/projecthydra/browse-everything'
|
14
15
|
spec.license = 'Apache 2'
|
15
16
|
|
16
|
-
spec.files = `git ls-files`.split(
|
17
|
+
spec.files = `git ls-files -z`.split(/\000/)
|
17
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
20
|
spec.require_paths = ['lib']
|
20
21
|
|
21
|
-
spec.add_dependency 'rails', '>= 3.1'
|
22
22
|
spec.add_dependency 'addressable', '~> 2.5'
|
23
|
-
spec.add_dependency '
|
23
|
+
spec.add_dependency 'aws-sdk-s3'
|
24
|
+
spec.add_dependency 'bootstrap-sass', '~> 3.2'
|
24
25
|
spec.add_dependency 'dropbox_api', '>= 0.1.10'
|
26
|
+
spec.add_dependency 'font-awesome-rails'
|
27
|
+
spec.add_dependency 'google-api-client', '~> 0.21'
|
28
|
+
spec.add_dependency 'google_drive', '~> 2.1'
|
29
|
+
spec.add_dependency 'typhoeus'
|
30
|
+
spec.add_dependency 'rails', '>= 4.2'
|
25
31
|
spec.add_dependency 'ruby-box'
|
26
32
|
spec.add_dependency 'sass-rails'
|
27
|
-
spec.add_dependency '
|
28
|
-
spec.add_dependency '
|
29
|
-
|
30
|
-
spec.
|
31
|
-
spec.
|
32
|
-
spec.
|
33
|
+
spec.add_dependency 'signet', '~> 0.8'
|
34
|
+
spec.add_dependency 'thor', '~> 0.20'
|
35
|
+
|
36
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
37
|
+
spec.add_development_dependency 'capybara'
|
38
|
+
spec.add_development_dependency 'chromedriver-helper'
|
39
|
+
spec.add_development_dependency 'coveralls'
|
40
|
+
spec.add_development_dependency 'engine_cart', '~> 2.0'
|
41
|
+
spec.add_development_dependency 'factory_bot_rails'
|
42
|
+
spec.add_development_dependency 'jasmine', '~> 2.3'
|
43
|
+
spec.add_development_dependency 'rails-controller-testing'
|
44
|
+
spec.add_development_dependency 'rake'
|
33
45
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
34
|
-
spec.add_development_dependency 'rspec-rails'
|
35
46
|
spec.add_development_dependency 'rspec-its'
|
36
|
-
spec.add_development_dependency '
|
37
|
-
spec.add_development_dependency 'rubocop
|
47
|
+
spec.add_development_dependency 'rspec-rails'
|
48
|
+
spec.add_development_dependency 'rubocop', '~> 0.53'
|
49
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 1.23'
|
50
|
+
spec.add_development_dependency 'selenium-webdriver'
|
38
51
|
spec.add_development_dependency 'simplecov'
|
39
|
-
spec.add_development_dependency 'bundler', '~> 1.3'
|
40
|
-
spec.add_development_dependency 'pry'
|
41
|
-
spec.add_development_dependency 'rake'
|
42
|
-
spec.add_development_dependency 'webmock'
|
43
|
-
spec.add_development_dependency 'vcr'
|
44
52
|
spec.add_development_dependency 'sqlite3'
|
45
|
-
spec.add_development_dependency '
|
46
|
-
spec.add_development_dependency '
|
47
|
-
spec.add_development_dependency 'capybara'
|
48
|
-
spec.add_development_dependency 'jasmine', '~> 2.3'
|
49
|
-
spec.add_development_dependency 'coveralls'
|
50
|
-
spec.add_development_dependency 'poltergeist', '~> 1.10'
|
53
|
+
spec.add_development_dependency 'vcr'
|
54
|
+
spec.add_development_dependency 'webmock'
|
51
55
|
end
|
data/config/routes.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
BrowseEverything::Engine.routes.draw do
|
2
4
|
get 'connect', to: 'browse_everything#auth', as: 'connector_response'
|
3
|
-
match 'resolve', to: 'browse_everything#resolve', as: 'resolver', via: [
|
4
|
-
|
5
|
+
match 'resolve', to: 'browse_everything#resolve', as: 'resolver', via: %i[get post]
|
6
|
+
# The "format: false" argument ensures that directory paths containing period characters can be parsed
|
7
|
+
# By default, ""/dir1/dir.somedirectory.2" will be parsed as "/dir1/dir" with the format requested as "somedirectory.2"
|
8
|
+
# Please see http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments
|
9
|
+
match ':provider(/*path)', to: 'browse_everything#show', as: 'contents', via: %i[get post], format: false
|
5
10
|
root to: 'browse_everything#index'
|
6
11
|
end
|
data/lib/browse-everything.rb
CHANGED
data/lib/browse_everything.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails'
|
2
4
|
require 'browse_everything/version'
|
3
5
|
require 'browse_everything/engine'
|
4
6
|
require 'browse_everything/retriever'
|
5
7
|
|
6
8
|
module BrowseEverything
|
7
|
-
class InitializationError < RuntimeError; end
|
8
|
-
|
9
9
|
autoload :Browser, 'browse_everything/browser'
|
10
10
|
autoload :FileEntry, 'browse_everything/file_entry'
|
11
|
+
|
11
12
|
module Driver
|
12
13
|
autoload :Base, 'browse_everything/driver/base'
|
13
14
|
autoload :FileSystem, 'browse_everything/driver/file_system'
|
@@ -15,28 +16,60 @@ module BrowseEverything
|
|
15
16
|
autoload :Box, 'browse_everything/driver/box'
|
16
17
|
autoload :GoogleDrive, 'browse_everything/driver/google_drive'
|
17
18
|
autoload :S3, 'browse_everything/driver/s3'
|
19
|
+
|
20
|
+
# Access the sorter set for the base driver class
|
21
|
+
# @return [Proc]
|
22
|
+
def sorter
|
23
|
+
BrowseEverything::Driver::Base.sorter
|
24
|
+
end
|
25
|
+
|
26
|
+
# Provide a custom sorter for all driver classes
|
27
|
+
# @param [Proc] the sorting lambda (or proc)
|
28
|
+
def sorter=(sorting_proc)
|
29
|
+
BrowseEverything::Driver::Base.sorter = sorting_proc
|
30
|
+
end
|
31
|
+
|
32
|
+
module_function :sorter, :sorter=
|
18
33
|
end
|
19
34
|
|
35
|
+
module Auth
|
36
|
+
module Google
|
37
|
+
autoload :Credentials, 'browse_everything/auth/google/credentials'
|
38
|
+
autoload :RequestParameters, 'browse_everything/auth/google/request_parameters'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class InitializationError < RuntimeError; end
|
43
|
+
class NotImplementedError < StandardError; end
|
44
|
+
class NotAuthorizedError < StandardError; end
|
45
|
+
|
20
46
|
class << self
|
47
|
+
attr_writer :config
|
48
|
+
|
21
49
|
def configure(value)
|
22
|
-
if value.nil?
|
23
|
-
|
50
|
+
return if value.nil?
|
51
|
+
if value.is_a?(Hash)
|
52
|
+
@config = ActiveSupport::HashWithIndifferentAccess.new value
|
24
53
|
elsif value.is_a?(String)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
|
54
|
+
config_file_content = File.read(value)
|
55
|
+
config_file_template = ERB.new(config_file_content)
|
56
|
+
config_values = YAML.safe_load(config_file_template.result)
|
57
|
+
@config = ActiveSupport::HashWithIndifferentAccess.new config_values
|
58
|
+
@config.deep_symbolize_keys
|
32
59
|
else
|
33
60
|
raise InitializationError, "Unrecognized configuration: #{value.inspect}"
|
34
61
|
end
|
62
|
+
|
63
|
+
if @config.include? 'drop_box'
|
64
|
+
warn '[DEPRECATION] `drop_box` is deprecated. Please use `dropbox` instead.'
|
65
|
+
@config['dropbox'] = @config.delete('drop_box')
|
66
|
+
end
|
35
67
|
end
|
36
68
|
|
37
69
|
def config
|
38
70
|
if @config.nil?
|
39
|
-
|
71
|
+
config_path = Rails.root.join 'config', 'browse_everything_providers.yml'
|
72
|
+
configure config_path.to_s
|
40
73
|
end
|
41
74
|
@config
|
42
75
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'googleauth'
|
4
|
+
|
5
|
+
# Object structuring the credentials retrieved for the Google API's
|
6
|
+
module BrowseEverything
|
7
|
+
module Auth
|
8
|
+
module Google
|
9
|
+
class Credentials < ::Google::Auth::UserRefreshCredentials
|
10
|
+
# Ensures that every call to retrieve an access token does *not* require an HTTP request
|
11
|
+
# @see Google::Auth::UserRefreshCredentials#fetch_access_token
|
12
|
+
# @param options [Hash] the access token values
|
13
|
+
def fetch_access_token(options = {})
|
14
|
+
return build_token_hash if access_token
|
15
|
+
super(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# Structure a hash from existing access token values (usually cached within a Cookie)
|
21
|
+
# @return [Hash]
|
22
|
+
def build_token_hash
|
23
|
+
{ 'access_token' => access_token }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Manages request parameters for the request to the Google Drive API
|
4
|
+
module BrowseEverything
|
5
|
+
module Auth
|
6
|
+
module Google
|
7
|
+
class RequestParameters < OpenStruct
|
8
|
+
# Overrides the constructor for an OpenStruct instance
|
9
|
+
# Provides default parameters
|
10
|
+
def initialize(params = {})
|
11
|
+
@params = default_params.merge(params)
|
12
|
+
super(@params)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
# The default query parameters for the Google Drive API
|
18
|
+
# @return [Hash]
|
19
|
+
def default_params
|
20
|
+
{
|
21
|
+
q: default_query,
|
22
|
+
order_by: 'modifiedTime desc,folder,name',
|
23
|
+
fields: 'nextPageToken,files(name,id,mimeType,size,modifiedTime,parents,web_content_link)',
|
24
|
+
supports_team_drives: true,
|
25
|
+
include_team_drive_items: true,
|
26
|
+
corpora: 'user,allTeamDrives',
|
27
|
+
page_size: 1000
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def default_query
|
32
|
+
field_queries = []
|
33
|
+
contraints.each_pair do |field, constraints|
|
34
|
+
field_constraint = constraints.join(" and #{field} ")
|
35
|
+
field_queries << "#{field} #{field_constraint}"
|
36
|
+
end
|
37
|
+
field_queries.join(' ')
|
38
|
+
end
|
39
|
+
|
40
|
+
def contraints
|
41
|
+
{
|
42
|
+
'mimeType' => [
|
43
|
+
'!= \'application/vnd.google-apps.audio\'',
|
44
|
+
'!= \'application/vnd.google-apps.document\'',
|
45
|
+
'!= \'application/vnd.google-apps.drawing\'',
|
46
|
+
'!= \'application/vnd.google-apps.form\'',
|
47
|
+
'!= \'application/vnd.google-apps.fusiontable\'',
|
48
|
+
'!= \'application/vnd.google-apps.map\'',
|
49
|
+
'!= \'application/vnd.google-apps.photo\'',
|
50
|
+
'!= \'application/vnd.google-apps.presentation\'',
|
51
|
+
'!= \'application/vnd.google-apps.script\'',
|
52
|
+
'!= \'application/vnd.google-apps.site\'',
|
53
|
+
'!= \'application/vnd.google-apps.spreadsheet\'',
|
54
|
+
'!= \'application/vnd.google-apps.video\''
|
55
|
+
]
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|