browse-everything 0.10.5 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +16 -0
  4. data/.rubocop_todo.yml +149 -0
  5. data/.travis.yml +5 -6
  6. data/Rakefile +2 -2
  7. data/app/controllers/browse_everything_controller.rb +19 -22
  8. data/app/helpers/bootstrap_version_helper.rb +9 -11
  9. data/app/helpers/browse_everything_helper.rb +11 -22
  10. data/app/views/browse_everything/_file.html.erb +7 -11
  11. data/app/views/browse_everything/_files.html.erb +4 -7
  12. data/app/views/browse_everything/index.html.erb +1 -1
  13. data/browse-everything.gemspec +37 -34
  14. data/config/routes.rb +3 -3
  15. data/lib/browse-everything.rb +1 -1
  16. data/lib/browse_everything.rb +9 -8
  17. data/lib/browse_everything/browser.rb +4 -4
  18. data/lib/browse_everything/driver/base.rb +14 -14
  19. data/lib/browse_everything/driver/box.rb +48 -59
  20. data/lib/browse_everything/driver/dropbox.rb +10 -11
  21. data/lib/browse_everything/driver/file_system.rb +19 -24
  22. data/lib/browse_everything/driver/google_drive.rb +58 -82
  23. data/lib/browse_everything/driver/s3.rb +87 -0
  24. data/lib/browse_everything/driver/sky_drive.rb +41 -47
  25. data/lib/browse_everything/engine.rb +2 -2
  26. data/lib/browse_everything/file_entry.rb +3 -3
  27. data/lib/browse_everything/retriever.rb +19 -20
  28. data/lib/browse_everything/version.rb +1 -1
  29. data/lib/generators/browse_everything/assets_generator.rb +2 -4
  30. data/lib/generators/browse_everything/config_generator.rb +12 -12
  31. data/lib/generators/browse_everything/install_generator.rb +2 -4
  32. data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +6 -0
  33. data/spec/features/select_files_spec.rb +12 -12
  34. data/spec/features/test_compiling_stylesheets_spec.rb +2 -2
  35. data/spec/helper/browse_everything_controller_helper_spec.rb +8 -8
  36. data/spec/javascripts/jasmine_spec.rb +5 -5
  37. data/spec/javascripts/support/jasmine_helper.rb +9 -9
  38. data/spec/spec_helper.rb +26 -23
  39. data/spec/support/app/controllers/file_handler_controller.rb +3 -3
  40. data/spec/support/rake.rb +1 -1
  41. data/spec/test_app_templates/lib/generators/test_app_generator.rb +21 -22
  42. data/spec/unit/base_spec.rb +6 -6
  43. data/spec/unit/browse_everything_helper_spec.rb +9 -9
  44. data/spec/unit/browser_spec.rb +19 -19
  45. data/spec/unit/dropbox_spec.rb +44 -43
  46. data/spec/unit/file_entry_spec.rb +31 -31
  47. data/spec/unit/file_system_spec.rb +26 -26
  48. data/spec/unit/retriever_spec.rb +42 -43
  49. data/spec/unit/s3_spec.rb +77 -0
  50. data/spec/unit/sky_drive_spec.rb +31 -31
  51. data/spec/views/browse_everything/_file.html.erb_spec.rb +37 -37
  52. data/tasks/ci.rake +3 -3
  53. metadata +52 -7
  54. data/app/.DS_Store +0 -0
  55. data/app/views/.DS_Store +0 -0
@@ -2,7 +2,7 @@ module BrowseEverything
2
2
  class Engine < ::Rails::Engine
3
3
  config.assets.paths << config.root.join('vendor', 'assets', 'javascripts')
4
4
  config.assets.paths << config.root.join('vendor', 'assets', 'stylesheets')
5
- config.assets.precompile += %w{ browse_everything.js }
6
- config.assets.precompile += %w{ browse_everything.css }
5
+ config.assets.precompile += %w(browse_everything.js)
6
+ config.assets.precompile += %w(browse_everything.css)
7
7
  end
8
8
  end
@@ -2,20 +2,20 @@ module BrowseEverything
2
2
  class FileEntry
3
3
  attr_reader :id, :location, :name, :size, :mtime, :type
4
4
 
5
- def initialize(id, location, name, size, mtime, container, type=nil)
5
+ def initialize(id, location, name, size, mtime, container, type = nil)
6
6
  @id = id
7
7
  @location = location
8
8
  @name = name
9
9
  @size = size
10
10
  @mtime = mtime
11
11
  @container = container
12
- @type = type || @container ? 'application/x-directory' : Rack::Mime.mime_type(File.extname(name))
12
+ @type = type || (@container ? 'application/x-directory' : Rack::Mime.mime_type(File.extname(name)))
13
13
  end
14
14
 
15
15
  def relative_parent_path?
16
16
  name =~ /^\.\.?$/ ? true : false
17
17
  end
18
-
18
+
19
19
  def container?
20
20
  @container
21
21
  end
@@ -4,38 +4,38 @@ require 'tempfile'
4
4
  module BrowseEverything
5
5
  class Retriever
6
6
  attr_accessor :chunk_size
7
-
7
+
8
8
  def initialize
9
9
  @chunk_size = 16384
10
10
  end
11
-
12
- def download(spec, target=nil)
11
+
12
+ def download(spec, target = nil)
13
13
  if target.nil?
14
14
  ext = File.extname(spec['file_name'])
15
- base = File.basename(spec['file_name'],ext)
16
- target = Dir::Tmpname.create([base,ext]) {}
15
+ base = File.basename(spec['file_name'], ext)
16
+ target = Dir::Tmpname.create([base, ext]) {}
17
17
  end
18
-
18
+
19
19
  File.open(target, 'wb') do |output|
20
- self.retrieve(spec) do |chunk, retrieved, total|
21
- output.write(chunk)
20
+ retrieve(spec) do |chunk, retrieved, total|
21
+ output.write(chunk)
22
22
  yield(target, retrieved, total) if block_given?
23
23
  end
24
24
  end
25
- return target
25
+ target
26
26
  end
27
-
28
- def retrieve(spec, &block)
29
- if spec.has_key?('expires') and Time.parse(spec['expires']) < Time.now
27
+
28
+ def retrieve(spec)
29
+ if spec.key?('expires') && Time.parse(spec['expires']) < Time.now
30
30
  raise ArgumentError, "Download spec expired at #{spec['expires']}"
31
31
  end
32
-
32
+
33
33
  url = Addressable::URI.parse(spec['url'])
34
34
  retrieved = 0
35
35
  case url.scheme
36
36
  when 'file'
37
- File.open(url.path,'rb') do |f|
38
- while not f.eof?
37
+ File.open(url.path, 'rb') do |f|
38
+ until f.eof?
39
39
  chunk = f.read(chunk_size)
40
40
  retrieved += chunk.length
41
41
  yield(chunk, retrieved, spec['file_size'].to_i)
@@ -43,11 +43,11 @@ module BrowseEverything
43
43
  end
44
44
  when /https?/
45
45
  headers = spec['auth_header'] || {}
46
- headers.each_pair do |k,v|
47
- headers[k] = v.gsub(/\+/,' ')
46
+ headers.each_pair do |k, v|
47
+ headers[k] = v.tr('+', ' ')
48
48
  end
49
-
50
- HTTParty.get(url.to_s, headers: headers) do |chunk|
49
+
50
+ HTTParty.get(url.to_s, headers: headers) do |chunk|
51
51
  retrieved += chunk.length
52
52
  yield(chunk, retrieved, spec['file_size'].to_i)
53
53
  end
@@ -55,6 +55,5 @@ module BrowseEverything
55
55
  raise URI::BadURIError, "Unknown URI scheme: #{uri.scheme}"
56
56
  end
57
57
  end
58
-
59
58
  end
60
59
  end
@@ -1,3 +1,3 @@
1
1
  module BrowseEverything
2
- VERSION = "0.10.5"
2
+ VERSION = '0.11.0'.freeze
3
3
  end
@@ -2,13 +2,11 @@
2
2
  require 'rails/generators'
3
3
 
4
4
  class BrowseEverything::AssetsGenerator < Rails::Generators::Base
5
- desc """
6
- This generator installs the browse_everything CSS assets into your application
7
- """
5
+ desc 'This generator installs the browse_everything CSS assets into your application'
8
6
 
9
7
  source_root File.expand_path('../templates', __FILE__)
10
8
 
11
9
  def inject_css
12
- copy_file "browse_everything.scss", "app/assets/stylesheets/browse_everything.scss"
10
+ copy_file 'browse_everything.scss', 'app/assets/stylesheets/browse_everything.scss'
13
11
  end
14
12
  end
@@ -2,27 +2,27 @@
2
2
  require 'rails/generators'
3
3
 
4
4
  class BrowseEverything::ConfigGenerator < Rails::Generators::Base
5
- desc """
6
- This generator makes the following changes to your application:
7
- 1. Creates config/browse_everything_providers.yml with a placeholder value
8
- 2. Modifies your app's routes.rb to mount BrowseEverything at /browse
9
- """
5
+ desc <<-END_OF_DESC
6
+ This generator makes the following changes to your application:
7
+ 1. Creates config/browse_everything_providers.yml with a placeholder value
8
+ 2. Modifies your app's routes.rb to mount BrowseEverything at /browse
9
+ END_OF_DESC
10
10
  source_root File.expand_path('../templates', __FILE__)
11
11
 
12
12
  def inject_routes
13
- insert_into_file "config/routes.rb", :after => ".draw do" do
14
- %{
15
- mount BrowseEverything::Engine => '/browse'}
16
- end
13
+ insert_into_file 'config/routes.rb', after: '.draw do' do
14
+ %(
15
+ mount BrowseEverything::Engine => '/browse')
16
+ end
17
17
  end
18
18
 
19
19
  def copy_example_config
20
- copy_file "browse_everything_providers.yml.example", "config/browse_everything_providers.yml"
20
+ copy_file 'browse_everything_providers.yml.example', 'config/browse_everything_providers.yml'
21
21
  end
22
22
 
23
23
  def insert_file_system_path
24
- insert_into_file "config/browse_everything_providers.yml", :before => "# dropbox:" do
25
- YAML.dump({ 'file_system' => { :home => Rails.root.to_s }})
24
+ insert_into_file 'config/browse_everything_providers.yml', before: '# dropbox:' do
25
+ YAML.dump('file_system' => { home: Rails.root.to_s })
26
26
  end
27
27
  end
28
28
  end
@@ -2,11 +2,9 @@
2
2
  require 'rails/generators'
3
3
 
4
4
  class BrowseEverything::InstallGenerator < Rails::Generators::Base
5
- class_option :'skip-assets', type: :boolean, default: false, desc: "Skip generating javascript and css assets into the application"
5
+ class_option :'skip-assets', type: :boolean, default: false, desc: 'Skip generating javascript and css assets into the application'
6
6
 
7
- desc """
8
- This generator installs the browse everything configuration and assets into your application
9
- """
7
+ desc 'This generator installs the browse everything configuration and assets into your application'
10
8
 
11
9
  source_root File.expand_path('../templates', __FILE__)
12
10
 
@@ -11,6 +11,12 @@
11
11
  # google_drive:
12
12
  # :client_id: YOUR_GOOGLE_API_CLIENT_ID
13
13
  # :client_secret: YOUR_GOOGLE_API_CLIENT_SECRET
14
+ # s3:
15
+ # :app_key: YOUR_AWS_S3_KEY
16
+ # :app_secret: YOUR_AWS_S3_SECRET
17
+ # :bucket: YOUR_AWS_S3_BUCKET
18
+ # :region: YOUR_AWS_S3_REGION # default: us-east-1
19
+ # :signed_url: true # set to false for public urls
14
20
  # sky_drive:
15
21
  # :client_id: YOUR_MS_LIVE_CONNECT_CLIENT_ID
16
22
  # :client_secret: YOUR_MS_LIVE_CONNECT_CLIENT_SECRET
@@ -1,6 +1,6 @@
1
1
  require 'capybara/poltergeist'
2
2
 
3
- describe "Choosing files", :type => :feature do
3
+ describe 'Choosing files', type: :feature do
4
4
  before do
5
5
  Capybara.register_driver :poltergeist do |app|
6
6
  Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: 90)
@@ -9,27 +9,27 @@ describe "Choosing files", :type => :feature do
9
9
  visit '/'
10
10
  end
11
11
 
12
- shared_examples "browseable files" do
13
- it "selects files from the filesystem" do
12
+ shared_examples 'browseable files' do
13
+ it 'selects files from the filesystem' do
14
14
  click_button('Browse')
15
15
  sleep(5)
16
- click_link("README.rdoc")
17
- within(".modal-footer") do
18
- expect(page).to have_selector("span", text: "1 file selected")
19
- click_button("Submit")
16
+ click_link('Gemfile.lock')
17
+ within('.modal-footer') do
18
+ expect(page).to have_selector('span', text: '1 file selected')
19
+ click_button('Submit')
20
20
  end
21
21
  sleep(5)
22
- expect(page).to have_selector("#status", text: "1 items selected")
22
+ expect(page).to have_selector('#status', text: '1 items selected')
23
23
  end
24
24
  end
25
25
 
26
- context "when Turbolinks are enabled" do
26
+ context 'when Turbolinks are enabled' do
27
27
  before { click_link('Enter Test App (Turbolinks)') }
28
- it_behaves_like "browseable files"
28
+ it_behaves_like 'browseable files'
29
29
  end
30
30
 
31
- context "when Turbolinks are disabled" do
31
+ context 'when Turbolinks are disabled' do
32
32
  before { click_link('Enter Test App (No Turbolinks)') }
33
- it_behaves_like "browseable files"
33
+ it_behaves_like 'browseable files'
34
34
  end
35
35
  end
@@ -1,5 +1,5 @@
1
- describe "Compiling the stylesheets", :type => :feature do
2
- it "should not raise errors" do
1
+ describe 'Compiling the stylesheets', type: :feature do
2
+ it 'should not raise errors' do
3
3
  visit '/'
4
4
  expect(page).not_to have_content 'Sass::SyntaxError'
5
5
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper',__FILE__)
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
2
 
3
3
  include BrowserConfigHelper
4
4
 
@@ -6,7 +6,7 @@ describe BrowseEverythingController, type: :controller do
6
6
  before(:all) { stub_configuration }
7
7
  after(:all) { unstub_configuration }
8
8
 
9
- let(:helper_context) {controller.view_context}
9
+ let(:helper_context) { controller.view_context }
10
10
  let(:browser) { BrowseEverything::Browser.new(url_options) }
11
11
 
12
12
  before do
@@ -16,9 +16,9 @@ describe BrowseEverythingController, type: :controller do
16
16
  context 'dropbox' do
17
17
  let(:provider) { browser.providers['dropbox'] }
18
18
 
19
- describe "auth_link" do
20
- subject {helper_context.auth_link}
21
- it "has a single state" do
19
+ describe 'auth_link' do
20
+ subject { helper_context.auth_link }
21
+ it 'has a single state' do
22
22
  expect(subject.scan(/state/).length).to eq 1
23
23
  end
24
24
  end
@@ -27,9 +27,9 @@ describe BrowseEverythingController, type: :controller do
27
27
  context 'box' do
28
28
  let(:provider) { browser.providers['box'] }
29
29
 
30
- describe "auth_link" do
31
- subject {helper_context.auth_link}
32
- it "has a single state" do
30
+ describe 'auth_link' do
31
+ subject { helper_context.auth_link }
32
+ it 'has a single state' do
33
33
  expect(subject.scan(/state/).length).to eq 1
34
34
  end
35
35
  end
@@ -2,15 +2,15 @@ require 'rake'
2
2
 
3
3
  # Run the jasmine tests by running the jasmine:ci rake command and parses the output for failures.
4
4
  # The spec will fail if any jasmine tests fails.
5
- describe "Jasmine" do
6
- it "expects all jasmine tests to pass" do
5
+ describe 'Jasmine' do
6
+ it 'expects all jasmine tests to pass' do
7
7
  load_rake_environment ["#{jasmine_path}/lib/jasmine/tasks/jasmine.rake"]
8
8
  jasmine_out = run_task 'jasmine:ci'
9
- unless jasmine_out.include? "0 failures"
10
- puts "Some of the Jasmine tests failed"
9
+ unless jasmine_out.include? '0 failures'
10
+ puts 'Some of the Jasmine tests failed'
11
11
  puts jasmine_out
12
12
  end
13
- expect(jasmine_out).to include "0 failures"
13
+ expect(jasmine_out).to include '0 failures'
14
14
  end
15
15
  end
16
16
 
@@ -1,15 +1,15 @@
1
- #Use this file to set/override Jasmine configuration options
2
- #You can remove it if you don't need it.
3
- #This file is loaded *after* jasmine.yml is interpreted.
1
+ # Use this file to set/override Jasmine configuration options
2
+ # You can remove it if you don't need it.
3
+ # This file is loaded *after* jasmine.yml is interpreted.
4
4
  #
5
- #Example: using a different boot file.
6
- #Jasmine.configure do |config|
5
+ # Example: using a different boot file.
6
+ # Jasmine.configure do |config|
7
7
  # config.boot_dir = '/absolute/path/to/boot_dir'
8
8
  # config.boot_files = lambda { ['/absolute/path/to/boot_dir/file.js'] }
9
- #end
9
+ # end
10
10
  #
11
- #Example: prevent PhantomJS auto install, uses PhantomJS already on your path.
12
- #Jasmine.configure do |config|
11
+ # Example: prevent PhantomJS auto install, uses PhantomJS already on your path.
12
+ # Jasmine.configure do |config|
13
13
  # config.prevent_phantom_js_auto_install = true
14
- #end
14
+ # end
15
15
  #
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'engine_cart'
2
- require File.expand_path("config/environment", EngineCart.destination)
2
+ require File.expand_path('config/environment', EngineCart.destination)
3
3
  require 'rspec'
4
4
  require 'rspec/rails'
5
5
  require 'rspec/its'
@@ -15,7 +15,7 @@ Coveralls.wear!
15
15
  EngineCart.load_application!
16
16
 
17
17
  SimpleCov.start do
18
- add_filter "/spec/"
18
+ add_filter '/spec/'
19
19
  end
20
20
 
21
21
  VCR.configure do |c|
@@ -45,27 +45,30 @@ module BrowserConfigHelper
45
45
  end
46
46
 
47
47
  def stub_configuration
48
- BrowseEverything.configure({
49
- "file_system" => {
50
- home: File.expand_path('../fixtures/file_system',__FILE__)
51
- },
52
- "box" => {
53
- client_id: "BoxClientId",
54
- client_secret: "BoxClientSecret"
55
- },
56
- "dropbox" => {
57
- app_key: "DropboxAppKey",
58
- app_secret: "DropboxAppSecret"
59
- },
60
- "google_drive" => {
61
- client_id: "GoogleClientId",
62
- client_secret: "GoogleClientSecret"
63
- },
64
- "sky_drive" => {
65
- client_id: "SkyDriveClientId",
66
- client_secret: "SkyDriveClientSecret"
67
- }
68
- })
48
+ BrowseEverything.configure('file_system' => {
49
+ home: File.expand_path('../fixtures/file_system', __FILE__)
50
+ },
51
+ 'box' => {
52
+ client_id: 'BoxClientId',
53
+ client_secret: 'BoxClientSecret'
54
+ },
55
+ 'dropbox' => {
56
+ app_key: 'DropboxAppKey',
57
+ app_secret: 'DropboxAppSecret'
58
+ },
59
+ 'google_drive' => {
60
+ client_id: 'GoogleClientId',
61
+ client_secret: 'GoogleClientSecret'
62
+ },
63
+ 'sky_drive' => {
64
+ client_id: 'SkyDriveClientId',
65
+ client_secret: 'SkyDriveClientSecret'
66
+ },
67
+ 's3' => {
68
+ app_key: 'S3AppKey',
69
+ app_secret: 'S3AppSecret',
70
+ bucket: 's3.bucket'
71
+ })
69
72
  end
70
73
 
71
74
  def unstub_configuration
@@ -4,8 +4,8 @@ class FileHandlerController < ApplicationController
4
4
 
5
5
  def main
6
6
  end
7
-
7
+
8
8
  def update
9
- render :json => params[:selected_files].to_json
9
+ render json: params[:selected_files].to_json
10
10
  end
11
- end
11
+ end
data/spec/support/rake.rb CHANGED
@@ -5,7 +5,7 @@ module RakeHelper
5
5
  @rake = Rake::Application.new
6
6
  Rake.application = @rake
7
7
  Rake::Task.define_task(:environment)
8
- files.each {|file| load file}
8
+ files.each { |file| load file }
9
9
  end
10
10
 
11
11
  def run_task(task)
@@ -1,47 +1,46 @@
1
1
  require 'rails/generators'
2
2
 
3
3
  class TestAppGenerator < Rails::Generators::Base
4
- source_root File.expand_path("../../../../spec/support", __FILE__)
5
-
4
+ source_root File.expand_path('../../../../spec/support', __FILE__)
5
+
6
6
  def run_config_generator
7
- generate "browse_everything:config"
7
+ generate 'browse_everything:config'
8
8
  end
9
-
9
+
10
10
  def inject_css
11
- copy_file File.expand_path("app/assets/stylesheets/application.css", ENV['RAILS_ROOT']), "app/assets/stylesheets/application.css.scss"
12
- remove_file "app/assets/stylesheets/application.css"
13
- insert_into_file "app/assets/stylesheets/application.css.scss", :after => '*/' do
14
- %{\n\n@import "browse_everything"}
11
+ copy_file File.expand_path('app/assets/stylesheets/application.css', ENV['RAILS_ROOT']), 'app/assets/stylesheets/application.css.scss'
12
+ remove_file 'app/assets/stylesheets/application.css'
13
+ insert_into_file 'app/assets/stylesheets/application.css.scss', after: '*/' do
14
+ %(\n\n@import "browse_everything")
15
15
  end
16
16
  end
17
-
17
+
18
18
  def inject_javascript
19
- insert_into_file "app/assets/javascripts/application.js", :after => '//= require_tree .' do
19
+ insert_into_file 'app/assets/javascripts/application.js', after: '//= require_tree .' do
20
20
  "\n//= require browse_everything"
21
21
  end
22
22
  end
23
-
23
+
24
24
  def inject_application
25
- insert_into_file "config/application.rb", :after => 'Rails::Application' do
25
+ insert_into_file 'config/application.rb', after: 'Rails::Application' do
26
26
  "\nconfig.autoload_paths+=[File.join(Rails.root,'../../lib')]"
27
27
  end
28
28
  end
29
-
29
+
30
30
  def inject_routes
31
- insert_into_file "config/routes.rb", :after => ".draw do" do
32
- %{
33
-
31
+ insert_into_file 'config/routes.rb', after: '.draw do' do
32
+ %(
33
+
34
34
  root :to => "file_handler#index"
35
35
  get '/main', :to => "file_handler#main"
36
36
  post '/file', :to => "file_handler#update"
37
- }
37
+ )
38
38
  end
39
39
  end
40
-
40
+
41
41
  def create_test_route
42
- copy_file "app/controllers/file_handler_controller.rb", "app/controllers/file_handler_controller.rb"
43
- copy_file "app/views/file_handler/main.html.erb", "app/views/file_handler/main.html.erb"
44
- copy_file "app/views/file_handler/index.html.erb", "app/views/file_handler/index.html.erb"
42
+ copy_file 'app/controllers/file_handler_controller.rb', 'app/controllers/file_handler_controller.rb'
43
+ copy_file 'app/views/file_handler/main.html.erb', 'app/views/file_handler/main.html.erb'
44
+ copy_file 'app/views/file_handler/index.html.erb', 'app/views/file_handler/index.html.erb'
45
45
  end
46
-
47
46
  end