rubysmith 0.9.0 → 0.12.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/README.adoc +13 -11
- data/bin/rubysmith +0 -1
- data/lib/rubysmith/builder.rb +15 -27
- data/lib/rubysmith/builders/bundler.rb +7 -9
- data/lib/rubysmith/builders/console.rb +6 -8
- data/lib/rubysmith/builders/core.rb +9 -8
- data/lib/rubysmith/builders/documentation.rb +16 -21
- data/lib/rubysmith/builders/git/commit.rb +7 -11
- data/lib/rubysmith/builders/git/setup.rb +6 -8
- data/lib/rubysmith/builders/guard.rb +9 -9
- data/lib/rubysmith/builders/pragma.rb +8 -13
- data/lib/rubysmith/builders/rake.rb +7 -7
- data/lib/rubysmith/builders/reek.rb +6 -8
- data/lib/rubysmith/builders/rspec/context.rb +10 -11
- data/lib/rubysmith/builders/rspec/helper.rb +6 -8
- data/lib/rubysmith/builders/rubocop/formatter.rb +5 -7
- data/lib/rubysmith/builders/rubocop/setup.rb +7 -9
- data/lib/rubysmith/builders/setup.rb +8 -8
- data/lib/rubysmith/cli/configuration/content.rb +71 -0
- data/lib/rubysmith/cli/{defaults.yml → configuration/defaults.yml} +2 -2
- data/lib/rubysmith/cli/configuration/loader.rb +35 -0
- data/lib/rubysmith/cli/parsers/assembler.rb +10 -15
- data/lib/rubysmith/cli/parsers/build.rb +16 -19
- data/lib/rubysmith/cli/parsers/core.rb +5 -9
- data/lib/rubysmith/cli/parsers.rb +11 -0
- data/lib/rubysmith/cli/processors/build.rb +10 -12
- data/lib/rubysmith/cli/processors/config.rb +3 -7
- data/lib/rubysmith/cli/shell.rb +9 -17
- data/lib/rubysmith/identity.rb +2 -2
- data/lib/rubysmith/pathway.rb +3 -9
- data/lib/rubysmith/renderers/erb.rb +7 -9
- data/lib/rubysmith/renderers/namespace.rb +2 -4
- data/lib/rubysmith/templates/%project_name%/.rubocop.yml.erb +5 -5
- data/lib/rubysmith/templates/%project_name%/CHANGES.adoc.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/CHANGES.md.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.adoc.erb +2 -2
- data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.md.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/Gemfile.erb +25 -26
- data/lib/rubysmith/templates/%project_name%/LICENSE-apache.adoc.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/LICENSE-apache.md.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/LICENSE-mit.adoc.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/LICENSE-mit.md.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/README.adoc.erb +5 -5
- data/lib/rubysmith/templates/%project_name%/README.md.erb +5 -5
- data/lib/rubysmith/templates/%project_name%/Rakefile.erb +11 -23
- data/lib/rubysmith/templates/%project_name%/bin/console.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/lib/%project_path%.rb.erb +13 -0
- data/lib/rubysmith/templates/%project_name%/spec/spec_helper.rb.erb +8 -3
- data/lib/rubysmith/templates/%project_name%/spec/support/shared_contexts/temp_dir.rb.erb +3 -3
- data/lib/rubysmith.rb +9 -30
- data.tar.gz.sig +0 -0
- metadata +34 -21
- metadata.gz.sig +0 -0
- data/lib/rubysmith/builders/ruby_critic.rb +0 -27
- data/lib/rubysmith/cli/configuration.rb +0 -30
- data/lib/rubysmith/realm.rb +0 -74
- data/lib/rubysmith/templates/%project_name%/.rubycritic.yml.erb +0 -3
- data/lib/rubysmith/templates/%project_name%/lib/%project_name%.rb.erb +0 -3
@@ -1,19 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "runcom"
|
4
|
-
|
5
3
|
module Rubysmith
|
6
4
|
module CLI
|
7
5
|
module Parsers
|
8
|
-
CLIENT = OptionParser.new nil, 40, " "
|
9
|
-
SECTIONS = [Core, Build].freeze # Order is important.
|
10
|
-
|
11
6
|
# Assembles and parses all Command Line Interface (CLI) options.
|
12
7
|
class Assembler
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
SECTIONS = [Core, Build].freeze # Order is important.
|
9
|
+
|
10
|
+
def initialize configuration: CLI::Configuration::Loader.call,
|
11
|
+
sections: SECTIONS,
|
12
|
+
client: CLIENT
|
16
13
|
@options = configuration.to_h
|
14
|
+
@sections = sections
|
15
|
+
@client = client
|
17
16
|
end
|
18
17
|
|
19
18
|
def call arguments = []
|
@@ -22,17 +21,13 @@ module Rubysmith
|
|
22
21
|
options
|
23
22
|
end
|
24
23
|
|
25
|
-
def to_h
|
26
|
-
options
|
27
|
-
end
|
24
|
+
def to_h = options
|
28
25
|
|
29
|
-
def to_s
|
30
|
-
client.to_s
|
31
|
-
end
|
26
|
+
def to_s = client.to_s
|
32
27
|
|
33
28
|
private
|
34
29
|
|
35
|
-
attr_reader :
|
30
|
+
attr_reader :options, :sections, :client
|
36
31
|
end
|
37
32
|
end
|
38
33
|
end
|
@@ -4,15 +4,12 @@ module Rubysmith
|
|
4
4
|
module CLI
|
5
5
|
module Parsers
|
6
6
|
# Handles parsing of Command Line Interface (CLI) build options.
|
7
|
-
# :reek:TooManyMethods
|
8
7
|
class Build
|
9
|
-
def self.call
|
10
|
-
new(client: client, options: options).call
|
11
|
-
end
|
8
|
+
def self.call(...) = new(...).call
|
12
9
|
|
13
|
-
def initialize
|
14
|
-
@client = client
|
10
|
+
def initialize options: {}, client: CLIENT
|
15
11
|
@options = options
|
12
|
+
@client = client
|
16
13
|
end
|
17
14
|
|
18
15
|
def call arguments = []
|
@@ -23,7 +20,7 @@ module Rubysmith
|
|
23
20
|
|
24
21
|
private
|
25
22
|
|
26
|
-
attr_reader :
|
23
|
+
attr_reader :options, :client
|
27
24
|
|
28
25
|
def add_minimum
|
29
26
|
client.on "--min", "Use minimum/no options." do |value|
|
@@ -37,12 +34,6 @@ module Rubysmith
|
|
37
34
|
end
|
38
35
|
end
|
39
36
|
|
40
|
-
def add_bundler_audit
|
41
|
-
client.on "--[no-]bundler-audit", "Add Bundler Audit." do |value|
|
42
|
-
options[:build_bundler_audit] = value
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
37
|
def add_bundler_leak
|
47
38
|
client.on "--[no-]bundler-leak", "Add Bundler Leak." do |value|
|
48
39
|
options[:build_bundler_leak] = value
|
@@ -85,6 +76,12 @@ module Rubysmith
|
|
85
76
|
end
|
86
77
|
end
|
87
78
|
|
79
|
+
def add_rake
|
80
|
+
client.on "--[no-]rake", "Add Rake." do |value|
|
81
|
+
options[:build_rake] = value
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
88
85
|
def add_reek
|
89
86
|
client.on "--[no-]reek", "Add Reek." do |value|
|
90
87
|
options[:build_reek] = value
|
@@ -109,12 +106,6 @@ module Rubysmith
|
|
109
106
|
end
|
110
107
|
end
|
111
108
|
|
112
|
-
def add_ruby_critic
|
113
|
-
client.on "--[no-]ruby_critic", "Add RubyCritic." do |value|
|
114
|
-
options[:build_ruby_critic] = value
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
109
|
def add_setup
|
119
110
|
client.on "--[no-]setup", "Add setup script." do |value|
|
120
111
|
options[:build_setup] = value
|
@@ -126,6 +117,12 @@ module Rubysmith
|
|
126
117
|
options[:build_simple_cov] = value
|
127
118
|
end
|
128
119
|
end
|
120
|
+
|
121
|
+
def add_zeitwerk
|
122
|
+
client.on "--[no-]zeitwerk", "Add Zeitwerk." do |value|
|
123
|
+
options[:build_zeitwerk] = value
|
124
|
+
end
|
125
|
+
end
|
129
126
|
end
|
130
127
|
end
|
131
128
|
end
|
@@ -7,13 +7,11 @@ module Rubysmith
|
|
7
7
|
module Parsers
|
8
8
|
# Handles parsing of Command Line Interface (CLI) core options.
|
9
9
|
class Core
|
10
|
-
def self.call
|
11
|
-
new(client: client, options: options).call
|
12
|
-
end
|
10
|
+
def self.call(...) = new(...).call
|
13
11
|
|
14
|
-
def initialize
|
15
|
-
@client = client
|
12
|
+
def initialize options: {}, client: CLIENT
|
16
13
|
@options = options
|
14
|
+
@client = client
|
17
15
|
end
|
18
16
|
|
19
17
|
def call arguments = []
|
@@ -25,11 +23,9 @@ module Rubysmith
|
|
25
23
|
|
26
24
|
private
|
27
25
|
|
28
|
-
attr_reader :
|
26
|
+
attr_reader :options, :client
|
29
27
|
|
30
|
-
def collate
|
31
|
-
private_methods.sort.grep(/add_/).each { |method| __send__ method }
|
32
|
-
end
|
28
|
+
def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
|
33
29
|
|
34
30
|
def add_config
|
35
31
|
client.on "-c",
|
@@ -1,10 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "refinements/structs"
|
4
|
+
|
3
5
|
module Rubysmith
|
4
6
|
module CLI
|
5
7
|
module Processors
|
6
8
|
# Handles the Command Line Interface (CLI) for building of a project skeleton.
|
7
9
|
class Build
|
10
|
+
using Refinements::Structs
|
11
|
+
|
8
12
|
# Order is important.
|
9
13
|
MINIMUM = [
|
10
14
|
Builders::Core,
|
@@ -29,29 +33,23 @@ module Rubysmith
|
|
29
33
|
Builders::Pragma,
|
30
34
|
Builders::Rubocop::Setup,
|
31
35
|
Builders::Rubocop::Formatter,
|
32
|
-
Builders::RubyCritic,
|
33
36
|
Builders::Git::Commit
|
34
37
|
].freeze
|
35
38
|
|
36
|
-
def self.with_minimum
|
37
|
-
new builders: MINIMUM
|
38
|
-
end
|
39
|
+
def self.with_minimum = new(builders: MINIMUM)
|
39
40
|
|
40
|
-
def initialize builders: MAXIMUM
|
41
|
+
def initialize configuration: Configuration::Loader.call, builders: MAXIMUM
|
42
|
+
@configuration = configuration
|
41
43
|
@builders = builders
|
42
44
|
end
|
43
45
|
|
44
|
-
def call options
|
45
|
-
Realm[**options].then { |realm| process realm }
|
46
|
-
end
|
46
|
+
def call(options) = configuration.merge(**options).then { |config| process config }
|
47
47
|
|
48
48
|
private
|
49
49
|
|
50
|
-
attr_reader :builders
|
50
|
+
attr_reader :configuration, :builders
|
51
51
|
|
52
|
-
def process
|
53
|
-
builders.each { |builder| builder.call realm }
|
54
|
-
end
|
52
|
+
def process(config) = builders.each { |builder| builder.call config }
|
55
53
|
end
|
56
54
|
end
|
57
55
|
end
|
@@ -5,7 +5,7 @@ module Rubysmith
|
|
5
5
|
module Processors
|
6
6
|
# Handles the Command Line Interface (CLI) configuration processing.
|
7
7
|
class Config
|
8
|
-
def initialize configuration: CLI::Configuration::CLIENT, kernel: Kernel
|
8
|
+
def initialize configuration: CLI::Configuration::Loader::CLIENT, kernel: Kernel
|
9
9
|
@configuration = configuration
|
10
10
|
@kernel = kernel
|
11
11
|
end
|
@@ -22,13 +22,9 @@ module Rubysmith
|
|
22
22
|
|
23
23
|
attr_reader :configuration, :kernel
|
24
24
|
|
25
|
-
def edit
|
26
|
-
kernel.system "$EDITOR #{configuration.current}"
|
27
|
-
end
|
25
|
+
def edit = kernel.system("$EDITOR #{configuration.current}")
|
28
26
|
|
29
|
-
def view
|
30
|
-
kernel.system "cat #{configuration.current}"
|
31
|
-
end
|
27
|
+
def view = kernel.system("cat #{configuration.current}")
|
32
28
|
end
|
33
29
|
end
|
34
30
|
end
|
data/lib/rubysmith/cli/shell.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "optparse"
|
4
3
|
require "refinements/hashes"
|
5
4
|
|
6
5
|
module Rubysmith
|
7
6
|
module CLI
|
8
|
-
#
|
7
|
+
# The main Command Line Interface (CLI) object.
|
9
8
|
class Shell
|
10
9
|
using Refinements::Hashes
|
11
10
|
|
@@ -24,18 +23,17 @@ module Rubysmith
|
|
24
23
|
parse arguments
|
25
24
|
|
26
25
|
case options
|
27
|
-
in config: action
|
28
|
-
in build_minimum: true
|
29
|
-
in build
|
30
|
-
in version
|
31
|
-
in help:, **remainder then usage
|
26
|
+
in config: Symbol => action then process_config action
|
27
|
+
in build_minimum: true then process_build :build_minimum, options
|
28
|
+
in build: then process_build :build_maximum, options
|
29
|
+
in version: String => version then puts version
|
32
30
|
else usage
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
36
34
|
private
|
37
35
|
|
38
|
-
attr_reader :parser, :processors
|
36
|
+
attr_reader :parser, :processors
|
39
37
|
|
40
38
|
def parse arguments = []
|
41
39
|
parser.call arguments
|
@@ -43,22 +41,16 @@ module Rubysmith
|
|
43
41
|
puts error.message
|
44
42
|
end
|
45
43
|
|
46
|
-
def process_config action
|
47
|
-
processors.fetch(:config).call action
|
48
|
-
end
|
44
|
+
def process_config(action) = processors.fetch(:config).call(action)
|
49
45
|
|
50
46
|
def process_build kind, settings
|
51
47
|
processors.fetch(kind).call settings.transform_keys(build: :project_name)
|
52
48
|
.merge(now: Time.now)
|
53
49
|
end
|
54
50
|
|
55
|
-
def options
|
56
|
-
parser.to_h
|
57
|
-
end
|
51
|
+
def options = parser.to_h
|
58
52
|
|
59
|
-
def usage
|
60
|
-
puts parser.to_s
|
61
|
-
end
|
53
|
+
def usage = puts(parser.to_s)
|
62
54
|
end
|
63
55
|
end
|
64
56
|
end
|
data/lib/rubysmith/identity.rb
CHANGED
@@ -4,8 +4,8 @@ module Rubysmith
|
|
4
4
|
module Identity
|
5
5
|
NAME = "rubysmith"
|
6
6
|
LABEL = "Rubysmith"
|
7
|
-
VERSION = "0.
|
8
|
-
VERSION_LABEL = "#{LABEL} #{VERSION}"
|
7
|
+
VERSION = "0.12.0"
|
8
|
+
VERSION_LABEL = "#{LABEL} #{VERSION}".freeze
|
9
9
|
SUMMARY = "A command line interface for smithing Ruby projects."
|
10
10
|
end
|
11
11
|
end
|
data/lib/rubysmith/pathway.rb
CHANGED
@@ -14,17 +14,11 @@ module Rubysmith
|
|
14
14
|
freeze
|
15
15
|
end
|
16
16
|
|
17
|
-
def with attributes
|
18
|
-
self.class.new to_h.merge(attributes)
|
19
|
-
end
|
17
|
+
def with(attributes) = self.class.new(to_h.merge(attributes))
|
20
18
|
|
21
|
-
def end_path
|
22
|
-
end_root.join from_parent, start_path.basename
|
23
|
-
end
|
19
|
+
def end_path = end_root.join(from_parent, start_path.basename)
|
24
20
|
|
25
|
-
def partial?
|
26
|
-
start_path.basename.fnmatch? "_*"
|
27
|
-
end
|
21
|
+
def partial? = start_path.basename.fnmatch?("_*")
|
28
22
|
|
29
23
|
private
|
30
24
|
|
@@ -6,24 +6,22 @@ module Rubysmith
|
|
6
6
|
module Renderers
|
7
7
|
# Renders ERB templates as fully functional files.
|
8
8
|
class ERB
|
9
|
-
def initialize
|
10
|
-
|
9
|
+
def initialize configuration,
|
10
|
+
scope: Renderers::Namespace.new(configuration.project_class),
|
11
|
+
client: ::ERB
|
12
|
+
@configuration = configuration
|
11
13
|
@scope = scope
|
12
14
|
@client = client
|
13
15
|
end
|
14
16
|
|
15
|
-
def call content
|
16
|
-
client.new(content, trim_mode: "<>", eoutvar: "@buffer").result binding
|
17
|
-
end
|
17
|
+
def call(content) = client.new(content, trim_mode: "<>", eoutvar: "@buffer").result(binding)
|
18
18
|
|
19
19
|
private
|
20
20
|
|
21
21
|
attr_accessor :buffer
|
22
|
-
attr_reader :
|
22
|
+
attr_reader :configuration, :scope, :client
|
23
23
|
|
24
|
-
def namespace
|
25
|
-
self.buffer = scope.call yield
|
26
|
-
end
|
24
|
+
def namespace = self.buffer = block_given? ? scope.call(yield) : buffer + scope.call
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
@@ -14,9 +14,7 @@ module Rubysmith
|
|
14
14
|
@depth = namespace.scan("::").length
|
15
15
|
end
|
16
16
|
|
17
|
-
def call content
|
18
|
-
"#{prefix}#{body content}#{suffix.chomp}"
|
19
|
-
end
|
17
|
+
def call(content = nil) = "#{prefix}#{body content}#{suffix}"
|
20
18
|
|
21
19
|
private
|
22
20
|
|
@@ -30,7 +28,7 @@ module Rubysmith
|
|
30
28
|
|
31
29
|
# :reek:FeatureEnvy
|
32
30
|
def body content
|
33
|
-
content.lstrip.split("\n").reduce "" do |snippet, line|
|
31
|
+
String(content).lstrip.split("\n").reduce "" do |snippet, line|
|
34
32
|
next "#{snippet}\n" if line.blank?
|
35
33
|
|
36
34
|
"#{snippet}#{line.gsub(/^\s{2}/, "").indent depth + 1}\n"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
inherit_from:
|
2
|
-
- https://raw.githubusercontent.com/bkuhlmann/code_quality/
|
3
|
-
- https://raw.githubusercontent.com/bkuhlmann/code_quality/
|
4
|
-
- https://raw.githubusercontent.com/bkuhlmann/code_quality/
|
5
|
-
<% if
|
6
|
-
- https://raw.githubusercontent.com/bkuhlmann/code_quality/
|
2
|
+
- https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/ruby.yml
|
3
|
+
- https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/rake.yml
|
4
|
+
- https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/performance.yml
|
5
|
+
<% if configuration.build_rspec %>
|
6
|
+
- https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/rspec.yml
|
7
7
|
<% end %>
|
@@ -51,8 +51,8 @@ an appointed representative at an online or offline event.
|
|
51
51
|
== Enforcement
|
52
52
|
|
53
53
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community
|
54
|
-
leaders responsible for enforcement at link:mailto:<%=
|
55
|
-
|
54
|
+
leaders responsible for enforcement at link:mailto:<%= configuration.author_email %>?subject=Conduct[<%=
|
55
|
+
configuration.author_name %>].
|
56
56
|
|
57
57
|
All complaints will be reviewed and investigated promptly and fairly.
|
58
58
|
|
@@ -51,7 +51,7 @@ an appointed representative at an online or offline event.
|
|
51
51
|
## Enforcement
|
52
52
|
|
53
53
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community
|
54
|
-
leaders responsible for enforcement at [<%=
|
54
|
+
leaders responsible for enforcement at [<%= configuration.author_name %>](mailto:<%= configuration.author_email
|
55
55
|
%>?subject=Conduct).
|
56
56
|
All complaints will be reviewed and investigated promptly and fairly.
|
57
57
|
|