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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 628bf912ecce44ded950cf18f54d54a3a8ca13430ccc300f7db53062da718716
|
4
|
+
data.tar.gz: cbefec98da88d0e1b6198789805eeed82ea6b5238bee41ca9341c7d6114ed84c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b7bb2b58f60f60057c12e9f9358d720a10fe4825eefcefb8231d4998647c1d44523a550a05a2938b8d16536954ba2cb6f9fa3a4d5a484a0536f24420cb51991
|
7
|
+
data.tar.gz: 315a9e28cd8231629bb17fce77051f0fb42b86c25d1fb04245437333b20171c5b5dc40b1e3cbca33cce6c611761fea3ec31493a6dad2e34c56982a598e66785d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -15,8 +15,11 @@ Rubysmith is a command line interface for smithing Ruby projects.
|
|
15
15
|
|
16
16
|
This gem is useful in situations in which you need something more sophisticated than a
|
17
17
|
link:https://bundler.io/guides/bundler_in_a_single_file_ruby_script.html[Bundler Inline] script but
|
18
|
-
less complicated than a
|
19
|
-
|
18
|
+
less complicated than a link:https://www.alchemists.io/projects/gemsmith[Gemsmith] gem. Rubysmith is
|
19
|
+
the foundation of Gemsmith and provides a lot of the same functionality as Gemsmith but solely
|
20
|
+
tailored for pure Ruby projects. Again, this is a great tool for spiking quick Ruby implementations,
|
21
|
+
sharing code snippets with others, or building full blown Ruby projects for collaboration with
|
22
|
+
others.
|
20
23
|
|
21
24
|
toc::[]
|
22
25
|
|
@@ -26,12 +29,12 @@ toc::[]
|
|
26
29
|
* Uses link:https://www.alchemists.io/projects/runcom[Runcom] for resource configuration management.
|
27
30
|
* Uses link:https://www.alchemists.io/projects/pragmater[Pragmater] for Ruby source pragma directives.
|
28
31
|
* Supports link:https://github.com/amazing-print/amazing_print[Amazing Print].
|
29
|
-
* Supports link:https://github.com/rubysec/bundler-audit[Bundler Audit].
|
30
32
|
* Supports link:https://github.com/rubymem/bundler-leak[Bundler Leak].
|
31
33
|
* Supports link:https://git-scm.com[Git].
|
32
34
|
* Supports link:https://www.alchemists.io/projects/git-lint[Git Lint].
|
33
35
|
* Supports link:https://github.com/guard/guard[Guard].
|
34
36
|
* Supports link:http://pryrepl.org[Pry].
|
37
|
+
* Supports link:https://github.com/ruby/rake[Rake].
|
35
38
|
* Supports link:https://github.com/troessner/reek[Reek].
|
36
39
|
* Supports link:https://www.alchemists.io/projects/refinements[Refinements].
|
37
40
|
* Supports link:https://rspec.info[RSpec].
|
@@ -39,7 +42,6 @@ toc::[]
|
|
39
42
|
* Supports link:https://docs.rubocop.org/rubocop-performance[Rubocop Performance].
|
40
43
|
* Supports link:https://github.com/rubocop-hq/rubocop-rake[Rubocop Rake].
|
41
44
|
* Supports link:https://github.com/rubocop-hq/rubocop-rspec[Rubocop RSpec].
|
42
|
-
* Supports link:https://github.com/whitesmith/RubyCritic[RubyCritic].
|
43
45
|
* Supports link:https://github.com/simplecov-ruby/simplecov[SimpleCov].
|
44
46
|
* Supports common settings and a structured layout for building projects.
|
45
47
|
* Provides common documentation:
|
@@ -79,28 +81,28 @@ From the command line, type: `rubysmith --help`
|
|
79
81
|
....
|
80
82
|
USAGE:
|
81
83
|
-b, --build NAME [options] Build new project.
|
82
|
-
-v, --version Show gem version.
|
83
|
-
-h, --help Show this message.
|
84
84
|
-c, --config ACTION Manage gem configuration: edit or view.
|
85
|
+
-h, --help Show this message.
|
86
|
+
-v, --version Show gem version.
|
85
87
|
|
86
88
|
BUILD OPTIONS:
|
87
89
|
--[no-]amazing_print Add Amazing Print.
|
88
|
-
--[no-]bundler-audit Add Bundler Audit.
|
89
90
|
--[no-]bundler-leak Add Bundler Leak.
|
90
91
|
--[no-]console Add console script.
|
91
92
|
--[no-]documentation Add documentation.
|
92
93
|
--[no-]git Add Git.
|
93
94
|
--[no-]git-lint Add Git Lint.
|
94
95
|
--[no-]guard Add Guard.
|
96
|
+
--min Use minimum/no options.
|
95
97
|
--[no-]pry Add Pry.
|
98
|
+
--[no-]rake Add Rake.
|
96
99
|
--[no-]reek Add Reek.
|
97
100
|
--[no-]refinements Add Refinements.
|
98
101
|
--[no-]rspec Add RSpec.
|
99
102
|
--[no-]rubocop Add Rubocop.
|
100
|
-
--[no-]ruby_critic Add RubyCritic.
|
101
103
|
--[no-]setup Add setup script.
|
102
104
|
--[no-]simple_cov Add SimpleCov.
|
103
|
-
--
|
105
|
+
--[no-]zeitwerk Add Zeitwerk.
|
104
106
|
....
|
105
107
|
|
106
108
|
=== Building
|
@@ -161,7 +163,6 @@ The default configuration is as follows:
|
|
161
163
|
:license: "mit"
|
162
164
|
:build:
|
163
165
|
:amazing_print: true
|
164
|
-
:bundler_audit: true
|
165
166
|
:bundler_leak: true
|
166
167
|
:console: true
|
167
168
|
:documentation: true
|
@@ -170,13 +171,14 @@ The default configuration is as follows:
|
|
170
171
|
:guard: true
|
171
172
|
:minimum: false
|
172
173
|
:pry: true
|
174
|
+
:rake: true
|
173
175
|
:reek: true
|
174
176
|
:refinements: true
|
175
177
|
:rspec: true
|
176
178
|
:rubocop: true
|
177
|
-
:ruby_critic: true
|
178
179
|
:setup: true
|
179
180
|
:simple_cov: true
|
181
|
+
:zeitwerk: true
|
180
182
|
:builders:
|
181
183
|
:pragmater:
|
182
184
|
:comments:
|
data/bin/rubysmith
CHANGED
data/lib/rubysmith/builder.rb
CHANGED
@@ -6,7 +6,7 @@ require "logger"
|
|
6
6
|
|
7
7
|
module Rubysmith
|
8
8
|
# :reek:TooManyMethods
|
9
|
-
#
|
9
|
+
# Provides common functionality necessary for all builders.
|
10
10
|
class Builder
|
11
11
|
using Refinements::Pathnames
|
12
12
|
|
@@ -19,12 +19,10 @@ module Rubysmith
|
|
19
19
|
logger: LOGGER
|
20
20
|
}.freeze
|
21
21
|
|
22
|
-
def self.call
|
23
|
-
new realm, helpers: helpers
|
24
|
-
end
|
22
|
+
def self.call(...) = new(...)
|
25
23
|
|
26
|
-
def initialize
|
27
|
-
@
|
24
|
+
def initialize configuration, helpers: HELPERS
|
25
|
+
@configuration = configuration
|
28
26
|
@helpers = helpers
|
29
27
|
end
|
30
28
|
|
@@ -102,7 +100,7 @@ module Rubysmith
|
|
102
100
|
|
103
101
|
private
|
104
102
|
|
105
|
-
attr_reader :
|
103
|
+
attr_reader :configuration, :helpers
|
106
104
|
|
107
105
|
def execute *command
|
108
106
|
kernel.capture2e(*command).then do |result, status|
|
@@ -110,33 +108,23 @@ module Rubysmith
|
|
110
108
|
end
|
111
109
|
end
|
112
110
|
|
113
|
-
def inserter
|
114
|
-
helpers.fetch __method__
|
115
|
-
end
|
111
|
+
def inserter = helpers.fetch(__method__)
|
116
112
|
|
117
|
-
def renderer
|
118
|
-
helpers.fetch(__method__).new realm
|
119
|
-
end
|
113
|
+
def renderer = helpers.fetch(__method__).new(configuration)
|
120
114
|
|
121
|
-
def kernel
|
122
|
-
helpers.fetch __method__
|
123
|
-
end
|
115
|
+
def kernel = helpers.fetch(__method__)
|
124
116
|
|
125
|
-
def logger
|
126
|
-
helpers.fetch __method__
|
127
|
-
end
|
117
|
+
def logger = helpers.fetch(__method__)
|
128
118
|
|
129
|
-
def relative_build_path
|
130
|
-
build_path.relative_path_from realm.build_root
|
131
|
-
end
|
119
|
+
def relative_build_path = build_path.relative_path_from(configuration.build_root)
|
132
120
|
|
133
121
|
def build_path
|
134
|
-
pathway.end_path
|
122
|
+
pathway.end_path
|
123
|
+
.gsub("%project_name%", configuration.project_name)
|
124
|
+
.sub("%project_path%", configuration.project_path)
|
125
|
+
.sub ".erb", ""
|
135
126
|
end
|
136
127
|
|
137
|
-
def pathway
|
138
|
-
realm.to_pathway
|
139
|
-
end
|
128
|
+
def pathway = configuration.to_pathway
|
140
129
|
end
|
141
|
-
# rubocop:enable Metrics/ClassLength
|
142
130
|
end
|
@@ -10,33 +10,31 @@ module Rubysmith
|
|
10
10
|
class Bundler
|
11
11
|
using Refinements::Pathnames
|
12
12
|
|
13
|
-
def self.call
|
14
|
-
new(realm, builder: builder).call
|
15
|
-
end
|
13
|
+
def self.call(...) = new(...).call
|
16
14
|
|
17
|
-
def initialize
|
18
|
-
@
|
15
|
+
def initialize configuration, builder: Builder, client: ::Bundler::CLI
|
16
|
+
@configuration = configuration
|
19
17
|
@builder = builder
|
20
18
|
@client = client
|
21
19
|
end
|
22
20
|
|
23
21
|
def call
|
24
|
-
builder.call(
|
22
|
+
builder.call(configuration.with(template_path: "%project_name%/Gemfile.erb"))
|
25
23
|
.render
|
26
24
|
.replace(/\n\s+group/, "\n\ngroup")
|
27
25
|
.replace(/\n\s+gem/, "\n gem")
|
28
|
-
.replace(/ (?=.+refinements)/, "")
|
26
|
+
.replace(/ (?=.+(refinements|zeitwerk))/, "")
|
29
27
|
.replace(/(\n+|\s+)end/, "\nend")
|
30
28
|
.replace(/\n\ngroup :(code_quality|test|tools) do\nend/, "")
|
31
29
|
.replace(/org"\n+/, "org\"\n\n")
|
32
30
|
|
33
|
-
|
31
|
+
configuration.project_root.change_dir { client.start %w[install --quiet] }
|
34
32
|
nil
|
35
33
|
end
|
36
34
|
|
37
35
|
private
|
38
36
|
|
39
|
-
attr_reader :
|
37
|
+
attr_reader :configuration, :builder, :client
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
@@ -4,26 +4,24 @@ module Rubysmith
|
|
4
4
|
module Builders
|
5
5
|
# Builds project skeleton console for object inspection and exploration.
|
6
6
|
class Console
|
7
|
-
def self.call
|
8
|
-
new(realm, builder: builder).call
|
9
|
-
end
|
7
|
+
def self.call(...) = new(...).call
|
10
8
|
|
11
|
-
def initialize
|
12
|
-
@
|
9
|
+
def initialize configuration, builder: Builder
|
10
|
+
@configuration = configuration
|
13
11
|
@builder = builder
|
14
12
|
end
|
15
13
|
|
16
14
|
def call
|
17
|
-
return unless
|
15
|
+
return unless configuration.build_console
|
18
16
|
|
19
|
-
builder.call(
|
17
|
+
builder.call(configuration.with(template_path: "%project_name%/bin/console.erb"))
|
20
18
|
.render
|
21
19
|
.permit 0o755
|
22
20
|
end
|
23
21
|
|
24
22
|
private
|
25
23
|
|
26
|
-
attr_reader :
|
24
|
+
attr_reader :configuration, :builder
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
@@ -4,24 +4,25 @@ module Rubysmith
|
|
4
4
|
module Builders
|
5
5
|
# Builds project skeleton core structure and minimum file support.
|
6
6
|
class Core
|
7
|
-
def self.call
|
8
|
-
new(realm, builder: builder).call
|
9
|
-
end
|
7
|
+
def self.call(...) = new(...).call
|
10
8
|
|
11
|
-
def initialize
|
12
|
-
@
|
9
|
+
def initialize configuration, builder: Builder
|
10
|
+
@configuration = configuration
|
13
11
|
@builder = builder
|
14
12
|
end
|
15
13
|
|
16
14
|
def call
|
17
|
-
builder.call(
|
18
|
-
|
15
|
+
builder.call(configuration.with(template_path: "%project_name%/lib/%project_path%.rb.erb"))
|
16
|
+
.render
|
17
|
+
.replace(/ (?!(module|end))/, "")
|
18
|
+
|
19
|
+
builder.call(configuration.with(template_path: "%project_name%/.ruby-version.erb")).render
|
19
20
|
nil
|
20
21
|
end
|
21
22
|
|
22
23
|
private
|
23
24
|
|
24
|
-
attr_reader :
|
25
|
+
attr_reader :configuration, :builder
|
25
26
|
end
|
26
27
|
end
|
27
28
|
end
|
@@ -4,59 +4,54 @@ module Rubysmith
|
|
4
4
|
module Builders
|
5
5
|
# Builds project skeleton documentation.
|
6
6
|
class Documentation
|
7
|
-
def self.call
|
8
|
-
new(realm, builder: builder).call
|
9
|
-
end
|
7
|
+
def self.call(...) = new(...).call
|
10
8
|
|
11
|
-
def initialize
|
12
|
-
@
|
9
|
+
def initialize configuration, builder: Builder
|
10
|
+
@configuration = configuration
|
13
11
|
@builder = builder
|
14
12
|
end
|
15
13
|
|
16
14
|
def call
|
17
|
-
return unless
|
15
|
+
return unless configuration.build_documentation
|
18
16
|
|
19
17
|
private_methods.sort.grep(/render_/).each { |method| __send__ method }
|
20
18
|
end
|
21
19
|
|
22
20
|
private
|
23
21
|
|
24
|
-
attr_reader :
|
22
|
+
attr_reader :configuration, :builder
|
25
23
|
|
26
24
|
def render_changes
|
27
|
-
builder.call(
|
25
|
+
builder.call(configuration.with(template_path: "%project_name%/CHANGES.#{kind}.erb"))
|
28
26
|
.render
|
29
27
|
end
|
30
28
|
|
31
29
|
def render_conduct
|
32
|
-
|
33
|
-
|
30
|
+
configuration.with(template_path: "%project_name%/CODE_OF_CONDUCT.#{kind}.erb")
|
31
|
+
.then { |updated_configuration| builder.call(updated_configuration).render }
|
34
32
|
end
|
35
33
|
|
36
34
|
def render_contributions
|
37
|
-
builder.call(
|
35
|
+
builder.call(configuration.with(template_path: "%project_name%/CONTRIBUTING.#{kind}.erb"))
|
38
36
|
.render
|
39
37
|
end
|
40
38
|
|
41
39
|
def render_license
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
configuration.with(template_path: "%project_name%/LICENSE-#{license}.#{kind}.erb")
|
41
|
+
.then do |updated_configuration|
|
42
|
+
builder.call(updated_configuration).render.rename "LICENSE.#{kind}"
|
43
|
+
end
|
45
44
|
end
|
46
45
|
|
47
46
|
def render_readme
|
48
|
-
builder.call(
|
47
|
+
builder.call(configuration.with(template_path: "%project_name%/README.#{kind}.erb"))
|
49
48
|
.render
|
50
49
|
.replace("\n\n\n", "\n\n")
|
51
50
|
end
|
52
51
|
|
53
|
-
def kind
|
54
|
-
realm.documentation_format || "md"
|
55
|
-
end
|
52
|
+
def kind = configuration.documentation_format || "md"
|
56
53
|
|
57
|
-
def license
|
58
|
-
realm.documentation_license || "mit"
|
59
|
-
end
|
54
|
+
def license = configuration.documentation_license || "mit"
|
60
55
|
end
|
61
56
|
end
|
62
57
|
end
|
@@ -5,19 +5,17 @@ module Rubysmith
|
|
5
5
|
module Git
|
6
6
|
# Builds project skeleton initial Git commit message.
|
7
7
|
class Commit
|
8
|
-
def self.call
|
9
|
-
new(realm, builder: builder).call
|
10
|
-
end
|
8
|
+
def self.call(...) = new(...).call
|
11
9
|
|
12
|
-
def initialize
|
13
|
-
@
|
10
|
+
def initialize configuration, builder: Builder
|
11
|
+
@configuration = configuration
|
14
12
|
@builder = builder
|
15
13
|
end
|
16
14
|
|
17
15
|
def call
|
18
|
-
return unless
|
16
|
+
return unless configuration.build_git
|
19
17
|
|
20
|
-
builder.call(
|
18
|
+
builder.call(configuration)
|
21
19
|
.run("git add .", chdir: project_name)
|
22
20
|
.run(
|
23
21
|
%(git commit --all --message "Added project skeleton" --message "#{body}"),
|
@@ -27,7 +25,7 @@ module Rubysmith
|
|
27
25
|
|
28
26
|
private
|
29
27
|
|
30
|
-
attr_reader :
|
28
|
+
attr_reader :configuration, :builder
|
31
29
|
|
32
30
|
def body
|
33
31
|
<<~CONTENT
|
@@ -36,9 +34,7 @@ module Rubysmith
|
|
36
34
|
CONTENT
|
37
35
|
end
|
38
36
|
|
39
|
-
def project_name
|
40
|
-
realm.project_name
|
41
|
-
end
|
37
|
+
def project_name = configuration.project_name
|
42
38
|
end
|
43
39
|
end
|
44
40
|
end
|
@@ -5,24 +5,22 @@ module Rubysmith
|
|
5
5
|
module Git
|
6
6
|
# Initializes project skeleton as a Git repository.
|
7
7
|
class Setup
|
8
|
-
def self.call
|
9
|
-
new(realm, builder: builder).call
|
10
|
-
end
|
8
|
+
def self.call(...) = new(...).call
|
11
9
|
|
12
|
-
def initialize
|
13
|
-
@
|
10
|
+
def initialize configuration, builder: Builder
|
11
|
+
@configuration = configuration
|
14
12
|
@builder = builder
|
15
13
|
end
|
16
14
|
|
17
15
|
def call
|
18
|
-
return unless
|
16
|
+
return unless configuration.build_git
|
19
17
|
|
20
|
-
builder.call(
|
18
|
+
builder.call(configuration).run("git init", chdir: configuration.project_name)
|
21
19
|
end
|
22
20
|
|
23
21
|
private
|
24
22
|
|
25
|
-
attr_reader :
|
23
|
+
attr_reader :configuration, :builder
|
26
24
|
end
|
27
25
|
end
|
28
26
|
end
|