ruby_aem 3.17.0 → 4.1.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.
Files changed (35) hide show
  1. checksums.yaml +5 -5
  2. data/conf/gem.yaml +2 -1
  3. data/conf/spec.yaml +105 -80
  4. data/lib/ruby_aem/client.rb +6 -8
  5. data/lib/ruby_aem/error.rb +6 -1
  6. data/lib/ruby_aem/handlers/file.rb +1 -1
  7. data/lib/ruby_aem/handlers/html.rb +3 -1
  8. data/lib/ruby_aem/handlers/json.rb +3 -3
  9. data/lib/ruby_aem/handlers/simple.rb +1 -1
  10. data/lib/ruby_aem/handlers/xml.rb +1 -1
  11. data/lib/ruby_aem/resources/aem.rb +5 -6
  12. data/lib/ruby_aem/resources/aem_configmgr.rb +3 -4
  13. data/lib/ruby_aem/resources/authorizable_keystore.rb +2 -3
  14. data/lib/ruby_aem/resources/bundle.rb +1 -1
  15. data/lib/ruby_aem/resources/certificate.rb +4 -0
  16. data/lib/ruby_aem/resources/certificate_chain.rb +1 -1
  17. data/lib/ruby_aem/resources/config_property.rb +1 -1
  18. data/lib/ruby_aem/resources/flush_agent.rb +3 -1
  19. data/lib/ruby_aem/resources/group.rb +1 -1
  20. data/lib/ruby_aem/resources/node.rb +1 -1
  21. data/lib/ruby_aem/resources/outbox_replication_agent.rb +1 -1
  22. data/lib/ruby_aem/resources/package.rb +10 -9
  23. data/lib/ruby_aem/resources/path.rb +1 -1
  24. data/lib/ruby_aem/resources/replication_agent.rb +1 -1
  25. data/lib/ruby_aem/resources/repository.rb +1 -1
  26. data/lib/ruby_aem/resources/reverse_replication_agent.rb +1 -1
  27. data/lib/ruby_aem/resources/saml.rb +1 -1
  28. data/lib/ruby_aem/resources/ssl.rb +1 -2
  29. data/lib/ruby_aem/resources/truststore.rb +3 -1
  30. data/lib/ruby_aem/resources/user.rb +1 -1
  31. data/lib/ruby_aem/response.rb +2 -4
  32. data/lib/ruby_aem/result.rb +2 -3
  33. data/lib/ruby_aem/swagger.rb +3 -3
  34. data/lib/ruby_aem.rb +11 -7
  35. metadata +16 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8b67651bb5d91c7c47fbf2c7e72ca001e1284a2d
4
- data.tar.gz: d01102a6a5a9c5c9093a5f79dd8cd60e4719a30f
2
+ SHA256:
3
+ metadata.gz: 364f15252d0e15d5109deb5162c2e68a064436f754fda9839ad0bee7d69a4dbd
4
+ data.tar.gz: bb40460d828167a6b44b3bb921a3cc79621ca063f498a180a9a5b269cc243031
5
5
  SHA512:
6
- metadata.gz: f7b35781431f722c4ce220d7a265fc6f3252bde5b5bffdf4540aa6c1e249134298a2cdc5f363a67013075fe36728c6e863c5ec801e2f12878d0cfafe8fbc4a53
7
- data.tar.gz: 524b7b9cee894e54bf1cac8d4264fec340483470f0fa48531492fe99a52ef50ed34adb95f84c5d865e918a791657c6196f63cb5682c5e5b7b5b24cc21f92f7e5
6
+ metadata.gz: dfab4aa798fbed53e5fe4b705324db3ba770b1d7b673b6e9508c59d7481fe59d2493ea22c49b6dfd17959062491d6c7693722de6f333f382ac38f833f0847d0c
7
+ data.tar.gz: 394b101dad00b640afb6d207ef0d5e6666b72fc9f1c891b30a2fccdd2a39603b41e3011640eaf3cc872ed61becd07c4dc9eb5f2e9b7f80a1a31e3dcdbf5fbc1e
data/conf/gem.yaml CHANGED
@@ -1 +1,2 @@
1
- version: 3.17.0
1
+ ---
2
+ version: 4.1.0
data/conf/spec.yaml CHANGED
@@ -1,3 +1,13 @@
1
+ ---
2
+ # Message, path and URI templates are kept on one line, wrapping them risks
3
+ # changing their parsed values.
4
+ # yamllint disable rule:line-length
5
+
6
+ # Optional param names must match the opts keys of the swagger_aem / swagger_aem_osgi
7
+ # generated *_api.rb methods exactly, unknown keys are silently ignored by the client.
8
+ # e.g. swagger_aem 4.0.0 renamed jcrcontent_* to jcr_content_*, reppassword to rep_password,
9
+ # and operation to _operation (plain :operation is overwritten by the generated client).
10
+ # test/unit/spec_yaml_spec.rb checks these names against the installed gems.
1
11
  aem:
2
12
  actions:
3
13
  get_login_page:
@@ -16,7 +26,7 @@ aem:
16
26
  required:
17
27
  optional:
18
28
  tags: '%{tags}'
19
- combinetagsor: '%{combine_tags_or}'
29
+ combine_tags_or: '%{combine_tags_or}'
20
30
  responses:
21
31
  200:
22
32
  handler: json_aem_health_check
@@ -102,7 +112,7 @@ authorizablekeystore:
102
112
  optional:
103
113
  new_password: '%{password}'
104
114
  re_password: '%{password}'
105
- operation: createStore
115
+ _operation: createStore
106
116
  responses:
107
117
  200:
108
118
  handler: simple
@@ -164,7 +174,7 @@ authorizablekeystore:
164
174
  path: '%{intermediate_path}/%{authorizable_id}/keystore'
165
175
  name: store.p12
166
176
  optional:
167
- operation: delete
177
+ _operation: delete
168
178
  responses:
169
179
  200:
170
180
  handler: simple
@@ -348,28 +358,29 @@ flushagent:
348
358
  runmode: '%{run_mode}'
349
359
  name: '%{name}'
350
360
  optional:
351
- jcrprimary_type: cq:Page
352
- jcrcontent_cqname: '%{name}'
353
- jcrcontent_jcrtitle: '%{title}'
354
- jcrcontent_jcrdescription: '%{description}'
355
- jcrcontent_slingresource_type: cq/replication/components/agent
356
- jcrcontent_transport_uri: '%{dest_base_url}/dispatcher/invalidate.cache'
357
- jcrcontent_log_level: '%{log_level}'
358
- jcrcontent_no_versioning: true
359
- jcrcontent_protocol_http_headers:
361
+ jcr_primary_type: cq:Page
362
+ jcr_content_cq_name: '%{name}'
363
+ jcr_content_jcr_title: '%{title}'
364
+ jcr_content_jcr_description: '%{description}'
365
+ jcr_content_sling_resource_type: cq/replication/components/agent
366
+ jcr_content_transport_uri: '%{dest_base_url}/dispatcher/invalidate.cache'
367
+ jcr_content_alias_update: '%{alias_update}'
368
+ jcr_content_log_level: '%{log_level}'
369
+ jcr_content_no_versioning: true
370
+ jcr_content_protocol_http_headers:
360
371
  - 'CQ-Action:{action}'
361
372
  - 'CQ-Handle:{path}'
362
373
  - 'CQ-Path:{path}'
363
- jcrcontent_protocol_http_headers_type_hint: String[]
364
- jcrcontent_protocol_http_method: GET
365
- jcrcontent_retry_delay: '%{retry_delay}'
366
- jcrcontent_serialization_type: flush
367
- jcrcontent_jcrmixin_types: cq:ReplicationStatus
368
- jcrcontent_trigger_receive: true
369
- jcrcontent_trigger_specific: true
370
- jcrcontent_cqtemplate: /libs/cq/replication/templates/agent
371
- jcrcontent_enabled: true
372
- jcrcontent_ssl: '%{ssl}'
374
+ jcr_content_protocol_http_headers_type_hint: String[]
375
+ jcr_content_protocol_http_method: GET
376
+ jcr_content_retry_delay: '%{retry_delay}'
377
+ jcr_content_serialization_type: flush
378
+ jcr_content_jcr_mixin_types: cq:ReplicationStatus
379
+ jcr_content_trigger_receive: true
380
+ jcr_content_trigger_specific: true
381
+ jcr_content_cq_template: /libs/cq/replication/templates/agent
382
+ jcr_content_enabled: true
383
+ jcr_content_ssl: '%{ssl}'
373
384
  responses:
374
385
  200:
375
386
  handler: simple
@@ -385,7 +396,7 @@ flushagent:
385
396
  runmode: '%{run_mode}'
386
397
  name: '%{name}'
387
398
  optional:
388
- operation: delete
399
+ _operation: delete
389
400
  responses:
390
401
  200:
391
402
  handler: simple
@@ -521,7 +532,7 @@ node:
521
532
  params:
522
533
  required:
523
534
  path: '%{path}'
524
- jcrprimary_type: '%{type}'
535
+ jcr_primary_type: '%{type}'
525
536
  name: '%{name}'
526
537
  responses:
527
538
  201:
@@ -535,7 +546,7 @@ node:
535
546
  path: '%{path}'
536
547
  name: '%{name}'
537
548
  optional:
538
- operation: delete
549
+ _operation: delete
539
550
  responses:
540
551
  200:
541
552
  handler: simple
@@ -573,7 +584,7 @@ package:
573
584
  group_name: '%{group_name}'
574
585
  package_name: '%{package_name}'
575
586
  package_version: '%{package_version}'
576
- charset: utf-8
587
+ _charset_: utf-8
577
588
  responses:
578
589
  200:
579
590
  handler: json_package_service
@@ -590,7 +601,7 @@ package:
590
601
  path: '/etc/packages/%{group_name}/%{package_name}-%{package_version}.zip'
591
602
  optional:
592
603
  filter: '%{filter}'
593
- charset: utf-8
604
+ _charset_: utf-8
594
605
  responses:
595
606
  200:
596
607
  handler: json_package_service
@@ -719,7 +730,7 @@ path:
719
730
  path: '%{path}'
720
731
  name: '%{name}'
721
732
  optional:
722
- operation: delete
733
+ _operation: delete
723
734
  responses:
724
735
  200:
725
736
  handler: simple
@@ -747,6 +758,8 @@ configproperty:
747
758
  201:
748
759
  handler: simple
749
760
  message: 'Set %{config_node_name} config %{type} property %{name}=%{value}'
761
+ # TODO: remove the create<config> actions below, unused since a170df6 (2020, #31) when
762
+ # ConfigProperty#create switched to the generic create action (postConfigProperty)
750
763
  createapachefelixjettybasedhttpservice:
751
764
  api: sling
752
765
  operation: postConfigApacheFelixJettyBasedHttpService
@@ -764,7 +777,10 @@ configproperty:
764
777
  - org_apache_felix_https_keystore_key_password
765
778
  - org_apache_felix_https_keystore_key_password_type_hint
766
779
  - org_apache_felix_https_truststore
767
- - org_apache_felix_https_truststore_key_type_hint
780
+ # org.apache.felix.https.truststore@TypeHint, read as org_apache_felix_https_truststore_type_hint:
781
+ # https://github.com/shinesolutions/swagger-aem/blob/4.0.0/specification/swagger-aem.yml#L257
782
+ # https://github.com/shinesolutions/swagger-aem/blob/4.0.0/clients/ruby/generated/lib/swagger_aem/api/sling_api.rb#L1457
783
+ - org_apache_felix_https_truststore_type_hint
768
784
  - org_apache_felix_https_truststore_password
769
785
  - org_apache_felix_https_truststore_password_type_hint
770
786
  - org_apache_felix_https_clientcertificate
@@ -773,8 +789,11 @@ configproperty:
773
789
  - org_apache_felix_https_enable_type_hint
774
790
  - org_osgi_service_http_port_secure
775
791
  - org_osgi_service_http_port_secure_type_hint
776
- - json_maximumresults
777
- - json_maximumresults_type_hint
792
+ # json_maximumresults and json_maximumresults_type_hint were removed from this action:
793
+ # postConfigApacheFelixJettyBasedHttpService has no json.maximumresults parameter in any
794
+ # swagger_aem release (1.0.0 to 4.0.0), so they were never sent. They were copied from the
795
+ # Sling GET servlet action in ruby_aem a626c5d (2017) and stay on createapacheslinggetservlet.
796
+ # https://github.com/shinesolutions/swagger-aem/blob/4.0.0/specification/swagger-aem.yml#L198-L306
778
797
  responses:
779
798
  200:
780
799
  handler: simple
@@ -788,6 +807,9 @@ configproperty:
788
807
  params:
789
808
  required:
790
809
  optional:
810
+ # json.maximumresults and json.maximumresults@TypeHint:
811
+ # https://github.com/shinesolutions/swagger-aem/blob/4.0.0/specification/swagger-aem.yml#L311-L320
812
+ # https://github.com/shinesolutions/swagger-aem/blob/4.0.0/clients/ruby/generated/lib/swagger_aem/api/sling_api.rb#L1683-L1684
791
813
  - json_maximumresults
792
814
  - json_maximumresults_type_hint
793
815
  - enable_html
@@ -919,7 +941,10 @@ configproperty:
919
941
  - name_id_format
920
942
  - name_id_format_type_hint
921
943
  - digest_method
922
- - digestMethod_type_hint
944
+ # digestMethod@TypeHint, read as digest_method_type_hint:
945
+ # https://github.com/shinesolutions/swagger-aem/blob/4.0.0/specification/swagger-aem.yml#L1517
946
+ # https://github.com/shinesolutions/swagger-aem/blob/4.0.0/clients/ruby/generated/lib/swagger_aem/api/sling_api.rb#L1350
947
+ - digest_method_type_hint
923
948
  - signature_method
924
949
  - signature_method_type_hint
925
950
  - user_intermediate_path
@@ -970,20 +995,20 @@ replicationagent:
970
995
  runmode: '%{run_mode}'
971
996
  name: '%{name}'
972
997
  optional:
973
- jcrprimary_type: cq:Page
974
- jcrcontent_cqname: '%{name}'
975
- jcrcontent_jcrtitle: '%{title}'
976
- jcrcontent_jcrdescription: '%{description}'
977
- jcrcontent_slingresource_type: cq/replication/components/agent
978
- jcrcontent_serialization_type: durbo
979
- jcrcontent_transport_uri: '%{dest_base_url}/bin/receive?sling:authRequestLogin=1'
980
- jcrcontent_transport_user: '%{transport_user}'
981
- jcrcontent_transport_password: '%{transport_password}'
982
- jcrcontent_log_level: '%{log_level}'
983
- jcrcontent_retry_delay: '%{retry_delay}'
984
- jcrcontent_cqtemplate: /libs/cq/replication/templates/agent
985
- jcrcontent_enabled: true
986
- jcrcontent_ssl: '%{ssl}'
998
+ jcr_primary_type: cq:Page
999
+ jcr_content_cq_name: '%{name}'
1000
+ jcr_content_jcr_title: '%{title}'
1001
+ jcr_content_jcr_description: '%{description}'
1002
+ jcr_content_sling_resource_type: cq/replication/components/agent
1003
+ jcr_content_serialization_type: durbo
1004
+ jcr_content_transport_uri: '%{dest_base_url}/bin/receive?sling:authRequestLogin=1'
1005
+ jcr_content_transport_user: '%{transport_user}'
1006
+ jcr_content_transport_password: '%{transport_password}'
1007
+ jcr_content_log_level: '%{log_level}'
1008
+ jcr_content_retry_delay: '%{retry_delay}'
1009
+ jcr_content_cq_template: /libs/cq/replication/templates/agent
1010
+ jcr_content_enabled: true
1011
+ jcr_content_ssl: '%{ssl}'
987
1012
  responses:
988
1013
  200:
989
1014
  handler: simple
@@ -999,7 +1024,7 @@ replicationagent:
999
1024
  runmode: '%{run_mode}'
1000
1025
  name: '%{name}'
1001
1026
  optional:
1002
- operation: delete
1027
+ _operation: delete
1003
1028
  responses:
1004
1029
  200:
1005
1030
  handler: simple
@@ -1041,20 +1066,20 @@ outboxreplicationagent:
1041
1066
  runmode: '%{run_mode}'
1042
1067
  name: '%{name}'
1043
1068
  optional:
1044
- jcrprimary_type: cq:Page
1045
- jcrcontent_cqname: '%{name}'
1046
- jcrcontent_jcrtitle: '%{title}'
1047
- jcrcontent_jcrdescription: '%{description}'
1048
- jcrcontent_slingresource_type: cq/replication/components/agent
1049
- jcrcontent_transport_uri: repo://var/replication/outbox
1050
- jcrcontent_no_versioning: true
1051
- jcrcontent_log_level: '%{log_level}'
1052
- jcrcontent_cqtemplate: /libs/cq/replication/templates/agent
1053
- jcrcontent_enabled: true
1054
- jcrcontent_trigger_distribute: true
1055
- jcrcontent_trigger_modified: false
1056
- jcrcontent_trigger_specific: true
1057
- jcrcontent_user_id: '%{user_id}'
1069
+ jcr_primary_type: cq:Page
1070
+ jcr_content_cq_name: '%{name}'
1071
+ jcr_content_jcr_title: '%{title}'
1072
+ jcr_content_jcr_description: '%{description}'
1073
+ jcr_content_sling_resource_type: cq/replication/components/agent
1074
+ jcr_content_transport_uri: repo://var/replication/outbox
1075
+ jcr_content_no_versioning: true
1076
+ jcr_content_log_level: '%{log_level}'
1077
+ jcr_content_cq_template: /libs/cq/replication/templates/agent
1078
+ jcr_content_enabled: true
1079
+ jcr_content_trigger_distribute: true
1080
+ jcr_content_trigger_modified: false
1081
+ jcr_content_trigger_specific: true
1082
+ jcr_content_user_id: '%{user_id}'
1058
1083
  responses:
1059
1084
  200:
1060
1085
  handler: simple
@@ -1070,7 +1095,7 @@ outboxreplicationagent:
1070
1095
  runmode: '%{run_mode}'
1071
1096
  name: '%{name}'
1072
1097
  optional:
1073
- operation: delete
1098
+ _operation: delete
1074
1099
  responses:
1075
1100
  200:
1076
1101
  handler: simple
@@ -1112,20 +1137,20 @@ reversereplicationagent:
1112
1137
  runmode: '%{run_mode}'
1113
1138
  name: '%{name}'
1114
1139
  optional:
1115
- jcrprimary_type: cq:Page
1116
- jcrcontent_cqname: '%{name}'
1117
- jcrcontent_jcrtitle: '%{title}'
1118
- jcrcontent_jcrdescription: '%{description}'
1119
- jcrcontent_slingresource_type: cq/replication/components/agent
1120
- jcrcontent_serialization_type: durbo
1121
- jcrcontent_transport_uri: '%{dest_base_url}/bin/receive?sling:authRequestLogin=1'
1122
- jcrcontent_transport_user: '%{transport_user}'
1123
- jcrcontent_transport_password: '%{transport_password}'
1124
- jcrcontent_log_level: '%{log_level}'
1125
- jcrcontent_retry_delay: '%{retry_delay}'
1126
- jcrcontent_cqtemplate: /libs/cq/replication/templates/agent
1127
- jcrcontent_enabled: true
1128
- jcrcontent_reverse_replication: true
1140
+ jcr_primary_type: cq:Page
1141
+ jcr_content_cq_name: '%{name}'
1142
+ jcr_content_jcr_title: '%{title}'
1143
+ jcr_content_jcr_description: '%{description}'
1144
+ jcr_content_sling_resource_type: cq/replication/components/agent
1145
+ jcr_content_serialization_type: durbo
1146
+ jcr_content_transport_uri: '%{dest_base_url}/bin/receive?sling:authRequestLogin=1'
1147
+ jcr_content_transport_user: '%{transport_user}'
1148
+ jcr_content_transport_password: '%{transport_password}'
1149
+ jcr_content_log_level: '%{log_level}'
1150
+ jcr_content_retry_delay: '%{retry_delay}'
1151
+ jcr_content_cq_template: /libs/cq/replication/templates/agent
1152
+ jcr_content_enabled: true
1153
+ jcr_content_reverse_replication: true
1129
1154
  responses:
1130
1155
  200:
1131
1156
  handler: simple
@@ -1141,7 +1166,7 @@ reversereplicationagent:
1141
1166
  runmode: '%{run_mode}'
1142
1167
  name: '%{name}'
1143
1168
  optional:
1144
- operation: delete
1169
+ _operation: delete
1145
1170
  responses:
1146
1171
  200:
1147
1172
  handler: simple
@@ -1269,7 +1294,7 @@ truststore:
1269
1294
  optional:
1270
1295
  new_password: '%{password}'
1271
1296
  re_password: '%{password}'
1272
- operation: createStore
1297
+ _operation: createStore
1273
1298
  responses:
1274
1299
  200:
1275
1300
  handler: simple
@@ -1307,7 +1332,7 @@ truststore:
1307
1332
  path: etc/truststore
1308
1333
  name: truststore.p12
1309
1334
  optional:
1310
- operation: delete
1335
+ _operation: delete
1311
1336
  responses:
1312
1337
  200:
1313
1338
  handler: simple
@@ -1354,7 +1379,7 @@ user:
1354
1379
  intermediate_path: '%{path}'
1355
1380
  optional:
1356
1381
  create_user: 'true'
1357
- reppassword: '%{password}'
1382
+ rep_password: '%{password}'
1358
1383
  responses:
1359
1384
  201:
1360
1385
  handler: html_authorizable_id
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -73,9 +73,7 @@ module RubyAem
73
73
  method = RubyAem::Swagger.operation_to_method(operation)
74
74
  data, status_code, headers = api.send("#{method}_with_http_info", *params)
75
75
  response = RubyAem::Response.new(status_code, data, headers)
76
- rescue SwaggerAemClient::ApiError => e
77
- response = RubyAem::Response.new(e.code, e.response_body, e.response_headers)
78
- rescue SwaggerAemOsgiClient::ApiError => e
76
+ rescue SwaggerAemClient::ApiError, SwaggerAemOsgiClient::ApiError => e
79
77
  response = RubyAem::Response.new(e.code, e.response_body, e.response_headers)
80
78
  end
81
79
  handle(response, responses_spec, call_params)
@@ -94,7 +92,7 @@ module RubyAem
94
92
  params[-1][key.to_sym] = call_params[key.to_sym] if call_params.key? key.to_sym
95
93
  # if value is provided in optional param spec,
96
94
  # then apply variable interpolation the same way as required param
97
- elsif value.class == String
95
+ elsif value.instance_of?(String)
98
96
  case value
99
97
  when '__FILE_PACKAGE__'
100
98
  file_path = "#{call_params[:file_path]}/#{call_params[:package_name]}-#{call_params[:package_version]}.zip"
@@ -106,12 +104,12 @@ module RubyAem
106
104
  file_path = call_params[:file_path_private_key]
107
105
  end
108
106
 
109
- if !file_path.nil?
107
+ if file_path.nil?
108
+ params[-1][key.to_sym] = value % call_params
109
+ else
110
110
  File.open(file_path.to_s, 'r') { |file|
111
111
  params[-1][key.to_sym] = file
112
112
  }
113
- else
114
- params[-1][key.to_sym] = value % call_params
115
113
  end
116
114
  else
117
115
  params[-1][key.to_sym] = value
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -18,6 +18,11 @@ module RubyAem
18
18
  class Error < StandardError
19
19
  attr_accessor :result
20
20
 
21
+ # Initialise an error.
22
+ #
23
+ # @param message error message
24
+ # @param result RubyAem::Result
25
+ # @return new RubyAem::Error instance
21
26
  def initialize(message, result)
22
27
  super(message)
23
28
  self.result = result
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@ module RubyAem
23
23
  # dependency.
24
24
  module Handlers
25
25
  include REXML
26
+
26
27
  # Parse authorizable ID from response body data.
27
28
  # This is used to get the authorizable ID of a newly created user/group.
28
29
  #
@@ -108,6 +109,7 @@ module RubyAem
108
109
  # @param html HTML response body string
109
110
  # @param regex Ruby regular expression, all regex matches will be replaced
110
111
  # @param replacement all existence of the regex will be replaced with this string
112
+ # @return sanitised HTML string
111
113
  def self._sanitise_html(html, regex, replacement)
112
114
  if regex.match?(html)
113
115
  html.gsub!(regex, replacement)
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -144,8 +144,8 @@ module RubyAem
144
144
  result
145
145
  end
146
146
 
147
- # Authorizable keystore payload handler, checks for the existence of certificate within
148
- # AEM Truststore, identified by cert_alias call parameter.
147
+ # Authorizable keystore payload handler, checks for the existence of certificate chain within
148
+ # AEM Authorizable Keystore, identified by private_key_alias call parameter.
149
149
  #
150
150
  # @param response HTTP response containing status_code, body, and headers
151
151
  # @param response_spec response specification as configured in conf/spec.yaml
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -28,8 +28,7 @@ module RubyAem
28
28
  # @return new RubyAem::Resources::Aem instance
29
29
  def initialize(client)
30
30
  @client = client
31
- @call_params = {
32
- }
31
+ @call_params = {}
33
32
  end
34
33
 
35
34
  # Retrieve AEM login page.
@@ -96,11 +95,11 @@ module RubyAem
96
95
  with_retries(max_tries: opts[:_retries][:max_tries], base_sleep_seconds: opts[:_retries][:base_sleep_seconds], max_sleep_seconds: opts[:_retries][:max_sleep_seconds]) { |retries_count|
97
96
  begin
98
97
  result = get_login_page
99
- if result.response.body !~ /QUICKSTART_HOMEPAGE/
98
+ if result.response.body =~ /QUICKSTART_HOMEPAGE/
99
+ puts format('Retrieve login page attempt #%<retries_count>d: %<message>s and ready', retries_count: retries_count, message: result.message)
100
+ else
100
101
  puts format('Retrieve login page attempt #%<retries_count>d: %<message>s but not ready yet', retries_count: retries_count, message: result.message)
101
102
  raise StandardError.new(result.message)
102
- else
103
- puts format('Retrieve login page attempt #%<retries_count>d: %<message>s and ready', retries_count: retries_count, message: result.message)
104
103
  end
105
104
  rescue RubyAem::Error => e
106
105
  puts format('Retrieve login page attempt #%<retries_count>d: %<message>s', retries_count: retries_count, message: e.message)
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -23,11 +23,10 @@ module RubyAem
23
23
  # Initialise an AEM instance.
24
24
  #
25
25
  # @param client RubyAem::Client
26
- # @return new RubyAem::Resources::Aem instance
26
+ # @return new RubyAem::Resources::AemConfigMgr instance
27
27
  def initialize(client)
28
28
  @client = client
29
- @call_params = {
30
- }
29
+ @call_params = {}
31
30
  end
32
31
 
33
32
  # Connect to AEM /system/console/configMgr to collect
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@ module RubyAem
26
26
  # @param client RubyAem::Client
27
27
  # @param intermediate_path AEM User home path
28
28
  # @param authorizable_id AEM User id
29
- # @return new RubyAem::Resources::AuhtorizableKeystore instance
29
+ # @return new RubyAem::Resources::AuthorizableKeystore instance
30
30
  def initialize(client, intermediate_path, authorizable_id)
31
31
  @client = client
32
32
  @call_params = {
@@ -50,7 +50,6 @@ module RubyAem
50
50
  #
51
51
  # @param old_password Current password for the authorizable keystore
52
52
  # @param new_password New password for the authorizable keystore
53
-
54
53
  # @return RubyAem::Result
55
54
  def change_password(old_password, new_password)
56
55
  @call_params[:old_password] = old_password
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -105,6 +105,10 @@ module RubyAem
105
105
  @client.call(self.class, __callee__.to_s, @call_params)
106
106
  end
107
107
 
108
+ # Retrieve the alias of the certificate from AEM Truststore info,
109
+ # the certificate is identified by its serial number.
110
+ #
111
+ # @return the certificate's alias, nil if the certificate does not exist in AEM Truststore
108
112
  def _get_alias
109
113
  truststore_info = @truststore.info.data
110
114
  cert_alias = nil
@@ -28,7 +28,7 @@ module RubyAem
28
28
  # @param private_key_alias Alias of the private key associated to this certificate chain
29
29
  # @param keystore_intermediate_path AEM User home path
30
30
  # @param keystore_authorizable_id AEM User id
31
- # @return new RubyAem::Resources::AuhtorizableKeystore instance
31
+ # @return new RubyAem::Resources::CertificateChain instance
32
32
  def initialize(client, private_key_alias, keystore_intermediate_path, keystore_authorizable_id)
33
33
  @client = client
34
34
  @truststore = RubyAem::Resources::Truststore.new(client)
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -37,6 +37,7 @@ module RubyAem
37
37
  # @param description flush agent description
38
38
  # @param dest_base_url base URL of the agent target destination, e.g. http://somedispatcher:8080
39
39
  # @param opts optional parameters:
40
+ # - alias_update: true, false, default is false
40
41
  # - log_level: error, info, debug, default is error
41
42
  # - retry_delay: in milliseconds, default is 30_000
42
43
  # @return RubyAem::Result
@@ -45,6 +46,7 @@ module RubyAem
45
46
  description,
46
47
  dest_base_url,
47
48
  opts = {
49
+ alias_update: false,
48
50
  log_level: 'error',
49
51
  retry_delay: 30_000
50
52
  }
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@ module RubyAem
20
20
  # Package class contains API calls related to managing an AEM package.
21
21
  class Package
22
22
  include REXML
23
+
23
24
  # Initialise a package.
24
25
  # Package name and version will then be used to construct the package file in the filesystem.
25
26
  # E.g. package name 'somepackage' with version '1.2.3' will translate to somepackage-1.2.3.zip in the filesystem.
@@ -185,12 +186,12 @@ module RubyAem
185
186
  packages = list_all.data
186
187
  package = XPath.first(packages, "//packages/package[group=\"#{@call_params[:group_name]}\" and name=\"#{@call_params[:package_name]}\" and version=\"#{@call_params[:package_version]}\"]")
187
188
 
188
- if package.to_s != ''
189
- message = "Package #{@call_params[:group_name]}/#{@call_params[:package_name]}-#{@call_params[:package_version]} exists"
190
- exists = true
191
- else
189
+ if package.to_s == ''
192
190
  message = "Package #{@call_params[:group_name]}/#{@call_params[:package_name]}-#{@call_params[:package_version]} does not exist"
193
191
  exists = false
192
+ else
193
+ message = "Package #{@call_params[:group_name]}/#{@call_params[:package_name]}-#{@call_params[:package_version]} exists"
194
+ exists = true
194
195
  end
195
196
  result = RubyAem::Result.new(message, nil)
196
197
  result.data = exists
@@ -224,12 +225,12 @@ module RubyAem
224
225
  package = XPath.first(packages, "//packages/package[group=\"#{@call_params[:group_name]}\" and name=\"#{@call_params[:package_name]}\" and version=\"#{@call_params[:package_version]}\"]")
225
226
  last_unpacked_by = XPath.first(package, 'lastUnpackedBy') if package
226
227
 
227
- if !['', '<lastUnpackedBy/>', '<lastUnpackedBy>null</lastUnpackedBy>'].include? last_unpacked_by.to_s
228
- message = "Package #{@call_params[:group_name]}/#{@call_params[:package_name]}-#{@call_params[:package_version]} is installed"
229
- is_installed = true
230
- else
228
+ if ['', '<lastUnpackedBy/>', '<lastUnpackedBy>null</lastUnpackedBy>'].include? last_unpacked_by.to_s
231
229
  message = "Package #{@call_params[:group_name]}/#{@call_params[:package_name]}-#{@call_params[:package_version]} is not installed"
232
230
  is_installed = false
231
+ else
232
+ message = "Package #{@call_params[:group_name]}/#{@call_params[:package_name]}-#{@call_params[:package_version]} is installed"
233
+ is_installed = true
233
234
  end
234
235
  result = RubyAem::Result.new(message, nil)
235
236
  result.data = is_installed
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -24,8 +24,7 @@ module RubyAem
24
24
  # @return new RubyAem::Resources::Ssl instance
25
25
  def initialize(client)
26
26
  @client = client
27
- @call_params = {
28
- }
27
+ @call_params = {}
29
28
  end
30
29
 
31
30
  # Disable SSL
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -43,6 +43,8 @@ module RubyAem
43
43
  # and convert it to PKCS12 Truststore object.
44
44
  #
45
45
  # @param file_path path to Truststore file
46
+ # @param password Password for AEM Truststore
47
+ # @return OpenSSL::PKCS12 Truststore object
46
48
  def read(file_path, password)
47
49
  truststore_raw = File.read file_path
48
50
  OpenSSL::PKCS12.new(truststore_raw, password)
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -15,9 +15,7 @@
15
15
  module RubyAem
16
16
  # Response wraps HTTP response data returned by swagger_aem.
17
17
  class Response
18
- attr_accessor :status_code
19
- attr_accessor :body
20
- attr_accessor :headers
18
+ attr_accessor :status_code, :body, :headers
21
19
 
22
20
  # Initialise a result.
23
21
  #
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -21,9 +21,8 @@ module RubyAem
21
21
  # e.g. is_* and exists method provide result with boolean data.
22
22
  # Some API calls result doesn't contain any data.
23
23
  class Result
24
- attr_accessor :message
24
+ attr_accessor :message, :data
25
25
  attr_reader :response
26
- attr_accessor :data
27
26
 
28
27
  # Initialise a result.
29
28
  #
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@ module RubyAem
22
22
  # @return swagger_aem method name
23
23
  def self.operation_to_method(operation)
24
24
  operation.gsub(/[A-Z]/) { |char|
25
- '_' + char.downcase
25
+ "_#{char.downcase}"
26
26
  }
27
27
  end
28
28
 
@@ -54,7 +54,7 @@ module RubyAem
54
54
  # @param config_node_name the name of the node for a given config
55
55
  # @return config name
56
56
  def self.config_node_name_to_config_name(config_node_name)
57
- case config_node_name
57
+ case config_node_name # rubocop:disable Style/HashLikeCase
58
58
  when 'org.apache.felix.http'
59
59
  'Apache Felix Jetty Based HTTP Service'
60
60
  when 'org.apache.sling.servlets.get.DefaultGetServlet'
data/lib/ruby_aem.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2021 Shine Solutions Group
1
+ # Copyright 2016-2026 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -98,6 +98,8 @@ module RubyAem
98
98
  end
99
99
 
100
100
  # Set default configuration values and handle numeric/boolean String values
101
+ #
102
+ # @param conf configuration hash, the hash will be modified with the sanitised values
101
103
  def sanitise_conf(conf)
102
104
  conf[:username] ||= 'admin'
103
105
  conf[:password] ||= 'admin'
@@ -122,7 +124,7 @@ module RubyAem
122
124
 
123
125
  # Create an AEM ConfigMgr instance.
124
126
  #
125
- # @return new RubyAem::Resources::Aem instance
127
+ # @return new RubyAem::Resources::AemConfigMgr instance
126
128
  def aem_configmgr
127
129
  RubyAem::Resources::AemConfigMgr.new(@client)
128
130
  end
@@ -143,12 +145,12 @@ module RubyAem
143
145
  RubyAem::Resources::Certificate.new(@client, serial_number)
144
146
  end
145
147
 
146
- # # Create a certificate chain instance.
147
- # #
148
+ # Create a certificate chain instance.
149
+ #
148
150
  # @param private_key_alias Alias of the private key associated to this certificate chain
149
151
  # @param keystore_intermediate_path AEM User home path
150
152
  # @param keystore_authorizable_id AEM User id
151
- # # @return new RubyAem::Resources::CertificateChain instance
153
+ # @return new RubyAem::Resources::CertificateChain instance
152
154
  def certificate_chain(private_key_alias, keystore_intermediate_path, keystore_authorizable_id)
153
155
  RubyAem::Resources::CertificateChain.new(@client, private_key_alias, keystore_intermediate_path, keystore_authorizable_id)
154
156
  end
@@ -183,7 +185,9 @@ module RubyAem
183
185
 
184
186
  # Create a Keystore instance for given authorizable id.
185
187
  #
186
- # @return new RubyAem::Resources::AuhtorizableKeystore instance
188
+ # @param intermediate_path AEM User home path
189
+ # @param authorizable_id AEM User id
190
+ # @return new RubyAem::Resources::AuthorizableKeystore instance
187
191
  def authorizable_keystore(intermediate_path, authorizable_id)
188
192
  RubyAem::Resources::AuthorizableKeystore.new(@client, intermediate_path, authorizable_id)
189
193
  end
@@ -258,7 +262,7 @@ module RubyAem
258
262
 
259
263
  # Create a SSL instance.
260
264
  #
261
- # @return new RubyAem::Resources::Saml instance
265
+ # @return new RubyAem::Resources::Ssl instance
262
266
  def ssl
263
267
  RubyAem::Resources::Ssl.new(@client)
264
268
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_aem
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.17.0
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shine Solutions
8
8
  - Cliffano Subagio
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-07-29 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: retries
@@ -26,61 +25,47 @@ dependencies:
26
25
  - !ruby/object:Gem::Version
27
26
  version: 0.0.5
28
27
  - !ruby/object:Gem::Dependency
29
- name: swagger_aem
28
+ name: rexml
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - '='
33
32
  - !ruby/object:Gem::Version
34
- version: 3.8.0
33
+ version: 3.4.4
35
34
  type: :runtime
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
38
  - - '='
40
39
  - !ruby/object:Gem::Version
41
- version: 3.8.0
40
+ version: 3.4.4
42
41
  - !ruby/object:Gem::Dependency
43
- name: swagger_aem_osgi
42
+ name: swagger_aem
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
45
  - - '='
47
46
  - !ruby/object:Gem::Version
48
- version: 1.0.0
47
+ version: 4.0.0
49
48
  type: :runtime
50
49
  prerelease: false
51
50
  version_requirements: !ruby/object:Gem::Requirement
52
51
  requirements:
53
52
  - - '='
54
53
  - !ruby/object:Gem::Version
55
- version: 1.0.0
54
+ version: 4.0.0
56
55
  - !ruby/object:Gem::Dependency
57
- name: rspec
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - '='
61
- - !ruby/object:Gem::Version
62
- version: 3.8.0
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - '='
68
- - !ruby/object:Gem::Version
69
- version: 3.8.0
70
- - !ruby/object:Gem::Dependency
71
- name: yard
56
+ name: swagger_aem_osgi
72
57
  requirement: !ruby/object:Gem::Requirement
73
58
  requirements:
74
59
  - - '='
75
60
  - !ruby/object:Gem::Version
76
- version: 0.9.19
77
- type: :development
61
+ version: 2.0.0
62
+ type: :runtime
78
63
  prerelease: false
79
64
  version_requirements: !ruby/object:Gem::Requirement
80
65
  requirements:
81
66
  - - '='
82
67
  - !ruby/object:Gem::Version
83
- version: 0.9.19
68
+ version: 2.0.0
84
69
  description: ruby_aem is a Ruby client for Adobe Experience Manager (AEM) API, written
85
70
  on top of swagger_aem
86
71
  email:
@@ -126,8 +111,8 @@ files:
126
111
  homepage: https://github.com/shinesolutions/ruby_aem
127
112
  licenses:
128
113
  - Apache-2.0
129
- metadata: {}
130
- post_install_message:
114
+ metadata:
115
+ rubygems_mfa_required: 'true'
131
116
  rdoc_options: []
132
117
  require_paths:
133
118
  - lib
@@ -135,16 +120,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
135
120
  requirements:
136
121
  - - ">="
137
122
  - !ruby/object:Gem::Version
138
- version: '2.3'
123
+ version: '4.0'
139
124
  required_rubygems_version: !ruby/object:Gem::Requirement
140
125
  requirements:
141
126
  - - ">="
142
127
  - !ruby/object:Gem::Version
143
128
  version: '0'
144
129
  requirements: []
145
- rubyforge_project:
146
- rubygems_version: 2.6.14.4
147
- signing_key:
130
+ rubygems_version: 4.0.20
148
131
  specification_version: 4
149
132
  summary: AEM API Ruby client
150
133
  test_files: []