rubysmith 0.3.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) 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 +30 -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 +4 -2
  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 +7 -9
  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 +41 -17
  25. data/lib/rubysmith/templates/%project_name%/README.adoc.erb +5 -0
  26. data/lib/rubysmith/templates/%project_name%/README.md.erb +4 -0
  27. data/lib/rubysmith/templates/%project_name%/Rakefile.erb +15 -1
  28. data/lib/rubysmith/templates/%project_name%/bin/console.erb +3 -5
  29. data/lib/rubysmith/templates/%project_name%/bin/guard.erb +0 -1
  30. data/lib/rubysmith/templates/%project_name%/bin/rubocop.erb +0 -1
  31. data/lib/rubysmith/templates/%project_name%/lib/%project_name%.rb.erb +3 -0
  32. data/lib/rubysmith/templates/%project_name%/spec/spec_helper.rb.erb +11 -5
  33. data/lib/rubysmith/templates/%project_name%/spec/support/shared_contexts/temp_dir.rb.erb +5 -3
  34. metadata +15 -194
  35. metadata.gz.sig +2 -2
  36. data/lib/rubysmith/builders/rubocop.rb +0 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f7265bb4446630cf2295f79355fa890b515bc277271b51bdefb0130d35fb3502
4
- data.tar.gz: f071cc6e0299ba74bf8515391857e54641c7d7bf9509a2a601059867fa3e69b8
3
+ metadata.gz: bd9ee381ebc8f67ae293544be845606f47500fb44529b127936d89b071d77af8
4
+ data.tar.gz: 25a4b4469bbd3e5b7e43874e7552e94da1156682c15248c91cb2a16073290a33
5
5
  SHA512:
6
- metadata.gz: 7c3f3db7a06f7388fef2df0b4bf4df08d0b0baffd98e3bef05a9b3fc5e1cf3d21037f0cdef2b13b9cb4db0179c64c21ddfbe519fadb7f0003442a0c4b9a62296
7
- data.tar.gz: 0d6a18e00d270fc3d520cfd1799c233e95a78340334f27788cb2ca876bd92c448e6c483da57a3312cc6e5735a38d0feec499adfdb2c872f4fb3466c0ae853e6a
6
+ metadata.gz: a83315a0432b40b43ebc89efaf7cd79d42f9886e711440698b5550e8e90e5ba442d78f655951684ff6c533b4bd07ab3237de60ef037a2c010bf5871859615b0d
7
+ data.tar.gz: 272bdef0ba9dfa1842af8b8715d554f28a83fb86174a762fff42e97ae4c7b8d52b549f702bcb75f0ad87af4ace2901e954cece399f2e8a6ec9b0025b460206b4
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -6,6 +6,8 @@
6
6
 
7
7
  [link=http://badge.fury.io/rb/rubysmith]
8
8
  image::https://badge.fury.io/rb/rubysmith.svg[Gem Version]
9
+ [link=https://www.alchemists.io/projects/code_quality]
10
+ image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchemists Style Guide]
9
11
  [link=https://circleci.com/gh/bkuhlmann/rubysmith]
10
12
  image::https://circleci.com/gh/bkuhlmann/rubysmith.svg?style=svg[Circle CI Status]
11
13
 
@@ -21,18 +23,23 @@ toc::[]
21
23
  == Features
22
24
 
23
25
  * Builds a Ruby project skeleton for custom design and development.
24
- * Uses link:https://www.alchemists.io/projects/refinements[Refinements] Ruby core library enhancements.
25
26
  * Uses link:https://www.alchemists.io/projects/runcom[Runcom] for resource configuration management.
26
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].
27
29
  * Supports link:https://github.com/rubysec/bundler-audit[Bundler Audit].
30
+ * Supports link:https://github.com/rubymem/bundler-leak[Bundler Leak].
28
31
  * Supports link:https://git-scm.com[Git].
29
32
  * Supports link:https://www.alchemists.io/projects/git-lint[Git Lint].
30
33
  * Supports link:https://github.com/guard/guard[Guard].
31
34
  * Supports link:http://pryrepl.org[Pry].
32
35
  * Supports link:https://github.com/troessner/reek[Reek].
36
+ * Supports link:https://www.alchemists.io/projects/refinements[Refinements].
33
37
  * Supports link:https://rspec.info[RSpec].
34
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].
35
41
  * Supports link:https://github.com/rubocop-hq/rubocop-rspec[Rubocop RSpec].
42
+ * Supports link:https://github.com/whitesmith/RubyCritic[RubyCritic].
36
43
  * Supports link:https://github.com/simplecov-ruby/simplecov[SimpleCov].
37
44
  * Supports common settings and a structured layout for building projects.
38
45
  * Provides common documentation:
@@ -71,25 +78,29 @@ From the command line, type: `rubysmith --help`
71
78
 
72
79
  ....
73
80
  USAGE:
81
+ -b, --build NAME [options] Build new project.
74
82
  -v, --version Show gem version.
75
83
  -h, --help Show this message.
76
84
  -c, --config ACTION Manage gem configuration: edit or view.
77
- -b, --build NAME [options] Build new project.
78
85
 
79
86
  BUILD OPTIONS:
80
- --[no-]git Add Git.
81
- --[no-]git-lint Add Git Lint.
82
- --[no-]guard Add Guard.
83
- --[no-]pry Add Pry.
84
- --[no-]reek Add Reek.
85
- --[no-]rspec Add RSpec.
86
- --[no-]rubocop Add Rubocop.
87
- --[no-]setup Add setup script.
88
- --[no-]simple_cov Add SimpleCov.
89
- --min Use minimum/no options.
90
- --[no-]bundler-audit Add Bundler Audit.
91
- --[no-]console Add console script.
92
- --[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.
93
104
  ....
94
105
 
95
106
  === Building
@@ -149,7 +160,9 @@ The default configuration is as follows:
149
160
  :format: "md"
150
161
  :license: "mit"
151
162
  :build:
163
+ :amazing_print: true
152
164
  :bundler_audit: true
165
+ :bundler_leak: true
153
166
  :console: true
154
167
  :documentation: true
155
168
  :git: true
@@ -158,8 +171,10 @@ The default configuration is as follows:
158
171
  :minimum: false
159
172
  :pry: true
160
173
  :reek: true
174
+ :refinements: true
161
175
  :rspec: true
162
176
  :rubocop: true
177
+ :ruby_critic: true
163
178
  :setup: true
164
179
  :simple_cov: true
165
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.grep(/render_/).each { |method| __send__ method }
20
20
  end
21
21
 
22
22
  private
@@ -45,7 +45,9 @@ module Rubysmith
45
45
  end
46
46
 
47
47
  def render_readme
48
- builder.call(realm.with(template_path: "%project_name%/README.#{kind}.erb")).render
48
+ builder.call(realm.with(template_path: "%project_name%/README.#{kind}.erb"))
49
+ .render
50
+ .replace("\n\n\n", "\n\n")
49
51
  end
50
52
 
51
53
  def kind
@@ -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.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.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,11 +43,11 @@ 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
50
+ def process_build kind, settings
53
51
  processors.fetch(kind).call settings.rekey(build: :project_name).merge(now: Time.now)
54
52
  end
55
53
 
@@ -4,7 +4,7 @@ module Rubysmith
4
4
  module Identity
5
5
  NAME = "rubysmith"
6
6
  LABEL = "Rubysmith"
7
- VERSION = "0.3.0"
7
+ VERSION = "0.7.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", "~> 7.16"
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.0"
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", "~> 1.3"
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.9"
24
- <% end %>
25
21
  <% if realm.build_rubocop %>
26
- gem "rubocop", "~> 0.92"
27
- gem "rubocop-performance", "~> 1.8"
22
+ gem "rubocop", "~> 1.5"
23
+ gem "rubocop-performance", "~> 1.9"
28
24
  gem "rubocop-rake", "~> 0.5"
29
- gem "rubocop-rspec", "~> 1.43"
25
+ <% end %>
26
+ <% if realm.build_rspec && realm.build_rubocop %>
27
+ gem "rubocop-rspec", "~> 2.0"
28
+ <% end %>
29
+ <% if realm.build_ruby_critic %>
30
+ gem "rubycritic", "~> 4.5", require: false
30
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 %>
@@ -4,6 +4,11 @@
4
4
 
5
5
  = <%= realm.project_label %>
6
6
 
7
+ <% if realm.build_rubocop %>
8
+ [link=https://www.alchemists.io/projects/code_quality]
9
+ image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchemists Style Guide]
10
+ <% end %>
11
+
7
12
  toc::[]
8
13
 
9
14
  == Features
@@ -1,5 +1,9 @@
1
1
  # <%= realm.project_label %>
2
2
 
3
+ <% if realm.build_rubocop %>
4
+ [![Alchemists Style Guide](https://img.shields.io/badge/code_style-alchemists-brightgreen.svg)](https://www.alchemists.io/projects/code_quality)
5
+ <% end %>
6
+
3
7
  <!-- Tocer[start]: Auto-generated, don't remove. -->
4
8
  <!-- Tocer[finish]: Auto-generated, don't remove. -->
5
9
 
@@ -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.3.0
4
+ version: 0.7.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-10-18 00:00:00.000000000 Z
31
+ date: 2020-12-13 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: pragmater
@@ -36,238 +36,56 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '8.0'
39
+ version: '8.1'
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.0'
46
+ version: '8.1'
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.11'
53
+ version: '7.16'
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.11'
60
+ version: '7.16'
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: '0.92'
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: '0.92'
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.2'
81
+ version: '6.4'
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.2'
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: gemsmith
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '14.6'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '14.6'
117
- - !ruby/object:Gem::Dependency
118
- name: git-lint
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '1.0'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '1.0'
131
- - !ruby/object:Gem::Dependency
132
- name: guard-rspec
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '4.7'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '4.7'
145
- - !ruby/object:Gem::Dependency
146
- name: pry
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '0.13'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '0.13'
159
- - !ruby/object:Gem::Dependency
160
- name: pry-byebug
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '3.9'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '3.9'
173
- - !ruby/object:Gem::Dependency
174
- name: rake
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '13.0'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
185
- - !ruby/object:Gem::Version
186
- version: '13.0'
187
- - !ruby/object:Gem::Dependency
188
- name: reek
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: '6.0'
194
- type: :development
195
- prerelease: false
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - "~>"
199
- - !ruby/object:Gem::Version
200
- version: '6.0'
201
- - !ruby/object:Gem::Dependency
202
- name: rspec
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - "~>"
206
- - !ruby/object:Gem::Version
207
- version: '3.9'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - "~>"
213
- - !ruby/object:Gem::Version
214
- version: '3.9'
215
- - !ruby/object:Gem::Dependency
216
- name: rubocop-performance
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - "~>"
220
- - !ruby/object:Gem::Version
221
- version: '1.8'
222
- type: :development
223
- prerelease: false
224
- version_requirements: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - "~>"
227
- - !ruby/object:Gem::Version
228
- version: '1.8'
229
- - !ruby/object:Gem::Dependency
230
- name: rubocop-rake
231
- requirement: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - "~>"
234
- - !ruby/object:Gem::Version
235
- version: '0.5'
236
- type: :development
237
- prerelease: false
238
- version_requirements: !ruby/object:Gem::Requirement
239
- requirements:
240
- - - "~>"
241
- - !ruby/object:Gem::Version
242
- version: '0.5'
243
- - !ruby/object:Gem::Dependency
244
- name: rubocop-rspec
245
- requirement: !ruby/object:Gem::Requirement
246
- requirements:
247
- - - "~>"
248
- - !ruby/object:Gem::Version
249
- version: '1.43'
250
- type: :development
251
- prerelease: false
252
- version_requirements: !ruby/object:Gem::Requirement
253
- requirements:
254
- - - "~>"
255
- - !ruby/object:Gem::Version
256
- version: '1.43'
257
- - !ruby/object:Gem::Dependency
258
- name: simplecov
259
- requirement: !ruby/object:Gem::Requirement
260
- requirements:
261
- - - "~>"
262
- - !ruby/object:Gem::Version
263
- version: '0.19'
264
- type: :development
265
- prerelease: false
266
- version_requirements: !ruby/object:Gem::Requirement
267
- requirements:
268
- - - "~>"
269
- - !ruby/object:Gem::Version
270
- version: '0.19'
88
+ version: '6.4'
271
89
  description:
272
90
  email:
273
91
  - brooke@alchemists.io
@@ -295,7 +113,9 @@ files:
295
113
  - lib/rubysmith/builders/reek.rb
296
114
  - lib/rubysmith/builders/rspec/context.rb
297
115
  - lib/rubysmith/builders/rspec/helper.rb
298
- - 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
299
119
  - lib/rubysmith/builders/setup.rb
300
120
  - lib/rubysmith/cli/configuration.rb
301
121
  - lib/rubysmith/cli/defaults.yml
@@ -313,6 +133,7 @@ files:
313
133
  - lib/rubysmith/templates/%project_name%/.reek.yml.erb
314
134
  - lib/rubysmith/templates/%project_name%/.rubocop.yml.erb
315
135
  - lib/rubysmith/templates/%project_name%/.ruby-version.erb
136
+ - lib/rubysmith/templates/%project_name%/.rubycritic.yml.erb
316
137
  - lib/rubysmith/templates/%project_name%/CHANGES.adoc.erb
317
138
  - lib/rubysmith/templates/%project_name%/CHANGES.md.erb
318
139
  - lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.adoc.erb
@@ -359,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
359
180
  - !ruby/object:Gem::Version
360
181
  version: '0'
361
182
  requirements: []
362
- rubygems_version: 3.1.4
183
+ rubygems_version: 3.2.0
363
184
  signing_key:
364
185
  specification_version: 4
365
186
  summary: A command line interface for smithing Ruby projects.
metadata.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- &�ӧ�r(7���a�1��e���SjZ~ 
2
- �~� �D ru*���[���*;�rJ&�d�Y�M�v�q�����7��[�!��`O����:�)FC0�U���I�΃{��p��M�)����ԔB���'Q�BA2�ؚ�BP��U��<� �J��j�`��X'���3%]y�y�7 ���%s�61��p����-cD^0B�Ǯ�Ձ:xq!#(y�v��]D������z���:޻6[�d�L!
1
+ ��c��҉>7<ݥd2�c?sS��kE�L>Ȟ�R� �(�U5�5[8C�#��|Sm����ֳj���{U�*!����$ͫhF��������E�$f�Ø<:���`��c x7B0Meɸ�5�?_�rݧnJ��5E�<�s:�X�0o� :�Z�M_�͚�C���BB-�a�dne1�!�z;;�>\��:d���a�+ ��m1f*p.�k4BwXR'�iW
2
+ Z��
@@ -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