cronofy 0.31.1 → 0.31.2
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/cronofy/client.rb +10 -1
- data/lib/cronofy/response_parser.rb +8 -0
- data/lib/cronofy/types.rb +7 -0
- data/lib/cronofy/version.rb +1 -1
- data/spec/lib/cronofy/client_spec.rb +79 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ac0a6d45f99b6fc43669a1c8bfae0ae9c040d05ca200c9638cf535fcff3ee71
|
4
|
+
data.tar.gz: 44ce008bc883118eda39dc75a486834083e71bfb37ff2716629db2d9019578ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9e8ff68fbfa8a4fe9582a259dd885f3d8cd155ec455fccbdab736acc3fdfae655ce2ec17eeb81a954774a6c311172c28d0be24721179ef408b08bb060b3fe9d
|
7
|
+
data.tar.gz: 3f0632f1a75377bcbcca43fbe03557c91dff7492ed1122688bd160e7c5227c0620c0b8765f46cbac54fe53aafb8fd6d2b224fbb07beee41d7d67d3358e7a3b73
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## [0.31.2]
|
2
|
+
|
3
|
+
* Support parsing new Availability response formats [#73]
|
4
|
+
|
1
5
|
## [0.31.1]
|
2
6
|
|
3
7
|
* No Authorization header for Real-Time Scheduling and Real-Time Sequencing [#72]
|
@@ -137,6 +141,7 @@
|
|
137
141
|
[0.30.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.30.0
|
138
142
|
[0.31.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.31.0
|
139
143
|
[0.31.1]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.31.1
|
144
|
+
[0.31.2]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.31.2
|
140
145
|
|
141
146
|
[#13]: https://github.com/cronofy/cronofy-ruby/pull/13
|
142
147
|
[#16]: https://github.com/cronofy/cronofy-ruby/pull/16
|
@@ -171,3 +176,4 @@
|
|
171
176
|
[#62]: https://github.com/cronofy/cronofy-ruby/pull/62
|
172
177
|
[#69]: https://github.com/cronofy/cronofy-ruby/pull/69
|
173
178
|
[#72]: https://github.com/cronofy/cronofy-ruby/pull/72
|
179
|
+
[#73]: https://github.com/cronofy/cronofy-ruby/pull/73
|
data/lib/cronofy/client.rb
CHANGED
@@ -826,7 +826,12 @@ module Cronofy
|
|
826
826
|
translate_available_periods(options[:available_periods])
|
827
827
|
|
828
828
|
response = post("/v1/availability", options)
|
829
|
-
|
829
|
+
|
830
|
+
parse_collections(
|
831
|
+
response,
|
832
|
+
available_periods: AvailablePeriod,
|
833
|
+
available_slots: AvailableSlot,
|
834
|
+
)
|
830
835
|
end
|
831
836
|
|
832
837
|
# Public: Performs an sequenced availability query.
|
@@ -1553,6 +1558,10 @@ module Cronofy
|
|
1553
1558
|
ResponseParser.new(response).parse_collection(type, attr)
|
1554
1559
|
end
|
1555
1560
|
|
1561
|
+
def parse_collections(response, mappings)
|
1562
|
+
ResponseParser.new(response).parse_collections(mappings)
|
1563
|
+
end
|
1564
|
+
|
1556
1565
|
def parse_json(type, attr = nil, response)
|
1557
1566
|
ResponseParser.new(response).parse_json(type, attr)
|
1558
1567
|
end
|
@@ -7,6 +7,14 @@ module Cronofy
|
|
7
7
|
@response = response
|
8
8
|
end
|
9
9
|
|
10
|
+
def parse_collections(attribute_collection_types)
|
11
|
+
attribute_collection_types.each do |attribute, type|
|
12
|
+
return parse_collection(type, attribute.to_s) if json_hash[attribute.to_s]
|
13
|
+
end
|
14
|
+
|
15
|
+
raise "No mapped attributes for response - #{json_hash.keys}"
|
16
|
+
end
|
17
|
+
|
10
18
|
def parse_collection(type, attribute = nil)
|
11
19
|
target = parsing_target(attribute)
|
12
20
|
target.map { |item| type.new(item) }
|
data/lib/cronofy/types.rb
CHANGED
@@ -378,6 +378,13 @@ module Cronofy
|
|
378
378
|
coerce_key :participants, ParticipantEnumerable
|
379
379
|
end
|
380
380
|
|
381
|
+
class AvailableSlot < CronofyMash
|
382
|
+
coerce_key :start, EventTime
|
383
|
+
coerce_key :end, EventTime
|
384
|
+
|
385
|
+
coerce_key :participants, ParticipantEnumerable
|
386
|
+
end
|
387
|
+
|
381
388
|
class ElementToken < CronofyMash
|
382
389
|
end
|
383
390
|
end
|
data/lib/cronofy/version.rb
CHANGED
@@ -1281,10 +1281,13 @@ describe Cronofy::Client do
|
|
1281
1281
|
}
|
1282
1282
|
end
|
1283
1283
|
|
1284
|
+
let(:availability_response_attribute) { "available_periods" }
|
1285
|
+
let(:availability_response_class) { Cronofy::AvailablePeriod }
|
1286
|
+
|
1284
1287
|
let(:correct_response_code) { 200 }
|
1285
1288
|
let(:correct_response_body) do
|
1286
1289
|
{
|
1287
|
-
|
1290
|
+
availability_response_attribute => [
|
1288
1291
|
{
|
1289
1292
|
"start" => "2017-01-03T09:00:00Z",
|
1290
1293
|
"end" => "2017-01-03T11:00:00Z",
|
@@ -1314,11 +1317,85 @@ describe Cronofy::Client do
|
|
1314
1317
|
end
|
1315
1318
|
|
1316
1319
|
let(:correct_mapped_result) do
|
1317
|
-
correct_response_body[
|
1320
|
+
correct_response_body[availability_response_attribute].map { |ap| availability_response_class.new(ap) }
|
1318
1321
|
end
|
1319
1322
|
|
1320
1323
|
subject { client.availability(participants: participants, required_duration: required_duration, available_periods: available_periods) }
|
1321
1324
|
|
1325
|
+
context "response_format" do
|
1326
|
+
%i{
|
1327
|
+
slots
|
1328
|
+
overlapping_slots
|
1329
|
+
}.each do |slot_format|
|
1330
|
+
context slot_format do
|
1331
|
+
let(:response_format) { slot_format.to_s }
|
1332
|
+
let(:availability_response_attribute) { "available_slots" }
|
1333
|
+
let(:availability_response_class) { Cronofy::AvailableSlot }
|
1334
|
+
|
1335
|
+
let(:required_duration) do
|
1336
|
+
{ minutes: 60 }
|
1337
|
+
end
|
1338
|
+
|
1339
|
+
let(:available_periods) do
|
1340
|
+
[
|
1341
|
+
{ start: Time.parse("2017-01-03T09:00:00Z"), end: Time.parse("2017-01-03T18:00:00Z") },
|
1342
|
+
{ start: Time.parse("2017-01-04T09:00:00Z"), end: Time.parse("2017-01-04T18:00:00Z") },
|
1343
|
+
]
|
1344
|
+
end
|
1345
|
+
|
1346
|
+
let(:participants) do
|
1347
|
+
[
|
1348
|
+
{
|
1349
|
+
members: [
|
1350
|
+
{ sub: "acc_567236000909002" },
|
1351
|
+
{ sub: "acc_678347111010113" },
|
1352
|
+
],
|
1353
|
+
required: :all,
|
1354
|
+
}
|
1355
|
+
]
|
1356
|
+
end
|
1357
|
+
|
1358
|
+
let(:request_body) do
|
1359
|
+
{
|
1360
|
+
"participants" => [
|
1361
|
+
{
|
1362
|
+
"members" => [
|
1363
|
+
{ "sub" => "acc_567236000909002" },
|
1364
|
+
{ "sub" => "acc_678347111010113" }
|
1365
|
+
],
|
1366
|
+
"required" => "all"
|
1367
|
+
}
|
1368
|
+
],
|
1369
|
+
"required_duration" => { "minutes" => 60 },
|
1370
|
+
"available_periods" => [
|
1371
|
+
{
|
1372
|
+
"start" => "2017-01-03T09:00:00Z",
|
1373
|
+
"end" => "2017-01-03T18:00:00Z"
|
1374
|
+
},
|
1375
|
+
{
|
1376
|
+
"start" => "2017-01-04T09:00:00Z",
|
1377
|
+
"end" => "2017-01-04T18:00:00Z"
|
1378
|
+
}
|
1379
|
+
],
|
1380
|
+
"response_format" => response_format,
|
1381
|
+
}
|
1382
|
+
end
|
1383
|
+
|
1384
|
+
subject do
|
1385
|
+
client.availability(
|
1386
|
+
participants: participants,
|
1387
|
+
required_duration: required_duration,
|
1388
|
+
available_periods: available_periods,
|
1389
|
+
response_format: slot_format,
|
1390
|
+
)
|
1391
|
+
end
|
1392
|
+
|
1393
|
+
it_behaves_like 'a Cronofy request'
|
1394
|
+
it_behaves_like 'a Cronofy request with mapped return value'
|
1395
|
+
end
|
1396
|
+
end
|
1397
|
+
end
|
1398
|
+
|
1322
1399
|
context "fully specified" do
|
1323
1400
|
let(:participants) do
|
1324
1401
|
[
|
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.
|
4
|
+
version: 0.31.2
|
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-
|
12
|
+
date: 2019-06-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: oauth2
|