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
@@ -0,0 +1,12 @@
1
+ <% if configuration.build_zeitwerk %>
2
+ require "zeitwerk"
3
+ <% if configuration.project_path.include? "/" %>
4
+ Zeitwerk::Loader.new
5
+ .tap { |loader| loader.push_dir "#{__dir__}/.." }
6
+ .setup
7
+ <% else %>
8
+ Zeitwerk::Loader.for_gem.setup
9
+ <% end %>
10
+ <% end %>
11
+ # Main namespace.
12
+ <% namespace %>
@@ -1,18 +1,20 @@
1
1
  require "bundler/setup"
2
2
  Bundler.require :tools
3
3
 
4
- <% if realm.build_simple_cov %>
4
+ <% if configuration.build_simple_cov %>
5
5
  require "simplecov"
6
6
  SimpleCov.start { enable_coverage :branch }
7
7
  <% end %>
8
8
 
9
- require "<%= realm.project_name %>"
10
- <% if realm.build_refinements %>require "refinements"<% end %>
9
+ require "<%= configuration.project_path %>"
10
+ <% if configuration.build_refinements %>
11
+ require "refinements"
12
+ <% end %>
11
13
 
12
14
  GC.auto_compact = true
13
15
  GC.verify_compaction_references double_heap: true, toward: :empty
14
16
 
15
- <% if realm.build_refinements %>
17
+ <% if configuration.build_refinements %>
16
18
  using Refinements::Pathnames
17
19
 
18
20
  Pathname.require_tree __dir__, "support/shared_contexts/**/*.rb"
@@ -1,11 +1,11 @@
1
1
  RSpec.shared_context "with temporary directory" do
2
- <% if realm.build_refinements %>using Refinements::Pathnames<% end %>
2
+ <% if configuration.build_refinements %>using Refinements::Pathnames<% end %>
3
3
 
4
4
  let(:temp_dir) { Bundler.root.join "tmp/rspec" }
5
5
 
6
6
  around do |example|
7
- <%= realm.build_refinements ? "temp_dir.make_path" : "FileUtils.mkdir_p temp_dir" %>
7
+ <%= configuration.build_refinements ? "temp_dir.make_path" : "FileUtils.mkdir_p temp_dir" %>
8
8
  example.run
9
- <%= realm.build_refinements ? "temp_dir.remove_tree" : "FileUtils.rm_rf temp_dir" %>
9
+ <%= configuration.build_refinements ? "temp_dir.remove_tree" : "FileUtils.rm_rf temp_dir" %>
10
10
  end
11
11
  end
data/lib/rubysmith.rb CHANGED
@@ -1,32 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubysmith/identity"
4
- require "rubysmith/pathway"
5
- require "rubysmith/realm"
6
- require "rubysmith/renderers/namespace"
7
- require "rubysmith/renderers/erb"
8
- require "rubysmith/text/inserter"
9
- require "rubysmith/builder"
10
- require "rubysmith/builders/core"
11
- require "rubysmith/builders/documentation"
12
- require "rubysmith/builders/git/setup"
13
- require "rubysmith/builders/git/commit"
14
- require "rubysmith/builders/bundler"
15
- require "rubysmith/builders/rake"
16
- require "rubysmith/builders/console"
17
- require "rubysmith/builders/setup"
18
- require "rubysmith/builders/guard"
19
- require "rubysmith/builders/reek"
20
- require "rubysmith/builders/rspec/context"
21
- require "rubysmith/builders/rspec/helper"
22
- require "rubysmith/builders/pragma"
23
- require "rubysmith/builders/rubocop/setup"
24
- require "rubysmith/builders/rubocop/formatter"
25
- require "rubysmith/builders/ruby_critic"
26
- require "rubysmith/cli/parsers/core"
27
- require "rubysmith/cli/parsers/build"
28
- require "rubysmith/cli/parsers/assembler"
29
- require "rubysmith/cli/processors/config"
30
- require "rubysmith/cli/processors/build"
31
- require "rubysmith/cli/configuration"
32
- require "rubysmith/cli/shell"
3
+ require "zeitwerk"
4
+
5
+ Zeitwerk::Loader.for_gem.then do |loader|
6
+ loader.inflector.inflect "cli" => "CLI", "erb" => "ERB", "rspec" => "RSpec"
7
+ loader.setup
8
+ end
9
+
10
+ # Main namespace.
11
+ module Rubysmith
12
+ end
data.tar.gz.sig CHANGED
Binary file
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.9.1
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -28,8 +28,36 @@ cert_chain:
28
28
  lkHilIrX69jq8wMPpBhlaw2mRmeSL50Wv5u6xVBvOHhXFSP1crXM95vfLhLyRYod
29
29
  W2A=
30
30
  -----END CERTIFICATE-----
31
- date: 2021-04-04 00:00:00.000000000 Z
31
+ date: 2021-09-16 00:00:00.000000000 Z
32
32
  dependencies:
33
+ - !ruby/object:Gem::Dependency
34
+ name: dry-container
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.9'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.9'
47
+ - !ruby/object:Gem::Dependency
48
+ name: pastel
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.8'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.8'
33
61
  - !ruby/object:Gem::Dependency
34
62
  name: pragmater
35
63
  requirement: !ruby/object:Gem::Requirement
@@ -64,14 +92,14 @@ dependencies:
64
92
  requirements:
65
93
  - - "~>"
66
94
  - !ruby/object:Gem::Version
67
- version: '1.10'
95
+ version: '1.20'
68
96
  type: :runtime
69
97
  prerelease: false
70
98
  version_requirements: !ruby/object:Gem::Requirement
71
99
  requirements:
72
100
  - - "~>"
73
101
  - !ruby/object:Gem::Version
74
- version: '1.10'
102
+ version: '1.20'
75
103
  - !ruby/object:Gem::Dependency
76
104
  name: runcom
77
105
  requirement: !ruby/object:Gem::Requirement
@@ -86,6 +114,20 @@ dependencies:
86
114
  - - "~>"
87
115
  - !ruby/object:Gem::Version
88
116
  version: '7.0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: zeitwerk
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '2.4'
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '2.4'
89
131
  description:
90
132
  email:
91
133
  - brooke@alchemists.io
@@ -115,25 +157,25 @@ files:
115
157
  - lib/rubysmith/builders/rspec/helper.rb
116
158
  - lib/rubysmith/builders/rubocop/formatter.rb
117
159
  - lib/rubysmith/builders/rubocop/setup.rb
118
- - lib/rubysmith/builders/ruby_critic.rb
119
160
  - lib/rubysmith/builders/setup.rb
120
- - lib/rubysmith/cli/configuration.rb
121
- - lib/rubysmith/cli/defaults.yml
161
+ - lib/rubysmith/cli/actions/build.rb
162
+ - lib/rubysmith/cli/actions/config.rb
163
+ - lib/rubysmith/cli/configuration/content.rb
164
+ - lib/rubysmith/cli/configuration/defaults.yml
165
+ - lib/rubysmith/cli/configuration/loader.rb
166
+ - lib/rubysmith/cli/parsers.rb
122
167
  - lib/rubysmith/cli/parsers/assembler.rb
123
168
  - lib/rubysmith/cli/parsers/build.rb
124
169
  - lib/rubysmith/cli/parsers/core.rb
125
- - lib/rubysmith/cli/processors/build.rb
126
- - lib/rubysmith/cli/processors/config.rb
127
170
  - lib/rubysmith/cli/shell.rb
171
+ - lib/rubysmith/container.rb
128
172
  - lib/rubysmith/identity.rb
129
173
  - lib/rubysmith/pathway.rb
130
- - lib/rubysmith/realm.rb
131
174
  - lib/rubysmith/renderers/erb.rb
132
175
  - lib/rubysmith/renderers/namespace.rb
133
176
  - lib/rubysmith/templates/%project_name%/.reek.yml.erb
134
177
  - lib/rubysmith/templates/%project_name%/.rubocop.yml.erb
135
178
  - lib/rubysmith/templates/%project_name%/.ruby-version.erb
136
- - lib/rubysmith/templates/%project_name%/.rubycritic.yml.erb
137
179
  - lib/rubysmith/templates/%project_name%/CHANGES.adoc.erb
138
180
  - lib/rubysmith/templates/%project_name%/CHANGES.md.erb
139
181
  - lib/rubysmith/templates/%project_name%/CODE_OF_CONDUCT.adoc.erb
@@ -153,7 +195,7 @@ files:
153
195
  - lib/rubysmith/templates/%project_name%/bin/guard.erb
154
196
  - lib/rubysmith/templates/%project_name%/bin/rubocop.erb
155
197
  - lib/rubysmith/templates/%project_name%/bin/setup.erb
156
- - lib/rubysmith/templates/%project_name%/lib/%project_name%.rb.erb
198
+ - lib/rubysmith/templates/%project_name%/lib/%project_path%.rb.erb
157
199
  - lib/rubysmith/templates/%project_name%/spec/spec_helper.rb.erb
158
200
  - lib/rubysmith/templates/%project_name%/spec/support/shared_contexts/temp_dir.rb.erb
159
201
  - lib/rubysmith/text/inserter.rb
@@ -180,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
222
  - !ruby/object:Gem::Version
181
223
  version: '0'
182
224
  requirements: []
183
- rubygems_version: 3.2.15
225
+ rubygems_version: 3.2.27
184
226
  signing_key:
185
227
  specification_version: 4
186
228
  summary: A command line interface for smithing Ruby projects.
metadata.gz.sig CHANGED
Binary file
@@ -1,27 +0,0 @@
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,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "pathname"
4
- require "refinements/hashes"
5
- require "runcom"
6
- require "yaml"
7
-
8
- module Rubysmith
9
- module CLI
10
- # Represents the fully assembled Command Line Interface (CLI) configuration.
11
- class Configuration
12
- using Refinements::Hashes
13
-
14
- DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
15
- CLIENT = Runcom::Config.new "#{Identity::NAME}/configuration.yml", defaults: DEFAULTS
16
-
17
- def initialize client: CLIENT
18
- @client = client
19
- end
20
-
21
- def to_h
22
- client.to_h.flatten_keys
23
- end
24
-
25
- private
26
-
27
- attr_reader :client
28
- end
29
- end
30
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rubysmith
4
- module CLI
5
- module Processors
6
- # Handles the Command Line Interface (CLI) for building of a project skeleton.
7
- class Build
8
- # Order is important.
9
- MINIMUM = [
10
- Builders::Core,
11
- Builders::Bundler,
12
- Builders::Pragma,
13
- Builders::Rubocop::Formatter
14
- ].freeze
15
-
16
- # Order is important.
17
- MAXIMUM = [
18
- Builders::Core,
19
- Builders::Documentation,
20
- Builders::Git::Setup,
21
- Builders::Bundler,
22
- Builders::Rake,
23
- Builders::Console,
24
- Builders::Setup,
25
- Builders::Guard,
26
- Builders::Reek,
27
- Builders::RSpec::Context,
28
- Builders::RSpec::Helper,
29
- Builders::Pragma,
30
- Builders::Rubocop::Setup,
31
- Builders::Rubocop::Formatter,
32
- Builders::RubyCritic,
33
- Builders::Git::Commit
34
- ].freeze
35
-
36
- def self.with_minimum
37
- new builders: MINIMUM
38
- end
39
-
40
- def initialize builders: MAXIMUM
41
- @builders = builders
42
- end
43
-
44
- def call options
45
- Realm[**options].then { |realm| process realm }
46
- end
47
-
48
- private
49
-
50
- attr_reader :builders
51
-
52
- def process realm
53
- builders.each { |builder| builder.call realm }
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rubysmith
4
- module CLI
5
- module Processors
6
- # Handles the Command Line Interface (CLI) configuration processing.
7
- class Config
8
- def initialize configuration: CLI::Configuration::CLIENT, kernel: Kernel
9
- @configuration = configuration
10
- @kernel = kernel
11
- end
12
-
13
- def call action
14
- case action
15
- when :edit then edit
16
- when :view then view
17
- else fail StandardError, "Invalid configuration action: #{action}."
18
- end
19
- end
20
-
21
- private
22
-
23
- attr_reader :configuration, :kernel
24
-
25
- def edit
26
- kernel.system "$EDITOR #{configuration.current}"
27
- end
28
-
29
- def view
30
- kernel.system "cat #{configuration.current}"
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "pathname"
4
- require "refinements/strings"
5
-
6
- module Rubysmith
7
- REALM_KEYS = %i[
8
- config
9
- template_root
10
- template_path
11
- build_root
12
- project_name
13
- author_name
14
- author_email
15
- author_url
16
- now
17
- documentation_format
18
- documentation_license
19
- build_minimum
20
- build_amazing_print
21
- build_bundler_audit
22
- build_bundler_leak
23
- build_console
24
- build_documentation
25
- build_git
26
- build_git_lint
27
- build_guard
28
- build_pry
29
- build_reek
30
- build_refinements
31
- build_rspec
32
- build_rubocop
33
- build_ruby_critic
34
- build_setup
35
- build_simple_cov
36
- builders_pragmater_comments
37
- builders_pragmater_includes
38
- version
39
- help
40
- ].freeze
41
-
42
- # Represents the common context in which all builders and templates operate in.
43
- Realm = Struct.new(*REALM_KEYS, keyword_init: true) do
44
- using Refinements::Strings
45
-
46
- def initialize *arguments
47
- super
48
-
49
- self[:template_root] ||= Pathname(__dir__).join("templates").expand_path
50
- self[:build_root] ||= Pathname.pwd
51
- freeze
52
- end
53
-
54
- def with attributes
55
- self.class.new to_h.merge(attributes)
56
- end
57
-
58
- def project_label
59
- project_name.titleize
60
- end
61
-
62
- def project_class
63
- project_name.camelcase
64
- end
65
-
66
- def project_root
67
- build_root.join project_name
68
- end
69
-
70
- def to_pathway
71
- Pathway[start_root: template_root, start_path: template_path, end_root: build_root]
72
- end
73
- end
74
- end