rubysmith 0.8.0 → 0.11.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.tar.gz.sig +0 -0
- data/README.adoc +2 -5
- data/bin/rubysmith +0 -4
- data/lib/rubysmith.rb +3 -2
- data/lib/rubysmith/builder.rb +12 -27
- data/lib/rubysmith/builders/bundler.rb +11 -9
- data/lib/rubysmith/builders/console.rb +6 -8
- data/lib/rubysmith/builders/core.rb +7 -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 +9 -14
- data/lib/rubysmith/builders/rake.rb +5 -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/ruby_critic.rb +6 -8
- data/lib/rubysmith/builders/setup.rb +8 -8
- data/lib/rubysmith/cli/configuration/content.rb +68 -0
- data/lib/rubysmith/cli/{defaults.yml → configuration/defaults.yml} +0 -1
- data/lib/rubysmith/cli/configuration/loader.rb +35 -0
- data/lib/rubysmith/cli/parsers.rb +11 -0
- data/lib/rubysmith/cli/parsers/assembler.rb +10 -15
- data/lib/rubysmith/cli/parsers/build.rb +4 -12
- data/lib/rubysmith/cli/parsers/core.rb +5 -9
- data/lib/rubysmith/cli/processors/build.rb +10 -11
- data/lib/rubysmith/cli/processors/config.rb +3 -7
- data/lib/rubysmith/cli/shell.rb +9 -17
- data/lib/rubysmith/identity.rb +1 -1
- data/lib/rubysmith/pathway.rb +3 -9
- data/lib/rubysmith/renderers/erb.rb +7 -9
- data/lib/rubysmith/renderers/namespace.rb +1 -3
- 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 +16 -17
- 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 +13 -19
- data/lib/rubysmith/templates/%project_name%/bin/console.erb +1 -1
- data/lib/rubysmith/templates/%project_name%/lib/%project_name%.rb.erb +1 -1
- 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 +4 -4
- metadata +19 -18
- metadata.gz.sig +0 -0
- data/lib/rubysmith/cli/configuration.rb +0 -30
- data/lib/rubysmith/realm.rb +0 -74
@@ -6,13 +6,11 @@ module Rubysmith
|
|
6
6
|
# Handles parsing of Command Line Interface (CLI) build options.
|
7
7
|
# :reek:TooManyMethods
|
8
8
|
class Build
|
9
|
-
def self.call client
|
10
|
-
new(client: client, options: options).call
|
11
|
-
end
|
9
|
+
def self.call(options: {}, client: CLIENT) = new(options: options, client: client).call
|
12
10
|
|
13
|
-
def initialize
|
14
|
-
@client = client
|
11
|
+
def initialize options: {}, client: CLIENT
|
15
12
|
@options = options
|
13
|
+
@client = client
|
16
14
|
end
|
17
15
|
|
18
16
|
def call arguments = []
|
@@ -23,7 +21,7 @@ module Rubysmith
|
|
23
21
|
|
24
22
|
private
|
25
23
|
|
26
|
-
attr_reader :
|
24
|
+
attr_reader :options, :client
|
27
25
|
|
28
26
|
def add_minimum
|
29
27
|
client.on "--min", "Use minimum/no options." do |value|
|
@@ -37,12 +35,6 @@ module Rubysmith
|
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
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
38
|
def add_bundler_leak
|
47
39
|
client.on "--[no-]bundler-leak", "Add Bundler Leak." do |value|
|
48
40
|
options[:build_bundler_leak] = value
|
@@ -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 client
|
11
|
-
new(client: client, options: options).call
|
12
|
-
end
|
10
|
+
def self.call(options: {}, client: CLIENT) = new(options: options, client: client).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,
|
@@ -33,25 +37,20 @@ module Rubysmith
|
|
33
37
|
Builders::Git::Commit
|
34
38
|
].freeze
|
35
39
|
|
36
|
-
def self.with_minimum
|
37
|
-
new builders: MINIMUM
|
38
|
-
end
|
40
|
+
def self.with_minimum = new(builders: MINIMUM)
|
39
41
|
|
40
|
-
def initialize builders: MAXIMUM
|
42
|
+
def initialize configuration: Configuration::Loader.call, builders: MAXIMUM
|
43
|
+
@configuration = configuration
|
41
44
|
@builders = builders
|
42
45
|
end
|
43
46
|
|
44
|
-
def call options
|
45
|
-
Realm[**options].then { |realm| process realm }
|
46
|
-
end
|
47
|
+
def call(options) = configuration.merge(**options).then { |config| process config }
|
47
48
|
|
48
49
|
private
|
49
50
|
|
50
|
-
attr_reader :builders
|
51
|
+
attr_reader :configuration, :builders
|
51
52
|
|
52
|
-
def process
|
53
|
-
builders.each { |builder| builder.call realm }
|
54
|
-
end
|
53
|
+
def process(config) = builders.each { |builder| builder.call config }
|
55
54
|
end
|
56
55
|
end
|
57
56
|
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
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 = scope.call(yield)
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
@@ -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
|
|
@@ -1,35 +1,34 @@
|
|
1
|
+
ruby File.read(".ruby-version").strip
|
2
|
+
|
1
3
|
source "https://rubygems.org"
|
2
4
|
|
3
|
-
<% unless
|
4
|
-
<% if
|
5
|
+
<% unless configuration.build_minimum %>
|
6
|
+
<% if configuration.build_refinements %>
|
5
7
|
gem "refinements", "~> 8.0"
|
6
8
|
<% end %>
|
7
9
|
|
8
10
|
group :code_quality do
|
9
|
-
<% if
|
10
|
-
gem "bundler-audit", "~> 0.7"
|
11
|
-
<% end %>
|
12
|
-
<% if realm.build_bundler_leak %>
|
11
|
+
<% if configuration.build_bundler_leak %>
|
13
12
|
gem "bundler-leak", "~> 0.2"
|
14
13
|
<% end %>
|
15
|
-
<% if
|
14
|
+
<% if configuration.build_git && configuration.build_git_lint %>
|
16
15
|
gem "git-lint", "~> 2.0"
|
17
16
|
<% end %>
|
18
|
-
<% if
|
17
|
+
<% if configuration.build_reek %>
|
19
18
|
gem "reek", "~> 6.0"
|
20
19
|
<% end %>
|
21
|
-
<% if
|
22
|
-
gem "rubocop", "~> 1.
|
20
|
+
<% if configuration.build_rubocop %>
|
21
|
+
gem "rubocop", "~> 1.14"
|
23
22
|
gem "rubocop-performance", "~> 1.9"
|
24
23
|
gem "rubocop-rake", "~> 0.5"
|
25
24
|
<% end %>
|
26
|
-
<% if
|
25
|
+
<% if configuration.build_rspec && configuration.build_rubocop %>
|
27
26
|
gem "rubocop-rspec", "~> 2.0"
|
28
27
|
<% end %>
|
29
|
-
<% if
|
28
|
+
<% if configuration.build_ruby_critic %>
|
30
29
|
gem "rubycritic", "~> 4.5", require: false
|
31
30
|
<% end %>
|
32
|
-
<% if
|
31
|
+
<% if configuration.build_simple_cov %>
|
33
32
|
gem "simplecov", "~> 0.20"
|
34
33
|
<% end %>
|
35
34
|
end
|
@@ -39,19 +38,19 @@ source "https://rubygems.org"
|
|
39
38
|
end
|
40
39
|
|
41
40
|
group :test do
|
42
|
-
<% if
|
41
|
+
<% if configuration.build_guard %>
|
43
42
|
gem "guard-rspec", "~> 4.7", require: false
|
44
43
|
<% end %>
|
45
|
-
<% if
|
44
|
+
<% if configuration.build_rspec %>
|
46
45
|
gem "rspec", "~> 3.10"
|
47
46
|
<% end %>
|
48
47
|
end
|
49
48
|
|
50
49
|
group :tools do
|
51
|
-
<% if
|
50
|
+
<% if configuration.build_amazing_print %>
|
52
51
|
gem "amazing_print", "~> 1.2"
|
53
52
|
<% end %>
|
54
|
-
<% if
|
53
|
+
<% if configuration.build_pry %>
|
55
54
|
gem "pry", "~> 0.13"
|
56
55
|
gem "pry-byebug", "~> 3.9"
|
57
56
|
<% end %>
|
@@ -150,7 +150,7 @@ additional liability.
|
|
150
150
|
|
151
151
|
END OF TERMS AND CONDITIONS
|
152
152
|
|
153
|
-
Copyright <%=
|
153
|
+
Copyright <%= configuration.now.strftime "%Y" %> link:<%= configuration.author_url %>[<%= configuration.author_name %>].
|
154
154
|
|
155
155
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
|
156
156
|
compliance with the License. You may obtain a link:https://www.apache.org/licenses/LICENSE-2.0[copy]
|
@@ -150,7 +150,7 @@ additional liability.
|
|
150
150
|
|
151
151
|
END OF TERMS AND CONDITIONS
|
152
152
|
|
153
|
-
Copyright <%=
|
153
|
+
Copyright <%= configuration.now.strftime "%Y" %> [<%= configuration.author_name %>](<%= configuration.author_url %>).
|
154
154
|
|
155
155
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
|
156
156
|
compliance with the License. You may obtain a [copy](https://www.apache.org/licenses/LICENSE-2.0) of
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright <%=
|
1
|
+
Copyright <%= configuration.now.strftime "%Y" %> link:<%= configuration.author_url %>[<%= configuration.author_name %>].
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright <%=
|
1
|
+
Copyright <%= configuration.now.strftime "%Y" %> [<%= configuration.author_name %>](<%= configuration.author_url %>).
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
@@ -2,9 +2,9 @@
|
|
2
2
|
:toclevels: 5
|
3
3
|
:figure-caption!:
|
4
4
|
|
5
|
-
= <%=
|
5
|
+
= <%= configuration.project_label %>
|
6
6
|
|
7
|
-
<% if
|
7
|
+
<% if configuration.build_rubocop %>
|
8
8
|
[link=https://www.alchemists.io/projects/code_quality]
|
9
9
|
image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchemists Style Guide]
|
10
10
|
<% end %>
|
@@ -20,7 +20,7 @@ toc::[]
|
|
20
20
|
. link:https://www.ruby-lang.org[Ruby].
|
21
21
|
|
22
22
|
== Setup
|
23
|
-
<% if
|
23
|
+
<% if configuration.build_setup %>
|
24
24
|
|
25
25
|
To set up the project, run:
|
26
26
|
|
@@ -33,7 +33,7 @@ bin/setup
|
|
33
33
|
== Usage
|
34
34
|
|
35
35
|
== Development
|
36
|
-
<% if
|
36
|
+
<% if configuration.build_console %>
|
37
37
|
|
38
38
|
You can also use the IRB console for direct access to all objects:
|
39
39
|
|
@@ -80,4 +80,4 @@ Built with link:https://www.alchemists.io/projects/rubysmith[Rubysmith].
|
|
80
80
|
|
81
81
|
== Credits
|
82
82
|
|
83
|
-
Engineered by link:<%=
|
83
|
+
Engineered by link:<%= configuration.author_url %>[<%= configuration.author_name %>].
|