rubysmith 0.9.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.adoc +34 -20
  4. data/bin/rubysmith +0 -1
  5. data/lib/rubysmith/builder.rb +17 -35
  6. data/lib/rubysmith/builders/bundler.rb +7 -9
  7. data/lib/rubysmith/builders/console.rb +6 -8
  8. data/lib/rubysmith/builders/core.rb +11 -8
  9. data/lib/rubysmith/builders/documentation.rb +16 -21
  10. data/lib/rubysmith/builders/git/commit.rb +7 -11
  11. data/lib/rubysmith/builders/git/setup.rb +6 -8
  12. data/lib/rubysmith/builders/guard.rb +9 -9
  13. data/lib/rubysmith/builders/pragma.rb +8 -13
  14. data/lib/rubysmith/builders/rake.rb +7 -7
  15. data/lib/rubysmith/builders/reek.rb +6 -8
  16. data/lib/rubysmith/builders/rspec/context.rb +10 -11
  17. data/lib/rubysmith/builders/rspec/helper.rb +6 -8
  18. data/lib/rubysmith/builders/rubocop/formatter.rb +5 -7
  19. data/lib/rubysmith/builders/rubocop/setup.rb +7 -9
  20. data/lib/rubysmith/builders/setup.rb +8 -8
  21. data/lib/rubysmith/cli/actions/build.rb +42 -0
  22. data/lib/rubysmith/cli/actions/config.rb +33 -0
  23. data/lib/rubysmith/cli/configuration/content.rb +78 -0
  24. data/lib/rubysmith/cli/{defaults.yml → configuration/defaults.yml} +3 -3
  25. data/lib/rubysmith/cli/configuration/loader.rb +38 -0
  26. data/lib/rubysmith/cli/parsers/assembler.rb +11 -18
  27. data/lib/rubysmith/cli/parsers/build.rb +40 -41
  28. data/lib/rubysmith/cli/parsers/core.rb +15 -14
  29. data/lib/rubysmith/cli/parsers.rb +11 -0
  30. data/lib/rubysmith/cli/shell.rb +14 -35
  31. data/lib/rubysmith/container.rb +37 -0
  32. data/lib/rubysmith/identity.rb +2 -2
  33. data/lib/rubysmith/pathway.rb +3 -9
  34. data/lib/rubysmith/renderers/erb.rb +7 -9
  35. data/lib/rubysmith/renderers/namespace.rb +2 -4
  36. data/lib/rubysmith/templates/%project_name%/.rubocop.yml.erb +1 -1
  37. data/lib/rubysmith/templates/%project_name%/CHANGES.adoc.erb +1 -1
  38. data/lib/rubysmith/templates/%project_name%/CHANGES.md.erb +1 -1
  39. data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.adoc.erb +2 -2
  40. data/lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.md.erb +1 -1
  41. data/lib/rubysmith/templates/%project_name%/Gemfile.erb +46 -50
  42. data/lib/rubysmith/templates/%project_name%/LICENSE-apache.adoc.erb +1 -1
  43. data/lib/rubysmith/templates/%project_name%/LICENSE-apache.md.erb +1 -1
  44. data/lib/rubysmith/templates/%project_name%/LICENSE-mit.adoc.erb +1 -1
  45. data/lib/rubysmith/templates/%project_name%/LICENSE-mit.md.erb +1 -1
  46. data/lib/rubysmith/templates/%project_name%/README.adoc.erb +5 -5
  47. data/lib/rubysmith/templates/%project_name%/README.md.erb +5 -5
  48. data/lib/rubysmith/templates/%project_name%/Rakefile.erb +11 -23
  49. data/lib/rubysmith/templates/%project_name%/bin/console.erb +1 -1
  50. data/lib/rubysmith/templates/%project_name%/lib/%project_path%.rb.erb +12 -0
  51. data/lib/rubysmith/templates/%project_name%/spec/spec_helper.rb.erb +6 -4
  52. data/lib/rubysmith/templates/%project_name%/spec/support/shared_contexts/temp_dir.rb.erb +3 -3
  53. data/lib/rubysmith.rb +10 -30
  54. data.tar.gz.sig +0 -0
  55. metadata +55 -13
  56. metadata.gz.sig +0 -0
  57. data/lib/rubysmith/builders/ruby_critic.rb +0 -27
  58. data/lib/rubysmith/cli/configuration.rb +0 -30
  59. data/lib/rubysmith/cli/processors/build.rb +0 -58
  60. data/lib/rubysmith/cli/processors/config.rb +0 -35
  61. data/lib/rubysmith/realm.rb +0 -74
  62. data/lib/rubysmith/templates/%project_name%/.rubycritic.yml.erb +0 -3
  63. data/lib/rubysmith/templates/%project_name%/lib/%project_name%.rb.erb +0 -3
@@ -9,22 +9,22 @@
9
9
  :license: "mit"
10
10
  :build:
11
11
  :amazing_print: true
12
- :bundler_audit: true
13
12
  :bundler_leak: true
14
13
  :console: true
14
+ :debug: true
15
15
  :documentation: true
16
16
  :git: true
17
17
  :git_lint: true
18
18
  :guard: true
19
19
  :minimum: false
20
- :pry: true
20
+ :rake: true
21
21
  :reek: true
22
22
  :refinements: true
23
23
  :rspec: true
24
24
  :rubocop: true
25
- :ruby_critic: true
26
25
  :setup: true
27
26
  :simple_cov: true
27
+ :zeitwerk: true
28
28
  :builders:
29
29
  :pragmater:
30
30
  :comments:
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "refinements/hashes"
5
+ require "refinements/structs"
6
+ require "runcom"
7
+ require "yaml"
8
+
9
+ module Rubysmith
10
+ module CLI
11
+ module Configuration
12
+ # Represents the fully assembled Command Line Interface (CLI) configuration.
13
+ class Loader
14
+ using Refinements::Hashes
15
+ using Refinements::Structs
16
+
17
+ DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
18
+ CLIENT = Runcom::Config.new "#{Identity::NAME}/configuration.yml", defaults: DEFAULTS
19
+
20
+ def self.call(...) = new(...).call
21
+
22
+ def self.with_defaults(now: Time.now) = new(now: now, client: DEFAULTS)
23
+
24
+ def initialize now: Time.now, content: Content.new, client: CLIENT
25
+ @now = now
26
+ @content = content
27
+ @client = client
28
+ end
29
+
30
+ def call = content.merge(**client.to_h.flatten_keys, now: now)
31
+
32
+ private
33
+
34
+ attr_reader :now, :content, :client
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,38 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "runcom"
4
-
5
3
  module Rubysmith
6
4
  module CLI
7
5
  module Parsers
8
- CLIENT = OptionParser.new nil, 40, " "
9
- SECTIONS = [Core, Build].freeze # Order is important.
10
-
11
6
  # Assembles and parses all Command Line Interface (CLI) options.
12
7
  class Assembler
13
- def initialize client = CLIENT, sections: SECTIONS, configuration: CLI::Configuration.new
14
- @client = client
8
+ SECTIONS = [Core, Build].freeze # Order is important.
9
+
10
+ def initialize sections: SECTIONS, client: CLIENT, container: Container
15
11
  @sections = sections
16
- @options = configuration.to_h
12
+ @client = client
13
+ @container = container
17
14
  end
18
15
 
19
16
  def call arguments = []
20
- sections.each { |parser| parser.call client: client, options: options }
17
+ sections.each { |parser| parser.call client: client }
21
18
  client.parse! arguments
22
- options
19
+ configuration
23
20
  end
24
21
 
25
- def to_h
26
- options
27
- end
28
-
29
- def to_s
30
- client.to_s
31
- end
22
+ def to_s = client.to_s
32
23
 
33
24
  private
34
25
 
35
- attr_reader :client, :sections, :options
26
+ attr_reader :sections, :client, :container
27
+
28
+ def configuration = container[__method__]
36
29
  end
37
30
  end
38
31
  end
@@ -4,15 +4,12 @@ module Rubysmith
4
4
  module CLI
5
5
  module Parsers
6
6
  # Handles parsing of Command Line Interface (CLI) build options.
7
- # :reek:TooManyMethods
8
7
  class Build
9
- def self.call client:, options:
10
- new(client: client, options: options).call
11
- end
8
+ def self.call(...) = new(...).call
12
9
 
13
- def initialize client: CLIENT, options: {}
10
+ def initialize client: CLIENT, container: Container
14
11
  @client = client
15
- @options = options
12
+ @container = container
16
13
  end
17
14
 
18
15
  def call arguments = []
@@ -23,109 +20,111 @@ module Rubysmith
23
20
 
24
21
  private
25
22
 
26
- attr_reader :client, :options
27
-
28
- def add_minimum
29
- client.on "--min", "Use minimum/no options." do |value|
30
- options[:build_minimum] = value
31
- end
32
- end
23
+ attr_reader :client, :container
33
24
 
34
25
  def add_amazing_print
35
26
  client.on "--[no-]amazing_print", "Add Amazing Print." do |value|
36
- options[:build_amazing_print] = value
37
- end
38
- end
39
-
40
- def add_bundler_audit
41
- client.on "--[no-]bundler-audit", "Add Bundler Audit." do |value|
42
- options[:build_bundler_audit] = value
27
+ configuration.build_amazing_print = value
43
28
  end
44
29
  end
45
30
 
46
31
  def add_bundler_leak
47
32
  client.on "--[no-]bundler-leak", "Add Bundler Leak." do |value|
48
- options[:build_bundler_leak] = value
33
+ configuration.build_bundler_leak = value
49
34
  end
50
35
  end
51
36
 
52
37
  def add_console
53
38
  client.on "--[no-]console", "Add console script." do |value|
54
- options[:build_console] = value
39
+ configuration.build_console = value
40
+ end
41
+ end
42
+
43
+ def add_debug
44
+ client.on "--[no-]debug", "Add Debug." do |value|
45
+ configuration.build_debug = value
55
46
  end
56
47
  end
57
48
 
58
49
  def add_documentation
59
50
  client.on "--[no-]documentation", "Add documentation." do |value|
60
- options[:build_documentation] = value
51
+ configuration.build_documentation = value
61
52
  end
62
53
  end
63
54
 
64
55
  def add_git
65
56
  client.on "--[no-]git", "Add Git." do |value|
66
- options[:build_git] = value
57
+ configuration.build_git = value
67
58
  end
68
59
  end
69
60
 
70
61
  def add_git_lint
71
62
  client.on "--[no-]git-lint", "Add Git Lint." do |value|
72
- options[:build_git_lint] = value
63
+ configuration.build_git_lint = value
73
64
  end
74
65
  end
75
66
 
76
67
  def add_guard
77
68
  client.on "--[no-]guard", "Add Guard." do |value|
78
- options[:build_guard] = value
69
+ configuration.build_guard = value
79
70
  end
80
71
  end
81
72
 
82
- def add_pry
83
- client.on "--[no-]pry", "Add Pry." do |value|
84
- options[:build_pry] = value
73
+ def add_minimum
74
+ client.on "--min", "Use minimum/no options." do |value|
75
+ configuration.minimize.build_minimum = value
76
+ end
77
+ end
78
+
79
+ def add_rake
80
+ client.on "--[no-]rake", "Add Rake." do |value|
81
+ configuration.build_rake = value
85
82
  end
86
83
  end
87
84
 
88
85
  def add_reek
89
86
  client.on "--[no-]reek", "Add Reek." do |value|
90
- options[:build_reek] = value
87
+ configuration.build_reek = value
91
88
  end
92
89
  end
93
90
 
94
91
  def add_refinements
95
92
  client.on "--[no-]refinements", "Add Refinements." do |value|
96
- options[:build_refinements] = value
93
+ configuration.build_refinements = value
97
94
  end
98
95
  end
99
96
 
100
97
  def add_rspec
101
98
  client.on "--[no-]rspec", "Add RSpec." do |value|
102
- options[:build_rspec] = value
99
+ configuration.build_rspec = value
103
100
  end
104
101
  end
105
102
 
106
103
  def add_rubocop
107
104
  client.on "--[no-]rubocop", "Add Rubocop." do |value|
108
- options[:build_rubocop] = value
109
- end
110
- end
111
-
112
- def add_ruby_critic
113
- client.on "--[no-]ruby_critic", "Add RubyCritic." do |value|
114
- options[:build_ruby_critic] = value
105
+ configuration.build_rubocop = value
115
106
  end
116
107
  end
117
108
 
118
109
  def add_setup
119
110
  client.on "--[no-]setup", "Add setup script." do |value|
120
- options[:build_setup] = value
111
+ configuration.build_setup = value
121
112
  end
122
113
  end
123
114
 
124
115
  def add_simple_cov
125
116
  client.on "--[no-]simple_cov", "Add SimpleCov." do |value|
126
- options[:build_simple_cov] = value
117
+ configuration.build_simple_cov = value
118
+ end
119
+ end
120
+
121
+ def add_zeitwerk
122
+ client.on "--[no-]zeitwerk", "Add Zeitwerk." do |value|
123
+ configuration.build_zeitwerk = value
127
124
  end
128
125
  end
126
+
127
+ def configuration = container[__method__]
129
128
  end
130
129
  end
131
130
  end
@@ -1,19 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rubysmith/identity"
4
+ require "refinements/structs"
4
5
 
5
6
  module Rubysmith
6
7
  module CLI
7
8
  module Parsers
8
9
  # Handles parsing of Command Line Interface (CLI) core options.
9
10
  class Core
10
- def self.call client:, options:
11
- new(client: client, options: options).call
12
- end
11
+ using Refinements::Structs
12
+
13
+ def self.call(...) = new(...).call
13
14
 
14
- def initialize client: CLIENT, options: {}
15
+ def initialize client: CLIENT, container: Container
15
16
  @client = client
16
- @options = options
17
+ @container = container
17
18
  end
18
19
 
19
20
  def call arguments = []
@@ -25,38 +26,38 @@ module Rubysmith
25
26
 
26
27
  private
27
28
 
28
- attr_reader :client, :options
29
+ attr_reader :client, :container
29
30
 
30
- def collate
31
- private_methods.sort.grep(/add_/).each { |method| __send__ method }
32
- end
31
+ def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
33
32
 
34
33
  def add_config
35
34
  client.on "-c",
36
35
  "--config ACTION",
37
36
  %i[edit view],
38
37
  "Manage gem configuration: edit or view." do |action|
39
- options[:config] = action
38
+ configuration.action_config = action
40
39
  end
41
40
  end
42
41
 
43
42
  def add_build
44
- client.on "-b", "--build NAME [options]", "Build new project." do |value|
45
- options[:build] = value
43
+ client.on "-b", "--build NAME [options]", "Build new project." do |name|
44
+ configuration.merge! action_build: true, project_name: name
46
45
  end
47
46
  end
48
47
 
49
48
  def add_version
50
49
  client.on "-v", "--version", "Show gem version." do
51
- options[:version] = Identity::VERSION_LABEL
50
+ configuration.action_version = Identity::VERSION_LABEL
52
51
  end
53
52
  end
54
53
 
55
54
  def add_help
56
55
  client.on "-h", "--help", "Show this message." do
57
- options[:help] = true
56
+ configuration.action_help = true
58
57
  end
59
58
  end
59
+
60
+ def configuration = container[__method__]
60
61
  end
61
62
  end
62
63
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "optparse"
4
+
5
+ module Rubysmith
6
+ module CLI
7
+ module Parsers
8
+ CLIENT = OptionParser.new nil, 40, " "
9
+ end
10
+ end
11
+ end
@@ -1,41 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "optparse"
4
- require "refinements/hashes"
5
-
6
3
  module Rubysmith
7
4
  module CLI
8
- # Represents the Command Line Interface (CLI) for this gem.
5
+ # The main Command Line Interface (CLI) object.
9
6
  class Shell
10
- using Refinements::Hashes
11
-
12
- PROCESSORS = {
13
- config: Processors::Config.new,
14
- build_minimum: Processors::Build.with_minimum,
15
- build_maximum: Processors::Build.new
16
- }.freeze
7
+ ACTIONS = {config: Actions::Config.new, build: Actions::Build.new}.freeze
17
8
 
18
- def initialize parser: Parsers::Assembler.new, processors: PROCESSORS
9
+ def initialize parser: Parsers::Assembler.new, actions: ACTIONS, container: Container
19
10
  @parser = parser
20
- @processors = processors
11
+ @actions = actions
12
+ @container = container
21
13
  end
22
14
 
23
15
  def call arguments = []
24
- parse arguments
25
-
26
- case options
27
- in config: action then process_config action
28
- in build_minimum: true then process_build :build_minimum, options
29
- in build: then process_build :build_maximum, options
30
- in version: then puts version
31
- in help: then usage
16
+ case parse arguments
17
+ in action_config: Symbol => action then config action
18
+ in action_build: true then build
19
+ in action_version: String => version then puts version
32
20
  else usage
33
21
  end
34
22
  end
35
23
 
36
24
  private
37
25
 
38
- attr_reader :parser, :processors, :exceptions
26
+ attr_reader :parser, :actions, :container
39
27
 
40
28
  def parse arguments = []
41
29
  parser.call arguments
@@ -43,22 +31,13 @@ module Rubysmith
43
31
  puts error.message
44
32
  end
45
33
 
46
- def process_config action
47
- processors.fetch(:config).call action
48
- end
34
+ def config(action) = actions.fetch(__method__).call(action)
49
35
 
50
- def process_build kind, settings
51
- processors.fetch(kind).call settings.transform_keys(build: :project_name)
52
- .merge(now: Time.now)
53
- end
36
+ def build = actions.fetch(__method__).call
54
37
 
55
- def options
56
- parser.to_h
57
- end
38
+ def usage = logger.unknown(parser.to_s)
58
39
 
59
- def usage
60
- puts parser.to_s
61
- end
40
+ def logger = container[__method__]
62
41
  end
63
42
  end
64
43
  end