rubysmith 0.15.0 → 1.1.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/LICENSE.adoc +207 -155
- data/README.adoc +352 -93
- data/{bin → exe}/rubysmith +0 -0
- data/lib/rubysmith/builder.rb +2 -3
- data/lib/rubysmith/builders/bundler.rb +7 -11
- data/lib/rubysmith/builders/circle_ci.rb +8 -2
- data/lib/rubysmith/builders/console.rb +8 -2
- data/lib/rubysmith/builders/core.rb +7 -3
- data/lib/rubysmith/builders/documentation/{change.rb → citation.rb} +8 -8
- data/lib/rubysmith/builders/documentation/license.rb +9 -4
- data/lib/rubysmith/builders/documentation/readme.rb +12 -18
- data/lib/rubysmith/builders/documentation/{contribution.rb → version.rb} +10 -5
- data/lib/rubysmith/builders/git/commit.rb +3 -1
- data/lib/rubysmith/builders/{rubocop/setup.rb → git/ignore.rb} +11 -7
- data/lib/rubysmith/builders/git/setup.rb +2 -1
- data/lib/rubysmith/builders/git_hub.rb +8 -3
- data/lib/rubysmith/builders/guard.rb +9 -3
- data/lib/rubysmith/builders/rake.rb +9 -3
- data/lib/rubysmith/builders/reek.rb +7 -2
- data/lib/rubysmith/builders/rspec/context.rb +8 -2
- data/lib/rubysmith/builders/rspec/helper.rb +8 -2
- data/lib/rubysmith/builders/rubocop.rb +34 -0
- data/lib/rubysmith/builders/setup.rb +8 -2
- data/lib/rubysmith/cli/actions/build.rb +11 -12
- data/lib/rubysmith/cli/actions/config.rb +4 -2
- data/lib/rubysmith/cli/actions/publish.rb +21 -0
- data/lib/rubysmith/cli/parser.rb +31 -0
- data/lib/rubysmith/cli/parsers/build.rb +89 -45
- data/lib/rubysmith/cli/parsers/core.rb +14 -10
- data/lib/rubysmith/cli/shell.rb +22 -15
- data/lib/rubysmith/configuration/content.rb +174 -0
- data/lib/rubysmith/configuration/defaults.yml +89 -0
- data/lib/rubysmith/configuration/enhancers/current_time.rb +24 -0
- data/lib/rubysmith/configuration/enhancers/git_email.rb +31 -0
- data/lib/rubysmith/configuration/enhancers/git_hub_user.rb +31 -0
- data/lib/rubysmith/configuration/enhancers/git_user.rb +33 -0
- data/lib/rubysmith/configuration/loader.rb +48 -0
- data/lib/rubysmith/container.rb +1 -1
- data/lib/rubysmith/extensions/bundler.rb +30 -0
- data/lib/rubysmith/extensions/milestoner.rb +35 -0
- data/lib/rubysmith/extensions/pragmater.rb +35 -0
- data/lib/rubysmith/extensions/rubocop.rb +29 -0
- data/lib/rubysmith/extensions/tocer.rb +37 -0
- data/lib/rubysmith/identity.rb +1 -1
- data/lib/rubysmith/templates/%project_name%/.github/ISSUE_TEMPLATE.md.erb +1 -4
- data/lib/rubysmith/templates/%project_name%/.github/PULL_REQUEST_TEMPLATE.md.erb +0 -3
- data/lib/rubysmith/templates/%project_name%/.gitignore.erb +11 -0
- data/lib/rubysmith/templates/%project_name%/.rubocop.yml.erb +2 -0
- data/lib/rubysmith/templates/%project_name%/CITATION.cff.erb +16 -0
- data/lib/rubysmith/templates/%project_name%/Gemfile.erb +19 -10
- data/lib/rubysmith/templates/%project_name%/LICENSE-hippocratic.adoc.erb +214 -0
- data/lib/rubysmith/templates/%project_name%/LICENSE-hippocratic.md.erb +214 -0
- data/lib/rubysmith/templates/%project_name%/README.adoc.erb +20 -21
- data/lib/rubysmith/templates/%project_name%/README.md.erb +20 -21
- data/lib/rubysmith/templates/%project_name%/Rakefile.erb +9 -0
- data/lib/rubysmith/templates/%project_name%/VERSIONS.adoc.erb +5 -0
- data/lib/rubysmith/templates/%project_name%/VERSIONS.md.erb +5 -0
- data/lib/rubysmith/templates/%project_name%/bin/rubocop.erb +0 -1
- data.tar.gz.sig +0 -0
- metadata +61 -42
- metadata.gz.sig +0 -0
- data/lib/rubysmith/builders/documentation/conduct.rb +0 -32
- data/lib/rubysmith/builders/pragma.rb +0 -32
- data/lib/rubysmith/builders/rubocop/formatter.rb +0 -31
- data/lib/rubysmith/cli/configuration/content.rb +0 -97
- data/lib/rubysmith/cli/configuration/defaults.yml +0 -46
- data/lib/rubysmith/cli/configuration/enhancers/current_time.rb +0 -26
- data/lib/rubysmith/cli/configuration/enhancers/git_hub_user.rb +0 -33
- data/lib/rubysmith/cli/configuration/enhancers/version.rb +0 -26
- data/lib/rubysmith/cli/configuration/loader.rb +0 -46
- data/lib/rubysmith/cli/parsers/assembler.rb +0 -32
- data/lib/rubysmith/cli/parsers.rb +0 -11
- data/lib/rubysmith/templates/%project_name%/CHANGES.adoc.erb +0 -5
- data/lib/rubysmith/templates/%project_name%/CHANGES.md.erb +0 -5
- data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.adoc.erb +0 -114
- data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.md.erb +0 -115
- data/lib/rubysmith/templates/%project_name%/CONTRIBUTING.adoc.erb +0 -22
- data/lib/rubysmith/templates/%project_name%/CONTRIBUTING.md.erb +0 -22
@@ -0,0 +1,174 @@
|
|
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_edit,
|
16
|
+
:action_help,
|
17
|
+
:action_install,
|
18
|
+
:action_publish,
|
19
|
+
:action_version,
|
20
|
+
:action_view,
|
21
|
+
:author_email,
|
22
|
+
:author_family_name,
|
23
|
+
:author_given_name,
|
24
|
+
:author_url,
|
25
|
+
:build_amazing_print,
|
26
|
+
:build_bundler_leak,
|
27
|
+
:build_circle_ci,
|
28
|
+
:build_citation,
|
29
|
+
:build_cli,
|
30
|
+
:build_community,
|
31
|
+
:build_conduct,
|
32
|
+
:build_console,
|
33
|
+
:build_contributions,
|
34
|
+
:build_dead_end,
|
35
|
+
:build_debug,
|
36
|
+
:build_git,
|
37
|
+
:build_git_hub,
|
38
|
+
:build_git_lint,
|
39
|
+
:build_guard,
|
40
|
+
:build_license,
|
41
|
+
:build_maximum,
|
42
|
+
:build_minimum,
|
43
|
+
:build_rake,
|
44
|
+
:build_readme,
|
45
|
+
:build_reek,
|
46
|
+
:build_refinements,
|
47
|
+
:build_rspec,
|
48
|
+
:build_rubocop,
|
49
|
+
:build_security,
|
50
|
+
:build_setup,
|
51
|
+
:build_simple_cov,
|
52
|
+
:build_versions,
|
53
|
+
:build_yard,
|
54
|
+
:build_zeitwerk,
|
55
|
+
:citation_affiliation,
|
56
|
+
:citation_message,
|
57
|
+
:citation_orcid,
|
58
|
+
:documentation_format,
|
59
|
+
:extensions_milestoner_documentation_format,
|
60
|
+
:extensions_milestoner_prefixes,
|
61
|
+
:extensions_milestoner_sign,
|
62
|
+
:extensions_pragmater_comments,
|
63
|
+
:extensions_pragmater_includes,
|
64
|
+
:extensions_tocer_includes,
|
65
|
+
:extensions_tocer_label,
|
66
|
+
:git_hub_user,
|
67
|
+
:license_label,
|
68
|
+
:license_name,
|
69
|
+
:license_version,
|
70
|
+
:now,
|
71
|
+
:project_name,
|
72
|
+
:project_url_community,
|
73
|
+
:project_url_conduct,
|
74
|
+
:project_url_contributions,
|
75
|
+
:project_url_download,
|
76
|
+
:project_url_home,
|
77
|
+
:project_url_issues,
|
78
|
+
:project_url_license,
|
79
|
+
:project_url_security,
|
80
|
+
:project_url_source,
|
81
|
+
:project_url_versions,
|
82
|
+
:project_version,
|
83
|
+
:target_root,
|
84
|
+
:template_path,
|
85
|
+
:template_roots,
|
86
|
+
keyword_init: true
|
87
|
+
) do
|
88
|
+
using Refinements::Arrays
|
89
|
+
using Refinements::Strings
|
90
|
+
using Refinements::Structs
|
91
|
+
|
92
|
+
def initialize *arguments
|
93
|
+
super
|
94
|
+
|
95
|
+
self[:template_roots] ||= [Pathname(__dir__).join("../templates")]
|
96
|
+
self[:target_root] ||= Pathname.pwd
|
97
|
+
freeze
|
98
|
+
end
|
99
|
+
|
100
|
+
def add_template_roots paths
|
101
|
+
Array(paths).map { |path| Pathname path }
|
102
|
+
.including(template_roots)
|
103
|
+
.then { |roots| dup.merge! template_roots: roots }
|
104
|
+
end
|
105
|
+
|
106
|
+
def maximize = update_build_options(true)
|
107
|
+
|
108
|
+
def minimize = update_build_options(false)
|
109
|
+
|
110
|
+
def author_name = [author_given_name, author_family_name].compress.join(" ")
|
111
|
+
|
112
|
+
def license_label_version = [license_label, license_version].compress.join("-")
|
113
|
+
|
114
|
+
def project_label = project_name.titleize
|
115
|
+
|
116
|
+
def project_class = project_name.camelcase
|
117
|
+
|
118
|
+
def project_root = target_root.join(project_name)
|
119
|
+
|
120
|
+
def project_path = project_name.snakecase
|
121
|
+
|
122
|
+
def computed_project_url_community = format_url(__method__)
|
123
|
+
|
124
|
+
def computed_project_url_conduct = format_url(__method__)
|
125
|
+
|
126
|
+
def computed_project_url_contributions = format_url(__method__)
|
127
|
+
|
128
|
+
def computed_project_url_download = format_url(__method__)
|
129
|
+
|
130
|
+
def computed_project_url_home = format_url(__method__)
|
131
|
+
|
132
|
+
def computed_project_url_issues = format_url(__method__)
|
133
|
+
|
134
|
+
def computed_project_url_license = format_url(__method__)
|
135
|
+
|
136
|
+
def computed_project_url_security = format_url(__method__)
|
137
|
+
|
138
|
+
def computed_project_url_source = format_url(__method__)
|
139
|
+
|
140
|
+
def computed_project_url_versions = format_url(__method__)
|
141
|
+
|
142
|
+
def ascii_doc? = documentation_format == "adoc"
|
143
|
+
|
144
|
+
def markdown? = documentation_format == "md"
|
145
|
+
|
146
|
+
def pathway
|
147
|
+
Pathway[start_root: template_root, start_path: template_path, end_root: target_root]
|
148
|
+
end
|
149
|
+
|
150
|
+
def template_root
|
151
|
+
template_roots.map(&:expand_path)
|
152
|
+
.find { |path| path.join(String(template_path)).exist? }
|
153
|
+
end
|
154
|
+
|
155
|
+
private
|
156
|
+
|
157
|
+
def format_url kind
|
158
|
+
kind.to_s
|
159
|
+
.sub("computed_", "")
|
160
|
+
.then { |method| public_send method }
|
161
|
+
.then { |url| String url }
|
162
|
+
.then { |url| url.sub "%project_name%", project_name }
|
163
|
+
end
|
164
|
+
|
165
|
+
def update_build_options value
|
166
|
+
to_h.select { |key, _value| key.start_with? "build_" }
|
167
|
+
.transform_values { value }
|
168
|
+
.then { |attributes| dup.merge!(**attributes, build_minimum: !value) }
|
169
|
+
.freeze
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
# rubocop:enable Metrics/ModuleLength
|
174
|
+
end
|
@@ -0,0 +1,89 @@
|
|
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
|
+
:yard: false
|
36
|
+
:zeitwerk: true
|
37
|
+
:citation:
|
38
|
+
:affiliation:
|
39
|
+
:message: Please use the following metadata when citing this project in your work.
|
40
|
+
:orcid:
|
41
|
+
:documentation:
|
42
|
+
:format: "adoc"
|
43
|
+
:extensions:
|
44
|
+
:milestoner:
|
45
|
+
:documentation:
|
46
|
+
:format: "md"
|
47
|
+
:prefixes:
|
48
|
+
- Fixed
|
49
|
+
- Added
|
50
|
+
- Updated
|
51
|
+
- Removed
|
52
|
+
- Refactored
|
53
|
+
:sign: false
|
54
|
+
:pragmater:
|
55
|
+
:comments:
|
56
|
+
- "# frozen_string_literal: true"
|
57
|
+
:includes:
|
58
|
+
- "**/*.gemspec"
|
59
|
+
- "**/*.rake"
|
60
|
+
- "**/*.rb"
|
61
|
+
- "**/*bin/console"
|
62
|
+
- "**/*bin/guard"
|
63
|
+
- "**/*bin/rubocop"
|
64
|
+
- "**/*Gemfile"
|
65
|
+
- "**/*Guardfile"
|
66
|
+
- "**/*Rakefile"
|
67
|
+
:tocer:
|
68
|
+
:includes:
|
69
|
+
- "README.md"
|
70
|
+
:label: "## Table of Contents"
|
71
|
+
:git_hub:
|
72
|
+
:user:
|
73
|
+
:license:
|
74
|
+
:label: Hippocratic
|
75
|
+
:name: hippocratic
|
76
|
+
:version: 3.0
|
77
|
+
:project:
|
78
|
+
:url:
|
79
|
+
:community:
|
80
|
+
:conduct:
|
81
|
+
:contributions:
|
82
|
+
:download:
|
83
|
+
:home:
|
84
|
+
:issues:
|
85
|
+
:license:
|
86
|
+
:security:
|
87
|
+
:source:
|
88
|
+
:versions:
|
89
|
+
:version: 0.0.0
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "refinements/structs"
|
4
|
+
|
5
|
+
module Rubysmith
|
6
|
+
module Configuration
|
7
|
+
module Enhancers
|
8
|
+
# Adds current time to content.
|
9
|
+
class CurrentTime
|
10
|
+
using Refinements::Structs
|
11
|
+
|
12
|
+
def initialize now = Time.now
|
13
|
+
@now = now
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(content) = content.merge(now:)
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
attr_reader :now
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "git_plus"
|
4
|
+
require "refinements/strings"
|
5
|
+
require "refinements/structs"
|
6
|
+
|
7
|
+
module Rubysmith
|
8
|
+
module Configuration
|
9
|
+
module Enhancers
|
10
|
+
# Dynamically adds Git email if defined.
|
11
|
+
class GitEmail
|
12
|
+
using Refinements::Strings
|
13
|
+
using Refinements::Structs
|
14
|
+
|
15
|
+
def initialize repository: GitPlus::Repository.new
|
16
|
+
@repository = repository
|
17
|
+
end
|
18
|
+
|
19
|
+
def call content
|
20
|
+
String(content.author_email).blank? ? content.merge(author_email: email) : content
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :repository
|
26
|
+
|
27
|
+
def email = repository.config_get("user.email")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "git_plus"
|
4
|
+
require "refinements/strings"
|
5
|
+
require "refinements/structs"
|
6
|
+
|
7
|
+
module Rubysmith
|
8
|
+
module Configuration
|
9
|
+
module Enhancers
|
10
|
+
# Dynamically adds GitHub user if user is defined.
|
11
|
+
class GitHubUser
|
12
|
+
using Refinements::Strings
|
13
|
+
using Refinements::Structs
|
14
|
+
|
15
|
+
def initialize repository: GitPlus::Repository.new
|
16
|
+
@repository = repository
|
17
|
+
end
|
18
|
+
|
19
|
+
def call content
|
20
|
+
String(content.git_hub_user).blank? ? content.merge(git_hub_user: user) : content
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :repository
|
26
|
+
|
27
|
+
def user = repository.config_get("github.user")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "git_plus"
|
4
|
+
require "refinements/strings"
|
5
|
+
require "refinements/structs"
|
6
|
+
|
7
|
+
module Rubysmith
|
8
|
+
module Configuration
|
9
|
+
module Enhancers
|
10
|
+
# Dynamically adds Git user if defined.
|
11
|
+
class GitUser
|
12
|
+
using Refinements::Strings
|
13
|
+
using Refinements::Structs
|
14
|
+
|
15
|
+
def initialize repository: GitPlus::Repository.new
|
16
|
+
@repository = repository
|
17
|
+
end
|
18
|
+
|
19
|
+
def call(content) = String(content.author_name).blank? ? content.merge(**user) : content
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_reader :repository
|
24
|
+
|
25
|
+
def user
|
26
|
+
repository.config_get("user.name")
|
27
|
+
.then { |name| String(name).split }
|
28
|
+
.then { |first, last| {author_given_name: first, author_family_name: last} }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "refinements/hashes"
|
5
|
+
require "refinements/structs"
|
6
|
+
require "runcom"
|
7
|
+
require "yaml"
|
8
|
+
|
9
|
+
module Rubysmith
|
10
|
+
module Configuration
|
11
|
+
# Represents the fully assembled Command Line Interface (CLI) configuration.
|
12
|
+
class Loader
|
13
|
+
using Refinements::Hashes
|
14
|
+
using Refinements::Structs
|
15
|
+
|
16
|
+
DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
|
17
|
+
CLIENT = Runcom::Config.new "#{Identity::NAME}/configuration.yml", defaults: DEFAULTS
|
18
|
+
|
19
|
+
ENHANCERS = [
|
20
|
+
Enhancers::CurrentTime.new,
|
21
|
+
Enhancers::GitEmail.new,
|
22
|
+
Enhancers::GitHubUser.new,
|
23
|
+
Enhancers::GitUser.new
|
24
|
+
].freeze
|
25
|
+
|
26
|
+
def self.call(...) = new(...).call
|
27
|
+
|
28
|
+
def self.with_defaults = new(client: DEFAULTS, enhancers: [])
|
29
|
+
|
30
|
+
def initialize content: Content.new, client: CLIENT, enhancers: ENHANCERS
|
31
|
+
@content = content
|
32
|
+
@client = client
|
33
|
+
@enhancers = enhancers
|
34
|
+
end
|
35
|
+
|
36
|
+
def call
|
37
|
+
enhancers.reduce(preload_content) { |preload, enhancer| enhancer.call preload }
|
38
|
+
.freeze
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
attr_reader :content, :client, :enhancers
|
44
|
+
|
45
|
+
def preload_content = content.merge(**client.to_h.flatten_keys)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/rubysmith/container.rb
CHANGED
@@ -9,7 +9,7 @@ module Rubysmith
|
|
9
9
|
module Container
|
10
10
|
extend Dry::Container::Mixin
|
11
11
|
|
12
|
-
register(:configuration
|
12
|
+
register(:configuration) { Configuration::Loader.call }
|
13
13
|
register(:colorizer) { Pastel.new enabled: $stdout.tty? }
|
14
14
|
register(:kernel) { Kernel }
|
15
15
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler"
|
4
|
+
require "bundler/cli"
|
5
|
+
require "refinements/pathnames"
|
6
|
+
|
7
|
+
module Rubysmith
|
8
|
+
module Extensions
|
9
|
+
# Ensures gem dependencies are installed.
|
10
|
+
class Bundler
|
11
|
+
using Refinements::Pathnames
|
12
|
+
|
13
|
+
def self.call(...) = new(...).call
|
14
|
+
|
15
|
+
def initialize configuration, client: ::Bundler::CLI
|
16
|
+
@configuration = configuration
|
17
|
+
@client = client
|
18
|
+
end
|
19
|
+
|
20
|
+
def call
|
21
|
+
configuration.project_root.change_dir { client.start %w[install --quiet] }
|
22
|
+
configuration
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_reader :configuration, :client
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "milestoner"
|
4
|
+
|
5
|
+
module Rubysmith
|
6
|
+
module Extensions
|
7
|
+
# Ensures project can be published (tagged) in a reliable and consistent fashion.
|
8
|
+
class Milestoner
|
9
|
+
def self.call(...) = new(...).call
|
10
|
+
|
11
|
+
def initialize configuration,
|
12
|
+
client: ::Milestoner::Tags::Publisher.new,
|
13
|
+
content: ::Milestoner::Configuration::Content
|
14
|
+
@configuration = configuration
|
15
|
+
@client = client
|
16
|
+
@content = content
|
17
|
+
end
|
18
|
+
|
19
|
+
def call = client.call(settings) && configuration
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_reader :configuration, :client, :content
|
24
|
+
|
25
|
+
def settings
|
26
|
+
content[
|
27
|
+
documentation_format: configuration.extensions_milestoner_documentation_format,
|
28
|
+
prefixes: configuration.extensions_milestoner_prefixes,
|
29
|
+
sign: configuration.extensions_milestoner_sign,
|
30
|
+
version: configuration.project_version
|
31
|
+
]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pragmater"
|
4
|
+
|
5
|
+
module Rubysmith
|
6
|
+
module Extensions
|
7
|
+
# Ensures project skeleton has pragmas.
|
8
|
+
class Pragmater
|
9
|
+
def self.call(...) = new(...).call
|
10
|
+
|
11
|
+
def initialize configuration,
|
12
|
+
client: ::Pragmater::Runner.new,
|
13
|
+
content: ::Pragmater::Configuration::Content
|
14
|
+
@configuration = configuration
|
15
|
+
@client = client
|
16
|
+
@content = content
|
17
|
+
end
|
18
|
+
|
19
|
+
def call = client.call(settings) && configuration
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_reader :configuration, :client, :content
|
24
|
+
|
25
|
+
def settings
|
26
|
+
content[
|
27
|
+
action_insert: true,
|
28
|
+
comments: configuration.extensions_pragmater_comments,
|
29
|
+
includes: configuration.extensions_pragmater_includes,
|
30
|
+
root_dir: configuration.project_root
|
31
|
+
]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rubocop"
|
4
|
+
require "refinements/ios"
|
5
|
+
|
6
|
+
module Rubysmith
|
7
|
+
module Extensions
|
8
|
+
# Ensures project skeleton adheres to style guide.
|
9
|
+
class Rubocop
|
10
|
+
using Refinements::IOs
|
11
|
+
|
12
|
+
def self.call(...) = new(...).call
|
13
|
+
|
14
|
+
def initialize configuration, client: ::RuboCop::CLI.new
|
15
|
+
@configuration = configuration
|
16
|
+
@client = client
|
17
|
+
end
|
18
|
+
|
19
|
+
def call
|
20
|
+
STDOUT.squelch { client.run ["--auto-correct", configuration.project_root.to_s] }
|
21
|
+
configuration
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :configuration, :client
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tocer"
|
4
|
+
|
5
|
+
module Rubysmith
|
6
|
+
module Extensions
|
7
|
+
# Ensures project skeleton documentation has table of contents.
|
8
|
+
class Tocer
|
9
|
+
def self.call(...) = new(...).call
|
10
|
+
|
11
|
+
def initialize configuration,
|
12
|
+
client: ::Tocer::Runner.new,
|
13
|
+
content: ::Tocer::Configuration::Content
|
14
|
+
@configuration = configuration
|
15
|
+
@client = client
|
16
|
+
@content = content
|
17
|
+
end
|
18
|
+
|
19
|
+
def call
|
20
|
+
client.call(settings) if configuration.build_readme
|
21
|
+
configuration
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :configuration, :client, :content
|
27
|
+
|
28
|
+
def settings
|
29
|
+
content[
|
30
|
+
includes: configuration.extensions_tocer_includes,
|
31
|
+
label: configuration.extensions_tocer_label,
|
32
|
+
root_dir: configuration.project_root
|
33
|
+
]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/rubysmith/identity.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
## Overview
|
2
|
-
<!-- Required. Describe, briefly, the behavior experienced. -->
|
2
|
+
<!-- Required. Describe, briefly, the behavior experienced and desired. -->
|
3
3
|
|
4
4
|
## Screenshots/Screencasts
|
5
5
|
<!-- Optional. Attach screenshot(s) and/or screencast(s) that demo the behavior. -->
|
@@ -7,8 +7,5 @@
|
|
7
7
|
## Steps to Recreate
|
8
8
|
<!-- Required. List exact steps (numbered list) to reproduce errant behavior. -->
|
9
9
|
|
10
|
-
## Desired Behavior
|
11
|
-
<!-- Required. Describe the behavior you'd like to see or your idea of a proposed solution. -->
|
12
|
-
|
13
10
|
## Environment
|
14
11
|
<!-- Required. What is your operating system, software version(s), etc. -->
|
@@ -1,6 +1,8 @@
|
|
1
1
|
inherit_from:
|
2
2
|
- https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/ruby.yml
|
3
|
+
<% if configuration.build_rake %>
|
3
4
|
- https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/rake.yml
|
5
|
+
<% end %>
|
4
6
|
- https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/performance.yml
|
5
7
|
<% if configuration.build_rspec %>
|
6
8
|
- https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/rspec.yml
|
@@ -0,0 +1,16 @@
|
|
1
|
+
cff-version: 1.2.0
|
2
|
+
message: <%= configuration.citation_message %>
|
3
|
+
title: <%= configuration.project_label %>
|
4
|
+
abstract:
|
5
|
+
version: <%= configuration.project_version %>
|
6
|
+
license: <%= configuration.license_label_version %>
|
7
|
+
date-released: <%= configuration.now.strftime "%Y-%m-%d" %>
|
8
|
+
authors:
|
9
|
+
- family-names: <%= configuration.author_family_name %>
|
10
|
+
given-names: <%= configuration.author_given_name %>
|
11
|
+
affiliation: <%= configuration.citation_affiliation %>
|
12
|
+
orcid: https://orcid.org/<%= configuration.citation_orcid %>
|
13
|
+
keywords:
|
14
|
+
- ruby
|
15
|
+
repository-code: <%= configuration.computed_project_url_source %>
|
16
|
+
repository-artifact: <%= configuration.computed_project_url_download %>
|