legato 0.0.2 → 0.0.4

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/CHANGELOG.md ADDED
@@ -0,0 +1,42 @@
1
+ ## Legato 0.0.3 ##
2
+
3
+ * Merged branch oauth-1-support
4
+
5
+ If you pass on an OAuth 1 (not 2, the default) token from the OAuth gem, Legato will use that.
6
+ Support for OAuth 2 is greater than OAuth 1 because of subtle and annoying differences in their operation.
7
+
8
+ *Tony Pitale*
9
+
10
+ ## Legato 0.0.2 ##
11
+
12
+ * Specify request fields to slim down content returned
13
+
14
+ Include request fields columnHeaders/name, rows, totalResults, totalsForAllResults
15
+
16
+ *Patrick Roby*
17
+
18
+ * Add total results and totals_for_all_results to Query#load
19
+
20
+ *Patrick Roby*
21
+
22
+ * Change :order to :sort to match GA
23
+
24
+ *Patrick Roby*
25
+
26
+ * Add webPropertyId to Management::Profile
27
+
28
+ *Patrick Roby*
29
+
30
+ * Allow explicitly setting the join character on filters
31
+
32
+ *Tony Pitale*
33
+
34
+ * 1.8.7 Support
35
+
36
+ *Tony Pitale*
37
+
38
+ ## Legato 0.0.1 ##
39
+
40
+ * Initial implementation
41
+
42
+ *Tony Pitale*
data/Gemfile CHANGED
@@ -2,3 +2,8 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in legato.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'oauth2'
8
+ gem 'oauth'
9
+ end
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ require 'oauth'
3
4
  require 'oauth2'
4
5
 
5
6
  # get oauth2 via device code, unimplemented as of now
@@ -8,7 +9,7 @@ require 'oauth2'
8
9
  # curl -d "client_id={{client_id}}&client_secret={{client_secret}}&code=4/8O1xUKWzOdJESG7ednnulZPsbyNt&grant_type=http://oauth.net/grant_type/device/1.0" https://accounts.google.com/o/oauth2/token
9
10
  # { "access_token" : "ERspXATXoblahblahblah", "token_type" : "Bearer", "expires_in" : 3600, "refresh_token" : "1/balhaajsdfklasfdjs;df" }
10
11
 
11
- namespace :oauth do
12
+ namespace :oauth2 do
12
13
  def client
13
14
  # This is my test client account for Legato.
14
15
  OAuth2::Client.new('779170787975.apps.googleusercontent.com', 'mbCISoZiSwyVQIDEbLj4EeEc', {
@@ -35,3 +36,38 @@ namespace :oauth do
35
36
  puts access_token.token
36
37
  end
37
38
  end
39
+
40
+ namespace :oauth do
41
+ def consumer
42
+ OAuth::Consumer.new('779170787975.apps.googleusercontent.com', 'mbCISoZiSwyVQIDEbLj4EeEc', {
43
+ :site => "https://www.google.com",
44
+ :request_token_path => "/accounts/OAuthGetRequestToken",
45
+ :access_token_path => "/accounts/OAuthGetAccessToken",
46
+ :authorize_path => "/accounts/OAuthAuthorizeToken"
47
+ })
48
+ end
49
+
50
+ def request_token
51
+ @request_token ||= consumer.get_request_token({}, {:scope => "https://www.googleapis.com/auth/analytics.readonly"})
52
+ end
53
+
54
+ def auth_url
55
+ request_token.authorize_url
56
+ end
57
+
58
+ def access_token
59
+ @access_token ||= begin
60
+ print 'OAuth Code: '
61
+ code = $stdin.gets.strip
62
+ request_token.get_access_token(:oauth_verifier => code)
63
+ end
64
+ end
65
+
66
+ desc "Get a new OAuth Token"
67
+ task :token do
68
+ `open "#{auth_url}"`
69
+
70
+ puts "Token: #{access_token.token}"
71
+ puts "Secret: #{access_token.secret}"
72
+ end
73
+ end
data/legato.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
  require "legato/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.required_ruby_version = '>= 1.9.2'
6
+ s.required_ruby_version = '>= 1.8.7'
7
7
 
8
8
  s.name = "legato"
9
9
  s.version = Legato::VERSION
@@ -6,6 +6,14 @@ module Legato
6
6
  end
7
7
 
8
8
  def all(user, path=default_path)
9
+ uri = if user.api_key
10
+ # oauth + api_key
11
+ base_uri + path + "?key=#{user.api_key}"
12
+ else
13
+ # oauth 2
14
+ base_uri + path
15
+ end
16
+
9
17
  json = user.access_token.get(base_uri + path).body
10
18
  MultiJson.decode(json)['items'].map {|item| new(item, user)}
11
19
  end
data/lib/legato/query.rb CHANGED
@@ -192,6 +192,11 @@ module Legato
192
192
  params.reject {|k,v| v.nil? || v.to_s.strip.length == 0}
193
193
  end
194
194
 
195
+ def to_query_string
196
+ list = to_params.map {|k,v| [k,v].join("=")}
197
+ "?#{list.join("&")}"
198
+ end
199
+
195
200
  private
196
201
  def request_for_query
197
202
  profile.user.request(self)
data/lib/legato/user.rb CHANGED
@@ -1,20 +1,26 @@
1
1
  module Legato
2
2
  class User
3
- attr_accessor :access_token
3
+ attr_accessor :access_token, :api_key
4
4
 
5
- def initialize(token)
5
+ def initialize(token, api_key = nil)
6
6
  self.access_token = token
7
+ self.api_key = api_key
7
8
  end
8
9
 
9
10
  URL = "https://www.googleapis.com/analytics/v3/data/ga"
10
11
 
11
12
  def request(query)
12
- begin
13
- Response.new(access_token.get(URL, :params => query.to_params))
14
- rescue => e
15
- p e.code
16
- raise e
13
+ raw_response = if api_key
14
+ # oauth 1 + api key
15
+ query_string = URI.escape(query.to_query_string, '<>') # may need to add !~@
16
+
17
+ access_token.get(URL + query_string + "&key=#{api_key}")
18
+ else
19
+ # oauth 2
20
+ access_token.get(URL, :params => query.to_params)
17
21
  end
22
+
23
+ Response.new(raw_response)
18
24
  end
19
25
 
20
26
  # Management
@@ -1,3 +1,3 @@
1
1
  module Legato
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -9,7 +9,7 @@ describe Legato::Management::Account do
9
9
  it_behaves_like "a management finder"
10
10
 
11
11
  it 'creates a new account instance from a hash of attributes' do
12
- user = stub
12
+ user = stub(:api_key => nil)
13
13
  account = Legato::Management::Account.new({"id" => 12345, "name" => "Account 1"}, user)
14
14
  account.user.should == user
15
15
  account.id.should == 12345
@@ -3,7 +3,7 @@ shared_examples_for "a management finder" do
3
3
  MultiJson.stubs(:decode).returns({'items' => ['item1', 'item2']})
4
4
  response = stub(:body => 'some json')
5
5
  access_token = stub(:get => response)
6
- user = stub(:access_token => access_token)
6
+ user = stub(:access_token => access_token, :api_key => nil)
7
7
  described_class.stubs(:new).returns('thing1', 'thing2')
8
8
 
9
9
  described_class.all(user).should == ['thing1', 'thing2']
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legato
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tony Pitale
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-26 00:00:00 -04:00
18
+ date: 2012-05-17 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -80,7 +80,7 @@ dependencies:
80
80
  requirements:
81
81
  - - "="
82
82
  - !ruby/object:Gem::Version
83
- hash: -161295594
83
+ hash: -3728883836
84
84
  segments:
85
85
  - 2
86
86
  - 0
@@ -147,6 +147,7 @@ files:
147
147
  - .gitignore
148
148
  - .rspec
149
149
  - .travis.yml
150
+ - CHANGELOG.md
150
151
  - Gemfile
151
152
  - README.md
152
153
  - Rakefile
@@ -204,12 +205,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
204
205
  requirements:
205
206
  - - ">="
206
207
  - !ruby/object:Gem::Version
207
- hash: 55
208
+ hash: 57
208
209
  segments:
209
210
  - 1
210
- - 9
211
- - 2
212
- version: 1.9.2
211
+ - 8
212
+ - 7
213
+ version: 1.8.7
213
214
  required_rubygems_version: !ruby/object:Gem::Requirement
214
215
  none: false
215
216
  requirements: