rubysmith 0.16.1 → 1.0.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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/LICENSE.adoc +207 -155
  4. data/README.adoc +340 -94
  5. data/lib/rubysmith/builder.rb +1 -2
  6. data/lib/rubysmith/builders/bundler.rb +7 -11
  7. data/lib/rubysmith/builders/circle_ci.rb +8 -2
  8. data/lib/rubysmith/builders/console.rb +8 -2
  9. data/lib/rubysmith/builders/core.rb +7 -3
  10. data/lib/rubysmith/builders/documentation/{change.rb → citation.rb} +8 -8
  11. data/lib/rubysmith/builders/documentation/license.rb +9 -4
  12. data/lib/rubysmith/builders/documentation/readme.rb +12 -18
  13. data/lib/rubysmith/builders/documentation/{contribution.rb → version.rb} +10 -5
  14. data/lib/rubysmith/builders/git/commit.rb +3 -1
  15. data/lib/rubysmith/builders/git/setup.rb +2 -1
  16. data/lib/rubysmith/builders/git_hub.rb +8 -3
  17. data/lib/rubysmith/builders/guard.rb +9 -3
  18. data/lib/rubysmith/builders/rake.rb +8 -3
  19. data/lib/rubysmith/builders/reek.rb +7 -2
  20. data/lib/rubysmith/builders/rspec/context.rb +8 -2
  21. data/lib/rubysmith/builders/rspec/helper.rb +8 -2
  22. data/lib/rubysmith/builders/rubocop.rb +34 -0
  23. data/lib/rubysmith/builders/setup.rb +8 -2
  24. data/lib/rubysmith/cli/actions/build.rb +10 -12
  25. data/lib/rubysmith/cli/actions/config.rb +4 -2
  26. data/lib/rubysmith/cli/actions/publish.rb +21 -0
  27. data/lib/rubysmith/cli/parser.rb +31 -0
  28. data/lib/rubysmith/cli/parsers/build.rb +80 -45
  29. data/lib/rubysmith/cli/parsers/core.rb +14 -10
  30. data/lib/rubysmith/cli/shell.rb +22 -15
  31. data/lib/rubysmith/configuration/content.rb +170 -0
  32. data/lib/rubysmith/configuration/defaults.yml +88 -0
  33. data/lib/rubysmith/configuration/enhancers/current_time.rb +24 -0
  34. data/lib/rubysmith/configuration/enhancers/git_email.rb +31 -0
  35. data/lib/rubysmith/configuration/enhancers/git_hub_user.rb +31 -0
  36. data/lib/rubysmith/configuration/enhancers/git_user.rb +33 -0
  37. data/lib/rubysmith/configuration/loader.rb +48 -0
  38. data/lib/rubysmith/container.rb +1 -1
  39. data/lib/rubysmith/extensions/bundler.rb +30 -0
  40. data/lib/rubysmith/extensions/milestoner.rb +35 -0
  41. data/lib/rubysmith/extensions/pragmater.rb +35 -0
  42. data/lib/rubysmith/extensions/rubocop.rb +29 -0
  43. data/lib/rubysmith/extensions/tocer.rb +37 -0
  44. data/lib/rubysmith/identity.rb +1 -1
  45. data/lib/rubysmith/templates/%project_name%/.github/ISSUE_TEMPLATE.md.erb +1 -4
  46. data/lib/rubysmith/templates/%project_name%/.rubocop.yml.erb +2 -0
  47. data/lib/rubysmith/templates/%project_name%/CITATION.cff.erb +16 -0
  48. data/lib/rubysmith/templates/%project_name%/Gemfile.erb +12 -9
  49. data/lib/rubysmith/templates/%project_name%/LICENSE-hippocratic.adoc.erb +214 -0
  50. data/lib/rubysmith/templates/%project_name%/LICENSE-hippocratic.md.erb +214 -0
  51. data/lib/rubysmith/templates/%project_name%/README.adoc.erb +20 -21
  52. data/lib/rubysmith/templates/%project_name%/README.md.erb +20 -21
  53. data/lib/rubysmith/templates/%project_name%/VERSIONS.adoc.erb +5 -0
  54. data/lib/rubysmith/templates/%project_name%/VERSIONS.md.erb +5 -0
  55. data/lib/rubysmith/templates/%project_name%/bin/rubocop.erb +0 -1
  56. data.tar.gz.sig +0 -0
  57. metadata +54 -38
  58. metadata.gz.sig +3 -2
  59. data/lib/rubysmith/builders/documentation/conduct.rb +0 -32
  60. data/lib/rubysmith/builders/pragma.rb +0 -32
  61. data/lib/rubysmith/builders/rubocop/formatter.rb +0 -31
  62. data/lib/rubysmith/builders/rubocop/setup.rb +0 -31
  63. data/lib/rubysmith/cli/configuration/content.rb +0 -97
  64. data/lib/rubysmith/cli/configuration/defaults.yml +0 -46
  65. data/lib/rubysmith/cli/configuration/enhancers/current_time.rb +0 -26
  66. data/lib/rubysmith/cli/configuration/enhancers/git_hub_user.rb +0 -33
  67. data/lib/rubysmith/cli/configuration/enhancers/version.rb +0 -26
  68. data/lib/rubysmith/cli/configuration/loader.rb +0 -46
  69. data/lib/rubysmith/cli/parsers/assembler.rb +0 -32
  70. data/lib/rubysmith/cli/parsers.rb +0 -11
  71. data/lib/rubysmith/templates/%project_name%/CHANGES.adoc.erb +0 -5
  72. data/lib/rubysmith/templates/%project_name%/CHANGES.md.erb +0 -5
  73. data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.adoc.erb +0 -114
  74. data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.md.erb +0 -115
  75. data/lib/rubysmith/templates/%project_name%/CONTRIBUTING.adoc.erb +0 -22
  76. data/lib/rubysmith/templates/%project_name%/CONTRIBUTING.md.erb +0 -22
data/README.adoc CHANGED
@@ -15,11 +15,10 @@ 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 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.
18
+ less than a link:https://www.alchemists.io/projects/gemsmith[Gemsmith] gem. Rubysmith is the
19
+ foundation of Gemsmith and provides a lot of the same functionality as Gemsmith but solely tailored
20
+ for pure Ruby projects. Again, this is a great tool for spiking quick Ruby implementations, sharing
21
+ code snippets with others, or building full blown Ruby projects for collaboration with others.
23
22
 
24
23
  toc::[]
25
24
 
@@ -31,6 +30,9 @@ toc::[]
31
30
  * Supports link:https://github.com/amazing-print/amazing_print[Amazing Print].
32
31
  * Supports link:https://github.com/rubymem/bundler-leak[Bundler Leak].
33
32
  * Supports link:https://circleci.com[Circle CI].
33
+ * Supports link:https://orcid.org[ORCID Citations].
34
+ * Supports console script for local development.
35
+ * Supports link:https://rubygems.org/gems/dead_end[DeadEnd].
34
36
  * Supports link:https://github.com/ruby/debug[Debug].
35
37
  * Supports link:https://git-scm.com[Git].
36
38
  * Supports link:https://github.com[GitHub].
@@ -49,22 +51,17 @@ toc::[]
49
51
  * Supports common settings and a structured layout for building projects.
50
52
  * Provides common documentation:
51
53
  ** README
52
- ** CHANGES
53
- ** CODE OF CONDUCT
54
- ** CONTRIBUTING
55
54
  ** LICENSE
56
-
57
- // == Screencasts
58
-
59
- // [link=https://www.alchemists.io/screencasts/rubysmith]
60
- // image::https://www.alchemists.io/images/screencasts/rubysmith/cover.svg[Screencast,600,240,role=focal_point]
55
+ ** VERSIONS
56
+ ** Security
57
+ ** Code of Conduct
58
+ ** Contributions
59
+ ** Communities
61
60
 
62
61
  == Requirements
63
62
 
64
63
  . A UNIX-based system.
65
64
  . link:https://www.ruby-lang.org[Ruby].
66
- . link:https://rubygems.org[RubyGems].
67
- . link:https://github.com/bundler/bundler[Bundler].
68
65
 
69
66
  == Setup
70
67
 
@@ -86,47 +83,52 @@ USAGE:
86
83
  -b, --build NAME [options] Build new project.
87
84
  -c, --config ACTION Manage gem configuration: edit or view.
88
85
  -h, --help Show this message.
86
+ -p, --publish VERSION Publish project.
89
87
  -v, --version Show gem version.
90
88
 
91
89
  BUILD OPTIONS:
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.
90
+ --[no-]amazing_print Add Amazing Print gem. Default: true.
91
+ --[no-]bundler-leak Add Bundler Leak gem. Default: true.
92
+ --[no-]circle_ci Add Circle CI configuration and badge. Default: false.
93
+ --[no-]citation Add citation documentation. Default: true.
94
+ --[no-]community Add community documentation. Default: false.
95
+ --[no-]conduct Add code of conduct documentation. Default: true.
96
+ --[no-]console Add console script. Default: true.
97
+ --[no-]contributions Add contributions documentation. Default: true.
98
+ --[no-]dead_end Add Dead End gem. 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-]versions Add version history. Default: true.
116
+ --[no-]zeitwerk Add Zeitwerk gem. Default: true.
116
117
  ....
117
118
 
118
- === Building
119
+ === Build
119
120
 
120
- The core functionality of this gem centers around the `--build` command with optional customization
121
- provided via build options. By default, all build options are enabled. Example:
121
+ The core functionality of this gem centers around the `--build` command and associated options
122
+ (flags). The build options allow you to further customize the kind of project you want to build.
123
+ Most build options are enabled by default. Example:
122
124
 
123
125
  [source,bash]
124
126
  ----
125
127
  rubysmith --build demo
126
128
  ----
127
129
 
128
- Running the above will generate a new `demo` Ruby project with all options enabled. Should you wish
129
- to disable specific options, you can use the `--no-*` prefix. Example:
130
+ Running the above will generate a new `demo` Ruby project. Should you wish to disable specific
131
+ options, you can use `--no-*` prefixes. Example:
130
132
 
131
133
  [source,bash]
132
134
  ----
@@ -155,11 +157,178 @@ rubysmith --build demo --min --zeitwerk
155
157
  rubysmith --build demo --max --no-debug
156
158
  ----
157
159
 
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).
160
+ With the above examples, the first line will _disable_ all options except Zeitwerk while the second
161
+ line will _enable_ all options except Debug. This can be a handy way to build a new project with all
162
+ options either disabled or enabled with only a few select options modified. To have specific options
163
+ enabled/disabled _every time_ you build a new Ruby project, you can edit your global configuration
164
+ for making these settings permanent (see below for details).
165
+
166
+ There is a lot of flexibility when building a new project through the various build options. I'll
167
+ walk you through each so you can better understand why you'd want to enable or disable any one of
168
+ them.
169
+
170
+ ==== Amazing Print
171
+
172
+ The `--amazing_print` option allows you to build your project with the
173
+ link:https://github.com/amazing-print/amazing_print[Amazing Print] gem for debugging purposes and is
174
+ a handy debugging tool when inspecting your Ruby objects and printing details in a quick to read
175
+ format.
176
+
177
+ ==== Bundler Leak
178
+
179
+ The `--bundler-leak` option allows you to build your project with the
180
+ link:https://github.com/rubymem/bundler-leak[Bundler Leak] gem which helps detect memory leaks in
181
+ your gem dependencies.
182
+
183
+ ==== Circle CI
184
+
185
+ The `--circle_ci` option allows you to build your project with link:https://circleci.com[Circle CI]
186
+ configured so you can get your project building as quickly as possible. This includes a README badge
187
+ and configuration YAML.
188
+
189
+ ==== Citation
190
+
191
+ The `--citation` option allows you to add a link:https://citation-file-format.github.io[citation]
192
+ file to your project so you can help the research community cite your work in their studies if your
193
+ project is used.
194
+
195
+ ==== Community
196
+
197
+ The `--community` option allows you to link to your open source community, organization, or group
198
+ chat to help with community engagement of your work.
199
+
200
+ ==== Code of Conduct
201
+
202
+ The `--conduct` option allows you to link to your link:https://www.contributor-covenant.org[Code of
203
+ Conduct] to encourage good community participation. Regardless of whether you have a community or
204
+ not, the code of conduct is good to encourage in general.
205
+
206
+ ==== Console
207
+
208
+ The `--console` option allows you to add a `console` script for local development. So instead of
209
+ typing `irb`, you can type `bin/console` and get an IRB session with all of your project's code
210
+ loaded.
211
+
212
+ ==== Contributions
213
+
214
+ The `--contributions` option allows you to link to contributing documentation so people know to
215
+ contribute back to your work.
216
+
217
+ ==== DeadEnd
218
+
219
+ The `--dead_end` option allows you build your project with the
220
+ link:https://github.com/zombocom/dead_end[DeadEnd] for debugging purposes since the DeadEnd gem will
221
+ show you where you are missing `end`'s and closing statements.
222
+
223
+ ==== Debug
224
+
225
+ The `--debug` option allows you add the link:https://github.com/ruby/debug[Debug] gem to your
226
+ project for debugging your code by setting breakpoints, remotely connecting to running code, and
227
+ much more.
228
+
229
+ ==== Git
230
+
231
+ The `--git` option allows you add link:https://git-scm.com[Git] repository support.
232
+
233
+ ==== GitHub
234
+
235
+ The `--git_hub` option allows you add link:https://github.com[GitHub] templates to your project for
236
+ issues and pull requests.
237
+
238
+ ==== Git Lint
239
+
240
+ The `--git-lint` option allows you to add the link:https://www.alchemists.io/projects/git-lint[Git
241
+ Lint] gem to your project to ensure you are crafting your Git commits in a consistent and readable
242
+ manner.
243
+
244
+ ==== Guard
245
+
246
+ The `--guard` option allows you add the link:https://github.com/guard/guard[Guard] gem to your
247
+ project for rapid red, green, refactor development cycles.
248
+
249
+ ==== License
250
+
251
+ The `--license` option ensures you build your project with a license.
252
+
253
+ ==== Maximum
254
+
255
+ The `--max` option allows you to build your project with _all_ options _enabled_. This is a quick way
256
+ to build a new project with all options enabled without having to pick and choose.
257
+
258
+ ==== Minimum
259
+
260
+ The `--min` option allows you to build your project with _all_ options _disabled_. This is a quick
261
+ way to build a new project with the bare minimum of support which is a one step above reaching for
262
+ Bundler Inline script.
263
+
264
+ ==== Rake
265
+
266
+ The `--rake` option allows you to add the link:https://github.com/ruby/rake[Rake] gem for quickly
267
+ crafting build scripts.
268
+
269
+ ==== Readme
270
+
271
+ The `--readme` option allows you to add README documentation to your project.
272
+
273
+ ==== Reek
274
+
275
+ The `--reek` option allows you add the link:https://github.com/troessner/reek[Reek] gem to your
276
+ project for code smell and code quality support.
277
+
278
+ ==== Refinements
279
+
280
+ The `--refinements` option allows you to add the
281
+ link:https://www.alchemists.io/projects/refinements[Refinements] gem to your project which enhances
282
+ Ruby core objects without monkey patching your code.
283
+
284
+ ==== RSpec
285
+
286
+ The `--rspec` option allows you add the link:https://rspec.info[RSpec] gem to your project for
287
+ defining your project specifications and have a framework for testing your code.
288
+
289
+ ==== Rubocop
290
+
291
+ The `--rubocop` option allows you to add the link:https://docs.rubocop.org[[RuboCop] gem and suite
292
+ of gems to your project for good code quality standards. This the Alchemists style guide, provided
293
+ by the link:https://www.alchemists.io/projects/code_quality[Code Quality] project, is what is used
294
+ by default.
295
+
296
+ ==== Setup
297
+
298
+ The `--setup` option allows you to configure you project with automated setup instructions so anyone
299
+ new to your project can quickly get started by running the `bin/setup` script.
300
+
301
+ ==== SimpleCov
302
+
303
+ The `--simple_cov` option allows you add the
304
+ link:https://github.com/simplecov-ruby/simplecov[SimpleCov] gem to your project to provide full
305
+ analysis of what your quality of code is for the project.
306
+
307
+ ==== Versions
308
+
309
+ The `--versions` option allows you add a `VERSIONS` file to your project to provide details about
310
+ all published versions of your project.
311
+
312
+ ==== Zeitwerk
313
+
314
+ The `--zeitwerk` option allows you add the link:https://github.com/fxn/zeitwerk[Zeitwerk] gem to
315
+ your project so you can reduce the maintence burden of managing requirements when adding new objects
316
+ to your project.
317
+
318
+ === Publish
319
+
320
+ Rubysmith can be used to publish your Ruby projects. This is done via the `--publish` command. If,
321
+ for example, you want to publish `0.1.0` of your `demo` project you could do that as follows:
322
+
323
+ [source,bash]
324
+ ----
325
+ cd demo
326
+ rubysmith --publish 0.1.0
327
+ ----
328
+
329
+ This will publish (tag) your `demo` project as `0.1.0` both locally and on your remote Git repository.
330
+ Rubysmith uses link:https://www.alchemists.io/projects/milestoner[Milestoner] to handle publishing
331
+ of your project for you. You can use either but the convenience is built in for you.
163
332
 
164
333
  === Configuration
165
334
 
@@ -175,17 +344,20 @@ variables. The default configuration is as follows:
175
344
  [source,yaml]
176
345
  ----
177
346
  :author:
178
- :name:
179
347
  :email:
348
+ :family_name:
349
+ :given_name:
180
350
  :url:
181
351
  :build:
182
352
  :amazing_print: true
183
353
  :bundler_leak: true
184
- :changes: true
185
354
  :circle_ci: false
355
+ :citation: true
356
+ :community: false
186
357
  :conduct: true
187
358
  :console: true
188
359
  :contributions: true
360
+ :dead_end: true
189
361
  :debug: true
190
362
  :git: true
191
363
  :git_hub: false
@@ -200,14 +372,34 @@ variables. The default configuration is as follows:
200
372
  :refinements: true
201
373
  :rspec: true
202
374
  :rubocop: true
375
+ :security: true
203
376
  :setup: true
204
377
  :simple_cov: true
378
+ :versions: true
205
379
  :zeitwerk: true
206
- :builders:
380
+ :citation:
381
+ :affiliation:
382
+ :message: Please use the following metadata when citing this project in your work.
383
+ :orcid:
384
+ :documentation:
385
+ :format: "adoc"
386
+ :extensions:
387
+ :milestoner:
388
+ :documentation:
389
+ :format: "md"
390
+ :prefixes:
391
+ - Fixed
392
+ - Added
393
+ - Updated
394
+ - Removed
395
+ - Refactored
396
+ :sign: false
207
397
  :pragmater:
208
398
  :comments:
209
399
  - "# frozen_string_literal: true"
210
400
  :includes:
401
+ - "**/*.gemspec"
402
+ - "**/*.rake"
211
403
  - "**/*.rb"
212
404
  - "**/*bin/console"
213
405
  - "**/*bin/guard"
@@ -215,47 +407,86 @@ variables. The default configuration is as follows:
215
407
  - "**/*Gemfile"
216
408
  - "**/*Guardfile"
217
409
  - "**/*Rakefile"
218
- :documentation:
219
- :format: "md"
220
- :license: "mit"
410
+ :tocer:
411
+ :includes:
412
+ - "README.md"
413
+ :label: "## Table of Contents"
221
414
  :git_hub:
222
415
  :user:
416
+ :license:
417
+ :label: Hippocratic
418
+ :name: hippocratic
419
+ :version: 3.0
420
+ :project:
421
+ :url:
422
+ :community:
423
+ :conduct:
424
+ :contributions:
425
+ :download:
426
+ :home:
427
+ :issues:
428
+ :license:
429
+ :security:
430
+ :source:
431
+ :versions:
432
+ :version: 0.0.0
223
433
  ----
224
434
 
225
435
  Feel free to take this default configuration, modify, and save as your own custom
226
436
  `configuration.yml`.
227
437
 
438
+ By customizing your configuration, you can change Rubysmith's default behavior when building
439
+ projects. This is a great way to define your own specialized settings other than what is provide for
440
+ you by default. This is also a handy way to provide additional information needed for some of the
441
+ build options. I'll walk you through each section of the configuration so you can learn more.
442
+
228
443
  ==== Author
229
444
 
230
445
  Author information is used when generating project documentation and is recommended you fill this
231
446
  information in before building a project. Example:
232
447
 
233
448
  :author:
234
- :name: Jill Smith
235
449
  :email: jsmith@example.com
450
+ :family_name: Smith
451
+ :given_name: Jill
236
452
  :url: https://www.exmaple.com/team/jsmith
237
453
 
454
+ If your global link:https://git-scm.com[Git] configuration is properly configured, your given name;
455
+ family name; and email will be used by default. Should you not want to defer to Git, you can supply
456
+ custom values as desired. The URL is the only value that can't be automatically computed for you.
457
+
238
458
  ==== Build
239
459
 
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`).
460
+ All build options can only be `true` or `false` booleans. Should you want a different configuration
461
+ than what is enabled/disabled by default, you'll want to customize these options as you see fit.
462
+ When changing build options, they will dynamically show up when viewing usage (i.e. `rubysmith
463
+ --help`). All of these options are explained in greater detail above.
244
464
 
245
- ==== Builders
465
+ ==== Citations
246
466
 
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.
467
+ This section allows you to configure your link:https://orcid.org[ORCiD]
468
+ link:https://citation-file-format.github.io[citation] information used by the research community.
469
+ You should definitely fill this in. Your author information, detailed above, will be used as well.
250
470
 
251
471
  ==== Documentation
252
472
 
253
- Documentation can be configured as follows:
473
+ Use this section to define the kind of documentation you want generated for your project. The
474
+ following options are available:
475
+
476
+ * `adoc` - Uses link:https://asciidoctor.org[ASCII Doc] format.
477
+ * `md` - Use link:https://asciidoctor.org[Markdown] format.
478
+
479
+ ==== Extensions
254
480
 
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.
481
+ Extensions are additional tooling which can be configured specifically for Rubysmith. The following
482
+ extensions are currently supported and will override each extensions global configuration should you
483
+ be using them individually for other purposes:
257
484
 
258
- No other licenses are supported at this time but might be expanded up on in the future.
485
+ * link:https://www.alchemists.io/projects/milestoner[Milestoner]
486
+ * link:https://www.alchemists.io/projects/pragmater[Pragmater]
487
+ * link:https://www.alchemists.io/projects/tocer[Tocer]
488
+
489
+ Follow the above links to learn more about each extension's gem configuration.
259
490
 
260
491
  ==== GitHub
261
492
 
@@ -264,6 +495,39 @@ information is used for documentation purposes and Circle CI badge association.
264
495
  this information, Rubysmith will automatically fallback to pulling this information from your Git
265
496
  configuration (i.e. `github.user`). If all else fails, then nothing will be used.
266
497
 
498
+ ==== License
499
+
500
+ Use this section to define the license you want to use for your project. The following kinds of
501
+ license are available:
502
+
503
+ * *Apache*: Use `apache` as the name and then supply the appropriate label and version.
504
+ * *Hippocratic*: Use `hippocratic` as the name and then supply the appropriate label and version.
505
+ * *MIT*: Use `mit` as the name and then supply the appropriate label and version.
506
+
507
+ ==== Project
508
+
509
+ There are two many categories within this section: URLs and version. The URLs allow you to link to
510
+ specific documentation related to your project. You'll definitely want to customize these as makes
511
+ sense since these URLs are used for documentation, citations, and general project information. You
512
+ can also use `%project_name%` as a placeholder anywhere in your URL and Rubysmith will ensure your
513
+ place holder is replaced with your project name when generating a new project. Example:
514
+
515
+ ....
516
+ # Configuration
517
+ https://www.example.com/%project_name%
518
+
519
+ # Command
520
+ rubysmith --build demo
521
+
522
+ # Actual (computed result)
523
+ https://www.example.com/demo
524
+ ....
525
+
526
+ As for the `version` key, this defines the default version of newly created projects. `0.0.0` is the
527
+ default but you can use a higher version number like `0.1.0` or even `1.0.0` if you are super
528
+ confident in your work. That said, the lower the number is better when building your initial
529
+ project.
530
+
267
531
  == Development
268
532
 
269
533
  To contribute, run:
@@ -291,37 +555,19 @@ To test, run:
291
555
  bundle exec rake
292
556
  ----
293
557
 
294
- == Versioning
295
-
296
- Read link:https://semver.org[Semantic Versioning] for details. Briefly, it means:
297
-
298
- * Major (X.y.z) - Incremented for any backwards incompatible public API changes.
299
- * Minor (x.Y.z) - Incremented for new, backwards compatible, public API enhancements/fixes.
300
- * Patch (x.y.Z) - Incremented for small, backwards compatible, bug fixes.
301
-
302
- == Code of Conduct
303
-
304
- Please note that this project is released with a link:CODE_OF_CONDUCT.adoc[CODE OF CONDUCT]. By
305
- participating in this project you agree to abide by its terms.
306
-
307
- == Contributions
308
-
309
- Read link:CONTRIBUTING.adoc[CONTRIBUTING] for details.
310
-
311
- == Community
558
+ == link:https://www.alchemists.io/policies/license[License]
312
559
 
313
- Feel free to link:https://www.alchemists.io/community[join the commmunity] for discussions related
314
- to this project and much more.
560
+ == link:https://www.alchemists.io/policies/security[Security]
315
561
 
316
- == License
562
+ == link:https://www.alchemists.io/policies/code_of_conduct[Code of Conduct]
317
563
 
318
- Read link:LICENSE.adoc[LICENSE] for details.
564
+ == link:https://www.alchemists.io/policies/contributions[Contributions]
319
565
 
320
- == History
566
+ == link:https://www.alchemists.io/projects/rubysmith/versions[Versions]
321
567
 
322
- Read link:CHANGES.adoc[CHANGES] for details.
323
- Built with link:https://www.alchemists.io/projects/gemsmith[Gemsmith].
568
+ == link:https://www.alchemists.io/community[Community]
324
569
 
325
570
  == Credits
326
571
 
327
- Engineered by link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
572
+ * Built with link:https://www.alchemists.io/projects/gemsmith[Gemsmith].
573
+ * Engineered by link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
@@ -5,7 +5,6 @@ require "open3"
5
5
  require "logger"
6
6
 
7
7
  module Rubysmith
8
- # :reek:TooManyMethods
9
8
  # Provides common functionality necessary for all builders.
10
9
  class Builder
11
10
  using Refinements::Pathnames
@@ -119,6 +118,6 @@ module Rubysmith
119
118
  .sub ".erb", ""
120
119
  end
121
120
 
122
- def pathway = configuration.to_pathway
121
+ def pathway = configuration.pathway
123
122
  end
124
123
  end
@@ -1,25 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler"
4
- require "bundler/cli"
5
- require "refinements/pathnames"
3
+ require "refinements/structs"
6
4
 
7
5
  module Rubysmith
8
6
  module Builders
9
- # Builds Bundler Gemfile configuration and installs gem dependencies for project skeleton.
7
+ # Builds Bundler Gemfile configuration for project skeleton.
10
8
  class Bundler
11
- using Refinements::Pathnames
9
+ using Refinements::Structs
12
10
 
13
11
  def self.call(...) = new(...).call
14
12
 
15
- def initialize configuration, builder: Builder, client: ::Bundler::CLI
13
+ def initialize configuration, builder: Builder
16
14
  @configuration = configuration
17
15
  @builder = builder
18
- @client = client
19
16
  end
20
17
 
21
18
  def call
22
- builder.call(configuration.with(template_path: "%project_name%/Gemfile.erb"))
19
+ builder.call(configuration.merge(template_path: "%project_name%/Gemfile.erb"))
23
20
  .render
24
21
  .replace(/\n\s+group/, "\n\ngroup")
25
22
  .replace(/\n\s+gem/, "\n gem")
@@ -28,13 +25,12 @@ module Rubysmith
28
25
  .replace(/\n\ngroup :(code_quality|development|test|tools) do\nend/, "")
29
26
  .replace(/org"\n+/, "org\"\n\n")
30
27
 
31
- configuration.project_root.change_dir { client.start %w[install --quiet] }
32
- nil
28
+ configuration
33
29
  end
34
30
 
35
31
  private
36
32
 
37
- attr_reader :configuration, :builder, :client
33
+ attr_reader :configuration, :builder
38
34
  end
39
35
  end
40
36
  end
@@ -1,9 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "refinements/structs"
4
+
3
5
  module Rubysmith
4
6
  module Builders
5
7
  # Builds project skeleton Circle CI configuration.
6
8
  class CircleCI
9
+ using Refinements::Structs
10
+
7
11
  def self.call(...) = new(...).call
8
12
 
9
13
  def initialize configuration, builder: Builder
@@ -12,10 +16,12 @@ module Rubysmith
12
16
  end
13
17
 
14
18
  def call
15
- return unless configuration.build_circle_ci
19
+ return configuration unless configuration.build_circle_ci
16
20
 
17
- builder.call(configuration.with(template_path: "%project_name%/.circleci/config.yml.erb"))
21
+ builder.call(configuration.merge(template_path: "%project_name%/.circleci/config.yml.erb"))
18
22
  .render
23
+
24
+ configuration
19
25
  end
20
26
 
21
27
  private