3scale_client 2.3.3 → 2.3.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6f95988b20e7b5a97d35e78533ebcf14c1fbbe79
4
+ data.tar.gz: c53f311c11d7026ebd7209623623ae7647c17826
5
+ SHA512:
6
+ metadata.gz: 3f1952038035863de0ee38e63eff23f16f32bdb2d779ada36193b9f1ea204331743c99fb6c9d8004f8f9fe8cae27dc1905d4f9bbcb1b28fd796e8e32ee9bfe48
7
+ data.tar.gz: a8f67924fb05935f4113102b41fcb321fbec2fca212ff2a5bab234b12cb3264e3e05a7d43b947b1bdccadf379490deb6daf07f7e6fb270093a6ccc5b470b2798
data/.travis.yml CHANGED
@@ -1,6 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - jruby
6
- - rbx-19mode
3
+ - '1.9.3'
4
+ - '2.0.0'
5
+ - 'jruby'
data/README.md ADDED
@@ -0,0 +1,237 @@
1
+ # Rubygem for 3scale Web Service Management API
2
+
3
+
4
+ [<img src="https://secure.travis-ci.org/3scale/3scale_ws_api_for_ruby.png?branch=master" alt="Build Status" />](http://travis-ci.org/3scale/3scale_ws_api_for_ruby)
5
+
6
+ 3scale is an API Infrastructure service which handles API Keys, Rate Limiting, Analytics, Billing Payments and Developer Management. Includes a configurable API dashboard and developer portal CMS. More product stuff at http://www.3scale.net/, support information at http://support.3scale.net/.
7
+
8
+ ### Tutorials
9
+ Plugin Setup: https://support.3scale.net/howtos/api-configuration/plugin-setup
10
+ Rate Limiting: https://support.3scale.net/howtos/basics/provision-rate-limits
11
+ Analytics Setup: https://support.3scale.net/quickstarts/3scale-api-analytics
12
+
13
+ ## Installation
14
+
15
+ This library is distributed as a gem:
16
+ ```sh
17
+ gem install 3scale_client
18
+ ```
19
+ Or alternatively, download the source code from github:
20
+ http://github.com/3scale/3scale_ws_api_for_ruby
21
+
22
+ If you are using Bundler, please add this to your Gemfile:
23
+
24
+ ```ruby
25
+ gem '3scale_client'
26
+ ```
27
+ and do a bundle install.
28
+
29
+ If you are using Rails' config.gems, put this into your config/environment.rb
30
+
31
+ ```ruby
32
+ config.gem '3scale_client'
33
+ ```
34
+ Otherwise, require the gem in whatever way is natural to your framework of choice.
35
+
36
+ ## Usage
37
+
38
+ First, create an instance of the client, giving it your provider API key:
39
+
40
+ ```ruby
41
+ client = ThreeScale::Client.new(:provider_key => "your provider key")
42
+ ```
43
+ Because the object is stateless, you can create just one and store it globally.
44
+
45
+ ### Authrep
46
+
47
+ Authrep is a 'one-shot' operation to authorize an application and report the associated transaction at the same time.
48
+ The main difference between this call and the regular authorize call is that usage will be reported if the authorization is successful. Read more about authrep at the [active docs page on the 3scale's support site](https://support.3scale.net/reference/activedocs#operation/66)
49
+
50
+ You can make request to this backend operation like this:
51
+
52
+ ```ruby
53
+ response = client.authrep(:app_id => "the app id", :app_key => "the app key")
54
+ ```
55
+
56
+ Then call the +success?+ method on the returned object to see if the authorization was
57
+ successful.
58
+
59
+ ```ruby
60
+ if response.success?
61
+ # All fine, the usage will be reported automatically. Proceeed.
62
+ else
63
+ # Something's wrong with this application.
64
+ end
65
+ ```
66
+
67
+ The example is using the app_id authentication pattern, but you can also use other patterns.
68
+
69
+ #### A rails example
70
+
71
+
72
+ ```ruby
73
+ class ApplicationController < ActionController
74
+ # Call the authenticate method on each request to the API
75
+ before_filter :authenticate
76
+
77
+ # You only need to instantiate a new Client once and store it as a global variable
78
+ # You should store your provider key in the environment because this key is secret!
79
+ def create_client
80
+ @@threescale_client ||= ThreeScale::Client.new(:provider_key => ENV['PROVIDER_KEY'])
81
+ end
82
+
83
+ # To record usage, create a new metric in your application plan. You will use the
84
+ # "system name" that you specifed on the metric/method to pass in as the key to the usage hash.
85
+ # The key needs to be a symbol.
86
+ # A way to pass the metric is to add a parameter that will pass the name of the metric/method along
87
+ def authenticate
88
+ response = create_client.authrep(:app_id => params["app_id"],
89
+ :app_key => params["app_key"],
90
+ :usage => { params[:metric].to_sym => 1 }
91
+ if response.success?
92
+ return true
93
+ # All fine, the usage will be reported automatically. Proceeed.
94
+ else
95
+ # Something's wrong with this application.
96
+ puts "#{response.error_message}"
97
+ # raise error
98
+ end
99
+ end
100
+ end
101
+ ```
102
+
103
+ ### Using Varnish to speed up things
104
+
105
+ 3scale provides a [varnish module](https://github.com/3scale/libvmod-3scale) to cache the responses of its backend to help you achieve a close to zero latency. Go and install the module and [configure it the easy way](https://github.com/3scale/libvmod-3scale/blob/master/vcl/default_3scale_simple.vcl)
106
+
107
+ When that's done all you have to do is to initialize your 3scale client pointing to the location of your varnish, by passing the host parameter to it, like this:
108
+
109
+ ```ruby
110
+ client = ThreeScale::Client.new(:provider_key => "your provider key", :host => "your.varnish.net:8080")
111
+ ```
112
+
113
+ that's it, your API should now be authorized and reported for you, and all that at full speed.
114
+
115
+ ### Authorize
116
+
117
+ To authorize an application, call the +authorize+ method passing it the application's id and
118
+ optionally a key:
119
+
120
+ ```ruby
121
+ response = client.authorize(:app_id => "the app id", :app_key => "the app key")
122
+ ```
123
+
124
+ Then call the +success?+ method on the returned object to see if the authorization was
125
+ successful.
126
+
127
+ ```ruby
128
+ if response.success?
129
+ # All fine, the usage will be reported automatically. Proceeed.
130
+ else
131
+ # Something's wrong with this application.
132
+ end
133
+ ```
134
+
135
+ If both provider key and app id are valid, the response object contains additional
136
+ information about the status of the application:
137
+
138
+ ```ruby
139
+ # Returns the name of the plan the application is signed up to.
140
+ response.plan
141
+ ```
142
+
143
+ If the plan has defined usage limits, the response contains details about the usage broken
144
+ down by the metrics and usage limit periods.
145
+
146
+ ```ruby
147
+ # The usage_reports array contains one element per each usage limit defined on the plan.
148
+ usage_report = response.usage_reports[0]
149
+
150
+ # The metric
151
+ usage_report.metric # "hits"
152
+
153
+ # The period the limit applies to
154
+ usage_report.period # :day
155
+ usage_report.period_start # "Wed Apr 28 00:00:00 +0200 2010"
156
+ usage_report.period_end # "Wed Apr 28 23:59:59 +0200 2010"
157
+
158
+ # The current value the application already consumed in the period
159
+ usage_report.current_value # 8032
160
+
161
+ # The maximal value allowed by the limit in the period
162
+ usage_report.max_value # 10000
163
+
164
+ # If the limit is exceeded, this will be true, otherwise false:
165
+ usage_report.exceeded? # false
166
+ ```
167
+
168
+ If the authorization failed, the +error_code+ returns system error code and +error_message+
169
+ human readable error description:
170
+
171
+ ```ruby
172
+ response.error_code # "usage_limits_exceeded"
173
+ response.error_message # "Usage limits are exceeded"
174
+ ```
175
+
176
+ ### OAuth Authorize
177
+
178
+ To authorize an application with OAuth, call the +oauth_authorize+ method passing it the application's id.
179
+
180
+ ```ruby
181
+ response = client.oauth_authorize(:app_id => "the app id")
182
+ ```
183
+
184
+ If the authorization is successful, the response will contain the +app_key+ and +redirect_url+ defined for this application:
185
+
186
+ ```ruby
187
+ response.app_key
188
+ response.redirect_url
189
+ ```
190
+
191
+ ### Report
192
+
193
+ To report usage, use the +report+ method. You can report multiple transaction at the same time:
194
+
195
+ ```ruby
196
+ response = client.report({:app_id => "first app id", :usage => {'hits' => 1}},
197
+ {:app_id => "second app id", :usage => {'hits' => 1}})
198
+ ```
199
+
200
+ The :app_id and :usage parameters are required. Additionaly, you can specify a timestamp
201
+ of transaction:
202
+
203
+ ```ruby
204
+ response = client.report({:app_id => "app id", :usage => {'hits' => 1},
205
+ :timestamp => Time.local(2010, 4, 28, 12, 36)})
206
+ ```
207
+
208
+ The timestamp can be either a Time object (from ruby's standard library) or something that
209
+ "quacks" like it (for example, the ActiveSupport::TimeWithZone from Rails) or a string. The
210
+ string has to be in a format parseable by the Time.parse method. For example:
211
+
212
+ ```ruby
213
+ "2010-04-28 12:38:33 +0200"
214
+ ```
215
+
216
+ If the timestamp is not in UTC, you have to specify a time offset. That's the "+0200"
217
+ (two hours ahead of the Universal Coordinate Time) in the example abowe.
218
+
219
+ Then call the +success?+ method on the returned response object to see if the report was
220
+ successful.
221
+
222
+ ```ruby
223
+ if response.success?
224
+ # All OK.
225
+ else
226
+ # There was an error.
227
+ end
228
+ ```
229
+
230
+ In case of error, the +error_code+ returns system error code and +error_message+
231
+ human readable error description:
232
+
233
+ ```ruby
234
+ response.error_code # "provider_key_invalid"
235
+ response.error_message # "provider key \"foo\" is invalid"
236
+ ```
237
+
@@ -10,6 +10,7 @@ module ThreeScale
10
10
  attr_accessor :plan
11
11
  attr_accessor :app_key
12
12
  attr_accessor :redirect_url
13
+ attr_accessor :service_id
13
14
 
14
15
  class UsageReport
15
16
  attr_reader :metric
@@ -42,4 +43,4 @@ module ThreeScale
42
43
  @usage_reports << UsageReport.new(options)
43
44
  end
44
45
  end
45
- end
46
+ end
data/lib/3scale/client.rb CHANGED
@@ -158,9 +158,10 @@ module ThreeScale
158
158
  #
159
159
  # Hash with options:
160
160
  #
161
- # app_id:: id of the application to authorize. This is required.
162
- # app_key:: secret key assigned to the application. Required only if application has
163
- # a key defined.
161
+ # app_id:: id of the application to authorize. This is required.
162
+ # app_key:: secret key assigned to the application. Required only if application has
163
+ # a key defined.
164
+ # service_id:: id of the service (required if you have more than one service)
164
165
  #
165
166
  # == Return
166
167
  #
@@ -182,10 +183,7 @@ module ThreeScale
182
183
  # end
183
184
  #
184
185
  def authorize(options)
185
- path = "/transactions/authorize.xml" +
186
- "?provider_key=#{CGI.escape(provider_key)}" +
187
- "&app_id=#{CGI.escape(options[:app_id].to_s)}"
188
- path += "&app_key=#{CGI.escape(options[:app_key])}" if options[:app_key]
186
+ path = "/transactions/authorize.xml" + options_to_params(options, ALL_PARAMS)
189
187
 
190
188
  uri = URI.parse("http://#{host}#{path}")
191
189
  http_response = Net::HTTP.get_response(uri)
@@ -207,6 +205,7 @@ module ThreeScale
207
205
  # Hash with options:
208
206
  #
209
207
  # app_id:: id of the application to authorize. This is required.
208
+ # service_id:: id of the service (required if you have more than one service)
210
209
  #
211
210
  # == Return
212
211
  #
@@ -231,11 +230,7 @@ module ThreeScale
231
230
  # end
232
231
  #
233
232
  def oauth_authorize(options)
234
- path = "/transactions/oauth_authorize.xml" +
235
- "?provider_key=#{CGI.escape(provider_key)}" +
236
- "&app_id=#{CGI.escape(options[:app_id].to_s)}"
237
- path += "&app_key=#{CGI.escape(options[:app_key])}" if options[:app_key]
238
- path += "&redirect_url=#{CGI.escape(options[:redirect_url])}" if options[:redirect_url]
233
+ path = "/transactions/oauth_authorize.xml" + options_to_params(options, OAUTH_PARAMS)
239
234
 
240
235
  uri = URI.parse("http://#{host}#{path}")
241
236
  http_response = Net::HTTP.get_response(uri)
@@ -252,6 +247,23 @@ module ThreeScale
252
247
 
253
248
  private
254
249
 
250
+ OAUTH_PARAMS = [:app_id, :app_key, :service_id, :redirect_url]
251
+ ALL_PARAMS = [:user_key, :app_id, :app_key, :service_id, :redirect_url]
252
+
253
+ def options_to_params(options, allowed_keys)
254
+ params = { :provider_key => provider_key }
255
+
256
+ allowed_keys.each do |key|
257
+ params[key] = options[key] if options.has_key?(key)
258
+ end
259
+
260
+ tuples = params.map do |key, value|
261
+ "#{key}=#{CGI.escape(value.to_s)}"
262
+ end
263
+
264
+ '?' + tuples.join('&')
265
+ end
266
+
255
267
  def encode_transactions(transactions)
256
268
  result = {}
257
269
 
@@ -1,5 +1,5 @@
1
1
  module ThreeScale
2
2
  class Client
3
- VERSION = '2.3.3'
3
+ VERSION = '2.3.4'
4
4
  end
5
5
  end
data/test/client_test.rb CHANGED
@@ -55,6 +55,12 @@ class ThreeScale::ClientTest < Test::Unit::TestCase
55
55
  @client.authrep(:app_id => "appid", :app_key => "appkey")
56
56
  end
57
57
 
58
+ def test_authrep_supports_service_id
59
+ assert_authrep_url_with_params "&%5Busage%5D%5Bhits%5D=1&service_id=serviceid"
60
+
61
+ @client.authrep(:service_id => "serviceid")
62
+ end
63
+
58
64
  #TODO these authrep tests
59
65
  def test_authrep_supports_api_key_auth_mode; end
60
66
  def test_authrep_log_is_encoded;end
@@ -115,6 +121,18 @@ class ThreeScale::ClientTest < Test::Unit::TestCase
115
121
  assert response.success?
116
122
  end
117
123
 
124
+ def test_successful_authorize_with_user_key
125
+ body = '<status>
126
+ <authorized>true</authorized>
127
+ <plan>Ultimate</plan>
128
+ </status>'
129
+
130
+ FakeWeb.register_uri(:get, "http://#{@host}/transactions/authorize.xml?provider_key=1234abcd&user_key=foo", :status => ['200', 'OK'], :body => body)
131
+
132
+ response = @client.authorize(:user_key => 'foo')
133
+ assert response.success?
134
+ end
135
+
118
136
  def test_authorize_with_exceeded_usage_limits
119
137
  body = '<status>
120
138
  <authorized>false</authorized>
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: 3scale_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.3
5
- prerelease:
4
+ version: 2.3.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michal Cichra
@@ -13,12 +12,11 @@ authors:
13
12
  autorequire:
14
13
  bindir: bin
15
14
  cert_chain: []
16
- date: 2013-10-08 00:00:00.000000000 Z
15
+ date: 2014-01-09 00:00:00.000000000 Z
17
16
  dependencies:
18
17
  - !ruby/object:Gem::Dependency
19
18
  name: bundler
20
19
  requirement: !ruby/object:Gem::Requirement
21
- none: false
22
20
  requirements:
23
21
  - - ~>
24
22
  - !ruby/object:Gem::Version
@@ -26,7 +24,6 @@ dependencies:
26
24
  type: :development
27
25
  prerelease: false
28
26
  version_requirements: !ruby/object:Gem::Requirement
29
- none: false
30
27
  requirements:
31
28
  - - ~>
32
29
  - !ruby/object:Gem::Version
@@ -34,81 +31,71 @@ dependencies:
34
31
  - !ruby/object:Gem::Dependency
35
32
  name: rake
36
33
  requirement: !ruby/object:Gem::Requirement
37
- none: false
38
34
  requirements:
39
- - - ! '>='
35
+ - - '>='
40
36
  - !ruby/object:Gem::Version
41
37
  version: '0'
42
38
  type: :development
43
39
  prerelease: false
44
40
  version_requirements: !ruby/object:Gem::Requirement
45
- none: false
46
41
  requirements:
47
- - - ! '>='
42
+ - - '>='
48
43
  - !ruby/object:Gem::Version
49
44
  version: '0'
50
45
  - !ruby/object:Gem::Dependency
51
46
  name: rdoc
52
47
  requirement: !ruby/object:Gem::Requirement
53
- none: false
54
48
  requirements:
55
- - - ! '>='
49
+ - - '>='
56
50
  - !ruby/object:Gem::Version
57
51
  version: '0'
58
52
  type: :development
59
53
  prerelease: false
60
54
  version_requirements: !ruby/object:Gem::Requirement
61
- none: false
62
55
  requirements:
63
- - - ! '>='
56
+ - - '>='
64
57
  - !ruby/object:Gem::Version
65
58
  version: '0'
66
59
  - !ruby/object:Gem::Dependency
67
60
  name: fakeweb
68
61
  requirement: !ruby/object:Gem::Requirement
69
- none: false
70
62
  requirements:
71
- - - ! '>='
63
+ - - '>='
72
64
  - !ruby/object:Gem::Version
73
65
  version: '0'
74
66
  type: :development
75
67
  prerelease: false
76
68
  version_requirements: !ruby/object:Gem::Requirement
77
- none: false
78
69
  requirements:
79
- - - ! '>='
70
+ - - '>='
80
71
  - !ruby/object:Gem::Version
81
72
  version: '0'
82
73
  - !ruby/object:Gem::Dependency
83
74
  name: mocha
84
75
  requirement: !ruby/object:Gem::Requirement
85
- none: false
86
76
  requirements:
87
- - - ! '>='
77
+ - - '>='
88
78
  - !ruby/object:Gem::Version
89
79
  version: '0'
90
80
  type: :development
91
81
  prerelease: false
92
82
  version_requirements: !ruby/object:Gem::Requirement
93
- none: false
94
83
  requirements:
95
- - - ! '>='
84
+ - - '>='
96
85
  - !ruby/object:Gem::Version
97
86
  version: '0'
98
87
  - !ruby/object:Gem::Dependency
99
88
  name: nokogiri
100
89
  requirement: !ruby/object:Gem::Requirement
101
- none: false
102
90
  requirements:
103
- - - ! '>='
91
+ - - '>='
104
92
  - !ruby/object:Gem::Version
105
93
  version: '0'
106
94
  type: :runtime
107
95
  prerelease: false
108
96
  version_requirements: !ruby/object:Gem::Requirement
109
- none: false
110
97
  requirements:
111
- - - ! '>='
98
+ - - '>='
112
99
  - !ruby/object:Gem::Version
113
100
  version: '0'
114
101
  description: This gem allows to easily connect an application that provides a Web
@@ -125,7 +112,7 @@ files:
125
112
  - 3scale_client.gemspec
126
113
  - Gemfile
127
114
  - LICENCE
128
- - README.rdoc
115
+ - README.md
129
116
  - Rakefile
130
117
  - VERSION
131
118
  - lib/3scale/authorize_response.rb
@@ -138,33 +125,26 @@ files:
138
125
  homepage: http://www.3scale.net
139
126
  licenses:
140
127
  - MIT
128
+ metadata: {}
141
129
  post_install_message:
142
130
  rdoc_options: []
143
131
  require_paths:
144
132
  - lib
145
133
  required_ruby_version: !ruby/object:Gem::Requirement
146
- none: false
147
134
  requirements:
148
- - - ! '>='
135
+ - - '>='
149
136
  - !ruby/object:Gem::Version
150
137
  version: '0'
151
- segments:
152
- - 0
153
- hash: -4299208069213055852
154
138
  required_rubygems_version: !ruby/object:Gem::Requirement
155
- none: false
156
139
  requirements:
157
- - - ! '>='
140
+ - - '>='
158
141
  - !ruby/object:Gem::Version
159
142
  version: '0'
160
- segments:
161
- - 0
162
- hash: -4299208069213055852
163
143
  requirements: []
164
144
  rubyforge_project:
165
- rubygems_version: 1.8.25
145
+ rubygems_version: 2.1.11
166
146
  signing_key:
167
- specification_version: 3
147
+ specification_version: 4
168
148
  summary: Client for 3scale Web Service Management System API
169
149
  test_files:
170
150
  - test/client_test.rb
data/README.rdoc DELETED
@@ -1,163 +0,0 @@
1
- = Rubygem for 3scale Web Service Management API
2
-
3
- {<img src="https://secure.travis-ci.org/3scale/3scale_ws_api_for_ruby.png?branch=master" alt="Build Status" />}[http://travis-ci.org/3scale/3scale_ws_api_for_ruby]
4
-
5
- 3scale is an API Infrastructure service which handles API Keys, Rate Limiting, Analytics, Billing Payments and Developer Management. Includes a configurable API dashboard and developer portal CMS. More product stuff at http://www.3scale.net/, support information at http://support.3scale.net/.
6
-
7
- == Installation
8
-
9
- This library is distributed as a gem:
10
-
11
- gem install 3scale_client
12
-
13
- Or alternatively, download the source code from github:
14
- http://github.com/3scale/3scale_ws_api_for_ruby
15
-
16
- If you are using Bundler, please add this to your Gemfile:
17
-
18
- gem '3scale_client'
19
-
20
- and do a bundle install.
21
-
22
- If you are using Rails' config.gems, put this into your config/environment.rb
23
-
24
- config.gem '3scale_client'
25
-
26
- Otherwise, require the gem in whatever way is natural to your framework of choice.
27
-
28
- == Usage
29
-
30
- First, create an instance of the client, giving it your provider API key:
31
-
32
- client = ThreeScale::Client.new(:provider_key => "your provider key")
33
-
34
- Because the object is stateless, you can create just one and store it globally.
35
-
36
- ==== Authrep
37
-
38
- Authrep is a 'one-shot' operation to authorize an application and report the associated transaction at the same time.
39
- The main difference between this call and the regular authorize call is that usage will be reported if the authorization is successful. Read more about authrep at the [active docs page on the 3scale's support site](https://support.3scale.net/reference/activedocs#operation/66)
40
-
41
- You can make request to this backend operation like this:
42
-
43
- response = client.authrep(:app_id => "the app id", :app_key => "the app key")
44
-
45
- Then call the +success?+ method on the returned object to see if the authorization was
46
- successful.
47
-
48
- if response.success?
49
- # All fine, the usage will be reported automatically. Proceeed.
50
- else
51
- # Something's wrong with this application.
52
- end
53
-
54
- The example is using the app_id authentication pattern, but you can also use other patterns.
55
-
56
- === Using Varnish to speed up things
57
-
58
- 3scale provides a [varnish module](https://github.com/3scale/libvmod-3scale) to cache the responses of its backend to help you achieve a close to zero latency. Go and install the module and [configure it the easy way](https://github.com/3scale/libvmod-3scale/blob/master/vcl/default_3scale_simple.vcl)
59
-
60
- When that's done all you have to do is to initialize your 3scale client pointing to the location of your varnish, by passing the host parameter to it, like this:
61
-
62
- client = ThreeScale::Client.new(:provider_key => "your provider key", :host => "your.varnish.net:8080")
63
-
64
- that's it, your API should now be authorized and reported for you, and all that at full speed.
65
-
66
- === Authorize
67
-
68
- To authorize an application, call the +authorize+ method passing it the application's id and
69
- optionally a key:
70
-
71
- response = client.authorize(:app_id => "the app id", :app_key => "the app key")
72
-
73
- Then call the +success?+ method on the returned object to see if the authorization was
74
- successful.
75
-
76
- if response.success?
77
- # All fine, proceeed.
78
- else
79
- # Something's wrong with this application.
80
- end
81
-
82
- If both provider key and app id are valid, the response object contains additional
83
- information about the status of the application:
84
-
85
- # Returns the name of the plan the application is signed up to.
86
- response.plan
87
-
88
- If the plan has defined usage limits, the response contains details about the usage broken
89
- down by the metrics and usage limit periods.
90
-
91
- # The usage_reports array contains one element per each usage limit defined on the plan.
92
- usage_report = response.usage_reports[0]
93
-
94
- # The metric
95
- usage_report.metric # "hits"
96
-
97
- # The period the limit applies to
98
- usage_report.period # :day
99
- usage_report.period_start # "Wed Apr 28 00:00:00 +0200 2010"
100
- usage_report.period_end # "Wed Apr 28 23:59:59 +0200 2010"
101
-
102
- # The current value the application already consumed in the period
103
- usage_report.current_value # 8032
104
-
105
- # The maximal value allowed by the limit in the period
106
- usage_report.max_value # 10000
107
-
108
- # If the limit is exceeded, this will be true, otherwise false:
109
- usage_report.exceeded? # false
110
-
111
- If the authorization failed, the +error_code+ returns system error code and +error_message+
112
- human readable error description:
113
-
114
- response.error_code # "usage_limits_exceeded"
115
- response.error_message # "Usage limits are exceeded"
116
-
117
- === OAuth Authorize
118
-
119
- To authorize an application with OAuth, call the +oauth_authorize+ method passing it the application's id.
120
-
121
- response = client.oauth_authorize(:app_id => "the app id")
122
-
123
- If the authorization is successful, the response will contain the +app_key+ and +redirect_url+ defined for this application:
124
-
125
- response.app_key
126
- response.redirect_url
127
-
128
- === Report
129
-
130
- To report usage, use the +report+ method. You can report multiple transaction at the same time:
131
-
132
- response = client.report({:app_id => "first app id", :usage => {'hits' => 1}},
133
- {:app_id => "second app id", :usage => {'hits' => 1}})
134
-
135
- The :app_id and :usage parameters are required. Additionaly, you can specify a timestamp
136
- of transaction:
137
-
138
- response = client.report({:app_id => "app id", :usage => {'hits' => 1},
139
- :timestamp => Time.local(2010, 4, 28, 12, 36)})
140
-
141
- The timestamp can be either a Time object (from ruby's standard library) or something that
142
- "quacks" like it (for example, the ActiveSupport::TimeWithZone from Rails) or a string. The
143
- string has to be in a format parseable by the Time.parse method. For example:
144
-
145
- "2010-04-28 12:38:33 +0200"
146
-
147
- If the timestamp is not in UTC, you have to specify a time offset. That's the "+0200"
148
- (two hours ahead of the Universal Coordinate Time) in the example abowe.
149
-
150
- Then call the +success?+ method on the returned response object to see if the report was
151
- successful.
152
-
153
- if response.success?
154
- # All OK.
155
- else
156
- # There was an error.
157
- end
158
-
159
- In case of error, the +error_code+ returns system error code and +error_message+
160
- human readable error description:
161
-
162
- response.error_code # "provider_key_invalid"
163
- response.error_message # "provider key \"foo\" is invalid"