rubysmith 0.4.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.adoc +28 -15
  5. data/lib/rubysmith.rb +3 -1
  6. data/lib/rubysmith/builder.rb +1 -4
  7. data/lib/rubysmith/builders/bundler.rb +6 -5
  8. data/lib/rubysmith/builders/documentation.rb +1 -1
  9. data/lib/rubysmith/builders/rake.rb +2 -2
  10. data/lib/rubysmith/builders/rspec/context.rb +4 -3
  11. data/lib/rubysmith/builders/rspec/helper.rb +1 -2
  12. data/lib/rubysmith/builders/rubocop/formatter.rb +33 -0
  13. data/lib/rubysmith/builders/rubocop/setup.rb +33 -0
  14. data/lib/rubysmith/builders/ruby_critic.rb +27 -0
  15. data/lib/rubysmith/cli/configuration.rb +2 -1
  16. data/lib/rubysmith/cli/defaults.yml +4 -0
  17. data/lib/rubysmith/cli/parsers/build.rb +26 -1
  18. data/lib/rubysmith/cli/parsers/core.rb +5 -1
  19. data/lib/rubysmith/cli/processors/build.rb +10 -3
  20. data/lib/rubysmith/cli/shell.rb +9 -10
  21. data/lib/rubysmith/identity.rb +1 -1
  22. data/lib/rubysmith/realm.rb +4 -0
  23. data/lib/rubysmith/templates/%project_name%/.rubycritic.yml.erb +3 -0
  24. data/lib/rubysmith/templates/%project_name%/Gemfile.erb +40 -16
  25. data/lib/rubysmith/templates/%project_name%/Rakefile.erb +15 -1
  26. data/lib/rubysmith/templates/%project_name%/bin/console.erb +3 -5
  27. data/lib/rubysmith/templates/%project_name%/bin/guard.erb +0 -1
  28. data/lib/rubysmith/templates/%project_name%/bin/rubocop.erb +0 -1
  29. data/lib/rubysmith/templates/%project_name%/lib/%project_name%.rb.erb +3 -0
  30. data/lib/rubysmith/templates/%project_name%/spec/spec_helper.rb.erb +11 -5
  31. data/lib/rubysmith/templates/%project_name%/spec/support/shared_contexts/temp_dir.rb.erb +5 -3
  32. metadata +16 -209
  33. metadata.gz.sig +0 -0
  34. data/lib/rubysmith/builders/rubocop.rb +0 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f26a8d32fbd2172d174fa4faa42e3bc0b9b9db4cd2a1bede0a21fb17ed739d8
4
- data.tar.gz: 8facf0b55bbb1d1ad2dca6dace2f6215cc6542c8d5607b53c22cd2033fbe97c8
3
+ metadata.gz: cc49110ec0c6a64e8a61c955db7e7019df90dc35058f29b5d1fb88b66ddbe6b1
4
+ data.tar.gz: 04cf9523178bd4510f596089e560444e5bcfbe500f01e152d27d02068aaab200
5
5
  SHA512:
6
- metadata.gz: 85df43159567c5a73f4327e93c2827d91af240c7f2e49d00bd9d7dd456ccde62123b43a1fd8000e28b678174fdc5896f19f10e11b9cda687e5bebf79763d3d4a
7
- data.tar.gz: 3db01bff2d7363005812753d3bdda181ca2a44ba47d889aaef6dc75135d45b1f09584f1396d648c69788980fa8ee87518844eba5b0c419d99334a32943f278ea
6
+ metadata.gz: 0dc3eb2629ad86d42a4dea655b9460930dc671e27be1f9cacf424e66e89f2b396406944715b243d375d578cadb5fbc6d4996f4a8d30da8139881555f78f4ff27
7
+ data.tar.gz: 421f8be12cb1c8a9445c3b9d6913f455ce041612f082aba3f4b5b9758c877a5b4f069d1fa202804c02d7c71eef630419eebae19551bb49a140ab9d82f7bac26e
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -23,18 +23,23 @@ toc::[]
23
23
  == Features
24
24
 
25
25
  * Builds a Ruby project skeleton for custom design and development.
26
- * Uses link:https://www.alchemists.io/projects/refinements[Refinements] Ruby core library enhancements.
27
26
  * Uses link:https://www.alchemists.io/projects/runcom[Runcom] for resource configuration management.
28
27
  * Uses link:https://www.alchemists.io/projects/pragmater[Pragmater] for Ruby source pragma directives.
28
+ * Supports link:https://github.com/amazing-print/amazing_print[Amazing Print].
29
29
  * Supports link:https://github.com/rubysec/bundler-audit[Bundler Audit].
30
+ * Supports link:https://github.com/rubymem/bundler-leak[Bundler Leak].
30
31
  * Supports link:https://git-scm.com[Git].
31
32
  * Supports link:https://www.alchemists.io/projects/git-lint[Git Lint].
32
33
  * Supports link:https://github.com/guard/guard[Guard].
33
34
  * Supports link:http://pryrepl.org[Pry].
34
35
  * Supports link:https://github.com/troessner/reek[Reek].
36
+ * Supports link:https://www.alchemists.io/projects/refinements[Refinements].
35
37
  * Supports link:https://rspec.info[RSpec].
36
38
  * Supports link:https://github.com/rubocop-hq/rubocop[Rubocop].
39
+ * Supports link:https://docs.rubocop.org/rubocop-performance[Rubocop Performance].
40
+ * Supports link:https://github.com/rubocop-hq/rubocop-rake[Rubocop Rake].
37
41
  * Supports link:https://github.com/rubocop-hq/rubocop-rspec[Rubocop RSpec].
42
+ * Supports link:https://github.com/whitesmith/RubyCritic[RubyCritic].
38
43
  * Supports link:https://github.com/simplecov-ruby/simplecov[SimpleCov].
39
44
  * Supports common settings and a structured layout for building projects.
40
45
  * Provides common documentation:
@@ -73,25 +78,29 @@ From the command line, type: `rubysmith --help`
73
78
 
74
79
  ....
75
80
  USAGE:
81
+ -b, --build NAME [options] Build new project.
76
82
  -v, --version Show gem version.
77
83
  -h, --help Show this message.
78
84
  -c, --config ACTION Manage gem configuration: edit or view.
79
- -b, --build NAME [options] Build new project.
80
85
 
81
86
  BUILD OPTIONS:
82
- --[no-]git Add Git.
83
- --[no-]git-lint Add Git Lint.
84
- --[no-]guard Add Guard.
85
- --[no-]pry Add Pry.
86
- --[no-]reek Add Reek.
87
- --[no-]rspec Add RSpec.
88
- --[no-]rubocop Add Rubocop.
89
- --[no-]setup Add setup script.
90
- --[no-]simple_cov Add SimpleCov.
91
- --min Use minimum/no options.
92
- --[no-]bundler-audit Add Bundler Audit.
93
- --[no-]console Add console script.
94
- --[no-]documentation Add documentation.
87
+ --[no-]amazing_print Add Amazing Print.
88
+ --[no-]bundler-audit Add Bundler Audit.
89
+ --[no-]bundler-leak Add Bundler Leak.
90
+ --[no-]console Add console script.
91
+ --[no-]documentation Add documentation.
92
+ --[no-]git Add Git.
93
+ --[no-]git-lint Add Git Lint.
94
+ --[no-]guard Add Guard.
95
+ --[no-]pry Add Pry.
96
+ --[no-]reek Add Reek.
97
+ --[no-]refinements Add Refinements.
98
+ --[no-]rspec Add RSpec.
99
+ --[no-]rubocop Add Rubocop.
100
+ --[no-]ruby_critic Add RubyCritic.
101
+ --[no-]setup Add setup script.
102
+ --[no-]simple_cov Add SimpleCov.
103
+ --min Use minimum/no options.
95
104
  ....
96
105
 
97
106
  === Building
@@ -151,7 +160,9 @@ The default configuration is as follows:
151
160
  :format: "md"
152
161
  :license: "mit"
153
162
  :build:
163
+ :amazing_print: true
154
164
  :bundler_audit: true
165
+ :bundler_leak: true
155
166
  :console: true
156
167
  :documentation: true
157
168
  :git: true
@@ -160,8 +171,10 @@ The default configuration is as follows:
160
171
  :minimum: false
161
172
  :pry: true
162
173
  :reek: true
174
+ :refinements: true
163
175
  :rspec: true
164
176
  :rubocop: true
177
+ :ruby_critic: true
165
178
  :setup: true
166
179
  :simple_cov: true
167
180
  :builders:
@@ -20,7 +20,9 @@ require "rubysmith/builders/reek"
20
20
  require "rubysmith/builders/rspec/context"
21
21
  require "rubysmith/builders/rspec/helper"
22
22
  require "rubysmith/builders/pragma"
23
- require "rubysmith/builders/rubocop"
23
+ require "rubysmith/builders/rubocop/setup"
24
+ require "rubysmith/builders/rubocop/formatter"
25
+ require "rubysmith/builders/ruby_critic"
24
26
  require "rubysmith/cli/parsers/core"
25
27
  require "rubysmith/cli/parsers/build"
26
28
  require "rubysmith/cli/parsers/assembler"
@@ -10,10 +10,7 @@ module Rubysmith
10
10
  class Builder
11
11
  using Refinements::Pathnames
12
12
 
13
- LOGGER = Logger.new(
14
- STDOUT,
15
- formatter: ->(severity, _at, _program, message) { "#{severity} #{message}\n" }
16
- )
13
+ LOGGER = Logger.new(STDOUT, formatter: ->(_severity, _at, _program, message) { "#{message}\n" })
17
14
 
18
15
  HELPERS = {
19
16
  inserter: Text::Inserter,
@@ -20,11 +20,12 @@ module Rubysmith
20
20
  def call
21
21
  builder.call(realm.with(template_path: "%project_name%/Gemfile.erb"))
22
22
  .render
23
- .replace(/\n\s*group/, "\n\ngroup")
24
- .replace(/\n\s*gem/, "\n gem")
25
- .replace(/\s{4}\n/, "")
26
- .replace(" end", "end")
27
- .replace(/\n{1,}\Z/, "\n")
23
+ .replace(/\n\s+group/, "\n\ngroup")
24
+ .replace(/\n\s+gem/, "\n gem")
25
+ .replace(/ (?=.+refinements)/, "")
26
+ .replace(/(\n+|\s+)end/, "\nend")
27
+ .replace(/\n\ngroup :(code_quality|test|tools) do\nend/, "")
28
+ .replace(/org"\n+/, "org\"\n\n")
28
29
  Dir.chdir(realm.project_root) { runner.start %w[install --quiet] }
29
30
  nil
30
31
  end
@@ -16,7 +16,7 @@ module Rubysmith
16
16
  def call
17
17
  return unless realm.build_documentation
18
18
 
19
- private_methods.grep(/render_/).each(&method(:__send__))
19
+ private_methods.sort.grep(/render_/).each { |method| __send__ method }
20
20
  end
21
21
 
22
22
  private
@@ -16,11 +16,11 @@ module Rubysmith
16
16
  def call
17
17
  builder.call(realm.with(template_path: "%project_name%/Rakefile.erb"))
18
18
  .render
19
- .replace(/\A\n+/, "")
20
19
  .replace(/\[\s+/, "[")
21
20
  .replace(/\s+\]/, "]")
22
- .replace(/\n{2,}/, "\n\n")
23
21
  .replace(" ", "")
22
+ .replace(/\n+(?=require)/, "\n")
23
+ .replace(/\n{2,}/, "\n\n")
24
24
  nil
25
25
  end
26
26
 
@@ -17,9 +17,10 @@ module Rubysmith
17
17
  def call
18
18
  return unless realm.build_rspec
19
19
 
20
- builder.call(
21
- realm.with(template_path: "%project_name%/spec/support/shared_contexts/temp_dir.rb.erb")
22
- ).render
20
+ realm.with(template_path: "%project_name%/spec/support/shared_contexts/temp_dir.rb.erb")
21
+ .then { |new_realm| builder.call new_realm }
22
+ .render
23
+ .replace(/\n\s+\n\s+/, "\n ")
23
24
  end
24
25
 
25
26
  private
@@ -20,8 +20,7 @@ module Rubysmith
20
20
  builder.call(realm.with(template_path: "%project_name%/spec/spec_helper.rb.erb"))
21
21
  .render
22
22
  .replace(/\n{3,}/, "\n\n")
23
- .replace(" require", "require")
24
- .replace(" Simple", "Simple")
23
+ .replace(/\n\s{2}(?=(require|Simple|using|Pathname|Dir))/, "\n")
25
24
  end
26
25
 
27
26
  private
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubocop"
4
+ require "refinements/ios"
5
+
6
+ module Rubysmith
7
+ module Builders
8
+ module Rubocop
9
+ # Executes Rubocop auto-correct on newly generated project.
10
+ class Formatter
11
+ using Refinements::IOs
12
+
13
+ def self.call realm
14
+ new(realm).call
15
+ end
16
+
17
+ def initialize realm, client: RuboCop::CLI.new
18
+ @realm = realm
19
+ @client = client
20
+ end
21
+
22
+ def call
23
+ STDOUT.squelch { client.run ["--auto-correct", realm.project_root.to_s] }
24
+ nil
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :realm, :client
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubysmith
4
+ module Builders
5
+ module Rubocop
6
+ # Builds project skeleton for Rubocop code quality support.
7
+ class Setup
8
+ def self.call realm, builder: Builder
9
+ new(realm, builder: builder).call
10
+ end
11
+
12
+ def initialize realm, builder: Builder
13
+ @realm = realm
14
+ @builder = builder
15
+ end
16
+
17
+ def call
18
+ return unless realm.build_rubocop
19
+
20
+ builder.call(realm.with(template_path: "%project_name%/bin/rubocop.erb"))
21
+ .render
22
+ .permit 0o755
23
+
24
+ builder.call(realm.with(template_path: "%project_name%/.rubocop.yml.erb")).render
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :realm, :builder
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubysmith
4
+ module Builders
5
+ # Builds project skeleton RubyCritic code quality support.
6
+ class RubyCritic
7
+ def self.call realm, builder: Builder
8
+ new(realm, builder: builder).call
9
+ end
10
+
11
+ def initialize realm, builder: Builder
12
+ @realm = realm
13
+ @builder = builder
14
+ end
15
+
16
+ def call
17
+ return unless realm.build_ruby_critic
18
+
19
+ builder.call(realm.with(template_path: "%project_name%/.rubycritic.yml.erb")).render
20
+ end
21
+
22
+ private
23
+
24
+ attr_reader :realm, :builder
25
+ end
26
+ end
27
+ end
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "yaml"
3
+ require "pathname"
4
4
  require "refinements/hashes"
5
5
  require "runcom"
6
+ require "yaml"
6
7
 
7
8
  module Rubysmith
8
9
  module CLI
@@ -8,7 +8,9 @@
8
8
  :format: "md"
9
9
  :license: "mit"
10
10
  :build:
11
+ :amazing_print: true
11
12
  :bundler_audit: true
13
+ :bundler_leak: true
12
14
  :console: true
13
15
  :documentation: true
14
16
  :git: true
@@ -17,8 +19,10 @@
17
19
  :minimum: false
18
20
  :pry: true
19
21
  :reek: true
22
+ :refinements: true
20
23
  :rspec: true
21
24
  :rubocop: true
25
+ :ruby_critic: true
22
26
  :setup: true
23
27
  :simple_cov: true
24
28
  :builders:
@@ -4,6 +4,7 @@ module Rubysmith
4
4
  module CLI
5
5
  module Parsers
6
6
  # Handles parsing of Command Line Interface (CLI) build options.
7
+ # :reek:TooManyMethods
7
8
  class Build
8
9
  def self.call client:, options:
9
10
  new(client: client, options: options).call
@@ -16,7 +17,7 @@ module Rubysmith
16
17
 
17
18
  def call arguments = []
18
19
  client.separator "\nBUILD OPTIONS:\n"
19
- private_methods.grep(/add_/).each(&method(:__send__))
20
+ private_methods.sort.grep(/add_/).each { |method| __send__ method }
20
21
  arguments.empty? ? arguments : client.parse!(arguments)
21
22
  end
22
23
 
@@ -30,12 +31,24 @@ module Rubysmith
30
31
  end
31
32
  end
32
33
 
34
+ def add_amazing_print
35
+ client.on "--[no-]amazing_print", "Add Amazing Print." do |value|
36
+ options[:build_amazing_print] = value
37
+ end
38
+ end
39
+
33
40
  def add_bundler_audit
34
41
  client.on "--[no-]bundler-audit", "Add Bundler Audit." do |value|
35
42
  options[:build_bundler_audit] = value
36
43
  end
37
44
  end
38
45
 
46
+ def add_bundler_leak
47
+ client.on "--[no-]bundler-leak", "Add Bundler Leak." do |value|
48
+ options[:build_bundler_leak] = value
49
+ end
50
+ end
51
+
39
52
  def add_console
40
53
  client.on "--[no-]console", "Add console script." do |value|
41
54
  options[:build_console] = value
@@ -78,6 +91,12 @@ module Rubysmith
78
91
  end
79
92
  end
80
93
 
94
+ def add_refinements
95
+ client.on "--[no-]refinements", "Add Refinements." do |value|
96
+ options[:build_refinements] = value
97
+ end
98
+ end
99
+
81
100
  def add_rspec
82
101
  client.on "--[no-]rspec", "Add RSpec." do |value|
83
102
  options[:build_rspec] = value
@@ -90,6 +109,12 @@ module Rubysmith
90
109
  end
91
110
  end
92
111
 
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
+
93
118
  def add_setup
94
119
  client.on "--[no-]setup", "Add setup script." do |value|
95
120
  options[:build_setup] = value
@@ -19,7 +19,7 @@ module Rubysmith
19
19
  def call arguments = []
20
20
  client.banner = "#{Identity::LABEL} - #{Identity::SUMMARY}"
21
21
  client.separator "\nUSAGE:\n"
22
- private_methods.grep(/add_/).each(&method(:__send__))
22
+ collate
23
23
  arguments.empty? ? arguments : client.parse!(arguments)
24
24
  end
25
25
 
@@ -27,6 +27,10 @@ module Rubysmith
27
27
 
28
28
  attr_reader :client, :options
29
29
 
30
+ def collate
31
+ private_methods.sort.grep(/add_/).each { |method| __send__ method }
32
+ end
33
+
30
34
  def add_config
31
35
  client.on "-c",
32
36
  "--config ACTION",
@@ -9,7 +9,8 @@ module Rubysmith
9
9
  MINIMUM = [
10
10
  Builders::Core,
11
11
  Builders::Bundler,
12
- Builders::Pragma
12
+ Builders::Pragma,
13
+ Builders::Rubocop::Formatter
13
14
  ].freeze
14
15
 
15
16
  # Order is important.
@@ -26,16 +27,22 @@ module Rubysmith
26
27
  Builders::RSpec::Context,
27
28
  Builders::RSpec::Helper,
28
29
  Builders::Pragma,
29
- Builders::Rubocop,
30
+ Builders::Rubocop::Setup,
31
+ Builders::Rubocop::Formatter,
32
+ Builders::RubyCritic,
30
33
  Builders::Git::Commit
31
34
  ].freeze
32
35
 
36
+ def self.with_minimum
37
+ new builders: MINIMUM
38
+ end
39
+
33
40
  def initialize builders: MAXIMUM
34
41
  @builders = builders
35
42
  end
36
43
 
37
44
  def call options
38
- Realm[**options].then(&method(:process))
45
+ Realm[**options].then { |realm| process realm }
39
46
  end
40
47
 
41
48
  private
@@ -11,7 +11,7 @@ module Rubysmith
11
11
 
12
12
  PROCESSORS = {
13
13
  config: Processors::Config.new,
14
- build_minimum: Processors::Build.new(builders: Processors::Build::MINIMUM),
14
+ build_minimum: Processors::Build.with_minimum,
15
15
  build_maximum: Processors::Build.new
16
16
  }.freeze
17
17
 
@@ -23,16 +23,14 @@ module Rubysmith
23
23
  def call arguments = []
24
24
  parse arguments
25
25
 
26
- # rubocop:disable Style/MethodCallWithArgsParentheses
27
26
  case options
28
- in config: action, **remainder then config action
29
- in build_minimum: true, **remainder then build(:build_minimum, options)
30
- in build:, **remainder then build(:build_maximum, options)
27
+ in config: action, **remainder then process_config action
28
+ in build_minimum: true, **remainder then process_build :build_minimum, options
29
+ in build:, **remainder then process_build :build_maximum, options
31
30
  in version:, **remainder then puts version
32
31
  in help:, **remainder then usage
33
32
  else usage
34
33
  end
35
- # rubocop:enable Style/MethodCallWithArgsParentheses
36
34
  end
37
35
 
38
36
  private
@@ -45,12 +43,13 @@ module Rubysmith
45
43
  puts error.message
46
44
  end
47
45
 
48
- def config action
49
- processors.fetch(__method__).call action
46
+ def process_config action
47
+ processors.fetch(:config).call action
50
48
  end
51
49
 
52
- def build kind, settings
53
- processors.fetch(kind).call settings.rekey(build: :project_name).merge(now: Time.now)
50
+ def process_build kind, settings
51
+ processors.fetch(kind).call settings.transform_keys(build: :project_name)
52
+ .merge(now: Time.now)
54
53
  end
55
54
 
56
55
  def options
@@ -4,7 +4,7 @@ module Rubysmith
4
4
  module Identity
5
5
  NAME = "rubysmith"
6
6
  LABEL = "Rubysmith"
7
- VERSION = "0.4.0"
7
+ VERSION = "0.8.0"
8
8
  VERSION_LABEL = "#{LABEL} #{VERSION}"
9
9
  SUMMARY = "A command line interface for smithing Ruby projects."
10
10
  end
@@ -17,7 +17,9 @@ module Rubysmith
17
17
  documentation_format
18
18
  documentation_license
19
19
  build_minimum
20
+ build_amazing_print
20
21
  build_bundler_audit
22
+ build_bundler_leak
21
23
  build_console
22
24
  build_documentation
23
25
  build_git
@@ -25,8 +27,10 @@ module Rubysmith
25
27
  build_guard
26
28
  build_pry
27
29
  build_reek
30
+ build_refinements
28
31
  build_rspec
29
32
  build_rubocop
33
+ build_ruby_critic
30
34
  build_setup
31
35
  build_simple_cov
32
36
  builders_pragmater_comments
@@ -0,0 +1,3 @@
1
+ paths:
2
+ - "lib"
3
+ no_browser: true
@@ -1,35 +1,59 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  <% unless realm.build_minimum %>
4
- group :development do
4
+ <% if realm.build_refinements %>
5
+ gem "refinements", "~> 8.0"
6
+ <% end %>
7
+
8
+ group :code_quality do
5
9
  <% if realm.build_bundler_audit %>
6
10
  gem "bundler-audit", "~> 0.7"
7
11
  <% end %>
8
- <% if realm.build_git && realm.build_git_lint %>
9
- gem "git-lint", "~> 1.3"
10
- <% end %>
11
- <% if realm.build_guard %>
12
- gem "guard-rspec", "~> 4.7"
12
+ <% if realm.build_bundler_leak %>
13
+ gem "bundler-leak", "~> 0.2"
13
14
  <% end %>
14
- <% if realm.build_pry %>
15
- gem "pry", "~> 0.13"
16
- gem "pry-byebug", "~> 3.9"
15
+ <% if realm.build_git && realm.build_git_lint %>
16
+ gem "git-lint", "~> 2.0"
17
17
  <% end %>
18
- gem "rake", "~> 13.0"
19
18
  <% if realm.build_reek %>
20
19
  gem "reek", "~> 6.0"
21
20
  <% end %>
22
- <% if realm.build_rspec %>
23
- gem "rspec", "~> 3.10"
24
- <% end %>
25
21
  <% if realm.build_rubocop %>
26
- gem "rubocop", "~> 1.3"
27
- gem "rubocop-performance", "~> 1.8"
22
+ gem "rubocop", "~> 1.5"
23
+ gem "rubocop-performance", "~> 1.9"
28
24
  gem "rubocop-rake", "~> 0.5"
25
+ <% end %>
26
+ <% if realm.build_rspec && realm.build_rubocop %>
29
27
  gem "rubocop-rspec", "~> 2.0"
30
28
  <% end %>
29
+ <% if realm.build_ruby_critic %>
30
+ gem "rubycritic", "~> 4.5", require: false
31
+ <% end %>
31
32
  <% if realm.build_simple_cov %>
32
- gem "simplecov", "~> 0.19"
33
+ gem "simplecov", "~> 0.20"
34
+ <% end %>
35
+ end
36
+
37
+ group :development do
38
+ gem "rake", "~> 13.0"
39
+ end
40
+
41
+ group :test do
42
+ <% if realm.build_guard %>
43
+ gem "guard-rspec", "~> 4.7", require: false
44
+ <% end %>
45
+ <% if realm.build_rspec %>
46
+ gem "rspec", "~> 3.10"
47
+ <% end %>
48
+ end
49
+
50
+ group :tools do
51
+ <% if realm.build_amazing_print %>
52
+ gem "amazing_print", "~> 1.2"
53
+ <% end %>
54
+ <% if realm.build_pry %>
55
+ gem "pry", "~> 0.13"
56
+ gem "pry-byebug", "~> 3.9"
33
57
  <% end %>
34
58
  end
35
59
  <% end %>
@@ -1,6 +1,11 @@
1
+ require "bundler/setup"
2
+
1
3
  <% if realm.build_bundler_audit %>
2
4
  require "bundler/audit/task"
3
5
  <% end %>
6
+ <% if realm.build_bundler_leak %>
7
+ require "bundler/plumber/task"
8
+ <% end %>
4
9
  <% if realm.build_git && realm.build_git_lint %>
5
10
  require "git/lint/rake/setup"
6
11
  <% end %>
@@ -13,10 +18,16 @@
13
18
  <% if realm.build_rubocop %>
14
19
  require "rubocop/rake_task"
15
20
  <% end %>
21
+ <% if realm.build_ruby_critic %>
22
+ require "rubycritic/rake_task"
23
+ <% end %>
16
24
 
17
25
  <% if realm.build_bundler_audit %>
18
26
  Bundler::Audit::Task.new
19
27
  <% end %>
28
+ <% if realm.build_bundler_leak %>
29
+ Bundler::Plumber::Task.new
30
+ <% end %>
20
31
  <% if realm.build_reek %>
21
32
  Reek::Rake::Task.new
22
33
  <% end %>
@@ -26,8 +37,11 @@
26
37
  <% if realm.build_rubocop %>
27
38
  RuboCop::RakeTask.new
28
39
  <% end %>
40
+ <% if realm.build_ruby_critic %>
41
+ RubyCritic::RakeTask.new
42
+ <% end %>
29
43
 
30
44
  desc "Run code quality checks"
31
- task code_quality: %i[<% if realm.build_bundler_audit %>bundle:audit<% end %> <% if realm.build_git && realm.build_git_lint %>git_lint<% end %> <% if realm.build_reek %>reek<% end %> <% if realm.build_rubocop %>rubocop<% end %>]
45
+ task code_quality: %i[<% if realm.build_bundler_audit %>bundle:audit<% end %> <% if realm.build_bundler_leak %>bundle:leak<% end %> <% if realm.build_git && realm.build_git_lint %>git_lint<% end %> <% if realm.build_reek %>reek<% end %> <% if realm.build_rubocop %>rubocop<% end %> <% if realm.build_ruby_critic %>rubycritic<% end %>]
32
46
 
33
47
  task default: %i[code_quality <% if realm.build_rspec %>spec<% end %>]
@@ -1,11 +1,9 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "<%= realm.project_name %>"
5
- <% if realm.build_pry %>
6
- require "pry"
7
- require "pry-byebug"
8
- <% end %>
4
+ Bundler.require :tools
5
+
6
+ require_relative "../lib/<%= realm.project_name %>"
9
7
  require "irb"
10
8
 
11
9
  IRB.start __FILE__
@@ -1,6 +1,5 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- require "rubygems"
4
3
  require "bundler/setup"
5
4
 
6
5
  load Gem.bin_path "guard", "guard"
@@ -1,7 +1,6 @@
1
1
  #! /usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "rubygems"
5
4
  require "bundler/setup"
6
5
 
7
6
  load Gem.bin_path "rubocop", "rubocop"
@@ -0,0 +1,3 @@
1
+ # The project namespace.
2
+ module <%= realm.project_class %>
3
+ end
@@ -1,16 +1,22 @@
1
1
  require "bundler/setup"
2
+ Bundler.require :tools
2
3
 
3
4
  <% if realm.build_simple_cov %>
4
5
  require "simplecov"
5
6
  SimpleCov.start { enable_coverage :branch }
6
7
  <% end %>
7
8
 
8
- <% if realm.build_pry %>
9
- require "pry"
10
- require "pry-byebug"
11
- <% end %>
9
+ require "<%= realm.project_name %>"
10
+ <% if realm.build_refinements %>
11
+ require "refinements"
12
+
13
+ using Refinements::Pathnames
12
14
 
13
- Dir[File.join(__dir__, "support", "shared_contexts", "**/*.rb")].sort.each(&method(:require))
15
+ Pathname.require_tree __dir__, "support/shared_contexts/**/*.rb"
16
+ <% else %>
17
+
18
+ Dir[File.join(__dir__, "support", "shared_contexts", "**/*.rb")].sort.each { |path| require path }
19
+ <% end %>
14
20
 
15
21
  RSpec.configure do |config|
16
22
  config.color = true
@@ -1,9 +1,11 @@
1
1
  RSpec.shared_context "with temporary directory", :temp_dir do
2
- let(:temp_dir) { Bundler.root.join "tmp", "rspec" }
2
+ <% if realm.build_refinements %>using Refinements::Pathnames<% end %>
3
+
4
+ let(:temp_dir) { Bundler.root.join "tmp/rspec" }
3
5
 
4
6
  around do |example|
5
- FileUtils.mkdir_p temp_dir
7
+ <%= realm.build_refinements ? "temp_dir.make_path" : "FileUtils.mkdir_p temp_dir" %>
6
8
  example.run
7
- FileUtils.rm_rf temp_dir
9
+ <%= realm.build_refinements ? "temp_dir.remove_tree" : "FileUtils.rm_rf temp_dir" %>
8
10
  end
9
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysmith
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -28,7 +28,7 @@ cert_chain:
28
28
  2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
29
29
  QWc=
30
30
  -----END CERTIFICATE-----
31
- date: 2020-11-15 00:00:00.000000000 Z
31
+ date: 2020-12-30 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: pragmater
@@ -36,252 +36,56 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '8.1'
39
+ version: '9.0'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '8.1'
46
+ version: '9.0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: refinements
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '7.14'
53
+ version: '8.0'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '7.14'
60
+ version: '8.0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rubocop
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '1.3'
67
+ version: '1.5'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '1.3'
74
+ version: '1.5'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: runcom
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '6.4'
81
+ version: '7.0'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '6.4'
89
- - !ruby/object:Gem::Dependency
90
- name: bundler-audit
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '0.7'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '0.7'
103
- - !ruby/object:Gem::Dependency
104
- name: bundler-leak
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '0.2'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '0.2'
117
- - !ruby/object:Gem::Dependency
118
- name: gemsmith
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '14.8'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '14.8'
131
- - !ruby/object:Gem::Dependency
132
- name: git-lint
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '1.3'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '1.3'
145
- - !ruby/object:Gem::Dependency
146
- name: guard-rspec
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '4.7'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '4.7'
159
- - !ruby/object:Gem::Dependency
160
- name: pry
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '0.13'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '0.13'
173
- - !ruby/object:Gem::Dependency
174
- name: pry-byebug
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '3.9'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
185
- - !ruby/object:Gem::Version
186
- version: '3.9'
187
- - !ruby/object:Gem::Dependency
188
- name: rake
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: '13.0'
194
- type: :development
195
- prerelease: false
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - "~>"
199
- - !ruby/object:Gem::Version
200
- version: '13.0'
201
- - !ruby/object:Gem::Dependency
202
- name: reek
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - "~>"
206
- - !ruby/object:Gem::Version
207
- version: '6.0'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - "~>"
213
- - !ruby/object:Gem::Version
214
- version: '6.0'
215
- - !ruby/object:Gem::Dependency
216
- name: rspec
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - "~>"
220
- - !ruby/object:Gem::Version
221
- version: '3.10'
222
- type: :development
223
- prerelease: false
224
- version_requirements: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - "~>"
227
- - !ruby/object:Gem::Version
228
- version: '3.10'
229
- - !ruby/object:Gem::Dependency
230
- name: rubocop-performance
231
- requirement: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - "~>"
234
- - !ruby/object:Gem::Version
235
- version: '1.8'
236
- type: :development
237
- prerelease: false
238
- version_requirements: !ruby/object:Gem::Requirement
239
- requirements:
240
- - - "~>"
241
- - !ruby/object:Gem::Version
242
- version: '1.8'
243
- - !ruby/object:Gem::Dependency
244
- name: rubocop-rake
245
- requirement: !ruby/object:Gem::Requirement
246
- requirements:
247
- - - "~>"
248
- - !ruby/object:Gem::Version
249
- version: '0.5'
250
- type: :development
251
- prerelease: false
252
- version_requirements: !ruby/object:Gem::Requirement
253
- requirements:
254
- - - "~>"
255
- - !ruby/object:Gem::Version
256
- version: '0.5'
257
- - !ruby/object:Gem::Dependency
258
- name: rubocop-rspec
259
- requirement: !ruby/object:Gem::Requirement
260
- requirements:
261
- - - "~>"
262
- - !ruby/object:Gem::Version
263
- version: '2.0'
264
- type: :development
265
- prerelease: false
266
- version_requirements: !ruby/object:Gem::Requirement
267
- requirements:
268
- - - "~>"
269
- - !ruby/object:Gem::Version
270
- version: '2.0'
271
- - !ruby/object:Gem::Dependency
272
- name: simplecov
273
- requirement: !ruby/object:Gem::Requirement
274
- requirements:
275
- - - "~>"
276
- - !ruby/object:Gem::Version
277
- version: '0.19'
278
- type: :development
279
- prerelease: false
280
- version_requirements: !ruby/object:Gem::Requirement
281
- requirements:
282
- - - "~>"
283
- - !ruby/object:Gem::Version
284
- version: '0.19'
88
+ version: '7.0'
285
89
  description:
286
90
  email:
287
91
  - brooke@alchemists.io
@@ -309,7 +113,9 @@ files:
309
113
  - lib/rubysmith/builders/reek.rb
310
114
  - lib/rubysmith/builders/rspec/context.rb
311
115
  - lib/rubysmith/builders/rspec/helper.rb
312
- - lib/rubysmith/builders/rubocop.rb
116
+ - lib/rubysmith/builders/rubocop/formatter.rb
117
+ - lib/rubysmith/builders/rubocop/setup.rb
118
+ - lib/rubysmith/builders/ruby_critic.rb
313
119
  - lib/rubysmith/builders/setup.rb
314
120
  - lib/rubysmith/cli/configuration.rb
315
121
  - lib/rubysmith/cli/defaults.yml
@@ -327,6 +133,7 @@ files:
327
133
  - lib/rubysmith/templates/%project_name%/.reek.yml.erb
328
134
  - lib/rubysmith/templates/%project_name%/.rubocop.yml.erb
329
135
  - lib/rubysmith/templates/%project_name%/.ruby-version.erb
136
+ - lib/rubysmith/templates/%project_name%/.rubycritic.yml.erb
330
137
  - lib/rubysmith/templates/%project_name%/CHANGES.adoc.erb
331
138
  - lib/rubysmith/templates/%project_name%/CHANGES.md.erb
332
139
  - lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.adoc.erb
@@ -366,14 +173,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
366
173
  requirements:
367
174
  - - "~>"
368
175
  - !ruby/object:Gem::Version
369
- version: '2.7'
176
+ version: '3.0'
370
177
  required_rubygems_version: !ruby/object:Gem::Requirement
371
178
  requirements:
372
179
  - - ">="
373
180
  - !ruby/object:Gem::Version
374
181
  version: '0'
375
182
  requirements: []
376
- rubygems_version: 3.1.4
183
+ rubygems_version: 3.2.3
377
184
  signing_key:
378
185
  specification_version: 4
379
186
  summary: A command line interface for smithing Ruby projects.
metadata.gz.sig CHANGED
Binary file
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rubocop"
4
- require "refinements/ios"
5
-
6
- module Rubysmith
7
- module Builders
8
- # Builds project skeleton Rubocop code quality support.
9
- class Rubocop
10
- using Refinements::IOs
11
-
12
- def self.call realm, builder: Builder
13
- new(realm, builder: builder).call
14
- end
15
-
16
- def initialize realm, builder: Builder, runner: RuboCop::CLI.new
17
- @realm = realm
18
- @builder = builder
19
- @runner = runner
20
- end
21
-
22
- def call
23
- return unless realm.build_rubocop
24
-
25
- builder.call(realm.with(template_path: "%project_name%/bin/rubocop.erb"))
26
- .render
27
- .permit 0o755
28
-
29
- builder.call(realm.with(template_path: "%project_name%/.rubocop.yml.erb")).render
30
- auto_correct
31
- end
32
-
33
- private
34
-
35
- attr_reader :realm, :builder, :runner
36
-
37
- def auto_correct
38
- STDOUT.squelch { runner.run ["--auto-correct", realm.project_root.to_s] }
39
- end
40
- end
41
- end
42
- end