diff --git a/app/controllers/concerns/browse_everything/parameters.rb b/app/controllers/concerns/browse_everything/parameters.rb index 44c2a1a1..06fca1f0 100644 --- a/app/controllers/concerns/browse_everything/parameters.rb +++ b/app/controllers/concerns/browse_everything/parameters.rb @@ -34,7 +34,8 @@ def selected_files return [] unless selected_params values = selected_params.values.uniq - values.map { |value| BrowseEverything::Resource.new(value) } + selected_resources = values.map { |value| BrowseEverything::Resource.new(value) } + selected_resources.reject(&:hidden?) end # Determine whether or not cloud service files are being uploaded diff --git a/browse-everything.gemspec b/browse-everything.gemspec index 72068b39..fb657029 100644 --- a/browse-everything.gemspec +++ b/browse-everything.gemspec @@ -25,7 +25,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'google-api-client', '~> 0.23' spec.add_dependency 'google_drive', '~> 2.1' spec.add_dependency 'googleauth', '0.6.6' - spec.add_dependency 'puma', '~> 3.11' + spec.add_dependency 'puma', '< 4.0' spec.add_dependency 'rails', '>= 4.2' spec.add_dependency 'ruby-box' spec.add_dependency 'signet', '~> 0.8' diff --git a/lib/browse_everything/driver/box.rb b/lib/browse_everything/driver/box.rb index 97da3095..76fe42b5 100644 --- a/lib/browse_everything/driver/box.rb +++ b/lib/browse_everything/driver/box.rb @@ -45,6 +45,7 @@ def contents(id = '', _page_index = 0) box_client.folder_by_id(id) end + values = [] folder.items(ITEM_LIMIT, 0, %w[name size created_at]).collect do |f| values << directory_entry(f) end diff --git a/lib/browse_everything/driver/file_system.rb b/lib/browse_everything/driver/file_system.rb index 96438b42..6bf2e224 100644 --- a/lib/browse_everything/driver/file_system.rb +++ b/lib/browse_everything/driver/file_system.rb @@ -43,6 +43,7 @@ def link_for(path) end entries else + return [] if hidden?(full_path) file_size = file_size(full_path) [["file://#{full_path}", { file_name: File.basename(path), file_size: file_size, directory: false }]] end @@ -57,7 +58,7 @@ def authorized? # @param display [String] display label for the resource # @return [BrowseEverything::FileEntry] def details(path, display = File.basename(path)) - return nil unless File.exist? path + return unless File.exist?(path) info = File::Stat.new(path) BrowseEverything::FileEntry.new( make_pathname(path), @@ -77,7 +78,7 @@ def details(path, display = File.basename(path)) # @return [Array] def make_directory_entry(real_path) pattern = File.join(real_path, '*') - Dir[pattern].collect { |f| details(f) } + Dir.glob(pattern).collect { |f| details(f) } end def make_pathname(path) @@ -93,6 +94,13 @@ def file_size(path) Rails.logger.error "Failed to find the file size for #{path}: #{error}" 0 end + + # Determines whether or not a file entry is hidden + # @param [String] path + # @return [Boolean] + def hidden?(path) + path =~ /^\..+/ + end end end end diff --git a/lib/browse_everything/resource.rb b/lib/browse_everything/resource.rb index 765e765a..753d8080 100644 --- a/lib/browse_everything/resource.rb +++ b/lib/browse_everything/resource.rb @@ -12,13 +12,18 @@ def path uri end + def file? + url =~ /^file\:/ + end + # Determine whether or not this file is a cloud resource # @return [Boolean] def cloud_file? - return false if url.nil? + url =~ /^https?\:/ + end - m = /^https?\:/.match(url) - !m.nil? + def hidden? + file? && path =~ /^\./ end private diff --git a/spec/fixtures/file_system/.hidden.txt b/spec/fixtures/file_system/.hidden.txt new file mode 100644 index 00000000..e69de29b diff --git a/spec/lib/browse_everything/driver/file_system_spec.rb b/spec/lib/browse_everything/driver/file_system_spec.rb index ca88bcce..1a105370 100644 --- a/spec/lib/browse_everything/driver/file_system_spec.rb +++ b/spec/lib/browse_everything/driver/file_system_spec.rb @@ -55,6 +55,14 @@ its(:type) { is_expected.to eq('application/pdf') } specify { is_expected.not_to be_container } end + + context 'when there is a hidden file' do + it 'does not retrieve the file path' do + expect(contents.length).to eq 4 + file_entry_names = contents.map(&:name) + expect(file_entry_names).not_to include '.hidden.txt' + end + end end context 'when there is a subdirectory' do