seaport 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2821b36a643b6520cab8b7866e6640f0bba0fc80eaa9443e80ebb50a6a7f3b63
4
+ data.tar.gz: 9684a51b2786cfa7455cdc1a048dfe93c438003faebd6709338d98d01deab15e
5
+ SHA512:
6
+ metadata.gz: a5ea8da66f4d9b948c70c98ede12bc1d237cf5ba82a4ead8ef83e3e020c2b70b24bb39c48f7931297454639d1e793d5a69ac82d68d0c7cc2ac164fb1a7e2286c
7
+ data.tar.gz: 1baf9d29976cb5dfcacf441b29aafb7ea58d2e62d1ce587f84fa7d50e3f41494e4fd9f6d0a23bb0c01cae6af46d99cf2c6f5cf5f39c7bb261d524db007d8ab8d
data/LICENSE.adoc ADDED
@@ -0,0 +1,134 @@
1
+ = Hippocratic License
2
+
3
+ Version: 2.1.0.
4
+
5
+ Purpose. The purpose of this License is for the Licensor named above to
6
+ permit the Licensee (as defined below) broad permission, if consistent
7
+ with Human Rights Laws and Human Rights Principles (as each is defined
8
+ below), to use and work with the Software (as defined below) within the
9
+ full scope of Licensor’s copyright and patent rights, if any, in the
10
+ Software, while ensuring attribution and protecting the Licensor from
11
+ liability.
12
+
13
+ Permission and Conditions. The Licensor grants permission by this
14
+ license ("License"), free of charge, to the extent of Licensor’s
15
+ rights under applicable copyright and patent law, to any person or
16
+ entity (the "Licensee") obtaining a copy of this software and
17
+ associated documentation files (the "Software"), to do everything with
18
+ the Software that would otherwise infringe (i) the Licensor’s copyright
19
+ in the Software or (ii) any patent claims to the Software that the
20
+ Licensor can license or becomes able to license, subject to all of the
21
+ following terms and conditions:
22
+
23
+ * Acceptance. This License is automatically offered to every person and
24
+ entity subject to its terms and conditions. Licensee accepts this
25
+ License and agrees to its terms and conditions by taking any action with
26
+ the Software that, absent this License, would infringe any intellectual
27
+ property right held by Licensor.
28
+ * Notice. Licensee must ensure that everyone who gets a copy of any part
29
+ of this Software from Licensee, with or without changes, also receives
30
+ the License and the above copyright notice (and if included by the
31
+ Licensor, patent, trademark and attribution notice). Licensee must cause
32
+ any modified versions of the Software to carry prominent notices stating
33
+ that Licensee changed the Software. For clarity, although Licensee is
34
+ free to create modifications of the Software and distribute only the
35
+ modified portion created by Licensee with additional or different terms,
36
+ the portion of the Software not modified must be distributed pursuant to
37
+ this License. If anyone notifies Licensee in writing that Licensee has
38
+ not complied with this Notice section, Licensee can keep this License by
39
+ taking all practical steps to comply within 30 days after the notice. If
40
+ Licensee does not do so, Licensee’s License (and all rights licensed
41
+ hereunder) shall end immediately.
42
+ * Compliance with Human Rights Principles and Human Rights Laws.
43
+ [arabic]
44
+ . Human Rights Principles.
45
+ [loweralpha]
46
+ .. Licensee is advised to consult the articles of the United Nations
47
+ Universal Declaration of Human Rights and the United Nations Global
48
+ Compact that define recognized principles of international human rights
49
+ (the "Human Rights Principles"). Licensee shall use the Software in a
50
+ manner consistent with Human Rights Principles.
51
+ .. Unless the Licensor and Licensee agree otherwise, any dispute,
52
+ controversy, or claim arising out of or relating to (i) Section 1(a)
53
+ regarding Human Rights Principles, including the breach of Section 1(a),
54
+ termination of this License for breach of the Human Rights Principles,
55
+ or invalidity of Section 1(a) or (ii) a determination of whether any Law
56
+ is consistent or in conflict with Human Rights Principles pursuant to
57
+ Section 2, below, shall be settled by arbitration in accordance with the
58
+ Hague Rules on Business and Human Rights Arbitration (the "Rules");
59
+ provided, however, that Licensee may elect not to participate in such
60
+ arbitration, in which event this License (and all rights licensed
61
+ hereunder) shall end immediately. The number of arbitrators shall be one
62
+ unless the Rules require otherwise.
63
+ +
64
+ Unless both the Licensor and Licensee agree to the contrary: (1) All
65
+ documents and information concerning the arbitration shall be public and
66
+ may be disclosed by any party; (2) The repository referred to under
67
+ Article 43 of the Rules shall make available to the public in a timely
68
+ manner all documents concerning the arbitration which are communicated
69
+ to it, including all submissions of the parties, all evidence admitted
70
+ into the record of the proceedings, all transcripts or other recordings
71
+ of hearings and all orders, decisions and awards of the arbitral
72
+ tribunal, subject only to the arbitral tribunal’s powers to take such
73
+ measures as may be necessary to safeguard the integrity of the arbitral
74
+ process pursuant to Articles 18, 33, 41 and 42 of the Rules; and (3)
75
+ Article 26(6) of the Rules shall not apply.
76
+ . Human Rights Laws. The Software shall not be used by any person or
77
+ entity for any systems, activities, or other uses that violate any Human
78
+ Rights Laws. "Human Rights Laws" means any applicable laws,
79
+ regulations, or rules (collectively, "Laws") that protect human,
80
+ civil, labor, privacy, political, environmental, security, economic, due
81
+ process, or similar rights; provided, however, that such Laws are
82
+ consistent and not in conflict with Human Rights Principles (a dispute
83
+ over the consistency or a conflict between Laws and Human Rights
84
+ Principles shall be determined by arbitration as stated above). Where
85
+ the Human Rights Laws of more than one jurisdiction are applicable or in
86
+ conflict with respect to the use of the Software, the Human Rights Laws
87
+ that are most protective of the individuals or groups harmed shall
88
+ apply.
89
+ . Indemnity. Licensee shall hold harmless and indemnify Licensor (and
90
+ any other contributor) against all losses, damages, liabilities,
91
+ deficiencies, claims, actions, judgments, settlements, interest, awards,
92
+ penalties, fines, costs, or expenses of whatever kind, including
93
+ Licensor’s reasonable attorneys’ fees, arising out of or relating to
94
+ Licensee’s use of the Software in violation of Human Rights Laws or
95
+ Human Rights Principles.
96
+ * Failure to Comply. Any failure of Licensee to act according to the
97
+ terms and conditions of this License is both a breach of the License and
98
+ an infringement of the intellectual property rights of the Licensor
99
+ (subject to exceptions under Laws, e.g., fair use). In the event of a
100
+ breach or infringement, the terms and conditions of this License may be
101
+ enforced by Licensor under the Laws of any jurisdiction to which
102
+ Licensee is subject. Licensee also agrees that the Licensor may enforce
103
+ the terms and conditions of this License against Licensee through
104
+ specific performance (or similar remedy under Laws) to the extent
105
+ permitted by Laws. For clarity, except in the event of a breach of this
106
+ License, infringement, or as otherwise stated in this License, Licensor
107
+ may not terminate this License with Licensee.
108
+ * Enforceability and Interpretation. If any term or provision of this
109
+ License is determined to be invalid, illegal, or unenforceable by a
110
+ court of competent jurisdiction, then such invalidity, illegality, or
111
+ unenforceability shall not affect any other term or provision of this
112
+ License or invalidate or render unenforceable such term or provision in
113
+ any other jurisdiction; provided, however, subject to a court
114
+ modification pursuant to the immediately following sentence, if any term
115
+ or provision of this License pertaining to Human Rights Laws or Human
116
+ Rights Principles is deemed invalid, illegal, or unenforceable against
117
+ Licensee by a court of competent jurisdiction, all rights in the
118
+ Software granted to Licensee shall be deemed null and void as between
119
+ Licensor and Licensee. Upon a determination that any term or provision
120
+ is invalid, illegal, or unenforceable, to the extent permitted by Laws,
121
+ the court may modify this License to affect the original purpose that
122
+ the Software be used in compliance with Human Rights Principles and
123
+ Human Rights Laws as closely as possible. The language in this License
124
+ shall be interpreted as to its fair meaning and not strictly for or
125
+ against any party.
126
+ * Disclaimer. TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE COMES
127
+ "AS IS," WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR AND
128
+ ANY OTHER CONTRIBUTOR SHALL NOT BE LIABLE TO ANYONE FOR ANY DAMAGES OR
129
+ OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE
130
+ OR THIS LICENSE, UNDER ANY KIND OF LEGAL CLAIM.
131
+
132
+ This Hippocratic License is an link:https://ethicalsource.dev[Ethical Source license] and is offered
133
+ for use by licensors and licensees at their own risk, on an "AS IS" basis, and with no warranties
134
+ express or implied, to the maximum extent permitted by Laws.
data/README.adoc ADDED
@@ -0,0 +1,87 @@
1
+ :toc: macro
2
+ :toclevels: 5
3
+ :figure-caption!:
4
+
5
+ = Seaport
6
+
7
+ toc::[]
8
+
9
+ == Features
10
+
11
+ == Requirements
12
+
13
+ . link:https://www.ruby-lang.org[Ruby].
14
+
15
+ == Setup
16
+
17
+ To install _with_ security, run:
18
+
19
+ [source,bash]
20
+ ----
21
+ # 💡 Skip this line if you already have the public certificate installed.
22
+ gem cert --add <(curl --compressed --location https://undefined.io/gems.pem)
23
+ gem install seaport --trust-policy HighSecurity
24
+ ----
25
+
26
+ To install _without_ security, run:
27
+
28
+ [source,bash]
29
+ ----
30
+ gem install seaport
31
+ ----
32
+
33
+ You can also add the gem directly to your project:
34
+
35
+ [source,bash]
36
+ ----
37
+ bundle add seaport
38
+ ----
39
+
40
+ Once the gem is installed, you only need to require it:
41
+
42
+ [source,ruby]
43
+ ----
44
+ require "seaport"
45
+ ----
46
+
47
+ == Usage
48
+
49
+ == Development
50
+
51
+ To contribute, run:
52
+
53
+ [source,bash]
54
+ ----
55
+ git clone https://github.com/undefined/seaport
56
+ cd seaport
57
+ bin/setup
58
+ ----
59
+
60
+ You can also use the IRB console for direct access to all objects:
61
+
62
+ [source,bash]
63
+ ----
64
+ bin/console
65
+ ----
66
+
67
+ == Tests
68
+
69
+ To test, run:
70
+
71
+ [source,bash]
72
+ ----
73
+ bin/rake
74
+ ----
75
+
76
+ == link:https://undefined.io/policies/license[License]
77
+
78
+ == link:https://undefined.io/policies/security[Security]
79
+
80
+ == link:https://undefined.io/policies/contributions[Contributions]
81
+
82
+ == link:https://undefined.io/projects/seaport/versions[Versions]
83
+
84
+ == Credits
85
+
86
+ * Built with link:https://alchemists.io/projects/gemsmith[Gemsmith].
87
+ * Engineered by link:https://undefined.io/team/undefined[Josef Strzibny].
data/exe/seaport ADDED
@@ -0,0 +1,6 @@
1
+ #! /usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "seaport"
5
+
6
+ Seaport::CLI::Shell.new.call
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "sod"
4
+
5
+ module Seaport
6
+ module CLI
7
+ # The main Command Line Interface (CLI) object.
8
+ class Shell
9
+ include Import[:defaults_path, :xdg_config, :specification]
10
+
11
+ def initialize(context: Sod::Context, dsl: Sod, **)
12
+ super(**)
13
+ @context = context
14
+ @dsl = dsl
15
+ end
16
+
17
+ def call(...) = cli.call(...)
18
+
19
+ private
20
+
21
+ attr_reader :context, :dsl
22
+
23
+ def cli
24
+ context = build_context
25
+
26
+ dsl.new :seaport, banner: specification.banner do
27
+ on(Sod::Prefabs::Commands::Config, context:)
28
+ on(Sod::Prefabs::Actions::Version, context:)
29
+ on Sod::Prefabs::Actions::Help, self
30
+ end
31
+ end
32
+
33
+ def build_context
34
+ context[defaults_path:, xdg_config:, version_label: specification.labeled_version]
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/schema"
4
+
5
+ Dry::Schema.load_extensions :monads
6
+
7
+ module Seaport
8
+ module Configuration
9
+ Contract = Dry::Schema.Params
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ todo: "Add your own attributes here."
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seaport
4
+ module Configuration
5
+ # Defines the configuration model for use throughout the gem.
6
+ Model = Struct.new
7
+ end
8
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cogger"
4
+ require "containable"
5
+ require "etcher"
6
+ require "runcom"
7
+ require "spek"
8
+
9
+ module Seaport
10
+ # Provides a global gem container for injection into other objects.
11
+ module Container
12
+ extend Containable
13
+
14
+ register :registry do
15
+ Etcher::Registry.new(contract: Configuration::Contract, model: Configuration::Model)
16
+ .add_loader(:yaml, self[:defaults_path])
17
+ .add_loader(:yaml, self[:xdg_config].active)
18
+ end
19
+
20
+ register(:settings) { Etcher.call(self[:registry]).dup }
21
+ register(:specification) { Spek::Loader.call "#{__dir__}/../../seaport.gemspec" }
22
+ register(:defaults_path) { Pathname(__dir__).join("configuration/defaults.yml") }
23
+ register(:xdg_config) { Runcom::Config.new "seaport/configuration.yml" }
24
+ register(:logger) { Cogger.new id: "seaport" }
25
+ register :io, STDOUT
26
+ end
27
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "infusible"
4
+
5
+ module Seaport
6
+ Import = Infusible[Container]
7
+ end
data/lib/seaport.rb ADDED
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "zeitwerk"
4
+
5
+ Zeitwerk::Loader.new.then do |loader|
6
+ loader.inflector.inflect "cli" => "CLI"
7
+ loader.tag = File.basename __FILE__, ".rb"
8
+ loader.push_dir __dir__
9
+ loader.setup
10
+ end
11
+
12
+ # Main namespace.
13
+ module Seaport
14
+ def self.loader registry = Zeitwerk::Registry
15
+ @loader ||= registry.loaders.find { |loader| loader.tag == File.basename(__FILE__, ".rb") }
16
+ end
17
+ end
data/seaport.gemspec ADDED
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "seaport"
5
+ spec.version = "0.0.0"
6
+ spec.authors = ["Josef Strzibny"]
7
+ spec.email = ["strzibny@strzibny.name"]
8
+ spec.homepage = "https://strzibny.name/seaport"
9
+ spec.summary = ""
10
+ spec.license = "Hippocratic-2.1"
11
+
12
+ spec.metadata = {
13
+ "bug_tracker_uri" => "https://github.com/undefined/seaport/issues",
14
+ "changelog_uri" => "https://undefined.io/projects/seaport/versions",
15
+ "homepage_uri" => "https://undefined.io/projects/seaport",
16
+ "funding_uri" => "https://github.com/sponsors/undefined",
17
+ "label" => "Seaport",
18
+ "rubygems_mfa_required" => "true",
19
+ "source_code_uri" => "https://github.com/undefined/seaport"
20
+ }
21
+
22
+ # spec.signing_key = Gem.default_key_path
23
+ # spec.cert_chain = [Gem.default_cert_path]
24
+
25
+ spec.required_ruby_version = "~> 3.3"
26
+ spec.add_dependency "cogger", "~> 0.31"
27
+ spec.add_dependency "containable", "~> 0.2"
28
+ spec.add_dependency "dry-monads", "~> 1.6"
29
+ spec.add_dependency "etcher", "~> 2.7"
30
+ spec.add_dependency "infusible", "~> 3.12"
31
+ spec.add_dependency "refinements", "~> 12.10"
32
+ spec.add_dependency "runcom", "~> 11.10"
33
+ spec.add_dependency "sod", "~> 0.20"
34
+ spec.add_dependency "spek", "~> 3.0"
35
+ spec.add_dependency "zeitwerk", "~> 2.7"
36
+
37
+ spec.bindir = "exe"
38
+ spec.executables << "seaport"
39
+ spec.extra_rdoc_files = Dir["README*", "LICENSE*"]
40
+ spec.files = Dir["*.gemspec", "lib/**/*"]
41
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: seaport
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Josef Strzibny
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-11-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cogger
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.31'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.31'
27
+ - !ruby/object:Gem::Dependency
28
+ name: containable
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dry-monads
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.6'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: etcher
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: infusible
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.12'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.12'
83
+ - !ruby/object:Gem::Dependency
84
+ name: refinements
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '12.10'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '12.10'
97
+ - !ruby/object:Gem::Dependency
98
+ name: runcom
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '11.10'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '11.10'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sod
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.20'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.20'
125
+ - !ruby/object:Gem::Dependency
126
+ name: spek
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: zeitwerk
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.7'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.7'
153
+ description:
154
+ email:
155
+ - strzibny@strzibny.name
156
+ executables:
157
+ - seaport
158
+ extensions: []
159
+ extra_rdoc_files:
160
+ - README.adoc
161
+ - LICENSE.adoc
162
+ files:
163
+ - LICENSE.adoc
164
+ - README.adoc
165
+ - exe/seaport
166
+ - lib/seaport.rb
167
+ - lib/seaport/cli/shell.rb
168
+ - lib/seaport/configuration/contract.rb
169
+ - lib/seaport/configuration/defaults.yml
170
+ - lib/seaport/configuration/model.rb
171
+ - lib/seaport/container.rb
172
+ - lib/seaport/import.rb
173
+ - seaport.gemspec
174
+ homepage: https://strzibny.name/seaport
175
+ licenses:
176
+ - Hippocratic-2.1
177
+ metadata:
178
+ bug_tracker_uri: https://github.com/undefined/seaport/issues
179
+ changelog_uri: https://undefined.io/projects/seaport/versions
180
+ homepage_uri: https://undefined.io/projects/seaport
181
+ funding_uri: https://github.com/sponsors/undefined
182
+ label: Seaport
183
+ rubygems_mfa_required: 'true'
184
+ source_code_uri: https://github.com/undefined/seaport
185
+ post_install_message:
186
+ rdoc_options: []
187
+ require_paths:
188
+ - lib
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '3.3'
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ requirements: []
200
+ rubygems_version: 3.5.16
201
+ signing_key:
202
+ specification_version: 4
203
+ summary: ''
204
+ test_files: []