cronofy 0.37.5 → 0.37.6

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
  SHA256:
3
- metadata.gz: e21c23685801f569da765f2572e20cb66870a8eb2615628279bc6ff7cdcd49d9
4
- data.tar.gz: 3c595df2b4fb1cf29c6bf76e31865a30cd7f09aaa12bcd80c485d8e3edc8c3e7
3
+ metadata.gz: f7a632c7e4036fef7e004f6310425d235fea56520b297b4a3a0c644fe57a0011
4
+ data.tar.gz: 0fc429f25dc4ff14003629e81139047c36ccdf7ba2e06631c0b22d913e709bb2
5
5
  SHA512:
6
- metadata.gz: 151382f0d9c593b19637dd8d6c452c61dceab8e4345a361def1aee2e934545a6fc97ea73dd10ece22fb83073b1670e724bcfa32a6a712112f1c2f115010a5809
7
- data.tar.gz: 95391561459fba368ef63ff522288ce50fdb08ae90c6205c825ae781495cbdb515d7ae6d9d0814080674c2fe608cb77ad306409bf28f1b62f686eb79dc5a7ca1
6
+ metadata.gz: 92488cee8fea969192bc9ef1aa624872201c4928087b385f5d10cac11720575191cfbc89db86016c31ba87bac8f57b6d7890ab8e3beb2925a8eafc87cb98b08f
7
+ data.tar.gz: 7c0651b6b64c64e50ce356699b9ea3ba58928dee2ccdb3922ae4cbbd6a6b4fd572f36871e045567675d6166e93d55c86afee92a6fba4e01e370f980fbd385d77
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [0.37.6]
2
+
3
+ * Adds support for disabling and fetching the status of Real-Time Scheduling links [#100]
4
+
1
5
  ## [0.37.5]
2
6
 
3
7
  * Support `query_periods` as well as the original `available_periods` for Real-Time Scheduling and Real-Time Sequencing [#99]
@@ -202,6 +206,7 @@
202
206
  [0.37.3]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.37.3
203
207
  [0.37.4]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.37.4
204
208
  [0.37.5]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.37.5
209
+ [0.37.6]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.37.6
205
210
 
206
211
  [#13]: https://github.com/cronofy/cronofy-ruby/pull/13
207
212
  [#16]: https://github.com/cronofy/cronofy-ruby/pull/16
@@ -249,3 +254,4 @@
249
254
  [#95]: https://github.com/cronofy/cronofy-ruby/pull/95
250
255
  [#97]: https://github.com/cronofy/cronofy-ruby/pull/97
251
256
  [#99]: https://github.com/cronofy/cronofy-ruby/pull/99
257
+ [#100]: https://github.com/cronofy/cronofy-ruby/pull/100
@@ -1117,6 +1117,59 @@ module Cronofy
1117
1117
  parse_json(AddToCalendarResponse, nil , response)
1118
1118
  end
1119
1119
 
1120
+ # Public: Gets the status of a Real-Time Scheduling link.
1121
+ #
1122
+ # Provide one of the following arguments to identify the link:
1123
+ # id - A String uniquely identifying the link, returned on initial
1124
+ # creation
1125
+ # token - The token portion of the link's URL
1126
+ #
1127
+ # See https://docs.cronofy.com/developers/api/scheduling/real-time-scheduling/status/ for reference.
1128
+ #
1129
+ # Returns a RealTimeSchedulingStatus.
1130
+ #
1131
+ # Raises ArgumentError if neither 'id' nor 'token' arguments are passed.
1132
+ # Raises Cronofy::CredentialsMissingError if no credentials available.
1133
+ # Raises Cronofy::TooManyRequestsError if the request exceeds the rate
1134
+ # limits for the application.
1135
+ def get_real_time_scheduling_status(args = {})
1136
+ if args[:token]
1137
+ url = "/v1/real_time_scheduling?token=#{args[:token]}"
1138
+ elsif args[:id]
1139
+ url = "/v1/real_time_scheduling/#{args[:id]}"
1140
+ else
1141
+ raise ArgumentError.new("Must pass either token or id argument")
1142
+ end
1143
+
1144
+ response = wrapped_request { api_key!.get(url) }
1145
+ parse_json(RealTimeSchedulingStatus, 'real_time_scheduling' , response)
1146
+ end
1147
+
1148
+ # Public: Disables a Real-Time Scheduling link.
1149
+ #
1150
+ # id - A String uniquely identifying the link, returned
1151
+ # on initial creation
1152
+ # display_message - A message to display to visitors of the disabled link
1153
+ #
1154
+ # See https://docs.cronofy.com/developers/api/scheduling/real-time-scheduling/disable/ for reference.
1155
+ #
1156
+ # Returns a RealTimeSchedulingStatus.
1157
+ #
1158
+ # Raises ArgumentError if no 'id' argument is passed.
1159
+ # Raises Cronofy::CredentialsMissingError if no credentials available.
1160
+ # Raises Cronofy::InvalidRequestError if the request contains invalid
1161
+ # parameters.
1162
+ # Raises Cronofy::TooManyRequestsError if the request exceeds the rate
1163
+ # limits for the application.
1164
+ def disable_real_time_scheduling(args = {})
1165
+ id = args.delete(:id)
1166
+
1167
+ raise ArgumentError.new('id argument is required') unless id
1168
+
1169
+ response = wrapped_request { api_key!.post("/v1/real_time_scheduling/#{id}/disable", json_request_args(args)) }
1170
+ parse_json(RealTimeSchedulingStatus, 'real_time_scheduling' , response)
1171
+ end
1172
+
1120
1173
  # Public: Generates an real time sequencing link to start the OAuth process with
1121
1174
  # an event to be automatically upserted
1122
1175
  #
data/lib/cronofy/types.rb CHANGED
@@ -413,4 +413,8 @@ module Cronofy
413
413
  class AvailabilityRule < CronofyMash
414
414
  coerce_key :weekly_periods, WeeklyPeriodEnumerable
415
415
  end
416
+
417
+ class RealTimeSchedulingStatus < CronofyMash
418
+ coerce_key :event, Event
419
+ end
416
420
  end
@@ -1,3 +1,3 @@
1
1
  module Cronofy
2
- VERSION = "0.37.5".freeze
2
+ VERSION = "0.37.6".freeze
3
3
  end
@@ -2190,25 +2190,8 @@ describe Cronofy::Client do
2190
2190
  end
2191
2191
 
2192
2192
  describe "Real time scheduling" do
2193
- let(:request_url) { "https://api.cronofy.com/v1/real_time_scheduling" }
2194
- let(:url) { URI("https://example.com") }
2195
- let(:method) { :post }
2196
-
2197
- let(:request_headers) do
2198
- {
2199
- "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
2200
- "Content-Type" => "application/json; charset=utf-8",
2201
- }
2202
- end
2203
-
2204
- let(:location) { { :description => "Board room" } }
2205
- let(:transparency) { nil }
2206
2193
  let(:client_id) { 'example_id' }
2207
2194
  let(:client_secret) { 'example_secret' }
2208
- let(:scope) { 'read_events delete_events' }
2209
- let(:state) { 'example_state' }
2210
- let(:redirect_uri) { 'http://example.com/redirect' }
2211
-
2212
2195
  let(:client) do
2213
2196
  Cronofy::Client.new(
2214
2197
  client_id: client_id,
@@ -2216,6 +2199,9 @@ describe Cronofy::Client do
2216
2199
  )
2217
2200
  end
2218
2201
 
2202
+ let(:url) { URI("https://example.com") }
2203
+ let(:location) { { :description => "Board room" } }
2204
+ let(:transparency) { nil }
2219
2205
  let(:event) do
2220
2206
  {
2221
2207
  :event_id => "qTtZdczOccgaPncGJaCiLg",
@@ -2232,121 +2218,251 @@ describe Cronofy::Client do
2232
2218
  }
2233
2219
  end
2234
2220
 
2235
- let(:oauth_body) do
2221
+ let(:real_time_scheduling_status_response) do
2236
2222
  {
2237
- scope: scope,
2238
- redirect_uri: redirect_uri,
2239
- state: state,
2223
+ real_time_scheduling: {
2224
+ real_time_scheduling_id: 'example_id',
2225
+ url: 'https://app.cronofy.com/real_time_scheduling/example_token',
2226
+ event: event,
2227
+ status: 'disabled',
2228
+ }
2240
2229
  }
2241
2230
  end
2242
2231
 
2243
- let(:target_calendars) do
2244
- [
2232
+ describe "#real_time_scheduling" do
2233
+ let(:request_url) { "https://api.cronofy.com/v1/real_time_scheduling" }
2234
+
2235
+ let(:method) { :post }
2236
+
2237
+ let(:request_headers) do
2245
2238
  {
2246
- sub: "acc_567236000909002",
2247
- calendar_id: "cal_n23kjnwrw2_jsdfjksn234",
2239
+ "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
2240
+ "Content-Type" => "application/json; charset=utf-8",
2248
2241
  }
2249
- ]
2250
- end
2242
+ end
2251
2243
 
2252
- let(:availability) do
2253
- {
2254
- participants: [
2244
+ let(:scope) { 'read_events delete_events' }
2245
+ let(:state) { 'example_state' }
2246
+ let(:redirect_uri) { 'http://example.com/redirect' }
2247
+
2248
+ let(:oauth_body) do
2249
+ {
2250
+ scope: scope,
2251
+ redirect_uri: redirect_uri,
2252
+ state: state,
2253
+ }
2254
+ end
2255
+
2256
+ let(:target_calendars) do
2257
+ [
2255
2258
  {
2256
- members: [{
2257
- sub: "acc_567236000909002",
2258
- calendar_ids: ["cal_n23kjnwrw2_jsdfjksn234"]
2259
- }],
2260
- required: 'all'
2259
+ sub: "acc_567236000909002",
2260
+ calendar_id: "cal_n23kjnwrw2_jsdfjksn234",
2261
+ }
2262
+ ]
2263
+ end
2264
+
2265
+ let(:availability) do
2266
+ {
2267
+ participants: [
2268
+ {
2269
+ members: [{
2270
+ sub: "acc_567236000909002",
2271
+ calendar_ids: ["cal_n23kjnwrw2_jsdfjksn234"]
2272
+ }],
2273
+ required: 'all'
2274
+ }
2275
+ ],
2276
+ required_duration: { minutes: 60 },
2277
+ available_periods: [{
2278
+ start: Time.utc(2017, 1, 1, 9, 00),
2279
+ end: Time.utc(2017, 1, 1, 17, 00),
2280
+ }],
2281
+ start_interval: { minutes: 60 },
2282
+ buffer: {
2283
+ before: { minutes: 30 },
2284
+ after: { minutes: 45 },
2261
2285
  }
2262
- ],
2263
- required_duration: { minutes: 60 },
2264
- available_periods: [{
2265
- start: Time.utc(2017, 1, 1, 9, 00),
2266
- end: Time.utc(2017, 1, 1, 17, 00),
2267
- }],
2268
- start_interval: { minutes: 60 },
2269
- buffer: {
2270
- before: { minutes: 30 },
2271
- after: { minutes: 45 },
2272
2286
  }
2273
- }
2287
+ end
2288
+
2289
+ let(:mapped_availability) do
2290
+ {
2291
+ participants: [
2292
+ {
2293
+ members: [{
2294
+ sub: "acc_567236000909002",
2295
+ calendar_ids: ["cal_n23kjnwrw2_jsdfjksn234"]
2296
+ }],
2297
+ required: 'all'
2298
+ }
2299
+ ],
2300
+ required_duration: { minutes: 60 },
2301
+ start_interval: { minutes: 60 },
2302
+ buffer: {
2303
+ before: { minutes: 30 },
2304
+ after: { minutes: 45 },
2305
+ },
2306
+ available_periods: [{
2307
+ start: "2017-01-01T09:00:00Z",
2308
+ end: "2017-01-01T17:00:00Z",
2309
+ }]
2310
+ }
2311
+ end
2312
+
2313
+ let(:args) do
2314
+ {
2315
+ oauth: oauth_body,
2316
+ event: event,
2317
+ target_calendars: target_calendars,
2318
+ availability: availability,
2319
+ }
2320
+ end
2321
+
2322
+ let(:request_body) do
2323
+ {
2324
+ client_id: client_id,
2325
+ client_secret: client_secret,
2326
+ oauth: oauth_body,
2327
+ event: {
2328
+ :event_id => "qTtZdczOccgaPncGJaCiLg",
2329
+ :summary => "Board meeting",
2330
+ :description => "Discuss plans for the next quarter.",
2331
+ :url => url.to_s,
2332
+ :location => location,
2333
+ :transparency => transparency,
2334
+ :reminders => [
2335
+ { :minutes => 60 },
2336
+ { :minutes => 0 },
2337
+ { :minutes => 10 },
2338
+ ],
2339
+ },
2340
+ target_calendars: target_calendars,
2341
+ availability: mapped_availability,
2342
+ }
2343
+ end
2344
+ let(:correct_response_code) { 202 }
2345
+ let(:correct_response_body) do
2346
+ {
2347
+ oauth_url: "http://www.example.com/oauth?token=example"
2348
+ }
2349
+ end
2350
+
2351
+ subject { client.real_time_scheduling(args) }
2352
+
2353
+ context 'when start/end are Times' do
2354
+ it_behaves_like 'a Cronofy request'
2355
+ end
2356
+
2357
+ context 'when passing query periods' do
2358
+ it_behaves_like 'a Cronofy request'
2359
+
2360
+ before do
2361
+ availability[:query_periods] = availability.delete(:available_periods)
2362
+ mapped_availability[:query_periods] = mapped_availability.delete(:available_periods)
2363
+ end
2364
+ end
2274
2365
  end
2275
2366
 
2276
- let(:mapped_availability) do
2277
- {
2278
- participants: [
2367
+ describe "#get_real_time_scheduling_status" do
2368
+ let(:request_url) { "https://api.cronofy.com/v1/real_time_scheduling" }
2369
+ let(:method) { :get }
2370
+ let(:url) { "https://example.com" }
2371
+ let(:request_headers) do
2372
+ {
2373
+ "Authorization" => "Bearer #{client_secret}",
2374
+ "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
2375
+ "Accept" => "*/*",
2376
+ "Accept-Encoding" => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
2377
+ }
2378
+ end
2379
+ let(:correct_response_code) { 200 }
2380
+ let(:correct_response_body) { real_time_scheduling_status_response }
2381
+ let(:correct_mapped_result) do
2382
+ Cronofy::RealTimeSchedulingStatus.new(correct_response_body[:real_time_scheduling])
2383
+ end
2384
+
2385
+ subject { client.get_real_time_scheduling_status(args) }
2386
+
2387
+ context 'when passing id' do
2388
+ let(:request_url) { "https://api.cronofy.com/v1/real_time_scheduling/example_id" }
2389
+
2390
+ let(:args) do
2279
2391
  {
2280
- members: [{
2281
- sub: "acc_567236000909002",
2282
- calendar_ids: ["cal_n23kjnwrw2_jsdfjksn234"]
2283
- }],
2284
- required: 'all'
2392
+ id: 'example_id'
2285
2393
  }
2286
- ],
2287
- required_duration: { minutes: 60 },
2288
- start_interval: { minutes: 60 },
2289
- buffer: {
2290
- before: { minutes: 30 },
2291
- after: { minutes: 45 },
2292
- },
2293
- available_periods: [{
2294
- start: "2017-01-01T09:00:00Z",
2295
- end: "2017-01-01T17:00:00Z",
2296
- }]
2297
- }
2298
- end
2394
+ end
2299
2395
 
2300
- let(:args) do
2301
- {
2302
- oauth: oauth_body,
2303
- event: event,
2304
- target_calendars: target_calendars,
2305
- availability: availability,
2306
- }
2307
- end
2396
+ it_behaves_like 'a Cronofy request'
2397
+ it_behaves_like 'a Cronofy request with mapped return value'
2398
+ end
2308
2399
 
2309
- let(:request_body) do
2310
- {
2311
- client_id: client_id,
2312
- client_secret: client_secret,
2313
- oauth: oauth_body,
2314
- event: {
2315
- :event_id => "qTtZdczOccgaPncGJaCiLg",
2316
- :summary => "Board meeting",
2317
- :description => "Discuss plans for the next quarter.",
2318
- :url => url.to_s,
2319
- :location => location,
2320
- :transparency => transparency,
2321
- :reminders => [
2322
- { :minutes => 60 },
2323
- { :minutes => 0 },
2324
- { :minutes => 10 },
2325
- ],
2326
- },
2327
- target_calendars: target_calendars,
2328
- availability: mapped_availability,
2329
- }
2330
- end
2331
- let(:correct_response_code) { 202 }
2332
- let(:correct_response_body) do
2333
- {
2334
- oauth_url: "http://www.example.com/oauth?token=example"
2335
- }
2336
- end
2400
+ context 'when passing token' do
2401
+ let(:request_url) { "https://api.cronofy.com/v1/real_time_scheduling?token=example_token" }
2402
+ let(:args) do
2403
+ {
2404
+ token: 'example_token'
2405
+ }
2406
+ end
2337
2407
 
2338
- subject { client.real_time_scheduling(args) }
2408
+ it_behaves_like 'a Cronofy request'
2409
+ it_behaves_like 'a Cronofy request with mapped return value'
2410
+ end
2339
2411
 
2340
- context 'when start/end are Times' do
2341
- it_behaves_like 'a Cronofy request'
2412
+ context 'when passing neither id nor token' do
2413
+ let(:args) { Hash.new }
2414
+ it 'raises an ArgumentError' do
2415
+ expect { subject }.to raise_error(ArgumentError)
2416
+ end
2417
+ end
2342
2418
  end
2343
2419
 
2344
- context 'when passing query periods' do
2420
+ describe "#disable_real_time_scheduling" do
2421
+ let(:request_url) { "https://api.cronofy.com/v1/real_time_scheduling/example_id/disable" }
2422
+ let(:url) { "https://example.com" }
2423
+ let(:method) { :post }
2424
+ let(:request_headers) do
2425
+ {
2426
+ "Authorization" => "Bearer #{client_secret}",
2427
+ "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
2428
+ "Content-Type" => "application/json; charset=utf-8",
2429
+ }
2430
+ end
2431
+
2432
+ let(:args) do
2433
+ {
2434
+ id: 'example_id',
2435
+ display_message: 'example message'
2436
+ }
2437
+ end
2438
+
2439
+ let(:request_body) do
2440
+ {
2441
+ display_message: 'example message'
2442
+ }
2443
+ end
2444
+
2445
+ let(:correct_response_code) { 200 }
2446
+ let(:correct_response_body) { real_time_scheduling_status_response }
2447
+ let(:correct_mapped_result) do
2448
+ Cronofy::RealTimeSchedulingStatus.new(correct_response_body[:real_time_scheduling])
2449
+ end
2450
+
2451
+ subject { client.disable_real_time_scheduling(args) }
2452
+
2345
2453
  it_behaves_like 'a Cronofy request'
2454
+ it_behaves_like 'a Cronofy request with mapped return value'
2346
2455
 
2347
- before do
2348
- availability[:query_periods] = availability.delete(:available_periods)
2349
- mapped_availability[:query_periods] = mapped_availability.delete(:available_periods)
2456
+ context 'when omitting id argument' do
2457
+ let(:args) do
2458
+ {
2459
+ display_message: 'example message'
2460
+ }
2461
+ end
2462
+
2463
+ it 'raises an ArgumentError' do
2464
+ expect { subject }.to raise_error(ArgumentError)
2465
+ end
2350
2466
  end
2351
2467
  end
2352
2468
  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.37.5
4
+ version: 0.37.6
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: 2022-03-18 00:00:00.000000000 Z
12
+ date: 2022-04-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
158
  requirements: []
159
- rubygems_version: 3.2.33
159
+ rubygems_version: 3.3.8
160
160
  signing_key:
161
161
  specification_version: 4
162
162
  summary: Cronofy - the scheduling platform for business