aws-sdk-iotdeviceadvisor 1.12.0 → 1.15.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: 72d9a6cc833e7d77172bc727c255575dacce344df214d29fd2174a232a74302b
4
- data.tar.gz: 021137f9586008a42d431425b10234e44a4a3aadd6de19c8a22b9c99a788afd1
3
+ metadata.gz: 4a73bf3016a43cb45d06a7376d4d24ed18458433b8b50198246fe1fb2b3d17d4
4
+ data.tar.gz: a4a2569281846017c70970dfe540d8f793d547f8e56a65428ae215bed7d35c95
5
5
  SHA512:
6
- metadata.gz: a20dd28be5ba24bad9e56c009bf3492569a8958e11026976e6626aba57d2e42dc77b6e230d4327222a6c0eb5f09efc4a250f24064d94d04dd6bdd85a62d75aed
7
- data.tar.gz: 67371aa13fe78c9f4e8af84c7fa37b21522c631a74d6d2bbeeada99754b26d96eeba4ed08b36930c51c2d15dd59dde04e9561020e38063c0deba7ddfcb1b70c9
6
+ metadata.gz: 29f5602ddcd58f8c207b13b228d63adb0c376bcbba00c2bdb51928bd42cda3c53671340388455e19fbfd697beece2f9bb68eafb95de0526db831a97ace022c8b
7
+ data.tar.gz: 598cbfafb62b71084093dd18ae2edab10c7df3bc2e757555135036eaf0b9439a2921c89422ef83f8e8eebd7a7cc5795313fa40fd375c52b85c17311f90a9e00b
data/CHANGELOG.md CHANGED
@@ -1,6 +1,21 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.15.0 (2022-07-22)
5
+ ------------------
6
+
7
+ * Feature - Added new service feature (Early access only) - Long Duration Test, where customers can test the IoT device to observe how it behaves when the device is in operation for longer period.
8
+
9
+ 1.14.0 (2022-02-24)
10
+ ------------------
11
+
12
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
13
+
14
+ 1.13.0 (2022-02-03)
15
+ ------------------
16
+
17
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
18
+
4
19
  1.12.0 (2021-12-21)
5
20
  ------------------
6
21
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.12.0
1
+ 1.15.0
@@ -27,7 +27,9 @@ require 'aws-sdk-core/plugins/client_metrics_plugin.rb'
27
27
  require 'aws-sdk-core/plugins/client_metrics_send_plugin.rb'
28
28
  require 'aws-sdk-core/plugins/transfer_encoding.rb'
29
29
  require 'aws-sdk-core/plugins/http_checksum.rb'
30
+ require 'aws-sdk-core/plugins/checksum_algorithm.rb'
30
31
  require 'aws-sdk-core/plugins/defaults_mode.rb'
32
+ require 'aws-sdk-core/plugins/recursion_detection.rb'
31
33
  require 'aws-sdk-core/plugins/signature_v4.rb'
32
34
  require 'aws-sdk-core/plugins/protocols/rest_json.rb'
33
35
 
@@ -74,7 +76,9 @@ module Aws::IoTDeviceAdvisor
74
76
  add_plugin(Aws::Plugins::ClientMetricsSendPlugin)
75
77
  add_plugin(Aws::Plugins::TransferEncoding)
76
78
  add_plugin(Aws::Plugins::HttpChecksum)
79
+ add_plugin(Aws::Plugins::ChecksumAlgorithm)
77
80
  add_plugin(Aws::Plugins::DefaultsMode)
81
+ add_plugin(Aws::Plugins::RecursionDetection)
78
82
  add_plugin(Aws::Plugins::SignatureV4)
79
83
  add_plugin(Aws::Plugins::Protocols::RestJson)
80
84
 
@@ -381,8 +385,10 @@ module Aws::IoTDeviceAdvisor
381
385
  # },
382
386
  # ],
383
387
  # intended_for_qualification: false,
388
+ # is_long_duration_test: false,
384
389
  # root_group: "RootGroup",
385
390
  # device_permission_role_arn: "AmazonResourceName",
391
+ # protocol: "MqttV3_1_1", # accepts MqttV3_1_1, MqttV5
386
392
  # },
387
393
  # tags: {
388
394
  # "String128" => "String256",
@@ -502,8 +508,10 @@ module Aws::IoTDeviceAdvisor
502
508
  # resp.suite_definition_configuration.devices[0].thing_arn #=> String
503
509
  # resp.suite_definition_configuration.devices[0].certificate_arn #=> String
504
510
  # resp.suite_definition_configuration.intended_for_qualification #=> Boolean
511
+ # resp.suite_definition_configuration.is_long_duration_test #=> Boolean
505
512
  # resp.suite_definition_configuration.root_group #=> String
506
513
  # resp.suite_definition_configuration.device_permission_role_arn #=> String
514
+ # resp.suite_definition_configuration.protocol #=> String, one of "MqttV3_1_1", "MqttV5"
507
515
  # resp.created_at #=> Time
508
516
  # resp.last_modified_at #=> Time
509
517
  # resp.tags #=> Hash
@@ -575,6 +583,12 @@ module Aws::IoTDeviceAdvisor
575
583
  # resp.test_result.groups[0].tests[0].log_url #=> String
576
584
  # resp.test_result.groups[0].tests[0].warnings #=> String
577
585
  # resp.test_result.groups[0].tests[0].failure #=> String
586
+ # resp.test_result.groups[0].tests[0].test_scenarios #=> Array
587
+ # resp.test_result.groups[0].tests[0].test_scenarios[0].test_case_scenario_id #=> String
588
+ # resp.test_result.groups[0].tests[0].test_scenarios[0].test_case_scenario_type #=> String, one of "Advanced", "Basic"
589
+ # resp.test_result.groups[0].tests[0].test_scenarios[0].status #=> String, one of "PASS", "FAIL", "CANCELED", "PENDING", "RUNNING", "STOPPING", "STOPPED", "PASS_WITH_WARNINGS", "ERROR"
590
+ # resp.test_result.groups[0].tests[0].test_scenarios[0].failure #=> String
591
+ # resp.test_result.groups[0].tests[0].test_scenarios[0].system_message #=> String
578
592
  # resp.start_time #=> Time
579
593
  # resp.end_time #=> Time
580
594
  # resp.status #=> String, one of "PASS", "FAIL", "CANCELED", "PENDING", "RUNNING", "STOPPING", "STOPPED", "PASS_WITH_WARNINGS", "ERROR"
@@ -663,6 +677,8 @@ module Aws::IoTDeviceAdvisor
663
677
  # resp.suite_definition_information_list[0].default_devices[0].thing_arn #=> String
664
678
  # resp.suite_definition_information_list[0].default_devices[0].certificate_arn #=> String
665
679
  # resp.suite_definition_information_list[0].intended_for_qualification #=> Boolean
680
+ # resp.suite_definition_information_list[0].is_long_duration_test #=> Boolean
681
+ # resp.suite_definition_information_list[0].protocol #=> String, one of "MqttV3_1_1", "MqttV5"
666
682
  # resp.suite_definition_information_list[0].created_at #=> Time
667
683
  # resp.next_token #=> String
668
684
  #
@@ -954,8 +970,10 @@ module Aws::IoTDeviceAdvisor
954
970
  # },
955
971
  # ],
956
972
  # intended_for_qualification: false,
973
+ # is_long_duration_test: false,
957
974
  # root_group: "RootGroup",
958
975
  # device_permission_role_arn: "AmazonResourceName",
976
+ # protocol: "MqttV3_1_1", # accepts MqttV3_1_1, MqttV5
959
977
  # },
960
978
  # })
961
979
  #
@@ -988,7 +1006,7 @@ module Aws::IoTDeviceAdvisor
988
1006
  params: params,
989
1007
  config: config)
990
1008
  context[:gem_name] = 'aws-sdk-iotdeviceadvisor'
991
- context[:gem_version] = '1.12.0'
1009
+ context[:gem_version] = '1.15.0'
992
1010
  Seahorse::Client::Request.new(handlers, context)
993
1011
  end
994
1012
 
@@ -37,6 +37,7 @@ module Aws::IoTDeviceAdvisor
37
37
  GroupResultList = Shapes::ListShape.new(name: 'GroupResultList')
38
38
  IntendedForQualificationBoolean = Shapes::BooleanShape.new(name: 'IntendedForQualificationBoolean')
39
39
  InternalServerException = Shapes::StructureShape.new(name: 'InternalServerException')
40
+ IsLongDurationTestBoolean = Shapes::BooleanShape.new(name: 'IsLongDurationTestBoolean')
40
41
  ListSuiteDefinitionsRequest = Shapes::StructureShape.new(name: 'ListSuiteDefinitionsRequest')
41
42
  ListSuiteDefinitionsResponse = Shapes::StructureShape.new(name: 'ListSuiteDefinitionsResponse')
42
43
  ListSuiteRunsRequest = Shapes::StructureShape.new(name: 'ListSuiteRunsRequest')
@@ -47,6 +48,7 @@ module Aws::IoTDeviceAdvisor
47
48
  MaxResults = Shapes::IntegerShape.new(name: 'MaxResults')
48
49
  Message = Shapes::StringShape.new(name: 'Message')
49
50
  ParallelRun = Shapes::BooleanShape.new(name: 'ParallelRun')
51
+ Protocol = Shapes::StringShape.new(name: 'Protocol')
50
52
  QualificationReportDownloadUrl = Shapes::StringShape.new(name: 'QualificationReportDownloadUrl')
51
53
  ResourceNotFoundException = Shapes::StructureShape.new(name: 'ResourceNotFoundException')
52
54
  RootGroup = Shapes::StringShape.new(name: 'RootGroup')
@@ -68,6 +70,7 @@ module Aws::IoTDeviceAdvisor
68
70
  SuiteRunResultCount = Shapes::IntegerShape.new(name: 'SuiteRunResultCount')
69
71
  SuiteRunStatus = Shapes::StringShape.new(name: 'SuiteRunStatus')
70
72
  SuiteRunsList = Shapes::ListShape.new(name: 'SuiteRunsList')
73
+ SystemMessage = Shapes::StringShape.new(name: 'SystemMessage')
71
74
  TagKeyList = Shapes::ListShape.new(name: 'TagKeyList')
72
75
  TagMap = Shapes::MapShape.new(name: 'TagMap')
73
76
  TagResourceRequest = Shapes::StructureShape.new(name: 'TagResourceRequest')
@@ -75,6 +78,11 @@ module Aws::IoTDeviceAdvisor
75
78
  TestCaseDefinitionName = Shapes::StringShape.new(name: 'TestCaseDefinitionName')
76
79
  TestCaseRun = Shapes::StructureShape.new(name: 'TestCaseRun')
77
80
  TestCaseRuns = Shapes::ListShape.new(name: 'TestCaseRuns')
81
+ TestCaseScenario = Shapes::StructureShape.new(name: 'TestCaseScenario')
82
+ TestCaseScenarioId = Shapes::StringShape.new(name: 'TestCaseScenarioId')
83
+ TestCaseScenarioStatus = Shapes::StringShape.new(name: 'TestCaseScenarioStatus')
84
+ TestCaseScenarioType = Shapes::StringShape.new(name: 'TestCaseScenarioType')
85
+ TestCaseScenariosList = Shapes::ListShape.new(name: 'TestCaseScenariosList')
78
86
  TestResult = Shapes::StructureShape.new(name: 'TestResult')
79
87
  Timestamp = Shapes::TimestampShape.new(name: 'Timestamp')
80
88
  Token = Shapes::StringShape.new(name: 'Token')
@@ -214,14 +222,18 @@ module Aws::IoTDeviceAdvisor
214
222
  SuiteDefinitionConfiguration.add_member(:suite_definition_name, Shapes::ShapeRef.new(shape: SuiteDefinitionName, location_name: "suiteDefinitionName"))
215
223
  SuiteDefinitionConfiguration.add_member(:devices, Shapes::ShapeRef.new(shape: DeviceUnderTestList, location_name: "devices"))
216
224
  SuiteDefinitionConfiguration.add_member(:intended_for_qualification, Shapes::ShapeRef.new(shape: IntendedForQualificationBoolean, location_name: "intendedForQualification"))
225
+ SuiteDefinitionConfiguration.add_member(:is_long_duration_test, Shapes::ShapeRef.new(shape: IsLongDurationTestBoolean, location_name: "isLongDurationTest"))
217
226
  SuiteDefinitionConfiguration.add_member(:root_group, Shapes::ShapeRef.new(shape: RootGroup, location_name: "rootGroup"))
218
227
  SuiteDefinitionConfiguration.add_member(:device_permission_role_arn, Shapes::ShapeRef.new(shape: AmazonResourceName, location_name: "devicePermissionRoleArn"))
228
+ SuiteDefinitionConfiguration.add_member(:protocol, Shapes::ShapeRef.new(shape: Protocol, location_name: "protocol"))
219
229
  SuiteDefinitionConfiguration.struct_class = Types::SuiteDefinitionConfiguration
220
230
 
221
231
  SuiteDefinitionInformation.add_member(:suite_definition_id, Shapes::ShapeRef.new(shape: UUID, location_name: "suiteDefinitionId"))
222
232
  SuiteDefinitionInformation.add_member(:suite_definition_name, Shapes::ShapeRef.new(shape: SuiteDefinitionName, location_name: "suiteDefinitionName"))
223
233
  SuiteDefinitionInformation.add_member(:default_devices, Shapes::ShapeRef.new(shape: DeviceUnderTestList, location_name: "defaultDevices"))
224
234
  SuiteDefinitionInformation.add_member(:intended_for_qualification, Shapes::ShapeRef.new(shape: IntendedForQualificationBoolean, location_name: "intendedForQualification"))
235
+ SuiteDefinitionInformation.add_member(:is_long_duration_test, Shapes::ShapeRef.new(shape: IsLongDurationTestBoolean, location_name: "isLongDurationTest"))
236
+ SuiteDefinitionInformation.add_member(:protocol, Shapes::ShapeRef.new(shape: Protocol, location_name: "protocol"))
225
237
  SuiteDefinitionInformation.add_member(:created_at, Shapes::ShapeRef.new(shape: Timestamp, location_name: "createdAt"))
226
238
  SuiteDefinitionInformation.struct_class = Types::SuiteDefinitionInformation
227
239
 
@@ -266,10 +278,20 @@ module Aws::IoTDeviceAdvisor
266
278
  TestCaseRun.add_member(:log_url, Shapes::ShapeRef.new(shape: LogUrl, location_name: "logUrl"))
267
279
  TestCaseRun.add_member(:warnings, Shapes::ShapeRef.new(shape: Warnings, location_name: "warnings"))
268
280
  TestCaseRun.add_member(:failure, Shapes::ShapeRef.new(shape: Failure, location_name: "failure"))
281
+ TestCaseRun.add_member(:test_scenarios, Shapes::ShapeRef.new(shape: TestCaseScenariosList, location_name: "testScenarios"))
269
282
  TestCaseRun.struct_class = Types::TestCaseRun
270
283
 
271
284
  TestCaseRuns.member = Shapes::ShapeRef.new(shape: TestCaseRun)
272
285
 
286
+ TestCaseScenario.add_member(:test_case_scenario_id, Shapes::ShapeRef.new(shape: TestCaseScenarioId, location_name: "testCaseScenarioId"))
287
+ TestCaseScenario.add_member(:test_case_scenario_type, Shapes::ShapeRef.new(shape: TestCaseScenarioType, location_name: "testCaseScenarioType"))
288
+ TestCaseScenario.add_member(:status, Shapes::ShapeRef.new(shape: TestCaseScenarioStatus, location_name: "status"))
289
+ TestCaseScenario.add_member(:failure, Shapes::ShapeRef.new(shape: Failure, location_name: "failure"))
290
+ TestCaseScenario.add_member(:system_message, Shapes::ShapeRef.new(shape: SystemMessage, location_name: "systemMessage"))
291
+ TestCaseScenario.struct_class = Types::TestCaseScenario
292
+
293
+ TestCaseScenariosList.member = Shapes::ShapeRef.new(shape: TestCaseScenario)
294
+
273
295
  TestResult.add_member(:groups, Shapes::ShapeRef.new(shape: GroupResultList, location_name: "groups"))
274
296
  TestResult.struct_class = Types::TestResult
275
297
 
@@ -35,8 +35,10 @@ module Aws::IoTDeviceAdvisor
35
35
  # },
36
36
  # ],
37
37
  # intended_for_qualification: false,
38
+ # is_long_duration_test: false,
38
39
  # root_group: "RootGroup",
39
40
  # device_permission_role_arn: "AmazonResourceName",
41
+ # protocol: "MqttV3_1_1", # accepts MqttV3_1_1, MqttV5
40
42
  # },
41
43
  # tags: {
42
44
  # "String128" => "String256",
@@ -616,8 +618,10 @@ module Aws::IoTDeviceAdvisor
616
618
  # },
617
619
  # ],
618
620
  # intended_for_qualification: false,
621
+ # is_long_duration_test: false,
619
622
  # root_group: "RootGroup",
620
623
  # device_permission_role_arn: "AmazonResourceName",
624
+ # protocol: "MqttV3_1_1", # accepts MqttV3_1_1, MqttV5
621
625
  # }
622
626
  #
623
627
  # @!attribute [rw] suite_definition_name
@@ -632,6 +636,10 @@ module Aws::IoTDeviceAdvisor
632
636
  # Gets the tests intended for qualification in a suite.
633
637
  # @return [Boolean]
634
638
  #
639
+ # @!attribute [rw] is_long_duration_test
640
+ # Verifies if the test suite is a long duration test.
641
+ # @return [Boolean]
642
+ #
635
643
  # @!attribute [rw] root_group
636
644
  # Gets test suite root group.
637
645
  # @return [String]
@@ -640,12 +648,18 @@ module Aws::IoTDeviceAdvisor
640
648
  # Gets the device permission ARN.
641
649
  # @return [String]
642
650
  #
651
+ # @!attribute [rw] protocol
652
+ # Gets the MQTT protocol that is configured in the suite definition.
653
+ # @return [String]
654
+ #
643
655
  class SuiteDefinitionConfiguration < Struct.new(
644
656
  :suite_definition_name,
645
657
  :devices,
646
658
  :intended_for_qualification,
659
+ :is_long_duration_test,
647
660
  :root_group,
648
- :device_permission_role_arn)
661
+ :device_permission_role_arn,
662
+ :protocol)
649
663
  SENSITIVE = []
650
664
  include Aws::Structure
651
665
  end
@@ -668,6 +682,14 @@ module Aws::IoTDeviceAdvisor
668
682
  # Specifies if the test suite is intended for qualification.
669
683
  # @return [Boolean]
670
684
  #
685
+ # @!attribute [rw] is_long_duration_test
686
+ # Verifies if the test suite is a long duration test.
687
+ # @return [Boolean]
688
+ #
689
+ # @!attribute [rw] protocol
690
+ # Gets the MQTT protocol that is configured in the suite definition.
691
+ # @return [String]
692
+ #
671
693
  # @!attribute [rw] created_at
672
694
  # Date (in Unix epoch time) when the test suite was created.
673
695
  # @return [Time]
@@ -677,6 +699,8 @@ module Aws::IoTDeviceAdvisor
677
699
  :suite_definition_name,
678
700
  :default_devices,
679
701
  :intended_for_qualification,
702
+ :is_long_duration_test,
703
+ :protocol,
680
704
  :created_at)
681
705
  SENSITIVE = []
682
706
  include Aws::Structure
@@ -863,6 +887,10 @@ module Aws::IoTDeviceAdvisor
863
887
  # Provides test case run failure result.
864
888
  # @return [String]
865
889
  #
890
+ # @!attribute [rw] test_scenarios
891
+ # Provides the test scenarios for the test case run.
892
+ # @return [Array<Types::TestCaseScenario>]
893
+ #
866
894
  class TestCaseRun < Struct.new(
867
895
  :test_case_run_id,
868
896
  :test_case_definition_id,
@@ -872,7 +900,63 @@ module Aws::IoTDeviceAdvisor
872
900
  :end_time,
873
901
  :log_url,
874
902
  :warnings,
875
- :failure)
903
+ :failure,
904
+ :test_scenarios)
905
+ SENSITIVE = []
906
+ include Aws::Structure
907
+ end
908
+
909
+ # Provides test case scenario.
910
+ #
911
+ # @!attribute [rw] test_case_scenario_id
912
+ # Provides test case scenario ID.
913
+ # @return [String]
914
+ #
915
+ # @!attribute [rw] test_case_scenario_type
916
+ # Provides test case scenario type. Type is one of the following:
917
+ #
918
+ # * Advanced
919
+ #
920
+ # * Basic
921
+ # @return [String]
922
+ #
923
+ # @!attribute [rw] status
924
+ # Provides the test case scenario status. Status is one of the
925
+ # following:
926
+ #
927
+ # * `PASS`\: Test passed.
928
+ #
929
+ # * `FAIL`\: Test failed.
930
+ #
931
+ # * `PENDING`\: Test has not started running but is scheduled.
932
+ #
933
+ # * `RUNNING`\: Test is running.
934
+ #
935
+ # * `STOPPING`\: Test is performing cleanup steps. You will see this
936
+ # status only if you stop a suite run.
937
+ #
938
+ # * `STOPPED` Test is stopped. You will see this status only if you
939
+ # stop a suite run.
940
+ #
941
+ # * `PASS_WITH_WARNINGS`\: Test passed with warnings.
942
+ #
943
+ # * `ERORR`\: Test faced an error when running due to an internal
944
+ # issue.
945
+ # @return [String]
946
+ #
947
+ # @!attribute [rw] failure
948
+ # Provides test case scenario failure result.
949
+ # @return [String]
950
+ #
951
+ # @!attribute [rw] system_message
952
+ # @return [String]
953
+ #
954
+ class TestCaseScenario < Struct.new(
955
+ :test_case_scenario_id,
956
+ :test_case_scenario_type,
957
+ :status,
958
+ :failure,
959
+ :system_message)
876
960
  SENSITIVE = []
877
961
  include Aws::Structure
878
962
  end
@@ -928,8 +1012,10 @@ module Aws::IoTDeviceAdvisor
928
1012
  # },
929
1013
  # ],
930
1014
  # intended_for_qualification: false,
1015
+ # is_long_duration_test: false,
931
1016
  # root_group: "RootGroup",
932
1017
  # device_permission_role_arn: "AmazonResourceName",
1018
+ # protocol: "MqttV3_1_1", # accepts MqttV3_1_1, MqttV5
933
1019
  # },
934
1020
  # }
935
1021
  #
@@ -48,6 +48,6 @@ require_relative 'aws-sdk-iotdeviceadvisor/customizations'
48
48
  # @!group service
49
49
  module Aws::IoTDeviceAdvisor
50
50
 
51
- GEM_VERSION = '1.12.0'
51
+ GEM_VERSION = '1.15.0'
52
52
 
53
53
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk-iotdeviceadvisor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-21 00:00:00.000000000 Z
11
+ date: 2022-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '3'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 3.125.0
22
+ version: 3.127.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '3'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 3.125.0
32
+ version: 3.127.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: aws-sigv4
35
35
  requirement: !ruby/object:Gem::Requirement