rubysmith 0.15.0 → 1.1.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/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 %>
|