rubysmith 0.9.1 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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