rubysmith 0.9.1 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/bin/rubysmith +0 -1
  5. data/lib/rubysmith.rb +3 -2
  6. data/lib/rubysmith/builder.rb +13 -26
  7. data/lib/rubysmith/builders/bundler.rb +6 -8
  8. data/lib/rubysmith/builders/console.rb +6 -8
  9. data/lib/rubysmith/builders/core.rb +7 -8
  10. data/lib/rubysmith/builders/documentation.rb +16 -21
  11. data/lib/rubysmith/builders/git/commit.rb +7 -11
  12. data/lib/rubysmith/builders/git/setup.rb +6 -8
  13. data/lib/rubysmith/builders/guard.rb +9 -9
  14. data/lib/rubysmith/builders/pragma.rb +8 -13
  15. data/lib/rubysmith/builders/rake.rb +5 -7
  16. data/lib/rubysmith/builders/reek.rb +6 -8
  17. data/lib/rubysmith/builders/rspec/context.rb +10 -11
  18. data/lib/rubysmith/builders/rspec/helper.rb +6 -8
  19. data/lib/rubysmith/builders/rubocop/formatter.rb +5 -7
  20. data/lib/rubysmith/builders/rubocop/setup.rb +7 -9
  21. data/lib/rubysmith/builders/ruby_critic.rb +6 -8
  22. data/lib/rubysmith/builders/setup.rb +8 -8
  23. data/lib/rubysmith/cli/configuration/content.rb +69 -0
  24. data/lib/rubysmith/cli/{defaults.yml → configuration/defaults.yml} +0 -0
  25. data/lib/rubysmith/cli/configuration/loader.rb +35 -0
  26. data/lib/rubysmith/cli/parsers.rb +11 -0
  27. data/lib/rubysmith/cli/parsers/assembler.rb +10 -15
  28. data/lib/rubysmith/cli/parsers/build.rb +4 -6
  29. data/lib/rubysmith/cli/parsers/core.rb +5 -9
  30. data/lib/rubysmith/cli/processors/build.rb +9 -8
  31. data/lib/rubysmith/cli/processors/config.rb +3 -7
  32. data/lib/rubysmith/cli/shell.rb +7 -14
  33. data/lib/rubysmith/identity.rb +1 -1
  34. data/lib/rubysmith/pathway.rb +3 -9
  35. data/lib/rubysmith/renderers/erb.rb +7 -9
  36. data/lib/rubysmith/renderers/namespace.rb +1 -3
  37. data/lib/rubysmith/templates/%project_name%/.rubocop.yml.erb +1 -1
  38. data/lib/rubysmith/templates/%project_name%/CHANGES.adoc.erb +1 -1
  39. data/lib/rubysmith/templates/%project_name%/CHANGES.md.erb +1 -1
  40. data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.adoc.erb +2 -2
  41. data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.md.erb +1 -1
  42. data/lib/rubysmith/templates/%project_name%/Gemfile.erb +14 -14
  43. data/lib/rubysmith/templates/%project_name%/LICENSE-apache.adoc.erb +1 -1
  44. data/lib/rubysmith/templates/%project_name%/LICENSE-apache.md.erb +1 -1
  45. data/lib/rubysmith/templates/%project_name%/LICENSE-mit.adoc.erb +1 -1
  46. data/lib/rubysmith/templates/%project_name%/LICENSE-mit.md.erb +1 -1
  47. data/lib/rubysmith/templates/%project_name%/README.adoc.erb +5 -5
  48. data/lib/rubysmith/templates/%project_name%/README.md.erb +5 -5
  49. data/lib/rubysmith/templates/%project_name%/Rakefile.erb +15 -15
  50. data/lib/rubysmith/templates/%project_name%/bin/console.erb +1 -1
  51. data/lib/rubysmith/templates/%project_name%/lib/%project_name%.rb.erb +1 -1
  52. data/lib/rubysmith/templates/%project_name%/spec/spec_helper.rb.erb +6 -4
  53. data/lib/rubysmith/templates/%project_name%/spec/support/shared_contexts/temp_dir.rb.erb +3 -3
  54. metadata +7 -6
  55. metadata.gz.sig +0 -0
  56. data/lib/rubysmith/cli/configuration.rb +0 -30
  57. data/lib/rubysmith/realm.rb +0 -74
@@ -7,13 +7,11 @@ module Rubysmith
7
7
  module Parsers
8
8
  # Handles parsing of Command Line Interface (CLI) core options.
9
9
  class Core
10
- def self.call client:, options:
11
- new(client: client, options: options).call
12
- end
10
+ def self.call(options: {}, client: CLIENT) = new(options: options, client: client).call
13
11
 
14
- def initialize client: CLIENT, options: {}
15
- @client = client
12
+ def initialize options: {}, client: CLIENT
16
13
  @options = options
14
+ @client = client
17
15
  end
18
16
 
19
17
  def call arguments = []
@@ -25,11 +23,9 @@ module Rubysmith
25
23
 
26
24
  private
27
25
 
28
- attr_reader :client, :options
26
+ attr_reader :options, :client
29
27
 
30
- def collate
31
- private_methods.sort.grep(/add_/).each { |method| __send__ method }
32
- end
28
+ def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
33
29
 
34
30
  def add_config
35
31
  client.on "-c",
@@ -1,10 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "refinements/structs"
4
+
3
5
  module Rubysmith
4
6
  module CLI
5
7
  module Processors
6
8
  # Handles the Command Line Interface (CLI) for building of a project skeleton.
7
9
  class Build
10
+ using Refinements::Structs
11
+
8
12
  # Order is important.
9
13
  MINIMUM = [
10
14
  Builders::Core,
@@ -37,21 +41,18 @@ module Rubysmith
37
41
  new builders: MINIMUM
38
42
  end
39
43
 
40
- def initialize builders: MAXIMUM
44
+ def initialize configuration: Configuration::Loader.call, builders: MAXIMUM
45
+ @configuration = configuration
41
46
  @builders = builders
42
47
  end
43
48
 
44
- def call options
45
- Realm[**options].then { |realm| process realm }
46
- end
49
+ def call(options) = configuration.merge(**options).then { |config| process config }
47
50
 
48
51
  private
49
52
 
50
- attr_reader :builders
53
+ attr_reader :configuration, :builders
51
54
 
52
- def process realm
53
- builders.each { |builder| builder.call realm }
54
- end
55
+ def process(config) = builders.each { |builder| builder.call config }
55
56
  end
56
57
  end
57
58
  end
@@ -5,7 +5,7 @@ module Rubysmith
5
5
  module Processors
6
6
  # Handles the Command Line Interface (CLI) configuration processing.
7
7
  class Config
8
- def initialize configuration: CLI::Configuration::CLIENT, kernel: Kernel
8
+ def initialize configuration: CLI::Configuration::Loader::CLIENT, kernel: Kernel
9
9
  @configuration = configuration
10
10
  @kernel = kernel
11
11
  end
@@ -22,13 +22,9 @@ module Rubysmith
22
22
 
23
23
  attr_reader :configuration, :kernel
24
24
 
25
- def edit
26
- kernel.system "$EDITOR #{configuration.current}"
27
- end
25
+ def edit = kernel.system("$EDITOR #{configuration.current}")
28
26
 
29
- def view
30
- kernel.system "cat #{configuration.current}"
31
- end
27
+ def view = kernel.system("cat #{configuration.current}")
32
28
  end
33
29
  end
34
30
  end
@@ -1,11 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "optparse"
4
3
  require "refinements/hashes"
5
4
 
6
5
  module Rubysmith
7
6
  module CLI
8
- # Represents the Command Line Interface (CLI) for this gem.
7
+ # The main Command Line Interface (CLI) object.
9
8
  class Shell
10
9
  using Refinements::Hashes
11
10
 
@@ -24,10 +23,10 @@ module Rubysmith
24
23
  parse arguments
25
24
 
26
25
  case options
27
- in config: action then process_config action
26
+ in config: Symbol => action then process_config action
28
27
  in build_minimum: true then process_build :build_minimum, options
29
28
  in build: then process_build :build_maximum, options
30
- in version: then puts version
29
+ in version: String => version then puts version
31
30
  in help: then usage
32
31
  else usage
33
32
  end
@@ -35,7 +34,7 @@ module Rubysmith
35
34
 
36
35
  private
37
36
 
38
- attr_reader :parser, :processors, :exceptions
37
+ attr_reader :parser, :processors
39
38
 
40
39
  def parse arguments = []
41
40
  parser.call arguments
@@ -43,22 +42,16 @@ module Rubysmith
43
42
  puts error.message
44
43
  end
45
44
 
46
- def process_config action
47
- processors.fetch(:config).call action
48
- end
45
+ def process_config(action) = processors.fetch(:config).call(action)
49
46
 
50
47
  def process_build kind, settings
51
48
  processors.fetch(kind).call settings.transform_keys(build: :project_name)
52
49
  .merge(now: Time.now)
53
50
  end
54
51
 
55
- def options
56
- parser.to_h
57
- end
52
+ def options = parser.to_h
58
53
 
59
- def usage
60
- puts parser.to_s
61
- end
54
+ def usage = puts(parser.to_s)
62
55
  end
63
56
  end
64
57
  end
@@ -4,7 +4,7 @@ module Rubysmith
4
4
  module Identity
5
5
  NAME = "rubysmith"
6
6
  LABEL = "Rubysmith"
7
- VERSION = "0.9.1"
7
+ VERSION = "0.10.0"
8
8
  VERSION_LABEL = "#{LABEL} #{VERSION}"
9
9
  SUMMARY = "A command line interface for smithing Ruby projects."
10
10
  end
@@ -14,17 +14,11 @@ module Rubysmith
14
14
  freeze
15
15
  end
16
16
 
17
- def with attributes
18
- self.class.new to_h.merge(attributes)
19
- end
17
+ def with(attributes) = self.class.new(to_h.merge(attributes))
20
18
 
21
- def end_path
22
- end_root.join from_parent, start_path.basename
23
- end
19
+ def end_path = end_root.join(from_parent, start_path.basename)
24
20
 
25
- def partial?
26
- start_path.basename.fnmatch? "_*"
27
- end
21
+ def partial? = start_path.basename.fnmatch?("_*")
28
22
 
29
23
  private
30
24
 
@@ -6,24 +6,22 @@ module Rubysmith
6
6
  module Renderers
7
7
  # Renders ERB templates as fully functional files.
8
8
  class ERB
9
- def initialize realm, scope: Renderers::Namespace.new(realm.project_class), client: ::ERB
10
- @realm = realm
9
+ def initialize configuration,
10
+ scope: Renderers::Namespace.new(configuration.project_class),
11
+ client: ::ERB
12
+ @configuration = configuration
11
13
  @scope = scope
12
14
  @client = client
13
15
  end
14
16
 
15
- def call content
16
- client.new(content, trim_mode: "<>", eoutvar: "@buffer").result binding
17
- end
17
+ def call(content) = client.new(content, trim_mode: "<>", eoutvar: "@buffer").result(binding)
18
18
 
19
19
  private
20
20
 
21
21
  attr_accessor :buffer
22
- attr_reader :realm, :scope, :client
22
+ attr_reader :configuration, :scope, :client
23
23
 
24
- def namespace
25
- self.buffer = scope.call yield
26
- end
24
+ def namespace = self.buffer = scope.call(yield)
27
25
  end
28
26
  end
29
27
  end
@@ -14,9 +14,7 @@ module Rubysmith
14
14
  @depth = namespace.scan("::").length
15
15
  end
16
16
 
17
- def call content
18
- "#{prefix}#{body content}#{suffix.chomp}"
19
- end
17
+ def call(content) = "#{prefix}#{body content}#{suffix.chomp}"
20
18
 
21
19
  private
22
20
 
@@ -2,6 +2,6 @@ inherit_from:
2
2
  - https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/ruby.yml
3
3
  - https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/rake.yml
4
4
  - https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/performance.yml
5
- <% if realm.build_rspec %>
5
+ <% if configuration.build_rspec %>
6
6
  - https://raw.githubusercontent.com/bkuhlmann/code_quality/main/configurations/rubocop/rspec.yml
7
7
  <% end %>
@@ -1,5 +1,5 @@
1
1
  = Changes
2
2
 
3
- == 0.1.0 (<%= realm.now.strftime "%Y-%m-%d" %>)
3
+ == 0.1.0 (<%= configuration.now.strftime "%Y-%m-%d" %>)
4
4
 
5
5
  * Added initial implementation.
@@ -1,5 +1,5 @@
1
1
  # Changes
2
2
 
3
- ## 0.1.0 (<%= realm.now.strftime "%Y-%m-%d" %>)
3
+ ## 0.1.0 (<%= configuration.now.strftime "%Y-%m-%d" %>)
4
4
 
5
5
  - Added initial implementation.
@@ -51,8 +51,8 @@ an appointed representative at an online or offline event.
51
51
  == Enforcement
52
52
 
53
53
  Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community
54
- leaders responsible for enforcement at link:mailto:<%= realm.author_email %>?subject=Conduct[<%=
55
- realm.author_name %>].
54
+ leaders responsible for enforcement at link:mailto:<%= configuration.author_email %>?subject=Conduct[<%=
55
+ configuration.author_name %>].
56
56
 
57
57
  All complaints will be reviewed and investigated promptly and fairly.
58
58
 
@@ -51,7 +51,7 @@ an appointed representative at an online or offline event.
51
51
  ## Enforcement
52
52
 
53
53
  Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community
54
- leaders responsible for enforcement at [<%= realm.author_name %>](mailto:<%= realm.author_email
54
+ leaders responsible for enforcement at [<%= configuration.author_name %>](mailto:<%= configuration.author_email
55
55
  %>?subject=Conduct).
56
56
  All complaints will be reviewed and investigated promptly and fairly.
57
57
 
@@ -2,36 +2,36 @@ ruby File.read(".ruby-version").strip
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- <% unless realm.build_minimum %>
6
- <% if realm.build_refinements %>
5
+ <% unless configuration.build_minimum %>
6
+ <% if configuration.build_refinements %>
7
7
  gem "refinements", "~> 8.0"
8
8
  <% end %>
9
9
 
10
10
  group :code_quality do
11
- <% if realm.build_bundler_audit %>
11
+ <% if configuration.build_bundler_audit %>
12
12
  gem "bundler-audit", "~> 0.7"
13
13
  <% end %>
14
- <% if realm.build_bundler_leak %>
14
+ <% if configuration.build_bundler_leak %>
15
15
  gem "bundler-leak", "~> 0.2"
16
16
  <% end %>
17
- <% if realm.build_git && realm.build_git_lint %>
17
+ <% if configuration.build_git && configuration.build_git_lint %>
18
18
  gem "git-lint", "~> 2.0"
19
19
  <% end %>
20
- <% if realm.build_reek %>
20
+ <% if configuration.build_reek %>
21
21
  gem "reek", "~> 6.0"
22
22
  <% end %>
23
- <% if realm.build_rubocop %>
23
+ <% if configuration.build_rubocop %>
24
24
  gem "rubocop", "~> 1.10"
25
25
  gem "rubocop-performance", "~> 1.9"
26
26
  gem "rubocop-rake", "~> 0.5"
27
27
  <% end %>
28
- <% if realm.build_rspec && realm.build_rubocop %>
28
+ <% if configuration.build_rspec && configuration.build_rubocop %>
29
29
  gem "rubocop-rspec", "~> 2.0"
30
30
  <% end %>
31
- <% if realm.build_ruby_critic %>
31
+ <% if configuration.build_ruby_critic %>
32
32
  gem "rubycritic", "~> 4.5", require: false
33
33
  <% end %>
34
- <% if realm.build_simple_cov %>
34
+ <% if configuration.build_simple_cov %>
35
35
  gem "simplecov", "~> 0.20"
36
36
  <% end %>
37
37
  end
@@ -41,19 +41,19 @@ source "https://rubygems.org"
41
41
  end
42
42
 
43
43
  group :test do
44
- <% if realm.build_guard %>
44
+ <% if configuration.build_guard %>
45
45
  gem "guard-rspec", "~> 4.7", require: false
46
46
  <% end %>
47
- <% if realm.build_rspec %>
47
+ <% if configuration.build_rspec %>
48
48
  gem "rspec", "~> 3.10"
49
49
  <% end %>
50
50
  end
51
51
 
52
52
  group :tools do
53
- <% if realm.build_amazing_print %>
53
+ <% if configuration.build_amazing_print %>
54
54
  gem "amazing_print", "~> 1.2"
55
55
  <% end %>
56
- <% if realm.build_pry %>
56
+ <% if configuration.build_pry %>
57
57
  gem "pry", "~> 0.13"
58
58
  gem "pry-byebug", "~> 3.9"
59
59
  <% end %>
@@ -150,7 +150,7 @@ additional liability.
150
150
 
151
151
  END OF TERMS AND CONDITIONS
152
152
 
153
- Copyright <%= realm.now.strftime "%Y" %> link:<%= realm.author_url %>[<%= realm.author_name %>].
153
+ Copyright <%= configuration.now.strftime "%Y" %> link:<%= configuration.author_url %>[<%= configuration.author_name %>].
154
154
 
155
155
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
156
156
  compliance with the License. You may obtain a link:https://www.apache.org/licenses/LICENSE-2.0[copy]
@@ -150,7 +150,7 @@ additional liability.
150
150
 
151
151
  END OF TERMS AND CONDITIONS
152
152
 
153
- Copyright <%= realm.now.strftime "%Y" %> [<%= realm.author_name %>](<%= realm.author_url %>).
153
+ Copyright <%= configuration.now.strftime "%Y" %> [<%= configuration.author_name %>](<%= configuration.author_url %>).
154
154
 
155
155
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
156
156
  compliance with the License. You may obtain a [copy](https://www.apache.org/licenses/LICENSE-2.0) of
@@ -1,4 +1,4 @@
1
- Copyright <%= realm.now.strftime "%Y" %> link:<%= realm.author_url %>[<%= realm.author_name %>].
1
+ Copyright <%= configuration.now.strftime "%Y" %> link:<%= configuration.author_url %>[<%= configuration.author_name %>].
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- Copyright <%= realm.now.strftime "%Y" %> [<%= realm.author_name %>](<%= realm.author_url %>).
1
+ Copyright <%= configuration.now.strftime "%Y" %> [<%= configuration.author_name %>](<%= configuration.author_url %>).
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -2,9 +2,9 @@
2
2
  :toclevels: 5
3
3
  :figure-caption!:
4
4
 
5
- = <%= realm.project_label %>
5
+ = <%= configuration.project_label %>
6
6
 
7
- <% if realm.build_rubocop %>
7
+ <% if configuration.build_rubocop %>
8
8
  [link=https://www.alchemists.io/projects/code_quality]
9
9
  image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchemists Style Guide]
10
10
  <% end %>
@@ -20,7 +20,7 @@ toc::[]
20
20
  . link:https://www.ruby-lang.org[Ruby].
21
21
 
22
22
  == Setup
23
- <% if realm.build_setup %>
23
+ <% if configuration.build_setup %>
24
24
 
25
25
  To set up the project, run:
26
26
 
@@ -33,7 +33,7 @@ bin/setup
33
33
  == Usage
34
34
 
35
35
  == Development
36
- <% if realm.build_console %>
36
+ <% if configuration.build_console %>
37
37
 
38
38
  You can also use the IRB console for direct access to all objects:
39
39
 
@@ -80,4 +80,4 @@ Built with link:https://www.alchemists.io/projects/rubysmith[Rubysmith].
80
80
 
81
81
  == Credits
82
82
 
83
- Engineered by link:<%= realm.author_url %>[<%= realm.author_name %>].
83
+ Engineered by link:<%= configuration.author_url %>[<%= configuration.author_name %>].
@@ -1,6 +1,6 @@
1
- # <%= realm.project_label %>
1
+ # <%= configuration.project_label %>
2
2
 
3
- <% if realm.build_rubocop %>
3
+ <% if configuration.build_rubocop %>
4
4
  [![Alchemists Style Guide](https://img.shields.io/badge/code_style-alchemists-brightgreen.svg)](https://www.alchemists.io/projects/code_quality)
5
5
  <% end %>
6
6
 
@@ -16,7 +16,7 @@
16
16
  1. [Ruby](https://www.ruby-lang.org)
17
17
 
18
18
  ## Setup
19
- <% if realm.build_setup %>
19
+ <% if configuration.build_setup %>
20
20
 
21
21
  To set up the project, run:
22
22
 
@@ -26,7 +26,7 @@ To set up the project, run:
26
26
  ## Usage
27
27
 
28
28
  ## Development
29
- <% if realm.build_console %>
29
+ <% if configuration.build_console %>
30
30
 
31
31
  You can also use the IRB console for direct access to all objects:
32
32
 
@@ -67,4 +67,4 @@ Built with [Rubysmith](https://www.alchemists.io/projects/rubysmith).
67
67
 
68
68
  ## Credits
69
69
 
70
- Engineered by [<%= realm.author_name %>](<%= realm.author_url %>).
70
+ Engineered by [<%= configuration.author_name %>](<%= configuration.author_url %>).