google_storage 0.1.1 → 0.1.2
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.
- data/README.textile +89 -5
- data/doc/GoogleStorage/Client.html +30 -24
- data/doc/GoogleStorage/InstallGenerator.html +1 -1
- data/doc/GoogleStorage.html +2 -2
- data/doc/_index.html +1 -1
- data/doc/file.README.html +63 -5
- data/doc/index.html +63 -5
- data/doc/top-level-namespace.html +1 -1
- data/examples/examples.rb +1 -1
- data/lib/google_storage/client.rb +1 -1
- data/lib/google_storage/object.rb +5 -2
- data/lib/google_storage/version.rb +1 -1
- metadata +4 -4
data/README.textile
CHANGED
@@ -1,12 +1,35 @@
|
|
1
1
|
h1. Google Storage using API v2
|
2
2
|
|
3
|
-
I wrote this gem because the only google storage gems I could find already written were either written a while ago and only set up to use the
|
3
|
+
I wrote this gem because the only google storage gems I could find already written were either written a while ago and only set up to use the original
|
4
4
|
version of Google's API or they were dependent on Gems that don't run properly on... dare I say it... windows.. :) Apologies, I'm without choice
|
5
5
|
at the moment, but anyways, this gem should run fine on all platforms and I've tried to keep dependencies to a minimum. Let me know if you find
|
6
6
|
any bugs though ok and feel free to contribute.
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
h2. Response Object
|
9
|
+
|
10
|
+
A lot of the responses from GS on the backend are a little bit inconsistent, sometimes returning response codes, sometimes returning heavily
|
11
|
+
nested xml data and sometimes just returning information in the response header. I've tried to parse all responses that are returned from GS into a fairly
|
12
|
+
consistent type of response Hash object. Usually this is in the form of something like this:
|
13
|
+
|
14
|
+
<pre>
|
15
|
+
#successful responses will always include a :success => true key/value pair
|
16
|
+
|
17
|
+
client.list_buckets
|
18
|
+
=> {:success=>true,
|
19
|
+
:buckets=>[ {"Name"=>"bucket_1_example", "CreationDate"=>"2011-06-07T07:11:18.480Z"},
|
20
|
+
{"Name"=>"bucket_2_example", "CreationDate"=>"2011-05-31T10:58:08.097Z"},
|
21
|
+
{"Name"=>"bucket_3_example", "CreationDate"=>"2011-06-06T22:47:10.728Z"}],
|
22
|
+
:raw=>{ THIS :raw FIELD WILL RETURN A HASH OF THE UNPARSED RESPONSE IN CASE YOU NEED IT }
|
23
|
+
}
|
24
|
+
|
25
|
+
#Unsuccessful responses will return an "Error" Hash
|
26
|
+
|
27
|
+
client.get_bucket("bucket_4_example")
|
28
|
+
=> {"Error"=>{
|
29
|
+
"Code"=>"NoSuchBucket",
|
30
|
+
"Message"=>"The specified bucket does not exist."
|
31
|
+
}}
|
32
|
+
</pre>
|
10
33
|
|
11
34
|
h2. Setup Guide
|
12
35
|
|
@@ -22,7 +45,7 @@ But it's also possible to run this gem from the command line if you want.
|
|
22
45
|
h2. Install the google_storage Gem
|
23
46
|
|
24
47
|
Include the google_storage gem in your Gemfile and install config files
|
25
|
-
<pre>gem
|
48
|
+
<pre>gem 'google_storage'
|
26
49
|
bundle install
|
27
50
|
</pre>
|
28
51
|
Then in your Rails application directory run:
|
@@ -107,4 +130,65 @@ web_applications:
|
|
107
130
|
# Google Storage API
|
108
131
|
</pre>
|
109
132
|
|
110
|
-
Once you've acquired your refresh_token you can now make calls to the API.
|
133
|
+
Once you've acquired your refresh_token you can now make calls to the API.
|
134
|
+
|
135
|
+
|
136
|
+
h2. Examples
|
137
|
+
|
138
|
+
h3. Configuration
|
139
|
+
|
140
|
+
<pre>require 'google_storage'</pre>
|
141
|
+
|
142
|
+
The following will look for google_storage.yml in your rails config directory
|
143
|
+
<pre>client = GoogleStorage::Client.new</pre>
|
144
|
+
|
145
|
+
Otherwise you can pass in the path to the google_storage.yml
|
146
|
+
<pre>client = GoogleStorage::Client.new(:config_yml => 'C:/github/highvoltage/config/google_storage.yml')
|
147
|
+
</pre>
|
148
|
+
|
149
|
+
h3. Service Requests
|
150
|
+
|
151
|
+
GET Service
|
152
|
+
<pre>client.list_buckets</pre>
|
153
|
+
|
154
|
+
h3. Bucket Requests
|
155
|
+
|
156
|
+
GET Access Control List for Bucket
|
157
|
+
<pre>client.bucket_acls('bucket_name')</pre>
|
158
|
+
|
159
|
+
PUT Bucket
|
160
|
+
<pre>client.create_bucket('bucket_name') # < private bucket
|
161
|
+
client.create_bucket('bucket_name', :x_goog_acl => 'public-read') # < public bucket </pre>
|
162
|
+
|
163
|
+
GET Bucket
|
164
|
+
<pre>client.get_bucket('bucket_name')</pre>
|
165
|
+
|
166
|
+
DELETE Bucket
|
167
|
+
<pre>client.delete_bucket('bucket_name')</pre>
|
168
|
+
|
169
|
+
h3. Object Requests
|
170
|
+
|
171
|
+
GET Access Control List for Object
|
172
|
+
<pre>client.object_acls('bucket_name', 'filename.jpg')</pre>
|
173
|
+
|
174
|
+
GET Object
|
175
|
+
<pre>client.get_object('bucket_name', 'filename.jpg')
|
176
|
+
client.get_object('bucket_name', 'filename.jpg', :write_to_file => 'c:/temp/new_file_name.jpg')</pre>
|
177
|
+
|
178
|
+
POST Object
|
179
|
+
<pre>Sorry, not including a 'post' object method as it still requires use of the old legacy access,
|
180
|
+
Please use the 'put' object method below instead to upload files to a bucket.</pre>
|
181
|
+
|
182
|
+
PUT Object
|
183
|
+
<pre>client.put_object('bucket_name', 'filename.jpg', :data => File.read('c:/temp/file.jpg'), :x_goog_acl => 'public-read')
|
184
|
+
client.upload_object('bucket_name', 'filename.jpg', :path_to_file => 'c:/temp/file.jpg')</pre>
|
185
|
+
|
186
|
+
HEAD Object
|
187
|
+
<pre>client.object_head('bucket_name', 'filename.jpg')</pre>
|
188
|
+
|
189
|
+
DELETE Object
|
190
|
+
<pre>client.delete_object('bucket_name', 'filename.jpg')</pre>
|
191
|
+
|
192
|
+
|
193
|
+
|
194
|
+
|
@@ -971,18 +971,18 @@ Example:
|
|
971
971
|
<pre class="lines">
|
972
972
|
|
973
973
|
|
974
|
-
172
|
975
|
-
173
|
976
|
-
174
|
977
974
|
175
|
978
975
|
176
|
979
976
|
177
|
980
977
|
178
|
981
978
|
179
|
982
|
-
180
|
979
|
+
180
|
980
|
+
181
|
981
|
+
182
|
982
|
+
183</pre>
|
983
983
|
</td>
|
984
984
|
<td>
|
985
|
-
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line
|
985
|
+
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line 175</span>
|
986
986
|
|
987
987
|
<span class='kw'>def</span> <span class='id delete_object'>delete_object</span><span class='lparen'>(</span><span class='id bucket_name'>bucket_name</span><span class='comma'>,</span> <span class='id filename'>filename</span><span class='comma'>,</span> <span class='id options'>options</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
988
988
|
<span class='id filename'>filename</span><span class='period'>.</span><span class='id gsub!'>gsub!</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\/</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
@@ -1133,7 +1133,10 @@ Example:
|
|
1133
1133
|
44
|
1134
1134
|
45
|
1135
1135
|
46
|
1136
|
-
47
|
1136
|
+
47
|
1137
|
+
48
|
1138
|
+
49
|
1139
|
+
50</pre>
|
1137
1140
|
</td>
|
1138
1141
|
<td>
|
1139
1142
|
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line 23</span>
|
@@ -1147,7 +1150,7 @@ Example:
|
|
1147
1150
|
<span class='kw'>begin</span>
|
1148
1151
|
<span class='const'>File</span><span class='period'>.</span><span class='id open'>open</span><span class='lparen'>(</span><span class='id options'>options</span><span class='lbracket'>[</span><span class='symbol'>:write_to_file</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>wb</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id f'>f</span><span class='op'>|</span> <span class='id f'>f</span><span class='period'>.</span><span class='id write'>write</span><span class='lparen'>(</span><span class='id resp'>resp</span><span class='period'>.</span><span class='id body'>body</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
1149
1152
|
<span class='kw'>rescue</span> <span class='const'>Exception</span> <span class='op'>=></span> <span class='id msg'>msg</span>
|
1150
|
-
<span class='kw'>return</span> <span class='lbrace'>{</span><span class='
|
1153
|
+
<span class='kw'>return</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Error</span><span class='tstring_end'>"</span></span> <span class='op'>=></span> <span class='id msg'>msg</span><span class='rbrace'>}</span>
|
1151
1154
|
<span class='kw'>end</span>
|
1152
1155
|
<span class='id resp_obj'>resp_obj</span><span class='period'>.</span><span class='id clear'>clear</span>
|
1153
1156
|
<span class='id resp_obj'>resp_obj</span><span class='lbracket'>[</span><span class='symbol'>:success</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>true</span>
|
@@ -1162,6 +1165,9 @@ Example:
|
|
1162
1165
|
<span class='id resp_obj'>resp_obj</span><span class='lbracket'>[</span><span class='symbol'>:size</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id resp'>resp</span><span class='period'>.</span><span class='id header'>header</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>content-length</span><span class='tstring_end'>"</span></span><span class='rbracket'>]</span>
|
1163
1166
|
|
1164
1167
|
<span class='kw'>return</span> <span class='id resp_obj'>resp_obj</span>
|
1168
|
+
|
1169
|
+
|
1170
|
+
|
1165
1171
|
<span class='kw'>end</span></pre>
|
1166
1172
|
</td>
|
1167
1173
|
</tr>
|
@@ -1264,9 +1270,6 @@ Example:
|
|
1264
1270
|
<pre class="lines">
|
1265
1271
|
|
1266
1272
|
|
1267
|
-
118
|
1268
|
-
119
|
1269
|
-
120
|
1270
1273
|
121
|
1271
1274
|
122
|
1272
1275
|
123
|
@@ -1276,10 +1279,13 @@ Example:
|
|
1276
1279
|
127
|
1277
1280
|
128
|
1278
1281
|
129
|
1279
|
-
130
|
1282
|
+
130
|
1283
|
+
131
|
1284
|
+
132
|
1285
|
+
133</pre>
|
1280
1286
|
</td>
|
1281
1287
|
<td>
|
1282
|
-
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line
|
1288
|
+
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line 121</span>
|
1283
1289
|
|
1284
1290
|
<span class='kw'>def</span> <span class='id object_acls'>object_acls</span><span class='lparen'>(</span><span class='id bucket_name'>bucket_name</span><span class='comma'>,</span> <span class='id filename'>filename</span><span class='comma'>,</span> <span class='id options'>options</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
1285
1291
|
<span class='id filename'>filename</span><span class='period'>.</span><span class='id gsub!'>gsub!</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\/</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
@@ -1332,9 +1338,6 @@ Example:
|
|
1332
1338
|
<pre class="lines">
|
1333
1339
|
|
1334
1340
|
|
1335
|
-
144
|
1336
|
-
145
|
1337
|
-
146
|
1338
1341
|
147
|
1339
1342
|
148
|
1340
1343
|
149
|
@@ -1346,10 +1349,13 @@ Example:
|
|
1346
1349
|
155
|
1347
1350
|
156
|
1348
1351
|
157
|
1349
|
-
158
|
1352
|
+
158
|
1353
|
+
159
|
1354
|
+
160
|
1355
|
+
161</pre>
|
1350
1356
|
</td>
|
1351
1357
|
<td>
|
1352
|
-
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line
|
1358
|
+
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line 147</span>
|
1353
1359
|
|
1354
1360
|
<span class='kw'>def</span> <span class='id object_head'>object_head</span><span class='lparen'>(</span><span class='id bucket_name'>bucket_name</span><span class='comma'>,</span> <span class='id filename'>filename</span><span class='comma'>,</span> <span class='id options'>options</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
1355
1361
|
<span class='id filename'>filename</span><span class='period'>.</span><span class='id gsub!'>gsub!</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\/</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
@@ -1427,9 +1433,6 @@ Available Options:
|
|
1427
1433
|
<pre class="lines">
|
1428
1434
|
|
1429
1435
|
|
1430
|
-
74
|
1431
|
-
75
|
1432
|
-
76
|
1433
1436
|
77
|
1434
1437
|
78
|
1435
1438
|
79
|
@@ -1455,10 +1458,13 @@ Available Options:
|
|
1455
1458
|
99
|
1456
1459
|
100
|
1457
1460
|
101
|
1458
|
-
102
|
1461
|
+
102
|
1462
|
+
103
|
1463
|
+
104
|
1464
|
+
105</pre>
|
1459
1465
|
</td>
|
1460
1466
|
<td>
|
1461
|
-
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line
|
1467
|
+
<pre class="code"><span class="info file"># File 'lib/google_storage/object.rb', line 77</span>
|
1462
1468
|
|
1463
1469
|
<span class='kw'>def</span> <span class='id put_object'>put_object</span><span class='lparen'>(</span><span class='id bucket_name'>bucket_name</span><span class='comma'>,</span> <span class='id filename'>filename</span><span class='comma'>,</span> <span class='id options'>options</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
1464
1470
|
<span class='id filename'>filename</span><span class='period'>.</span><span class='id gsub!'>gsub!</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\/</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
@@ -1472,7 +1478,7 @@ Available Options:
|
|
1472
1478
|
<span class='ivar'>@data</span> <span class='op'>=</span> <span class='id uploaded_file'>uploaded_file</span><span class='period'>.</span><span class='id read'>read</span>
|
1473
1479
|
<span class='kw'>end</span>
|
1474
1480
|
<span class='kw'>rescue</span> <span class='const'>Exception</span> <span class='op'>=></span> <span class='id msg'>msg</span>
|
1475
|
-
<span class='kw'>return</span> <span class='lbrace'>{</span><span class='
|
1481
|
+
<span class='kw'>return</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Error</span><span class='tstring_end'>"</span></span> <span class='op'>=></span> <span class='id msg'>msg</span><span class='rbrace'>}</span>
|
1476
1482
|
<span class='kw'>end</span>
|
1477
1483
|
<span class='id options'>options</span><span class='lbracket'>[</span><span class='symbol'>:data</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='ivar'>@data</span>
|
1478
1484
|
<span class='kw'>end</span>
|
@@ -1499,7 +1505,7 @@ Available Options:
|
|
1499
1505
|
</div>
|
1500
1506
|
|
1501
1507
|
<div id="footer">
|
1502
|
-
Generated on
|
1508
|
+
Generated on Fri Jul 1 12:07:25 2011 by
|
1503
1509
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
1504
1510
|
0.7.2 (ruby-1.9.2).
|
1505
1511
|
</div>
|
@@ -211,7 +211,7 @@ Example:
|
|
211
211
|
</div>
|
212
212
|
|
213
213
|
<div id="footer">
|
214
|
-
Generated on
|
214
|
+
Generated on Fri Jul 1 12:07:25 2011 by
|
215
215
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
216
216
|
0.7.2 (ruby-1.9.2).
|
217
217
|
</div>
|
data/doc/GoogleStorage.html
CHANGED
@@ -97,7 +97,7 @@
|
|
97
97
|
<dt id="VERSION-constant" class="">VERSION =
|
98
98
|
|
99
99
|
</dt>
|
100
|
-
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>0.
|
100
|
+
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>0.1.1</span><span class='tstring_end'>"</span></span></pre></dd>
|
101
101
|
|
102
102
|
</dl>
|
103
103
|
|
@@ -111,7 +111,7 @@
|
|
111
111
|
</div>
|
112
112
|
|
113
113
|
<div id="footer">
|
114
|
-
Generated on
|
114
|
+
Generated on Fri Jul 1 12:07:25 2011 by
|
115
115
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
116
116
|
0.7.2 (ruby-1.9.2).
|
117
117
|
</div>
|
data/doc/_index.html
CHANGED
@@ -127,7 +127,7 @@
|
|
127
127
|
</div>
|
128
128
|
|
129
129
|
<div id="footer">
|
130
|
-
Generated on
|
130
|
+
Generated on Fri Jul 1 12:07:24 2011 by
|
131
131
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
132
132
|
0.7.2 (ruby-1.9.2).
|
133
133
|
</div>
|
data/doc/file.README.html
CHANGED
@@ -55,12 +55,33 @@
|
|
55
55
|
<iframe id="search_frame"></iframe>
|
56
56
|
|
57
57
|
<div id="content"><div id='filecontents'><h1>Google Storage using <span class="caps">API</span> v2</h1>
|
58
|
-
<p>I wrote this gem because the only google storage gems I could find already written were either written a while ago and only set up to use the
|
58
|
+
<p>I wrote this gem because the only google storage gems I could find already written were either written a while ago and only set up to use the original
|
59
59
|
version of Google’s <span class="caps">API</span> or they were dependent on Gems that don’t run properly on… dare I say it… windows.. :) Apologies, I’m without choice
|
60
60
|
at the moment, but anyways, this gem should run fine on all platforms and I’ve tried to keep dependencies to a minimum. Let me know if you find
|
61
61
|
any bugs though ok and feel free to contribute.</p>
|
62
|
-
<
|
63
|
-
|
62
|
+
<h2>Response Object</h2>
|
63
|
+
<p>A lot of the responses from GS on the backend are a little bit inconsistent, sometimes returning response codes, sometimes returning heavily
|
64
|
+
nested xml data and sometimes just returning information in the response header. I’ve tried to parse all responses that are returned from GS into a fairly
|
65
|
+
consistent type of response Hash object. Usually this is in the form of something like this:</p>
|
66
|
+
<pre class="code">
|
67
|
+
#successful responses will always include a :success => true key/value pair
|
68
|
+
|
69
|
+
client.list_buckets
|
70
|
+
=> {:success=>true,
|
71
|
+
:buckets=>[ {"Name"=>"bucket_1_example", "CreationDate"=>"2011-06-07T07:11:18.480Z"},
|
72
|
+
{"Name"=>"bucket_2_example", "CreationDate"=>"2011-05-31T10:58:08.097Z"},
|
73
|
+
{"Name"=>"bucket_3_example", "CreationDate"=>"2011-06-06T22:47:10.728Z"}],
|
74
|
+
:raw=>{ THIS :raw FIELD WILL RETURN A HASH OF THE UNPARSED RESPONSE IN CASE YOU NEED IT }
|
75
|
+
}
|
76
|
+
|
77
|
+
#Unsuccessful responses will return an "Error" Hash
|
78
|
+
|
79
|
+
client.get_bucket("bucket_4_example")
|
80
|
+
=> {"Error"=>{
|
81
|
+
"Code"=>"NoSuchBucket",
|
82
|
+
"Message"=>"The specified bucket does not exist."
|
83
|
+
}}
|
84
|
+
</pre>
|
64
85
|
<h2>Setup Guide</h2>
|
65
86
|
<p>There’s a couple of steps to follow in order to setup this gem. The new Google Storage APIv2 uses OAuth 2.0 to authenticate requests, you can read up
|
66
87
|
more on the nitty gritty if you like here: <a href="http://code.google.com/apis/accounts/docs/OAuth2.html">Google’s OAuth2 Guide</a></p>
|
@@ -141,10 +162,47 @@ web_applications:
|
|
141
162
|
# 7. Copy and paste the refresh_token into this file. Your application should now be able to make calls to your
|
142
163
|
# Google Storage API
|
143
164
|
</pre>
|
144
|
-
<p>Once you’ve acquired your refresh_token you can now make calls to the <span class="caps">API</span
|
165
|
+
<p>Once you’ve acquired your refresh_token you can now make calls to the <span class="caps">API</span>.</p>
|
166
|
+
<h2>Examples</h2>
|
167
|
+
<h3>Configuration</h3>
|
168
|
+
<pre class="code"><span class='id require'>require</span> <span class='id “google_storage”'>“google_storage”</span></pre>
|
169
|
+
The following will look for google_storage.yml in your rails config directory
|
170
|
+
<pre class="code"><span class='id client'>client</span> <span class='op'>=</span> <span class='const'>GoogleStorage</span><span class='op'>::</span><span class='const'>Client</span><span class='period'>.</span><span class='id new'>new</span></pre>
|
171
|
+
Otherwise you can pass in the path to the google_storage.yml
|
172
|
+
<pre class="code">client = GoogleStorage::Client.new(:config_yml => ‘C:/github/highvoltage/config/google_storage.yml’)
|
173
|
+
</pre>
|
174
|
+
<h3>Service Requests</h3>
|
175
|
+
<span class="caps">GET</span> Service
|
176
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id list_buckets'>list_buckets</span></pre>
|
177
|
+
<h3>Bucket Requests</h3>
|
178
|
+
<span class="caps">GET</span> Access Control List for Bucket
|
179
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id bucket_acls'>bucket_acls</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='rparen'>)</span></pre>
|
180
|
+
<span class="caps">PUT</span> Bucket
|
181
|
+
<pre class="code">client.create_bucket(‘bucket_name’) <— private bucket
|
182
|
+
client.create_bucket(‘bucket_name’, :x_goog_acl => ‘public-read’) <— public bucket </pre>
|
183
|
+
<span class="caps">GET</span> Bucket
|
184
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id get_bucket'>get_bucket</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='rparen'>)</span></pre>
|
185
|
+
<span class="caps">DELETE</span> Bucket
|
186
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id delete_bucket'>delete_bucket</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='rparen'>)</span></pre>
|
187
|
+
<h3>Object Requests</h3>
|
188
|
+
<span class="caps">GET</span> Access Control List for Object
|
189
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id object_acls'>object_acls</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='comma'>,</span> <span class='id ‘filename'>‘filename</span><span class='period'>.</span><span class='id jpg’'>jpg’</span><span class='rparen'>)</span></pre>
|
190
|
+
<span class="caps">GET</span> Object
|
191
|
+
<pre class="code">client.get_object(‘bucket_name’, ‘filename.jpg’)
|
192
|
+
client.get_object(‘bucket_name’, ‘filename.jpg’, :write_to_file => ‘c:/temp/new_file_name.jpg’)</pre>
|
193
|
+
<span class="caps">POST</span> Object
|
194
|
+
<pre class="code">Sorry, not including a ‘post’ object method as it still requires use of the old legacy access,
|
195
|
+
Please use the ‘put’ object method below instead to upload files to a bucket.</pre>
|
196
|
+
<span class="caps">PUT</span> Object
|
197
|
+
<pre class="code">client.put_object(‘bucket_name’, ‘filename.jpg’, :data => File.read(‘c:/temp/file.jpg’), :x_goog_acl => ‘public-read’)
|
198
|
+
client.upload_object(‘bucket_name’, ‘filename.jpg’, :path_to_file => ‘c:/temp/file.jpg’)</pre>
|
199
|
+
<span class="caps">HEAD</span> Object
|
200
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id object_head'>object_head</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='comma'>,</span> <span class='id ‘filename'>‘filename</span><span class='period'>.</span><span class='id jpg’'>jpg’</span><span class='rparen'>)</span></pre>
|
201
|
+
<span class="caps">DELETE</span> Object
|
202
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id delete_object'>delete_object</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='comma'>,</span> <span class='id ‘filename'>‘filename</span><span class='period'>.</span><span class='id jpg’'>jpg’</span><span class='rparen'>)</span></pre></div></div>
|
145
203
|
|
146
204
|
<div id="footer">
|
147
|
-
Generated on
|
205
|
+
Generated on Fri Jul 1 12:07:25 2011 by
|
148
206
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
149
207
|
0.7.2 (ruby-1.9.2).
|
150
208
|
</div>
|
data/doc/index.html
CHANGED
@@ -55,12 +55,33 @@
|
|
55
55
|
<iframe id="search_frame"></iframe>
|
56
56
|
|
57
57
|
<div id="content"><div id='filecontents'><h1>Google Storage using <span class="caps">API</span> v2</h1>
|
58
|
-
<p>I wrote this gem because the only google storage gems I could find already written were either written a while ago and only set up to use the
|
58
|
+
<p>I wrote this gem because the only google storage gems I could find already written were either written a while ago and only set up to use the original
|
59
59
|
version of Google’s <span class="caps">API</span> or they were dependent on Gems that don’t run properly on… dare I say it… windows.. :) Apologies, I’m without choice
|
60
60
|
at the moment, but anyways, this gem should run fine on all platforms and I’ve tried to keep dependencies to a minimum. Let me know if you find
|
61
61
|
any bugs though ok and feel free to contribute.</p>
|
62
|
-
<
|
63
|
-
|
62
|
+
<h2>Response Object</h2>
|
63
|
+
<p>A lot of the responses from GS on the backend are a little bit inconsistent, sometimes returning response codes, sometimes returning heavily
|
64
|
+
nested xml data and sometimes just returning information in the response header. I’ve tried to parse all responses that are returned from GS into a fairly
|
65
|
+
consistent type of response Hash object. Usually this is in the form of something like this:</p>
|
66
|
+
<pre class="code">
|
67
|
+
#successful responses will always include a :success => true key/value pair
|
68
|
+
|
69
|
+
client.list_buckets
|
70
|
+
=> {:success=>true,
|
71
|
+
:buckets=>[ {"Name"=>"bucket_1_example", "CreationDate"=>"2011-06-07T07:11:18.480Z"},
|
72
|
+
{"Name"=>"bucket_2_example", "CreationDate"=>"2011-05-31T10:58:08.097Z"},
|
73
|
+
{"Name"=>"bucket_3_example", "CreationDate"=>"2011-06-06T22:47:10.728Z"}],
|
74
|
+
:raw=>{ THIS :raw FIELD WILL RETURN A HASH OF THE UNPARSED RESPONSE IN CASE YOU NEED IT }
|
75
|
+
}
|
76
|
+
|
77
|
+
#Unsuccessful responses will return an "Error" Hash
|
78
|
+
|
79
|
+
client.get_bucket("bucket_4_example")
|
80
|
+
=> {"Error"=>{
|
81
|
+
"Code"=>"NoSuchBucket",
|
82
|
+
"Message"=>"The specified bucket does not exist."
|
83
|
+
}}
|
84
|
+
</pre>
|
64
85
|
<h2>Setup Guide</h2>
|
65
86
|
<p>There’s a couple of steps to follow in order to setup this gem. The new Google Storage APIv2 uses OAuth 2.0 to authenticate requests, you can read up
|
66
87
|
more on the nitty gritty if you like here: <a href="http://code.google.com/apis/accounts/docs/OAuth2.html">Google’s OAuth2 Guide</a></p>
|
@@ -141,10 +162,47 @@ web_applications:
|
|
141
162
|
# 7. Copy and paste the refresh_token into this file. Your application should now be able to make calls to your
|
142
163
|
# Google Storage API
|
143
164
|
</pre>
|
144
|
-
<p>Once you’ve acquired your refresh_token you can now make calls to the <span class="caps">API</span
|
165
|
+
<p>Once you’ve acquired your refresh_token you can now make calls to the <span class="caps">API</span>.</p>
|
166
|
+
<h2>Examples</h2>
|
167
|
+
<h3>Configuration</h3>
|
168
|
+
<pre class="code"><span class='id require'>require</span> <span class='id “google_storage”'>“google_storage”</span></pre>
|
169
|
+
The following will look for google_storage.yml in your rails config directory
|
170
|
+
<pre class="code"><span class='id client'>client</span> <span class='op'>=</span> <span class='const'>GoogleStorage</span><span class='op'>::</span><span class='const'>Client</span><span class='period'>.</span><span class='id new'>new</span></pre>
|
171
|
+
Otherwise you can pass in the path to the google_storage.yml
|
172
|
+
<pre class="code">client = GoogleStorage::Client.new(:config_yml => ‘C:/github/highvoltage/config/google_storage.yml’)
|
173
|
+
</pre>
|
174
|
+
<h3>Service Requests</h3>
|
175
|
+
<span class="caps">GET</span> Service
|
176
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id list_buckets'>list_buckets</span></pre>
|
177
|
+
<h3>Bucket Requests</h3>
|
178
|
+
<span class="caps">GET</span> Access Control List for Bucket
|
179
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id bucket_acls'>bucket_acls</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='rparen'>)</span></pre>
|
180
|
+
<span class="caps">PUT</span> Bucket
|
181
|
+
<pre class="code">client.create_bucket(‘bucket_name’) <— private bucket
|
182
|
+
client.create_bucket(‘bucket_name’, :x_goog_acl => ‘public-read’) <— public bucket </pre>
|
183
|
+
<span class="caps">GET</span> Bucket
|
184
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id get_bucket'>get_bucket</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='rparen'>)</span></pre>
|
185
|
+
<span class="caps">DELETE</span> Bucket
|
186
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id delete_bucket'>delete_bucket</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='rparen'>)</span></pre>
|
187
|
+
<h3>Object Requests</h3>
|
188
|
+
<span class="caps">GET</span> Access Control List for Object
|
189
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id object_acls'>object_acls</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='comma'>,</span> <span class='id ‘filename'>‘filename</span><span class='period'>.</span><span class='id jpg’'>jpg’</span><span class='rparen'>)</span></pre>
|
190
|
+
<span class="caps">GET</span> Object
|
191
|
+
<pre class="code">client.get_object(‘bucket_name’, ‘filename.jpg’)
|
192
|
+
client.get_object(‘bucket_name’, ‘filename.jpg’, :write_to_file => ‘c:/temp/new_file_name.jpg’)</pre>
|
193
|
+
<span class="caps">POST</span> Object
|
194
|
+
<pre class="code">Sorry, not including a ‘post’ object method as it still requires use of the old legacy access,
|
195
|
+
Please use the ‘put’ object method below instead to upload files to a bucket.</pre>
|
196
|
+
<span class="caps">PUT</span> Object
|
197
|
+
<pre class="code">client.put_object(‘bucket_name’, ‘filename.jpg’, :data => File.read(‘c:/temp/file.jpg’), :x_goog_acl => ‘public-read’)
|
198
|
+
client.upload_object(‘bucket_name’, ‘filename.jpg’, :path_to_file => ‘c:/temp/file.jpg’)</pre>
|
199
|
+
<span class="caps">HEAD</span> Object
|
200
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id object_head'>object_head</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='comma'>,</span> <span class='id ‘filename'>‘filename</span><span class='period'>.</span><span class='id jpg’'>jpg’</span><span class='rparen'>)</span></pre>
|
201
|
+
<span class="caps">DELETE</span> Object
|
202
|
+
<pre class="code"><span class='id client'>client</span><span class='period'>.</span><span class='id delete_object'>delete_object</span><span class='lparen'>(</span><span class='id ‘bucket_name’'>‘bucket_name’</span><span class='comma'>,</span> <span class='id ‘filename'>‘filename</span><span class='period'>.</span><span class='id jpg’'>jpg’</span><span class='rparen'>)</span></pre></div></div>
|
145
203
|
|
146
204
|
<div id="footer">
|
147
|
-
Generated on
|
205
|
+
Generated on Fri Jul 1 12:07:25 2011 by
|
148
206
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
149
207
|
0.7.2 (ruby-1.9.2).
|
150
208
|
</div>
|
data/examples/examples.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# client = GoogleStorage::Client.new
|
7
7
|
#
|
8
8
|
# Otherwise you can pass in the path to the google_storage.yml
|
9
|
-
# client = GoogleStorage::Client.new(:config_yml => 'C:/
|
9
|
+
# client = GoogleStorage::Client.new(:config_yml => 'C:/github/highvoltage/config/google_storage.yml')
|
10
10
|
#
|
11
11
|
### Service Requests ###
|
12
12
|
#
|
@@ -82,7 +82,7 @@ Example: GoogleStorage::Client.new(:config_yml => 'path to your google storage y
|
|
82
82
|
|
83
83
|
@client_id = config_yml['web_applications']['client_id']
|
84
84
|
@client_secret = config_yml['web_applications']['client_secret']
|
85
|
-
@client_secret.force_encoding("UTF-8")
|
85
|
+
@client_secret.force_encoding("UTF-8") if @client_secret.respond_to?(:force_encoding)
|
86
86
|
@refresh_token = config_yml['refresh_token'] if config_yml['refresh_token']
|
87
87
|
|
88
88
|
#TODO Add support for individual permission types
|
@@ -29,7 +29,7 @@ module GoogleStorage
|
|
29
29
|
begin
|
30
30
|
File.open(options[:write_to_file], 'wb') {|f| f.write(resp.body) }
|
31
31
|
rescue Exception => msg
|
32
|
-
return {
|
32
|
+
return {"Error" => msg}
|
33
33
|
end
|
34
34
|
resp_obj.clear
|
35
35
|
resp_obj[:success] = true
|
@@ -44,6 +44,9 @@ module GoogleStorage
|
|
44
44
|
resp_obj[:size] = resp.header["content-length"]
|
45
45
|
|
46
46
|
return resp_obj
|
47
|
+
|
48
|
+
|
49
|
+
|
47
50
|
end
|
48
51
|
|
49
52
|
###
|
@@ -83,7 +86,7 @@ module GoogleStorage
|
|
83
86
|
@data = uploaded_file.read
|
84
87
|
end
|
85
88
|
rescue Exception => msg
|
86
|
-
return {
|
89
|
+
return {"Error" => msg}
|
87
90
|
end
|
88
91
|
options[:data] = @data
|
89
92
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_storage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-07-29 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: crack
|
16
|
-
requirement: &
|
16
|
+
requirement: &10174068 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *10174068
|
25
25
|
description: A Ruby client library for using the new Google Storage API v2 using OAuth2.0
|
26
26
|
email:
|
27
27
|
- lucas@lucashills.com
|