Skip to content

Commit

Permalink
Refactoring for container media types
Browse files Browse the repository at this point in the history
  • Loading branch information
jrgriffiniii committed Dec 16, 2019
1 parent bff4793 commit 4e096e4
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 19 deletions.
6 changes: 6 additions & 0 deletions app/assets/javascripts/browse_everything/behavior.js
Expand Up @@ -32,6 +32,9 @@ BrowseEverythingForm.prototype.appendFileInputElements = function(resource) {

var provider_input = $("<input type='hidden' class='ev-url' name='browse_everything[selected_files][][provider]'/>").val( resource.$element.data('ev-provider') );
this.$form.append(provider_input);

var type_input = $("<input type='hidden' class='ev-url' name='browse_everything[selected_files][][type]'/>").val( resource.$element.data('ev-type') );
this.$form.append(type_input);
};

/**
Expand All @@ -58,6 +61,9 @@ BrowseEverythingForm.prototype.appendDirectoryInputElements = function(resource)
// Add the provider
var provider_input = $("<input type='hidden' class='ev-url' name='browse_everything[selected_directories][][provider]'/>").val( resource.$element.data('ev-provider') );
this.$form.append(provider_input);

var type_input = $("<input type='hidden' class='ev-url' name='browse_everything[selected_directories][][type]'/>").val( resource.$element.data('ev-type') );
this.$form.append(type_input);
};

/**
Expand Down
30 changes: 23 additions & 7 deletions app/services/browser_factory.rb
Expand Up @@ -2,18 +2,34 @@

class BrowserFactory
class << self
def build(session:, url_options:)
browser = BrowseEverything::Browser.new(url_options)
browser.providers.each_value do |provider_handler|
# Construct a Browser object with session information
# @param [ActionDispatch::Session] session
# @param [Hash] url_options the options for the URL generation in the provider
# @return [Browser]
def build(session: nil, url_options: {})
new_browser = browser(url_options: url_options)
return new_browser if session.nil?

new_browser.providers.each_value do |provider_handler|
# The authentication token must be set here
provider_session = BrowseEverythingSession::ProviderSession.for(session: session, name: provider_handler.key.to_sym)
provider_name = provider_handler.key
provider_session = BrowseEverythingSession::ProviderSession.for(session: session, name: provider_name.to_sym)
provider_handler.token = provider_session.token if provider_session.token
end
browser
new_browser
end

def for(name:, url_options: {})
browser(url_options: url_options).providers[name]
# Retrieve an existing Provider by its name
# @param [String] name the name of the provider
# @param [ActionDispatch::Session] session
# @param [Hash] url_options the options for the URL generation in the provider
# @return [BrowseEverything::Driver::Base]
#
# @todo This should be renamed to #provider_for
def for(name:, session: nil, url_options: {})
current_browser = build(session: session, url_options: url_options)
provider = current_browser.providers[name]
provider || BrowseEverything::Driver::Base.new(url_options: url_options)
end
end

Expand Down
1 change: 1 addition & 0 deletions app/views/browse_everything/_files.html.erb
Expand Up @@ -30,6 +30,7 @@
data-ev-file-date="<%= file.mtime %>"
<%= file.container? ? 'data-ev-container' : '' %>
data-ev-provider="<%= file.provider_name %>"
data-ev-type="<%= file.type %>"
data-tt-id="<%= path %>"
data-tt-parent-id="<%= parent %>"
data-tt-branch="<%= file.container? ? 'true' : 'false' %>">
Expand Down
14 changes: 12 additions & 2 deletions lib/browse_everything/driver/base.rb
Expand Up @@ -2,6 +2,9 @@

module BrowseEverything
module Driver
DEFAULT_CONTAINER_MEDIA_TYPE = 'application/x-directory'
DEFAULT_BYTESTREAM_MEDIA_TYPE = 'application/octet-stream'

# Abstract class for provider classes
class Base
include BrowseEverything::Engine.routes.url_helpers
Expand Down Expand Up @@ -44,13 +47,20 @@ def mime_type(extname)
# Generate the default content media/MIME type for a container resource
# @return [String]
def container_mime_type
'application/x-directory'
DEFAULT_CONTAINER_MEDIA_TYPE
end

# Generate the default content media/MIME type for a bytestream
# @return [String]
def bytestream_mime_type
DEFAULT_BYTESTREAM_MEDIA_TYPE
end
alias file_mime_type bytestream_mime_type
end

# Constructor
# @param config_values [Hash] configuration for the driver
def initialize(config_values)
def initialize(config_values = {})
@config = config_values
@sorter = self.class.sorter || self.class.default_sorter
validate_config
Expand Down
5 changes: 1 addition & 4 deletions lib/browse_everything/driver/file_system.rb
Expand Up @@ -3,10 +3,6 @@
module BrowseEverything
module Driver
class FileSystem < Base
def self.container_mime_type
'application/x-directory'
end

def icon
'file'
end
Expand Down Expand Up @@ -79,6 +75,7 @@ def link_for(path, _file_name = '', _file_size = 0, _container = false, _access_
file_size: file_size,
container: container,
directory: container,
type: container ? self.class.container_mime_type : self.class.file_mime_type,
provider: 'file_system'
}

Expand Down
1 change: 1 addition & 0 deletions lib/browse_everything/driver/google_drive.rb
Expand Up @@ -222,6 +222,7 @@ def link_for(id, file_name = '', file_size = 0, container = false, access_token
file_name: file_name,
file_size: file_size,
container: container,
type: container ? self.class.container_mime_type : self.class.file_mime_type,
provider: :google_drive,
auth_token: access_token,
auth_header: auth_header
Expand Down
7 changes: 1 addition & 6 deletions lib/browse_everything/file_entry.rb
Expand Up @@ -29,12 +29,7 @@ def container?
end

def provider
return @provider unless @provider.nil?

provider = BrowserFactory.for(name: provider_name)
return BrowseEverything::Driver::Base.new({}) if provider.nil?

@provider = provider
@provider ||= BrowserFactory.for(name: provider_name)
end

def mime_type
Expand Down

0 comments on commit 4e096e4

Please sign in to comment.