pisoni 1.26.0 → 1.27.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1675046183f0f1221921e9e2637d5107875f6528a1f829467cbf6d634752f263
4
- data.tar.gz: 593203983ca15e7249917cb66ceb3bdb9884585faa1fe1bc91e1ae4a88f341fc
3
+ metadata.gz: 0b9921a2c40849229cd27b57db87570d21794d2d65d4673aef8faa157f5f4782
4
+ data.tar.gz: 5b6b50ff45e57e8c55ba4b873b0529b7902a2c67c34372475aefe39938e0df74
5
5
  SHA512:
6
- metadata.gz: bbd28ac55fa5feadf7cba3759e123f72f2df9c4b47fb63053d0f535fbf437cdea9a7dfcb8c75496ad4401ff84a72df1462f17d748f973000e3d6af294ecb6e4a
7
- data.tar.gz: f4135e0196aa5e3d7ade69fd44f101bf5bb024ba36691125a93adb3dab75145df0f9a5664e47d3bb95b98b836f7362d145f2d416a9dfe244ba831d225b1db56d
6
+ metadata.gz: f3c2931b7987037a397b43e491db1dcf3985148672270b33b5703b08a4a4f9e01ac15de8a29433f13fdd9d5985d50f87275a7a17542bfddc2d71b2e42f6d528d
7
+ data.tar.gz: 2fa14e7b0ff82f7701b279503e2957a6978aca5bdb07b59a2ba75d9a1724926009bf46876202985c4a3414c1694a28929e7f6b79424686171e8d1d9eabedccf9
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  Notable changes to Pisoni will be tracked in this document.
4
4
 
5
+ ## 1.27.0 - 2019-06-28
6
+
7
+ ### Added
8
+
9
+ - Support for app credentials with special characters ('*', '$', etc.). [#22](https://github.com/3scale/pisoni/pull/22)
10
+
5
11
  ## 1.26.0 - 2019-03-05
6
12
 
7
13
  ### Added
@@ -1,3 +1,5 @@
1
+ require 'cgi'
2
+
1
3
  module ThreeScale
2
4
  module Core
3
5
  class Application < APIClient::Resource
@@ -16,12 +18,16 @@ module ThreeScale
16
18
  private_class_method :base_uri
17
19
 
18
20
  def self.app_uri(service_id, id)
19
- "#{base_uri(service_id)}#{id}"
21
+ escaped_id = CGI::escape(id.to_s)
22
+
23
+ "#{base_uri(service_id)}#{escaped_id}"
20
24
  end
21
25
  private_class_method :app_uri
22
26
 
23
27
  def self.key_uri(service_id, key)
24
- "#{base_uri(service_id)}key/#{key}"
28
+ escaped_key = CGI::escape(key)
29
+
30
+ "#{base_uri(service_id)}key/#{escaped_key}"
25
31
  end
26
32
  private_class_method :key_uri
27
33
 
@@ -71,7 +77,8 @@ module ThreeScale
71
77
 
72
78
  def self.save_id_by_key(service_id, user_key, id)
73
79
  raise ApplicationHasInconsistentData.new(id, user_key) if (service_id.nil? || id.nil? || user_key.nil? || service_id=="" || id=="" || user_key=="")
74
- ret = api_do_put({}, uri: "#{app_uri(service_id, id)}/key/#{user_key}")
80
+ escaped_key = CGI::escape(user_key)
81
+ ret = api_do_put({}, uri: "#{app_uri(service_id, id)}/key/#{escaped_key}")
75
82
  ret[:ok]
76
83
  end
77
84
 
@@ -1,3 +1,5 @@
1
+ require 'cgi'
2
+
1
3
  module ThreeScale
2
4
  module Core
3
5
  class ApplicationKey < APIClient::Resource
@@ -25,8 +27,10 @@ module ThreeScale
25
27
  end
26
28
  private_class_method :base_uri
27
29
 
28
- def self.application_key_uri(service_id, application_id, value = nil)
29
- "#{base_uri(service_id, application_id)}#{value}"
30
+ def self.application_key_uri(service_id, application_id, value = '')
31
+ escaped_value = CGI::escape(value)
32
+
33
+ "#{base_uri(service_id, application_id)}#{escaped_value}"
30
34
  end
31
35
  private_class_method :application_key_uri
32
36
  end
@@ -1,5 +1,5 @@
1
1
  module ThreeScale
2
2
  module Core
3
- VERSION = '1.26.0'
3
+ VERSION = '1.27.0'
4
4
  end
5
5
  end
@@ -57,38 +57,60 @@ module ThreeScale
57
57
  application_key.must_be_kind_of ApplicationKey
58
58
  application_key.value.must_equal value
59
59
  end
60
+
61
+ describe 'with a key that contains special chars (*, _, etc.)' do
62
+ let(:key) { '#$*' }
63
+
64
+ before do
65
+ ApplicationKey.delete(service_id, app_id, key)
66
+ end
67
+
68
+ it 'saves it correctly' do
69
+ application_key = ApplicationKey.save(service_id, app_id, key)
70
+
71
+ application_key.must_be_kind_of ApplicationKey
72
+ application_key.value.must_equal key
73
+ end
74
+ end
60
75
  end
61
76
 
62
77
  describe '.delete' do
63
- describe 'with an existing application key' do
64
- let(:service_id) { 300 }
65
- let(:app_id) { 200 }
66
- let(:value) { "foo" }
78
+ let(:service_id) { 300 }
79
+ let(:app_id) { 200 }
80
+ let(:key) { 'foo' }
67
81
 
68
- before do
69
- Application.save service_id: service_id, id: app_id, state: 'suspended',
70
- plan_id: '3066', plan_name: 'crappy', redirect_url: 'blah'
82
+ before do
83
+ Application.save service_id: service_id, id: app_id, state: 'suspended',
84
+ plan_id: '3066', plan_name: 'crappy', redirect_url: 'blah'
85
+ end
71
86
 
72
- ApplicationKey.save(service_id, app_id, value)
87
+ describe 'with an existing application key' do
88
+ before do
89
+ ApplicationKey.save(service_id, app_id, key)
73
90
  end
74
91
 
75
92
  it 'returns true' do
76
- ApplicationKey.delete(service_id, app_id, value).must_equal true
93
+ ApplicationKey.delete(service_id, app_id, key).must_equal true
77
94
  end
78
95
  end
79
96
 
80
97
  describe 'with a non-existing application key' do
81
- let(:service_id) { 300 }
82
- let(:app_id) { 500 }
83
- let(:value) { "nonexistingkey" }
98
+ let(:key) { 'non_existing_key' }
99
+
100
+ it 'returns false' do
101
+ ApplicationKey.delete(service_id, app_id, key).must_equal false
102
+ end
103
+ end
104
+
105
+ describe 'with a key that contains special chars (*, _, etc.)' do
106
+ let(:key_with_special_chars) { '#$*' }
84
107
 
85
108
  before do
86
- Application.save service_id: service_id, id: app_id, state: 'suspended',
87
- plan_id: '3066', plan_name: 'crappy', redirect_url: 'blah'
109
+ ApplicationKey.save(service_id, app_id, key)
88
110
  end
89
111
 
90
112
  it 'returns true' do
91
- ApplicationKey.delete(service_id, app_id, value).must_equal false
113
+ ApplicationKey.delete(service_id, app_id, key).must_equal true
92
114
  end
93
115
  end
94
116
  end
@@ -44,6 +44,20 @@ module ThreeScale
44
44
  Application.load(1999, 7999).must_be_nil
45
45
  end
46
46
  end
47
+
48
+ describe 'with an app ID that contains special characters' do
49
+ let(:service_id) { 2001 }
50
+ let(:app_id) { '#$*' }
51
+
52
+ before do
53
+ Application.save service_id: service_id, id: app_id, state: 'suspended',
54
+ plan_id: '3066', plan_name: 'crappy', redirect_url: 'blah'
55
+ end
56
+
57
+ it 'returns an app with the correct ID' do
58
+ Application.load(service_id, app_id).id.must_equal app_id
59
+ end
60
+ end
47
61
  end
48
62
 
49
63
  describe '.delete' do
@@ -73,6 +87,20 @@ module ThreeScale
73
87
  Application.delete(1999, 8011).must_equal false
74
88
  end
75
89
  end
90
+
91
+ describe 'with an app ID that contains special characters' do
92
+ let(:service_id) { 2001 }
93
+ let(:app_id) { '#$*' }
94
+
95
+ before do
96
+ Application.save service_id: service_id, id: app_id, state: 'suspended',
97
+ plan_id: '3066', plan_name: 'crappy', redirect_url: 'blah'
98
+ end
99
+
100
+ it 'returns true when deleting an existing app' do
101
+ Application.delete(service_id, app_id).must_equal true
102
+ end
103
+ end
76
104
  end
77
105
 
78
106
  describe '.save' do
@@ -126,6 +154,22 @@ module ThreeScale
126
154
  end.must_raise KeyError # minitest wont catch parent exceptions :/
127
155
  end
128
156
  end
157
+
158
+ describe 'with an app ID that contains special characters' do
159
+ let(:service_id) { 2001 }
160
+ let(:app_id) { '#$*' }
161
+
162
+ before do
163
+ Application.delete(service_id, app_id)
164
+ end
165
+
166
+ it 'returns an object with the correct ID' do
167
+ app = Application.save service_id: service_id, id: app_id, state: 'suspended',
168
+ plan_id: '3066', plan_name: 'crappy', redirect_url: 'blah'
169
+
170
+ app.id.must_equal app_id
171
+ end
172
+ end
129
173
  end
130
174
 
131
175
  describe '#save' do
@@ -226,31 +270,70 @@ module ThreeScale
226
270
  end
227
271
 
228
272
  describe 'by_key' do
273
+ let(:key) { 'a_key' }
274
+ let(:key_with_special_chars) { '#$*' }
275
+ let(:service_id) { 2001 }
276
+ let(:app_id) { 8011 }
277
+
229
278
  before do
230
- Application.save_id_by_key(2001, 'a_key', 8011)
279
+ Application.save_id_by_key(service_id, key, app_id)
231
280
  end
232
281
 
233
282
  describe '.load_id_by_key' do
234
283
  it 'returns the app ID linked to the specified service and key' do
235
- Application.load_id_by_key(2001, 'a_key').must_equal '8011'
284
+ Application.load_id_by_key(service_id, key).must_equal app_id.to_s
285
+ end
286
+
287
+ describe 'with a key that contains special chars (*, _, etc.)' do
288
+ before do
289
+ Application.save_id_by_key(service_id, key_with_special_chars, app_id)
290
+ end
291
+
292
+ it 'returns the correct app ID' do
293
+ Application.load_id_by_key(service_id, key_with_special_chars).must_equal app_id.to_s
294
+ end
236
295
  end
237
296
  end
238
297
 
239
298
  describe '.save_id_by_key' do
299
+ let(:another_key) { key.succ }
300
+
240
301
  it 'changes the key linked to the app ID and service' do
241
- Application.load_id_by_key(2001, 'another_key').must_be_nil
242
- Application.save_id_by_key(2001, 'another_key', 8011).must_equal true
243
- Application.load_id_by_key(2001, 'another_key').must_equal '8011'
302
+ Application.load_id_by_key(service_id, another_key).must_be_nil
303
+ Application.save_id_by_key(service_id, another_key, app_id).must_equal true
304
+ Application.load_id_by_key(service_id, another_key).must_equal app_id.to_s
244
305
  # clean up this key
245
- Application.delete_id_by_key(2001, 'another_key')
306
+ Application.delete_id_by_key(service_id, another_key)
307
+ end
308
+
309
+ describe 'with a key that contains special chars (*, _, etc.)' do
310
+ after do
311
+ Application.delete_id_by_key(service_id, key_with_special_chars)
312
+ end
313
+
314
+ it 'changes the key linked to the app ID and service' do
315
+ Application.save_id_by_key(service_id, key_with_special_chars, app_id).must_equal true
316
+ Application.load_id_by_key(service_id, key_with_special_chars).must_equal app_id.to_s
317
+ end
246
318
  end
247
319
  end
248
320
 
249
321
  describe '.delete_id_by_key' do
250
322
  it 'deletes the key linked to the app ID and service' do
251
- Application.load_id_by_key(2001, 'a_key').must_equal '8011'
252
- Application.delete_id_by_key(2001, 'a_key')
253
- Application.load_id_by_key(2001, 'a_key').must_be_nil
323
+ Application.load_id_by_key(service_id, key).must_equal app_id.to_s
324
+ Application.delete_id_by_key(service_id, key)
325
+ Application.load_id_by_key(service_id, key).must_be_nil
326
+ end
327
+
328
+ describe 'with a key that contains special chars (*, _, etc.)' do
329
+ before do
330
+ Application.save_id_by_key(service_id, key_with_special_chars, app_id)
331
+ end
332
+
333
+ it 'deletes the app' do
334
+ Application.delete_id_by_key(service_id, key_with_special_chars)
335
+ Application.load_id_by_key(service_id, key_with_special_chars).must_be_nil
336
+ end
254
337
  end
255
338
  end
256
339
  end
data/spec/service_spec.rb CHANGED
@@ -245,16 +245,6 @@ module ThreeScale
245
245
  Service.delete_stats(default_service_id, delete_job).must_equal true
246
246
  end
247
247
  end
248
-
249
- describe 'with invalid job' do
250
- # to < from
251
- let(:to) { Time.new(2001, 10, 31).to_i }
252
- it 'raises error' do
253
- lambda {
254
- Service.delete_stats(default_service_id, delete_job)
255
- }.must_raise APIClient::APIError
256
- end
257
- end
258
248
  end
259
249
  end
260
250
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pisoni
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.26.0
4
+ version: 1.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alejandro Martinez Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-05 00:00:00.000000000 Z
11
+ date: 2019-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -158,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  requirements: []
161
- rubygems_version: 3.0.2
161
+ rubygems_version: 3.0.1
162
162
  signing_key:
163
163
  specification_version: 4
164
164
  summary: Client for the Apisonator internal API for model data