cronofy 0.37.3 → 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: f398fb44b861ba5df84e244632877a53b050f584c08d15a815cb0e4abaae13bc
4
- data.tar.gz: 8cea161bbef6df1b41a3ff52b29984c9ccd3f713abe279a7137e1e0be89cd7d7
3
+ metadata.gz: f7a632c7e4036fef7e004f6310425d235fea56520b297b4a3a0c644fe57a0011
4
+ data.tar.gz: 0fc429f25dc4ff14003629e81139047c36ccdf7ba2e06631c0b22d913e709bb2
5
5
  SHA512:
6
- metadata.gz: 5961670573669f876d06f772a1c96175ac2e37a06fb3b3c6a1c677da86f5cbcb50820aa1e71897b7e8379ec556b55f9b56751efb51037d2f642284e72f0f07ed
7
- data.tar.gz: 7bf5e28b6786f2fee081d09562e9e2dd57a90652994d1755a13b76c9ad9484cb50ef9dce1784fd6921372a3f6b5b29888c2274e99ed13bdb196aa42036133233
6
+ metadata.gz: 92488cee8fea969192bc9ef1aa624872201c4928087b385f5d10cac11720575191cfbc89db86016c31ba87bac8f57b6d7890ab8e3beb2925a8eafc87cb98b08f
7
+ data.tar.gz: 7c0651b6b64c64e50ce356699b9ea3ba58928dee2ccdb3922ae4cbbd6a6b4fd572f36871e045567675d6166e93d55c86afee92a6fba4e01e370f980fbd385d77
data/CHANGELOG.md CHANGED
@@ -1,18 +1,30 @@
1
+ ## [0.37.6]
2
+
3
+ * Adds support for disabling and fetching the status of Real-Time Scheduling links [#100]
4
+
5
+ ## [0.37.5]
6
+
7
+ * Support `query_periods` as well as the original `available_periods` for Real-Time Scheduling and Real-Time Sequencing [#99]
8
+
9
+ ## [0.37.4]
10
+
11
+ * Support client_secret only clients being able to authorize `#availability` calls. [#97]
12
+
1
13
  ## [0.37.3]
2
14
 
3
- * Support `hmac_valid` as well as the original `hmac_match` for Client to verify a HMAC from a push notification using the client's secret.[#95]
15
+ * Support `hmac_valid` as well as the original `hmac_match` for Client to verify a HMAC from a push notification using the client's secret.[#95]
4
16
 
5
17
  ## [0.37.2]
6
18
 
7
- * Support `query_periods` as well as the original `available_periods` for Availability Query and Sequenced Availability [#91]
19
+ * Support `query_periods` as well as the original `available_periods` for Availability Query and Sequenced Availability [#91]
8
20
 
9
21
  ## [0.37.1]
10
22
 
11
- * Rename `data_centre` to `data_centre` (with aliases for backwards compatibility) [#90]
23
+ * Rename `data_centre` to `data_centre` (with aliases for backwards compatibility) [#90]
12
24
 
13
25
  ## [0.37.0]
14
26
 
15
- * Add `revoke_by_token` and `revoke_by_sub` to the Client [#86]
27
+ * Add `revoke_by_token` and `revoke_by_sub` to the Client [#86]
16
28
 
17
29
  ## [0.36.1]
18
30
 
@@ -192,6 +204,9 @@
192
204
  [0.37.1]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.37.1
193
205
  [0.37.2]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.37.2
194
206
  [0.37.3]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.37.3
207
+ [0.37.4]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.37.4
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
195
210
 
196
211
  [#13]: https://github.com/cronofy/cronofy-ruby/pull/13
197
212
  [#16]: https://github.com/cronofy/cronofy-ruby/pull/16
@@ -237,3 +252,6 @@
237
252
  [#90]: https://github.com/cronofy/cronofy-ruby/pull/90
238
253
  [#91]: https://github.com/cronofy/cronofy-ruby/pull/91
239
254
  [#95]: https://github.com/cronofy/cronofy-ruby/pull/95
255
+ [#97]: https://github.com/cronofy/cronofy-ruby/pull/97
256
+ [#99]: https://github.com/cronofy/cronofy-ruby/pull/99
257
+ [#100]: https://github.com/cronofy/cronofy-ruby/pull/100
@@ -844,7 +844,7 @@ module Cronofy
844
844
 
845
845
  translate_available_periods(options[:query_periods] || options[:available_periods])
846
846
 
847
- response = post("/v1/availability", options)
847
+ response = availability_post("/v1/availability", options)
848
848
 
849
849
  parse_collections(
850
850
  response,
@@ -889,7 +889,7 @@ module Cronofy
889
889
 
890
890
  translate_available_periods(options[:query_periods] || options[:available_periods])
891
891
 
892
- response = post("/v1/sequenced_availability", options)
892
+ response = availability_post("/v1/sequenced_availability", options)
893
893
  parse_collection(Sequence, "sequences", response)
894
894
  end
895
895
 
@@ -1033,7 +1033,7 @@ module Cronofy
1033
1033
  # call
1034
1034
  # :required_duration - A hash stating the length of time the event will
1035
1035
  # last for
1036
- # :available_periods - A hash stating the available periods for the event
1036
+ # :query_periods - A hash stating the available periods for the event
1037
1037
  # :start_interval - An Integer representing the start interval
1038
1038
  # of minutes for the availability query.
1039
1039
  # :buffer - An Hash containing the buffer to apply to
@@ -1069,7 +1069,7 @@ module Cronofy
1069
1069
  # }
1070
1070
  # ],
1071
1071
  # required_duration: { minutes: 60 },
1072
- # available_periods: [{
1072
+ # query_periods: [{
1073
1073
  # start: Time.utc(2017, 1, 1, 9, 00),
1074
1074
  # end: Time.utc(2017, 1, 1, 17, 00),
1075
1075
  # }]
@@ -1110,13 +1110,66 @@ module Cronofy
1110
1110
  end
1111
1111
  end
1112
1112
 
1113
- translate_available_periods(availability[:available_periods])
1113
+ translate_available_periods(availability[:query_periods] || availability[:available_periods])
1114
1114
  body[:availability] = availability
1115
1115
 
1116
1116
  response = raw_post("/v1/real_time_scheduling", body)
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
  #
@@ -1176,7 +1229,7 @@ module Cronofy
1176
1229
  # an array of invitees to invite to or reject from
1177
1230
  # the event. Invitees are represented by a hash of
1178
1231
  # :email and :display_name (optional).
1179
- # :available_periods - A hash stating the available periods for the event
1232
+ # :query_periods - A hash stating the query periods for the event
1180
1233
  # target_calendars - An array of hashes stating into which calendars to insert the created
1181
1234
  # event
1182
1235
  # Raises Cronofy::CredentialsMissingError if no credentials available.
@@ -1194,7 +1247,8 @@ module Cronofy
1194
1247
 
1195
1248
  if availability = args[:availability]
1196
1249
  availability[:sequence] = map_availability_sequence(availability[:sequence])
1197
- translate_available_periods(availability[:available_periods]) if availability[:available_periods]
1250
+ periods = availability[:query_periods] || availability[:available_periods]
1251
+ translate_available_periods(periods) if periods
1198
1252
  end
1199
1253
 
1200
1254
  body[:availability] = availability
@@ -1748,8 +1802,10 @@ module Cronofy
1748
1802
  hash[:required_duration] = map_availability_required_duration(value)
1749
1803
  end
1750
1804
 
1751
- if sequence_item[:available_periods]
1752
- translate_available_periods(sequence_item[:available_periods])
1805
+ periods = sequence_item[:query_periods] || sequence_item[:available_periods]
1806
+
1807
+ if periods
1808
+ translate_available_periods(periods)
1753
1809
  end
1754
1810
 
1755
1811
  if value = sequence_item[:start_interval]
@@ -1811,6 +1867,17 @@ module Cronofy
1811
1867
  wrapped_request { @auth.api_client.request(:post, url, json_request_args(body)) }
1812
1868
  end
1813
1869
 
1870
+ # Availability Query could originally be authenticated via an access_token
1871
+ # Whilst it should be authed via an API key now, we try access_token first
1872
+ # for backward compatibility
1873
+ def availability_post(url, body)
1874
+ if @auth.access_token
1875
+ post(url, body)
1876
+ else
1877
+ wrapped_request { api_key!.post(url, json_request_args(body)) }
1878
+ end
1879
+ end
1880
+
1814
1881
  def wrapped_request
1815
1882
  yield
1816
1883
  rescue OAuth2::Error => e
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.3".freeze
2
+ VERSION = "0.37.6".freeze
3
3
  end
@@ -1257,6 +1257,17 @@ describe Cronofy::Client do
1257
1257
  let(:request_url) { 'https://api.cronofy.com/v1/availability' }
1258
1258
  let(:request_headers) { json_request_headers }
1259
1259
 
1260
+ let(:client_id) { 'example_id' }
1261
+ let(:client_secret) { 'example_secret' }
1262
+ let(:token) { client_secret }
1263
+
1264
+ let(:client) do
1265
+ Cronofy::Client.new(
1266
+ client_id: client_id,
1267
+ client_secret: client_secret,
1268
+ )
1269
+ end
1270
+
1260
1271
  let(:request_body) do
1261
1272
  {
1262
1273
  "participants" => [
@@ -1770,6 +1781,87 @@ describe Cronofy::Client do
1770
1781
  it_behaves_like 'a Cronofy request'
1771
1782
  it_behaves_like 'a Cronofy request with mapped return value'
1772
1783
  end
1784
+
1785
+ context "when trying to auth with only an access_token, as originally implemented" do
1786
+ let(:access_token) { "access_token_123"}
1787
+ let(:client) { Cronofy::Client.new(access_token: access_token) }
1788
+ let(:request_headers) do
1789
+ {
1790
+ "Authorization" => "Bearer #{access_token}",
1791
+ "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
1792
+ "Content-Type" => "application/json; charset=utf-8",
1793
+ }
1794
+ end
1795
+
1796
+ let(:participants) do
1797
+ { members: %w{acc_567236000909002 acc_678347111010113} }
1798
+ end
1799
+
1800
+ let(:required_duration) { 60 }
1801
+
1802
+ let(:available_periods) do
1803
+ [
1804
+ { start: Time.parse("2017-01-03T09:00:00Z"), end: Time.parse("2017-01-03T18:00:00Z") },
1805
+ { start: Time.parse("2017-01-04T09:00:00Z"), end: Time.parse("2017-01-04T18:00:00Z") },
1806
+ ]
1807
+ end
1808
+
1809
+ it_behaves_like 'a Cronofy request'
1810
+ it_behaves_like 'a Cronofy request with mapped return value'
1811
+ end
1812
+
1813
+ context "when trying to auth with both a client_secret and access_token" do
1814
+ let(:access_token) { "access_token_123" }
1815
+ let(:client_secret) { "client_secret_456" }
1816
+ let(:client) { Cronofy::Client.new(access_token: access_token, client_secret: client_secret) }
1817
+ let(:request_headers) do
1818
+ {
1819
+ "Authorization" => "Bearer #{access_token}",
1820
+ "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
1821
+ "Content-Type" => "application/json; charset=utf-8",
1822
+ }
1823
+ end
1824
+
1825
+ let(:participants) do
1826
+ { members: %w{acc_567236000909002 acc_678347111010113} }
1827
+ end
1828
+
1829
+ let(:required_duration) { 60 }
1830
+
1831
+ let(:available_periods) do
1832
+ [
1833
+ { start: Time.parse("2017-01-03T09:00:00Z"), end: Time.parse("2017-01-03T18:00:00Z") },
1834
+ { start: Time.parse("2017-01-04T09:00:00Z"), end: Time.parse("2017-01-04T18:00:00Z") },
1835
+ ]
1836
+ end
1837
+
1838
+ describe "it prefers the access_token for backward compatibility" do
1839
+ it_behaves_like 'a Cronofy request'
1840
+ it_behaves_like 'a Cronofy request with mapped return value'
1841
+ end
1842
+ end
1843
+
1844
+ context "when trying to auth without a client_secret or access_token" do
1845
+ let(:client) { Cronofy::Client.new }
1846
+
1847
+ let(:participants) do
1848
+ { members: %w{acc_567236000909002 acc_678347111010113} }
1849
+ end
1850
+
1851
+ let(:required_duration) { 60 }
1852
+
1853
+ let(:available_periods) do
1854
+ [
1855
+ { start: Time.parse("2017-01-03T09:00:00Z"), end: Time.parse("2017-01-03T18:00:00Z") },
1856
+ { start: Time.parse("2017-01-04T09:00:00Z"), end: Time.parse("2017-01-04T18:00:00Z") },
1857
+ ]
1858
+ end
1859
+
1860
+
1861
+ it "raises an API Key error" do
1862
+ expect{ subject }.to raise_error(Cronofy::CredentialsMissingError)
1863
+ end
1864
+ end
1773
1865
  end
1774
1866
  end
1775
1867
 
@@ -1779,6 +1871,17 @@ describe Cronofy::Client do
1779
1871
  let(:request_url) { 'https://api.cronofy.com/v1/sequenced_availability' }
1780
1872
  let(:request_headers) { json_request_headers }
1781
1873
 
1874
+ let(:client_id) { 'example_id' }
1875
+ let(:client_secret) { 'example_secret' }
1876
+ let(:token) { client_secret }
1877
+
1878
+ let(:client) do
1879
+ Cronofy::Client.new(
1880
+ client_id: client_id,
1881
+ client_secret: client_secret,
1882
+ )
1883
+ end
1884
+
1782
1885
  let(:request_body) do
1783
1886
  {
1784
1887
  "sequence" => [
@@ -1937,6 +2040,45 @@ describe Cronofy::Client do
1937
2040
  it_behaves_like 'a Cronofy request'
1938
2041
  it_behaves_like 'a Cronofy request with mapped return value'
1939
2042
  end
2043
+
2044
+ context "when trying to auth with access_token only" do
2045
+ let(:access_token) { "access_token_123"}
2046
+ let(:client) { Cronofy::Client.new(access_token: access_token) }
2047
+ let(:request_headers) do
2048
+ {
2049
+ "Authorization" => "Bearer #{access_token}",
2050
+ "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
2051
+ "Content-Type" => "application/json; charset=utf-8",
2052
+ }
2053
+ end
2054
+
2055
+ it_behaves_like 'a Cronofy request'
2056
+ it_behaves_like 'a Cronofy request with mapped return value'
2057
+ end
2058
+
2059
+ context "when trying to auth with both access_token and client_secret provided" do
2060
+ let(:client_id) { 'example_id' }
2061
+ let(:client_secret) { 'example_secret' }
2062
+ let(:access_token) { "access_token_123"}
2063
+
2064
+ let(:client) do
2065
+ Cronofy::Client.new(
2066
+ client_id: client_id,
2067
+ client_secret: client_secret,
2068
+ access_token: access_token,
2069
+ )
2070
+ end
2071
+ let(:request_headers) do
2072
+ {
2073
+ "Authorization" => "Bearer #{access_token}",
2074
+ "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
2075
+ "Content-Type" => "application/json; charset=utf-8",
2076
+ }
2077
+ end
2078
+
2079
+ it_behaves_like 'a Cronofy request'
2080
+ it_behaves_like 'a Cronofy request with mapped return value'
2081
+ end
1940
2082
  end
1941
2083
  end
1942
2084
 
@@ -2048,25 +2190,8 @@ describe Cronofy::Client do
2048
2190
  end
2049
2191
 
2050
2192
  describe "Real time scheduling" do
2051
- let(:request_url) { "https://api.cronofy.com/v1/real_time_scheduling" }
2052
- let(:url) { URI("https://example.com") }
2053
- let(:method) { :post }
2054
-
2055
- let(:request_headers) do
2056
- {
2057
- "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
2058
- "Content-Type" => "application/json; charset=utf-8",
2059
- }
2060
- end
2061
-
2062
- let(:location) { { :description => "Board room" } }
2063
- let(:transparency) { nil }
2064
2193
  let(:client_id) { 'example_id' }
2065
2194
  let(:client_secret) { 'example_secret' }
2066
- let(:scope) { 'read_events delete_events' }
2067
- let(:state) { 'example_state' }
2068
- let(:redirect_uri) { 'http://example.com/redirect' }
2069
-
2070
2195
  let(:client) do
2071
2196
  Cronofy::Client.new(
2072
2197
  client_id: client_id,
@@ -2074,6 +2199,9 @@ describe Cronofy::Client do
2074
2199
  )
2075
2200
  end
2076
2201
 
2202
+ let(:url) { URI("https://example.com") }
2203
+ let(:location) { { :description => "Board room" } }
2204
+ let(:transparency) { nil }
2077
2205
  let(:event) do
2078
2206
  {
2079
2207
  :event_id => "qTtZdczOccgaPncGJaCiLg",
@@ -2090,115 +2218,253 @@ describe Cronofy::Client do
2090
2218
  }
2091
2219
  end
2092
2220
 
2093
- let(:oauth_body) do
2221
+ let(:real_time_scheduling_status_response) do
2094
2222
  {
2095
- scope: scope,
2096
- redirect_uri: redirect_uri,
2097
- 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
+ }
2098
2229
  }
2099
2230
  end
2100
2231
 
2101
- let(:target_calendars) do
2102
- [
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
2103
2238
  {
2104
- sub: "acc_567236000909002",
2105
- calendar_id: "cal_n23kjnwrw2_jsdfjksn234",
2239
+ "User-Agent" => "Cronofy Ruby #{::Cronofy::VERSION}",
2240
+ "Content-Type" => "application/json; charset=utf-8",
2106
2241
  }
2107
- ]
2108
- end
2242
+ end
2109
2243
 
2110
- let(:availability) do
2111
- {
2112
- 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
+ [
2113
2258
  {
2114
- members: [{
2115
- sub: "acc_567236000909002",
2116
- calendar_ids: ["cal_n23kjnwrw2_jsdfjksn234"]
2117
- }],
2118
- 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 },
2119
2285
  }
2120
- ],
2121
- required_duration: { minutes: 60 },
2122
- available_periods: [{
2123
- start: Time.utc(2017, 1, 1, 9, 00),
2124
- end: Time.utc(2017, 1, 1, 17, 00),
2125
- }],
2126
- start_interval: { minutes: 60 },
2127
- buffer: {
2128
- before: { minutes: 30 },
2129
- after: { minutes: 45 },
2130
2286
  }
2131
- }
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
2132
2365
  end
2133
2366
 
2134
- let(:mapped_availability) do
2135
- {
2136
- 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
2137
2391
  {
2138
- members: [{
2139
- sub: "acc_567236000909002",
2140
- calendar_ids: ["cal_n23kjnwrw2_jsdfjksn234"]
2141
- }],
2142
- required: 'all'
2392
+ id: 'example_id'
2143
2393
  }
2144
- ],
2145
- required_duration: { minutes: 60 },
2146
- start_interval: { minutes: 60 },
2147
- buffer: {
2148
- before: { minutes: 30 },
2149
- after: { minutes: 45 },
2150
- },
2151
- available_periods: [{
2152
- start: "2017-01-01T09:00:00Z",
2153
- end: "2017-01-01T17:00:00Z",
2154
- }]
2155
- }
2156
- end
2394
+ end
2157
2395
 
2158
- let(:args) do
2159
- {
2160
- oauth: oauth_body,
2161
- event: event,
2162
- target_calendars: target_calendars,
2163
- availability: availability,
2164
- }
2165
- end
2396
+ it_behaves_like 'a Cronofy request'
2397
+ it_behaves_like 'a Cronofy request with mapped return value'
2398
+ end
2166
2399
 
2167
- let(:request_body) do
2168
- {
2169
- client_id: client_id,
2170
- client_secret: client_secret,
2171
- oauth: oauth_body,
2172
- event: {
2173
- :event_id => "qTtZdczOccgaPncGJaCiLg",
2174
- :summary => "Board meeting",
2175
- :description => "Discuss plans for the next quarter.",
2176
- :url => url.to_s,
2177
- :location => location,
2178
- :transparency => transparency,
2179
- :reminders => [
2180
- { :minutes => 60 },
2181
- { :minutes => 0 },
2182
- { :minutes => 10 },
2183
- ],
2184
- },
2185
- target_calendars: target_calendars,
2186
- availability: mapped_availability,
2187
- }
2188
- end
2189
- let(:correct_response_code) { 202 }
2190
- let(:correct_response_body) do
2191
- {
2192
- oauth_url: "http://www.example.com/oauth?token=example"
2193
- }
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
2407
+
2408
+ it_behaves_like 'a Cronofy request'
2409
+ it_behaves_like 'a Cronofy request with mapped return value'
2410
+ end
2411
+
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
2194
2418
  end
2195
2419
 
2196
- subject { client.real_time_scheduling(args) }
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) }
2197
2452
 
2198
- context 'when start/end are Times' do
2199
2453
  it_behaves_like 'a Cronofy request'
2200
- end
2454
+ it_behaves_like 'a Cronofy request with mapped return value'
2201
2455
 
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
2466
+ end
2467
+ end
2202
2468
  end
2203
2469
 
2204
2470
  describe "Real time sequencing" do
@@ -2387,6 +2653,21 @@ describe Cronofy::Client do
2387
2653
  it_behaves_like 'a Cronofy request'
2388
2654
  end
2389
2655
 
2656
+ context 'when passing query periods' do
2657
+ it_behaves_like 'a Cronofy request'
2658
+
2659
+ before do
2660
+ availability[:query_periods] = availability.delete(:available_periods)
2661
+ availability[:sequence].each do |sequence|
2662
+ sequence[:query_periods] = sequence.delete(:available_periods)
2663
+ end
2664
+
2665
+ mapped_availability[:query_periods] = mapped_availability.delete(:available_periods)
2666
+ mapped_availability[:sequence].each do |sequence|
2667
+ sequence[:query_periods] = sequence.delete(:available_periods)
2668
+ end
2669
+ end
2670
+ end
2390
2671
  end
2391
2672
 
2392
2673
  describe "specifying data_centre" do
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cronofy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.37.3
4
+ version: 0.37.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergii Paryzhskyi
8
8
  - Garry Shutler
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-07-02 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
@@ -141,7 +141,7 @@ homepage: https://github.com/cronofy/cronofy-ruby
141
141
  licenses:
142
142
  - MIT
143
143
  metadata: {}
144
- post_install_message:
144
+ post_install_message:
145
145
  rdoc_options: []
146
146
  require_paths:
147
147
  - lib
@@ -156,8 +156,8 @@ 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.20
160
- signing_key:
159
+ rubygems_version: 3.3.8
160
+ signing_key:
161
161
  specification_version: 4
162
162
  summary: Cronofy - the scheduling platform for business
163
163
  test_files: