browse-everything 0.10.5 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
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