harbor2_legacy_client 0.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 (375) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +7 -0
  3. data/README.md +365 -0
  4. data/Rakefile +8 -0
  5. data/docs/Action.md +8 -0
  6. data/docs/Action1.md +8 -0
  7. data/docs/AdminJobSchedule.md +9 -0
  8. data/docs/AdminJobScheduleObj.md +9 -0
  9. data/docs/BadRequestFormatedError.md +8 -0
  10. data/docs/BoolConfigItem.md +9 -0
  11. data/docs/CVEAllowlist.md +11 -0
  12. data/docs/CVEAllowlistItem.md +8 -0
  13. data/docs/ChartAPIError.md +8 -0
  14. data/docs/ChartMetadata.md +18 -0
  15. data/docs/ChartRepositoryApi.md +191 -0
  16. data/docs/ChartVersion.md +23 -0
  17. data/docs/ComponentHealthStatus.md +10 -0
  18. data/docs/ComponentOverviewEntry.md +9 -0
  19. data/docs/Configurations.md +42 -0
  20. data/docs/ConfigurationsResponse.md +41 -0
  21. data/docs/ConfigurationsScanAllPolicy.md +9 -0
  22. data/docs/ConfigurationsScanAllPolicyParameter.md +8 -0
  23. data/docs/ConflictFormatedError.md +8 -0
  24. data/docs/EmailServerSetting.md +13 -0
  25. data/docs/Endpoint.md +9 -0
  26. data/docs/EventType.md +7 -0
  27. data/docs/FilterStyle.md +10 -0
  28. data/docs/ForbiddenChartAPIError.md +8 -0
  29. data/docs/GCResult.md +16 -0
  30. data/docs/GeneralInfo.md +16 -0
  31. data/docs/InputSecret.md +8 -0
  32. data/docs/InsufficientStorageChartAPIError.md +8 -0
  33. data/docs/IntegerConfigItem.md +9 -0
  34. data/docs/InternalChartAPIError.md +8 -0
  35. data/docs/IsDefault.md +8 -0
  36. data/docs/Label.md +16 -0
  37. data/docs/LabelApi.md +191 -0
  38. data/docs/Labels.md +7 -0
  39. data/docs/LdapConf.md +15 -0
  40. data/docs/LdapFailedImportUsers.md +9 -0
  41. data/docs/LdapImportUsers.md +8 -0
  42. data/docs/LdapUsers.md +10 -0
  43. data/docs/Namespace.md +9 -0
  44. data/docs/NotFoundChartAPIError.md +8 -0
  45. data/docs/NotifyType.md +7 -0
  46. data/docs/OverallHealthStatus.md +9 -0
  47. data/docs/Password.md +9 -0
  48. data/docs/Permission.md +9 -0
  49. data/docs/PingRegistry.md +14 -0
  50. data/docs/ProductsApi.md +6382 -0
  51. data/docs/Project.md +22 -0
  52. data/docs/ProjectMember.md +10 -0
  53. data/docs/ProjectMemberEntity.md +14 -0
  54. data/docs/ProjectMetadata.md +13 -0
  55. data/docs/ProjectReq.md +13 -0
  56. data/docs/ProjectScanner.md +8 -0
  57. data/docs/ProjectSummary.md +15 -0
  58. data/docs/ProjectSummaryQuota.md +9 -0
  59. data/docs/PutRegistry.md +14 -0
  60. data/docs/Quota.md +13 -0
  61. data/docs/QuotaApi.md +118 -0
  62. data/docs/QuotaRefObject.md +7 -0
  63. data/docs/QuotaSwitcher.md +8 -0
  64. data/docs/QuotaUpdateReq.md +8 -0
  65. data/docs/Registry.md +17 -0
  66. data/docs/RegistryCredential.md +10 -0
  67. data/docs/RegistryInfo.md +11 -0
  68. data/docs/ReplicationExecution.md +19 -0
  69. data/docs/ReplicationFilter.md +9 -0
  70. data/docs/ReplicationPolicy.md +20 -0
  71. data/docs/ReplicationTask.md +16 -0
  72. data/docs/ReplicationTrigger.md +9 -0
  73. data/docs/ResourceList.md +7 -0
  74. data/docs/RetentionApi.md +449 -0
  75. data/docs/RetentionExecution.md +14 -0
  76. data/docs/RetentionExecutionTask.md +18 -0
  77. data/docs/RetentionMetadata.md +10 -0
  78. data/docs/RetentionPolicy.md +12 -0
  79. data/docs/RetentionPolicyScope.md +9 -0
  80. data/docs/RetentionRule.md +15 -0
  81. data/docs/RetentionRuleMetadata.md +11 -0
  82. data/docs/RetentionRuleParamMetadata.md +10 -0
  83. data/docs/RetentionRuleTrigger.md +10 -0
  84. data/docs/RetentionSelector.md +11 -0
  85. data/docs/RetentionSelectorMetadata.md +10 -0
  86. data/docs/RobotAccount.md +15 -0
  87. data/docs/RobotAccountAccess.md +9 -0
  88. data/docs/RobotAccountApi.md +291 -0
  89. data/docs/RobotAccountCreate.md +11 -0
  90. data/docs/RobotAccountPostRep.md +9 -0
  91. data/docs/RobotAccountUpdate.md +8 -0
  92. data/docs/Role.md +11 -0
  93. data/docs/RoleParam.md +9 -0
  94. data/docs/RoleRequest.md +8 -0
  95. data/docs/ScanApi.md +104 -0
  96. data/docs/Scanner.md +10 -0
  97. data/docs/ScannerAdapterMetadata.md +10 -0
  98. data/docs/ScannerCapability.md +9 -0
  99. data/docs/ScannerRegistration.md +21 -0
  100. data/docs/ScannerRegistrationReq.md +15 -0
  101. data/docs/ScannerRegistrationSettings.md +11 -0
  102. data/docs/ScannersApi.md +600 -0
  103. data/docs/Search.md +10 -0
  104. data/docs/SearchRepository.md +13 -0
  105. data/docs/SearchResult.md +10 -0
  106. data/docs/StatisticMap.md +13 -0
  107. data/docs/Stats.md +12 -0
  108. data/docs/Storage.md +9 -0
  109. data/docs/StringConfigItem.md +9 -0
  110. data/docs/SupportedWebhookEventTypes.md +9 -0
  111. data/docs/SysAdminFlag.md +8 -0
  112. data/docs/SystemApi.md +163 -0
  113. data/docs/SystemInfo.md +8 -0
  114. data/docs/TriggerSettings.md +8 -0
  115. data/docs/UnauthorizedChartAPIError.md +8 -0
  116. data/docs/User.md +22 -0
  117. data/docs/UserEntity.md +9 -0
  118. data/docs/UserGroup.md +11 -0
  119. data/docs/UserProfile.md +10 -0
  120. data/docs/UserSearch.md +9 -0
  121. data/docs/WebhookJob.md +15 -0
  122. data/docs/WebhookLastTrigger.md +11 -0
  123. data/docs/WebhookPolicy.md +17 -0
  124. data/docs/WebhookTargetObject.md +11 -0
  125. data/git_push.sh +55 -0
  126. data/harbor2_legacy_client.gemspec +46 -0
  127. data/lib/harbor2_legacy_client.rb +159 -0
  128. data/lib/harbor2_legacy_client/api/chart_repository_api.rb +230 -0
  129. data/lib/harbor2_legacy_client/api/label_api.rb +230 -0
  130. data/lib/harbor2_legacy_client/api/products_api.rb +6500 -0
  131. data/lib/harbor2_legacy_client/api/quota_api.rb +136 -0
  132. data/lib/harbor2_legacy_client/api/retention_api.rb +482 -0
  133. data/lib/harbor2_legacy_client/api/robot_account_api.rb +321 -0
  134. data/lib/harbor2_legacy_client/api/scan_api.rb +119 -0
  135. data/lib/harbor2_legacy_client/api/scanners_api.rb +624 -0
  136. data/lib/harbor2_legacy_client/api/system_api.rb +173 -0
  137. data/lib/harbor2_legacy_client/api_client.rb +391 -0
  138. data/lib/harbor2_legacy_client/api_error.rb +38 -0
  139. data/lib/harbor2_legacy_client/configuration.rb +209 -0
  140. data/lib/harbor2_legacy_client/models/action.rb +184 -0
  141. data/lib/harbor2_legacy_client/models/action_1.rb +184 -0
  142. data/lib/harbor2_legacy_client/models/admin_job_schedule.rb +196 -0
  143. data/lib/harbor2_legacy_client/models/admin_job_schedule_obj.rb +195 -0
  144. data/lib/harbor2_legacy_client/models/bad_request_formated_error.rb +191 -0
  145. data/lib/harbor2_legacy_client/models/bool_config_item.rb +195 -0
  146. data/lib/harbor2_legacy_client/models/chart_api_error.rb +191 -0
  147. data/lib/harbor2_legacy_client/models/chart_metadata.rb +320 -0
  148. data/lib/harbor2_legacy_client/models/chart_version.rb +371 -0
  149. data/lib/harbor2_legacy_client/models/component_health_status.rb +206 -0
  150. data/lib/harbor2_legacy_client/models/component_overview_entry.rb +195 -0
  151. data/lib/harbor2_legacy_client/models/configurations.rb +524 -0
  152. data/lib/harbor2_legacy_client/models/configurations_response.rb +514 -0
  153. data/lib/harbor2_legacy_client/models/configurations_scan_all_policy.rb +194 -0
  154. data/lib/harbor2_legacy_client/models/configurations_scan_all_policy_parameter.rb +186 -0
  155. data/lib/harbor2_legacy_client/models/conflict_formated_error.rb +191 -0
  156. data/lib/harbor2_legacy_client/models/cve_allowlist.rb +217 -0
  157. data/lib/harbor2_legacy_client/models/cve_allowlist_item.rb +186 -0
  158. data/lib/harbor2_legacy_client/models/email_server_setting.rb +235 -0
  159. data/lib/harbor2_legacy_client/models/endpoint.rb +195 -0
  160. data/lib/harbor2_legacy_client/models/event_type.rb +176 -0
  161. data/lib/harbor2_legacy_client/models/filter_style.rb +208 -0
  162. data/lib/harbor2_legacy_client/models/forbidden_chart_api_error.rb +191 -0
  163. data/lib/harbor2_legacy_client/models/gc_result.rb +264 -0
  164. data/lib/harbor2_legacy_client/models/general_info.rb +265 -0
  165. data/lib/harbor2_legacy_client/models/input_secret.rb +185 -0
  166. data/lib/harbor2_legacy_client/models/insufficient_storage_chart_api_error.rb +191 -0
  167. data/lib/harbor2_legacy_client/models/integer_config_item.rb +195 -0
  168. data/lib/harbor2_legacy_client/models/internal_chart_api_error.rb +191 -0
  169. data/lib/harbor2_legacy_client/models/is_default.rb +185 -0
  170. data/lib/harbor2_legacy_client/models/label.rb +265 -0
  171. data/lib/harbor2_legacy_client/models/labels.rb +176 -0
  172. data/lib/harbor2_legacy_client/models/ldap_conf.rb +255 -0
  173. data/lib/harbor2_legacy_client/models/ldap_failed_import_users.rb +195 -0
  174. data/lib/harbor2_legacy_client/models/ldap_import_users.rb +187 -0
  175. data/lib/harbor2_legacy_client/models/ldap_users.rb +205 -0
  176. data/lib/harbor2_legacy_client/models/namespace.rb +196 -0
  177. data/lib/harbor2_legacy_client/models/not_found_chart_api_error.rb +191 -0
  178. data/lib/harbor2_legacy_client/models/notify_type.rb +176 -0
  179. data/lib/harbor2_legacy_client/models/overall_health_status.rb +197 -0
  180. data/lib/harbor2_legacy_client/models/password.rb +195 -0
  181. data/lib/harbor2_legacy_client/models/permission.rb +196 -0
  182. data/lib/harbor2_legacy_client/models/ping_registry.rb +245 -0
  183. data/lib/harbor2_legacy_client/models/project.rb +327 -0
  184. data/lib/harbor2_legacy_client/models/project_member.rb +203 -0
  185. data/lib/harbor2_legacy_client/models/project_member_entity.rb +245 -0
  186. data/lib/harbor2_legacy_client/models/project_metadata.rb +235 -0
  187. data/lib/harbor2_legacy_client/models/project_req.rb +235 -0
  188. data/lib/harbor2_legacy_client/models/project_scanner.rb +185 -0
  189. data/lib/harbor2_legacy_client/models/project_summary.rb +253 -0
  190. data/lib/harbor2_legacy_client/models/project_summary_quota.rb +195 -0
  191. data/lib/harbor2_legacy_client/models/put_registry.rb +245 -0
  192. data/lib/harbor2_legacy_client/models/quota.rb +236 -0
  193. data/lib/harbor2_legacy_client/models/quota_ref_object.rb +175 -0
  194. data/lib/harbor2_legacy_client/models/quota_switcher.rb +185 -0
  195. data/lib/harbor2_legacy_client/models/quota_update_req.rb +185 -0
  196. data/lib/harbor2_legacy_client/models/registry.rb +274 -0
  197. data/lib/harbor2_legacy_client/models/registry_credential.rb +205 -0
  198. data/lib/harbor2_legacy_client/models/registry_info.rb +220 -0
  199. data/lib/harbor2_legacy_client/models/replication_execution.rb +296 -0
  200. data/lib/harbor2_legacy_client/models/replication_filter.rb +195 -0
  201. data/lib/harbor2_legacy_client/models/replication_policy.rb +306 -0
  202. data/lib/harbor2_legacy_client/models/replication_task.rb +266 -0
  203. data/lib/harbor2_legacy_client/models/replication_trigger.rb +194 -0
  204. data/lib/harbor2_legacy_client/models/resource_list.rb +175 -0
  205. data/lib/harbor2_legacy_client/models/retention_execution.rb +238 -0
  206. data/lib/harbor2_legacy_client/models/retention_execution_task.rb +274 -0
  207. data/lib/harbor2_legacy_client/models/retention_metadata.rb +212 -0
  208. data/lib/harbor2_legacy_client/models/retention_policy.rb +223 -0
  209. data/lib/harbor2_legacy_client/models/retention_policy_scope.rb +193 -0
  210. data/lib/harbor2_legacy_client/models/retention_rule.rb +253 -0
  211. data/lib/harbor2_legacy_client/models/retention_rule_metadata.rb +218 -0
  212. data/lib/harbor2_legacy_client/models/retention_rule_param_metadata.rb +203 -0
  213. data/lib/harbor2_legacy_client/models/retention_rule_trigger.rb +202 -0
  214. data/lib/harbor2_legacy_client/models/retention_selector.rb +211 -0
  215. data/lib/harbor2_legacy_client/models/retention_selector_metadata.rb +205 -0
  216. data/lib/harbor2_legacy_client/models/robot_account.rb +256 -0
  217. data/lib/harbor2_legacy_client/models/robot_account_access.rb +195 -0
  218. data/lib/harbor2_legacy_client/models/robot_account_create.rb +217 -0
  219. data/lib/harbor2_legacy_client/models/robot_account_post_rep.rb +195 -0
  220. data/lib/harbor2_legacy_client/models/robot_account_update.rb +185 -0
  221. data/lib/harbor2_legacy_client/models/role.rb +214 -0
  222. data/lib/harbor2_legacy_client/models/role_param.rb +197 -0
  223. data/lib/harbor2_legacy_client/models/role_request.rb +185 -0
  224. data/lib/harbor2_legacy_client/models/scanner.rb +205 -0
  225. data/lib/harbor2_legacy_client/models/scanner_adapter_metadata.rb +207 -0
  226. data/lib/harbor2_legacy_client/models/scanner_capability.rb +197 -0
  227. data/lib/harbor2_legacy_client/models/scanner_registration.rb +328 -0
  228. data/lib/harbor2_legacy_client/models/scanner_registration_req.rb +263 -0
  229. data/lib/harbor2_legacy_client/models/scanner_registration_settings.rb +217 -0
  230. data/lib/harbor2_legacy_client/models/search.rb +211 -0
  231. data/lib/harbor2_legacy_client/models/search_repository.rb +235 -0
  232. data/lib/harbor2_legacy_client/models/search_result.rb +205 -0
  233. data/lib/harbor2_legacy_client/models/statistic_map.rb +235 -0
  234. data/lib/harbor2_legacy_client/models/stats.rb +228 -0
  235. data/lib/harbor2_legacy_client/models/storage.rb +195 -0
  236. data/lib/harbor2_legacy_client/models/string_config_item.rb +195 -0
  237. data/lib/harbor2_legacy_client/models/supported_webhook_event_types.rb +198 -0
  238. data/lib/harbor2_legacy_client/models/sys_admin_flag.rb +185 -0
  239. data/lib/harbor2_legacy_client/models/system_info.rb +187 -0
  240. data/lib/harbor2_legacy_client/models/trigger_settings.rb +185 -0
  241. data/lib/harbor2_legacy_client/models/unauthorized_chart_api_error.rb +191 -0
  242. data/lib/harbor2_legacy_client/models/user.rb +312 -0
  243. data/lib/harbor2_legacy_client/models/user_entity.rb +195 -0
  244. data/lib/harbor2_legacy_client/models/user_group.rb +215 -0
  245. data/lib/harbor2_legacy_client/models/user_profile.rb +205 -0
  246. data/lib/harbor2_legacy_client/models/user_search.rb +194 -0
  247. data/lib/harbor2_legacy_client/models/webhook_job.rb +256 -0
  248. data/lib/harbor2_legacy_client/models/webhook_last_trigger.rb +216 -0
  249. data/lib/harbor2_legacy_client/models/webhook_policy.rb +278 -0
  250. data/lib/harbor2_legacy_client/models/webhook_target_object.rb +216 -0
  251. data/lib/harbor2_legacy_client/version.rb +15 -0
  252. data/spec/api/chart_repository_api_spec.rb +79 -0
  253. data/spec/api/label_api_spec.rb +79 -0
  254. data/spec/api/products_api_spec.rb +1493 -0
  255. data/spec/api/quota_api_spec.rb +60 -0
  256. data/spec/api/retention_api_spec.rb +136 -0
  257. data/spec/api/robot_account_api_spec.rb +100 -0
  258. data/spec/api/scan_api_spec.rb +57 -0
  259. data/spec/api/scanners_api_spec.rb +169 -0
  260. data/spec/api/system_api_spec.rb +70 -0
  261. data/spec/api_client_spec.rb +243 -0
  262. data/spec/configuration_spec.rb +42 -0
  263. data/spec/models/action_1_spec.rb +41 -0
  264. data/spec/models/action_spec.rb +41 -0
  265. data/spec/models/admin_job_schedule_obj_spec.rb +47 -0
  266. data/spec/models/admin_job_schedule_spec.rb +47 -0
  267. data/spec/models/bad_request_formated_error_spec.rb +41 -0
  268. data/spec/models/bool_config_item_spec.rb +47 -0
  269. data/spec/models/chart_api_error_spec.rb +41 -0
  270. data/spec/models/chart_metadata_spec.rb +101 -0
  271. data/spec/models/chart_version_spec.rb +131 -0
  272. data/spec/models/component_health_status_spec.rb +53 -0
  273. data/spec/models/component_overview_entry_spec.rb +47 -0
  274. data/spec/models/configurations_response_spec.rb +239 -0
  275. data/spec/models/configurations_scan_all_policy_parameter_spec.rb +41 -0
  276. data/spec/models/configurations_scan_all_policy_spec.rb +47 -0
  277. data/spec/models/configurations_spec.rb +245 -0
  278. data/spec/models/conflict_formated_error_spec.rb +41 -0
  279. data/spec/models/cve_allowlist_item_spec.rb +41 -0
  280. data/spec/models/cve_allowlist_spec.rb +59 -0
  281. data/spec/models/email_server_setting_spec.rb +71 -0
  282. data/spec/models/endpoint_spec.rb +47 -0
  283. data/spec/models/event_type_spec.rb +35 -0
  284. data/spec/models/filter_style_spec.rb +53 -0
  285. data/spec/models/forbidden_chart_api_error_spec.rb +41 -0
  286. data/spec/models/gc_result_spec.rb +89 -0
  287. data/spec/models/general_info_spec.rb +89 -0
  288. data/spec/models/input_secret_spec.rb +41 -0
  289. data/spec/models/insufficient_storage_chart_api_error_spec.rb +41 -0
  290. data/spec/models/integer_config_item_spec.rb +47 -0
  291. data/spec/models/internal_chart_api_error_spec.rb +41 -0
  292. data/spec/models/is_default_spec.rb +41 -0
  293. data/spec/models/label_spec.rb +89 -0
  294. data/spec/models/labels_spec.rb +35 -0
  295. data/spec/models/ldap_conf_spec.rb +83 -0
  296. data/spec/models/ldap_failed_import_users_spec.rb +47 -0
  297. data/spec/models/ldap_import_users_spec.rb +41 -0
  298. data/spec/models/ldap_users_spec.rb +53 -0
  299. data/spec/models/namespace_spec.rb +47 -0
  300. data/spec/models/not_found_chart_api_error_spec.rb +41 -0
  301. data/spec/models/notify_type_spec.rb +35 -0
  302. data/spec/models/overall_health_status_spec.rb +47 -0
  303. data/spec/models/password_spec.rb +47 -0
  304. data/spec/models/permission_spec.rb +47 -0
  305. data/spec/models/ping_registry_spec.rb +77 -0
  306. data/spec/models/project_member_entity_spec.rb +77 -0
  307. data/spec/models/project_member_spec.rb +53 -0
  308. data/spec/models/project_metadata_spec.rb +71 -0
  309. data/spec/models/project_req_spec.rb +71 -0
  310. data/spec/models/project_scanner_spec.rb +41 -0
  311. data/spec/models/project_spec.rb +125 -0
  312. data/spec/models/project_summary_quota_spec.rb +47 -0
  313. data/spec/models/project_summary_spec.rb +83 -0
  314. data/spec/models/put_registry_spec.rb +77 -0
  315. data/spec/models/quota_ref_object_spec.rb +35 -0
  316. data/spec/models/quota_spec.rb +71 -0
  317. data/spec/models/quota_switcher_spec.rb +41 -0
  318. data/spec/models/quota_update_req_spec.rb +41 -0
  319. data/spec/models/registry_credential_spec.rb +53 -0
  320. data/spec/models/registry_info_spec.rb +59 -0
  321. data/spec/models/registry_spec.rb +95 -0
  322. data/spec/models/replication_execution_spec.rb +107 -0
  323. data/spec/models/replication_filter_spec.rb +47 -0
  324. data/spec/models/replication_policy_spec.rb +113 -0
  325. data/spec/models/replication_task_spec.rb +89 -0
  326. data/spec/models/replication_trigger_spec.rb +47 -0
  327. data/spec/models/resource_list_spec.rb +35 -0
  328. data/spec/models/retention_execution_spec.rb +77 -0
  329. data/spec/models/retention_execution_task_spec.rb +101 -0
  330. data/spec/models/retention_metadata_spec.rb +53 -0
  331. data/spec/models/retention_policy_scope_spec.rb +47 -0
  332. data/spec/models/retention_policy_spec.rb +65 -0
  333. data/spec/models/retention_rule_metadata_spec.rb +59 -0
  334. data/spec/models/retention_rule_param_metadata_spec.rb +53 -0
  335. data/spec/models/retention_rule_spec.rb +83 -0
  336. data/spec/models/retention_rule_trigger_spec.rb +53 -0
  337. data/spec/models/retention_selector_metadata_spec.rb +53 -0
  338. data/spec/models/retention_selector_spec.rb +59 -0
  339. data/spec/models/robot_account_access_spec.rb +47 -0
  340. data/spec/models/robot_account_create_spec.rb +59 -0
  341. data/spec/models/robot_account_post_rep_spec.rb +47 -0
  342. data/spec/models/robot_account_spec.rb +83 -0
  343. data/spec/models/robot_account_update_spec.rb +41 -0
  344. data/spec/models/role_param_spec.rb +47 -0
  345. data/spec/models/role_request_spec.rb +41 -0
  346. data/spec/models/role_spec.rb +59 -0
  347. data/spec/models/scanner_adapter_metadata_spec.rb +53 -0
  348. data/spec/models/scanner_capability_spec.rb +47 -0
  349. data/spec/models/scanner_registration_req_spec.rb +83 -0
  350. data/spec/models/scanner_registration_settings_spec.rb +59 -0
  351. data/spec/models/scanner_registration_spec.rb +119 -0
  352. data/spec/models/scanner_spec.rb +53 -0
  353. data/spec/models/search_repository_spec.rb +71 -0
  354. data/spec/models/search_result_spec.rb +53 -0
  355. data/spec/models/search_spec.rb +53 -0
  356. data/spec/models/statistic_map_spec.rb +71 -0
  357. data/spec/models/stats_spec.rb +65 -0
  358. data/spec/models/storage_spec.rb +47 -0
  359. data/spec/models/string_config_item_spec.rb +47 -0
  360. data/spec/models/supported_webhook_event_types_spec.rb +47 -0
  361. data/spec/models/sys_admin_flag_spec.rb +41 -0
  362. data/spec/models/system_info_spec.rb +41 -0
  363. data/spec/models/trigger_settings_spec.rb +41 -0
  364. data/spec/models/unauthorized_chart_api_error_spec.rb +41 -0
  365. data/spec/models/user_entity_spec.rb +47 -0
  366. data/spec/models/user_group_spec.rb +59 -0
  367. data/spec/models/user_profile_spec.rb +53 -0
  368. data/spec/models/user_search_spec.rb +47 -0
  369. data/spec/models/user_spec.rb +125 -0
  370. data/spec/models/webhook_job_spec.rb +83 -0
  371. data/spec/models/webhook_last_trigger_spec.rb +59 -0
  372. data/spec/models/webhook_policy_spec.rb +95 -0
  373. data/spec/models/webhook_target_object_spec.rb +59 -0
  374. data/spec/spec_helper.rb +111 -0
  375. metadata +740 -0
@@ -0,0 +1,195 @@
1
+ =begin
2
+ #Harbor API
3
+
4
+ #These APIs provide services for manipulating Harbor project.
5
+
6
+ OpenAPI spec version: 2.0
7
+
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.17
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Harbor2LegacyClient
16
+ class BoolConfigItem
17
+ # The boolean value of current config item
18
+ attr_accessor :value
19
+
20
+ # The configure item can be updated or not
21
+ attr_accessor :editable
22
+
23
+ # Attribute mapping from ruby-style variable name to JSON key.
24
+ def self.attribute_map
25
+ {
26
+ :'value' => :'value',
27
+ :'editable' => :'editable'
28
+ }
29
+ end
30
+
31
+ # Attribute type mapping.
32
+ def self.swagger_types
33
+ {
34
+ :'value' => :'BOOLEAN',
35
+ :'editable' => :'BOOLEAN'
36
+ }
37
+ end
38
+
39
+ # Initializes the object
40
+ # @param [Hash] attributes Model attributes in the form of hash
41
+ def initialize(attributes = {})
42
+ return unless attributes.is_a?(Hash)
43
+
44
+ # convert string to symbol for hash key
45
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
46
+
47
+ if attributes.has_key?(:'value')
48
+ self.value = attributes[:'value']
49
+ end
50
+
51
+ if attributes.has_key?(:'editable')
52
+ self.editable = attributes[:'editable']
53
+ end
54
+ end
55
+
56
+ # Show invalid properties with the reasons. Usually used together with valid?
57
+ # @return Array for valid properties with the reasons
58
+ def list_invalid_properties
59
+ invalid_properties = Array.new
60
+ invalid_properties
61
+ end
62
+
63
+ # Check to see if the all the properties in the model are valid
64
+ # @return true if the model is valid
65
+ def valid?
66
+ true
67
+ end
68
+
69
+ # Checks equality by comparing each attribute.
70
+ # @param [Object] Object to be compared
71
+ def ==(o)
72
+ return true if self.equal?(o)
73
+ self.class == o.class &&
74
+ value == o.value &&
75
+ editable == o.editable
76
+ end
77
+
78
+ # @see the `==` method
79
+ # @param [Object] Object to be compared
80
+ def eql?(o)
81
+ self == o
82
+ end
83
+
84
+ # Calculates hash code according to all attributes.
85
+ # @return [Fixnum] Hash code
86
+ def hash
87
+ [value, editable].hash
88
+ end
89
+
90
+ # Builds the object from hash
91
+ # @param [Hash] attributes Model attributes in the form of hash
92
+ # @return [Object] Returns the model itself
93
+ def build_from_hash(attributes)
94
+ return nil unless attributes.is_a?(Hash)
95
+ self.class.swagger_types.each_pair do |key, type|
96
+ if type =~ /\AArray<(.*)>/i
97
+ # check to ensure the input is an array given that the attribute
98
+ # is documented as an array but the input is not
99
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
100
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
101
+ end
102
+ elsif !attributes[self.class.attribute_map[key]].nil?
103
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
104
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
105
+ end
106
+
107
+ self
108
+ end
109
+
110
+ # Deserializes the data based on type
111
+ # @param string type Data type
112
+ # @param string value Value to be deserialized
113
+ # @return [Object] Deserialized data
114
+ def _deserialize(type, value)
115
+ case type.to_sym
116
+ when :DateTime
117
+ DateTime.parse(value)
118
+ when :Date
119
+ Date.parse(value)
120
+ when :String
121
+ value.to_s
122
+ when :Integer
123
+ value.to_i
124
+ when :Float
125
+ value.to_f
126
+ when :BOOLEAN
127
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
128
+ true
129
+ else
130
+ false
131
+ end
132
+ when :Object
133
+ # generic object (usually a Hash), return directly
134
+ value
135
+ when /\AArray<(?<inner_type>.+)>\z/
136
+ inner_type = Regexp.last_match[:inner_type]
137
+ value.map { |v| _deserialize(inner_type, v) }
138
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
139
+ k_type = Regexp.last_match[:k_type]
140
+ v_type = Regexp.last_match[:v_type]
141
+ {}.tap do |hash|
142
+ value.each do |k, v|
143
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
144
+ end
145
+ end
146
+ else # model
147
+ temp_model = Harbor2LegacyClient.const_get(type).new
148
+ temp_model.build_from_hash(value)
149
+ end
150
+ end
151
+
152
+ # Returns the string representation of the object
153
+ # @return [String] String presentation of the object
154
+ def to_s
155
+ to_hash.to_s
156
+ end
157
+
158
+ # to_body is an alias to to_hash (backward compatibility)
159
+ # @return [Hash] Returns the object in the form of hash
160
+ def to_body
161
+ to_hash
162
+ end
163
+
164
+ # Returns the object in the form of hash
165
+ # @return [Hash] Returns the object in the form of hash
166
+ def to_hash
167
+ hash = {}
168
+ self.class.attribute_map.each_pair do |attr, param|
169
+ value = self.send(attr)
170
+ next if value.nil?
171
+ hash[param] = _to_hash(value)
172
+ end
173
+ hash
174
+ end
175
+
176
+ # Outputs non-array value in the form of hash
177
+ # For object, use to_hash. Otherwise, just return the value
178
+ # @param [Object] value Any valid value
179
+ # @return [Hash] Returns the value in the form of hash
180
+ def _to_hash(value)
181
+ if value.is_a?(Array)
182
+ value.compact.map { |v| _to_hash(v) }
183
+ elsif value.is_a?(Hash)
184
+ {}.tap do |hash|
185
+ value.each { |k, v| hash[k] = _to_hash(v) }
186
+ end
187
+ elsif value.respond_to? :to_hash
188
+ value.to_hash
189
+ else
190
+ value
191
+ end
192
+ end
193
+
194
+ end
195
+ end
@@ -0,0 +1,191 @@
1
+ =begin
2
+ #Harbor API
3
+
4
+ #These APIs provide services for manipulating Harbor project.
5
+
6
+ OpenAPI spec version: 2.0
7
+
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.17
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Harbor2LegacyClient
16
+ # The error object returned by chart repository API
17
+ class ChartAPIError
18
+ # The error message returned by the chart API
19
+ attr_accessor :error
20
+
21
+ # Attribute mapping from ruby-style variable name to JSON key.
22
+ def self.attribute_map
23
+ {
24
+ :'error' => :'error'
25
+ }
26
+ end
27
+
28
+ # Attribute type mapping.
29
+ def self.swagger_types
30
+ {
31
+ :'error' => :'String'
32
+ }
33
+ end
34
+
35
+ # Initializes the object
36
+ # @param [Hash] attributes Model attributes in the form of hash
37
+ def initialize(attributes = {})
38
+ return unless attributes.is_a?(Hash)
39
+
40
+ # convert string to symbol for hash key
41
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
42
+
43
+ if attributes.has_key?(:'error')
44
+ self.error = attributes[:'error']
45
+ end
46
+ end
47
+
48
+ # Show invalid properties with the reasons. Usually used together with valid?
49
+ # @return Array for valid properties with the reasons
50
+ def list_invalid_properties
51
+ invalid_properties = Array.new
52
+ if @error.nil?
53
+ invalid_properties.push('invalid value for "error", error cannot be nil.')
54
+ end
55
+
56
+ invalid_properties
57
+ end
58
+
59
+ # Check to see if the all the properties in the model are valid
60
+ # @return true if the model is valid
61
+ def valid?
62
+ return false if @error.nil?
63
+ true
64
+ end
65
+
66
+ # Checks equality by comparing each attribute.
67
+ # @param [Object] Object to be compared
68
+ def ==(o)
69
+ return true if self.equal?(o)
70
+ self.class == o.class &&
71
+ error == o.error
72
+ end
73
+
74
+ # @see the `==` method
75
+ # @param [Object] Object to be compared
76
+ def eql?(o)
77
+ self == o
78
+ end
79
+
80
+ # Calculates hash code according to all attributes.
81
+ # @return [Fixnum] Hash code
82
+ def hash
83
+ [error].hash
84
+ end
85
+
86
+ # Builds the object from hash
87
+ # @param [Hash] attributes Model attributes in the form of hash
88
+ # @return [Object] Returns the model itself
89
+ def build_from_hash(attributes)
90
+ return nil unless attributes.is_a?(Hash)
91
+ self.class.swagger_types.each_pair do |key, type|
92
+ if type =~ /\AArray<(.*)>/i
93
+ # check to ensure the input is an array given that the attribute
94
+ # is documented as an array but the input is not
95
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
96
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
97
+ end
98
+ elsif !attributes[self.class.attribute_map[key]].nil?
99
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
100
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
101
+ end
102
+
103
+ self
104
+ end
105
+
106
+ # Deserializes the data based on type
107
+ # @param string type Data type
108
+ # @param string value Value to be deserialized
109
+ # @return [Object] Deserialized data
110
+ def _deserialize(type, value)
111
+ case type.to_sym
112
+ when :DateTime
113
+ DateTime.parse(value)
114
+ when :Date
115
+ Date.parse(value)
116
+ when :String
117
+ value.to_s
118
+ when :Integer
119
+ value.to_i
120
+ when :Float
121
+ value.to_f
122
+ when :BOOLEAN
123
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
124
+ true
125
+ else
126
+ false
127
+ end
128
+ when :Object
129
+ # generic object (usually a Hash), return directly
130
+ value
131
+ when /\AArray<(?<inner_type>.+)>\z/
132
+ inner_type = Regexp.last_match[:inner_type]
133
+ value.map { |v| _deserialize(inner_type, v) }
134
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
135
+ k_type = Regexp.last_match[:k_type]
136
+ v_type = Regexp.last_match[:v_type]
137
+ {}.tap do |hash|
138
+ value.each do |k, v|
139
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
140
+ end
141
+ end
142
+ else # model
143
+ temp_model = Harbor2LegacyClient.const_get(type).new
144
+ temp_model.build_from_hash(value)
145
+ end
146
+ end
147
+
148
+ # Returns the string representation of the object
149
+ # @return [String] String presentation of the object
150
+ def to_s
151
+ to_hash.to_s
152
+ end
153
+
154
+ # to_body is an alias to to_hash (backward compatibility)
155
+ # @return [Hash] Returns the object in the form of hash
156
+ def to_body
157
+ to_hash
158
+ end
159
+
160
+ # Returns the object in the form of hash
161
+ # @return [Hash] Returns the object in the form of hash
162
+ def to_hash
163
+ hash = {}
164
+ self.class.attribute_map.each_pair do |attr, param|
165
+ value = self.send(attr)
166
+ next if value.nil?
167
+ hash[param] = _to_hash(value)
168
+ end
169
+ hash
170
+ end
171
+
172
+ # Outputs non-array value in the form of hash
173
+ # For object, use to_hash. Otherwise, just return the value
174
+ # @param [Object] value Any valid value
175
+ # @return [Hash] Returns the value in the form of hash
176
+ def _to_hash(value)
177
+ if value.is_a?(Array)
178
+ value.compact.map { |v| _to_hash(v) }
179
+ elsif value.is_a?(Hash)
180
+ {}.tap do |hash|
181
+ value.each { |k, v| hash[k] = _to_hash(v) }
182
+ end
183
+ elsif value.respond_to? :to_hash
184
+ value.to_hash
185
+ else
186
+ value
187
+ end
188
+ end
189
+
190
+ end
191
+ end
@@ -0,0 +1,320 @@
1
+ =begin
2
+ #Harbor API
3
+
4
+ #These APIs provide services for manipulating Harbor project.
5
+
6
+ OpenAPI spec version: 2.0
7
+
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.17
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Harbor2LegacyClient
16
+ # The metadata of chart version
17
+ class ChartMetadata
18
+ # The name of the chart
19
+ attr_accessor :name
20
+
21
+ # The URL to the relevant project page
22
+ attr_accessor :home
23
+
24
+ # The URL to the source code of chart
25
+ attr_accessor :sources
26
+
27
+ # A SemVer 2 version of chart
28
+ attr_accessor :version
29
+
30
+ # A one-sentence description of chart
31
+ attr_accessor :description
32
+
33
+ # A list of string keywords
34
+ attr_accessor :keywords
35
+
36
+ # The name of template engine
37
+ attr_accessor :engine
38
+
39
+ # The URL to an icon file
40
+ attr_accessor :icon
41
+
42
+ # The API version of this chart
43
+ attr_accessor :api_version
44
+
45
+ # The version of the application enclosed in the chart
46
+ attr_accessor :app_version
47
+
48
+ # Whether or not this chart is deprecated
49
+ attr_accessor :deprecated
50
+
51
+ # Attribute mapping from ruby-style variable name to JSON key.
52
+ def self.attribute_map
53
+ {
54
+ :'name' => :'name',
55
+ :'home' => :'home',
56
+ :'sources' => :'sources',
57
+ :'version' => :'version',
58
+ :'description' => :'description',
59
+ :'keywords' => :'keywords',
60
+ :'engine' => :'engine',
61
+ :'icon' => :'icon',
62
+ :'api_version' => :'apiVersion',
63
+ :'app_version' => :'appVersion',
64
+ :'deprecated' => :'deprecated'
65
+ }
66
+ end
67
+
68
+ # Attribute type mapping.
69
+ def self.swagger_types
70
+ {
71
+ :'name' => :'String',
72
+ :'home' => :'String',
73
+ :'sources' => :'Array<String>',
74
+ :'version' => :'String',
75
+ :'description' => :'String',
76
+ :'keywords' => :'Array<String>',
77
+ :'engine' => :'String',
78
+ :'icon' => :'String',
79
+ :'api_version' => :'String',
80
+ :'app_version' => :'String',
81
+ :'deprecated' => :'BOOLEAN'
82
+ }
83
+ end
84
+
85
+ # Initializes the object
86
+ # @param [Hash] attributes Model attributes in the form of hash
87
+ def initialize(attributes = {})
88
+ return unless attributes.is_a?(Hash)
89
+
90
+ # convert string to symbol for hash key
91
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
92
+
93
+ if attributes.has_key?(:'name')
94
+ self.name = attributes[:'name']
95
+ end
96
+
97
+ if attributes.has_key?(:'home')
98
+ self.home = attributes[:'home']
99
+ end
100
+
101
+ if attributes.has_key?(:'sources')
102
+ if (value = attributes[:'sources']).is_a?(Array)
103
+ self.sources = value
104
+ end
105
+ end
106
+
107
+ if attributes.has_key?(:'version')
108
+ self.version = attributes[:'version']
109
+ end
110
+
111
+ if attributes.has_key?(:'description')
112
+ self.description = attributes[:'description']
113
+ end
114
+
115
+ if attributes.has_key?(:'keywords')
116
+ if (value = attributes[:'keywords']).is_a?(Array)
117
+ self.keywords = value
118
+ end
119
+ end
120
+
121
+ if attributes.has_key?(:'engine')
122
+ self.engine = attributes[:'engine']
123
+ end
124
+
125
+ if attributes.has_key?(:'icon')
126
+ self.icon = attributes[:'icon']
127
+ end
128
+
129
+ if attributes.has_key?(:'apiVersion')
130
+ self.api_version = attributes[:'apiVersion']
131
+ end
132
+
133
+ if attributes.has_key?(:'appVersion')
134
+ self.app_version = attributes[:'appVersion']
135
+ end
136
+
137
+ if attributes.has_key?(:'deprecated')
138
+ self.deprecated = attributes[:'deprecated']
139
+ end
140
+ end
141
+
142
+ # Show invalid properties with the reasons. Usually used together with valid?
143
+ # @return Array for valid properties with the reasons
144
+ def list_invalid_properties
145
+ invalid_properties = Array.new
146
+ if @name.nil?
147
+ invalid_properties.push('invalid value for "name", name cannot be nil.')
148
+ end
149
+
150
+ if @version.nil?
151
+ invalid_properties.push('invalid value for "version", version cannot be nil.')
152
+ end
153
+
154
+ if @engine.nil?
155
+ invalid_properties.push('invalid value for "engine", engine cannot be nil.')
156
+ end
157
+
158
+ if @icon.nil?
159
+ invalid_properties.push('invalid value for "icon", icon cannot be nil.')
160
+ end
161
+
162
+ if @api_version.nil?
163
+ invalid_properties.push('invalid value for "api_version", api_version cannot be nil.')
164
+ end
165
+
166
+ if @app_version.nil?
167
+ invalid_properties.push('invalid value for "app_version", app_version cannot be nil.')
168
+ end
169
+
170
+ invalid_properties
171
+ end
172
+
173
+ # Check to see if the all the properties in the model are valid
174
+ # @return true if the model is valid
175
+ def valid?
176
+ return false if @name.nil?
177
+ return false if @version.nil?
178
+ return false if @engine.nil?
179
+ return false if @icon.nil?
180
+ return false if @api_version.nil?
181
+ return false if @app_version.nil?
182
+ true
183
+ end
184
+
185
+ # Checks equality by comparing each attribute.
186
+ # @param [Object] Object to be compared
187
+ def ==(o)
188
+ return true if self.equal?(o)
189
+ self.class == o.class &&
190
+ name == o.name &&
191
+ home == o.home &&
192
+ sources == o.sources &&
193
+ version == o.version &&
194
+ description == o.description &&
195
+ keywords == o.keywords &&
196
+ engine == o.engine &&
197
+ icon == o.icon &&
198
+ api_version == o.api_version &&
199
+ app_version == o.app_version &&
200
+ deprecated == o.deprecated
201
+ end
202
+
203
+ # @see the `==` method
204
+ # @param [Object] Object to be compared
205
+ def eql?(o)
206
+ self == o
207
+ end
208
+
209
+ # Calculates hash code according to all attributes.
210
+ # @return [Fixnum] Hash code
211
+ def hash
212
+ [name, home, sources, version, description, keywords, engine, icon, api_version, app_version, deprecated].hash
213
+ end
214
+
215
+ # Builds the object from hash
216
+ # @param [Hash] attributes Model attributes in the form of hash
217
+ # @return [Object] Returns the model itself
218
+ def build_from_hash(attributes)
219
+ return nil unless attributes.is_a?(Hash)
220
+ self.class.swagger_types.each_pair do |key, type|
221
+ if type =~ /\AArray<(.*)>/i
222
+ # check to ensure the input is an array given that the attribute
223
+ # is documented as an array but the input is not
224
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
225
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
226
+ end
227
+ elsif !attributes[self.class.attribute_map[key]].nil?
228
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
229
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
230
+ end
231
+
232
+ self
233
+ end
234
+
235
+ # Deserializes the data based on type
236
+ # @param string type Data type
237
+ # @param string value Value to be deserialized
238
+ # @return [Object] Deserialized data
239
+ def _deserialize(type, value)
240
+ case type.to_sym
241
+ when :DateTime
242
+ DateTime.parse(value)
243
+ when :Date
244
+ Date.parse(value)
245
+ when :String
246
+ value.to_s
247
+ when :Integer
248
+ value.to_i
249
+ when :Float
250
+ value.to_f
251
+ when :BOOLEAN
252
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
253
+ true
254
+ else
255
+ false
256
+ end
257
+ when :Object
258
+ # generic object (usually a Hash), return directly
259
+ value
260
+ when /\AArray<(?<inner_type>.+)>\z/
261
+ inner_type = Regexp.last_match[:inner_type]
262
+ value.map { |v| _deserialize(inner_type, v) }
263
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
264
+ k_type = Regexp.last_match[:k_type]
265
+ v_type = Regexp.last_match[:v_type]
266
+ {}.tap do |hash|
267
+ value.each do |k, v|
268
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
269
+ end
270
+ end
271
+ else # model
272
+ temp_model = Harbor2LegacyClient.const_get(type).new
273
+ temp_model.build_from_hash(value)
274
+ end
275
+ end
276
+
277
+ # Returns the string representation of the object
278
+ # @return [String] String presentation of the object
279
+ def to_s
280
+ to_hash.to_s
281
+ end
282
+
283
+ # to_body is an alias to to_hash (backward compatibility)
284
+ # @return [Hash] Returns the object in the form of hash
285
+ def to_body
286
+ to_hash
287
+ end
288
+
289
+ # Returns the object in the form of hash
290
+ # @return [Hash] Returns the object in the form of hash
291
+ def to_hash
292
+ hash = {}
293
+ self.class.attribute_map.each_pair do |attr, param|
294
+ value = self.send(attr)
295
+ next if value.nil?
296
+ hash[param] = _to_hash(value)
297
+ end
298
+ hash
299
+ end
300
+
301
+ # Outputs non-array value in the form of hash
302
+ # For object, use to_hash. Otherwise, just return the value
303
+ # @param [Object] value Any valid value
304
+ # @return [Hash] Returns the value in the form of hash
305
+ def _to_hash(value)
306
+ if value.is_a?(Array)
307
+ value.compact.map { |v| _to_hash(v) }
308
+ elsif value.is_a?(Hash)
309
+ {}.tap do |hash|
310
+ value.each { |k, v| hash[k] = _to_hash(v) }
311
+ end
312
+ elsif value.respond_to? :to_hash
313
+ value.to_hash
314
+ else
315
+ value
316
+ end
317
+ end
318
+
319
+ end
320
+ end