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
@@ -1,33 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "refinements/structs"
4
+
3
5
  module Rubysmith
4
6
  module CLI
5
7
  module Parsers
6
8
  # Handles parsing of Command Line Interface (CLI) build options.
7
9
  class Build
10
+ using Refinements::Structs
11
+
8
12
  def self.call(...) = new(...).call
9
13
 
10
- def initialize client: CLIENT, container: Container
14
+ def initialize configuration = Container[:configuration],
15
+ client: Parser::CLIENT,
16
+ container: Container
17
+ @configuration = configuration
11
18
  @client = client
12
19
  @container = container
13
20
  end
14
21
 
15
22
  def call arguments = []
16
23
  client.separator "\nBUILD OPTIONS:\n"
17
- private_methods.sort.grep(/add_/).each { |method| __send__ method }
18
- arguments.empty? ? arguments : client.parse!(arguments)
24
+ collate
25
+ client.parse arguments
26
+ configuration
19
27
  end
20
28
 
21
29
  private
22
30
 
23
- attr_reader :client, :container
31
+ attr_reader :configuration, :client, :container
32
+
33
+ def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
24
34
 
25
35
  def add_amazing_print
26
36
  client.on(
27
37
  "--[no-]amazing_print",
28
38
  "Add Amazing Print gem. #{default __method__}."
29
39
  ) do |value|
30
- configuration.build_amazing_print = value
40
+ configuration.merge! build_amazing_print: value
31
41
  end
32
42
  end
33
43
 
@@ -36,16 +46,7 @@ module Rubysmith
36
46
  "--[no-]bundler-leak",
37
47
  "Add Bundler Leak gem. #{default __method__}."
38
48
  ) do |value|
39
- configuration.build_bundler_leak = value
40
- end
41
- end
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
+ configuration.merge! build_bundler_leak: value
49
50
  end
50
51
  end
51
52
 
@@ -54,16 +55,16 @@ module Rubysmith
54
55
  "--[no-]console",
55
56
  "Add console script. #{default __method__}."
56
57
  ) do |value|
57
- configuration.build_console = value
58
+ configuration.merge! build_console: value
58
59
  end
59
60
  end
60
61
 
61
62
  def add_contributions
62
63
  client.on(
63
64
  "--[no-]contributions",
64
- "Add CONTRIBUTING documentation. #{default __method__}."
65
+ "Add contributions documentation. #{default __method__}."
65
66
  ) do |value|
66
- configuration.build_contributions = value
67
+ configuration.merge! build_contributions: value
67
68
  end
68
69
  end
69
70
 
@@ -72,16 +73,43 @@ module Rubysmith
72
73
  "--[no-]circle_ci",
73
74
  "Add Circle CI configuration and badge. #{default __method__}."
74
75
  ) do |value|
75
- configuration.build_circle_ci = value
76
+ configuration.merge! build_circle_ci: value
77
+ end
78
+ end
79
+
80
+ def add_citation
81
+ client.on(
82
+ "--[no-]citation",
83
+ "Add citation documentation. #{default __method__}."
84
+ ) do |value|
85
+ configuration.merge! build_citation: value
86
+ end
87
+ end
88
+
89
+ def add_community
90
+ client.on(
91
+ "--[no-]community",
92
+ "Add community documentation. #{default __method__}."
93
+ ) do |value|
94
+ configuration.merge! build_community: value
76
95
  end
77
96
  end
78
97
 
79
98
  def add_conduct
80
99
  client.on(
81
100
  "--[no-]conduct",
82
- "Add CODE_OF_CONDUCT documentation. #{default __method__}."
101
+ "Add code of conduct documentation. #{default __method__}."
102
+ ) do |value|
103
+ configuration.merge! build_conduct: value
104
+ end
105
+ end
106
+
107
+ def add_dead_end
108
+ client.on(
109
+ "--[no-]dead_end",
110
+ "Add Dead End gem. #{default __method__}."
83
111
  ) do |value|
84
- configuration.build_conduct = value
112
+ configuration.merge! build_dead_end: value
85
113
  end
86
114
  end
87
115
 
@@ -90,7 +118,7 @@ module Rubysmith
90
118
  "--[no-]debug",
91
119
  "Add Debug gem. #{default __method__}."
92
120
  ) do |value|
93
- configuration.build_debug = value
121
+ configuration.merge! build_debug: value
94
122
  end
95
123
  end
96
124
 
@@ -99,7 +127,7 @@ module Rubysmith
99
127
  "--[no-]git",
100
128
  "Add Git. #{default __method__}."
101
129
  ) do |value|
102
- configuration.build_git = value
130
+ configuration.merge! build_git: value
103
131
  end
104
132
  end
105
133
 
@@ -108,7 +136,7 @@ module Rubysmith
108
136
  "--[no-]git_hub",
109
137
  "Add GitHub templates. #{default __method__}."
110
138
  ) do |value|
111
- configuration.build_git_hub = value
139
+ configuration.merge! build_git_hub: value
112
140
  end
113
141
  end
114
142
 
@@ -117,7 +145,7 @@ module Rubysmith
117
145
  "--[no-]git-lint",
118
146
  "Add Git Lint gem. #{default __method__}."
119
147
  ) do |value|
120
- configuration.build_git_lint = value
148
+ configuration.merge! build_git_lint: value
121
149
  end
122
150
  end
123
151
 
@@ -126,16 +154,16 @@ module Rubysmith
126
154
  "--[no-]guard",
127
155
  "Add Guard gem. #{default __method__}."
128
156
  ) do |value|
129
- configuration.build_guard = value
157
+ configuration.merge! build_guard: value
130
158
  end
131
159
  end
132
160
 
133
161
  def add_license
134
162
  client.on(
135
163
  "--[no-]license",
136
- "Add LICENSE documentation. #{default __method__}."
164
+ "Add license documentation. #{default __method__}."
137
165
  ) do |value|
138
- configuration.build_license = value
166
+ configuration.merge! build_license: value
139
167
  end
140
168
  end
141
169
 
@@ -143,8 +171,8 @@ module Rubysmith
143
171
  client.on(
144
172
  "--max",
145
173
  "Use maximum/enabled options. #{default __method__}."
146
- ) do |value|
147
- configuration.maximize.build_maximum = value
174
+ ) do
175
+ configuration.merge!(**configuration.maximize.to_h)
148
176
  end
149
177
  end
150
178
 
@@ -152,8 +180,8 @@ module Rubysmith
152
180
  client.on(
153
181
  "--min",
154
182
  "Use minimum/disabled options. #{default __method__}."
155
- ) do |value|
156
- configuration.minimize.build_minimum = value
183
+ ) do
184
+ configuration.merge!(**configuration.minimize.to_h)
157
185
  end
158
186
  end
159
187
 
@@ -162,16 +190,16 @@ module Rubysmith
162
190
  "--[no-]rake",
163
191
  "Add Rake gem. #{default __method__}."
164
192
  ) do |value|
165
- configuration.build_rake = value
193
+ configuration.merge! build_rake: value
166
194
  end
167
195
  end
168
196
 
169
197
  def add_readme
170
198
  client.on(
171
199
  "--[no-]readme",
172
- "Add README documentation. #{default __method__}."
200
+ "Add readme documentation. #{default __method__}."
173
201
  ) do |value|
174
- configuration.build_readme = value
202
+ configuration.merge! build_readme: value
175
203
  end
176
204
  end
177
205
 
@@ -180,7 +208,7 @@ module Rubysmith
180
208
  "--[no-]reek",
181
209
  "Add Reek gem. #{default __method__}."
182
210
  ) do |value|
183
- configuration.build_reek = value
211
+ configuration.merge! build_reek: value
184
212
  end
185
213
  end
186
214
 
@@ -189,7 +217,7 @@ module Rubysmith
189
217
  "--[no-]refinements",
190
218
  "Add Refinements gem. #{default __method__}."
191
219
  ) do |value|
192
- configuration.build_refinements = value
220
+ configuration.merge! build_refinements: value
193
221
  end
194
222
  end
195
223
 
@@ -198,16 +226,16 @@ module Rubysmith
198
226
  "--[no-]rspec",
199
227
  "Add RSpec gem. #{default __method__}."
200
228
  ) do |value|
201
- configuration.build_rspec = value
229
+ configuration.merge! build_rspec: value
202
230
  end
203
231
  end
204
232
 
205
233
  def add_rubocop
206
234
  client.on(
207
235
  "--[no-]rubocop",
208
- "Add Rubocop gems. #{default __method__}."
236
+ "Add RuboCop gems. #{default __method__}."
209
237
  ) do |value|
210
- configuration.build_rubocop = value
238
+ configuration.merge! build_rubocop: value
211
239
  end
212
240
  end
213
241
 
@@ -216,7 +244,7 @@ module Rubysmith
216
244
  "--[no-]setup",
217
245
  "Add setup script. #{default __method__}."
218
246
  ) do |value|
219
- configuration.build_setup = value
247
+ configuration.merge! build_setup: value
220
248
  end
221
249
  end
222
250
 
@@ -225,7 +253,16 @@ module Rubysmith
225
253
  "--[no-]simple_cov",
226
254
  "Add SimpleCov gem. #{default __method__}."
227
255
  ) do |value|
228
- configuration.build_simple_cov = value
256
+ configuration.merge! build_simple_cov: value
257
+ end
258
+ end
259
+
260
+ def add_versions
261
+ client.on(
262
+ "--[no-]versions",
263
+ "Add version history. #{default __method__}."
264
+ ) do |value|
265
+ configuration.merge! build_versions: value
229
266
  end
230
267
  end
231
268
 
@@ -234,7 +271,7 @@ module Rubysmith
234
271
  "--[no-]zeitwerk",
235
272
  "Add Zeitwerk gem. #{default __method__}."
236
273
  ) do |value|
237
- configuration.build_zeitwerk = value
274
+ configuration.merge! build_zeitwerk: value
238
275
  end
239
276
  end
240
277
 
@@ -246,8 +283,6 @@ module Rubysmith
246
283
  .then { |colored_boolean| "Default: #{colored_boolean}" }
247
284
  end
248
285
 
249
- def configuration = container[__method__]
250
-
251
286
  def colorizer = container[__method__]
252
287
  end
253
288
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubysmith/identity"
4
3
  require "refinements/structs"
5
4
 
6
5
  module Rubysmith
@@ -12,21 +11,22 @@ module Rubysmith
12
11
 
13
12
  def self.call(...) = new(...).call
14
13
 
15
- def initialize client: CLIENT, container: Container
14
+ def initialize configuration = Container[:configuration], client: Parser::CLIENT
15
+ @configuration = configuration
16
16
  @client = client
17
- @container = container
18
17
  end
19
18
 
20
19
  def call arguments = []
21
20
  client.banner = "#{Identity::LABEL} - #{Identity::SUMMARY}"
22
21
  client.separator "\nUSAGE:\n"
23
22
  collate
24
- arguments.empty? ? arguments : client.parse!(arguments)
23
+ client.parse arguments
24
+ configuration
25
25
  end
26
26
 
27
27
  private
28
28
 
29
- attr_reader :client, :container
29
+ attr_reader :configuration, :client
30
30
 
31
31
  def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
32
32
 
@@ -35,7 +35,7 @@ module Rubysmith
35
35
  "--config ACTION",
36
36
  %i[edit view],
37
37
  "Manage gem configuration: edit or view." do |action|
38
- configuration.action_config = action
38
+ configuration.merge! action_config: action
39
39
  end
40
40
  end
41
41
 
@@ -45,19 +45,23 @@ module Rubysmith
45
45
  end
46
46
  end
47
47
 
48
+ def add_publish
49
+ client.on "-p", "--publish VERSION", "Publish project." do |version|
50
+ configuration.merge! action_publish: true, project_version: version
51
+ end
52
+ end
53
+
48
54
  def add_version
49
55
  client.on "-v", "--version", "Show gem version." do
50
- configuration.action_version = true
56
+ configuration.merge! action_version: true
51
57
  end
52
58
  end
53
59
 
54
60
  def add_help
55
61
  client.on "-h", "--help", "Show this message." do
56
- configuration.action_help = true
62
+ configuration.merge! action_help: true
57
63
  end
58
64
  end
59
-
60
- def configuration = container[__method__]
61
65
  end
62
66
  end
63
67
  end
@@ -1,43 +1,50 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "milestoner"
4
+
3
5
  module Rubysmith
4
6
  module CLI
5
7
  # The main Command Line Interface (CLI) object.
6
8
  class Shell
7
- ACTIONS = {config: Actions::Config.new, build: Actions::Build.new}.freeze
9
+ ACTIONS = {
10
+ config: Actions::Config.new,
11
+ build: Actions::Build.new,
12
+ publish: Actions::Publish.new
13
+ }.freeze
8
14
 
9
- def initialize parser: Parsers::Assembler.new, actions: ACTIONS, container: Container
15
+ def initialize parser: Parser.new, actions: ACTIONS, container: Container
10
16
  @parser = parser
11
17
  @actions = actions
12
18
  @container = container
13
19
  end
14
20
 
15
21
  def call arguments = []
16
- case parse arguments
17
- in action_config: Symbol => action then config action
18
- in action_build: true then build
19
- in action_version: true then logger.info configuration.version
20
- else usage
21
- end
22
+ perform parser.call(arguments)
23
+ rescue OptionParser::ParseError, Milestoner::Error => error
24
+ logger.error { error.message }
22
25
  end
23
26
 
24
27
  private
25
28
 
26
29
  attr_reader :parser, :actions, :container
27
30
 
28
- def parse arguments = []
29
- parser.call arguments
30
- rescue StandardError => error
31
- logger.error error.message
31
+ def perform configuration
32
+ case configuration
33
+ in action_config: Symbol => action then config action
34
+ in action_build: true then build configuration
35
+ in action_publish: true then publish configuration
36
+ in action_version: true then logger.info Identity::VERSION_LABEL
37
+ else usage
38
+ end
32
39
  end
33
40
 
34
41
  def config(action) = actions.fetch(__method__).call(action)
35
42
 
36
- def build = actions.fetch(__method__).call
43
+ def build(configuration) = actions.fetch(__method__).call(configuration)
37
44
 
38
- def usage = logger.unknown(parser.to_s)
45
+ def publish(configuration) = actions.fetch(__method__).call(configuration)
39
46
 
40
- def configuration = container[__method__]
47
+ def usage = logger.unknown(parser.to_s)
41
48
 
42
49
  def logger = container[__method__]
43
50
  end
@@ -0,0 +1,170 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "refinements/arrays"
5
+ require "refinements/strings"
6
+ require "refinements/structs"
7
+
8
+ module Rubysmith
9
+ # rubocop:disable Metrics/ModuleLength
10
+ module Configuration
11
+ # Defines the common configuration content for use throughout the gem.
12
+ Content = Struct.new(
13
+ :action_build,
14
+ :action_config,
15
+ :action_help,
16
+ :action_publish,
17
+ :action_version,
18
+ :author_email,
19
+ :author_family_name,
20
+ :author_given_name,
21
+ :author_url,
22
+ :build_amazing_print,
23
+ :build_bundler_leak,
24
+ :build_circle_ci,
25
+ :build_citation,
26
+ :build_cli,
27
+ :build_community,
28
+ :build_conduct,
29
+ :build_console,
30
+ :build_contributions,
31
+ :build_dead_end,
32
+ :build_debug,
33
+ :build_git,
34
+ :build_git_hub,
35
+ :build_git_lint,
36
+ :build_guard,
37
+ :build_license,
38
+ :build_maximum,
39
+ :build_minimum,
40
+ :build_rake,
41
+ :build_readme,
42
+ :build_reek,
43
+ :build_refinements,
44
+ :build_rspec,
45
+ :build_rubocop,
46
+ :build_security,
47
+ :build_setup,
48
+ :build_simple_cov,
49
+ :build_versions,
50
+ :build_zeitwerk,
51
+ :citation_affiliation,
52
+ :citation_message,
53
+ :citation_orcid,
54
+ :documentation_format,
55
+ :extensions_milestoner_documentation_format,
56
+ :extensions_milestoner_prefixes,
57
+ :extensions_milestoner_sign,
58
+ :extensions_pragmater_comments,
59
+ :extensions_pragmater_includes,
60
+ :extensions_tocer_includes,
61
+ :extensions_tocer_label,
62
+ :git_hub_user,
63
+ :license_label,
64
+ :license_name,
65
+ :license_version,
66
+ :now,
67
+ :project_name,
68
+ :project_url_community,
69
+ :project_url_conduct,
70
+ :project_url_contributions,
71
+ :project_url_download,
72
+ :project_url_home,
73
+ :project_url_issues,
74
+ :project_url_license,
75
+ :project_url_security,
76
+ :project_url_source,
77
+ :project_url_versions,
78
+ :project_version,
79
+ :target_root,
80
+ :template_path,
81
+ :template_roots,
82
+ keyword_init: true
83
+ ) do
84
+ using Refinements::Arrays
85
+ using Refinements::Strings
86
+ using Refinements::Structs
87
+
88
+ def initialize *arguments
89
+ super
90
+
91
+ self[:template_roots] ||= [Pathname(__dir__).join("../templates")]
92
+ self[:target_root] ||= Pathname.pwd
93
+ freeze
94
+ end
95
+
96
+ def add_template_roots paths
97
+ Array(paths).map { |path| Pathname path }
98
+ .including(template_roots)
99
+ .then { |roots| dup.merge! template_roots: roots }
100
+ end
101
+
102
+ def maximize = update_build_options(true)
103
+
104
+ def minimize = update_build_options(false)
105
+
106
+ def author_name = [author_given_name, author_family_name].compress.join(" ")
107
+
108
+ def license_label_version = [license_label, license_version].compress.join("-")
109
+
110
+ def project_label = project_name.titleize
111
+
112
+ def project_class = project_name.camelcase
113
+
114
+ def project_root = target_root.join(project_name)
115
+
116
+ def project_path = project_name.snakecase
117
+
118
+ def computed_project_url_community = format_url(__method__)
119
+
120
+ def computed_project_url_conduct = format_url(__method__)
121
+
122
+ def computed_project_url_contributions = format_url(__method__)
123
+
124
+ def computed_project_url_download = format_url(__method__)
125
+
126
+ def computed_project_url_home = format_url(__method__)
127
+
128
+ def computed_project_url_issues = format_url(__method__)
129
+
130
+ def computed_project_url_license = format_url(__method__)
131
+
132
+ def computed_project_url_security = format_url(__method__)
133
+
134
+ def computed_project_url_source = format_url(__method__)
135
+
136
+ def computed_project_url_versions = format_url(__method__)
137
+
138
+ def ascii_doc? = documentation_format == "adoc"
139
+
140
+ def markdown? = documentation_format == "md"
141
+
142
+ def pathway
143
+ Pathway[start_root: template_root, start_path: template_path, end_root: target_root]
144
+ end
145
+
146
+ def template_root
147
+ template_roots.map(&:expand_path)
148
+ .find { |path| path.join(String(template_path)).exist? }
149
+ end
150
+
151
+ private
152
+
153
+ def format_url kind
154
+ kind.to_s
155
+ .sub("computed_", "")
156
+ .then { |method| public_send method }
157
+ .then { |url| String url }
158
+ .then { |url| url.sub "%project_name%", project_name }
159
+ end
160
+
161
+ def update_build_options value
162
+ to_h.select { |key, _value| key.start_with? "build_" }
163
+ .transform_values { value }
164
+ .then { |attributes| dup.merge!(**attributes, build_minimum: !value) }
165
+ .freeze
166
+ end
167
+ end
168
+ end
169
+ # rubocop:enable Metrics/ModuleLength
170
+ end
@@ -0,0 +1,88 @@
1
+ :author:
2
+ :email:
3
+ :family_name:
4
+ :given_name:
5
+ :url:
6
+ :build:
7
+ :amazing_print: true
8
+ :bundler_leak: true
9
+ :circle_ci: false
10
+ :citation: true
11
+ :cli: false
12
+ :community: false
13
+ :conduct: true
14
+ :console: true
15
+ :contributions: true
16
+ :dead_end: true
17
+ :debug: true
18
+ :git: true
19
+ :git_hub: false
20
+ :git_lint: true
21
+ :guard: true
22
+ :license: true
23
+ :maximum: false
24
+ :minimum: false
25
+ :rake: true
26
+ :readme: true
27
+ :reek: true
28
+ :refinements: true
29
+ :rspec: true
30
+ :rubocop: true
31
+ :security: true
32
+ :setup: true
33
+ :simple_cov: true
34
+ :versions: true
35
+ :zeitwerk: true
36
+ :citation:
37
+ :affiliation:
38
+ :message: Please use the following metadata when citing this project in your work.
39
+ :orcid:
40
+ :documentation:
41
+ :format: "adoc"
42
+ :extensions:
43
+ :milestoner:
44
+ :documentation:
45
+ :format: "md"
46
+ :prefixes:
47
+ - Fixed
48
+ - Added
49
+ - Updated
50
+ - Removed
51
+ - Refactored
52
+ :sign: false
53
+ :pragmater:
54
+ :comments:
55
+ - "# frozen_string_literal: true"
56
+ :includes:
57
+ - "**/*.gemspec"
58
+ - "**/*.rake"
59
+ - "**/*.rb"
60
+ - "**/*bin/console"
61
+ - "**/*bin/guard"
62
+ - "**/*bin/rubocop"
63
+ - "**/*Gemfile"
64
+ - "**/*Guardfile"
65
+ - "**/*Rakefile"
66
+ :tocer:
67
+ :includes:
68
+ - "README.md"
69
+ :label: "## Table of Contents"
70
+ :git_hub:
71
+ :user:
72
+ :license:
73
+ :label: Hippocratic
74
+ :name: hippocratic
75
+ :version: 3.0
76
+ :project:
77
+ :url:
78
+ :community:
79
+ :conduct:
80
+ :contributions:
81
+ :download:
82
+ :home:
83
+ :issues:
84
+ :license:
85
+ :security:
86
+ :source:
87
+ :versions:
88
+ :version: 0.0.0