From bff47932fa25932c69e33a4f26c43a0f64322f03 Mon Sep 17 00:00:00 2001 From: GriffinJ Date: Fri, 9 Aug 2019 12:50:17 -0400 Subject: [PATCH] Restructuring the resolution of container resources for directories Fixing the Controller suite --- .rubocop.yml | 4 + .../javascripts/browse_everything/behavior.js | 59 ++++++++++-- .../browse_everything_controller.rb | 10 +- app/views/browse_everything/_files.html.erb | 60 +++++++++++- lib/browse_everything.rb | 14 ++- lib/browse_everything/browser.rb | 17 +++- lib/browse_everything/driver/base.rb | 13 +++ lib/browse_everything/driver/box.rb | 19 +++- lib/browse_everything/driver/file_system.rb | 92 ++++++++++++++----- lib/browse_everything/driver/google_drive.rb | 77 ++++++++++------ lib/browse_everything/driver/s3.rb | 11 ++- lib/browse_everything/file_entry.rb | 44 ++++++++- lib/browse_everything/retriever.rb | 82 ++++++++++++++++- .../browse_everything_controller_spec.rb | 25 ++++- .../driver/file_system_spec.rb | 27 ++++-- .../driver/google_drive_spec.rb | 8 +- 16 files changed, 467 insertions(+), 95 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 88c237bf..3363bb79 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -29,6 +29,10 @@ Metrics/BlockLength: Exclude: - '*.gemspec' - 'spec/**/*' +Metrics/ClassLength: + Exclude: + - 'lib/browse_everything/retriever.rb' + - 'lib/browse_everything/driver/google_drive.rb' Metrics/MethodLength: Exclude: - 'app/controllers/browse_everything_controller.rb' diff --git a/app/assets/javascripts/browse_everything/behavior.js b/app/assets/javascripts/browse_everything/behavior.js index a83a1e5b..e9ec801b 100644 --- a/app/assets/javascripts/browse_everything/behavior.js +++ b/app/assets/javascripts/browse_everything/behavior.js @@ -13,28 +13,51 @@ function BrowseEverythingForm(form) { * Append a hidden element for the form for a file entry * @param resource {BrowseEverythingResource} */ -BrowseEverythingForm.prototype.appendFileInputElement = function(resource) { +BrowseEverythingForm.prototype.appendFileInputElements = function(resource) { // Add the location - var hidden_input = $("").val(resource.getLocation()); - this.$form.append(hidden_input); + var location_input = $("").val(resource.getLocation()); + this.$form.append(location_input); // Add the name - var hidden_input = $("").val(resource.getName()); - this.$form.append(hidden_input); + var name_input = $("").val(resource.getName()); + this.$form.append(name_input); // Add the size - var hidden_input = $("").val(resource.getSize()); - this.$form.append(hidden_input); + var size_input = $("").val(resource.getSize()); + this.$form.append(size_input); + // Add the type + var type_input = $("").val(false); + this.$form.append(type_input); + + var provider_input = $("").val( resource.$element.data('ev-provider') ); + this.$form.append(provider_input); }; /** * Append a hidden element for the form for a directory entry * @param resource {BrowseEverythingResource} */ -BrowseEverythingForm.prototype.appendDirectoryInputElement = function(resource) { - var hidden_input = $("").val(resource.getLocation()); - this.$form.append(hidden_input); +BrowseEverythingForm.prototype.appendDirectoryInputElements = function(resource) { + // Add the location + var location_input = $("").val(resource.getLocation()); + this.$form.append(location_input); + + // Add the name + var name_input = $("").val(resource.getName()); + this.$form.append(name_input); + + // Add the size + var size_input = $("").val(resource.getSize()); + this.$form.append(size_input); + + // Add the type + var type_input = $("").val(true); + this.$form.append(type_input); + + // Add the provider + var provider_input = $("").val( resource.$element.data('ev-provider') ); + this.$form.append(provider_input); }; /** @@ -62,6 +85,22 @@ BrowseEverythingResource.prototype.getLocation = function () { return this.$element.data('ev-location'); }; +/* + * + * @return {string} + */ +BrowseEverythingResource.prototype.getName = function () { + return this.$element.data('ev-file-name'); +}; + +/* + * + * @return {string} + */ +BrowseEverythingResource.prototype.getSize = function () { + return this.$element.data('ev-file-size'); +}; + /* * Static factory method for building objects * @param element {Element|jQuery} diff --git a/app/controllers/browse_everything_controller.rb b/app/controllers/browse_everything_controller.rb index 5b83bc84..bb514ea6 100644 --- a/app/controllers/browse_everything_controller.rb +++ b/app/controllers/browse_everything_controller.rb @@ -81,24 +81,22 @@ def resolve selected_links = [] selected_directories = [] payload = {} - last_provider_key = nil selected_files.each do |file| - binding.pry location = file[:location] provider_key_value, id = location.split(/:/) provider_key = provider_key_value.to_sym + provider = browser.providers[provider_key] - values = browser.providers[provider_key].link_for(id, file[:name], file[:size]) + values = provider.link_for(id, file[:name], file[:size], file[:container] == "true") values.each do |value| (url, extra) = value result = { url: url } result.merge!(extra) unless extra.nil? selected_links << result unless result.fetch(:directory, false) + # These are being ignored selected_directories << result if result.fetch(:directory, false) && !selected_directories.include?(result) end - - last_provider_key = provider_key end payload = selected_links @@ -167,7 +165,7 @@ def provider_name # Hence, a Browser must be reinstantiated for each request using the state provided in the Rails session # @return [BrowseEverything::Browser] def browser - BrowserFactory.build(session: session, url_options: url_options) + BrowseEverything.current_browser = BrowserFactory.build(session: session, url_options: url_options) end # Retrieves a cached provider, or, defaults to the first configured provider diff --git a/app/views/browse_everything/_files.html.erb b/app/views/browse_everything/_files.html.erb index d7164f18..f19c2d20 100644 --- a/app/views/browse_everything/_files.html.erb +++ b/app/views/browse_everything/_files.html.erb @@ -18,9 +18,67 @@ <% provider_contents.each_with_index do |file, index| %> <% next if file.nil? %> - <%= render partial: 'file', locals: { file: file, index: index, path: browse_everything_engine.contents_path(provider_name, file.id), parent: parent, disabled: disabled?(file: file) } %> <% path = browse_everything_engine.contents_path(provider_name, file.id) %> <% disabled = disabled?(file: file) %> + + + data-ev-provider="<%= file.provider_name %>" + data-tt-id="<%= path %>" + data-tt-parent-id="<%= parent %>" + data-tt-branch="<%= file.container? ? 'true' : 'false' %>"> + + + <% if disabled %> + + <%= file.container? ? ', folder' : ', file' %> + <% else %> + <%= link_to(path, class: 'ev-link') do %> +