3scale_client 2.8.1 → 2.8.2

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: 0a79b84280ee4de834649b3414dbbec268c2df8c
4
- data.tar.gz: 2a97f59f1449f9fd7f9a44437827594b5d0ca342
3
+ metadata.gz: 28ffdb9dae79d7cf57bba5fd70090b08ae4e7294
4
+ data.tar.gz: 8e47fe8d96fc80bc7cc21c5550b177db5c86a01c
5
5
  SHA512:
6
- metadata.gz: dcc864a4ec5df888603e3976e75a639bbeb25dcb2e8870b23955c72317be63f6ba0ce6895a4680d4e64c5f1d3fec23c9c80ab5d3711c9494c469f0999cc7fef7
7
- data.tar.gz: 502b0293a51d9d23be62d33365dc33d8aaac9a3ff79d53d8e47c5ce49aa714b2ec392ac9881476c6d7e184baa81bc51d684ddd44d2843ed1d58923610b5121af
6
+ metadata.gz: 4fb00544bd08be909781d624dcacb0fe8b997d1000e74a0339b720530624695e462adfdaa5b138b838256bfeb6613f36f85150c1c8e58b438fc49ec700c6a08a
7
+ data.tar.gz: 41e02fdb1210e8aeede906e3bb34134bd90da8e719ba9ab197f252ba7a5429c2dae7af24c03149f65785bac56dc33b65c801cdba448210fd88b0f9c2233d8225
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [2.8.2] - 2016-10-18
5
+ ### Added
6
+ - Added support for retrieving metric hierarchies in authorize calls.
7
+ This is an experimental feature and its support is not guaranteed for
8
+ future releases.
9
+
4
10
  ## [2.8.1] - 2016-10-11
5
11
  ### Changed
6
12
  - Improved parsing performance of the response of the authorize call.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.8.1
1
+ 2.8.2
@@ -2,16 +2,6 @@ require 'time'
2
2
 
3
3
  module ThreeScale
4
4
  class AuthorizeResponse < Response
5
- def initialize
6
- super
7
- @usage_reports = []
8
- end
9
-
10
- attr_accessor :plan
11
- attr_accessor :app_key
12
- attr_accessor :redirect_url
13
- attr_accessor :service_id
14
-
15
5
  class UsageReport
16
6
  attr_reader :metric
17
7
  attr_reader :period
@@ -37,10 +27,29 @@ module ThreeScale
37
27
  end
38
28
  end
39
29
 
30
+ attr_accessor :plan
31
+ attr_accessor :app_key
32
+ attr_accessor :redirect_url
33
+ attr_accessor :service_id
40
34
  attr_reader :usage_reports
35
+ attr_reader :hierarchy # Not part of the stable API
36
+
37
+ def initialize
38
+ super
39
+ @usage_reports = []
40
+
41
+ # hierarchy is a hash where the keys are metric names, and the values
42
+ # their children (array of metric names).
43
+ # Only metrics that have at least one child appear as keys.
44
+ @hierarchy = {}
45
+ end
41
46
 
42
47
  def add_usage_report(options)
43
48
  @usage_reports << UsageReport.new(options)
44
49
  end
50
+
51
+ def add_metric_to_hierarchy(metric_name, children)
52
+ @hierarchy[metric_name] = children
53
+ end
45
54
  end
46
- end
55
+ end
data/lib/3scale/client.rb CHANGED
@@ -275,8 +275,10 @@ module ThreeScale
275
275
 
276
276
  private
277
277
 
278
- OAUTH_PARAMS = [:app_id, :app_key, :service_id, :redirect_url, :usage]
279
- ALL_PARAMS = [:user_key, :app_id, :app_key, :service_id, :redirect_url, :usage]
278
+ # The support for the 'hierarchy' param is experimental. Its support is not
279
+ # guaranteed for future versions.
280
+ OAUTH_PARAMS = [:app_id, :app_key, :service_id, :redirect_url, :usage, :hierarchy]
281
+ ALL_PARAMS = [:user_key, :app_id, :app_key, :service_id, :redirect_url, :usage, :hierarchy]
280
282
  REPORT_PARAMS = [:user_key, :app_id, :service_id, :timestamp]
281
283
 
282
284
  def options_to_params(options, allowed_keys)
@@ -363,6 +365,12 @@ module ThreeScale
363
365
  :max_value => node.at('max_value').content.to_i)
364
366
  end
365
367
 
368
+ doc.css('hierarchy metric').each do |node|
369
+ metric_name = node['name'].to_s.strip
370
+ children = node['children'].to_s.strip.split(' ')
371
+ response.add_metric_to_hierarchy(metric_name, children)
372
+ end
373
+
366
374
  response
367
375
  end
368
376
 
@@ -1,5 +1,5 @@
1
1
  module ThreeScale
2
2
  class Client
3
- VERSION = '2.8.1'
3
+ VERSION = '2.8.2'
4
4
  end
5
5
  end
data/test/client_test.rb CHANGED
@@ -257,6 +257,67 @@ class ThreeScale::ClientTest < MiniTest::Test
257
257
  assert_equal 'usage limits are exceeded', response.error_message
258
258
  end
259
259
 
260
+ def test_hierarchy
261
+ # Hierarchies can be retrieved in authorize, authrep, and oauth_authorize
262
+ # calls.
263
+ urls = [:authorize, :authrep, :oauth_authorize].inject({}) do |acc, method|
264
+ acc[method] = "http://#{@host}/transactions/#{method}.xml?"\
265
+ "provider_key=1234abcd&app_id=foo&hierarchy=1"
266
+ acc[method] << "&%5Busage%5D%5Bhits%5D=1" if method == :authrep
267
+ acc
268
+ end
269
+
270
+ body = '<status>
271
+ <authorized>true</authorized>
272
+ <plan>Ultimate</plan>
273
+
274
+ <usage_reports>
275
+ <usage_report metric="parent1" period="day">
276
+ <period_start>2016-01-01 00:00:00 +0000</period_start>
277
+ <period_end>2016-01-02 00:00:00 +0000</period_end>
278
+ <max_value>1000</max_value>
279
+ <current_value>10</current_value>
280
+ </usage_report>
281
+ <usage_report metric="parent2" period="day">
282
+ <period_start>2016-01-01 00:00:00 +0000</period_start>
283
+ <period_end>2016-01-02 00:00:00 +0000</period_end>
284
+ <max_value>100</max_value>
285
+ <current_value>1</current_value>
286
+ </usage_report>
287
+ <usage_report metric="child1" period="day">
288
+ <period_start>2016-01-01 00:00:00 +0000</period_start>
289
+ <period_end>2016-01-02 00:00:00 +0000</period_end>
290
+ <max_value>1000</max_value>
291
+ <current_value>5</current_value>
292
+ </usage_report>
293
+ <usage_report metric="child2" period="day">
294
+ <period_start>2016-01-01 00:00:00 +0000</period_start>
295
+ <period_end>2016-01-02 00:00:00 +0000</period_end>
296
+ <max_value>1000</max_value>
297
+ <current_value>5</current_value>
298
+ </usage_report>
299
+ <usage_report metric="child3" period="day">
300
+ <period_start>2016-01-01 00:00:00 +0000</period_start>
301
+ <period_end>2016-01-02 00:00:00 +0000</period_end>
302
+ <max_value>100</max_value>
303
+ <current_value>5</current_value>
304
+ </usage_report>
305
+ </usage_reports>
306
+
307
+ <hierarchy>
308
+ <metric name="parent1" children="child1 child2" />
309
+ <metric name="parent2" children="child3" />
310
+ </hierarchy>
311
+ </status>'
312
+
313
+ urls.each do |method, url|
314
+ FakeWeb.register_uri(:get, url, :status => ['200', 'OK'], :body => body)
315
+ response = @client.send(method, :app_id => 'foo', :hierarchy => 1)
316
+ assert_equal response.hierarchy, { 'parent1' => ['child1', 'child2'],
317
+ 'parent2' => ['child3'] }
318
+ end
319
+ end
320
+
260
321
  def test_successful_oauth_authorize
261
322
  body = '<status>
262
323
  <authorized>true</authorized>
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.1
4
+ version: 2.8.2
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-11 00:00:00.000000000 Z
15
+ date: 2016-10-18 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler