cronofy 0.1.1 → 0.2.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: 4f76631baac972077d554c5fff801c154f8900a8
4
- data.tar.gz: 37b92d85fd99a99f3c1dd3f3415c1a710e9068bf
3
+ metadata.gz: 45bf57c6a8beff0b87cba2a4f20ce39f2d346c08
4
+ data.tar.gz: b44a0e902fdce56a5235777245da5401732c7e06
5
5
  SHA512:
6
- metadata.gz: 4772a5a044101e1bd461ca0c72b893faa0a5b32f19f0a6f1c1291fb1f5f205f6831aee20f4aca2dab175b4dfa942e2d5e11e66668b0be0a4079c1cf75e86ac06
7
- data.tar.gz: 7b0c9c0e2b33f13c99526a325546f25a0f0735bba2a739f3b827e7a3655a1d17b7d756f72c0a08df4be9a973a4bab3c3fe6849f6e7bedd72258d9038ca2cd675
6
+ metadata.gz: 1c9b7b89e732c1d5f2549e7490cdee7868fd8843b1fbe52dcda029452efad15aa201ed18a7fd2b3b21359a10e3d8beaa5e32754e530356264ded15bede98c491
7
+ data.tar.gz: 27595f37ddb805069debcd433fa7c72aac23d6914dea8ccc57260b8ea4af28bfdcf44b4ff08d1d59bfddb60c38f9d0831ce9e308f87749c287b1108449559f8e
data/lib/cronofy/auth.rb CHANGED
@@ -12,7 +12,7 @@ module Cronofy
12
12
  set_access_token(token, refresh_token) if token
13
13
  end
14
14
 
15
- # Public: generate a URL for authorizing the application with Cronofy
15
+ # Internal: generate a URL for authorizing the application with Cronofy
16
16
  #
17
17
  # redirect_uri String, the URI to return to after authorization
18
18
  # scope Array of String, the scope requested
@@ -31,7 +31,7 @@ module Cronofy
31
31
  end
32
32
  end
33
33
 
34
- # Public: Refreshes the access token
34
+ # Internal: Refreshes the access token
35
35
  # Returns Hash of token elements to allow client to update in local store for user
36
36
  def refresh!
37
37
  do_request do
@@ -48,6 +48,22 @@ module Cronofy
48
48
  @access_token = OAuth2::AccessToken.new(@api_client, token, refresh_token: refresh_token)
49
49
  end
50
50
 
51
+ # Internal: Revokes the refresh token and corresponding access tokens.
52
+ #
53
+ # Returns nothing.
54
+ def revoke!
55
+ do_request do
56
+ body = {
57
+ client_id: @api_client.id,
58
+ client_secret: @api_client.secret,
59
+ token: access_token.refresh_token,
60
+ }
61
+
62
+ @api_client.request(:post, "/oauth/token/revoke", body: body)
63
+ @access_token = nil
64
+ end
65
+ end
66
+
51
67
  private
52
68
 
53
69
  def do_request(&block)
@@ -133,6 +133,9 @@ module Cronofy
133
133
  # :last_modified - The Time that events must be modified on or
134
134
  # after in order to be returned (optional).
135
135
  #
136
+ # The first page will be retrieved eagerly so that common errors will happen
137
+ # inline. However, subsequent pages (if any) will be requested lazily.
138
+ #
136
139
  # See http://www.cronofy.com/developers/api#read-events for reference.
137
140
  #
138
141
  # Returns a lazily-evaluated Enumerable of Events
@@ -187,8 +190,7 @@ module Cronofy
187
190
  #
188
191
  # callback_url - A String specifing the callback URL for the channel.
189
192
  #
190
- # See http://www.cronofy.com/developers/api/alpha#create-channel for
191
- # reference.
193
+ # See http://www.cronofy.com/developers/api#create-channel for reference.
192
194
  #
193
195
  # Returns a Channel.
194
196
  #
@@ -208,8 +210,7 @@ module Cronofy
208
210
 
209
211
  # Public: Lists all the notification channels for the account.
210
212
  #
211
- # See http://www.cronofy.com/developers/api/alpha#list-channels for
212
- # reference.
213
+ # See http://www.cronofy.com/developers/api#list-channels for reference.
213
214
  #
214
215
  # Returns an Array of Channels.
215
216
  #
@@ -229,6 +230,8 @@ module Cronofy
229
230
  #
230
231
  # channel_id - The String Cronofy ID for the channel to close.
231
232
  #
233
+ # See http://www.cronofy.com/developers/api#close-channel for reference.
234
+ #
232
235
  # Returns nothing.
233
236
  #
234
237
  # Raises Cronofy::CredentialsMissingError if no credentials available.
@@ -315,6 +318,22 @@ module Cronofy
315
318
  @auth.refresh!
316
319
  end
317
320
 
321
+ # Public: Revokes the account's refresh token and access token.
322
+ #
323
+ # After making this call the Client will become unusable. You should also
324
+ # delete the stored credentials used to create this instance.
325
+ #
326
+ # See http://www.cronofy.com/developers/api#revoke-authorization for
327
+ # reference.
328
+ #
329
+ # Returns nothing.
330
+ #
331
+ # Raises Cronofy::AuthenticationFailureError if the client ID and secret are
332
+ # not valid.
333
+ def revoke_authorization
334
+ @auth.revoke!
335
+ end
336
+
318
337
  private
319
338
 
320
339
  READ_EVENTS_DEFAULT_PARAMS = { tzid: "Etc/UTC" }.freeze
@@ -385,10 +404,11 @@ module Cronofy
385
404
  @access_token = access_token
386
405
  @url = url
387
406
  @params = params
407
+ @first_page = get_page(url, params)
388
408
  end
389
409
 
390
410
  def each
391
- page = get_page(url, params)
411
+ page = @first_page
392
412
 
393
413
  page.events.each do |event|
394
414
  yield event
@@ -1,3 +1,3 @@
1
1
  module Cronofy
2
- VERSION = "0.1.1".freeze
2
+ VERSION = "0.2.0".freeze
3
3
  end
@@ -120,4 +120,40 @@ describe Cronofy::Auth do
120
120
 
121
121
  it_behaves_like 'an authorization request'
122
122
  end
123
+
124
+ describe "#revoke!" do
125
+ let(:auth) do
126
+ Cronofy::Auth.new(client_id, client_secret, access_token, refresh_token)
127
+ end
128
+
129
+ let!(:revocation_request) do
130
+ stub_request(:post, "https://api.cronofy.com/oauth/token/revoke")
131
+ .with(
132
+ body: {
133
+ client_id: client_id,
134
+ client_secret: client_secret,
135
+ token: refresh_token,
136
+ },
137
+ headers: {
138
+ 'Content-Type' => 'application/x-www-form-urlencoded',
139
+ 'User-Agent' => "Cronofy Ruby #{Cronofy::VERSION}",
140
+ }
141
+ )
142
+ .to_return(
143
+ status: response_status,
144
+ )
145
+ end
146
+
147
+ before do
148
+ auth.revoke!
149
+ end
150
+
151
+ it "unsets the access token" do
152
+ expect(auth.access_token).to be_nil
153
+ end
154
+
155
+ it "makes the revocation request" do
156
+ expect(revocation_request).to have_been_requested
157
+ end
158
+ end
123
159
  end
@@ -396,6 +396,17 @@ describe Cronofy::Client do
396
396
  expect(subject).to eq(first_event)
397
397
  end
398
398
  end
399
+
400
+ context "without calling #to_a to force full evaluation" do
401
+ subject { client.read_events(params) }
402
+
403
+ it_behaves_like 'a Cronofy request'
404
+
405
+ # We expect it to behave like a Cronofy request as the first page is
406
+ # requested eagerly so that the majority of errors will happen inline
407
+ # rather than lazily happening wherever the iterator may have been
408
+ # passed.
409
+ end
399
410
  end
400
411
 
401
412
  describe '#delete_event' do
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.1.1
4
+ version: 0.2.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: 2015-04-20 00:00:00.000000000 Z
12
+ date: 2015-04-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oauth2