rubysmith 0.5.0 → 0.9.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 +25 -15
  5. data/bin/rubysmith +0 -3
  6. data/lib/rubysmith.rb +3 -1
  7. data/lib/rubysmith/builder.rb +1 -4
  8. data/lib/rubysmith/builders/bundler.rb +14 -9
  9. data/lib/rubysmith/builders/documentation.rb +1 -1
  10. data/lib/rubysmith/builders/pragma.rb +4 -4
  11. data/lib/rubysmith/builders/rake.rb +2 -2
  12. data/lib/rubysmith/builders/rspec/context.rb +4 -3
  13. data/lib/rubysmith/builders/rspec/helper.rb +1 -2
  14. data/lib/rubysmith/builders/rubocop/formatter.rb +33 -0
  15. data/lib/rubysmith/builders/rubocop/setup.rb +33 -0
  16. data/lib/rubysmith/builders/ruby_critic.rb +27 -0
  17. data/lib/rubysmith/cli/configuration.rb +2 -1
  18. data/lib/rubysmith/cli/defaults.yml +3 -0
  19. data/lib/rubysmith/cli/parsers/build.rb +19 -1
  20. data/lib/rubysmith/cli/parsers/core.rb +1 -1
  21. data/lib/rubysmith/cli/processors/build.rb +9 -2
  22. data/lib/rubysmith/cli/shell.rb +9 -10
  23. data/lib/rubysmith/identity.rb +1 -1
  24. data/lib/rubysmith/realm.rb +3 -0
  25. data/lib/rubysmith/templates/%project_name%/.rubycritic.yml.erb +3 -0
  26. data/lib/rubysmith/templates/%project_name%/Gemfile.erb +39 -16
  27. data/lib/rubysmith/templates/%project_name%/Rakefile.erb +9 -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 +10 -5
  33. data/lib/rubysmith/templates/%project_name%/spec/support/shared_contexts/temp_dir.rb.erb +6 -4
  34. metadata +16 -209
  35. metadata.gz.sig +0 -0
  36. data/lib/rubysmith/builders/rubocop.rb +0 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dbfa61773bde7189ba8d0dec9afe63668e816f133fca51c30ca842e385725374
4
- data.tar.gz: cdc26262659c4d509445a4b0bda9354ff7de9ba5b444efdb6ddc218b44302cb3
3
+ metadata.gz: 35f0eea5be27d1e8a8e05430c6b99d80bfa02bbeabbc6e1148f4c7b388280a26
4
+ data.tar.gz: ebce4666b017291222012d583ce61266cd15674bf6248199e6cff1700484d4fd
5
5
  SHA512:
6
- metadata.gz: 6b3eabb2cb6dfc9e05f255b0258638a5e299911c8250d2f36f97d33748c1e021050a26295b473d35c7d2bbef7aed3b010423b606f4e4c1821c6e14f326f97c7d
7
- data.tar.gz: '028679978997133b526267f6835a5cad6ef76c6a87e8976d3a0012f843fb3ae8565751fcbff35ee4b2f1dbb81c6b216bec95807cd9fecb00fa4cb088ccc3a72a'
6
+ metadata.gz: be592ad7f91f4589ba1aac09b26a7ff875edbc36974559abdae1410e0e41342f08dd5ff24c6517ff63eb87af30491a86115c165c161a39bb3b6453f315230a13
7
+ data.tar.gz: d245861a8bf50f49541dd9f0aae53007681905eebff6d561ac3a7a9d0fc70ccfa495233fa2f0764cb44313e8f2d0569130ef007e2d63468d587c455e9c3a8035
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -23,9 +23,9 @@ 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
30
  * Supports link:https://github.com/rubymem/bundler-leak[Bundler Leak].
31
31
  * Supports link:https://git-scm.com[Git].
@@ -33,9 +33,13 @@ toc::[]
33
33
  * Supports link:https://github.com/guard/guard[Guard].
34
34
  * Supports link:http://pryrepl.org[Pry].
35
35
  * Supports link:https://github.com/troessner/reek[Reek].
36
+ * Supports link:https://www.alchemists.io/projects/refinements[Refinements].
36
37
  * Supports link:https://rspec.info[RSpec].
37
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].
38
41
  * Supports link:https://github.com/rubocop-hq/rubocop-rspec[Rubocop RSpec].
42
+ * Supports link:https://github.com/whitesmith/RubyCritic[RubyCritic].
39
43
  * Supports link:https://github.com/simplecov-ruby/simplecov[SimpleCov].
40
44
  * Supports common settings and a structured layout for building projects.
41
45
  * Provides common documentation:
@@ -80,20 +84,23 @@ USAGE:
80
84
  -c, --config ACTION Manage gem configuration: edit or view.
81
85
 
82
86
  BUILD OPTIONS:
83
- --[no-]bundler-audit Add Bundler Audit.
84
- --[no-]bundler-leak Add Bundler Leak.
85
- --[no-]console Add console script.
86
- --[no-]documentation Add documentation.
87
- --[no-]git Add Git.
88
- --[no-]git-lint Add Git Lint.
89
- --[no-]guard Add Guard.
90
- --[no-]pry Add Pry.
91
- --[no-]reek Add Reek.
92
- --[no-]rspec Add RSpec.
93
- --[no-]rubocop Add Rubocop.
94
- --[no-]setup Add setup script.
95
- --[no-]simple_cov Add SimpleCov.
96
- --min Use minimum/no options.
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.
97
104
  ....
98
105
 
99
106
  === Building
@@ -153,6 +160,7 @@ The default configuration is as follows:
153
160
  :format: "md"
154
161
  :license: "mit"
155
162
  :build:
163
+ :amazing_print: true
156
164
  :bundler_audit: true
157
165
  :bundler_leak: true
158
166
  :console: true
@@ -163,8 +171,10 @@ The default configuration is as follows:
163
171
  :minimum: false
164
172
  :pry: true
165
173
  :reek: true
174
+ :refinements: true
166
175
  :rspec: true
167
176
  :rubocop: true
177
+ :ruby_critic: true
168
178
  :setup: true
169
179
  :simple_cov: true
170
180
  :builders:
@@ -1,9 +1,6 @@
1
1
  #! /usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- # TODO: Remove once the Pattern Matching feature is fully supported.
5
- Warning[:experimental] = false
6
-
7
4
  require "rubysmith"
8
5
  require "rubysmith/cli/shell"
9
6
 
@@ -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,
@@ -2,36 +2,41 @@
2
2
 
3
3
  require "bundler"
4
4
  require "bundler/cli"
5
+ require "refinements/pathnames"
5
6
 
6
7
  module Rubysmith
7
8
  module Builders
8
9
  # Builds Bundler Gemfile configuration and installs gem dependencies for project skeleton.
9
10
  class Bundler
11
+ using Refinements::Pathnames
12
+
10
13
  def self.call realm, builder: Builder
11
14
  new(realm, builder: builder).call
12
15
  end
13
16
 
14
- def initialize realm, builder: Builder, runner: ::Bundler::CLI
17
+ def initialize realm, builder: Builder, client: ::Bundler::CLI
15
18
  @realm = realm
16
19
  @builder = builder
17
- @runner = runner
20
+ @client = client
18
21
  end
19
22
 
20
23
  def call
21
24
  builder.call(realm.with(template_path: "%project_name%/Gemfile.erb"))
22
25
  .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")
28
- Dir.chdir(realm.project_root) { runner.start %w[install --quiet] }
26
+ .replace(/\n\s+group/, "\n\ngroup")
27
+ .replace(/\n\s+gem/, "\n gem")
28
+ .replace(/ (?=.+refinements)/, "")
29
+ .replace(/(\n+|\s+)end/, "\nend")
30
+ .replace(/\n\ngroup :(code_quality|test|tools) do\nend/, "")
31
+ .replace(/org"\n+/, "org\"\n\n")
32
+
33
+ realm.project_root.change_dir { client.start %w[install --quiet] }
29
34
  nil
30
35
  end
31
36
 
32
37
  private
33
38
 
34
- attr_reader :realm, :builder, :runner
39
+ attr_reader :realm, :builder, :client
35
40
  end
36
41
  end
37
42
  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__ method }
19
+ private_methods.sort.grep(/render_/).each { |method| __send__ method }
20
20
  end
21
21
 
22
22
  private
@@ -10,19 +10,19 @@ module Rubysmith
10
10
  new(realm).call
11
11
  end
12
12
 
13
- def initialize realm, runner: Pragmater::Runner
13
+ def initialize realm, client: Pragmater::Runner
14
14
  @realm = realm
15
- @runner = runner
15
+ @client = client
16
16
  end
17
17
 
18
18
  def call
19
- runner.for(**attributes).call
19
+ client.for(**attributes).call
20
20
  nil
21
21
  end
22
22
 
23
23
  private
24
24
 
25
- attr_reader :realm, :runner
25
+ attr_reader :realm, :client
26
26
 
27
27
  def attributes
28
28
  {
@@ -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,6 +8,7 @@
8
8
  :format: "md"
9
9
  :license: "mit"
10
10
  :build:
11
+ :amazing_print: true
11
12
  :bundler_audit: true
12
13
  :bundler_leak: true
13
14
  :console: true
@@ -18,8 +19,10 @@
18
19
  :minimum: false
19
20
  :pry: true
20
21
  :reek: true
22
+ :refinements: true
21
23
  :rspec: true
22
24
  :rubocop: true
25
+ :ruby_critic: true
23
26
  :setup: true
24
27
  :simple_cov: true
25
28
  :builders:
@@ -17,7 +17,7 @@ module Rubysmith
17
17
 
18
18
  def call arguments = []
19
19
  client.separator "\nBUILD OPTIONS:\n"
20
- private_methods.grep(/add_/).each { |method| __send__ method }
20
+ private_methods.sort.grep(/add_/).each { |method| __send__ method }
21
21
  arguments.empty? ? arguments : client.parse!(arguments)
22
22
  end
23
23
 
@@ -31,6 +31,12 @@ module Rubysmith
31
31
  end
32
32
  end
33
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
+
34
40
  def add_bundler_audit
35
41
  client.on "--[no-]bundler-audit", "Add Bundler Audit." do |value|
36
42
  options[:build_bundler_audit] = value
@@ -85,6 +91,12 @@ module Rubysmith
85
91
  end
86
92
  end
87
93
 
94
+ def add_refinements
95
+ client.on "--[no-]refinements", "Add Refinements." do |value|
96
+ options[:build_refinements] = value
97
+ end
98
+ end
99
+
88
100
  def add_rspec
89
101
  client.on "--[no-]rspec", "Add RSpec." do |value|
90
102
  options[:build_rspec] = value
@@ -97,6 +109,12 @@ module Rubysmith
97
109
  end
98
110
  end
99
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
+
100
118
  def add_setup
101
119
  client.on "--[no-]setup", "Add setup script." do |value|
102
120
  options[:build_setup] = value
@@ -28,7 +28,7 @@ module Rubysmith
28
28
  attr_reader :client, :options
29
29
 
30
30
  def collate
31
- private_methods.grep(/add_/).each { |method| __send__ method }
31
+ private_methods.sort.grep(/add_/).each { |method| __send__ method }
32
32
  end
33
33
 
34
34
  def add_config
@@ -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,10 +27,16 @@ 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
@@ -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.5.0"
7
+ VERSION = "0.9.0"
8
8
  VERSION_LABEL = "#{LABEL} #{VERSION}"
9
9
  SUMMARY = "A command line interface for smithing Ruby projects."
10
10
  end
@@ -17,6 +17,7 @@ module Rubysmith
17
17
  documentation_format
18
18
  documentation_license
19
19
  build_minimum
20
+ build_amazing_print
20
21
  build_bundler_audit
21
22
  build_bundler_leak
22
23
  build_console
@@ -26,8 +27,10 @@ module Rubysmith
26
27
  build_guard
27
28
  build_pry
28
29
  build_reek
30
+ build_refinements
29
31
  build_rspec
30
32
  build_rubocop
33
+ build_ruby_critic
31
34
  build_setup
32
35
  build_simple_cov
33
36
  builders_pragmater_comments
@@ -0,0 +1,3 @@
1
+ paths:
2
+ - "lib"
3
+ no_browser: true
@@ -1,7 +1,13 @@
1
+ ruby File.read(".ruby-version").strip
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  <% unless realm.build_minimum %>
4
- group :development do
6
+ <% if realm.build_refinements %>
7
+ gem "refinements", "~> 8.0"
8
+ <% end %>
9
+
10
+ group :code_quality do
5
11
  <% if realm.build_bundler_audit %>
6
12
  gem "bundler-audit", "~> 0.7"
7
13
  <% end %>
@@ -9,30 +15,47 @@ source "https://rubygems.org"
9
15
  gem "bundler-leak", "~> 0.2"
10
16
  <% end %>
11
17
  <% if realm.build_git && realm.build_git_lint %>
12
- gem "git-lint", "~> 1.3"
13
- <% end %>
14
- <% if realm.build_guard %>
15
- gem "guard-rspec", "~> 4.7"
16
- <% end %>
17
- <% if realm.build_pry %>
18
- gem "pry", "~> 0.13"
19
- gem "pry-byebug", "~> 3.9"
18
+ gem "git-lint", "~> 2.0"
20
19
  <% end %>
21
- gem "rake", "~> 13.0"
22
20
  <% if realm.build_reek %>
23
21
  gem "reek", "~> 6.0"
24
22
  <% end %>
25
- <% if realm.build_rspec %>
26
- gem "rspec", "~> 3.10"
27
- <% end %>
28
23
  <% if realm.build_rubocop %>
29
- gem "rubocop", "~> 1.3"
30
- gem "rubocop-performance", "~> 1.8"
24
+ gem "rubocop", "~> 1.8"
25
+ gem "rubocop-performance", "~> 1.9"
31
26
  gem "rubocop-rake", "~> 0.5"
27
+ <% end %>
28
+ <% if realm.build_rspec && realm.build_rubocop %>
32
29
  gem "rubocop-rspec", "~> 2.0"
33
30
  <% end %>
31
+ <% if realm.build_ruby_critic %>
32
+ gem "rubycritic", "~> 4.5", require: false
33
+ <% end %>
34
34
  <% if realm.build_simple_cov %>
35
- gem "simplecov", "~> 0.19"
35
+ gem "simplecov", "~> 0.20"
36
+ <% end %>
37
+ end
38
+
39
+ group :development do
40
+ gem "rake", "~> 13.0"
41
+ end
42
+
43
+ group :test do
44
+ <% if realm.build_guard %>
45
+ gem "guard-rspec", "~> 4.7", require: false
46
+ <% end %>
47
+ <% if realm.build_rspec %>
48
+ gem "rspec", "~> 3.10"
49
+ <% end %>
50
+ end
51
+
52
+ group :tools do
53
+ <% if realm.build_amazing_print %>
54
+ gem "amazing_print", "~> 1.2"
55
+ <% end %>
56
+ <% if realm.build_pry %>
57
+ gem "pry", "~> 0.13"
58
+ gem "pry-byebug", "~> 3.9"
36
59
  <% end %>
37
60
  end
38
61
  <% end %>
@@ -1,3 +1,5 @@
1
+ require "bundler/setup"
2
+
1
3
  <% if realm.build_bundler_audit %>
2
4
  require "bundler/audit/task"
3
5
  <% end %>
@@ -16,6 +18,9 @@
16
18
  <% if realm.build_rubocop %>
17
19
  require "rubocop/rake_task"
18
20
  <% end %>
21
+ <% if realm.build_ruby_critic %>
22
+ require "rubycritic/rake_task"
23
+ <% end %>
19
24
 
20
25
  <% if realm.build_bundler_audit %>
21
26
  Bundler::Audit::Task.new
@@ -32,8 +37,11 @@
32
37
  <% if realm.build_rubocop %>
33
38
  RuboCop::RakeTask.new
34
39
  <% end %>
40
+ <% if realm.build_ruby_critic %>
41
+ RubyCritic::RakeTask.new
42
+ <% end %>
35
43
 
36
44
  desc "Run code quality checks"
37
- 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 %>]
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 %>]
38
46
 
39
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,17 +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 %>
12
9
  require "<%= realm.project_name %>"
10
+ <% if realm.build_refinements %>
11
+ require "refinements"
12
+
13
+ using Refinements::Pathnames
13
14
 
14
- Dir[File.join(__dir__, "support", "shared_contexts", "**/*.rb")].sort.each { |path| require path }
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 %>
15
20
 
16
21
  RSpec.configure do |config|
17
22
  config.color = true
@@ -1,9 +1,11 @@
1
- RSpec.shared_context "with temporary directory", :temp_dir do
2
- let(:temp_dir) { Bundler.root.join "tmp", "rspec" }
1
+ RSpec.shared_context "with temporary directory" do
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.5.0
4
+ version: 0.9.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-21 00:00:00.000000000 Z
31
+ date: 2021-01-24 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.15'
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.15'
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.8'
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.8'
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.6
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