3scale_client 2.8.2 → 2.9.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28ffdb9dae79d7cf57bba5fd70090b08ae4e7294
4
- data.tar.gz: 8e47fe8d96fc80bc7cc21c5550b177db5c86a01c
3
+ metadata.gz: 8fd79baa77606faea09171e9c577d1694c17ea5a
4
+ data.tar.gz: 87ab11fd2aee6b31888ba5f22dcce546ee36d265
5
5
  SHA512:
6
- metadata.gz: 4fb00544bd08be909781d624dcacb0fe8b997d1000e74a0339b720530624695e462adfdaa5b138b838256bfeb6613f36f85150c1c8e58b438fc49ec700c6a08a
7
- data.tar.gz: 41e02fdb1210e8aeede906e3bb34134bd90da8e719ba9ab197f252ba7a5429c2dae7af24c03149f65785bac56dc33b65c801cdba448210fd88b0f9c2233d8225
6
+ metadata.gz: 172557eb19d4c5bdca48c89e8a3d8785defdafc0300aac49d5d6692b9d32279fb78d5b059b8aea936cd1fa636ff62c4a559a11fdc06f88ffb79407f829d48845
7
+ data.tar.gz: 631bea0687f9ae848ba1622ceb375edf27d82b039963651c8fb969e1a25e96ae350b27a21cb6f4bfa04155c851f15d5162e1de9c21cea77e32adf819f0518abc
@@ -1,27 +1,24 @@
1
+ sudo: required
2
+ dist: trusty
1
3
  language: ruby
2
4
  cache: bundler
3
- sudo: false
4
5
  rvm:
5
- - 2.0.0
6
- - 2.1
7
- - 2.2
8
- - 2.3.0
9
- - jruby
6
+ - 2.1
7
+ - 2.2
8
+ - 2.3
10
9
  gemfile:
11
10
  - Gemfile
12
- - gemfiles/rack_1.gemfile
13
11
  matrix:
14
12
  exclude:
15
- - rvm: 2.0.0
16
- gemfile: Gemfile
17
13
  - rvm: 2.1
18
14
  gemfile: Gemfile
19
- - rvm: 2.2
20
- gemfile: Gemfile
21
- - rvm: jruby
15
+ include:
16
+ - rvm: 2.1
17
+ gemfile: gemfiles/rack_1.gemfile
18
+ - rvm: jruby-9.1.5.0
22
19
  gemfile: Gemfile
20
+ jdk: oraclejdk8
23
21
  env:
24
22
  global:
25
23
  - TEST_3SCALE_APP_IDS=4d4b20b9 TEST_3SCALE_APP_KEYS=ecce202ecc2eb8dc7a499c34a34d5987
26
24
  - secure: VSElS0KvnufcZKStV7kj6xHFEiWvQkpxk1IEuhKq5JqywniN/6ScaNUFxbBKrOUrqhzXIRUCteBP2wvYRjlNhLFZSnYskzh7dLkOp/WV+WK6KjrdflTiF6UTxW4pBSsg6YDJ/wWJlmwsPVty1pRvOE3ru6uco+dTWCCLn4BvWqc=
27
- - JRUBY_OPTS="--2.0"
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = '>= 2.0'
21
+ spec.required_ruby_version = '>= 2.1'
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.7"
23
+ spec.add_development_dependency "bundler", "~> 1.11"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "rdoc"
26
26
  spec.add_development_dependency "fakeweb"
@@ -1,6 +1,14 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [2.9.0] - 2016-10-21
5
+ This version drops support for Ruby versions < 2.1 and JRuby < 9.1.1.0.
6
+
7
+ ### Added
8
+ - Added method `ThreeScale::Client::AuthorizeResponse#limits_exceeded?`
9
+ to check whether an authorization is denied and is so because at least
10
+ one metric went over the limits.
11
+
4
12
  ## [2.8.2] - 2016-10-18
5
13
  ### Added
6
14
  - Added support for retrieving metric hierarchies in authorize calls.
data/README.md CHANGED
@@ -12,7 +12,8 @@ Analytics Setup: https://support.3scale.net/quickstarts/3scale-api-analytics
12
12
 
13
13
  ## Installation
14
14
 
15
- This library is distributed as a gem:
15
+ This library is distributed as a gem, for which Ruby 2.1 or JRuby 9.1.1.0 are
16
+ minimum requirements:
16
17
  ```sh
17
18
  gem install 3scale_client
18
19
  ```
@@ -92,19 +93,19 @@ The example is using the app_id authentication pattern, but you can also use oth
92
93
  class ApplicationController < ActionController
93
94
  # Call the authenticate method on each request to the API
94
95
  before_filter :authenticate
95
-
96
+
96
97
  # You only need to instantiate a new Client once and store it as a global variable
97
98
  # You should store your provider key in the environment because this key is secret!
98
99
  def create_client
99
- @@threescale_client ||= ThreeScale::Client.new(:provider_key => ENV['PROVIDER_KEY'])
100
+ @@threescale_client ||= ThreeScale::Client.new(:provider_key => ENV['PROVIDER_KEY'])
100
101
  end
101
-
102
- # To record usage, create a new metric in your application plan. You will use the
103
- # "system name" that you specifed on the metric/method to pass in as the key to the usage hash.
104
- # The key needs to be a symbol.
102
+
103
+ # To record usage, create a new metric in your application plan. You will use the
104
+ # "system name" that you specifed on the metric/method to pass in as the key to the usage hash.
105
+ # The key needs to be a symbol.
105
106
  # A way to pass the metric is to add a parameter that will pass the name of the metric/method along
106
107
  def authenticate
107
- response = create_client.authrep(:app_id => params["app_id"],
108
+ response = create_client.authrep(:app_id => params["app_id"],
108
109
  :app_key => params["app_key"],
109
110
  :usage => { params[:metric].to_sym => 1 })
110
111
  if response.success?
@@ -27,6 +27,13 @@ module ThreeScale
27
27
  end
28
28
  end
29
29
 
30
+ # These 2 constants are defined according to what the 3scale
31
+ # backend returns in the response of authorize calls.
32
+ LIMITS_EXCEEDED = 'limits_exceeded'.freeze
33
+ private_constant :LIMITS_EXCEEDED
34
+ LIMITS_EXCEEDED_MSG = 'usage limits are exceeded'.freeze
35
+ private_constant :LIMITS_EXCEEDED_MSG
36
+
30
37
  attr_accessor :plan
31
38
  attr_accessor :app_key
32
39
  attr_accessor :redirect_url
@@ -51,5 +58,11 @@ module ThreeScale
51
58
  def add_metric_to_hierarchy(metric_name, children)
52
59
  @hierarchy[metric_name] = children
53
60
  end
61
+
62
+ # The response already specifies whether any usage report (if present)
63
+ # is over the limits, so use that instead of scanning the reports.
64
+ def limits_exceeded?
65
+ error_code == LIMITS_EXCEEDED || error_message == LIMITS_EXCEEDED_MSG
66
+ end
54
67
  end
55
68
  end
@@ -92,7 +92,7 @@ module ThreeScale
92
92
  when Net::HTTPSuccess,Net::HTTPConflict
93
93
  build_authorize_response(http_response.body)
94
94
  when Net::HTTPClientError
95
- build_error_response(http_response.body)
95
+ build_error_response(http_response.body, AuthorizeResponse)
96
96
  else
97
97
  raise ServerError.new(http_response)
98
98
  end
@@ -218,7 +218,7 @@ module ThreeScale
218
218
  when Net::HTTPSuccess,Net::HTTPConflict
219
219
  build_authorize_response(http_response.body)
220
220
  when Net::HTTPClientError
221
- build_error_response(http_response.body)
221
+ build_error_response(http_response.body, AuthorizeResponse)
222
222
  else
223
223
  raise ServerError.new(http_response)
224
224
  end
@@ -267,7 +267,7 @@ module ThreeScale
267
267
  when Net::HTTPSuccess,Net::HTTPConflict
268
268
  build_authorize_response(http_response.body)
269
269
  when Net::HTTPClientError
270
- build_error_response(http_response.body)
270
+ build_error_response(http_response.body, AuthorizeResponse)
271
271
  else
272
272
  raise ServerError.new(http_response)
273
273
  end
@@ -374,11 +374,11 @@ module ThreeScale
374
374
  response
375
375
  end
376
376
 
377
- def build_error_response(body)
377
+ def build_error_response(body, klass = Response)
378
378
  doc = Nokogiri::XML(body)
379
379
  node = doc.at_css('error')
380
380
 
381
- response = Response.new
381
+ response = klass.new
382
382
  response.error!(node.content.to_s.strip, node['code'].to_s.strip)
383
383
  response
384
384
  end
@@ -1,5 +1,5 @@
1
1
  module ThreeScale
2
2
  class Client
3
- VERSION = '2.8.2'
3
+ VERSION = '2.9.0'
4
4
  end
5
5
  end
@@ -119,6 +119,7 @@ class ThreeScale::ClientTest < MiniTest::Test
119
119
  response = @client.authorize(:app_id => 'foo')
120
120
 
121
121
  assert response.success?
122
+ assert !response.limits_exceeded?
122
123
  assert_equal 'Ultimate', response.plan
123
124
  assert_equal 2, response.usage_reports.size
124
125
 
@@ -188,8 +189,9 @@ class ThreeScale::ClientTest < MiniTest::Test
188
189
  response = @client.authorize(:app_id => 'foo')
189
190
 
190
191
  assert !response.success?
192
+ assert response.limits_exceeded?
191
193
  assert_equal 'usage limits are exceeded', response.error_message
192
- assert response.usage_reports[0].exceeded?
194
+ assert response.usage_reports.any? { |report| report.exceeded? }
193
195
  end
194
196
 
195
197
  def test_authorize_with_invalid_app_id
@@ -200,6 +202,7 @@ class ThreeScale::ClientTest < MiniTest::Test
200
202
  response = @client.authorize(:app_id => 'foo')
201
203
 
202
204
  assert !response.success?
205
+ assert !response.limits_exceeded?
203
206
  assert_equal 'application_not_found', response.error_code
204
207
  assert_equal 'application with id="foo" was not found', response.error_message
205
208
  end
@@ -227,6 +230,7 @@ class ThreeScale::ClientTest < MiniTest::Test
227
230
  :usage => { 'metric1' => 1, 'metric2' => 2 })
228
231
 
229
232
  assert response.success?
233
+ assert !response.limits_exceeded?
230
234
  end
231
235
 
232
236
  def test_authorize_with_usage_and_limits_exceeded
@@ -254,6 +258,7 @@ class ThreeScale::ClientTest < MiniTest::Test
254
258
  response = @client.authorize(:app_id => 'foo', :usage => { 'hits' => 1 })
255
259
 
256
260
  assert !response.success?
261
+ assert response.limits_exceeded?
257
262
  assert_equal 'usage limits are exceeded', response.error_message
258
263
  end
259
264
 
@@ -347,6 +352,7 @@ class ThreeScale::ClientTest < MiniTest::Test
347
352
 
348
353
  response = @client.oauth_authorize(:app_id => 'foo', :redirect_url => "http://localhost:8080/oauth/oauth_redirect")
349
354
  assert response.success?
355
+ assert !response.limits_exceeded?
350
356
 
351
357
  assert_equal '883bdb8dbc3b6b77dbcf26845560fdbb', response.app_key
352
358
  assert_equal 'http://localhost:8080/oauth/oauth_redirect', response.redirect_url
@@ -399,8 +405,9 @@ class ThreeScale::ClientTest < MiniTest::Test
399
405
  response = @client.oauth_authorize(:app_id => 'foo')
400
406
 
401
407
  assert !response.success?
408
+ assert response.limits_exceeded?
402
409
  assert_equal 'usage limits are exceeded', response.error_message
403
- assert response.usage_reports[0].exceeded?
410
+ assert response.usage_reports.any? { |report| report.exceeded? }
404
411
  end
405
412
 
406
413
  def test_oauth_authorize_with_invalid_app_id
@@ -411,6 +418,7 @@ class ThreeScale::ClientTest < MiniTest::Test
411
418
  response = @client.oauth_authorize(:app_id => 'foo')
412
419
 
413
420
  assert !response.success?
421
+ assert !response.limits_exceeded?
414
422
  assert_equal 'application_not_found', response.error_code
415
423
  assert_equal 'application with id="foo" was not found', response.error_message
416
424
  end
@@ -439,6 +447,7 @@ class ThreeScale::ClientTest < MiniTest::Test
439
447
  :app_id => 'foo', :usage => { 'metric1' => 1, 'metric2' => 2 })
440
448
 
441
449
  assert response.success?
450
+ assert !response.limits_exceeded?
442
451
  end
443
452
 
444
453
  def test_oauth_authorize_with_usage_and_limits_exceeded
@@ -467,6 +476,7 @@ class ThreeScale::ClientTest < MiniTest::Test
467
476
  :usage => { 'hits' => 1 })
468
477
 
469
478
  assert !response.success?
479
+ assert response.limits_exceeded?
470
480
  assert_equal 'usage limits are exceeded', response.error_message
471
481
  end
472
482
 
@@ -653,6 +663,7 @@ class ThreeScale::ClientTest < MiniTest::Test
653
663
  response = client.authorize(:app_id => 'foo')
654
664
 
655
665
  assert response.success?
666
+ assert !response.limits_exceeded?
656
667
  request = FakeWeb.last_request
657
668
  assert_equal "plugin-ruby-v#{version}", request["X-3scale-User-Agent"]
658
669
  assert_equal "su1.3scale.net", request["host"]
@@ -685,6 +696,7 @@ class ThreeScale::ClientTest < MiniTest::Test
685
696
  response = client.authrep(:app_id => 'abc')
686
697
 
687
698
  assert response.success?
699
+ assert !response.limits_exceeded?
688
700
  request = FakeWeb.last_request
689
701
  assert_equal "plugin-ruby-v#{version}", request["X-3scale-User-Agent"]
690
702
  assert_equal "su1.3scale.net", request["host"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: 3scale_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.2
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Cichra
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2016-10-18 00:00:00.000000000 Z
15
+ date: 2016-10-21 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler
@@ -20,14 +20,14 @@ dependencies:
20
20
  requirements:
21
21
  - - "~>"
22
22
  - !ruby/object:Gem::Version
23
- version: '1.7'
23
+ version: '1.11'
24
24
  type: :development
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - "~>"
29
29
  - !ruby/object:Gem::Version
30
- version: '1.7'
30
+ version: '1.11'
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: rake
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -198,7 +198,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - ">="
200
200
  - !ruby/object:Gem::Version
201
- version: '2.0'
201
+ version: '2.1'
202
202
  required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  requirements:
204
204
  - - ">="
@@ -206,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
206
  version: '0'
207
207
  requirements: []
208
208
  rubyforge_project:
209
- rubygems_version: 2.6.6
209
+ rubygems_version: 2.6.4
210
210
  signing_key:
211
211
  specification_version: 4
212
212
  summary: Client for 3scale Web Service Management System API