rubysmith 0.10.0 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +111 -41
- data/lib/rubysmith/builder.rb +11 -16
- data/lib/rubysmith/builders/bundler.rb +3 -3
- data/lib/rubysmith/builders/{ruby_critic.rb → circle_ci.rb} +6 -5
- data/lib/rubysmith/builders/console.rb +1 -1
- data/lib/rubysmith/builders/core.rb +6 -2
- 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/commit.rb +1 -1
- data/lib/rubysmith/builders/git/setup.rb +1 -1
- data/lib/rubysmith/builders/git_hub.rb +34 -0
- data/lib/rubysmith/builders/guard.rb +1 -1
- data/lib/rubysmith/builders/pragma.rb +1 -1
- data/lib/rubysmith/builders/rake.rb +3 -1
- data/lib/rubysmith/builders/reek.rb +1 -1
- data/lib/rubysmith/builders/rspec/context.rb +1 -1
- data/lib/rubysmith/builders/rspec/helper.rb +1 -1
- data/lib/rubysmith/builders/rubocop/formatter.rb +1 -1
- data/lib/rubysmith/builders/rubocop/setup.rb +1 -1
- data/lib/rubysmith/builders/setup.rb +1 -1
- 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 +47 -19
- data/lib/rubysmith/cli/configuration/defaults.yml +16 -9
- 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 +174 -49
- data/lib/rubysmith/cli/parsers/core.rb +14 -9
- data/lib/rubysmith/cli/shell.rb +16 -28
- data/lib/rubysmith/container.rb +37 -0
- data/lib/rubysmith/identity.rb +2 -2
- data/lib/rubysmith/renderers/erb.rb +1 -1
- data/lib/rubysmith/renderers/namespace.rb +2 -2
- 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 +51 -52
- 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%/Rakefile.erb +1 -13
- data/lib/rubysmith/templates/%project_name%/bin/console.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/lib/%project_path%.rb.erb +12 -0
- data/lib/rubysmith/templates/%project_name%/spec/spec_helper.rb.erb +1 -1
- data/lib/rubysmith.rb +13 -31
- data.tar.gz.sig +0 -0
- metadata +92 -11
- metadata.gz.sig +0 -0
- data/lib/rubysmith/builders/documentation.rb +0 -57
- data/lib/rubysmith/cli/processors/build.rb +0 -59
- data/lib/rubysmith/cli/processors/config.rb +0 -31
- data/lib/rubysmith/templates/%project_name%/.rubycritic.yml.erb +0 -3
- data/lib/rubysmith/templates/%project_name%/lib/%project_name%.rb.erb +0 -3
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
Binary file
|
data/README.adoc
CHANGED
@@ -15,8 +15,11 @@ Rubysmith is a command line interface for smithing Ruby projects.
|
|
15
15
|
|
16
16
|
This gem is useful in situations in which you need something more sophisticated than a
|
17
17
|
link:https://bundler.io/guides/bundler_in_a_single_file_ruby_script.html[Bundler Inline] script but
|
18
|
-
less complicated than a
|
19
|
-
|
18
|
+
less complicated than a link:https://www.alchemists.io/projects/gemsmith[Gemsmith] gem. Rubysmith is
|
19
|
+
the foundation of Gemsmith and provides a lot of the same functionality as Gemsmith but solely
|
20
|
+
tailored for pure Ruby projects. Again, this is a great tool for spiking quick Ruby implementations,
|
21
|
+
sharing code snippets with others, or building full blown Ruby projects for collaboration with
|
22
|
+
others.
|
20
23
|
|
21
24
|
toc::[]
|
22
25
|
|
@@ -26,12 +29,14 @@ toc::[]
|
|
26
29
|
* Uses link:https://www.alchemists.io/projects/runcom[Runcom] for resource configuration management.
|
27
30
|
* Uses link:https://www.alchemists.io/projects/pragmater[Pragmater] for Ruby source pragma directives.
|
28
31
|
* Supports link:https://github.com/amazing-print/amazing_print[Amazing Print].
|
29
|
-
* Supports link:https://github.com/rubysec/bundler-audit[Bundler Audit].
|
30
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].
|
31
35
|
* Supports link:https://git-scm.com[Git].
|
36
|
+
* Supports link:https://github.com[GitHub].
|
32
37
|
* Supports link:https://www.alchemists.io/projects/git-lint[Git Lint].
|
33
38
|
* Supports link:https://github.com/guard/guard[Guard].
|
34
|
-
* Supports link:
|
39
|
+
* Supports link:https://github.com/ruby/rake[Rake].
|
35
40
|
* Supports link:https://github.com/troessner/reek[Reek].
|
36
41
|
* Supports link:https://www.alchemists.io/projects/refinements[Refinements].
|
37
42
|
* Supports link:https://rspec.info[RSpec].
|
@@ -39,14 +44,14 @@ toc::[]
|
|
39
44
|
* Supports link:https://docs.rubocop.org/rubocop-performance[Rubocop Performance].
|
40
45
|
* Supports link:https://github.com/rubocop-hq/rubocop-rake[Rubocop Rake].
|
41
46
|
* Supports link:https://github.com/rubocop-hq/rubocop-rspec[Rubocop RSpec].
|
42
|
-
* Supports link:https://github.com/whitesmith/RubyCritic[RubyCritic].
|
43
47
|
* Supports link:https://github.com/simplecov-ruby/simplecov[SimpleCov].
|
48
|
+
* Supports link:https://github.com/fxn/zeitwerk[Zeitwerk].
|
44
49
|
* Supports common settings and a structured layout for building projects.
|
45
50
|
* Provides common documentation:
|
46
51
|
** README
|
47
52
|
** CHANGES
|
48
|
-
** CONTRIBUTING
|
49
53
|
** CODE OF CONDUCT
|
54
|
+
** CONTRIBUTING
|
50
55
|
** LICENSE
|
51
56
|
|
52
57
|
// == Screencasts
|
@@ -79,28 +84,35 @@ From the command line, type: `rubysmith --help`
|
|
79
84
|
....
|
80
85
|
USAGE:
|
81
86
|
-b, --build NAME [options] Build new project.
|
82
|
-
-v, --version Show gem version.
|
83
|
-
-h, --help Show this message.
|
84
87
|
-c, --config ACTION Manage gem configuration: edit or view.
|
88
|
+
-h, --help Show this message.
|
89
|
+
-v, --version Show gem version.
|
85
90
|
|
86
91
|
BUILD OPTIONS:
|
87
|
-
--[no-]amazing_print Add Amazing Print.
|
88
|
-
--[no-]bundler-
|
89
|
-
--[no-]
|
90
|
-
--[no-]
|
91
|
-
--[no-]
|
92
|
-
--[no-]
|
93
|
-
--[no-]
|
94
|
-
--[no-]
|
95
|
-
--[no-]
|
96
|
-
--[no-]
|
97
|
-
--[no-]
|
98
|
-
--[no-]
|
99
|
-
--[no-]
|
100
|
-
--
|
101
|
-
--
|
102
|
-
--[no-]
|
103
|
-
--
|
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.
|
104
116
|
....
|
105
117
|
|
106
118
|
=== Building
|
@@ -118,12 +130,12 @@ to disable specific options, you can use the `--no-*` prefix. Example:
|
|
118
130
|
|
119
131
|
[source,bash]
|
120
132
|
----
|
121
|
-
rubysmith --build demo --no-
|
133
|
+
rubysmith --build demo --no-debug --no-guard
|
122
134
|
----
|
123
135
|
|
124
|
-
With the above example, both
|
125
|
-
project. Taking this a step further, you can also use the `--min` option to generate a
|
126
|
-
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:
|
127
139
|
|
128
140
|
[source,bash]
|
129
141
|
----
|
@@ -134,8 +146,20 @@ The above is essentially the same as building with _all_ options disabled. This
|
|
134
146
|
situations where you need to quickly script something up for sharing with others yet still want to
|
135
147
|
avoid using a Bundler Inline script so gem dependencies are not installed each time the code is run.
|
136
148
|
|
137
|
-
|
138
|
-
|
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).
|
139
163
|
|
140
164
|
=== Configuration
|
141
165
|
|
@@ -146,9 +170,7 @@ $HOME/.config/rubysmith/configuration.yml
|
|
146
170
|
....
|
147
171
|
|
148
172
|
It can also be configured via link:https://www.alchemists.io/projects/xdg[XDG] environment
|
149
|
-
variables.
|
150
|
-
|
151
|
-
The default configuration is as follows:
|
173
|
+
variables. The default configuration is as follows:
|
152
174
|
|
153
175
|
[source,yaml]
|
154
176
|
----
|
@@ -156,27 +178,31 @@ The default configuration is as follows:
|
|
156
178
|
:name:
|
157
179
|
:email:
|
158
180
|
:url:
|
159
|
-
:documentation:
|
160
|
-
:format: "md"
|
161
|
-
:license: "mit"
|
162
181
|
:build:
|
163
182
|
:amazing_print: true
|
164
|
-
:bundler_audit: true
|
165
183
|
:bundler_leak: true
|
184
|
+
:changes: true
|
185
|
+
:circle_ci: false
|
186
|
+
:conduct: true
|
166
187
|
:console: true
|
167
|
-
:
|
188
|
+
:contributions: true
|
189
|
+
:debug: true
|
168
190
|
:git: true
|
191
|
+
:git_hub: false
|
169
192
|
:git_lint: true
|
170
193
|
:guard: true
|
194
|
+
:license: true
|
195
|
+
:maximum: false
|
171
196
|
:minimum: false
|
172
|
-
:
|
197
|
+
:rake: true
|
198
|
+
:readme: true
|
173
199
|
:reek: true
|
174
200
|
:refinements: true
|
175
201
|
:rspec: true
|
176
202
|
:rubocop: true
|
177
|
-
:ruby_critic: true
|
178
203
|
:setup: true
|
179
204
|
:simple_cov: true
|
205
|
+
:zeitwerk: true
|
180
206
|
:builders:
|
181
207
|
:pragmater:
|
182
208
|
:comments:
|
@@ -189,11 +215,55 @@ The default configuration is as follows:
|
|
189
215
|
- "**/*Gemfile"
|
190
216
|
- "**/*Guardfile"
|
191
217
|
- "**/*Rakefile"
|
218
|
+
:documentation:
|
219
|
+
:format: "md"
|
220
|
+
:license: "mit"
|
221
|
+
:git_hub:
|
222
|
+
:user:
|
192
223
|
----
|
193
224
|
|
194
225
|
Feel free to take this default configuration, modify, and save as your own custom
|
195
226
|
`configuration.yml`.
|
196
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
|
+
|
197
267
|
== Development
|
198
268
|
|
199
269
|
To contribute, run:
|
data/lib/rubysmith/builder.rb
CHANGED
@@ -10,22 +10,14 @@ module Rubysmith
|
|
10
10
|
class Builder
|
11
11
|
using Refinements::Pathnames
|
12
12
|
|
13
|
-
|
13
|
+
HELPERS = {inserter: Text::Inserter, renderer: Renderers::ERB, kernel: Open3}.freeze
|
14
14
|
|
15
|
-
|
16
|
-
inserter: Text::Inserter,
|
17
|
-
renderer: Renderers::ERB,
|
18
|
-
kernel: Open3,
|
19
|
-
logger: LOGGER
|
20
|
-
}.freeze
|
15
|
+
def self.call(...) = new(...)
|
21
16
|
|
22
|
-
def
|
23
|
-
new configuration, helpers: helpers
|
24
|
-
end
|
25
|
-
|
26
|
-
def initialize configuration, helpers: HELPERS
|
17
|
+
def initialize configuration, helpers: HELPERS, container: Container
|
27
18
|
@configuration = configuration
|
28
19
|
@helpers = helpers
|
20
|
+
@container = container
|
29
21
|
end
|
30
22
|
|
31
23
|
def append content
|
@@ -102,7 +94,7 @@ module Rubysmith
|
|
102
94
|
|
103
95
|
private
|
104
96
|
|
105
|
-
attr_reader :configuration, :helpers
|
97
|
+
attr_reader :configuration, :helpers, :container
|
106
98
|
|
107
99
|
def execute *command
|
108
100
|
kernel.capture2e(*command).then do |result, status|
|
@@ -116,12 +108,15 @@ module Rubysmith
|
|
116
108
|
|
117
109
|
def kernel = helpers.fetch(__method__)
|
118
110
|
|
119
|
-
def logger =
|
111
|
+
def logger = container[__method__]
|
120
112
|
|
121
|
-
def relative_build_path = build_path.relative_path_from(configuration.
|
113
|
+
def relative_build_path = build_path.relative_path_from(configuration.target_root)
|
122
114
|
|
123
115
|
def build_path
|
124
|
-
pathway.end_path
|
116
|
+
pathway.end_path
|
117
|
+
.gsub("%project_name%", configuration.project_name)
|
118
|
+
.sub("%project_path%", configuration.project_path)
|
119
|
+
.sub ".erb", ""
|
125
120
|
end
|
126
121
|
|
127
122
|
def pathway = configuration.to_pathway
|
@@ -10,7 +10,7 @@ module Rubysmith
|
|
10
10
|
class Bundler
|
11
11
|
using Refinements::Pathnames
|
12
12
|
|
13
|
-
def self.call(
|
13
|
+
def self.call(...) = new(...).call
|
14
14
|
|
15
15
|
def initialize configuration, builder: Builder, client: ::Bundler::CLI
|
16
16
|
@configuration = configuration
|
@@ -23,9 +23,9 @@ module Rubysmith
|
|
23
23
|
.render
|
24
24
|
.replace(/\n\s+group/, "\n\ngroup")
|
25
25
|
.replace(/\n\s+gem/, "\n gem")
|
26
|
-
.replace(/ (?=.+refinements)/, "")
|
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] }
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
module Rubysmith
|
4
4
|
module Builders
|
5
|
-
# Builds project skeleton
|
6
|
-
class
|
7
|
-
def self.call(
|
5
|
+
# Builds project skeleton Circle CI configuration.
|
6
|
+
class CircleCI
|
7
|
+
def self.call(...) = new(...).call
|
8
8
|
|
9
9
|
def initialize configuration, builder: Builder
|
10
10
|
@configuration = configuration
|
@@ -12,9 +12,10 @@ module Rubysmith
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def call
|
15
|
-
return unless configuration.
|
15
|
+
return unless configuration.build_circle_ci
|
16
16
|
|
17
|
-
builder.call(configuration.with(template_path: "%project_name%/.
|
17
|
+
builder.call(configuration.with(template_path: "%project_name%/.circleci/config.yml.erb"))
|
18
|
+
.render
|
18
19
|
end
|
19
20
|
|
20
21
|
private
|
@@ -4,7 +4,7 @@ module Rubysmith
|
|
4
4
|
module Builders
|
5
5
|
# Builds project skeleton console for object inspection and exploration.
|
6
6
|
class Console
|
7
|
-
def self.call(
|
7
|
+
def self.call(...) = new(...).call
|
8
8
|
|
9
9
|
def initialize configuration, builder: Builder
|
10
10
|
@configuration = configuration
|
@@ -4,7 +4,7 @@ module Rubysmith
|
|
4
4
|
module Builders
|
5
5
|
# Builds project skeleton core structure and minimum file support.
|
6
6
|
class Core
|
7
|
-
def self.call(
|
7
|
+
def self.call(...) = new(...).call
|
8
8
|
|
9
9
|
def initialize configuration, builder: Builder
|
10
10
|
@configuration = configuration
|
@@ -12,8 +12,12 @@ module Rubysmith
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def call
|
15
|
-
builder.call(configuration.with(template_path: "%project_name%/lib/%
|
15
|
+
builder.call(configuration.with(template_path: "%project_name%/lib/%project_path%.rb.erb"))
|
16
16
|
.render
|
17
|
+
.replace(" require", "require")
|
18
|
+
.replace(/ (?=(Zeit|\.tap|\.setup))/, "")
|
19
|
+
.replace("\n \n", "\n\n")
|
20
|
+
|
17
21
|
builder.call(configuration.with(template_path: "%project_name%/.ruby-version.erb")).render
|
18
22
|
nil
|
19
23
|
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
|
@@ -5,7 +5,7 @@ module Rubysmith
|
|
5
5
|
module Git
|
6
6
|
# Builds project skeleton initial Git commit message.
|
7
7
|
class Commit
|
8
|
-
def self.call(
|
8
|
+
def self.call(...) = new(...).call
|
9
9
|
|
10
10
|
def initialize configuration, builder: Builder
|
11
11
|
@configuration = configuration
|
@@ -5,7 +5,7 @@ module Rubysmith
|
|
5
5
|
module Git
|
6
6
|
# Initializes project skeleton as a Git repository.
|
7
7
|
class Setup
|
8
|
-
def self.call(
|
8
|
+
def self.call(...) = new(...).call
|
9
9
|
|
10
10
|
def initialize configuration, builder: Builder
|
11
11
|
@configuration = configuration
|
@@ -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
|
@@ -4,7 +4,7 @@ module Rubysmith
|
|
4
4
|
module Builders
|
5
5
|
# Builds project skeleton Guard support for a red, green, refactor loop.
|
6
6
|
class Guard
|
7
|
-
def self.call(
|
7
|
+
def self.call(...) = new(...).call
|
8
8
|
|
9
9
|
def initialize configuration, builder: Builder
|
10
10
|
@configuration = configuration
|
@@ -6,7 +6,7 @@ module Rubysmith
|
|
6
6
|
module Builders
|
7
7
|
# Builds project skeleton pragmas so all Ruby strings are frozen by default.
|
8
8
|
class Pragma
|
9
|
-
def self.call(
|
9
|
+
def self.call(...) = new(...).call
|
10
10
|
|
11
11
|
def initialize configuration, client: Pragmater::Runner
|
12
12
|
@configuration = configuration
|