From 7d298d12aa5dddcab58f648934e15dc99e1c8b34 Mon Sep 17 00:00:00 2001 From: Chris Beer Date: Thu, 8 Sep 2016 13:43:22 -0700 Subject: [PATCH 01/16] Update google-api-client to 0.9 --- browse-everything.gemspec | 3 +- lib/browse_everything/driver/google_drive.rb | 127 ++++++++----------- 2 files changed, 58 insertions(+), 72 deletions(-) diff --git a/browse-everything.gemspec b/browse-everything.gemspec index 32bb7550..a67baeaf 100644 --- a/browse-everything.gemspec +++ b/browse-everything.gemspec @@ -26,7 +26,8 @@ Gem::Specification.new do |spec| spec.add_dependency "sass-rails" spec.add_dependency "bootstrap-sass" spec.add_dependency "font-awesome-rails" - spec.add_dependency "google-api-client", "~> 0.8.6" + spec.add_dependency "google-api-client", "~> 0.9" + spec.add_dependency "signet" spec.add_dependency "httparty" spec.add_development_dependency "rspec", "~> 3.0" spec.add_development_dependency "rspec-rails" diff --git a/lib/browse_everything/driver/google_drive.rb b/lib/browse_everything/driver/google_drive.rb index c33c871a..ba0f7029 100644 --- a/lib/browse_everything/driver/google_drive.rb +++ b/lib/browse_everything/driver/google_drive.rb @@ -1,8 +1,8 @@ module BrowseEverything module Driver class GoogleDrive < Base - - require 'google/api_client' + require 'google/apis/drive_v2' + require 'signet' def icon 'google-plus-sign' @@ -17,111 +17,96 @@ def validate_config end end - def contents(path='') - default_params = { } + def contents(path = '') + return to_enum(:contents, path) + default_params = {} page_token = nil - files = [] begin - unless path.blank? - default_params[:q] = "'#{path}' in parents" - end - unless page_token.blank? - default_params[:pageToken] = page_token - end - api_result = oauth_client.execute( api_method: drive.files.list, parameters: default_params ) - response = JSON.parse(api_result.response.body) - page_token = response["nextPageToken"] - response["items"].select do |file| - path.blank? ? (file["parents"].blank? or file["parents"].any?{|p| p["isRoot"] }) : true + default_params[:q] = "'#{path}' in parents" unless path.blank? + default_params[:page_token] = page_token unless page_token.blank? + response = drive.list_files(default_params) + page_token = response.next_page_token + response.items.select do |file| + path.blank? ? (file['parents'].blank? || file['parents'].any?{|p| p['isRoot'] }) : true end.each do |file| - files << details(file, path) + d = details(file, path) + yield d if d end end while !page_token.blank? - files.compact end - def details(file, path='') - if file["downloadUrl"] or file["mimeType"] == "application/vnd.google-apps.folder" + def details(file, path = '') + if file.web_content_link || file.mime_type == "application/vnd.google-apps.folder" BrowseEverything::FileEntry.new( - file["id"], - "#{self.key}:#{file["id"]}", - file["title"], - (file["fileSize"] || 0), - Time.parse(file["modifiedDate"]), - file["mimeType"] == "application/vnd.google-apps.folder", - file["mimeType"] == "application/vnd.google-apps.folder" ? + file.id, + "#{self.key}:#{file.id}", + file.name, + file.size.to_i, + file.modified_time, + file.mime_type == "application/vnd.google-apps.folder", + file.mime_type == "application/vnd.google-apps.folder" ? "directory" : - file["mimeType"] + file.mime_type ) end end def link_for(id) - api_method = drive.files.get - api_result = oauth_client.execute(api_method: api_method, parameters: {fileId: id}) - download_url = JSON.parse(api_result.response.body)["downloadUrl"] - auth_header = {'Authorization' => "Bearer #{oauth_client.authorization.access_token.to_s}"} - extras = { + file = drive.get_file(id) + auth_header = {'Authorization' => "Bearer #{client.authorization.access_token.to_s}"} + extras = { auth_header: auth_header, - expires: 1.hour.from_now, - file_name: api_result.data.title, - file_size: api_result.data.fileSize.to_i + expires: 1.hour.from_now, + file_name: file.name, + file_size: file.size.to_i } - [download_url, extras] + [file.web_content_link, extras] end def auth_link - oauth_client.authorization.authorization_uri.to_s + auth_client.authorization_uri end def authorized? - @token.present? + token.present? end def connect(params, data) - oauth_client.authorization.code = params[:code] - @token = oauth_client.authorization.fetch_access_token! + auth_client.code = params[:code] + self.token = auth_client.fetch_access_token! end def drive - oauth_client.discovered_api('drive', 'v2') + @drive ||= Google::Apis::DriveV3::DriveService.new.tap do |s| + s.authorization = authorization + end end private - #As per issue http://stackoverflow.com/questions/12572723/rails-google-client-api-unable-to-exchange-a-refresh-token-for-access-token + def token_expired? + return true if token.nil? + token.expired? + end - #patch start - def token_expired?(token) - client=@client - result = client.execute( api_method: drive.files.list, parameters: {} ) - (result.status != 200) + def authorization + return auth_client if auth_client? + return nil unless token.present? + auth_client.update_token!(token) + self.token = auth_client.fetch_access_token! if token_expired? + auth_client end - def exchange_refresh_token( refresh_token ) - client=oauth_client - client.authorization.grant_type = 'refresh_token' - client.authorization.refresh_token = refresh_token - client.authorization.fetch_access_token! - client.authorization - client + def auth_client + @auth_client ||= Signet::OAuth2::Client.new token_credential_uri: 'https://www.googleapis.com/oauth2/v3/token', + authorization_uri: 'https://accounts.google.com/o/oauth2/auth', + scope: 'https://www.googleapis.com/auth/drive', + client_id: config[:client_id], + client_secret: config[:client_secret] end - #patch end - - def oauth_client - if @client.nil? - @client = Google::APIClient.new - @client.authorization.client_id = config[:client_id] - @client.authorization.client_secret = config[:client_secret] - @client.authorization.scope = "https://www.googleapis.com/auth/drive" - @client.authorization.redirect_uri = callback - @client.authorization.update_token!(@token) if @token.present? - #Patch start - @client = exchange_refresh_token(@token["refresh_token"]) if @token.present? && token_expired?(@token) - #Patch end - end - #todo error checking here - @client + + def auth_client? + !@auth_client.nil? end end From afb05a576bef618ef28b3f0d2b0f9bd403822b47 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Thu, 8 Sep 2016 23:23:09 -0700 Subject: [PATCH 02/16] Allow incoming link to be a URI (call to_s on it) This advances support for rails 5+. --- app/controllers/browse_everything_controller.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/browse_everything_controller.rb b/app/controllers/browse_everything_controller.rb index c19b7abc..2d3743eb 100644 --- a/app/controllers/browse_everything_controller.rb +++ b/app/controllers/browse_everything_controller.rb @@ -5,7 +5,7 @@ class BrowseEverythingController < ActionController::Base helper BrowseEverythingHelper after_filter {session["#{provider_name}_token"] = provider.token unless provider.nil? } - + def index render :layout => !request.xhr? end @@ -13,7 +13,7 @@ def index def show render :layout => !request.xhr? end - + def auth code = params[:code] session["#{provider_name}_token"] = provider.connect(params,session["#{provider_name}_data"]) @@ -21,14 +21,14 @@ def auth def resolve selected_files = params[:selected_files] || [] - @links = selected_files.collect { |file| - p,f = file.split(/:/) + @links = selected_files.collect { |file| + p,f = file.split(/:/) (url,extra) = browser.providers[p].link_for(f) result = { url: url } result.merge!(extra) unless extra.nil? result } - respond_to do |format| + respond_to do |format| format.html { render :layout => false } format.json { render :json => @links } end @@ -40,7 +40,7 @@ def auth_link @auth_link ||= if provider.present? link, data = provider.auth_link session["#{provider_name}_data"] = data - link = "#{link}&state=#{provider.key}" unless link.include?("state") + link = "#{link}&state=#{provider.key}" unless link.to_s.include?('state') link else nil From 73f9d12e1709bad5f8c6aef98a76d5fbb19ce1b9 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Thu, 8 Sep 2016 23:44:48 -0700 Subject: [PATCH 03/16] Include redirect_uri for new drive client --- lib/browse_everything/driver/google_drive.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/browse_everything/driver/google_drive.rb b/lib/browse_everything/driver/google_drive.rb index ba0f7029..3d0b6612 100644 --- a/lib/browse_everything/driver/google_drive.rb +++ b/lib/browse_everything/driver/google_drive.rb @@ -102,7 +102,8 @@ def auth_client authorization_uri: 'https://accounts.google.com/o/oauth2/auth', scope: 'https://www.googleapis.com/auth/drive', client_id: config[:client_id], - client_secret: config[:client_secret] + client_secret: config[:client_secret], + redirect_uri: callback end def auth_client? From 91c9ef01a4145e2a8ef7b03b85097d17256c0a10 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Fri, 9 Sep 2016 00:04:58 -0700 Subject: [PATCH 04/16] Additional cleanup and simplification --- lib/browse_everything/driver/google_drive.rb | 32 ++++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/lib/browse_everything/driver/google_drive.rb b/lib/browse_everything/driver/google_drive.rb index 3d0b6612..280df61a 100644 --- a/lib/browse_everything/driver/google_drive.rb +++ b/lib/browse_everything/driver/google_drive.rb @@ -36,19 +36,17 @@ def contents(path = '') end def details(file, path = '') - if file.web_content_link || file.mime_type == "application/vnd.google-apps.folder" - BrowseEverything::FileEntry.new( - file.id, - "#{self.key}:#{file.id}", - file.name, - file.size.to_i, - file.modified_time, - file.mime_type == "application/vnd.google-apps.folder", - file.mime_type == "application/vnd.google-apps.folder" ? - "directory" : - file.mime_type - ) - end + mime_folder = file.mime_type == 'application/vnd.google-apps.folder' + return unless file.web_content_link || mime_folder + BrowseEverything::FileEntry.new( + file.id, + "#{self.key}:#{file.id}", + file.name, + file.size.to_i, + file.modified_time, + mime_folder, + mime_folder ? 'directory' : file.mime_type + ) end def link_for(id) @@ -90,7 +88,7 @@ def token_expired? end def authorization - return auth_client if auth_client? + return @auth_client unless @auth_client.nil? return nil unless token.present? auth_client.update_token!(token) self.token = auth_client.fetch_access_token! if token_expired? @@ -105,12 +103,6 @@ def auth_client client_secret: config[:client_secret], redirect_uri: callback end - - def auth_client? - !@auth_client.nil? - end - end - end end From 78de94415f9a28731d802a776218a7f61f0b5079 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Fri, 9 Sep 2016 20:21:17 -0700 Subject: [PATCH 05/16] Use v3 of the Google API and conditionalise return to_enum --- lib/browse_everything/driver/google_drive.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/browse_everything/driver/google_drive.rb b/lib/browse_everything/driver/google_drive.rb index 280df61a..42983372 100644 --- a/lib/browse_everything/driver/google_drive.rb +++ b/lib/browse_everything/driver/google_drive.rb @@ -1,7 +1,7 @@ module BrowseEverything module Driver class GoogleDrive < Base - require 'google/apis/drive_v2' + require 'google/apis/drive_v3' require 'signet' def icon @@ -18,7 +18,7 @@ def validate_config end def contents(path = '') - return to_enum(:contents, path) + return to_enum(:contents, path) unless block_given? default_params = {} page_token = nil begin From 9000a87893b466f38b0f329dec4bebc9f409ff69 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Fri, 9 Sep 2016 21:32:13 -0700 Subject: [PATCH 06/16] A notable piece of doc --- lib/browse_everything/driver/base.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/browse_everything/driver/base.rb b/lib/browse_everything/driver/base.rb index 4997632c..35d63df6 100644 --- a/lib/browse_everything/driver/base.rb +++ b/lib/browse_everything/driver/base.rb @@ -5,7 +5,7 @@ class Base attr_reader :config, :name attr_accessor :token - + def initialize(config,session_info={}) @config = config validate_config @@ -42,6 +42,7 @@ def authorized? false end + # @return [Array{URI,Object}] 2 elements: the URI, and session data to store under "#{provider_name}_data" def auth_link [] end From c82d65ac48f78e01faf0ec0c43caec51f424487d Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Fri, 9 Sep 2016 21:32:45 -0700 Subject: [PATCH 07/16] Remove unused local variable --- app/controllers/browse_everything_controller.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/browse_everything_controller.rb b/app/controllers/browse_everything_controller.rb index 2d3743eb..0b4d78a0 100644 --- a/app/controllers/browse_everything_controller.rb +++ b/app/controllers/browse_everything_controller.rb @@ -4,7 +4,7 @@ class BrowseEverythingController < ActionController::Base layout 'browse_everything' helper BrowseEverythingHelper - after_filter {session["#{provider_name}_token"] = provider.token unless provider.nil? } + after_filter { session["#{provider_name}_token"] = provider.token unless provider.nil? } def index render :layout => !request.xhr? @@ -15,8 +15,7 @@ def show end def auth - code = params[:code] - session["#{provider_name}_token"] = provider.connect(params,session["#{provider_name}_data"]) + session["#{provider_name}_token"] = provider.connect(params, session["#{provider_name}_data"]) end def resolve From 0c96f772d9ffadd1cf3a88e31c963c74d5124d16 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Fri, 9 Sep 2016 21:55:48 -0700 Subject: [PATCH 08/16] Client expires now, not token Or at least, client answers `.expired?` and the token is just a hash. Without this, we get the error: ``` undefined method `expired?' for # ``` --- lib/browse_everything/driver/google_drive.rb | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/browse_everything/driver/google_drive.rb b/lib/browse_everything/driver/google_drive.rb index 42983372..6aa453b0 100644 --- a/lib/browse_everything/driver/google_drive.rb +++ b/lib/browse_everything/driver/google_drive.rb @@ -82,16 +82,11 @@ def drive private - def token_expired? - return true if token.nil? - token.expired? - end - def authorization return @auth_client unless @auth_client.nil? return nil unless token.present? auth_client.update_token!(token) - self.token = auth_client.fetch_access_token! if token_expired? + self.token = auth_client.fetch_access_token! if auth_client.expired? auth_client end From 09e5548e1c082ca74dcd433f842f0f16b0c9f2a5 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Fri, 9 Sep 2016 22:53:43 -0700 Subject: [PATCH 09/16] Update interrogation of file objects `#parents` returns an Array of Strings now, so they cannot be asked whether they are root or not. --- lib/browse_everything/driver/google_drive.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/browse_everything/driver/google_drive.rb b/lib/browse_everything/driver/google_drive.rb index 6aa453b0..35c5684b 100644 --- a/lib/browse_everything/driver/google_drive.rb +++ b/lib/browse_everything/driver/google_drive.rb @@ -26,8 +26,8 @@ def contents(path = '') default_params[:page_token] = page_token unless page_token.blank? response = drive.list_files(default_params) page_token = response.next_page_token - response.items.select do |file| - path.blank? ? (file['parents'].blank? || file['parents'].any?{|p| p['isRoot'] }) : true + response.files.select do |file| + path.blank? ? (file.parents.blank? || file.parents.any?{|p| p.id == 'root' }) : true end.each do |file| d = details(file, path) yield d if d From d1731b72af77d80c2965be86776e68ca70a174e1 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Sat, 10 Sep 2016 00:38:20 -0700 Subject: [PATCH 10/16] API v3 migration changes - Must specify field list to return values for intended consumption - Let's have a default order instead of... whatever. - `.parents` just returns an Array of String - Just in case we don't get a date value, failover to `DateTime.new` to avoid strftime failue in the template. Previously, returned files looked like: ```ruby @files= [#, ] ``` With the `fields` specified, now includes: ```ruby @files= [#, ``` We also get the important nextPageToken. --- lib/browse_everything/driver/google_drive.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/browse_everything/driver/google_drive.rb b/lib/browse_everything/driver/google_drive.rb index 35c5684b..fa346955 100644 --- a/lib/browse_everything/driver/google_drive.rb +++ b/lib/browse_everything/driver/google_drive.rb @@ -19,7 +19,11 @@ def validate_config def contents(path = '') return to_enum(:contents, path) unless block_given? - default_params = {} + default_params = { + order_by: 'folder,modifiedTime desc,name', + fields: 'nextPageToken,files(name,id,mimeType,size,modifiedTime,parents)' + # page_size: 100 + } page_token = nil begin default_params[:q] = "'#{path}' in parents" unless path.blank? @@ -27,7 +31,7 @@ def contents(path = '') response = drive.list_files(default_params) page_token = response.next_page_token response.files.select do |file| - path.blank? ? (file.parents.blank? || file.parents.any?{|p| p.id == 'root' }) : true + path.blank? ? (file.parents.blank? || file.parents.any?{|p| p == 'root' }) : true end.each do |file| d = details(file, path) yield d if d @@ -43,7 +47,7 @@ def details(file, path = '') "#{self.key}:#{file.id}", file.name, file.size.to_i, - file.modified_time, + file.modified_time || DateTime.new, mime_folder, mime_folder ? 'directory' : file.mime_type ) From 45fd6a0cdca92e95fc63698b1bae9823bc9746bd Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Mon, 26 Sep 2016 17:49:11 -0700 Subject: [PATCH 11/16] Test rails 5 and ruby 2.3 --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 34f1a320..836cc74c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,16 +14,20 @@ before_install: - "if [ $(phantomjs --version) != '2.1.1' ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi" - "phantomjs --version" rvm: - - 2.2 + - "2.2.2" +# rack 2 requires Ruby version >= 2.2.2 env: global: - NOKOGIRI_USE_SYSTEM_LIBRARIES=true matrix: - "RAILS_VERSION=4.1.10" - "RAILS_VERSION=4.2.1" + - "RAILS_VERSION=5.0.0.1" matrix: include: + - rvm: "2.3.0" + env: "RAILS_VERSION=5.0.0.1" - rvm: 2.1 env: "RAILS_VERSION=4.2.1" - rvm: 2.0 From f061c447f896e7b5277a2b4bd65d4b9c4025c852 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Tue, 27 Sep 2016 11:08:40 -0700 Subject: [PATCH 12/16] Target different file for test Old rails generate rdoc, rails 5 generates markdown, so this test could never succeed on all our target versions of rails, since the README would be different. Go for `Gemfile` instead. --- spec/features/select_files_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/select_files_spec.rb b/spec/features/select_files_spec.rb index 4e945cd5..1cf94303 100644 --- a/spec/features/select_files_spec.rb +++ b/spec/features/select_files_spec.rb @@ -13,7 +13,7 @@ it "selects files from the filesystem" do click_button('Browse') sleep(5) - click_link("README.rdoc") + click_link('Gemfile.lock') within(".modal-footer") do expect(page).to have_selector("span", text: "1 file selected") click_button("Submit") From b8995184ebeccfff13aa94439bd883ea923b7b2c Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Tue, 27 Sep 2016 16:29:33 -0700 Subject: [PATCH 13/16] Move filtering logic up from lower-level templates If the whole template is just going to skip itself anyway, don't bother calling `render` on the partial. --- app/views/browse_everything/_file.html.erb | 18 +++++++----------- app/views/browse_everything/_files.html.erb | 11 ++++------- app/views/browse_everything/index.html.erb | 2 +- 3 files changed, 12 insertions(+), 19 deletions(-) diff --git a/app/views/browse_everything/_file.html.erb b/app/views/browse_everything/_file.html.erb index 9620e486..8bea9020 100644 --- a/app/views/browse_everything/_file.html.erb +++ b/app/views/browse_everything/_file.html.erb @@ -1,13 +1,10 @@ -<% unless file.relative_parent_path? %> - - <% if file.container? || provider.config[:max_upload_file_size].blank? #never disable a folder or if no maximum is set - disabled = false - else - max_size = provider.config[:max_upload_file_size].to_i - disabled = file.size > max_size - end - %> - +<% if file.container? || provider.config[:max_upload_file_size].blank? # never disable a folder or if no maximum is set + disabled = false + else + max_size = provider.config[:max_upload_file_size].to_i + disabled = file.size > max_size + end +%> <% if disabled %> @@ -36,4 +33,3 @@ <%= file.mtime.strftime('%F %R') %> -<% end %> diff --git a/app/views/browse_everything/_files.html.erb b/app/views/browse_everything/_files.html.erb index 4fdf8b79..8b76872d 100644 --- a/app/views/browse_everything/_files.html.erb +++ b/app/views/browse_everything/_files.html.erb @@ -1,4 +1,3 @@ -<% if provider.present? %>
100% Complete @@ -14,11 +13,9 @@ Modified - <% provider.contents(browse_path).each_with_index do |file,index| %> - <% if is_acceptable?(file) %> - <%= render :partial => 'file', :locals => { :file => file, :index => index, - :path => browse_everything_engine.contents_path(provider_name,file.id), :parent => params[:parent] } %> - <% end %> + <% provider.contents(browse_path).each_with_index do |file, index| %> + <% next if file.relative_parent_path? %> + <%= render :partial => 'file', :locals => { :file => file, :index => index, + :path => browse_everything_engine.contents_path(provider_name, file.id), :parent => params[:parent] } %> <% end %> -<% end %> diff --git a/app/views/browse_everything/index.html.erb b/app/views/browse_everything/index.html.erb index c4583db0..181f802b 100644 --- a/app/views/browse_everything/index.html.erb +++ b/app/views/browse_everything/index.html.erb @@ -8,7 +8,7 @@ From 695d17ba774500c8407cb4c7cd2a4938492592dd Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Tue, 27 Sep 2016 18:36:31 -0700 Subject: [PATCH 14/16] Resolve last migration details --- lib/browse_everything/driver/google_drive.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/browse_everything/driver/google_drive.rb b/lib/browse_everything/driver/google_drive.rb index fa346955..b23fcbd7 100644 --- a/lib/browse_everything/driver/google_drive.rb +++ b/lib/browse_everything/driver/google_drive.rb @@ -21,7 +21,7 @@ def contents(path = '') return to_enum(:contents, path) unless block_given? default_params = { order_by: 'folder,modifiedTime desc,name', - fields: 'nextPageToken,files(name,id,mimeType,size,modifiedTime,parents)' + fields: 'nextPageToken,files(name,id,mimeType,size,modifiedTime,parents,web_content_link)' # page_size: 100 } page_token = nil @@ -41,7 +41,6 @@ def contents(path = '') def details(file, path = '') mime_folder = file.mime_type == 'application/vnd.google-apps.folder' - return unless file.web_content_link || mime_folder BrowseEverything::FileEntry.new( file.id, "#{self.key}:#{file.id}", @@ -55,7 +54,7 @@ def details(file, path = '') def link_for(id) file = drive.get_file(id) - auth_header = {'Authorization' => "Bearer #{client.authorization.access_token.to_s}"} + auth_header = { 'Authorization' => "Bearer #{auth_client.access_token}" } extras = { auth_header: auth_header, expires: 1.hour.from_now, From 37491dc6f6a631297c4d1342bf3dae90bd5db4f8 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Tue, 27 Sep 2016 18:50:56 -0700 Subject: [PATCH 15/16] Prevent every file from being labelled a directory Operator precedence, yo! --- lib/browse_everything/file_entry.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/browse_everything/file_entry.rb b/lib/browse_everything/file_entry.rb index 4ac375ce..1be4c0ca 100644 --- a/lib/browse_everything/file_entry.rb +++ b/lib/browse_everything/file_entry.rb @@ -9,13 +9,13 @@ def initialize(id, location, name, size, mtime, container, type=nil) @size = size @mtime = mtime @container = container - @type = type || @container ? 'application/x-directory' : Rack::Mime.mime_type(File.extname(name)) + @type = type || (@container ? 'application/x-directory' : Rack::Mime.mime_type(File.extname(name))) end def relative_parent_path? name =~ /^\.\.?$/ ? true : false end - + def container? @container end From 5a3a656c3df0364e42fe83d36ba214b3e2213b5a Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Tue, 27 Sep 2016 18:58:59 -0700 Subject: [PATCH 16/16] Condense repeated clumsy logic Even if this was copied, it is fugly and redundant. This is exactly the same boolean logic in two readable lines. --- app/helpers/browse_everything_helper.rb | 33 +++++++++---------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/app/helpers/browse_everything_helper.rb b/app/helpers/browse_everything_helper.rb index ba6467a8..44fd0cb6 100644 --- a/app/helpers/browse_everything_helper.rb +++ b/app/helpers/browse_everything_helper.rb @@ -1,36 +1,25 @@ module BrowseEverythingHelper - - def array_to_hidden_fields(array,key) + def array_to_hidden_fields(array, key) fields = array.to_query(key).split(Rack::Utils::DEFAULT_SEP).collect do |pair| - key,value=pair.split('=', 2).map { |str| Rack::Utils.unescape(str) } - hidden_field_tag(key,value) + key, value = pair.split('=', 2).map { |str| Rack::Utils.unescape(str) } + hidden_field_tag(key, value) end fields.join("\n").html_safe end - # Extracted from Rack::Mime 1.5.2 for use with earlier versions - # of Rack/Rails + # Extracted from Rack::Mime 1.5.2 for use with earlier versions of Rack/Rails + # @param [String] value + # @param [String] matcher + # @return [TrueClass,FalseClass] def mime_match?(value, matcher) v1, v2 = value.split('/', 2) m1, m2 = matcher.split('/', 2) - - if m1 == '*' - if m2.nil? || m2 == '*' - return true - elsif m2 == v2 - return true - else - return false - end - end - - return false if v1 != m1 - - return true if m2.nil? || m2 == '*' - - m2 == v2 + return false if m1 != '*' && v1 != m1 + m2.nil? || m2 == '*' || m2 == v2 end + # @param [BrowseEverything::FileEntry] file + # @return [TrueClass,FalseClass] def is_acceptable?(file) acceptable = params[:accept] || '*/*' acceptable_types = acceptable.split(/,\s*/)