Class: CloudDoor::GoogleDriveBridge

Inherits:
Object
  • Object
show all
Defined in:
lib/cloud_door/google_drive_bridge.rb

Instance Method Summary collapse

Constructor Details

#initialize(credentials) ⇒ GoogleDriveBridge

Returns a new instance of GoogleDriveBridge.



11
12
13
14
15
16
17
# File 'lib/cloud_door/google_drive_bridge.rb', line 11

def initialize(credentials)
  client = Google::APIClient.new(application_name: 'cloud_door')
  client.authorization = credentials
  drive  = client.discovered_api('drive', 'v2')
  @gclient = client
  @gdrive  = drive
end

Instance Method Details

#request_delete(file_id) ⇒ Object



97
98
99
100
101
102
# File 'lib/cloud_door/google_drive_bridge.rb', line 97

def request_delete(file_id)
  send_request('@gdrive.files.delete', {parameters: {'fileId' => file_id}})
  true
rescue => e
  false
end

#request_dir(file_id) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/cloud_door/google_drive_bridge.rb', line 29

def request_dir(file_id)
  dir_files  = Array.new
  page_token = nil
  begin
    parameters = {}
    parameters['q'] = "'#{file_id}' in parents"
    if page_token.to_s != ''
      parameters['pageToken'] = page_token
    end
    api_result = send_request('@gdrive.files.list', parameters: parameters)
    files = api_result.data
    dir_files.concat(files.items)
    page_token = files.next_page_token
  end while page_token.to_s != ''
  dir_files
end

#request_download(file_id) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/cloud_door/google_drive_bridge.rb', line 51

def request_download(file_id)
  result = @gclient.execute(
    api_method: @gdrive.files.get,
    parameters: {'fileId' => file_id}
  )
  file = result.data
  if file.download_url
    result = @gclient.execute(:uri => file.download_url)
    if result.status == 200
      result.body
    elsif result.status == 401
      raise UnauthorizedException
    else
      raise HttpConnectionException
    end
  end
end

#request_file(file_id) ⇒ Object



46
47
48
49
# File 'lib/cloud_door/google_drive_bridge.rb', line 46

def request_file(file_id)
  result = send_request('@gdrive.files.get', {parameters: {'fileId' => file_id}})
  result.data.to_hash
end

#request_mkdir(name, parent_id) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/cloud_door/google_drive_bridge.rb', line 104

def request_mkdir(name, parent_id)
  file = @gdrive.files.insert.request_schema.new({
    'title'    => name,
    'mimeType' => 'application/vnd.google-apps.folder',
    'parents'  => [{'id' => parent_id}]
  })
  result = @gclient.execute(
    :api_method => @gdrive.files.insert,
    :body_object => file
  )
  if result.status == 200
    true
  elsif result.status == 401
    raise UnauthorizedException
  else
    raise HttpConnectionException
  end
end

#request_root_idObject



24
25
26
27
# File 'lib/cloud_door/google_drive_bridge.rb', line 24

def request_root_id
  result = send_request('@gdrive.about.get')
  result.data.root_folder_id
end

#request_upload(file_path, parent_id) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/cloud_door/google_drive_bridge.rb', line 69

def request_upload(file_path, parent_id)
  mime      = File.mime_type?(File.open(file_path))
  mime_type = mime[0, mime.index(';')]
  file = @gdrive.files.insert.request_schema.new({
    'title' => file_path
  })
  if parent_id
    file.parents = [{'id' => parent_id}]
  end
  media = Google::APIClient::UploadIO.new(file_path, mime_type)
  result = @gclient.execute(
    :api_method  => @gdrive.files.insert,
    :body_object => file,
    :media       => media,
    :parameters  => {
      'uploadType' => 'multipart',
      'alt'        => 'json'
    }
  )
  if result.status == 200
    result
  elsif result.status == 401
    raise UnauthorizedException
  else
    raise HttpConnectionException
  end
end

#request_userObject



19
20
21
22
# File 'lib/cloud_door/google_drive_bridge.rb', line 19

def request_user
  result = send_request('@gdrive.about.get')
  result.data.user
end