gdrivestrg 0.0.9 → 0.0.10

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.
@@ -0,0 +1,7 @@
1
+ module Gdrivestrg
2
+ class Folder < ActiveRecord::Base
3
+ attr_accessible :folder_name, :remote_id, :user_id
4
+
5
+ belongs_to :user, :class_name => Gdrivestrg.user_class
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Gdrivestrg
2
+ class Folder < ActiveRecord::Base
3
+ attr_accessible :folder_name, :remote_id
4
+
5
+ belongs_to :user, :class_name => Gdrivestrg.user_class
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ class CreateGdrivestrgFolders < ActiveRecord::Migration
2
+ def change
3
+ create_table :gdrivestrg_folders do |t|
4
+ t.string :folder_name
5
+ t.string :remote_id
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ class AddUserIdToGdrivestrgFolders < ActiveRecord::Migration
2
+ def change
3
+ add_column :gdrivestrg_folders, :user_id, :integer
4
+ end
5
+ end
@@ -72,7 +72,27 @@ class GdriveStrg < CloudStrg::CloudStorage
72
72
  end
73
73
  else
74
74
  begin
75
- @client.execute!(:api_method => @auth_api.userinfo.get)
75
+ if @user.gdrivestrgfolder
76
+ @client.execute!(:api_method => @auth_api.userinfo.get)
77
+ else
78
+ #Search for folder and if it's not present create it and insert existing files on it.
79
+ l = search_files_by_title Gdrivestrg.app_name
80
+ if l.length > 0
81
+ folder = @user.build_gdrivestrgfolder(:folder_name => l[0][0], :remote_id => l[0][1])
82
+ folder.save
83
+ else
84
+ f_id = create_folder({:foldername => Gdrivestrg.app_name})
85
+ folder = @user.build_gdrivestrgfolder(:folder_name => Gdrivestrg.app_name, :remote_id => f_id)
86
+ folder.save
87
+ files = Cloudstrg::Remoteobject.where(:user_id => @user.id, :cloudstrgplugin_id => Cloudstrg::Cloudstrgplugin.find_by_plugin_name('gdrive').id)
88
+ _params = {}
89
+ files.each do |file|
90
+ _params[:folder_id] = f_id
91
+ _params[:file_id] = file.file_remote_id
92
+ insert_parent _params
93
+ end
94
+ end
95
+ end
76
96
  rescue Exception => e
77
97
  session.delete(:gdrive_access_token)
78
98
  session = requestAccessToken(session, user_params)
@@ -84,9 +104,10 @@ class GdriveStrg < CloudStrg::CloudStorage
84
104
  end
85
105
 
86
106
  def create_file params
107
+ # TODO check folder
87
108
  filename = params[:filename]
88
-
89
- file = @drive_api.files.insert.request_schema.new({'title' => filename, 'description' => 'Netlab scenario', 'mimeType' => 'text/json'})
109
+ parentID = @user.gdrivestrgfolder.remote_id
110
+ file = @drive_api.files.insert.request_schema.new({'title' => filename, 'parents' => [{'id' => parentID}], 'description' => 'Netlab file', 'mimeType' => 'text/json'})
90
111
  media=Google::APIClient::UploadIO.new(StringIO.new(params[:file_content]), 'text/json')
91
112
  r = @client.execute(:api_method => @drive_api.files.insert, :body_object => file, :media => media, :parameters => {'uploadType' => 'multipart', 'alt' => 'json'})
92
113
  if r.status != 200
@@ -96,8 +117,16 @@ class GdriveStrg < CloudStrg::CloudStorage
96
117
 
97
118
  end
98
119
 
99
- #def create_folder params
100
- #end
120
+ def create_folder params
121
+ foldername = params[:foldername]
122
+
123
+ file = @drive_api.files.insert.request_schema.new({'title' => foldername, 'mimeType' => 'application/vnd.google-apps.folder'})
124
+ r = @client.execute(:api_method => @drive_api.files.insert, :body_object => file)
125
+ if r.status != 200
126
+ return false
127
+ end
128
+ return r.data.id
129
+ end
101
130
 
102
131
  def get_file params
103
132
  r = @client.execute!(:api_method => @drive_api.files.get, :parameters => {'fileId' => params[:fileid]})
@@ -143,6 +172,33 @@ class GdriveStrg < CloudStrg::CloudStorage
143
172
  return lines
144
173
  end
145
174
 
175
+ def search_files_by_title file_title
176
+ parameters = {'q' => "title = '#{file_title}'"}
177
+ r=@client.execute!(:api_method => @drive_api.files.list, :parameters => parameters)
178
+ if r.status != 200
179
+ return []
180
+ end
181
+
182
+ lines = []
183
+ if r.data.items
184
+ r.data.items.each do |line|
185
+ lines.append([line.title, line.id])
186
+ end
187
+ end
188
+ return lines
189
+ end
190
+
191
+ def insert_parent params
192
+ new_parent = @drive_api.parents.insert.request_schema.new({'id' => params[:folder_id]})
193
+ result = @client.execute!( :api_method => @drive_api.parents.insert, :body_object => new_parent, :parameters => { 'fileId' => params[:file_id] })
194
+ if result.status == 200
195
+ return result.data
196
+ else
197
+ puts "An error occurred: #{result.data['error']['message']}"
198
+ return nil
199
+ end
200
+ end
201
+
146
202
  def share_file params
147
203
  new_permission = @drive_api.permissions.insert.request_schema.new({'value' => params[:share_email], 'type' => 'user', 'role' => 'writer'})
148
204
  result = @client.execute!(
@@ -61,9 +61,12 @@ class GdriveStrg < CloudStrg::CloudStorage
61
61
  :expires_in => user_params.expires_in,
62
62
  :issued_at => user_params.issued_at)
63
63
  if @client.authorization.refresh_token && @client.authorization.expired?
64
+ p "aqui1"
64
65
  session = requestAccessToken(session, user_params)
65
66
  else
67
+ p "aqui2"
66
68
  if not authorized?
69
+ p "aqui3"
67
70
  if @client.authorization.refresh_token
68
71
  session = requestAccessToken(session, user_params)
69
72
  else
@@ -72,7 +75,27 @@ class GdriveStrg < CloudStrg::CloudStorage
72
75
  end
73
76
  else
74
77
  begin
75
- r = @client.execute!(:api_method => @auth_api.userinfo.get)
78
+ if @user.gdrivestrgfolder
79
+ @client.execute!(:api_method => @auth_api.userinfo.get)
80
+ else
81
+ #Search for folder and if it's not present create it and insert existing files on it.
82
+ l = search_files_by_title Gdrivestrg.app_name
83
+ if l.length > 0
84
+ folder = @user.build_gdrivestrgfolder(:folder_name => l[0][0], :remote_id => l[0][1])
85
+ folder.save
86
+ else
87
+ f_id = create_folder({:foldername => Gdrivestrg.app_name})
88
+ folder = @user.build_gdrivestrgfolder(:folder_name => Gdrivestrg.app_name, :remote_id => f_id)
89
+ folder.save
90
+ files = Cloudstrg::Remoteobject.where(:user_id => @user.id, :cloudstrgplugin_id => Cloudstrg::Cloudstrgplugin.find_by_plugin_name('gdrive').id)
91
+ _params = {}
92
+ files.each do |file|
93
+ _params[:folder_id] = f_id
94
+ _params[:file_id] = file.file_remote_id
95
+ insert_parent _params
96
+ end
97
+ end
98
+ end
76
99
  rescue Exception => e
77
100
  session.delete(:gdrive_access_token)
78
101
  session = requestAccessToken(session, user_params)
@@ -84,9 +107,10 @@ class GdriveStrg < CloudStrg::CloudStorage
84
107
  end
85
108
 
86
109
  def create_file params
110
+ # TODO check folder
87
111
  filename = params[:filename]
88
-
89
- file = @drive_api.files.insert.request_schema.new({'title' => filename, 'description' => 'Netlab scenario', 'mimeType' => 'text/json'})
112
+ parentID = @user.gdrivestrgfolder.remote_id
113
+ file = @drive_api.files.insert.request_schema.new({'title' => filename, 'parents' => [{'id' => parentID}], 'description' => 'Netlab file', 'mimeType' => 'text/json'})
90
114
  media=Google::APIClient::UploadIO.new(StringIO.new(params[:file_content]), 'text/json')
91
115
  r = @client.execute(:api_method => @drive_api.files.insert, :body_object => file, :media => media, :parameters => {'uploadType' => 'multipart', 'alt' => 'json'})
92
116
  if r.status != 200
@@ -96,8 +120,16 @@ class GdriveStrg < CloudStrg::CloudStorage
96
120
 
97
121
  end
98
122
 
99
- #def create_folder params
100
- #end
123
+ def create_folder params
124
+ foldername = params[:foldername]
125
+
126
+ file = @drive_api.files.insert.request_schema.new({'title' => foldername, 'mimeType' => 'application/vnd.google-apps.folder'})
127
+ r = @client.execute(:api_method => @drive_api.files.insert, :body_object => file)
128
+ if r.status != 200
129
+ return false
130
+ end
131
+ return r.data.id
132
+ end
101
133
 
102
134
  def get_file params
103
135
  r = @client.execute!(:api_method => @drive_api.files.get, :parameters => {'fileId' => params[:fileid]})
@@ -143,6 +175,33 @@ class GdriveStrg < CloudStrg::CloudStorage
143
175
  return lines
144
176
  end
145
177
 
178
+ def search_files_by_title file_title
179
+ parameters = {'q' => "title = '#{file_title}'"}
180
+ r=@client.execute!(:api_method => @drive_api.files.list, :parameters => parameters)
181
+ if r.status != 200
182
+ return []
183
+ end
184
+
185
+ lines = []
186
+ if r.data.items
187
+ r.data.items.each do |line|
188
+ lines.append([line.title, line.id])
189
+ end
190
+ end
191
+ return lines
192
+ end
193
+
194
+ def insert_parent params
195
+ new_parent = @drive_api.parents.insert.request_schema.new({'id' => params[:folder_id]})
196
+ result = @client.execute!( :api_method => @drive_api.parents.insert, :body_object => new_parent, :parameters => { 'fileId' => params[:file_id] })
197
+ if result.status == 200
198
+ return result.data
199
+ else
200
+ puts "An error occurred: #{result.data['error']['message']}"
201
+ return nil
202
+ end
203
+ end
204
+
146
205
  def share_file params
147
206
  new_permission = @drive_api.permissions.insert.request_schema.new({'value' => params[:share_email], 'type' => 'user', 'role' => 'writer'})
148
207
  result = @client.execute!(
@@ -1,3 +1,3 @@
1
1
  module Gdrivestrg
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module Gdrivestrg
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.9"
3
3
  end
data/lib/gdrivestrg.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "gdrivestrg/engine"
2
2
 
3
3
  module Gdrivestrg
4
- mattr_accessor :user_class
4
+ mattr_accessor :user_class, :app_name
5
5
  end
data/lib/gdrivestrg.rb~ CHANGED
@@ -1,4 +1,5 @@
1
1
  require "gdrivestrg/engine"
2
2
 
3
3
  module Gdrivestrg
4
+ mattr_accessor :user_class
4
5
  end
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
2
+
3
+ one:
4
+ folder_name: MyString
5
+ remote_id: MyString
6
+
7
+ two:
8
+ folder_name: MyString
9
+ remote_id: MyString
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ module Gdrivestrg
4
+ class FolderTest < ActiveSupport::TestCase
5
+ # test "the truth" do
6
+ # assert true
7
+ # end
8
+ end
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gdrivestrg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-11 00:00:00.000000000 Z
12
+ date: 2013-03-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -84,8 +84,10 @@ extra_rdoc_files: []
84
84
  files:
85
85
  - app/helpers/gdrivestrg/params_helper.rb
86
86
  - app/helpers/gdrivestrg/application_helper.rb
87
+ - app/models/gdrivestrg/folder.rb
87
88
  - app/models/gdrivestrg/param.rb~
88
89
  - app/models/gdrivestrg/param.rb
90
+ - app/models/gdrivestrg/folder.rb~
89
91
  - app/assets/stylesheets/scaffold.css
90
92
  - app/assets/stylesheets/gdrivestrg/params.css
91
93
  - app/assets/stylesheets/gdrivestrg/application.css
@@ -101,6 +103,8 @@ files:
101
103
  - app/controllers/gdrivestrg/params_controller.rb
102
104
  - config/routes.rb
103
105
  - db/migrate/20121107140721_create_gdrivestrg_params.rb~
106
+ - db/migrate/20130313124441_add_user_id_to_gdrivestrg_folders.rb
107
+ - db/migrate/20130313115251_create_gdrivestrg_folders.rb
104
108
  - db/migrate/20121107140721_create_gdrivestrg_params.rb
105
109
  - db/migrate/20121108121038_add_user_id_to_gdrivestrg_params.rb
106
110
  - db/migrate/20121108121038_add_user_id_to_gdrivestrg_params.rb~
@@ -120,9 +124,11 @@ files:
120
124
  - test/gdrivestrg_test.rb
121
125
  - test/unit/helpers/gdrivestrg/params_helper_test.rb
122
126
  - test/unit/gdrivestrg/param_test.rb
127
+ - test/unit/gdrivestrg/folder_test.rb
123
128
  - test/test_helper.rb
124
129
  - test/integration/navigation_test.rb
125
130
  - test/fixtures/gdrivestrg/params.yml
131
+ - test/fixtures/gdrivestrg/folders.yml
126
132
  - test/dummy/script/rails
127
133
  - test/dummy/config.ru
128
134
  - test/dummy/app/helpers/application_helper.rb
@@ -180,9 +186,11 @@ test_files:
180
186
  - test/gdrivestrg_test.rb
181
187
  - test/unit/helpers/gdrivestrg/params_helper_test.rb
182
188
  - test/unit/gdrivestrg/param_test.rb
189
+ - test/unit/gdrivestrg/folder_test.rb
183
190
  - test/test_helper.rb
184
191
  - test/integration/navigation_test.rb
185
192
  - test/fixtures/gdrivestrg/params.yml
193
+ - test/fixtures/gdrivestrg/folders.yml
186
194
  - test/dummy/script/rails
187
195
  - test/dummy/config.ru
188
196
  - test/dummy/app/helpers/application_helper.rb