Commit 7d64670
Changed files (6)
app
models
spec
app/jobs/download_from_drive_job.rb
@@ -2,34 +2,7 @@ class DownloadFromDriveJob < ActiveJob::Base
queue_as :default
def perform(user, params)
- Dir.mktmpdir do |dir|
- download_path = File.join(dir, params[:data][:title])
- execute(create_command(
- params[:data][:downloadUrl].strip,
- download_path,
- params[:accessToken]
- ))
- backup_file = BackupFile.new(user, File.new(download_path))
- backup_file.process_later(Program.stronglifts)
- end
- end
-
- private
-
- def create_command(download_url, download_path, access_token)
- command = <<-COMMAND
-curl '#{download_url}' \
--o '#{download_path}' \
--H 'Authorization: Bearer #{access_token}' \
--H 'Referer: http://stronglifters.dev/dashboard' \
--H 'Origin: http://stronglifters.dev' \
--H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36' \
---compressed
- COMMAND
- command
- end
-
- def execute(command)
- `#{command}`
+ backup_file = user.google_drive.download(params)
+ backup_file.process_later(Program.stronglifts)
end
end
app/models/google_drive.rb
@@ -0,0 +1,38 @@
+class GoogleDrive
+ attr_reader :user
+
+ def initialize(user)
+ @user = user
+ end
+
+ def download(params)
+ Dir.mktmpdir do |dir|
+ download_path = File.join(dir, params[:data][:title])
+ execute(create_command(
+ params[:data][:downloadUrl].strip,
+ download_path,
+ params[:accessToken]
+ ))
+ return BackupFile.new(user, File.new(download_path))
+ end
+ end
+
+ private
+
+ def create_command(download_url, download_path, access_token)
+ command = <<-COMMAND
+curl '#{download_url}' \
+-o '#{download_path}' \
+-H 'Authorization: Bearer #{access_token}' \
+-H 'Referer: http://stronglifters.dev/dashboard' \
+-H 'Origin: http://stronglifters.dev' \
+-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36' \
+--compressed
+ COMMAND
+ command
+ end
+
+ def execute(command)
+ `#{command}`
+ end
+end
app/models/user.rb
@@ -45,6 +45,10 @@ class User < ActiveRecord::Base
end
end
+ def google_drive
+ GoogleDrive.new(self)
+ end
+
def self.authenticate(username,password)
if user = User.where("email = :email OR username = :username", username: username, email: username).first
user.authenticate(password)
spec/jobs/download_from_drive_job_spec.rb
@@ -3,21 +3,13 @@ require "rails_helper"
RSpec.describe DownloadFromDriveJob, type: :job do
describe "#perform" do
let(:user) { build(:user) }
- let(:params) do
- {
- accessToken: access_token,
- data: {
- title: filename,
- downloadUrl: 'https://www.stronglifters.com/'
- },
- }
- end
- let(:filename) { "#{FFaker::Internet.user_name}.html" }
- let(:access_token) { FFaker::Internet.user_name }
+ let(:params) { { } }
let(:backup_file) { double(process_later: true) }
+ let(:drive) { instance_double(GoogleDrive) }
it "downloads the file for further processing" do
- allow(BackupFile).to receive(:new).and_return(backup_file)
+ allow(user).to receive(:google_drive).and_return(drive)
+ allow(drive).to receive(:download).with(params).and_return(backup_file)
subject.perform(user, params)
expect(backup_file).to have_received(:process_later).with(Program.stronglifts)
end
spec/models/google_drive_spec.rb
@@ -0,0 +1,27 @@
+require "rails_helper"
+
+describe GoogleDrive do
+ subject { GoogleDrive.new(user) }
+ let(:user) { build(:user) }
+
+ describe "#download" do
+ let(:params) do
+ {
+ accessToken: access_token,
+ data: {
+ title: filename,
+ downloadUrl: 'https://www.stronglifters.com/'
+ },
+ }
+ end
+
+ let(:filename) { "#{FFaker::Internet.user_name}.html" }
+ let(:access_token) { FFaker::Internet.user_name }
+
+ it "downloads the specified google drive file" do
+ result = subject.download(params)
+ expect(result.user).to eql(user)
+ expect(result.backup_file.path).to end_with(filename)
+ end
+ end
+end
spec/models/user_spec.rb
@@ -168,4 +168,12 @@ describe User do
expect(todays_result).to_not eql(tomorrows_result)
end
end
+
+ describe "#google_drive" do
+ it "returns the users google drive" do
+ result = subject.google_drive
+ expect(result).to be_instance_of(GoogleDrive)
+ expect(result.user).to eql(subject)
+ end
+ end
end