google_storage 0.1.2 → 0.2.0

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.
@@ -1,320 +0,0 @@
1
- body {
2
- padding: 0 20px;
3
- font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
4
- font-size: 13px;
5
- }
6
- body.frames { padding: 0 5px; }
7
- h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; }
8
- h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; }
9
- h1.title { margin-bottom: 10px; }
10
- h1.alphaindex { margin-top: 0; font-size: 22px; }
11
- h2 {
12
- padding: 0;
13
- padding-bottom: 3px;
14
- border-bottom: 1px #aaa solid;
15
- font-size: 1.4em;
16
- margin: 1.8em 0 0.5em;
17
- }
18
- h2 small { font-weight: normal; font-size: 0.7em; display: block; float: right; }
19
- .clear { clear: both; }
20
- .inline { display: inline; }
21
- .inline p:first-child { display: inline; }
22
- .docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; }
23
- .docstring h1 { font-size: 1.2em; }
24
- .docstring h2 { font-size: 1.1em; }
25
- .docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; }
26
- .summary_desc .object_link, .docstring .object_link { font-family: monospace; }
27
-
28
- /* style for <ul> */
29
- #filecontents li > p, .docstring li > p { margin: 0px; }
30
- #filecontents ul, .docstring ul { padding-left: 20px; }
31
- /* style for <dl> */
32
- #filecontents dl, .docstring dl { border: 1px solid #ccc; }
33
- #filecontents dt, .docstring dt { background: #ddd; font-weight: bold; padding: 3px 5px; }
34
- #filecontents dd, .docstring dd { padding: 5px 0px; margin-left: 18px; }
35
- #filecontents dd > p, .docstring dd > p { margin: 0px; }
36
-
37
- .note {
38
- color: #222;
39
- -moz-border-radius: 3px; -webkit-border-radius: 3px;
40
- background: #e3e4e3; border: 1px solid #d5d5d5; padding: 7px 10px;
41
- display: block;
42
- }
43
- .note.todo { background: #ffffc5; border-color: #ececaa; }
44
- .note.returns_void { background: #efefef; }
45
- .note.deprecated { background: #ffe5e5; border-color: #e9dada; }
46
- .note.private { background: #ffffc5; border-color: #ececaa; }
47
- .note.title { text-transform: lowercase; padding: 1px 5px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; }
48
- .summary_signature + .note.title { margin-left: 7px; }
49
- h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; }
50
- .note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; }
51
- .note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; }
52
- .note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; }
53
- .note.title.private { background: #d5d5d5; border-color: #c5c5c5; }
54
- .discussion .note { margin-top: 6px; }
55
- .discussion .note:first-child { margin-top: 0; }
56
-
57
- h3.inherited {
58
- font-style: italic;
59
- font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
60
- font-weight: normal;
61
- padding: 0;
62
- margin: 0;
63
- margin-top: 12px;
64
- margin-bottom: 3px;
65
- font-size: 13px;
66
- }
67
- p.inherited {
68
- padding: 0;
69
- margin: 0;
70
- margin-left: 25px;
71
- }
72
-
73
- #filecontents dl.box, dl.box {
74
- border: 0;
75
- width: 520px;
76
- font-size: 1em;
77
- }
78
- #filecontents dl.box dt, dl.box dt {
79
- float: left;
80
- display: block;
81
- width: 100px;
82
- margin: 0;
83
- text-align: right;
84
- font-weight: bold;
85
- background: transparent;
86
- border: 1px solid #aaa;
87
- border-width: 1px 0px 0px 1px;
88
- padding: 6px 0;
89
- padding-right: 10px;
90
- }
91
- #filecontents dl.box dd, dl.box dd {
92
- float: left;
93
- display: block;
94
- width: 380px;
95
- margin: 0;
96
- padding: 6px 0;
97
- padding-right: 20px;
98
- border: 1px solid #aaa;
99
- border-width: 1px 1px 0 0;
100
- }
101
- #filecontents dl.box .last, dl.box .last {
102
- border-bottom: 1px solid #aaa;
103
- }
104
- #filecontents dl.box .r1, dl.box .r1 { background: #eee; }
105
-
106
- ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; }
107
- #files { padding-left: 15px; font-size: 1.1em; }
108
-
109
- #files { padding: 0; }
110
- #files li { list-style: none; display: inline; padding: 7px 12px; line-height: 35px; }
111
-
112
- dl.constants { margin-left: 40px; }
113
- dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; }
114
- dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; }
115
-
116
- .summary_desc { margin-left: 32px; display: block; font-family: sans-serif; }
117
- .summary_desc tt { font-size: 0.9em; }
118
- dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; }
119
- dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; }
120
- dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; }
121
- dl.constants .discussion *:first-child { margin-top: 0; }
122
- dl.constants .discussion *:last-child { margin-bottom: 0; }
123
-
124
- .method_details { border-top: 1px dotted #aaa; margin-top: 15px; padding-top: 0; }
125
- .method_details.first { border: 0; }
126
- p.signature {
127
- font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace;
128
- padding: 6px 10px; margin-top: 18px;
129
- background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
130
- }
131
- p.signature tt { font-family: Monaco, Consolas, Courier, monospace; }
132
- p.signature .overload { display: block; }
133
- p.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; }
134
- p.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; }
135
- p.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; }
136
-
137
- .tags h3 { font-size: 1em; margin-bottom: 0; }
138
- .tags ul { margin-top: 5px; padding-left: 30px; list-style: square; }
139
- .tags ul li { margin-bottom: 3px; }
140
- .tags ul .name { font-family: monospace; font-weight: bold; }
141
- .tags ul .note { padding: 3px 6px; }
142
- .tags { margin-bottom: 12px; }
143
-
144
- .tags .examples h3 { margin-bottom: 10px; }
145
- .tags .examples h4 { padding: 0; margin: 0; margin-left: 15px; font-weight: bold; font-size: 0.9em; }
146
-
147
- .tags .overload .overload_item { list-style: none; margin-bottom: 25px; }
148
- .tags .overload .overload_item .signature {
149
- padding: 2px 8px;
150
- background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
151
- }
152
- .tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; }
153
- .tags .overload .docstring { margin-top: 15px; }
154
-
155
- .defines { display: none; }
156
-
157
- #method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; }
158
-
159
- .showSource { font-size: 0.9em; }
160
- .showSource a:link, .showSource a:visited { text-decoration: none; color: #666; }
161
-
162
- #content a:link, #content a:visited { text-decoration: none; color: #05a; }
163
- #content a:hover { background: #ffffa5; }
164
- .docstring { margin-right: 6em; }
165
-
166
- ul.summary {
167
- list-style: none;
168
- font-family: monospace;
169
- font-size: 1em;
170
- line-height: 1.5em;
171
- }
172
- ul.summary a:link, ul.summary a:visited {
173
- text-decoration: none; font-size: 1.1em;
174
- }
175
- ul.summary li { margin-bottom: 5px; }
176
- .summary .summary_signature {
177
- padding: 1px 10px;
178
- background: #eaeaff; border: 1px solid #dfdfe5;
179
- -moz-border-radius: 3px; -webkit-border-radius: 3px;
180
- }
181
- .summary_signature:hover { background: #eeeeff; cursor: pointer; }
182
- ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;}
183
- ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; }
184
- #content .summary_signature:hover a:link,
185
- #content .summary_signature:hover a:visited {
186
- background: transparent;
187
- color: #48f;
188
- }
189
-
190
- p.inherited a { font-family: monospace; font-size: 0.9em; }
191
- p.inherited { word-spacing: 5px; font-size: 1.2em; }
192
-
193
- p.children { font-size: 1.2em; }
194
- p.children a { font-size: 0.9em; }
195
- p.children strong { font-size: 0.8em; }
196
- p.children strong.modules { padding-left: 5px; }
197
-
198
- ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; }
199
- ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; }
200
- ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,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) no-repeat top center; }
201
- ul.fullTree li:first-child { padding-top: 0; background: transparent; }
202
- ul.fullTree li:last-child { padding-bottom: 0; }
203
- .showAll ul.fullTree { display: block; }
204
- .showAll .inheritName { display: none; }
205
-
206
- #search { position: absolute; right: 14px; top: 0px; }
207
- #search a:link, #search a:visited {
208
- display: block; float: left; margin-right: 4px;
209
- padding: 8px 10px; text-decoration: none; color: #05a;
210
- border: 1px solid #d8d8e5;
211
- -moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;
212
- -webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px;
213
- background: #eaf0ff;
214
- -webkit-box-shadow: -1px 1px 3px #ddd;
215
- }
216
- #search a:hover { background: #f5faff; color: #06b; }
217
- #search a.active {
218
- background: #568; padding-bottom: 20px; color: #fff; border: 1px solid #457;
219
- -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;
220
- -webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px;
221
- }
222
- #search a.inactive { color: #999; }
223
- .frames #search { display: none; }
224
- .inheritanceTree, .toggleDefines { float: right; }
225
-
226
- #menu { font-size: 1.3em; color: #bbb; top: -5px; position: relative; }
227
- #menu .title, #menu a { font-size: 0.7em; }
228
- #menu .title a { font-size: 1em; }
229
- #menu .title { color: #555; }
230
- #menu a:link, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; }
231
- #menu a:hover { color: #05a; }
232
- #menu .noframes { display: none; }
233
- .frames #menu .noframes { display: inline; float: right; }
234
-
235
- #footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; }
236
- #footer a:link, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; }
237
- #footer a:hover { color: #05a; }
238
-
239
- #listing ul.alpha { font-size: 1.1em; }
240
- #listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; }
241
- #listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; }
242
- #listing ul.alpha ul { margin: 0; padding-left: 15px; }
243
- #listing ul small { color: #666; font-size: 0.7em; }
244
-
245
- li.r1 { background: #f0f0f0; }
246
- li.r2 { background: #fafafa; }
247
-
248
- #search_frame {
249
- z-index: 9999;
250
- background: #fff;
251
- display: none;
252
- position: absolute;
253
- top: 36px;
254
- right: 18px;
255
- width: 500px;
256
- height: 80%;
257
- overflow-y: scroll;
258
- border: 1px solid #999;
259
- border-collapse: collapse;
260
- -webkit-box-shadow: -7px 5px 25px #aaa;
261
- -moz-box-shadow: -7px 5px 25px #aaa;
262
- -moz-border-radius: 2px;
263
- -webkit-border-radius: 2px;
264
- }
265
-
266
- #content ul.summary li.deprecated .summary_signature a:link,
267
- #content ul.summary li.deprecated .summary_signature a:visited { text-decoration: line-through; font-style: italic; }
268
-
269
- #toc {
270
- padding: 20px; padding-right: 30px; border: 1px solid #ddd; float: right; background: #fff; margin-left: 20px; margin-bottom: 20px;
271
- max-width: 300px;
272
- -webkit-box-shadow: -2px 2px 6px #bbb;
273
- -moz-box-shadow: -2px 2px 6px #bbb;
274
- z-index: 5000;
275
- position: relative;
276
- }
277
- #toc.nofloat { float: none; max-width: none; border: none; padding: 0; margin: 20px 0; -webkit-box-shadow: none; -moz-box-shadow: none; }
278
- #toc.nofloat.hidden { padding: 0; background: 0; margin-bottom: 5px; }
279
- #toc .title { margin: 0; }
280
- #toc ol { padding-left: 1.8em; }
281
- #toc li { font-size: 1.1em; line-height: 1.7em; }
282
- #toc > ol > li { font-size: 1.1em; font-weight: bold; }
283
- #toc ol > ol { font-size: 0.9em; }
284
- #toc ol ol > ol { padding-left: 2.3em; }
285
- #toc ol + li { margin-top: 0.3em; }
286
- #toc.hidden { padding: 10px; background: #f6f6f6; -webkit-box-shadow: none; -moz-box-shadow: none; }
287
- #filecontents h1 + #toc.nofloat { margin-top: 0; }
288
-
289
- /* syntax highlighting */
290
- .source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; }
291
- #filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; }
292
- #filecontents pre.code, .docstring pre.code { display: block; }
293
- .source_code .lines { padding-right: 12px; color: #555; text-align: right; }
294
- #filecontents pre.code, .docstring pre.code,
295
- .tags .example { padding: 5px 12px; margin-top: 4px; border: 1px solid #eef; background: #f5f5ff; }
296
- pre.code { color: #000; }
297
- pre.code .info.file { color: #555; }
298
- pre.code .val { color: #036A07; }
299
- pre.code .tstring_content,
300
- pre.code .heredoc_beg, pre.code .heredoc_end,
301
- pre.code .qwords_beg, pre.code .qwords_end,
302
- pre.code .tstring, pre.code .dstring { color: #036A07; }
303
- pre.code .fid, pre.code .id.new, pre.code .id.to_s,
304
- pre.code .id.to_sym, pre.code .id.to_f,
305
- pre.code .dot + pre.code .id,
306
- pre.code .id.to_i pre.code .id.each { color: #0085FF; }
307
- pre.code .comment { color: #0066FF; }
308
- pre.code .const, pre.code .constant { color: #585CF6; }
309
- pre.code .symbol { color: #C5060B; }
310
- pre.code .kw,
311
- pre.code .label,
312
- pre.code .id.require,
313
- pre.code .id.extend,
314
- pre.code .id.include { color: #0000FF; }
315
- pre.code .ivar { color: #318495; }
316
- pre.code .gvar,
317
- pre.code .id.backref,
318
- pre.code .id.nth_ref { color: #6D79DE; }
319
- pre.code .regexp, .dregexp { color: #036A07; }
320
- pre.code a { border-bottom: 1px dotted #bbf; }
@@ -1,211 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
- <title>
7
- File: README
8
-
9
- &mdash; Documentation by YARD 0.7.2
10
-
11
- </title>
12
-
13
- <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
-
15
- <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
-
17
- <script type="text/javascript" charset="utf-8">
18
- relpath = '';
19
- if (relpath != '') relpath += '/';
20
- </script>
21
-
22
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
23
-
24
- <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
25
-
26
-
27
- </head>
28
- <body>
29
- <script type="text/javascript" charset="utf-8">
30
- if (window.top.frames.main) document.body.className = 'frames';
31
- </script>
32
-
33
- <div id="header">
34
- <div id="menu">
35
-
36
- <a href="_index.html" title="Index">Index</a> &raquo;
37
- <span class="title">File: README</span>
38
-
39
-
40
- <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
- </div>
42
-
43
- <div id="search">
44
-
45
- <a id="class_list_link" href="#">Class List</a>
46
-
47
- <a id="method_list_link" href="#">Method List</a>
48
-
49
- <a id="file_list_link" href="#">File List</a>
50
-
51
- </div>
52
- <div class="clear"></div>
53
- </div>
54
-
55
- <iframe id="search_frame"></iframe>
56
-
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 original
59
- version of Google&#8217;s <span class="caps">API</span> or they were dependent on Gems that don&#8217;t run properly on&#8230; dare I say it&#8230; windows.. :) Apologies, I&#8217;m without choice
60
- at the moment, but anyways, this gem should run fine on all platforms and I&#8217;ve tried to keep dependencies to a minimum. Let me know if you find
61
- any bugs though ok and feel free to contribute.</p>
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&#8217;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 =&gt; true key/value pair
68
-
69
- client.list_buckets
70
- =&gt; {:success=&gt;true,
71
- :buckets=&gt;[ {&quot;Name&quot;=&gt;&quot;bucket_1_example&quot;, &quot;CreationDate&quot;=&gt;&quot;2011-06-07T07:11:18.480Z&quot;},
72
- {&quot;Name&quot;=&gt;&quot;bucket_2_example&quot;, &quot;CreationDate&quot;=&gt;&quot;2011-05-31T10:58:08.097Z&quot;},
73
- {&quot;Name&quot;=&gt;&quot;bucket_3_example&quot;, &quot;CreationDate&quot;=&gt;&quot;2011-06-06T22:47:10.728Z&quot;}],
74
- :raw=&gt;{ THIS :raw FIELD WILL RETURN A HASH OF THE UNPARSED RESPONSE IN CASE YOU NEED IT }
75
- }
76
-
77
- #Unsuccessful responses will return an &quot;Error&quot; Hash
78
-
79
- client.get_bucket(&quot;bucket_4_example&quot;)
80
- =&gt; {&quot;Error&quot;=&gt;{
81
- &quot;Code&quot;=&gt;&quot;NoSuchBucket&quot;,
82
- &quot;Message&quot;=&gt;&quot;The specified bucket does not exist.&quot;
83
- }}
84
- </pre>
85
- <h2>Setup Guide</h2>
86
- <p>There&#8217;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
87
- more on the nitty gritty if you like here: <a href="http://code.google.com/apis/accounts/docs/OAuth2.html">Google&#8217;s OAuth2 Guide</a></p>
88
- <p>I&#8217;ll try and add client side support also once this gem is up and running properly, but for the moment it&#8217;s only setup to support server side web
89
- applications.</p>
90
- <p>But it&#8217;s also possible to run this gem from the command line if you want.</p>
91
- <h2>Install the google_storage Gem</h2>
92
- <p>Include the google_storage gem in your Gemfile and install config files
93
- <pre class="code"><span class='id gem'>gem</span> <span class='id “google_storage”'>“google_storage”</span>
94
- <span class='id bundle'>bundle</span> <span class='id install'>install</span>
95
- </pre>
96
- Then in your Rails application directory run:
97
- <pre class="code"><span class='id rails'>rails</span> <span class='id generate'>generate</span> <span class='label'>google_storage:</span><span class='id install'>install</span>
98
- </pre>
99
- This will generate some rake tasks a google_storage.yml file in your config directory.
100
- <pre class="code"><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Application</span><span class='regexp_end'>/config</span></span><span class='op'>/</span><span class='id google_storage'>google_storage</span><span class='period'>.</span><span class='id yml'>yml</span>
101
- <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Application</span><span class='regexp_end'>/lib</span></span><span class='op'>/</span><span class='id tasks'>tasks</span><span class='op'>/</span><span class='id google_storage'>google_storage</span><span class='period'>.</span><span class='id task'>task</span>
102
- </pre></p>
103
- <h2>Setup your Google Project Client ID&#8217;s</h2>
104
- <p>Visit <a href="http://code.google.com/apis/storage/">Google Storage</a> and select activate Google Storage.
105
- If you haven&#8217;t already got a project set up, it&#8217;ll prompt you to create one.</p>
106
- <p>When you have access to your Google APIs Console, you need to enable Google Storage. When you select enable, you&#8217;ll be shown terms and conditions
107
- and you&#8217;ll then need to setup billing. They have full pricing details there for you to check out as well but I think it&#8217;s pretty reasonable..</p>
108
- <p>Create a client ID for your project
109
- On the left menu select &#8220;<span class="caps">API</span> Access&#8221; and then &#8220;Create an OAuth 2.0 client ID&#8221;
110
- Enter your project&#8217;s name and brand information.</p>
111
- <p>Select Application type = Web Application and enter your site&#8217;s information. If you&#8217;re using localhost and running
112
- locally make sure you include the port number you&#8217;re using as well.</p>
113
- <h2>Enter your Client ID details into your google_storage.yml</h2>
114
- <p>This is the example google_storage.yml file that is copied into your config directory of your rails application.</p>
115
- <p>Follow the steps to obtain a refresh token from google.</p>
116
- <pre class="code">
117
- #Replace the following example ids with your own
118
-
119
- google_config:
120
- x-goog-project-id: 825628431245
121
-
122
- #Client ID for web applications
123
- web_applications:
124
- client_id: 825628431245.apps.googleusercontent.com
125
- client_secret: lpNYX5SPFDB6N-40lyMIPlQn
126
- redirect_uris: 'http://localhost:3000/example'
127
- js_origins: 'http://localhost:3000'
128
-
129
- #refresh_token: replace this line with a refresh token from google, read below on how to get one
130
-
131
- #You need to acquire a refresh token from google so that the google_storage gem
132
- #can acquire access tokens whenever it needs to make new requests
133
-
134
- # 1. Make sure you've signed up for Google Storage and filled in the above client ID details
135
- # for your web application first
136
- #
137
- # 2. Depending on how much access you want to grant to your application run
138
- # ONE of the following from your applications root directory. If you intend to be able to create and
139
- # destroy objects and buckets and also be able to set permissions then use full_control
140
- #
141
- # rake gs:grant:read_only
142
- # rake gs:grant:read_write
143
- # rake gs:grant:full_control
144
- #
145
- # 3. Step 2 will generate a URL for you. Copy and paste the URL into a browser and you should be prompted
146
- # by google to authorize the request by logging into your browser using the google email account you setup
147
- # your google storage account with
148
- #
149
- # 4. When you 'allow access' you'll be redirected back to the redirect URL you setup in your client ID
150
- # Your redirect URL should now include an authorization code. It'll look something like this:
151
- # http://localhost:3000/example?code=4/WvlklnjtybhRJpaKpmDYrzIhAzyx
152
- #
153
- # 5. Copy that code from your URL and run the following rake task from your application directory
154
- #
155
- # rake gs:refresh_token['paste_your_auth_code_here']
156
- # Example: rake gs:refresh_token['4/WvlklnjtybhRJpaKpmDYrzIhAzyx']
157
- #
158
- # 6. If everything worked you should see something that looks like the following:
159
- #
160
- # refresh_token: 1/x4X-U57snRMkLIWWYHWLCXPbfcnyGsdfx04sWAiG_1k
161
- #
162
- # 7. Copy and paste the refresh_token into this file. Your application should now be able to make calls to your
163
- # Google Storage API
164
- </pre>
165
- <p>Once you&#8217;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 =&gt; ‘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’) &lt;— private bucket
182
- client.create_bucket(‘bucket_name’, :x_goog_acl =&gt; ‘public-read’) &lt;— 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 =&gt; ‘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 =&gt; File.read(‘c:/temp/file.jpg’), :x_goog_acl =&gt; ‘public-read’)
198
- client.upload_object(‘bucket_name’, ‘filename.jpg’, :path_to_file =&gt; ‘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>
203
-
204
- <div id="footer">
205
- Generated on Fri Jul 1 12:07:25 2011 by
206
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
207
- 0.7.2 (ruby-1.9.2).
208
- </div>
209
-
210
- </body>
211
- </html>