cronofy 0.31.2 → 0.32.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
  SHA256:
3
- metadata.gz: 2ac0a6d45f99b6fc43669a1c8bfae0ae9c040d05ca200c9638cf535fcff3ee71
4
- data.tar.gz: 44ce008bc883118eda39dc75a486834083e71bfb37ff2716629db2d9019578ed
3
+ metadata.gz: 8f29c174e71afa774e39cc40e852e3c95b60135bf076596adebfa302d0b1457d
4
+ data.tar.gz: e41e9a034f53aea943c74e9cff922713beda7edc9fb3d765ee2a31481ce6d236
5
5
  SHA512:
6
- metadata.gz: e9e8ff68fbfa8a4fe9582a259dd885f3d8cd155ec455fccbdab736acc3fdfae655ce2ec17eeb81a954774a6c311172c28d0be24721179ef408b08bb060b3fe9d
7
- data.tar.gz: 3f0632f1a75377bcbcca43fbe03557c91dff7492ed1122688bd160e7c5227c0620c0b8765f46cbac54fe53aafb8fd6d2b224fbb07beee41d7d67d3358e7a3b73
6
+ metadata.gz: d8263c12831f387bdbc43bdb754f2546bcdefba7021a834d556c07620f0c7f67a85dddf37ac7b70f052750bba8ef247680b0ac5843a3c00025283112d38bd205
7
+ data.tar.gz: 4648a9b821c575337165a2d395d85b359a5d882184dc17bff41ae9e792a37d62b048e2b610d185b06d80ccd20abe8ba15e8f0e3b27187b11ff25ca7518cf6879
@@ -1,3 +1,7 @@
1
+ ## [0.32.0]
2
+
3
+ * Support Availability Rules and Scheduling Conversations [#64]
4
+
1
5
  ## [0.31.2]
2
6
 
3
7
  * Support parsing new Availability response formats [#73]
@@ -142,6 +146,7 @@
142
146
  [0.31.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.31.0
143
147
  [0.31.1]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.31.1
144
148
  [0.31.2]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.31.2
149
+ [0.32.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.32.0
145
150
 
146
151
  [#13]: https://github.com/cronofy/cronofy-ruby/pull/13
147
152
  [#16]: https://github.com/cronofy/cronofy-ruby/pull/16
@@ -174,6 +179,7 @@
174
179
  [#59]: https://github.com/cronofy/cronofy-ruby/pull/59
175
180
  [#60]: https://github.com/cronofy/cronofy-ruby/pull/60
176
181
  [#62]: https://github.com/cronofy/cronofy-ruby/pull/62
182
+ [#64]: https://github.com/cronofy/cronofy-ruby/pull/64
177
183
  [#69]: https://github.com/cronofy/cronofy-ruby/pull/69
178
184
  [#72]: https://github.com/cronofy/cronofy-ruby/pull/72
179
185
  [#73]: https://github.com/cronofy/cronofy-ruby/pull/73
@@ -1344,7 +1344,6 @@ module Cronofy
1344
1344
  parse_json(SmartInviteResponse, nil, response)
1345
1345
  end
1346
1346
 
1347
-
1348
1347
  # Public: Creates an element_token to pass to a UI Element
1349
1348
  #
1350
1349
  # options - A Hash of options for the token
@@ -1371,6 +1370,133 @@ module Cronofy
1371
1370
  parse_json(ElementToken, "element_token", response)
1372
1371
  end
1373
1372
 
1373
+ # Public: Creates or updates an AvailabilityRule.
1374
+ #
1375
+ # availability_rule_id - A String uniquely identifying the availability rule
1376
+ # for the authenticated user in your application
1377
+ # (note: this is NOT an ID generated by Cronofy).
1378
+ # tzid - The time zone identifier for the rule.
1379
+ # calendar_ids - An optional array of calendar_ids that should impact the
1380
+ # user's availability.
1381
+ # weekly_periods - An array of objects describing a weekly recurring available period
1382
+ # :day - A String for the week day
1383
+ # :start_time - A String for 24hr time that period starts eg: 09:30
1384
+ # :end_time - A String for 24hr time that period ends eg: 17:30
1385
+ # Examples
1386
+ #
1387
+ # client.upsert_availability_rule(
1388
+ # availability_rule_id: "qTtZdczOccgaPncGJaCiLg",
1389
+ # tzid: "America/Chicago",
1390
+ # calendar_ids: [
1391
+ # "cal_n23kjnwrw2_jsdfjksn234"
1392
+ # ],
1393
+ # weekly_periods: [
1394
+ # {
1395
+ # day: "monday",
1396
+ # start_time: "09:30",
1397
+ # end_time: "12:30",
1398
+ # },
1399
+ # {
1400
+ # day: "tuesday",
1401
+ # start_time: "09:30",
1402
+ # end_time: "12:30",
1403
+ # }
1404
+ # ]
1405
+ # )
1406
+ #
1407
+ # See http://www.cronofy.com/developers/alpha/api#availability_rules for reference.
1408
+ #
1409
+ # Returns an AvailabilityRuleResponse.
1410
+ #
1411
+ # Raises Cronofy::CredentialsMissingError if no credentials available.
1412
+ # Raises Cronofy::InvalidRequestError if the request contains invalid
1413
+ # parameters.
1414
+ # Raises Cronofy::TooManyRequestsError if the request exceeds the rate
1415
+ # limits for the application.
1416
+ def upsert_availability_rule(body)
1417
+ response = wrapped_request { post("/v1/availability_rules", body) }
1418
+ parse_json(AvailabilityRule, 'availability_rule', response)
1419
+ end
1420
+
1421
+ # Public: Gets an AvailabilityRule.
1422
+ #
1423
+ # availability_rule_id - A String uniquely identifying the availability rule
1424
+ # for the authenticated user in your application
1425
+ #
1426
+ # Returns an AvailabilityRuleResponse.
1427
+ #
1428
+ # Raises Cronofy::CredentialsMissingError if no credentials available.
1429
+ # Raises Cronofy::InvalidRequestError if the request contains invalid
1430
+ # parameters.
1431
+ # Raises Cronofy::TooManyRequestsError if the request exceeds the rate
1432
+ # limits for the application.
1433
+ def get_availability_rule(availability_rule_id)
1434
+ response = wrapped_request { get("/v1/availability_rules/#{availability_rule_id}") }
1435
+ parse_json(AvailabilityRule, 'availability_rule', response)
1436
+ end
1437
+
1438
+ # Public: Deletes an AvailabilityRule.
1439
+ #
1440
+ # availability_rule_id - A String uniquely identifying the availability rule
1441
+ # for the authenticated user in your application
1442
+ #
1443
+ # Returns nothing.
1444
+ #
1445
+ # Raises Cronofy::CredentialsMissingError if no credentials available.
1446
+ # Raises Cronofy::InvalidRequestError if the request contains invalid
1447
+ # parameters.
1448
+ # Raises Cronofy::TooManyRequestsError if the request exceeds the rate
1449
+ # limits for the application.
1450
+ def delete_availability_rule(availability_rule_id)
1451
+ wrapped_request { delete("/v1/availability_rules/#{availability_rule_id}") }
1452
+ nil
1453
+ end
1454
+
1455
+ # Public: Creates a scheduling conversation
1456
+ #
1457
+ # pre release end-point documentation to follow
1458
+ #
1459
+ def create_scheduling_conversation(body)
1460
+ response = wrapped_request { post("/v1/scheduling_conversations", body) }
1461
+ parse_json(SchedulingConversation, 'scheduling_conversation', response)
1462
+ end
1463
+
1464
+ # Public: Creates a scheduling conversation
1465
+ #
1466
+ # pre release end-point documentation to follow
1467
+ #
1468
+ def get_scheduling_conversation(id)
1469
+ response = wrapped_request { get("/v1/scheduling_conversations/#{id}") }
1470
+ parse_json(SchedulingConversation, 'scheduling_conversation', response)
1471
+ end
1472
+
1473
+ # Public: Looks up a scheduling conversation with a token returned by a redirect
1474
+ #
1475
+ # pre release end-point documentation to follow
1476
+ #
1477
+ def lookup_scheduling_conversation(token)
1478
+ response = wrapped_request { get("/v1/scheduling_conversations?token=#{token}") }
1479
+ parse_json(SchedulingConversationResponse, nil, response)
1480
+ end
1481
+
1482
+ # Public: List available slots for a scheduling conversation
1483
+ #
1484
+ # pre release end-point documentation to follow
1485
+ #
1486
+ def list_scheduling_conversation_participant_slots(url)
1487
+ response = wrapped_request { get(url) }
1488
+ parse_collection(SchedulingConversationSlot, "slots", response )
1489
+ end
1490
+
1491
+ # Public: Choose one or more slots for a scheduling conversation
1492
+ #
1493
+ # pre release end-point documentation to follow
1494
+ #
1495
+ def select_scheduling_conversation_participant_slots(url, args)
1496
+ response = wrapped_request { post(url, args)}
1497
+ parse_json(SchedulingConversation, 'scheduling_conversation', response)
1498
+ end
1499
+
1374
1500
  private
1375
1501
 
1376
1502
  def translate_available_periods(periods)
@@ -387,4 +387,30 @@ module Cronofy
387
387
 
388
388
  class ElementToken < CronofyMash
389
389
  end
390
+
391
+ class SchedulingConversation < CronofyMash
392
+ end
393
+
394
+ class SchedulingConversationResponse < CronofyMash
395
+ coerce_key :participant, Participant
396
+ coerce_key :scheduling_conversation, SchedulingConversation
397
+ end
398
+
399
+ class SchedulingConversationSlot < CronofyMash
400
+ coerce_key :start, EventTime
401
+ coerce_key :end, EventTime
402
+ end
403
+
404
+ class WeeklyPeriod < CronofyMash
405
+ end
406
+
407
+ module WeeklyPeriodEnumerable
408
+ def self.coerce(values)
409
+ values.map { |v| WeeklyPeriod.new(v) }
410
+ end
411
+ end
412
+
413
+ class AvailabilityRule < CronofyMash
414
+ coerce_key :weekly_periods, WeeklyPeriodEnumerable
415
+ end
390
416
  end
@@ -1,3 +1,3 @@
1
1
  module Cronofy
2
- VERSION = "0.31.2".freeze
2
+ VERSION = "0.32.0".freeze
3
3
  end
@@ -2841,4 +2841,204 @@ describe Cronofy::Client do
2841
2841
  end
2842
2842
  end
2843
2843
  end
2844
+
2845
+ describe '#create_scheduling_conversation' do
2846
+ let(:request_url) { 'https://api.cronofy.com/v1/scheduling_conversations' }
2847
+ let(:method) { :post }
2848
+ let(:request_body) do
2849
+ {
2850
+ "participants" => [
2851
+ {
2852
+ "participant_id" => "@grace",
2853
+ "sub" => "acc_567236000909002",
2854
+ "slots" => {
2855
+ "choice_method" => "auto"
2856
+ }
2857
+ },
2858
+ {
2859
+ "participant_id" => "@karl"
2860
+ }
2861
+ ],
2862
+ "required_duration" => { "minutes" => 60 },
2863
+ "available_periods" => [
2864
+ {
2865
+ "start" => "2018-05-01T00:00:00Z",
2866
+ "end" => "2018-05-08T23:59:59Z"
2867
+ }
2868
+ ]
2869
+ }
2870
+ end
2871
+
2872
+ let(:correct_response_code) { 200 }
2873
+ let(:correct_response_body) do
2874
+ {
2875
+ "scheduling_conversation" => {
2876
+ "scheduling_conversation_id" => "abcd1234"
2877
+ }
2878
+ }
2879
+ end
2880
+
2881
+ let(:correct_mapped_result) do
2882
+ Cronofy::SchedulingConversation.new(scheduling_conversation_id: "abcd1234")
2883
+ end
2884
+
2885
+ subject { client.create_scheduling_conversation(request_body) }
2886
+
2887
+ it_behaves_like 'a Cronofy request'
2888
+ it_behaves_like 'a Cronofy request with mapped return value'
2889
+ end
2890
+
2891
+ describe '#lookup_scheduling_conversation' do
2892
+ let(:token) { "hagsdau7g3d" }
2893
+ let(:request_url) { "https://api.cronofy.com/v1/scheduling_conversations?token=#{token}" }
2894
+ let(:method) { :get }
2895
+
2896
+ let(:correct_response_code) { 200 }
2897
+ let(:correct_response_body) do
2898
+ {
2899
+ "participant" => {
2900
+ "participant_id" => "83o38hoa"
2901
+ },
2902
+ "scheduling_conversation" => {
2903
+ "scheduling_conversation_id" => "abcd1234"
2904
+ },
2905
+ }
2906
+ end
2907
+
2908
+ let(:correct_mapped_result) do
2909
+ Cronofy::SchedulingConversationResponse.new(
2910
+ participant: Cronofy::Participant.new(participant_id: "83o38hoa"),
2911
+ scheduling_conversation: Cronofy::SchedulingConversation.new(scheduling_conversation_id: "abcd1234"),
2912
+ )
2913
+ end
2914
+
2915
+ subject { client.lookup_scheduling_conversation(token) }
2916
+
2917
+ it_behaves_like 'a Cronofy request'
2918
+ it_behaves_like 'a Cronofy request with mapped return value'
2919
+ end
2920
+
2921
+ describe '#upsert_availability_rule' do
2922
+ let(:request_url) { 'https://api.cronofy.com/v1/availability_rules' }
2923
+ let(:method) { :post }
2924
+ let(:request_body) do
2925
+ {
2926
+ "availability_rule_id" => "default",
2927
+ "tzid" => "America/Chicago",
2928
+ "calendar_ids" => [
2929
+ "cal_n23kjnwrw2_jsdfjksn234"
2930
+ ],
2931
+ "weekly_periods" => [
2932
+ {
2933
+ "day" => "monday",
2934
+ "start_time" => "09:30",
2935
+ "end_time" => "16:30"
2936
+ },
2937
+ {
2938
+ "day" => "wednesday",
2939
+ "start_time" => "09:30",
2940
+ "end_time" => "16:30"
2941
+ }
2942
+ ]
2943
+ }
2944
+ end
2945
+
2946
+ let(:correct_response_code) { 200 }
2947
+ let(:correct_response_body) do
2948
+ {
2949
+ "availability_rule" => {
2950
+ "availability_rule_id" => "default",
2951
+ "tzid" => "America/Chicago",
2952
+ "calendar_ids" => [
2953
+ "cal_n23kjnwrw2_jsdfjksn234"
2954
+ ],
2955
+ "weekly_periods" => [
2956
+ {
2957
+ "day" => "monday",
2958
+ "start_time" => "09:30",
2959
+ "end_time" => "16:30"
2960
+ },
2961
+ {
2962
+ "day" => "wednesday",
2963
+ "start_time" => "09:30",
2964
+ "end_time" => "16:30"
2965
+ }
2966
+ ]
2967
+ }
2968
+ }
2969
+ end
2970
+
2971
+ let(:correct_mapped_result) do
2972
+ Cronofy::AvailabilityRule.new(
2973
+ availability_rule_id: request_body['availability_rule_id'],
2974
+ tzid: request_body['tzid'],
2975
+ calendar_ids: request_body['calendar_ids'],
2976
+ weekly_periods: request_body['weekly_periods'].map { |wp| Cronofy::WeeklyPeriod.new(wp) },
2977
+ )
2978
+ end
2979
+
2980
+ subject { client.upsert_availability_rule(request_body) }
2981
+
2982
+ it_behaves_like 'a Cronofy request'
2983
+ it_behaves_like 'a Cronofy request with mapped return value'
2984
+ end
2985
+
2986
+ describe "#get_availability_rule" do
2987
+ let(:availability_rule_id) { 'default'}
2988
+ let(:request_url) { "https://api.cronofy.com/v1/availability_rules/#{availability_rule_id}" }
2989
+ let(:method) { :get }
2990
+
2991
+ let(:correct_response_code) { 200 }
2992
+ let(:correct_response_body) do
2993
+ {
2994
+ "availability_rule" => {
2995
+ "availability_rule_id" => "default",
2996
+ "tzid" => "America/Chicago",
2997
+ "calendar_ids" => [
2998
+ "cal_n23kjnwrw2_jsdfjksn234"
2999
+ ],
3000
+ "weekly_periods" => [
3001
+ {
3002
+ "day" => "monday",
3003
+ "start_time" => "09:30",
3004
+ "end_time" => "16:30"
3005
+ },
3006
+ {
3007
+ "day" => "wednesday",
3008
+ "start_time" => "09:30",
3009
+ "end_time" => "16:30"
3010
+ }
3011
+ ]
3012
+ }
3013
+ }
3014
+ end
3015
+
3016
+ let(:correct_mapped_result) do
3017
+ rule = correct_response_body['availability_rule']
3018
+ Cronofy::AvailabilityRule.new(
3019
+ availability_rule_id: rule['availability_rule_id'],
3020
+ tzid: rule['tzid'],
3021
+ calendar_ids: rule['calendar_ids'],
3022
+ weekly_periods: rule['weekly_periods'].map { |wp| Cronofy::WeeklyPeriod.new(wp) },
3023
+ )
3024
+ end
3025
+
3026
+ subject { client.get_availability_rule(availability_rule_id) }
3027
+
3028
+ it_behaves_like 'a Cronofy request'
3029
+ it_behaves_like 'a Cronofy request with mapped return value'
3030
+ end
3031
+
3032
+ describe '#delete_availability_rule' do
3033
+ let(:availability_rule_id) { 'default'}
3034
+ let(:request_url) { "https://api.cronofy.com/v1/availability_rules/#{availability_rule_id}" }
3035
+ let(:method) { :delete }
3036
+ let(:request_body) { nil }
3037
+ let(:correct_response_code) { 202 }
3038
+ let(:correct_response_body) { nil }
3039
+
3040
+ subject { client.delete_availability_rule(availability_rule_id) }
3041
+
3042
+ it_behaves_like 'a Cronofy request'
3043
+ end
2844
3044
  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.31.2
4
+ version: 0.32.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: 2019-06-11 00:00:00.000000000 Z
12
+ date: 2019-06-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oauth2