gem_generator 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8f6652896d539c126a338591546a05a6c4ac65009eb9fd9add79ffce31412cc0
4
+ data.tar.gz: d8f5b3dd52a7f98cd2d548281cc50070de63d2ea308e53acb254ec71ee700dcc
5
+ SHA512:
6
+ metadata.gz: 14987f158b13c559f9f77846abbee7b15da524c76d77cb8eec965461a59a34255c4fe503336f65483c69b91ae31f23114dce5c5bbe4d6b08652acede07cf1302
7
+ data.tar.gz: a4d5a7cab7d3ca9e7fd8ea2266052bebb0450f6276414ac8c681241ef6ffcd45471f30ec2eb0872a4a9cca3ca5ca583fe225661d34a1577ca3d7b067bb167ed2
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.1.0 (2021-10-05)
6
+
7
+ * Initial release.
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 Alexander Popov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # Gem Generator
2
+
3
+ [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/AlexWayfer/gem_generator?style=flat-square)](https://cirrus-ci.com/github/AlexWayfer/gem_generator)
4
+ [![Codecov branch](https://img.shields.io/codecov/c/github/AlexWayfer/gem_generator/main.svg?style=flat-square)](https://codecov.io/gh/AlexWayfer/gem_generator)
5
+ [![Code Climate](https://img.shields.io/codeclimate/maintainability/AlexWayfer/gem_generator.svg?style=flat-square)](https://codeclimate.com/github/AlexWayfer/gem_generator)
6
+ [![Depfu](https://img.shields.io/depfu/AlexWayfer/gem_generator?style=flat-square)](https://depfu.com/repos/github/AlexWayfer/gem_generator)
7
+ [![Inline docs](https://inch-ci.org/github/AlexWayfer/gem_generator.svg?branch=main)](https://inch-ci.org/github/AlexWayfer/gem_generator)
8
+ [![license](https://img.shields.io/github/license/AlexWayfer/gem_generator.svg?style=flat-square)](LICENSE.txt)
9
+ [![Gem](https://img.shields.io/gem/v/gem_generator.svg?style=flat-square)](https://rubygems.org/gems/gem_generator)
10
+
11
+ Gem for new gems generation.
12
+
13
+ It was created for myself, but you can suggest options for generation to adopt it for your usage.
14
+
15
+ ## Installation
16
+
17
+ Install it globally:
18
+
19
+ ```shell
20
+ gem install gem_generator
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ ```sh
26
+ gem_generator --namespace=github_nickname name_of_a_new_gem
27
+ ```
28
+
29
+ You can create a config file, `.gem_generator.yaml` (or `.yml`) like this:
30
+
31
+ ```yaml
32
+ ## This can be overwriten via `--namespace` CLI option, config just as default
33
+ :namespace: AlexWayfer
34
+
35
+ ## These options have defaults from `git config --get user.*`
36
+ # :author:
37
+ # :name: Alexander Popov
38
+ # :email: alex.wayfer@gmail.com
39
+ ```
40
+
41
+ Gem Generator will look for it in each directory from current to the root,
42
+ so the common place for it in the home directory, but you can redefine it,
43
+ for example, in some directory for work projects.
44
+
45
+ ## Template creation
46
+
47
+
48
+
49
+ ## Development
50
+
51
+ After checking out the repo, run `bundle install` to install dependencies.
52
+
53
+ Then, run `toys rspec` to run the tests.
54
+
55
+ To install this gem onto your local machine, run `toys gem install`.
56
+
57
+ To release a new version, run `toys gem release %version%`.
58
+ See how it works [here](https://github.com/AlexWayfer/gem_toys#release).
59
+
60
+ ## Contributing
61
+
62
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/AlexWayfer/gem_generator).
63
+
64
+ ## License
65
+
66
+ The gem is available as open source under the terms of the
67
+ [MIT License](https://opensource.org/licenses/MIT).
data/exe/gem_generator ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require_relative '../lib/gem_generator/command'
6
+
7
+ GemGenerator::Command.run
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'clamp'
4
+ require 'erb'
5
+ require 'fileutils'
6
+ require 'pathname'
7
+
8
+ require_relative 'render_variables'
9
+
10
+ ## https://github.com/mdub/clamp#allowing-options-after-parameters
11
+ Clamp.allow_options_after_parameters = true
12
+
13
+ module GemGenerator
14
+ ## Main CLI command for Gem Generator
15
+ class Command < Clamp::Command
16
+ parameter 'NAME', 'name of a new gem'
17
+ parameter 'TEMPLATE', 'template path of a new gem'
18
+
19
+ option ['-n', '--namespace'], 'NAME', 'use NAME as repository namespace'
20
+ option ['-i', '--indentation'], 'TYPE', 'type of indentation (tabs or spaces)',
21
+ default: 'tabs' do |value|
22
+ ## TODO: Add something like `:variants` to Clamp
23
+ unless %w[tabs spaces].include? value
24
+ raise ArgumentError, 'Only `tabs` or `spaces` values acceptable'
25
+ end
26
+
27
+ value
28
+ end
29
+
30
+ attr_reader(
31
+ :path, :title, :modules, :version_constant, :github_path, :github_uri,
32
+ :author_name, :author_email
33
+ )
34
+
35
+ def execute
36
+ @directory = File.expand_path name
37
+
38
+ signal_usage_error 'the target directory already exists' if Dir.exist? @directory
39
+
40
+ ## Prevent error like '"FIXME" or "TODO" is not a description' for `bundle install`
41
+ @summary = ask_for_summary
42
+
43
+ copy_files
44
+
45
+ render_files_and_file_names
46
+
47
+ install_dependencies
48
+
49
+ ## If there is no `gem_generator` config — `render` asks `git config`
50
+ ## Also do `git add .` after all renders
51
+ initialize_git
52
+
53
+ puts 'Done.'
54
+
55
+ puts <<~HELP
56
+ To checkout into a new directory:
57
+ cd #{name}
58
+ HELP
59
+ end
60
+
61
+ private
62
+
63
+ def ask_for_summary
64
+ require 'readline'
65
+
66
+ puts 'Please, write a summary for the gem:'
67
+
68
+ result = Readline.readline('> ', true)
69
+
70
+ puts <<~TEXT
71
+
72
+ Thank you! You can write more detailed description later for `spec.description` and `README.md`.
73
+
74
+ TEXT
75
+
76
+ ## Give a time to read the hint about description
77
+ # sleep 3
78
+
79
+ result
80
+ end
81
+
82
+ def copy_files
83
+ puts 'Copying files...'
84
+
85
+ FileUtils.cp_r template, @directory
86
+
87
+ FileUtils.rm_rf "#{@directory}/.git"
88
+ end
89
+
90
+ def rename_files
91
+ puts 'Renaming files...'
92
+
93
+ { 'gem_name' => @render_variables.name, 'gem_path' => @render_variables.path }
94
+ .each do |template_name, real_name|
95
+ Dir["#{@directory}/**/*#{template_name}*"].each do |file_name|
96
+ new_file_name =
97
+ @directory + file_name.delete_prefix(@directory).gsub(template_name, real_name)
98
+
99
+ FileUtils.mkdir_p File.dirname new_file_name
100
+
101
+ File.rename file_name, new_file_name
102
+ end
103
+ end
104
+ end
105
+
106
+ def render_files_and_file_names
107
+ @render_variables = RenderVariables.new name, namespace, indentation, @summary
108
+
109
+ rename_files
110
+
111
+ begin
112
+ render_files
113
+ rescue SystemExit, Clamp::UsageError => e
114
+ FileUtils.rm_r @directory
115
+ raise e
116
+ end
117
+ end
118
+
119
+ def render_files
120
+ puts 'Rendering files...'
121
+
122
+ Dir.glob("#{@directory}/**/*.erb", File::FNM_DOTMATCH).each do |template_file|
123
+ ## Read a template file content and render it
124
+ content =
125
+ ERB.new(File.read(template_file), trim_mode: '-').result(@render_variables.get_binding)
126
+
127
+ ## Replace tabs with spaces if necessary
128
+ ## TODO: Get spaces count from `.editorconfig` file
129
+ content.gsub!(/^\t+/) { |tabs| ' ' * tabs.count("\t") } if indentation == 'spaces'
130
+
131
+ ## Render variables in file name
132
+ real_pathname = Pathname.new(template_file).sub_ext('')
133
+
134
+ ## Rename template file
135
+ File.rename template_file, real_pathname
136
+
137
+ ## Update file content
138
+ File.write real_pathname, content
139
+ end
140
+ end
141
+
142
+ def initialize_git
143
+ puts 'Initializing git...'
144
+
145
+ Dir.chdir name do
146
+ system 'git init'
147
+ system 'git add .'
148
+ end
149
+ end
150
+
151
+ def install_dependencies
152
+ puts 'Installing dependencies...'
153
+
154
+ Dir.chdir name do
155
+ system 'bundle update'
156
+
157
+ system 'npm install' if File.exist? 'package.json'
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require 'memery'
5
+ require 'gorilla_patch/blank'
6
+ require 'gorilla_patch/inflections'
7
+
8
+ module GemGenerator
9
+ ## Class for a single object which should be a scope in render
10
+ class RenderVariables
11
+ include Memery
12
+
13
+ using GorillaPatch::Blank
14
+ using GorillaPatch::Inflections
15
+
16
+ attr_reader :name, :indentation, :summary
17
+
18
+ def initialize(name, namespace_option, indentation, summary)
19
+ @name = name
20
+ @namespace_option = namespace_option
21
+ @indentation = indentation
22
+ @summary = summary
23
+ end
24
+
25
+ ## `public :binding` and `send :binding` return caller binding
26
+ ## This is from ERB documentation: https://ruby-doc.org/core-2.7.2/Binding.html
27
+ # rubocop:disable Naming/AccessorMethodName
28
+ def get_binding
29
+ binding
30
+ end
31
+ # rubocop:enable Naming/AccessorMethodName
32
+
33
+ memoize def summary_quotes
34
+ summary.include?("'") ? '"' : "'"
35
+ end
36
+
37
+ memoize def description
38
+ summary.match?(/[.?!]$/) ? summary : "#{summary}."
39
+ end
40
+
41
+ memoize def path
42
+ name.tr('-', '/')
43
+ end
44
+
45
+ memoize def title
46
+ name.split(/[-_]/).map(&:camelize).join(' ')
47
+ end
48
+
49
+ memoize def module_name
50
+ path.camelize
51
+ end
52
+
53
+ memoize def modules
54
+ module_name.split('::')
55
+ end
56
+
57
+ memoize def version_constant
58
+ "#{module_name}::VERSION"
59
+ end
60
+
61
+ memoize def github_path
62
+ "#{github_namespace}/#{name}"
63
+ end
64
+
65
+ memoize def github_namespace_uri
66
+ "https://github.com/#{github_namespace}"
67
+ end
68
+
69
+ memoize def github_uri
70
+ "https://github.com/#{github_path}"
71
+ end
72
+
73
+ EXAMPLE_VALUES = {
74
+ name: 'My Name',
75
+ email: 'my.email@example.com'
76
+ }.freeze
77
+ private_constant :EXAMPLE_VALUES
78
+
79
+ %i[name email].each do |property|
80
+ method_name = "author_#{property}"
81
+
82
+ define_method method_name do
83
+ result = config.dig(:author, property) || `git config --get user.#{property}`.chomp
84
+
85
+ return result unless result.blank?
86
+
87
+ abort <<~TEXT
88
+ You have to specify project's author #{property}.
89
+ You can use `git config user.#{property} "#{EXAMPLE_VALUES[property]}"`, or create a configuration file.
90
+ Check the README.
91
+ TEXT
92
+ end
93
+
94
+ memoize method_name
95
+ end
96
+
97
+ private
98
+
99
+ memoize def github_namespace
100
+ result = @namespace_option || config[:namespace]
101
+
102
+ return result unless result.blank?
103
+
104
+ abort <<~TEXT
105
+ You have to specify project's namespace on GitHub.
106
+ You can use `--namespace` option, or create a configuration file.
107
+ Check the README.
108
+ TEXT
109
+ end
110
+
111
+ memoize def config
112
+ config_file = find_config_file
113
+ return {} unless config_file
114
+
115
+ YAML.load_file config_file
116
+ end
117
+
118
+ def find_config_file
119
+ config_lookup_directory = Dir.getwd
120
+
121
+ until (
122
+ config_file = Dir.glob(
123
+ File.join(config_lookup_directory, '.gem_generator.y{a,}ml'), File::FNM_DOTMATCH
124
+ ).first
125
+ ) || config_lookup_directory == '/'
126
+ config_lookup_directory = File.dirname config_lookup_directory
127
+ end
128
+
129
+ config_file
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GemGenerator
4
+ VERSION = '0.1.0'
5
+ end
metadata ADDED
@@ -0,0 +1,270 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gem_generator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Popov
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-10-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: alt_memery
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: clamp
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: gorilla_patch
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: gem_toys
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.9.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.9.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: toys
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.12.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.12.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: bundler-audit
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.9.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.9.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: ffaker
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2.19'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2.19'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.9'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.9'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.21.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.21.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: simplecov-cobertura
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.4'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.4'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 1.22.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 1.22.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop-performance
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rubocop-rspec
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '2.0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '2.0'
223
+ description: 'Generator for gems.
224
+
225
+ '
226
+ email:
227
+ - alex.wayfer@gmail.com
228
+ executables:
229
+ - gem_generator
230
+ extensions: []
231
+ extra_rdoc_files: []
232
+ files:
233
+ - CHANGELOG.md
234
+ - LICENSE.txt
235
+ - README.md
236
+ - exe/gem_generator
237
+ - lib/gem_generator/command.rb
238
+ - lib/gem_generator/render_variables.rb
239
+ - lib/gem_generator/version.rb
240
+ homepage: https://github.com/AlexWayfer/gem_generator
241
+ licenses:
242
+ - MIT
243
+ metadata:
244
+ bug_tracker_uri: https://github.com/AlexWayfer/gem_generator/issues
245
+ changelog_uri: https://github.com/AlexWayfer/gem_generator/blob/v0.1.0/CHANGELOG.md
246
+ homepage_uri: https://github.com/AlexWayfer/gem_generator
247
+ source_code_uri: https://github.com/AlexWayfer/gem_generator
248
+ post_install_message:
249
+ rdoc_options: []
250
+ require_paths:
251
+ - lib
252
+ required_ruby_version: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: '2.6'
257
+ - - "<"
258
+ - !ruby/object:Gem::Version
259
+ version: '4'
260
+ required_rubygems_version: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ requirements: []
266
+ rubygems_version: 3.2.22
267
+ signing_key:
268
+ specification_version: 4
269
+ summary: Generator for gems
270
+ test_files: []