rubysmith 0.12.0 → 0.16.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 +0 -0
- data/README.adoc +101 -33
- data/lib/rubysmith/builder.rb +7 -13
- data/lib/rubysmith/builders/bundler.rb +1 -1
- data/lib/rubysmith/builders/circle_ci.rb +26 -0
- data/lib/rubysmith/builders/core.rb +3 -1
- 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 +48 -0
- data/lib/rubysmith/cli/actions/config.rb +33 -0
- data/lib/rubysmith/cli/configuration/content.rb +43 -17
- data/lib/rubysmith/cli/configuration/defaults.yml +14 -7
- 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 +15 -4
- data/lib/rubysmith/cli/parsers/assembler.rb +7 -9
- data/lib/rubysmith/cli/parsers/build.rb +168 -42
- data/lib/rubysmith/cli/parsers/core.rb +13 -8
- data/lib/rubysmith/cli/shell.rb +16 -27
- data/lib/rubysmith/container.rb +37 -0
- 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 +8 -0
- data/lib/rubysmith/templates/%project_name%/Gemfile.erb +49 -49
- 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/templates/%project_name%/lib/%project_path%.rb.erb +4 -5
- data/lib/rubysmith/templates/%project_name%/spec/spec_helper.rb.erb +0 -3
- data/lib/rubysmith.rb +7 -3
- data.tar.gz.sig +0 -0
- metadata +79 -10
- metadata.gz.sig +0 -0
- data/lib/rubysmith/builders/documentation.rb +0 -57
- data/lib/rubysmith/cli/processors/build.rb +0 -56
- data/lib/rubysmith/cli/processors/config.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9a0a688a7aac995bdcecc7153253eadb06a4b0c883583c6793b5a4a29232fec
|
4
|
+
data.tar.gz: 87eaca3e036a5609b5d5a6525ea05d3e3527095be792f23976899967f13c93a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3c6fa39d2d40c8465a9652ea0679d20d886e27d18657c4d218d67d4849106721fe527c4e26fd8b91382de04a61277f5ad500ad361e40e3560a6dbceb3bdd5e3
|
7
|
+
data.tar.gz: 402d7063461dc2a4d5fdedbd2a17e18d7158988785089e16ff5d7bfce47e63a60679cb78297748668e7fdf9bd5855e064ddc59528ecc34625b09e7a552af8951
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -30,10 +30,12 @@ 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].
|
34
|
+
* Supports link:https://github.com/ruby/debug[Debug].
|
33
35
|
* Supports link:https://git-scm.com[Git].
|
36
|
+
* Supports link:https://github.com[GitHub].
|
34
37
|
* Supports link:https://www.alchemists.io/projects/git-lint[Git Lint].
|
35
38
|
* Supports link:https://github.com/guard/guard[Guard].
|
36
|
-
* Supports link:http://pryrepl.org[Pry].
|
37
39
|
* Supports link:https://github.com/ruby/rake[Rake].
|
38
40
|
* Supports link:https://github.com/troessner/reek[Reek].
|
39
41
|
* Supports link:https://www.alchemists.io/projects/refinements[Refinements].
|
@@ -43,12 +45,13 @@ toc::[]
|
|
43
45
|
* Supports link:https://github.com/rubocop-hq/rubocop-rake[Rubocop Rake].
|
44
46
|
* Supports link:https://github.com/rubocop-hq/rubocop-rspec[Rubocop RSpec].
|
45
47
|
* Supports link:https://github.com/simplecov-ruby/simplecov[SimpleCov].
|
48
|
+
* Supports link:https://github.com/fxn/zeitwerk[Zeitwerk].
|
46
49
|
* Supports common settings and a structured layout for building projects.
|
47
50
|
* Provides common documentation:
|
48
51
|
** README
|
49
52
|
** CHANGES
|
50
|
-
** CONTRIBUTING
|
51
53
|
** CODE OF CONDUCT
|
54
|
+
** CONTRIBUTING
|
52
55
|
** LICENSE
|
53
56
|
|
54
57
|
// == Screencasts
|
@@ -86,23 +89,30 @@ USAGE:
|
|
86
89
|
-v, --version Show gem version.
|
87
90
|
|
88
91
|
BUILD OPTIONS:
|
89
|
-
--[no-]amazing_print Add Amazing Print.
|
90
|
-
--[no-]bundler-leak Add Bundler Leak.
|
91
|
-
--[no-]
|
92
|
-
--[no-]
|
93
|
-
--[no-]
|
94
|
-
--[no-]
|
95
|
-
--[no-]
|
96
|
-
--
|
97
|
-
--[no-]
|
98
|
-
--[no-]
|
99
|
-
--[no-]
|
100
|
-
--[no-]
|
101
|
-
--[no-]
|
102
|
-
--
|
103
|
-
--
|
104
|
-
--[no-]
|
105
|
-
--[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.
|
106
116
|
....
|
107
117
|
|
108
118
|
=== Building
|
@@ -120,12 +130,12 @@ to disable specific options, you can use the `--no-*` prefix. Example:
|
|
120
130
|
|
121
131
|
[source,bash]
|
122
132
|
----
|
123
|
-
rubysmith --build demo --no-
|
133
|
+
rubysmith --build demo --no-debug --no-guard
|
124
134
|
----
|
125
135
|
|
126
|
-
With the above example, both
|
127
|
-
project. Taking this a step further, you can also use the `--min` option to generate a
|
128
|
-
bare minimum of options. Example:
|
136
|
+
With the above example, both Debug and Guard support would have been disabled when building the
|
137
|
+
`demo` project. Taking this a step further, you can also use the `--min` option to generate a
|
138
|
+
project with bare minimum of options. Example:
|
129
139
|
|
130
140
|
[source,bash]
|
131
141
|
----
|
@@ -136,8 +146,20 @@ The above is essentially the same as building with _all_ options disabled. This
|
|
136
146
|
situations where you need to quickly script something up for sharing with others yet still want to
|
137
147
|
avoid using a Bundler Inline script so gem dependencies are not installed each time the code is run.
|
138
148
|
|
139
|
-
|
140
|
-
|
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:
|
151
|
+
|
152
|
+
[source,bash]
|
153
|
+
----
|
154
|
+
rubysmith --build demo --min --zeitwerk
|
155
|
+
rubysmith --build demo --max --no-debug
|
156
|
+
----
|
157
|
+
|
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).
|
141
163
|
|
142
164
|
=== Configuration
|
143
165
|
|
@@ -148,9 +170,7 @@ $HOME/.config/rubysmith/configuration.yml
|
|
148
170
|
....
|
149
171
|
|
150
172
|
It can also be configured via link:https://www.alchemists.io/projects/xdg[XDG] environment
|
151
|
-
variables.
|
152
|
-
|
153
|
-
The default configuration is as follows:
|
173
|
+
variables. The default configuration is as follows:
|
154
174
|
|
155
175
|
[source,yaml]
|
156
176
|
----
|
@@ -158,20 +178,24 @@ The default configuration is as follows:
|
|
158
178
|
:name:
|
159
179
|
:email:
|
160
180
|
:url:
|
161
|
-
:documentation:
|
162
|
-
:format: "md"
|
163
|
-
:license: "mit"
|
164
181
|
:build:
|
165
182
|
:amazing_print: true
|
166
183
|
:bundler_leak: true
|
184
|
+
:changes: true
|
185
|
+
:circle_ci: false
|
186
|
+
:conduct: true
|
167
187
|
:console: true
|
168
|
-
:
|
188
|
+
:contributions: true
|
189
|
+
:debug: true
|
169
190
|
:git: true
|
191
|
+
:git_hub: false
|
170
192
|
:git_lint: true
|
171
193
|
:guard: true
|
194
|
+
:license: true
|
195
|
+
:maximum: false
|
172
196
|
:minimum: false
|
173
|
-
:pry: true
|
174
197
|
:rake: true
|
198
|
+
:readme: true
|
175
199
|
:reek: true
|
176
200
|
:refinements: true
|
177
201
|
:rspec: true
|
@@ -191,11 +215,55 @@ The default configuration is as follows:
|
|
191
215
|
- "**/*Gemfile"
|
192
216
|
- "**/*Guardfile"
|
193
217
|
- "**/*Rakefile"
|
218
|
+
:documentation:
|
219
|
+
:format: "md"
|
220
|
+
:license: "mit"
|
221
|
+
:git_hub:
|
222
|
+
:user:
|
194
223
|
----
|
195
224
|
|
196
225
|
Feel free to take this default configuration, modify, and save as your own custom
|
197
226
|
`configuration.yml`.
|
198
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
|
+
|
199
267
|
== Development
|
200
268
|
|
201
269
|
To contribute, run:
|
data/lib/rubysmith/builder.rb
CHANGED
@@ -10,20 +10,14 @@ module Rubysmith
|
|
10
10
|
class Builder
|
11
11
|
using Refinements::Pathnames
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
HELPERS = {
|
16
|
-
inserter: Text::Inserter,
|
17
|
-
renderer: Renderers::ERB,
|
18
|
-
kernel: Open3,
|
19
|
-
logger: LOGGER
|
20
|
-
}.freeze
|
13
|
+
HELPERS = {inserter: Text::Inserter, renderer: Renderers::ERB, kernel: Open3}.freeze
|
21
14
|
|
22
15
|
def self.call(...) = new(...)
|
23
16
|
|
24
|
-
def initialize configuration, helpers: HELPERS
|
17
|
+
def initialize configuration, helpers: HELPERS, container: Container
|
25
18
|
@configuration = configuration
|
26
19
|
@helpers = helpers
|
20
|
+
@container = container
|
27
21
|
end
|
28
22
|
|
29
23
|
def append content
|
@@ -94,13 +88,13 @@ module Rubysmith
|
|
94
88
|
|
95
89
|
def touch
|
96
90
|
logger.info "Touching: #{relative_build_path}"
|
97
|
-
build_path.
|
91
|
+
build_path.deep_touch
|
98
92
|
self
|
99
93
|
end
|
100
94
|
|
101
95
|
private
|
102
96
|
|
103
|
-
attr_reader :configuration, :helpers
|
97
|
+
attr_reader :configuration, :helpers, :container
|
104
98
|
|
105
99
|
def execute *command
|
106
100
|
kernel.capture2e(*command).then do |result, status|
|
@@ -114,9 +108,9 @@ module Rubysmith
|
|
114
108
|
|
115
109
|
def kernel = helpers.fetch(__method__)
|
116
110
|
|
117
|
-
def logger =
|
111
|
+
def logger = container[__method__]
|
118
112
|
|
119
|
-
def relative_build_path = build_path.relative_path_from(configuration.
|
113
|
+
def relative_build_path = build_path.relative_path_from(configuration.target_root)
|
120
114
|
|
121
115
|
def build_path
|
122
116
|
pathway.end_path
|
@@ -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
|
@@ -14,7 +14,9 @@ module Rubysmith
|
|
14
14
|
def call
|
15
15
|
builder.call(configuration.with(template_path: "%project_name%/lib/%project_path%.rb.erb"))
|
16
16
|
.render
|
17
|
-
.replace(
|
17
|
+
.replace(" require", "require")
|
18
|
+
.replace(/ (?=(Zeit|\.tap|\.setup))/, "")
|
19
|
+
.replace("\n \n", "\n\n")
|
18
20
|
|
19
21
|
builder.call(configuration.with(template_path: "%project_name%/.ruby-version.erb")).render
|
20
22
|
nil
|
@@ -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
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rubysmith
|
4
|
+
module CLI
|
5
|
+
module Actions
|
6
|
+
# Handles the build action.
|
7
|
+
class Build
|
8
|
+
# Order is important.
|
9
|
+
BUILDERS = [
|
10
|
+
Builders::Core,
|
11
|
+
Builders::Documentation::Readme,
|
12
|
+
Builders::Documentation::Change,
|
13
|
+
Builders::Documentation::Conduct,
|
14
|
+
Builders::Documentation::Contribution,
|
15
|
+
Builders::Documentation::License,
|
16
|
+
Builders::Git::Setup,
|
17
|
+
Builders::Bundler,
|
18
|
+
Builders::Rake,
|
19
|
+
Builders::Console,
|
20
|
+
Builders::CircleCI,
|
21
|
+
Builders::Setup,
|
22
|
+
Builders::GitHub,
|
23
|
+
Builders::Guard,
|
24
|
+
Builders::Reek,
|
25
|
+
Builders::RSpec::Context,
|
26
|
+
Builders::RSpec::Helper,
|
27
|
+
Builders::Pragma,
|
28
|
+
Builders::Rubocop::Setup,
|
29
|
+
Builders::Rubocop::Formatter,
|
30
|
+
Builders::Git::Commit
|
31
|
+
].freeze
|
32
|
+
|
33
|
+
def initialize builders: BUILDERS, container: Container
|
34
|
+
@builders = builders
|
35
|
+
@container = container
|
36
|
+
end
|
37
|
+
|
38
|
+
def call = builders.each { |builder| builder.call configuration }
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
attr_reader :builders, :container
|
43
|
+
|
44
|
+
def configuration = container[__method__]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rubysmith
|
4
|
+
module CLI
|
5
|
+
module Actions
|
6
|
+
# Handles the config action.
|
7
|
+
class Config
|
8
|
+
def initialize client: CLI::Configuration::Loader::CLIENT, container: Container
|
9
|
+
@client = client
|
10
|
+
@container = container
|
11
|
+
end
|
12
|
+
|
13
|
+
def call selection
|
14
|
+
case selection
|
15
|
+
when :edit then edit
|
16
|
+
when :view then view
|
17
|
+
else fail StandardError, "Invalid configuration selection: #{selection}."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_reader :client, :container
|
24
|
+
|
25
|
+
def edit = kernel.system("$EDITOR #{client.current}")
|
26
|
+
|
27
|
+
def view = kernel.system("cat #{client.current}")
|
28
|
+
|
29
|
+
def kernel = container[__method__]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|