rubysmith 0.13.0 → 0.14.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 +4 -4
- checksums.yaml.gz.sig +2 -4
- data/README.adoc +88 -32
- data/lib/rubysmith/builders/bundler.rb +1 -1
- data/lib/rubysmith/builders/circle_ci.rb +26 -0
- data/lib/rubysmith/builders/documentation/change.rb +32 -0
- data/lib/rubysmith/builders/documentation/conduct.rb +32 -0
- data/lib/rubysmith/builders/documentation/contribution.rb +32 -0
- data/lib/rubysmith/builders/documentation/license.rb +36 -0
- data/lib/rubysmith/builders/documentation/readme.rb +44 -0
- data/lib/rubysmith/builders/git_hub.rb +34 -0
- data/lib/rubysmith/cli/actions/build.rb +7 -1
- data/lib/rubysmith/cli/configuration/content.rb +26 -7
- data/lib/rubysmith/cli/configuration/defaults.yml +13 -6
- data/lib/rubysmith/cli/configuration/enhancers/current_time.rb +26 -0
- data/lib/rubysmith/cli/configuration/enhancers/git_hub_user.rb +33 -0
- data/lib/rubysmith/cli/configuration/enhancers/version.rb +26 -0
- data/lib/rubysmith/cli/configuration/loader.rb +13 -5
- data/lib/rubysmith/cli/parsers/build.rb +145 -21
- data/lib/rubysmith/cli/parsers/core.rb +1 -1
- data/lib/rubysmith/cli/shell.rb +4 -2
- data/lib/rubysmith/identity.rb +1 -1
- data/lib/rubysmith/templates/%project_name%/.circleci/config.yml.erb +31 -0
- data/lib/rubysmith/templates/%project_name%/.github/ISSUE_TEMPLATE.md.erb +14 -0
- data/lib/rubysmith/templates/%project_name%/.github/PULL_REQUEST_TEMPLATE.md.erb +11 -0
- data/lib/rubysmith/templates/%project_name%/Gemfile.erb +7 -4
- data/lib/rubysmith/templates/%project_name%/README.adoc.erb +4 -0
- data/lib/rubysmith/templates/%project_name%/README.md.erb +3 -0
- data/lib/rubysmith.rb +4 -1
- data.tar.gz.sig +0 -0
- metadata +43 -3
- metadata.gz.sig +0 -0
- data/lib/rubysmith/builders/documentation.rb +0 -57
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '0803a284b4191d1a3e08664747ddbb8bc743529a93d8d7f393b21dc0b488bead'
|
|
4
|
+
data.tar.gz: 1769e77743e2d90d262fc609dc0ca80a3b60f53400e977bde321d5b0b24e8e9a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b1e9a371e502cb7f14359b2d9c9c4ead3703f2c02b70864e192a1a894a4e5e046e8146d8698edc4ea89570edba94e610b2108a7736ce13341fd08dcd858e705a
|
|
7
|
+
data.tar.gz: 297b580c0a5c44a53d705d3b27f1f3da6590cd067da2d36d7bbbd630f5debb03aea8bd37e858ec79038f3db25cbe5cd28ec5406a6bd7f389ef6877aafd68c455
|
checksums.yaml.gz.sig
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
�P/�ߢ�h�=`�@�B��w,&zr�I���c�p1\=/�a Y�!^��h��Q�Z���1����Q
|
|
4
|
-
�4)�`I������8.`�(
|
|
1
|
+
��h0yO�rg���a�K��[2F��'�FcτY�ʵ>W5�QLJ }$�Dg���|:�P��ՈI�S�62o-�F� S���e5� ۩9�.�:�3��K�]���6ؗ��.}m:)�V��d(2O������A6ޢ���$�qڶ��̋3��.D�^�:�W&���+�j'o�E�+�4��i1-)ߡk����b��C1����W�z?��تX<
|
|
2
|
+
U�G�8�ŜXa��p-(Y��������jB��`�#
|
data/README.adoc
CHANGED
|
@@ -30,8 +30,10 @@ toc::[]
|
|
|
30
30
|
* Uses link:https://www.alchemists.io/projects/pragmater[Pragmater] for Ruby source pragma directives.
|
|
31
31
|
* Supports link:https://github.com/amazing-print/amazing_print[Amazing Print].
|
|
32
32
|
* Supports link:https://github.com/rubymem/bundler-leak[Bundler Leak].
|
|
33
|
+
* Supports link:https://circleci.com[Circle CI].
|
|
33
34
|
* Supports link:https://github.com/ruby/debug[Debug].
|
|
34
35
|
* Supports link:https://git-scm.com[Git].
|
|
36
|
+
* Supports link:https://github.com[GitHub].
|
|
35
37
|
* Supports link:https://www.alchemists.io/projects/git-lint[Git Lint].
|
|
36
38
|
* Supports link:https://github.com/guard/guard[Guard].
|
|
37
39
|
* Supports link:https://github.com/ruby/rake[Rake].
|
|
@@ -48,8 +50,8 @@ toc::[]
|
|
|
48
50
|
* Provides common documentation:
|
|
49
51
|
** README
|
|
50
52
|
** CHANGES
|
|
51
|
-
** CONTRIBUTING
|
|
52
53
|
** CODE OF CONDUCT
|
|
54
|
+
** CONTRIBUTING
|
|
53
55
|
** LICENSE
|
|
54
56
|
|
|
55
57
|
// == Screencasts
|
|
@@ -87,23 +89,30 @@ USAGE:
|
|
|
87
89
|
-v, --version Show gem version.
|
|
88
90
|
|
|
89
91
|
BUILD OPTIONS:
|
|
90
|
-
--[no-]amazing_print Add Amazing Print.
|
|
91
|
-
--[no-]bundler-leak Add Bundler Leak.
|
|
92
|
-
--[no-]
|
|
93
|
-
--[no-]
|
|
94
|
-
--[no-]
|
|
95
|
-
--[no-]
|
|
96
|
-
--[no-]
|
|
97
|
-
--[no-]
|
|
98
|
-
--
|
|
99
|
-
--[no-]
|
|
100
|
-
--[no-]
|
|
101
|
-
--[no-]
|
|
102
|
-
--[no-]
|
|
103
|
-
--
|
|
104
|
-
--
|
|
105
|
-
--[no-]
|
|
106
|
-
--[no-]
|
|
92
|
+
--[no-]amazing_print Add Amazing Print gem. Default: true.
|
|
93
|
+
--[no-]bundler-leak Add Bundler Leak gem. Default: true.
|
|
94
|
+
--[no-]changes Add CHANGES documentation. Default: true.
|
|
95
|
+
--[no-]circle_ci Add Circle CI configuration and badge. Default: false.
|
|
96
|
+
--[no-]conduct Add CODE_OF_CONDUCT documentation. Default: true.
|
|
97
|
+
--[no-]console Add console script. Default: true.
|
|
98
|
+
--[no-]contributions Add CONTRIBUTING documentation. Default: true.
|
|
99
|
+
--[no-]debug Add Debug gem. Default: true.
|
|
100
|
+
--[no-]git Add Git. Default: true.
|
|
101
|
+
--[no-]git_hub Add GitHub templates. Default: false.
|
|
102
|
+
--[no-]git-lint Add Git Lint gem. Default: true.
|
|
103
|
+
--[no-]guard Add Guard gem. Default: true.
|
|
104
|
+
--[no-]license Add LICENSE documentation. Default: true.
|
|
105
|
+
--max Use maximum/enabled options. Default: false.
|
|
106
|
+
--min Use minimum/disabled options. Default: false.
|
|
107
|
+
--[no-]rake Add Rake gem. Default: true.
|
|
108
|
+
--[no-]readme Add README documentation. Default: true.
|
|
109
|
+
--[no-]reek Add Reek gem. Default: true.
|
|
110
|
+
--[no-]refinements Add Refinements gem. Default: true.
|
|
111
|
+
--[no-]rspec Add RSpec gem. Default: true.
|
|
112
|
+
--[no-]rubocop Add Rubocop gems. Default: true.
|
|
113
|
+
--[no-]setup Add setup script. Default: true.
|
|
114
|
+
--[no-]simple_cov Add SimpleCov gem. Default: true.
|
|
115
|
+
--[no-]zeitwerk Add Zeitwerk gem. Default: true.
|
|
107
116
|
....
|
|
108
117
|
|
|
109
118
|
=== Building
|
|
@@ -137,19 +146,20 @@ The above is essentially the same as building with _all_ options disabled. This
|
|
|
137
146
|
situations where you need to quickly script something up for sharing with others yet still want to
|
|
138
147
|
avoid using a Bundler Inline script so gem dependencies are not installed each time the code is run.
|
|
139
148
|
|
|
140
|
-
As shown earlier, you can combine options but
|
|
141
|
-
|
|
149
|
+
As shown earlier, you can combine options but be aware that order matters. Take the following, for
|
|
150
|
+
example, where both minimum and maximum options are used in conjunction with other options:
|
|
142
151
|
|
|
143
152
|
[source,bash]
|
|
144
153
|
----
|
|
145
154
|
rubysmith --build demo --min --zeitwerk
|
|
155
|
+
rubysmith --build demo --max --no-debug
|
|
146
156
|
----
|
|
147
157
|
|
|
148
|
-
|
|
149
|
-
This can be a handy way to build a new
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
details).
|
|
158
|
+
With the above examples, the first line will _disable_ all options except for Zeitwerk while the
|
|
159
|
+
second line will _enable_ all options except for Debug. This can be a handy way to build a new
|
|
160
|
+
project with all options either disabled or enabled with only a few select options modified. To have
|
|
161
|
+
specific options enabled/disabled _every time_ you build a new Ruby project, you can edit your
|
|
162
|
+
global configuration for making these settings permanent (see below for details).
|
|
153
163
|
|
|
154
164
|
=== Configuration
|
|
155
165
|
|
|
@@ -160,9 +170,7 @@ $HOME/.config/rubysmith/configuration.yml
|
|
|
160
170
|
....
|
|
161
171
|
|
|
162
172
|
It can also be configured via link:https://www.alchemists.io/projects/xdg[XDG] environment
|
|
163
|
-
variables.
|
|
164
|
-
|
|
165
|
-
The default configuration is as follows:
|
|
173
|
+
variables. The default configuration is as follows:
|
|
166
174
|
|
|
167
175
|
[source,yaml]
|
|
168
176
|
----
|
|
@@ -170,20 +178,24 @@ The default configuration is as follows:
|
|
|
170
178
|
:name:
|
|
171
179
|
:email:
|
|
172
180
|
:url:
|
|
173
|
-
:documentation:
|
|
174
|
-
:format: "md"
|
|
175
|
-
:license: "mit"
|
|
176
181
|
:build:
|
|
177
182
|
:amazing_print: true
|
|
178
183
|
:bundler_leak: true
|
|
184
|
+
:changes: true
|
|
185
|
+
:circle_ci: false
|
|
186
|
+
:conduct: true
|
|
179
187
|
:console: true
|
|
188
|
+
:contributions: true
|
|
180
189
|
:debug: true
|
|
181
|
-
:documentation: true
|
|
182
190
|
:git: true
|
|
191
|
+
:git_hub: false
|
|
183
192
|
:git_lint: true
|
|
184
193
|
:guard: true
|
|
194
|
+
:license: true
|
|
195
|
+
:maximum: false
|
|
185
196
|
:minimum: false
|
|
186
197
|
:rake: true
|
|
198
|
+
:readme: true
|
|
187
199
|
:reek: true
|
|
188
200
|
:refinements: true
|
|
189
201
|
:rspec: true
|
|
@@ -203,11 +215,55 @@ The default configuration is as follows:
|
|
|
203
215
|
- "**/*Gemfile"
|
|
204
216
|
- "**/*Guardfile"
|
|
205
217
|
- "**/*Rakefile"
|
|
218
|
+
:documentation:
|
|
219
|
+
:format: "md"
|
|
220
|
+
:license: "mit"
|
|
221
|
+
:git_hub:
|
|
222
|
+
:user:
|
|
206
223
|
----
|
|
207
224
|
|
|
208
225
|
Feel free to take this default configuration, modify, and save as your own custom
|
|
209
226
|
`configuration.yml`.
|
|
210
227
|
|
|
228
|
+
==== Author
|
|
229
|
+
|
|
230
|
+
Author information is used when generating project documentation and is recommended you fill this
|
|
231
|
+
information in before building a project. Example:
|
|
232
|
+
|
|
233
|
+
:author:
|
|
234
|
+
:name: Jill Smith
|
|
235
|
+
:email: jsmith@example.com
|
|
236
|
+
:url: https://www.exmaple.com/team/jsmith
|
|
237
|
+
|
|
238
|
+
==== Build
|
|
239
|
+
|
|
240
|
+
Build options are booleans so can only be `true` or `false` by default. Should you want a different
|
|
241
|
+
configuration than what is enabled/disabled by default, you'll want to customize these options as
|
|
242
|
+
you see fit. When changing build options, they will dynamically show up when viewing usage (i.e.
|
|
243
|
+
`rubysmith --help`).
|
|
244
|
+
|
|
245
|
+
==== Builders
|
|
246
|
+
|
|
247
|
+
Builders are additional tooling which can be configured specifically for Rubysmith. At the moment,
|
|
248
|
+
only link:https://www.alchemists.io/projects/pragmater[Pragmater] is supported so view the Pragmater
|
|
249
|
+
project page to learn more.
|
|
250
|
+
|
|
251
|
+
==== Documentation
|
|
252
|
+
|
|
253
|
+
Documentation can be configured as follows:
|
|
254
|
+
|
|
255
|
+
* *Format*: Use `md` for Markdown or `adoc` for ASCCI Doc.
|
|
256
|
+
* *License*: Use `mit` for MIT or `Apache` for Apache 2.0.0 license.
|
|
257
|
+
|
|
258
|
+
No other licenses are supported at this time but might be expanded up on in the future.
|
|
259
|
+
|
|
260
|
+
==== GitHub
|
|
261
|
+
|
|
262
|
+
Your GitHub user is whatever handle you setup when you creating your GitHub account. This
|
|
263
|
+
information is used for documentation purposes and Circle CI badge association. If you don't define
|
|
264
|
+
this information, Rubysmith will automatically fallback to pulling this information from your Git
|
|
265
|
+
configuration (i.e. `github.user`). If all else fails, then nothing will be used.
|
|
266
|
+
|
|
211
267
|
== Development
|
|
212
268
|
|
|
213
269
|
To contribute, run:
|
|
@@ -25,7 +25,7 @@ module Rubysmith
|
|
|
25
25
|
.replace(/\n\s+gem/, "\n gem")
|
|
26
26
|
.replace(/ (?=.+(refinements|zeitwerk))/, "")
|
|
27
27
|
.replace(/(\n+|\s+)end/, "\nend")
|
|
28
|
-
.replace(/\n\ngroup :(code_quality|test|tools) do\nend/, "")
|
|
28
|
+
.replace(/\n\ngroup :(code_quality|development|test|tools) do\nend/, "")
|
|
29
29
|
.replace(/org"\n+/, "org\"\n\n")
|
|
30
30
|
|
|
31
31
|
configuration.project_root.change_dir { client.start %w[install --quiet] }
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rubysmith
|
|
4
|
+
module Builders
|
|
5
|
+
# Builds project skeleton Circle CI configuration.
|
|
6
|
+
class CircleCI
|
|
7
|
+
def self.call(...) = new(...).call
|
|
8
|
+
|
|
9
|
+
def initialize configuration, builder: Builder
|
|
10
|
+
@configuration = configuration
|
|
11
|
+
@builder = builder
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def call
|
|
15
|
+
return unless configuration.build_circle_ci
|
|
16
|
+
|
|
17
|
+
builder.call(configuration.with(template_path: "%project_name%/.circleci/config.yml.erb"))
|
|
18
|
+
.render
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
attr_reader :configuration, :builder
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "tocer"
|
|
4
|
+
|
|
5
|
+
module Rubysmith
|
|
6
|
+
module Builders
|
|
7
|
+
module Documentation
|
|
8
|
+
# Builds project skeleton CHANGES documentation.
|
|
9
|
+
class Change
|
|
10
|
+
def self.call(...) = new(...).call
|
|
11
|
+
|
|
12
|
+
def initialize configuration, builder: Builder
|
|
13
|
+
@configuration = configuration
|
|
14
|
+
@builder = builder
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call
|
|
18
|
+
return unless configuration.build_changes
|
|
19
|
+
|
|
20
|
+
builder.call(configuration.with(template_path: "%project_name%/CHANGES.#{kind}.erb"))
|
|
21
|
+
.render
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :configuration, :builder
|
|
27
|
+
|
|
28
|
+
def kind = configuration.documentation_format || "md"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "tocer"
|
|
4
|
+
|
|
5
|
+
module Rubysmith
|
|
6
|
+
module Builders
|
|
7
|
+
module Documentation
|
|
8
|
+
# Builds project skeleton CODE_OF_CONDUCT documentation.
|
|
9
|
+
class Conduct
|
|
10
|
+
def self.call(...) = new(...).call
|
|
11
|
+
|
|
12
|
+
def initialize configuration, builder: Builder
|
|
13
|
+
@configuration = configuration
|
|
14
|
+
@builder = builder
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call
|
|
18
|
+
return unless configuration.build_conduct
|
|
19
|
+
|
|
20
|
+
configuration.with(template_path: "%project_name%/CODE_OF_CONDUCT.#{kind}.erb")
|
|
21
|
+
.then { |updated_configuration| builder.call(updated_configuration).render }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :configuration, :builder
|
|
27
|
+
|
|
28
|
+
def kind = configuration.documentation_format || "md"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "tocer"
|
|
4
|
+
|
|
5
|
+
module Rubysmith
|
|
6
|
+
module Builders
|
|
7
|
+
module Documentation
|
|
8
|
+
# Builds project skeleton CONTRIBUTING documentation.
|
|
9
|
+
class Contribution
|
|
10
|
+
def self.call(...) = new(...).call
|
|
11
|
+
|
|
12
|
+
def initialize configuration, builder: Builder
|
|
13
|
+
@configuration = configuration
|
|
14
|
+
@builder = builder
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call
|
|
18
|
+
return unless configuration.build_contributions
|
|
19
|
+
|
|
20
|
+
builder.call(configuration.with(template_path: "%project_name%/CONTRIBUTING.#{kind}.erb"))
|
|
21
|
+
.render
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :configuration, :builder
|
|
27
|
+
|
|
28
|
+
def kind = configuration.documentation_format || "md"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "tocer"
|
|
4
|
+
|
|
5
|
+
module Rubysmith
|
|
6
|
+
module Builders
|
|
7
|
+
module Documentation
|
|
8
|
+
# Builds project skeleton LICENSE documentation.
|
|
9
|
+
class License
|
|
10
|
+
def self.call(...) = new(...).call
|
|
11
|
+
|
|
12
|
+
def initialize configuration, builder: Builder
|
|
13
|
+
@configuration = configuration
|
|
14
|
+
@builder = builder
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call
|
|
18
|
+
return unless configuration.build_license
|
|
19
|
+
|
|
20
|
+
configuration.with(template_path: "%project_name%/LICENSE-#{license}.#{kind}.erb")
|
|
21
|
+
.then do |updated_configuration|
|
|
22
|
+
builder.call(updated_configuration).render.rename "LICENSE.#{kind}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
attr_reader :configuration, :builder
|
|
29
|
+
|
|
30
|
+
def kind = configuration.documentation_format || "md"
|
|
31
|
+
|
|
32
|
+
def license = configuration.documentation_license || "mit"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "tocer"
|
|
4
|
+
|
|
5
|
+
module Rubysmith
|
|
6
|
+
module Builders
|
|
7
|
+
module Documentation
|
|
8
|
+
# Builds project skeleton README documentation.
|
|
9
|
+
class Readme
|
|
10
|
+
def self.call(...) = new(...).call
|
|
11
|
+
|
|
12
|
+
def initialize configuration, builder: Builder, tocer: Tocer::Writer.new
|
|
13
|
+
@configuration = configuration
|
|
14
|
+
@builder = builder
|
|
15
|
+
@tocer = tocer
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def call
|
|
19
|
+
return unless configuration.build_readme
|
|
20
|
+
|
|
21
|
+
private_methods.sort.grep(/render_/).each { |method| __send__ method }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :configuration, :builder, :tocer
|
|
27
|
+
|
|
28
|
+
def render_content
|
|
29
|
+
builder.call(configuration.with(template_path: "%project_name%/README.#{kind}.erb"))
|
|
30
|
+
.render
|
|
31
|
+
.replace("\n\n\n", "\n\n")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def render_table_of_contents
|
|
35
|
+
configuration.project_root
|
|
36
|
+
.join("README.md")
|
|
37
|
+
.then { |path| tocer.call path if path.exist? }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def kind = configuration.documentation_format || "md"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rubysmith
|
|
4
|
+
module Builders
|
|
5
|
+
# Builds project skeleton GitHub templates.
|
|
6
|
+
class GitHub
|
|
7
|
+
def self.call(...) = new(...).call
|
|
8
|
+
|
|
9
|
+
def initialize configuration, builder: Builder
|
|
10
|
+
@configuration = configuration
|
|
11
|
+
@builder = builder
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def call
|
|
15
|
+
return unless configuration.build_git_hub
|
|
16
|
+
|
|
17
|
+
builder.call(with_issue_template).render
|
|
18
|
+
builder.call(with_pull_request_template).render
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
attr_reader :configuration, :builder
|
|
24
|
+
|
|
25
|
+
def with_issue_template
|
|
26
|
+
configuration.with template_path: "%project_name%/.github/ISSUE_TEMPLATE.md.erb"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def with_pull_request_template
|
|
30
|
+
configuration.with template_path: "%project_name%/.github/PULL_REQUEST_TEMPLATE.md.erb"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -8,12 +8,18 @@ module Rubysmith
|
|
|
8
8
|
# Order is important.
|
|
9
9
|
BUILDERS = [
|
|
10
10
|
Builders::Core,
|
|
11
|
-
Builders::Documentation,
|
|
11
|
+
Builders::Documentation::Readme,
|
|
12
|
+
Builders::Documentation::Change,
|
|
13
|
+
Builders::Documentation::Conduct,
|
|
14
|
+
Builders::Documentation::Contribution,
|
|
15
|
+
Builders::Documentation::License,
|
|
12
16
|
Builders::Git::Setup,
|
|
13
17
|
Builders::Bundler,
|
|
14
18
|
Builders::Rake,
|
|
15
19
|
Builders::Console,
|
|
20
|
+
Builders::CircleCI,
|
|
16
21
|
Builders::Setup,
|
|
22
|
+
Builders::GitHub,
|
|
17
23
|
Builders::Guard,
|
|
18
24
|
Builders::Reek,
|
|
19
25
|
Builders::RSpec::Context,
|
|
@@ -17,14 +17,21 @@ module Rubysmith
|
|
|
17
17
|
:author_url,
|
|
18
18
|
:build_amazing_print,
|
|
19
19
|
:build_bundler_leak,
|
|
20
|
+
:build_changes,
|
|
21
|
+
:build_circle_ci,
|
|
22
|
+
:build_conduct,
|
|
20
23
|
:build_console,
|
|
24
|
+
:build_contributions,
|
|
21
25
|
:build_debug,
|
|
22
|
-
:build_documentation,
|
|
23
26
|
:build_git,
|
|
27
|
+
:build_git_hub,
|
|
24
28
|
:build_git_lint,
|
|
25
29
|
:build_guard,
|
|
30
|
+
:build_license,
|
|
31
|
+
:build_maximum,
|
|
26
32
|
:build_minimum,
|
|
27
33
|
:build_rake,
|
|
34
|
+
:build_readme,
|
|
28
35
|
:build_reek,
|
|
29
36
|
:build_refinements,
|
|
30
37
|
:build_rspec,
|
|
@@ -36,11 +43,13 @@ module Rubysmith
|
|
|
36
43
|
:builders_pragmater_includes,
|
|
37
44
|
:documentation_format,
|
|
38
45
|
:documentation_license,
|
|
46
|
+
:git_hub_user,
|
|
39
47
|
:now,
|
|
40
48
|
:project_name,
|
|
41
49
|
:target_root,
|
|
42
50
|
:template_path,
|
|
43
51
|
:template_root,
|
|
52
|
+
:version,
|
|
44
53
|
keyword_init: true
|
|
45
54
|
) do
|
|
46
55
|
using Refinements::Strings
|
|
@@ -54,12 +63,9 @@ module Rubysmith
|
|
|
54
63
|
|
|
55
64
|
def with(attributes) = self.class.new(to_h.merge(attributes))
|
|
56
65
|
|
|
57
|
-
def
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
.each { |key, _value| self[key] = false }
|
|
61
|
-
.then { self }
|
|
62
|
-
end
|
|
66
|
+
def maximize = update_build_options(true)
|
|
67
|
+
|
|
68
|
+
def minimize = update_build_options(false)
|
|
63
69
|
|
|
64
70
|
def project_label = project_name.titleize
|
|
65
71
|
|
|
@@ -69,9 +75,22 @@ module Rubysmith
|
|
|
69
75
|
|
|
70
76
|
def project_path = project_name.snakecase
|
|
71
77
|
|
|
78
|
+
def ascii_doc? = documentation_format == "adoc"
|
|
79
|
+
|
|
80
|
+
def markdown? = documentation_format == "md"
|
|
81
|
+
|
|
72
82
|
def to_pathway
|
|
73
83
|
Pathway[start_root: template_root, start_path: template_path, end_root: target_root]
|
|
74
84
|
end
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def update_build_options value
|
|
89
|
+
to_h.except(:build_minimum)
|
|
90
|
+
.select { |key, _value| key.start_with? "build_" }
|
|
91
|
+
.each { |key, _value| self[key] = value }
|
|
92
|
+
.then { self }
|
|
93
|
+
end
|
|
75
94
|
end
|
|
76
95
|
end
|
|
77
96
|
end
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
:project:
|
|
2
|
-
:name:
|
|
3
1
|
:author:
|
|
4
2
|
:name:
|
|
5
3
|
:email:
|
|
6
4
|
:url:
|
|
7
|
-
:documentation:
|
|
8
|
-
:format: "md"
|
|
9
|
-
:license: "mit"
|
|
10
5
|
:build:
|
|
11
6
|
:amazing_print: true
|
|
12
7
|
:bundler_leak: true
|
|
8
|
+
:changes: true
|
|
9
|
+
:circle_ci: false
|
|
10
|
+
:conduct: true
|
|
13
11
|
:console: true
|
|
12
|
+
:contributions: true
|
|
14
13
|
:debug: true
|
|
15
|
-
:documentation: true
|
|
16
14
|
:git: true
|
|
15
|
+
:git_hub: false
|
|
17
16
|
:git_lint: true
|
|
18
17
|
:guard: true
|
|
18
|
+
:license: true
|
|
19
|
+
:maximum: false
|
|
19
20
|
:minimum: false
|
|
20
21
|
:rake: true
|
|
22
|
+
:readme: true
|
|
21
23
|
:reek: true
|
|
22
24
|
:refinements: true
|
|
23
25
|
:rspec: true
|
|
@@ -37,3 +39,8 @@
|
|
|
37
39
|
- "**/*Gemfile"
|
|
38
40
|
- "**/*Guardfile"
|
|
39
41
|
- "**/*Rakefile"
|
|
42
|
+
:documentation:
|
|
43
|
+
:format: "md"
|
|
44
|
+
:license: "mit"
|
|
45
|
+
:git_hub:
|
|
46
|
+
:user:
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "refinements/structs"
|
|
4
|
+
|
|
5
|
+
module Rubysmith
|
|
6
|
+
module CLI
|
|
7
|
+
module Configuration
|
|
8
|
+
module Enhancers
|
|
9
|
+
# Adds current time to content.
|
|
10
|
+
class CurrentTime
|
|
11
|
+
using Refinements::Structs
|
|
12
|
+
|
|
13
|
+
def initialize now = Time.now
|
|
14
|
+
@now = now
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call(content) = content.merge(now: now)
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
attr_reader :now
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "git_plus"
|
|
4
|
+
require "refinements/strings"
|
|
5
|
+
require "refinements/structs"
|
|
6
|
+
|
|
7
|
+
module Rubysmith
|
|
8
|
+
module CLI
|
|
9
|
+
module Configuration
|
|
10
|
+
module Enhancers
|
|
11
|
+
# Dynamically adds GitHub user if user is defined.
|
|
12
|
+
class GitHubUser
|
|
13
|
+
using Refinements::Strings
|
|
14
|
+
using Refinements::Structs
|
|
15
|
+
|
|
16
|
+
def initialize repository: GitPlus::Repository.new
|
|
17
|
+
@repository = repository
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def call content
|
|
21
|
+
String(content.git_hub_user).blank? ? content.merge(git_hub_user: user) : content
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :repository
|
|
27
|
+
|
|
28
|
+
def user = repository.config_get("github.user")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "refinements/structs"
|
|
4
|
+
|
|
5
|
+
module Rubysmith
|
|
6
|
+
module CLI
|
|
7
|
+
module Configuration
|
|
8
|
+
module Enhancers
|
|
9
|
+
# Adds this gem's version to content.
|
|
10
|
+
class Version
|
|
11
|
+
using Refinements::Structs
|
|
12
|
+
|
|
13
|
+
def initialize version = Identity::VERSION_LABEL
|
|
14
|
+
@version = version
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call(content) = content.merge(version: version)
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
attr_reader :version
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -17,21 +17,29 @@ module Rubysmith
|
|
|
17
17
|
DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
|
|
18
18
|
CLIENT = Runcom::Config.new "#{Identity::NAME}/configuration.yml", defaults: DEFAULTS
|
|
19
19
|
|
|
20
|
+
ENHANCERS = [
|
|
21
|
+
Enhancers::GitHubUser.new,
|
|
22
|
+
Enhancers::CurrentTime.new,
|
|
23
|
+
Enhancers::Version.new
|
|
24
|
+
].freeze
|
|
25
|
+
|
|
20
26
|
def self.call(...) = new(...).call
|
|
21
27
|
|
|
22
|
-
def self.with_defaults
|
|
28
|
+
def self.with_defaults = new(client: DEFAULTS, enhancers: [])
|
|
23
29
|
|
|
24
|
-
def initialize
|
|
25
|
-
@now = now
|
|
30
|
+
def initialize content: Content.new, client: CLIENT, enhancers: ENHANCERS
|
|
26
31
|
@content = content
|
|
27
32
|
@client = client
|
|
33
|
+
@enhancers = enhancers
|
|
28
34
|
end
|
|
29
35
|
|
|
30
|
-
def call =
|
|
36
|
+
def call = enhancers.reduce(preload_content) { |preload, enhancer| enhancer.call preload }
|
|
31
37
|
|
|
32
38
|
private
|
|
33
39
|
|
|
34
|
-
attr_reader :
|
|
40
|
+
attr_reader :content, :client, :enhancers
|
|
41
|
+
|
|
42
|
+
def preload_content = content.merge(**client.to_h.flatten_keys)
|
|
35
43
|
end
|
|
36
44
|
end
|
|
37
45
|
end
|
|
@@ -23,108 +23,232 @@ module Rubysmith
|
|
|
23
23
|
attr_reader :client, :container
|
|
24
24
|
|
|
25
25
|
def add_amazing_print
|
|
26
|
-
client.on
|
|
26
|
+
client.on(
|
|
27
|
+
"--[no-]amazing_print",
|
|
28
|
+
"Add Amazing Print gem. #{default __method__}."
|
|
29
|
+
) do |value|
|
|
27
30
|
configuration.build_amazing_print = value
|
|
28
31
|
end
|
|
29
32
|
end
|
|
30
33
|
|
|
31
34
|
def add_bundler_leak
|
|
32
|
-
client.on
|
|
35
|
+
client.on(
|
|
36
|
+
"--[no-]bundler-leak",
|
|
37
|
+
"Add Bundler Leak gem. #{default __method__}."
|
|
38
|
+
) do |value|
|
|
33
39
|
configuration.build_bundler_leak = value
|
|
34
40
|
end
|
|
35
41
|
end
|
|
36
42
|
|
|
43
|
+
def add_changes
|
|
44
|
+
client.on(
|
|
45
|
+
"--[no-]changes",
|
|
46
|
+
"Add CHANGES documentation. #{default __method__}."
|
|
47
|
+
) do |value|
|
|
48
|
+
configuration.build_changes = value
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
37
52
|
def add_console
|
|
38
|
-
client.on
|
|
53
|
+
client.on(
|
|
54
|
+
"--[no-]console",
|
|
55
|
+
"Add console script. #{default __method__}."
|
|
56
|
+
) do |value|
|
|
39
57
|
configuration.build_console = value
|
|
40
58
|
end
|
|
41
59
|
end
|
|
42
60
|
|
|
43
|
-
def
|
|
44
|
-
client.on
|
|
45
|
-
|
|
61
|
+
def add_contributions
|
|
62
|
+
client.on(
|
|
63
|
+
"--[no-]contributions",
|
|
64
|
+
"Add CONTRIBUTING documentation. #{default __method__}."
|
|
65
|
+
) do |value|
|
|
66
|
+
configuration.build_contributions = value
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def add_circle_ci
|
|
71
|
+
client.on(
|
|
72
|
+
"--[no-]circle_ci",
|
|
73
|
+
"Add Circle CI configuration and badge. #{default __method__}."
|
|
74
|
+
) do |value|
|
|
75
|
+
configuration.build_circle_ci = value
|
|
46
76
|
end
|
|
47
77
|
end
|
|
48
78
|
|
|
49
|
-
def
|
|
50
|
-
client.on
|
|
51
|
-
|
|
79
|
+
def add_conduct
|
|
80
|
+
client.on(
|
|
81
|
+
"--[no-]conduct",
|
|
82
|
+
"Add CODE_OF_CONDUCT documentation. #{default __method__}."
|
|
83
|
+
) do |value|
|
|
84
|
+
configuration.build_conduct = value
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def add_debug
|
|
89
|
+
client.on(
|
|
90
|
+
"--[no-]debug",
|
|
91
|
+
"Add Debug gem. #{default __method__}."
|
|
92
|
+
) do |value|
|
|
93
|
+
configuration.build_debug = value
|
|
52
94
|
end
|
|
53
95
|
end
|
|
54
96
|
|
|
55
97
|
def add_git
|
|
56
|
-
client.on
|
|
98
|
+
client.on(
|
|
99
|
+
"--[no-]git",
|
|
100
|
+
"Add Git. #{default __method__}."
|
|
101
|
+
) do |value|
|
|
57
102
|
configuration.build_git = value
|
|
58
103
|
end
|
|
59
104
|
end
|
|
60
105
|
|
|
106
|
+
def add_git_hub
|
|
107
|
+
client.on(
|
|
108
|
+
"--[no-]git_hub",
|
|
109
|
+
"Add GitHub templates. #{default __method__}."
|
|
110
|
+
) do |value|
|
|
111
|
+
configuration.build_git_hub = value
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
61
115
|
def add_git_lint
|
|
62
|
-
client.on
|
|
116
|
+
client.on(
|
|
117
|
+
"--[no-]git-lint",
|
|
118
|
+
"Add Git Lint gem. #{default __method__}."
|
|
119
|
+
) do |value|
|
|
63
120
|
configuration.build_git_lint = value
|
|
64
121
|
end
|
|
65
122
|
end
|
|
66
123
|
|
|
67
124
|
def add_guard
|
|
68
|
-
client.on
|
|
125
|
+
client.on(
|
|
126
|
+
"--[no-]guard",
|
|
127
|
+
"Add Guard gem. #{default __method__}."
|
|
128
|
+
) do |value|
|
|
69
129
|
configuration.build_guard = value
|
|
70
130
|
end
|
|
71
131
|
end
|
|
72
132
|
|
|
133
|
+
def add_license
|
|
134
|
+
client.on(
|
|
135
|
+
"--[no-]license",
|
|
136
|
+
"Add LICENSE documentation. #{default __method__}."
|
|
137
|
+
) do |value|
|
|
138
|
+
configuration.build_license = value
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def add_maximum
|
|
143
|
+
client.on(
|
|
144
|
+
"--max",
|
|
145
|
+
"Use maximum/enabled options. #{default __method__}."
|
|
146
|
+
) do |value|
|
|
147
|
+
configuration.maximize.build_maximum = value
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
73
151
|
def add_minimum
|
|
74
|
-
client.on
|
|
152
|
+
client.on(
|
|
153
|
+
"--min",
|
|
154
|
+
"Use minimum/disabled options. #{default __method__}."
|
|
155
|
+
) do |value|
|
|
75
156
|
configuration.minimize.build_minimum = value
|
|
76
157
|
end
|
|
77
158
|
end
|
|
78
159
|
|
|
79
160
|
def add_rake
|
|
80
|
-
client.on
|
|
161
|
+
client.on(
|
|
162
|
+
"--[no-]rake",
|
|
163
|
+
"Add Rake gem. #{default __method__}."
|
|
164
|
+
) do |value|
|
|
81
165
|
configuration.build_rake = value
|
|
82
166
|
end
|
|
83
167
|
end
|
|
84
168
|
|
|
169
|
+
def add_readme
|
|
170
|
+
client.on(
|
|
171
|
+
"--[no-]readme",
|
|
172
|
+
"Add README documentation. #{default __method__}."
|
|
173
|
+
) do |value|
|
|
174
|
+
configuration.build_readme = value
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
85
178
|
def add_reek
|
|
86
|
-
client.on
|
|
179
|
+
client.on(
|
|
180
|
+
"--[no-]reek",
|
|
181
|
+
"Add Reek gem. #{default __method__}."
|
|
182
|
+
) do |value|
|
|
87
183
|
configuration.build_reek = value
|
|
88
184
|
end
|
|
89
185
|
end
|
|
90
186
|
|
|
91
187
|
def add_refinements
|
|
92
|
-
client.on
|
|
188
|
+
client.on(
|
|
189
|
+
"--[no-]refinements",
|
|
190
|
+
"Add Refinements gem. #{default __method__}."
|
|
191
|
+
) do |value|
|
|
93
192
|
configuration.build_refinements = value
|
|
94
193
|
end
|
|
95
194
|
end
|
|
96
195
|
|
|
97
196
|
def add_rspec
|
|
98
|
-
client.on
|
|
197
|
+
client.on(
|
|
198
|
+
"--[no-]rspec",
|
|
199
|
+
"Add RSpec gem. #{default __method__}."
|
|
200
|
+
) do |value|
|
|
99
201
|
configuration.build_rspec = value
|
|
100
202
|
end
|
|
101
203
|
end
|
|
102
204
|
|
|
103
205
|
def add_rubocop
|
|
104
|
-
client.on
|
|
206
|
+
client.on(
|
|
207
|
+
"--[no-]rubocop",
|
|
208
|
+
"Add Rubocop gems. #{default __method__}."
|
|
209
|
+
) do |value|
|
|
105
210
|
configuration.build_rubocop = value
|
|
106
211
|
end
|
|
107
212
|
end
|
|
108
213
|
|
|
109
214
|
def add_setup
|
|
110
|
-
client.on
|
|
215
|
+
client.on(
|
|
216
|
+
"--[no-]setup",
|
|
217
|
+
"Add setup script. #{default __method__}."
|
|
218
|
+
) do |value|
|
|
111
219
|
configuration.build_setup = value
|
|
112
220
|
end
|
|
113
221
|
end
|
|
114
222
|
|
|
115
223
|
def add_simple_cov
|
|
116
|
-
client.on
|
|
224
|
+
client.on(
|
|
225
|
+
"--[no-]simple_cov",
|
|
226
|
+
"Add SimpleCov gem. #{default __method__}."
|
|
227
|
+
) do |value|
|
|
117
228
|
configuration.build_simple_cov = value
|
|
118
229
|
end
|
|
119
230
|
end
|
|
120
231
|
|
|
121
232
|
def add_zeitwerk
|
|
122
|
-
client.on
|
|
233
|
+
client.on(
|
|
234
|
+
"--[no-]zeitwerk",
|
|
235
|
+
"Add Zeitwerk gem. #{default __method__}."
|
|
236
|
+
) do |value|
|
|
123
237
|
configuration.build_zeitwerk = value
|
|
124
238
|
end
|
|
125
239
|
end
|
|
126
240
|
|
|
241
|
+
def default option
|
|
242
|
+
option.to_s
|
|
243
|
+
.sub("add_", "build_")
|
|
244
|
+
.then { |attribute| configuration.public_send attribute }
|
|
245
|
+
.then { |boolean| boolean ? colorizer.green(boolean) : colorizer.red(boolean) }
|
|
246
|
+
.then { |colored_boolean| "Default: #{colored_boolean}" }
|
|
247
|
+
end
|
|
248
|
+
|
|
127
249
|
def configuration = container[__method__]
|
|
250
|
+
|
|
251
|
+
def colorizer = container[__method__]
|
|
128
252
|
end
|
|
129
253
|
end
|
|
130
254
|
end
|
data/lib/rubysmith/cli/shell.rb
CHANGED
|
@@ -16,7 +16,7 @@ module Rubysmith
|
|
|
16
16
|
case parse arguments
|
|
17
17
|
in action_config: Symbol => action then config action
|
|
18
18
|
in action_build: true then build
|
|
19
|
-
in action_version:
|
|
19
|
+
in action_version: true then logger.info configuration.version
|
|
20
20
|
else usage
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -28,7 +28,7 @@ module Rubysmith
|
|
|
28
28
|
def parse arguments = []
|
|
29
29
|
parser.call arguments
|
|
30
30
|
rescue StandardError => error
|
|
31
|
-
|
|
31
|
+
logger.error error.message
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def config(action) = actions.fetch(__method__).call(action)
|
|
@@ -37,6 +37,8 @@ module Rubysmith
|
|
|
37
37
|
|
|
38
38
|
def usage = logger.unknown(parser.to_s)
|
|
39
39
|
|
|
40
|
+
def configuration = container[__method__]
|
|
41
|
+
|
|
40
42
|
def logger = container[__method__]
|
|
41
43
|
end
|
|
42
44
|
end
|
data/lib/rubysmith/identity.rb
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
jobs:
|
|
3
|
+
build:
|
|
4
|
+
working_directory: ~/project
|
|
5
|
+
docker:
|
|
6
|
+
- image: bkuhlmann/alpine-ruby:latest
|
|
7
|
+
steps:
|
|
8
|
+
- checkout
|
|
9
|
+
|
|
10
|
+
- restore_cache:
|
|
11
|
+
name: Bundler Restore
|
|
12
|
+
keys:
|
|
13
|
+
- gem-cache-{{.Branch}}-{{checksum "Gemfile.lock"}}
|
|
14
|
+
- gem-cache-
|
|
15
|
+
|
|
16
|
+
- run:
|
|
17
|
+
name: Bundler Install
|
|
18
|
+
command: |
|
|
19
|
+
gem update --system
|
|
20
|
+
bundle config set path "vendor/bundle"
|
|
21
|
+
bundle install
|
|
22
|
+
|
|
23
|
+
- save_cache:
|
|
24
|
+
name: Bundler Store
|
|
25
|
+
key: gem-cache-{{.Branch}}-{{checksum "Gemfile.lock"}}
|
|
26
|
+
paths:
|
|
27
|
+
- vendor/bundle
|
|
28
|
+
|
|
29
|
+
- run:
|
|
30
|
+
name: Build
|
|
31
|
+
command: bundle exec rake
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
## Overview
|
|
2
|
+
<!-- Required. Describe, briefly, the behavior experienced. -->
|
|
3
|
+
|
|
4
|
+
## Screenshots/Screencasts
|
|
5
|
+
<!-- Optional. Attach screenshot(s) and/or screencast(s) that demo the behavior. -->
|
|
6
|
+
|
|
7
|
+
## Steps to Recreate
|
|
8
|
+
<!-- Required. List exact steps (numbered list) to reproduce errant behavior. -->
|
|
9
|
+
|
|
10
|
+
## Desired Behavior
|
|
11
|
+
<!-- Required. Describe the behavior you'd like to see or your idea of a proposed solution. -->
|
|
12
|
+
|
|
13
|
+
## Environment
|
|
14
|
+
<!-- Required. What is your operating system, software version(s), etc. -->
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## Overview
|
|
2
|
+
<!-- Required. Why is this important/necessary and what is the overarching architecture. -->
|
|
3
|
+
|
|
4
|
+
## Screenshots/Screencasts
|
|
5
|
+
<!-- Optional. Provide supporting image/video. -->
|
|
6
|
+
|
|
7
|
+
## Details
|
|
8
|
+
<!-- Optional. List the key features/highlights as bullet points. -->
|
|
9
|
+
|
|
10
|
+
## Notes
|
|
11
|
+
<!-- Optional. List additional notes/references as bullet points. -->
|
|
@@ -32,11 +32,14 @@ group :code_quality do
|
|
|
32
32
|
<% end %>
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
group :development do
|
|
36
|
+
<% if configuration.build_rake %>
|
|
37
37
|
gem "rake", "~> 13.0"
|
|
38
|
-
end
|
|
39
|
-
<%
|
|
38
|
+
<% end %>
|
|
39
|
+
<% if configuration.markdown? %>
|
|
40
|
+
gem "tocer", "~> 12.0"
|
|
41
|
+
<% end %>
|
|
42
|
+
end
|
|
40
43
|
|
|
41
44
|
group :test do
|
|
42
45
|
<% if configuration.build_guard %>
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
[link=https://www.alchemists.io/projects/code_quality]
|
|
9
9
|
image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchemists Style Guide]
|
|
10
10
|
<% end %>
|
|
11
|
+
<% if configuration.build_circle_ci %>
|
|
12
|
+
[link=https://circleci.com/gh/<%= configuration.git_hub_user %>/<%= configuration.project_name %>]
|
|
13
|
+
image::https://circleci.com/gh/<%= configuration.git_hub_user %>/<%= configuration.project_name %>.svg?style=svg[Circle CI Status]
|
|
14
|
+
<% end %>
|
|
11
15
|
|
|
12
16
|
toc::[]
|
|
13
17
|
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
<% if configuration.build_rubocop %>
|
|
4
4
|
[](https://www.alchemists.io/projects/code_quality)
|
|
5
5
|
<% end %>
|
|
6
|
+
<% if configuration.build_circle_ci %>
|
|
7
|
+
[](https://circleci.com/gh/<%= configuration.git_hub_user %>/<%= configuration.project_name %>)
|
|
8
|
+
<% end %>
|
|
6
9
|
|
|
7
10
|
<!-- Tocer[start]: Auto-generated, don't remove. -->
|
|
8
11
|
<!-- Tocer[finish]: Auto-generated, don't remove. -->
|
data/lib/rubysmith.rb
CHANGED
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
require "zeitwerk"
|
|
4
4
|
|
|
5
5
|
Zeitwerk::Loader.for_gem.then do |loader|
|
|
6
|
-
loader.inflector.inflect "cli" => "CLI",
|
|
6
|
+
loader.inflector.inflect "cli" => "CLI",
|
|
7
|
+
"circle_ci" => "CircleCI",
|
|
8
|
+
"erb" => "ERB",
|
|
9
|
+
"rspec" => "RSpec"
|
|
7
10
|
loader.setup
|
|
8
11
|
end
|
|
9
12
|
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rubysmith
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.14.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brooke Kuhlmann
|
|
@@ -28,7 +28,7 @@ cert_chain:
|
|
|
28
28
|
lkHilIrX69jq8wMPpBhlaw2mRmeSL50Wv5u6xVBvOHhXFSP1crXM95vfLhLyRYod
|
|
29
29
|
W2A=
|
|
30
30
|
-----END CERTIFICATE-----
|
|
31
|
-
date: 2021-09-
|
|
31
|
+
date: 2021-09-19 00:00:00.000000000 Z
|
|
32
32
|
dependencies:
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: dry-container
|
|
@@ -44,6 +44,20 @@ dependencies:
|
|
|
44
44
|
- - "~>"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
46
|
version: '0.9'
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: git_plus
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0.6'
|
|
54
|
+
type: :runtime
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0.6'
|
|
47
61
|
- !ruby/object:Gem::Dependency
|
|
48
62
|
name: pastel
|
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -114,6 +128,20 @@ dependencies:
|
|
|
114
128
|
- - "~>"
|
|
115
129
|
- !ruby/object:Gem::Version
|
|
116
130
|
version: '7.0'
|
|
131
|
+
- !ruby/object:Gem::Dependency
|
|
132
|
+
name: tocer
|
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - "~>"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '12.0'
|
|
138
|
+
type: :runtime
|
|
139
|
+
prerelease: false
|
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '12.0'
|
|
117
145
|
- !ruby/object:Gem::Dependency
|
|
118
146
|
name: zeitwerk
|
|
119
147
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -144,11 +172,17 @@ files:
|
|
|
144
172
|
- lib/rubysmith.rb
|
|
145
173
|
- lib/rubysmith/builder.rb
|
|
146
174
|
- lib/rubysmith/builders/bundler.rb
|
|
175
|
+
- lib/rubysmith/builders/circle_ci.rb
|
|
147
176
|
- lib/rubysmith/builders/console.rb
|
|
148
177
|
- lib/rubysmith/builders/core.rb
|
|
149
|
-
- lib/rubysmith/builders/documentation.rb
|
|
178
|
+
- lib/rubysmith/builders/documentation/change.rb
|
|
179
|
+
- lib/rubysmith/builders/documentation/conduct.rb
|
|
180
|
+
- lib/rubysmith/builders/documentation/contribution.rb
|
|
181
|
+
- lib/rubysmith/builders/documentation/license.rb
|
|
182
|
+
- lib/rubysmith/builders/documentation/readme.rb
|
|
150
183
|
- lib/rubysmith/builders/git/commit.rb
|
|
151
184
|
- lib/rubysmith/builders/git/setup.rb
|
|
185
|
+
- lib/rubysmith/builders/git_hub.rb
|
|
152
186
|
- lib/rubysmith/builders/guard.rb
|
|
153
187
|
- lib/rubysmith/builders/pragma.rb
|
|
154
188
|
- lib/rubysmith/builders/rake.rb
|
|
@@ -162,6 +196,9 @@ files:
|
|
|
162
196
|
- lib/rubysmith/cli/actions/config.rb
|
|
163
197
|
- lib/rubysmith/cli/configuration/content.rb
|
|
164
198
|
- lib/rubysmith/cli/configuration/defaults.yml
|
|
199
|
+
- lib/rubysmith/cli/configuration/enhancers/current_time.rb
|
|
200
|
+
- lib/rubysmith/cli/configuration/enhancers/git_hub_user.rb
|
|
201
|
+
- lib/rubysmith/cli/configuration/enhancers/version.rb
|
|
165
202
|
- lib/rubysmith/cli/configuration/loader.rb
|
|
166
203
|
- lib/rubysmith/cli/parsers.rb
|
|
167
204
|
- lib/rubysmith/cli/parsers/assembler.rb
|
|
@@ -173,6 +210,9 @@ files:
|
|
|
173
210
|
- lib/rubysmith/pathway.rb
|
|
174
211
|
- lib/rubysmith/renderers/erb.rb
|
|
175
212
|
- lib/rubysmith/renderers/namespace.rb
|
|
213
|
+
- lib/rubysmith/templates/%project_name%/.circleci/config.yml.erb
|
|
214
|
+
- lib/rubysmith/templates/%project_name%/.github/ISSUE_TEMPLATE.md.erb
|
|
215
|
+
- lib/rubysmith/templates/%project_name%/.github/PULL_REQUEST_TEMPLATE.md.erb
|
|
176
216
|
- lib/rubysmith/templates/%project_name%/.reek.yml.erb
|
|
177
217
|
- lib/rubysmith/templates/%project_name%/.rubocop.yml.erb
|
|
178
218
|
- lib/rubysmith/templates/%project_name%/.ruby-version.erb
|
metadata.gz.sig
CHANGED
|
Binary file
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Rubysmith
|
|
4
|
-
module Builders
|
|
5
|
-
# Builds project skeleton documentation.
|
|
6
|
-
class Documentation
|
|
7
|
-
def self.call(...) = new(...).call
|
|
8
|
-
|
|
9
|
-
def initialize configuration, builder: Builder
|
|
10
|
-
@configuration = configuration
|
|
11
|
-
@builder = builder
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def call
|
|
15
|
-
return unless configuration.build_documentation
|
|
16
|
-
|
|
17
|
-
private_methods.sort.grep(/render_/).each { |method| __send__ method }
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
attr_reader :configuration, :builder
|
|
23
|
-
|
|
24
|
-
def render_changes
|
|
25
|
-
builder.call(configuration.with(template_path: "%project_name%/CHANGES.#{kind}.erb"))
|
|
26
|
-
.render
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def render_conduct
|
|
30
|
-
configuration.with(template_path: "%project_name%/CODE_OF_CONDUCT.#{kind}.erb")
|
|
31
|
-
.then { |updated_configuration| builder.call(updated_configuration).render }
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def render_contributions
|
|
35
|
-
builder.call(configuration.with(template_path: "%project_name%/CONTRIBUTING.#{kind}.erb"))
|
|
36
|
-
.render
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def render_license
|
|
40
|
-
configuration.with(template_path: "%project_name%/LICENSE-#{license}.#{kind}.erb")
|
|
41
|
-
.then do |updated_configuration|
|
|
42
|
-
builder.call(updated_configuration).render.rename "LICENSE.#{kind}"
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def render_readme
|
|
47
|
-
builder.call(configuration.with(template_path: "%project_name%/README.#{kind}.erb"))
|
|
48
|
-
.render
|
|
49
|
-
.replace("\n\n\n", "\n\n")
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def kind = configuration.documentation_format || "md"
|
|
53
|
-
|
|
54
|
-
def license = configuration.documentation_license || "mit"
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|