Class: Backup::GoogleDriveTransfer
- Inherits:
-
Object
- Object
- Backup::GoogleDriveTransfer
show all
- Includes:
- Config::Helpers
- Defined in:
- lib/backup/storage/google/google_drive_transfer.rb
Instance Method Summary
collapse
included
Constructor Details
Returns a new instance of GoogleDriveTransfer.
5
6
7
8
9
10
|
# File 'lib/backup/storage/google/google_drive_transfer.rb', line 5
def initialize(client, drive)
@client = client
@drive = drive
get_info
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
in the class Backup::Config::Helpers
Instance Method Details
#create_folder(title, parent_folder_id) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/backup/storage/google/google_drive_transfer.rb', line 30
def create_folder(title, parent_folder_id)
parent_folder_id ||= @about.root_folder_id
folder = @drive.files.insert.request_schema.new({
"title" => title,
"mimeType" => "application/vnd.google-apps.folder",
"parents" => [{
"id" => parent_folder_id
}],
})
result = @client.execute!(
api_method: @drive.files.insert,
body_object: folder
)
result.status == 200 ? result.data : nil
end
|
#delete(package, folder_id = nil) ⇒ Object
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/backup/storage/google/google_drive_transfer.rb', line 78
def delete(package, folder_id = nil)
folder_id ||= @about.root_folder_id
del_folder = find_files({
"folderId" => folder_id,
"q" => "title = '#{package.time}'",
"maxResults" => 1
})[0]
delete_folder(folder_id, del_folder.id)
nil
end
|
#delete_folder(parent_folder_id, del_folder_id) ⇒ Object
115
116
117
118
119
120
121
122
123
|
# File 'lib/backup/storage/google/google_drive_transfer.rb', line 115
def delete_folder(parent_folder_id, del_folder_id)
@client.execute!(
api_method: @drive.children.delete,
parameters: {
"folderId" => parent_folder_id,
"childId" => del_folder_id
}
)
end
|
#find_files(params = {}) ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/backup/storage/google/google_drive_transfer.rb', line 92
def find_files(params = {})
page_token = nil
begin
params["pageToken"] = page_token if page_token.to_s != ""
result = @client.execute(
api_method: @drive.children.list,
parameters: params
)
if result.status == 200
children = result.data
page_token = children.next_page_token
return children.items
else
puts "An error occurred: #{result.data['error']['message']}"
page_token = nil
end
end while page_token.to_s != ""
end
|
#get_info ⇒ Object
12
13
14
15
|
# File 'lib/backup/storage/google/google_drive_transfer.rb', line 12
def get_info
list = @client.execute(api_method: @drive.about.get)
@about = list.data
end
|
#insert_file(filename, src, folder_id) ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/backup/storage/google/google_drive_transfer.rb', line 48
def insert_file(filename, src, folder_id)
folder_id ||= @about.root_folder_id
File.open(src, "r") do |file|
file_options = {
"title" => filename,
"parents" => [{
"id" => folder_id
}]
}
file = @drive.files.insert.request_schema.new(file_options)
media = Google::APIClient::UploadIO.new(src, MIME::Types.type_for(filename))
result = @client.execute(
api_method: @drive.files.insert,
body_object: file,
media: media,
parameters: {
"uploadType" => "multipart"
}
)
result
end
end
|
#upload(package, folder_id = nil) ⇒ Object
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/backup/storage/google/google_drive_transfer.rb', line 19
def upload(package, folder_id = nil)
package.filenames.each do |filename|
src = File.join(Config.tmp_path, filename)
Logger.info "Storing '#{ src }'..."
file_folder = create_folder(package.time, folder_id)
insert_file(filename, src, file_folder.id)
end
end
|