google-cells 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +26 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +2 -0
- data/CHANGELOG.md +28 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +73 -0
- data/LICENSE.txt +22 -0
- data/README.md +75 -0
- data/Rakefile +4 -0
- data/examples/oauth2_service_account.rb +17 -0
- data/examples/oauth2_web_flow.rb +66 -0
- data/examples/sinatra/routes.rb +21 -0
- data/google_cells.gemspec +30 -0
- data/lib/google_cells.rb +80 -0
- data/lib/google_cells/author.rb +7 -0
- data/lib/google_cells/cell.rb +32 -0
- data/lib/google_cells/cell_selector.rb +18 -0
- data/lib/google_cells/cell_selector/row_selector.rb +70 -0
- data/lib/google_cells/fetcher.rb +27 -0
- data/lib/google_cells/folder.rb +7 -0
- data/lib/google_cells/google_object.rb +31 -0
- data/lib/google_cells/reader.rb +19 -0
- data/lib/google_cells/row.rb +7 -0
- data/lib/google_cells/spreadsheet.rb +179 -0
- data/lib/google_cells/url_helper.rb +37 -0
- data/lib/google_cells/util.rb +17 -0
- data/lib/google_cells/version.rb +3 -0
- data/lib/google_cells/worksheet.rb +63 -0
- data/spec/google_cells/cell_selector/row_selector_spec.rb +104 -0
- data/spec/google_cells/cell_selector_spec.rb +26 -0
- data/spec/google_cells/fetcher_spec.rb +21 -0
- data/spec/google_cells/google_object_spec.rb +18 -0
- data/spec/google_cells/reader_spec.rb +24 -0
- data/spec/google_cells/spreadsheet_spec.rb +171 -0
- data/spec/google_cells/url_helper_spec.rb +15 -0
- data/spec/google_cells/worksheet_spec.rb +69 -0
- data/spec/google_cells_spec.rb +13 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/vcr_cassettes/google_cells/cell_selector/each.yml +9147 -0
- data/spec/vcr_cassettes/google_cells/cell_selector/find_each.yml +10272 -0
- data/spec/vcr_cassettes/google_cells/cell_selector/find_each/selection.yml +947 -0
- data/spec/vcr_cassettes/google_cells/fetcher.yml +144 -0
- data/spec/vcr_cassettes/google_cells/reader.yml +144 -0
- data/spec/vcr_cassettes/google_cells/spreadsheet/cell_selector/worksheet.yml +276 -0
- data/spec/vcr_cassettes/google_cells/spreadsheet/copy.yml +447 -0
- data/spec/vcr_cassettes/google_cells/spreadsheet/copy/content.yml +18555 -0
- data/spec/vcr_cassettes/google_cells/spreadsheet/enfold.yml +259 -0
- data/spec/vcr_cassettes/google_cells/spreadsheet/folders.yml +319 -0
- data/spec/vcr_cassettes/google_cells/spreadsheet/get.yml +135 -0
- data/spec/vcr_cassettes/google_cells/spreadsheet/list.yml +276 -0
- data/spec/vcr_cassettes/google_cells/spreadsheet/worksheets.yml +276 -0
- data/spec/vcr_cassettes/google_cells/worksheet/save.yml +9555 -0
- data/spec/vcr_cassettes/google_cells/worksheets.yml +145 -0
- metadata +250 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8e91eb8141cc97ad38d072e1986b3de439b103fd
|
4
|
+
data.tar.gz: 1e5513c4d68f3a6f399530e376ad01ef85a5006d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bfbe733459648d1e428206fdd530383a6a24d8ddb91b3de3404f398f108fd7d0ca4230ae74b94a5ee52a4517e7b12c7a4b57b8a607ef34b79522e44c52e41cb0
|
7
|
+
data.tar.gz: 967e8491a166307e0ca3a09e4edbee55c0d53f9c9fa16cedad097fad35dbc4ed1f47e479fcb072cd79da23f8f049bec46915dcd935725292bb7bfeb579586292
|
data/.gitignore
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
coverage
|
6
|
+
InstalledFiles
|
7
|
+
lib/bundler/man
|
8
|
+
pkg
|
9
|
+
rdoc
|
10
|
+
spec/reports
|
11
|
+
test/tmp
|
12
|
+
test/version_tmp
|
13
|
+
tmp
|
14
|
+
|
15
|
+
# YARD artifacts
|
16
|
+
.yardoc
|
17
|
+
_yardoc
|
18
|
+
doc/
|
19
|
+
|
20
|
+
# vim temp files
|
21
|
+
*~
|
22
|
+
*.swp
|
23
|
+
*.swo
|
24
|
+
|
25
|
+
# sensitive data
|
26
|
+
spec/private_spec_helper.rb
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
google_cells
|
data/.ruby-version
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Version 0.3.0
|
2
|
+
=========================
|
3
|
+
|
4
|
+
+ Added Spreadsheet.subscribe and Spreadsheet.unsubscribe
|
5
|
+
|
6
|
+
Version 0.2.1
|
7
|
+
=========================
|
8
|
+
|
9
|
+
+ Added if-match header to update for new Google sheets compatibility
|
10
|
+
Fixes [GH#2](https://github.com/pikimal/google-cells/issues/2)
|
11
|
+
|
12
|
+
Version 0.2.0
|
13
|
+
=========================
|
14
|
+
|
15
|
+
+ Added Spreadsheet#defold to remove from a folder
|
16
|
+
+ Added explicit title setting to Spreadsheet.copy
|
17
|
+
|
18
|
+
Version 0.1.1
|
19
|
+
=========================
|
20
|
+
|
21
|
+
+ Fixed bug in Spreadsheet.delete
|
22
|
+
+ Fixed rake default task to run specs
|
23
|
+
|
24
|
+
Version 0.1.0
|
25
|
+
=========================
|
26
|
+
|
27
|
+
+ Added Spreadsheet#delete and Spreadsheet.delete
|
28
|
+
Fixes [GH#1](https://github.com/pikimal/google-cells/issues/1)
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
google-cells (0.2.1)
|
5
|
+
google-api-client (~> 0.7, >= 0.7.1)
|
6
|
+
nokogiri (~> 1.6, >= 1.6.1)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
addressable (2.3.5)
|
12
|
+
autoparse (0.3.3)
|
13
|
+
addressable (>= 2.3.1)
|
14
|
+
extlib (>= 0.9.15)
|
15
|
+
multi_json (>= 1.0.0)
|
16
|
+
crack (0.4.2)
|
17
|
+
safe_yaml (~> 1.0.0)
|
18
|
+
diff-lcs (1.2.5)
|
19
|
+
extlib (0.9.16)
|
20
|
+
faraday (0.9.0)
|
21
|
+
multipart-post (>= 1.2, < 3)
|
22
|
+
google-api-client (0.7.1)
|
23
|
+
addressable (>= 2.3.2)
|
24
|
+
autoparse (>= 0.3.3)
|
25
|
+
extlib (>= 0.9.15)
|
26
|
+
faraday (>= 0.9.0)
|
27
|
+
jwt (>= 0.1.5)
|
28
|
+
launchy (>= 2.1.1)
|
29
|
+
multi_json (>= 1.0.0)
|
30
|
+
retriable (>= 1.4)
|
31
|
+
signet (>= 0.5.0)
|
32
|
+
uuidtools (>= 2.1.0)
|
33
|
+
jwt (0.1.11)
|
34
|
+
multi_json (>= 1.5)
|
35
|
+
launchy (2.4.2)
|
36
|
+
addressable (~> 2.3)
|
37
|
+
mini_portile (0.5.2)
|
38
|
+
multi_json (1.8.4)
|
39
|
+
multipart-post (2.0.0)
|
40
|
+
nokogiri (1.6.1)
|
41
|
+
mini_portile (~> 0.5.0)
|
42
|
+
rake (0.9.6)
|
43
|
+
retriable (1.4.1)
|
44
|
+
rspec (2.14.1)
|
45
|
+
rspec-core (~> 2.14.0)
|
46
|
+
rspec-expectations (~> 2.14.0)
|
47
|
+
rspec-mocks (~> 2.14.0)
|
48
|
+
rspec-core (2.14.7)
|
49
|
+
rspec-expectations (2.14.4)
|
50
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
51
|
+
rspec-mocks (2.14.4)
|
52
|
+
safe_yaml (1.0.1)
|
53
|
+
signet (0.5.0)
|
54
|
+
addressable (>= 2.2.3)
|
55
|
+
faraday (>= 0.9.0.rc5)
|
56
|
+
jwt (>= 0.1.5)
|
57
|
+
multi_json (>= 1.0.0)
|
58
|
+
uuidtools (2.1.4)
|
59
|
+
vcr (2.8.0)
|
60
|
+
webmock (1.16.0)
|
61
|
+
addressable (>= 2.2.7)
|
62
|
+
crack (>= 0.3.2)
|
63
|
+
|
64
|
+
PLATFORMS
|
65
|
+
ruby
|
66
|
+
|
67
|
+
DEPENDENCIES
|
68
|
+
bundler (~> 1.5)
|
69
|
+
google-cells!
|
70
|
+
rake (~> 0)
|
71
|
+
rspec (~> 2.14, >= 2.14.1)
|
72
|
+
vcr (~> 2.8, >= 2.8.0)
|
73
|
+
webmock (~> 1.16, >= 1.6.0)
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Jessica Megan Thrower
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# GoogleCells
|
2
|
+
|
3
|
+
A wrapper for Google's Spreadsheet and Drive APIs.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'google_cells'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install google_cells
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
# configure with Google Service account keys
|
23
|
+
GoogleCells.configure do |config|
|
24
|
+
config.service_account_email = 'my_service_account@email.here'
|
25
|
+
config.key_file = File.dirname(__FILE__) +
|
26
|
+
'/path/to/private-key.file/from/Google'
|
27
|
+
config.key_secret = 'notasecret'
|
28
|
+
end
|
29
|
+
|
30
|
+
# list all spreadsheets in account
|
31
|
+
files = GoogleCells::Spreadsheet.list
|
32
|
+
files.each do |s|
|
33
|
+
p s.title
|
34
|
+
end
|
35
|
+
|
36
|
+
# get spreadsheet by google key
|
37
|
+
s = GoogleCells::Spreadsheet.get('my-spreadsheet-key-here')
|
38
|
+
|
39
|
+
# spread the love
|
40
|
+
s.share(value:'mybestfriend@email.here', type:'user', role:'writer')
|
41
|
+
|
42
|
+
# create a copy of file
|
43
|
+
c = s.copy
|
44
|
+
|
45
|
+
# put spreadsheet in a folder
|
46
|
+
s.enfold('my-folder-key-here')
|
47
|
+
|
48
|
+
# read cell content
|
49
|
+
w = s.worksheets[0]
|
50
|
+
w.rows.each do |row|
|
51
|
+
row.cells.each do |c|
|
52
|
+
p c.value
|
53
|
+
p c.input_value
|
54
|
+
p c.numeric_value
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# and write it!
|
59
|
+
w.rows.from(1).to(2).each do |row|
|
60
|
+
row.cells.each do |c|
|
61
|
+
c.input_value = "#{cell.row + cell.col}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
w.save!
|
65
|
+
|
66
|
+
```
|
67
|
+
|
68
|
+
## Contributing
|
69
|
+
|
70
|
+
1. Fork it ( http://github.com/<my-github-username>/google_cells/fork )
|
71
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
72
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
73
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
74
|
+
5. Create new Pull Request
|
75
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sinatra'
|
3
|
+
require "google_cells"
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
path = File.expand_path(File.dirname(__FILE__) + '/../tmp/service_account.yml')
|
7
|
+
file = YAML.load_file(path)
|
8
|
+
|
9
|
+
GoogleCells.configure do |config|
|
10
|
+
config.service_account_email = file['email']
|
11
|
+
config.key_file = File.dirname(__FILE__) + file['path']
|
12
|
+
config.key_secret = file['key_secret']
|
13
|
+
end
|
14
|
+
|
15
|
+
require File.expand_path(File.dirname(__FILE__) + '/sinatra/routes')
|
16
|
+
|
17
|
+
App::Routes.run!
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sinatra'
|
3
|
+
require "google_cells"
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
path = File.expand_path(File.dirname(__FILE__) + '/../tmp/web_flow.yml')
|
7
|
+
file = YAML.load_file(path)
|
8
|
+
|
9
|
+
GoogleCells.configure do |config|
|
10
|
+
config.client_id = file['client_id']
|
11
|
+
config.client_secret = file['client_secret']
|
12
|
+
end
|
13
|
+
|
14
|
+
module App
|
15
|
+
class Routes < ::Sinatra::Base
|
16
|
+
|
17
|
+
enable :sessions
|
18
|
+
|
19
|
+
set :client, GoogleCells.client
|
20
|
+
|
21
|
+
def client
|
22
|
+
settings.client
|
23
|
+
end
|
24
|
+
|
25
|
+
def authorization
|
26
|
+
@authorization ||= (
|
27
|
+
auth = client.authorization.dup
|
28
|
+
auth.redirect_uri = to('/oauth2_callback')
|
29
|
+
auth.update_token!(session)
|
30
|
+
auth
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
before do
|
35
|
+
# Ensure user has authorized the app
|
36
|
+
unless authorization.access_token || request.path_info =~ /^\/oauth2/
|
37
|
+
redirect to('/oauth2_authorize')
|
38
|
+
end
|
39
|
+
GoogleCells.client.authorization = authorization
|
40
|
+
end
|
41
|
+
|
42
|
+
after do
|
43
|
+
# Serialize the access/refresh token to the session
|
44
|
+
session[:access_token] = authorization.access_token
|
45
|
+
session[:refresh_token] = authorization.refresh_token
|
46
|
+
session[:expires_in] = authorization.expires_in
|
47
|
+
session[:issued_at] = authorization.issued_at
|
48
|
+
end
|
49
|
+
|
50
|
+
get '/oauth2_authorize' do
|
51
|
+
# Request authorization
|
52
|
+
redirect authorization.authorization_uri.to_s, 303
|
53
|
+
end
|
54
|
+
|
55
|
+
get '/oauth2_callback' do
|
56
|
+
# Exchange token
|
57
|
+
authorization.code = params[:code] if params[:code]
|
58
|
+
authorization.fetch_access_token!
|
59
|
+
redirect to('/')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
require File.expand_path(File.dirname(__FILE__) + '/sinatra/routes')
|
65
|
+
|
66
|
+
App::Routes.run!
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
module App
|
4
|
+
class Routes < ::Sinatra::Base
|
5
|
+
get '/' do
|
6
|
+
@spreadsheets = GoogleCells::Spreadsheet.list
|
7
|
+
@spreadsheets.sort_by!{|s| s.updated_at}
|
8
|
+
@spreadsheets.reverse!
|
9
|
+
text = "<h1>All Spreadsheets</h1>"
|
10
|
+
if @spreadsheets.empty?
|
11
|
+
text << "Nothing here."
|
12
|
+
else
|
13
|
+
text << "<% for s in @spreadsheets %>"
|
14
|
+
text << "<br/><%= s.updated_at %> -- <a href=\"https://docs.google.com/"
|
15
|
+
text << "spreadsheet/ccc?key=<%= s.key %>\"><%= s.title %></a>"
|
16
|
+
text << "<% end %>"
|
17
|
+
end
|
18
|
+
erb text
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'google_cells/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "google-cells"
|
8
|
+
spec.version = GoogleCells::VERSION
|
9
|
+
spec.authors = ["Jessica Megan Thrower"]
|
10
|
+
spec.email = ["jmthrower@gmail.com"]
|
11
|
+
spec.summary = %q{Google Spreadsheets API wrapper}
|
12
|
+
spec.description = %q{An intuitive Google Spreadsheets API wrapper}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'google-api-client', '~> 0.7', '>= 0.7.1'
|
22
|
+
spec.add_dependency "nokogiri", "~> 1.6", ">= 1.6.1"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
25
|
+
spec.add_development_dependency 'rake', '~> 0'
|
26
|
+
|
27
|
+
spec.add_development_dependency "rspec", '~> 2.14', ">= 2.14.1"
|
28
|
+
spec.add_development_dependency "vcr", "~> 2.8", '>= 2.8.0'
|
29
|
+
spec.add_development_dependency "webmock", "~> 1.16", ">= 1.6.0"
|
30
|
+
end
|
data/lib/google_cells.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'google/api_client'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require "google_cells/url_helper"
|
5
|
+
require "google_cells/fetcher"
|
6
|
+
require "google_cells/reader"
|
7
|
+
require "google_cells/util"
|
8
|
+
require "google_cells/google_object"
|
9
|
+
require "google_cells/author"
|
10
|
+
require "google_cells/cell"
|
11
|
+
require "google_cells/cell_selector"
|
12
|
+
require "google_cells/folder"
|
13
|
+
require "google_cells/row"
|
14
|
+
require "google_cells/spreadsheet"
|
15
|
+
require "google_cells/worksheet"
|
16
|
+
require "google_cells/version"
|
17
|
+
|
18
|
+
module GoogleCells
|
19
|
+
class << self
|
20
|
+
attr_accessor :config, :client
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.configure
|
24
|
+
self.config ||= Configuration.new
|
25
|
+
yield(config)
|
26
|
+
|
27
|
+
self.client = Google::APIClient.new(
|
28
|
+
:application_name => 'GoogleCells App',
|
29
|
+
:application_version => '0.0.3'
|
30
|
+
)
|
31
|
+
if config.path_to_credentials_file
|
32
|
+
config_from_file
|
33
|
+
elsif config.client_id
|
34
|
+
config_web_application
|
35
|
+
else
|
36
|
+
config_service_account
|
37
|
+
end
|
38
|
+
client.authorization.scope = ['https://www.googleapis.com/auth/drive',
|
39
|
+
'https://spreadsheets.google.com/feeds']
|
40
|
+
client.authorization.token_credential_uri = 'https://accounts.google.com/o/oauth2/token'
|
41
|
+
|
42
|
+
config
|
43
|
+
end
|
44
|
+
|
45
|
+
class Configuration
|
46
|
+
attr_accessor :service_account_email, :key_secret, :key_file, :client_id,
|
47
|
+
:client_secret, :path_to_credentials_file
|
48
|
+
|
49
|
+
def initialize
|
50
|
+
@key_secret = 'notasecret'
|
51
|
+
|
52
|
+
@api_version = 'v2'
|
53
|
+
@cached_api_file = "drive-#{@api_version}.cache"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def self.config_web_application
|
60
|
+
client.authorization.client_id = config.client_id
|
61
|
+
client.authorization.client_secret = config.client_secret
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.config_service_account
|
65
|
+
key = Google::APIClient::KeyUtils.load_from_pkcs12(config.key_file,
|
66
|
+
config.key_secret)
|
67
|
+
opts = { issuer: config.service_account_email,
|
68
|
+
signing_key: key }
|
69
|
+
|
70
|
+
client.authorization = Signet::OAuth2::Client.new(opts)
|
71
|
+
client.authorization.audience = 'https://accounts.google.com/o/oauth2/token'
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.config_from_file
|
75
|
+
flow = Google::APIClient::FileStorage.new(
|
76
|
+
:path => config.path_to_credentials_file
|
77
|
+
)
|
78
|
+
client.authorization = flow.authorize
|
79
|
+
end
|
80
|
+
end
|