google-apis 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +9 -0
- data/README.md +27 -10
- data/VERSION +1 -1
- data/google-apis.gemspec +1 -0
- data/lib/google_apis/api/base/instance_methods.rb +7 -3
- data/lib/google_apis/api/big_query.rb +8 -0
- data/lib/google_apis/connection.rb +36 -15
- data/lib/google_apis/version.rb +1 -1
- data/lib/google_apis.rb +2 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bedf6667092812f0ef8e2292a028ae8d63dd0f3
|
4
|
+
data.tar.gz: 4a3d38dec4fe35449d6b0b71e397f49008d900c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ca597c89963a2e0464d8d30b8cea8f963f7b6163aadebc6a071eb6269951233a0c9456fb6fc9efa68f222a1e92cb676aa85b0f9425f193a9f7bfb915675b467
|
7
|
+
data.tar.gz: 616f14c243a99469ade6b4a1c809f3853ae4ac95f1d3c5cfab8cd1a62c623819d4cca35a7c2ab5e346706d4526c77f6afd798c06f93b9c815d7b04b97fd738d4
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
= Google APIs CHANGELOG
|
2
2
|
|
3
|
+
== Version 0.1.3 (April 20, 2015)
|
4
|
+
|
5
|
+
* Camelizing underscored default param keys
|
6
|
+
* Defined private #default_params
|
7
|
+
* Defined Google::BigQuery.connection.project and Google::BigQuery.connection.dataset
|
8
|
+
* Using HTTPClient as default Faraday adapter
|
9
|
+
* Being able to (easily) upload to Google Storage
|
10
|
+
* Improved downloading files from Google Storage
|
11
|
+
|
3
12
|
== Version 0.1.2 (April 17, 2015)
|
4
13
|
|
5
14
|
* Added Google Storage API definition
|
data/README.md
CHANGED
@@ -25,7 +25,7 @@ Do not forget to download the private key by generating a P12 key file.
|
|
25
25
|
```ruby
|
26
26
|
[1] pry(main)> GoogleApis.connect :email_address => "lorem@developer.gserviceaccount.com", :private_key => "/path/to/private/key.p12"
|
27
27
|
=> #<GoogleApis::Connection:0x007fa5a4743668 [lorem@developer.gserviceaccount.com]>
|
28
|
-
[2] pry(main)> bq = Google::BigQuery.new :
|
28
|
+
[2] pry(main)> bq = Google::BigQuery.new :project_id => "your_project_id", :dataset_id => "your_dataset_id"
|
29
29
|
=> #<Google::BigQuery:0x007fc5c68647a8 v2:[datasets,jobs,projects,tabledata,tables] {projectId:"your_project_id",datasetId:"your_dataset_id"}>
|
30
30
|
[3] pry(main)> bq.tables.list
|
31
31
|
=> {"kind"=>"bigquery#tableList",
|
@@ -77,8 +77,8 @@ You can also configure an application-wide API connection. Let's say you also st
|
|
77
77
|
---
|
78
78
|
email_address: lorem@developer.gserviceaccount.com
|
79
79
|
private_key: "/path/to/private/key.p12"
|
80
|
-
|
81
|
-
|
80
|
+
project_id: your_project_id
|
81
|
+
dataset_id: your_dataset_id
|
82
82
|
```
|
83
83
|
|
84
84
|
```ruby
|
@@ -123,11 +123,28 @@ The following example demonstrates how to download a file from Google Storage:
|
|
123
123
|
"owner"=>{"entity"=>"user-00b4903a97b10389ce680ca45ba5999e068c4d0c8ccbbfbb7094238bc85a567", "entityId"=>"00b4903a97b20004ce680ca5f5aeebe068c4d0c8ccbbfbb7094266d1b9787457"},
|
124
124
|
"crc32c"=>"P4UlsJQ==",
|
125
125
|
"etag"=>"EN93lyNu/j8QCEAE="}]}
|
126
|
-
[3] pry(main)> Google::Storage.download metadata["items"][0]["mediaLink"]
|
126
|
+
[3] pry(main)> Google::Storage.download metadata["items"][0]["mediaLink"], "foo/"
|
127
127
|
=> 5592792
|
128
|
-
[4] pry(main)> puts `ls -l | grep awesome`
|
128
|
+
[4] pry(main)> puts `ls -l foo | grep awesome`
|
129
129
|
-rw-rw-r-- 1 paulengel paulengel 5592792 Apr 17 16:38 awesome.tsv
|
130
130
|
=> nil
|
131
|
+
[5] pry(main)> Google::Storage.objects.insert :bucket => "your-bucket", :media => "path/to/your/local/awesome.file.gz", :directory => "awesome_directory"
|
132
|
+
=> {"kind"=>"storage#object",
|
133
|
+
"id"=>"your-bucket/awesome_directory/awesome.file.gz/1429539088390000",
|
134
|
+
"selfLink"=>"https://www.googleapis.com/storage/v1/b/your-bucket/o/awesome_directory%2Fawesome.file.gz",
|
135
|
+
"name"=>"awesome_directory/awesome.file.gz",
|
136
|
+
"bucket"=>"your-bucket",
|
137
|
+
"generation"=>"1429539088390000",
|
138
|
+
"metageneration"=>"1",
|
139
|
+
"contentType"=>"text/plain",
|
140
|
+
"updated"=>"2015-04-20T14:11:28.390Z",
|
141
|
+
"storageClass"=>"STANDARD",
|
142
|
+
"size"=>"5898192",
|
143
|
+
"md5Hash"=>"82Pe0oFOTdC6nP86/K4fmA==",
|
144
|
+
"mediaLink"=>"https://www.googleapis.com/download/storage/v1/b/your-bucket/o/awesome_directory%2Fawesome.file.gz?generation=1429539088390000&alt=media",
|
145
|
+
"owner"=>{"entity"=>"user-00b49031947c40e21c1934ed03110ed7f71bfc2f8dd1982c257ad66d72e5d9a2", "entityId"=>"00b49031947c40e21c0e306d03110ed7f71bfc2f8dd1982c257ad66d72ea1934"},
|
146
|
+
"crc32c"=>"qPMe/Q==",
|
147
|
+
"etag"=>"ENGluYyIhcUCEAE="}
|
131
148
|
```
|
132
149
|
|
133
150
|
Easy, huh? :)
|
@@ -161,7 +178,7 @@ If it isn't already clear, you can specify a global Google API connection and us
|
|
161
178
|
[3] pry(main)> Google::Drive.files.list
|
162
179
|
=> {"kind"=>"drive#fileList",
|
163
180
|
...
|
164
|
-
[4] pry(main)> Google::BigQuery.connect :
|
181
|
+
[4] pry(main)> Google::BigQuery.connect :project_id => "your_project_id", :dataset_id => "your_dataset_id"
|
165
182
|
=> #<Google::BigQuery:0x007ffe0b1fb240 v2:[datasets,jobs,projects,tabledata,tables] {projectId:"your_project_id",datasetId:"your_dataset_id"}>
|
166
183
|
[5] pry(main)> Google::BigQuery.tables.list
|
167
184
|
=> {"kind"=>"bigquery#tableList",
|
@@ -176,10 +193,10 @@ Run the following command in your console:
|
|
176
193
|
|
177
194
|
```ruby
|
178
195
|
$ script/console
|
179
|
-
Loading Google APIs development environment (0.1.
|
196
|
+
Loading Google APIs development environment (0.1.3)
|
180
197
|
[1] pry(main)> GoogleApis.connect :email_address => "", :private_key => "/path/to/private/key.p12"
|
181
198
|
=> #<GoogleApis::Connection:0x007ff3d356cbf0 [lorem@developer.gserviceaccount.com]>
|
182
|
-
[2] pry(main)> bq = Google::BigQuery.new :
|
199
|
+
[2] pry(main)> bq = Google::BigQuery.new :project_id => "your_project_id", :dataset_id => "your_dataset_id"
|
183
200
|
=> #<Google::BigQuery:0x007f8c09a05338 v2:[datasets,jobs,projects,tabledata,tables] {projectId:"your_project_id",datasetId:"your_dataset_id"}>
|
184
201
|
```
|
185
202
|
|
@@ -195,8 +212,8 @@ And immediately start instantiating a Google API:
|
|
195
212
|
|
196
213
|
```ruby
|
197
214
|
$ script/console
|
198
|
-
Loading Google APIs development environment (0.1.
|
199
|
-
[1] pry(main)> bq = Google::BigQuery.new :
|
215
|
+
Loading Google APIs development environment (0.1.3)
|
216
|
+
[1] pry(main)> bq = Google::BigQuery.new :project_id => "your_project_id", :dataset_id => "your_dataset_id"
|
200
217
|
=> #<Google::BigQuery:0x007fa6c9cc3450 v2:[datasets,jobs,projects,tabledata,tables] {projectId:"your_project_id",datasetId:"your_dataset_id"}>
|
201
218
|
```
|
202
219
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/google-apis.gemspec
CHANGED
@@ -13,12 +13,12 @@ module GoogleApis
|
|
13
13
|
raise Error, "Please ensure a Google API connection" unless @connection
|
14
14
|
|
15
15
|
@discovered_api = connection.discover_api self.class.api, self.class.version
|
16
|
-
@default_params = default_params || {}
|
16
|
+
@default_params = (default_params || {}).inject({}){|h, (k, v)| h[k.to_s.gsub(/_(.)/){$1.upcase}.to_sym] = v; h}
|
17
17
|
end
|
18
18
|
|
19
19
|
def execute(api_method, *params)
|
20
20
|
params[0] = (params[0] || {}).symbolize_keys
|
21
|
-
params[0].reverse_merge!(
|
21
|
+
params[0].reverse_merge!(default_params)
|
22
22
|
connection.execute self.class, api_method, *params
|
23
23
|
end
|
24
24
|
|
@@ -27,7 +27,7 @@ module GoogleApis
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def inspect
|
30
|
-
"#<#{self.class}:#{object_hexid} #{discovered_api.version}:[#{discovered_api.discovered_resources.collect(&:name).sort.join(",")}] {#{
|
30
|
+
"#<#{self.class}:#{object_hexid} #{discovered_api.version}:[#{discovered_api.discovered_resources.collect(&:name).sort.join(",")}] {#{default_params.collect{|k, v| "#{k}:#{v.inspect}"}.join(",")}}>"
|
31
31
|
end
|
32
32
|
|
33
33
|
def method_missing(name, *args)
|
@@ -40,6 +40,10 @@ module GoogleApis
|
|
40
40
|
|
41
41
|
private
|
42
42
|
|
43
|
+
def default_params
|
44
|
+
@default_params
|
45
|
+
end
|
46
|
+
|
43
47
|
def find(name)
|
44
48
|
discovered_api.discovered_resources.detect{|x| x.name == name.to_s}
|
45
49
|
end
|
@@ -7,6 +7,14 @@ module GoogleApis
|
|
7
7
|
version 2
|
8
8
|
auth_scope "https://www.googleapis.com/auth/bigquery"
|
9
9
|
|
10
|
+
def project
|
11
|
+
default_params[:projectId]
|
12
|
+
end
|
13
|
+
|
14
|
+
def dataset
|
15
|
+
default_params[:datasetId]
|
16
|
+
end
|
17
|
+
|
10
18
|
def select_rows(statement)
|
11
19
|
result = jobs.query :query => statement
|
12
20
|
types = result["schema"]["fields"].collect{|x| x["type"].downcase.to_sym}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "uri"
|
2
|
+
require "fileutils"
|
2
3
|
|
3
4
|
module GoogleApis
|
4
5
|
class Connection
|
@@ -28,32 +29,40 @@ module GoogleApis
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def execute(api, api_method, *params)
|
31
|
-
|
32
|
-
|
33
|
-
nested, top_level = params
|
32
|
+
options, headers = params
|
34
33
|
|
35
|
-
if
|
34
|
+
if options
|
36
35
|
parameter_keys = (api_method.discovery_document["parameters"] || {}).keys.collect(&:to_sym)
|
37
|
-
|
36
|
+
media = options.delete(:media)
|
37
|
+
parameters, body_object = options.partition{|k, v| parameter_keys.include?(k)}.collect{|x| Hash[x]}
|
38
|
+
end
|
39
|
+
|
40
|
+
if media && media.is_a?(String)
|
41
|
+
parameters[:uploadType] = "resumable"
|
42
|
+
parameters[:name] ||= File.basename(media)
|
43
|
+
if directory = body_object.delete(:directory)
|
44
|
+
parameters[:name] = File.join(directory, parameters[:name])
|
45
|
+
end
|
46
|
+
media = Google::APIClient::UploadIO.new(media, `file --mime -b #{media}`.split(";")[0])
|
38
47
|
end
|
39
48
|
|
40
49
|
options = {:api_method => api_method}
|
41
|
-
options[:parameters] = parameters
|
42
|
-
options[:body_object] = body_object
|
43
|
-
options
|
50
|
+
options[:parameters] = parameters unless parameters.empty?
|
51
|
+
options[:body_object] = body_object unless body_object.empty?
|
52
|
+
options[:media] = media if media
|
53
|
+
options.merge!(headers) if headers
|
44
54
|
|
45
|
-
parse!
|
55
|
+
parse! execute!(api, options)
|
46
56
|
end
|
47
57
|
|
48
58
|
def download(api, uri, to = nil)
|
49
|
-
|
59
|
+
options = Google::APIClient::Request.new(:uri => uri)
|
50
60
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
File.open(to, "wb") do |file|
|
55
|
-
file.write response.body
|
61
|
+
if to.nil? || File.directory?(to) || to.match(/\/$/)
|
62
|
+
to = File.join *[to, File.basename(CGI.unescape(URI.parse(uri).path))].compact
|
56
63
|
end
|
64
|
+
|
65
|
+
save! execute!(api, options), to
|
57
66
|
end
|
58
67
|
|
59
68
|
def inspect
|
@@ -62,6 +71,11 @@ module GoogleApis
|
|
62
71
|
|
63
72
|
private
|
64
73
|
|
74
|
+
def execute!(api, options)
|
75
|
+
authenticate!(api)
|
76
|
+
@client.execute(options)
|
77
|
+
end
|
78
|
+
|
65
79
|
def authenticate!(api)
|
66
80
|
if !@asserter.scope.include?(api.auth_scope) || @client.authorization.expired?
|
67
81
|
@asserter.scope = (@asserter.scope.split(" ") << api.auth_scope).uniq
|
@@ -79,5 +93,12 @@ module GoogleApis
|
|
79
93
|
end
|
80
94
|
end
|
81
95
|
|
96
|
+
def save!(response, to)
|
97
|
+
FileUtils.mkdir_p File.dirname(to)
|
98
|
+
File.open(to, "wb") do |file|
|
99
|
+
file.write(response.body)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
82
103
|
end
|
83
104
|
end
|
data/lib/google_apis/version.rb
CHANGED
data/lib/google_apis.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-apis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Engel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-api-client
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.8.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httpclient
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|