cronofy 0.17.0 → 0.18.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
  SHA1:
3
- metadata.gz: 1a517f51f9e209fd7b2f27d26c97daf641a45b90
4
- data.tar.gz: d701d1ca79903ab281ffe138c2d53bb22d81d723
3
+ metadata.gz: cf2e08298ccea5ded0fbfdda981849d4baa3afe0
4
+ data.tar.gz: 7e790d91714ec2aa9b426ae16e0348d7854878c6
5
5
  SHA512:
6
- metadata.gz: 8aa4f73c917c397d1a2306b40a6f76d4d198186b527c4cbaa974879772551b8140b1cdbe986dcc28f103c476da92f3dae75dc56f1535d5cb87194d62a51dc152
7
- data.tar.gz: f132c20db5a57edd377b3b71d8746bc96900d0bea0c642df78255cb55af36f729ffb66929517685494c1fd8f40557e50ddeb600a3d6468e142b4c9d63545a508
6
+ metadata.gz: 1f90a02ae698495b2d3a6b904172a9cb69526a7fb729a45e3e4bf6de965dcc0de7d11d5ff1bc96d28ebe9a88b4087eee36041c4c1d6dc71c44ef291f8e660462
7
+ data.tar.gz: 9b80e6db0d04ab9687dc09dde40a5bf0ae1c076c837b3674ed19cc3e43abe41cdc3db2ce0c58eb080556e727ccc916e23d09afc40681bd1190e6897fd1917909
@@ -1,3 +1,7 @@
1
+ ## [0.18.0]
2
+
3
+ * Support multiple data centres [#30]
4
+
1
5
  ## [0.17.0]
2
6
 
3
7
  * Support member-specific available periods for Availability API [#27]
@@ -35,6 +39,7 @@
35
39
  [0.15.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.15.0
36
40
  [0.16.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.16.0
37
41
  [0.17.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.17.0
42
+ [0.18.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.18.0
38
43
 
39
44
  [#13]: https://github.com/cronofy/cronofy-ruby/pull/13
40
45
  [#16]: https://github.com/cronofy/cronofy-ruby/pull/16
@@ -44,3 +49,4 @@
44
49
  [#24]: https://github.com/cronofy/cronofy-ruby/pull/24
45
50
  [#26]: https://github.com/cronofy/cronofy-ruby/pull/26
46
51
  [#27]: https://github.com/cronofy/cronofy-ruby/pull/27
52
+ [#30]: https://github.com/cronofy/cronofy-ruby/pull/30
@@ -7,19 +7,63 @@ require "cronofy/response_parser"
7
7
  require 'json'
8
8
 
9
9
  module Cronofy
10
- def self.api_url
11
- @api_url ||= (ENV['CRONOFY_API_URL'] || "https://api.cronofy.com")
10
+ def self.default_data_centre
11
+ @default_data_centre || ENV['CRONOFY_DATA_CENTRE']
12
+ end
13
+
14
+ def self.default_data_centre=(value)
15
+ @default_data_centre = value
16
+ end
17
+
18
+ def self.api_url(data_centre_override)
19
+ if data_centre_override
20
+ api_url_for_data_centre(data_centre_override)
21
+ else
22
+ ENV['CRONOFY_API_URL'] || api_url_for_data_centre(default_data_centre)
23
+ end
12
24
  end
13
25
 
14
26
  def self.api_url=(value)
15
27
  @api_url = value
16
28
  end
17
29
 
18
- def self.app_url
19
- @app_url ||= (ENV['CRONOFY_APP_URL'] || "https://app.cronofy.com")
30
+ def self.api_url_for_data_centre(dc)
31
+ @api_urls ||= Hash.new do |hash, key|
32
+ if key.nil? || key.to_sym == :us
33
+ url = "https://api.cronofy.com"
34
+ else
35
+ url = "https://api-#{key}.cronofy.com"
36
+ end
37
+
38
+ hash[key] = url.freeze
39
+ end
40
+
41
+ @api_urls[dc]
42
+ end
43
+
44
+ def self.app_url(data_centre_override)
45
+ if data_centre_override
46
+ app_url_for_data_centre(data_centre_override)
47
+ else
48
+ ENV['CRONOFY_APP_URL'] || app_url_for_data_centre(default_data_centre)
49
+ end
20
50
  end
21
51
 
22
52
  def self.app_url=(value)
23
53
  @app_url = value
24
54
  end
55
+
56
+ def self.app_url_for_data_centre(dc)
57
+ @app_urls ||= Hash.new do |hash, key|
58
+ if key.nil? || key.to_sym == :us
59
+ url = "https://app.cronofy.com"
60
+ else
61
+ url = "https://app-#{key}.cronofy.com"
62
+ end
63
+
64
+ hash[key] = url.freeze
65
+ end
66
+
67
+ @app_urls[dc]
68
+ end
25
69
  end
@@ -5,13 +5,19 @@ module Cronofy
5
5
  class Auth
6
6
  attr_reader :access_token
7
7
 
8
- def initialize(client_id, client_secret, token = nil, refresh_token = nil)
8
+ def initialize(options = {})
9
+ access_token = options[:access_token]
10
+ client_id = options[:client_id]
11
+ client_secret = options[:client_secret]
12
+ data_centre = options[:data_centre]
13
+ refresh_token = options[:refresh_token]
14
+
9
15
  @client_credentials_missing = blank?(client_id) || blank?(client_secret)
10
16
 
11
- @auth_client = OAuth2::Client.new(client_id, client_secret, site: ::Cronofy.app_url, connection_opts: { headers: { "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}" } })
12
- @api_client = OAuth2::Client.new(client_id, client_secret, site: ::Cronofy.api_url, connection_opts: { headers: { "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}" } })
17
+ @auth_client = OAuth2::Client.new(client_id, client_secret, site: ::Cronofy.app_url(data_centre), connection_opts: { headers: { "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}" } })
18
+ @api_client = OAuth2::Client.new(client_id, client_secret, site: ::Cronofy.api_url(data_centre), connection_opts: { headers: { "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}" } })
13
19
 
14
- set_access_token(token, refresh_token) if token || refresh_token
20
+ set_access_token(access_token, refresh_token) if access_token || refresh_token
15
21
  end
16
22
 
17
23
  # Internal: generate a URL for authorizing the application with Cronofy
@@ -23,13 +23,23 @@ module Cronofy
23
23
  # ENV["CRONOFY_CLIENT_SECRET"]).
24
24
  # :refresh_token - An existing refresh token String for the user's
25
25
  # account (optional).
26
+ # :data_centre - An identifier to override the default data
27
+ # centre (optional).
26
28
  def initialize(options = {})
27
29
  access_token = options[:access_token]
28
30
  client_id = options.fetch(:client_id, ENV["CRONOFY_CLIENT_ID"])
29
31
  client_secret = options.fetch(:client_secret, ENV["CRONOFY_CLIENT_SECRET"])
30
32
  refresh_token = options[:refresh_token]
31
33
 
32
- @auth = Auth.new(client_id, client_secret, access_token, refresh_token)
34
+ @data_centre = options[:data_centre]
35
+
36
+ @auth = Auth.new(
37
+ client_id: client_id,
38
+ client_secret: client_secret,
39
+ access_token: access_token,
40
+ refresh_token: refresh_token,
41
+ data_centre: @data_centre,
42
+ )
33
43
  end
34
44
 
35
45
  # Public: Creates a new calendar for the account.
@@ -207,7 +217,7 @@ module Cronofy
207
217
  params[tp] = to_iso8601(params[tp])
208
218
  end
209
219
 
210
- url = ::Cronofy.api_url + "/v1/events"
220
+ url = api_url + "/v1/events"
211
221
  PagedResultIterator.new(PagedEventsResult, :events, access_token!, url, params)
212
222
  end
213
223
 
@@ -255,7 +265,7 @@ module Cronofy
255
265
  params[tp] = to_iso8601(params[tp])
256
266
  end
257
267
 
258
- url = ::Cronofy.api_url + "/v1/free_busy"
268
+ url = api_url + "/v1/free_busy"
259
269
  PagedResultIterator.new(PagedFreeBusyResult, :free_busy, access_token!, url, params)
260
270
  end
261
271
 
@@ -891,6 +901,10 @@ module Cronofy
891
901
  ResponseParser.new(response).parse_json(@page_parser)
892
902
  end
893
903
  end
904
+
905
+ def api_url
906
+ ::Cronofy.api_url(@data_centre)
907
+ end
894
908
  end
895
909
 
896
910
  # Deprecated: Alias for Client for backwards compatibility.
@@ -1,3 +1,3 @@
1
1
  module Cronofy
2
- VERSION = "0.17.0".freeze
2
+ VERSION = "0.18.0".freeze
3
3
  end
@@ -22,10 +22,13 @@ describe Cronofy::Auth do
22
22
  WebMock.disable_net_connect!(allow_localhost: true)
23
23
  end
24
24
 
25
+ let(:api_token_url) { "https://api.cronofy.com/oauth/token" }
26
+ let(:app_token_url) { "https://app.cronofy.com/oauth/token" }
27
+
25
28
  let(:response_status) { 200 }
26
29
 
27
30
  before(:each) do
28
- stub_request(:post, "https://api.cronofy.com/oauth/token")
31
+ stub_request(:post, api_token_url)
29
32
  .with(
30
33
  body: {
31
34
  client_id: client_id,
@@ -52,7 +55,7 @@ describe Cronofy::Auth do
52
55
  }
53
56
  )
54
57
 
55
- stub_request(:post, "https://app.cronofy.com/oauth/token")
58
+ stub_request(:post, app_token_url)
56
59
  .with(
57
60
  body: {
58
61
  client_id: client_id,
@@ -89,6 +92,7 @@ describe Cronofy::Auth do
89
92
  let(:scheme) { 'https' }
90
93
  let(:host) { 'app.cronofy.com' }
91
94
  let(:path) { '/oauth/authorize' }
95
+ let(:data_centre_override) { nil }
92
96
  let(:default_params) do
93
97
  {
94
98
  'client_id' => client_id,
@@ -99,7 +103,11 @@ describe Cronofy::Auth do
99
103
  end
100
104
 
101
105
  let(:auth) do
102
- Cronofy::Auth.new(client_id, client_secret)
106
+ Cronofy::Auth.new(
107
+ client_id: client_id,
108
+ client_secret: client_secret,
109
+ data_centre: data_centre_override,
110
+ )
103
111
  end
104
112
 
105
113
  subject do
@@ -147,6 +155,14 @@ describe Cronofy::Auth do
147
155
 
148
156
  it_behaves_like 'a user auth link provider'
149
157
  end
158
+
159
+ context 'when data centre overridden' do
160
+ let(:data_centre_override) { :de }
161
+ let(:host) { 'app-de.cronofy.com' }
162
+ let(:params) { default_params }
163
+
164
+ it_behaves_like 'a user auth link provider'
165
+ end
150
166
  end
151
167
 
152
168
  shared_examples 'an authorization request' do
@@ -188,7 +204,15 @@ describe Cronofy::Auth do
188
204
  end
189
205
 
190
206
  describe '#get_token_from_code' do
191
- subject { Cronofy::Auth.new(client_id, client_secret).get_token_from_code(code, redirect_uri) }
207
+ let(:data_centre_override) { nil }
208
+
209
+ subject do
210
+ Cronofy::Auth.new(
211
+ client_id: client_id,
212
+ client_secret: client_secret,
213
+ data_centre: data_centre_override,
214
+ ).get_token_from_code(code, redirect_uri)
215
+ end
192
216
 
193
217
  context "with account_id" do
194
218
  let(:account_id) { "acc_0123456789abc" }
@@ -239,13 +263,26 @@ describe Cronofy::Auth do
239
263
  end
240
264
  end
241
265
 
266
+ context "with data centre overridden" do
267
+ let(:data_centre_override) { :de }
268
+ let(:api_token_url) { "https://api-de.cronofy.com/oauth/token" }
269
+ let(:app_token_url) { "https://app-de.cronofy.com/oauth/token" }
270
+
271
+ it_behaves_like 'an authorization request'
272
+ end
273
+
242
274
  it_behaves_like 'an authorization request'
243
275
  end
244
276
 
245
277
  describe '#refresh!' do
246
278
  context "access_token and refresh_token present" do
247
279
  subject do
248
- Cronofy::Auth.new(client_id, client_secret, access_token, refresh_token).refresh!
280
+ Cronofy::Auth.new(
281
+ client_id: client_id,
282
+ client_secret: client_secret,
283
+ access_token: access_token,
284
+ refresh_token: refresh_token,
285
+ ).refresh!
249
286
  end
250
287
 
251
288
  it_behaves_like 'an authorization request'
@@ -253,7 +290,11 @@ describe Cronofy::Auth do
253
290
 
254
291
  context "no refresh_token" do
255
292
  subject do
256
- Cronofy::Auth.new(client_id, client_secret, access_token, nil).refresh!
293
+ Cronofy::Auth.new(
294
+ client_id: client_id,
295
+ client_secret: client_secret,
296
+ access_token: access_token,
297
+ ).refresh!
257
298
  end
258
299
 
259
300
  it "raises a credentials missing error" do
@@ -263,7 +304,10 @@ describe Cronofy::Auth do
263
304
 
264
305
  context "no access_token or refresh_token" do
265
306
  subject do
266
- Cronofy::Auth.new(client_id, client_secret, nil, nil).refresh!
307
+ Cronofy::Auth.new(
308
+ client_id: client_id,
309
+ client_secret: client_secret,
310
+ ).refresh!
267
311
  end
268
312
 
269
313
  it "raises a credentials missing error" do
@@ -273,11 +317,32 @@ describe Cronofy::Auth do
273
317
 
274
318
  context "only refresh_token" do
275
319
  subject do
276
- Cronofy::Auth.new(client_id, client_secret, nil, refresh_token).refresh!
320
+ Cronofy::Auth.new(
321
+ client_id: client_id,
322
+ client_secret: client_secret,
323
+ refresh_token: refresh_token,
324
+ ).refresh!
277
325
  end
278
326
 
279
327
  it_behaves_like 'an authorization request'
280
328
  end
329
+
330
+ context "with data centre overridden" do
331
+ subject do
332
+ Cronofy::Auth.new(
333
+ client_id: client_id,
334
+ client_secret: client_secret,
335
+ access_token: access_token,
336
+ refresh_token: refresh_token,
337
+ data_centre: :de,
338
+ ).refresh!
339
+ end
340
+
341
+ let(:api_token_url) { "https://api-de.cronofy.com/oauth/token" }
342
+ let(:app_token_url) { "https://app-de.cronofy.com/oauth/token" }
343
+
344
+ it_behaves_like 'an authorization request'
345
+ end
281
346
  end
282
347
 
283
348
  describe "#revoke!" do
@@ -315,7 +380,12 @@ describe Cronofy::Auth do
315
380
 
316
381
  context "access_token and refresh_token present" do
317
382
  let(:auth) do
318
- Cronofy::Auth.new(client_id, client_secret, access_token, refresh_token)
383
+ Cronofy::Auth.new(
384
+ client_id: client_id,
385
+ client_secret: client_secret,
386
+ access_token: access_token,
387
+ refresh_token: refresh_token,
388
+ )
319
389
  end
320
390
 
321
391
  let(:revoke_token) { refresh_token }
@@ -325,7 +395,11 @@ describe Cronofy::Auth do
325
395
 
326
396
  context "only refresh_token" do
327
397
  let(:auth) do
328
- Cronofy::Auth.new(client_id, client_secret, nil, refresh_token)
398
+ Cronofy::Auth.new(
399
+ client_id: client_id,
400
+ client_secret: client_secret,
401
+ refresh_token: refresh_token,
402
+ )
329
403
  end
330
404
 
331
405
  let(:revoke_token) { refresh_token }
@@ -335,7 +409,11 @@ describe Cronofy::Auth do
335
409
 
336
410
  context "only access_token" do
337
411
  let(:auth) do
338
- Cronofy::Auth.new(client_id, client_secret, access_token, nil)
412
+ Cronofy::Auth.new(
413
+ client_id: client_id,
414
+ client_secret: client_secret,
415
+ access_token: access_token,
416
+ )
339
417
  end
340
418
 
341
419
  let(:revoke_token) { access_token }
@@ -345,7 +423,7 @@ describe Cronofy::Auth do
345
423
 
346
424
  context "no access_token or refresh_token" do
347
425
  let(:auth) do
348
- Cronofy::Auth.new(client_id, client_secret, nil, nil)
426
+ Cronofy::Auth.new(client_id: client_id, client_secret: client_secret)
349
427
  end
350
428
 
351
429
  it "raises a credentials missing error" do
@@ -1283,4 +1283,44 @@ describe Cronofy::Client do
1283
1283
  end
1284
1284
  end
1285
1285
  end
1286
+
1287
+ describe "Specified data centre" do
1288
+ let(:data_centre) { :de }
1289
+
1290
+ let(:client) do
1291
+ Cronofy::Client.new(
1292
+ client_id: 'client_id_123',
1293
+ client_secret: 'client_secret_456',
1294
+ access_token: token,
1295
+ refresh_token: 'refresh_token_456',
1296
+ data_centre: data_centre,
1297
+ )
1298
+ end
1299
+
1300
+ describe "Userinfo" do
1301
+ let(:request_url) { "https://api-#{data_centre}.cronofy.com/v1/userinfo" }
1302
+
1303
+ describe "#userinfo" do
1304
+ let(:method) { :get }
1305
+
1306
+ let(:correct_response_code) { 200 }
1307
+ let(:correct_response_body) do
1308
+ {
1309
+ "sub" => "ser_5700a00eb0ccd07000000000",
1310
+ "cronofy.type" => "service_account",
1311
+ "cronofy.service_account.domain" => "example.com"
1312
+ }
1313
+ end
1314
+
1315
+ let(:correct_mapped_result) do
1316
+ Cronofy::UserInfo.new(correct_response_body)
1317
+ end
1318
+
1319
+ subject { client.userinfo }
1320
+
1321
+ it_behaves_like "a Cronofy request"
1322
+ it_behaves_like "a Cronofy request with mapped return value"
1323
+ end
1324
+ end
1325
+ end
1286
1326
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cronofy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergii Paryzhskyi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-02-10 00:00:00.000000000 Z
12
+ date: 2017-02-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oauth2