gemsmith 17.0.1 → 18.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +58 -28
- data/gemsmith.gemspec +5 -4
- data/lib/gemsmith/builders/circle_ci.rb +4 -1
- data/lib/gemsmith/builders/cli.rb +15 -7
- data/lib/gemsmith/builders/git/commit.rb +6 -5
- data/lib/gemsmith/cli/actions/config.rb +6 -7
- data/lib/gemsmith/cli/actions/container.rb +25 -0
- data/lib/gemsmith/cli/actions/edit.rb +5 -7
- data/lib/gemsmith/cli/actions/import.rb +11 -0
- data/lib/gemsmith/cli/actions/install.rb +5 -5
- data/lib/gemsmith/cli/actions/publish.rb +5 -5
- data/lib/gemsmith/cli/actions/view.rb +5 -7
- data/lib/gemsmith/cli/parser.rb +9 -5
- data/lib/gemsmith/cli/parsers/build.rb +7 -5
- data/lib/gemsmith/cli/parsers/core.rb +6 -5
- data/lib/gemsmith/cli/shell.rb +21 -40
- data/lib/gemsmith/container.rb +1 -1
- data/lib/gemsmith/import.rb +7 -0
- data/lib/gemsmith/templates/%project_name%/%project_name%.gemspec.erb +3 -0
- data/lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/actions/config.rb.erb +6 -9
- data/lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/actions/container.rb.erb +18 -0
- data/lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/actions/import.rb.erb +9 -0
- data/lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parser.rb.erb +9 -5
- data/lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb +6 -5
- data/lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/shell.rb.erb +6 -15
- data/lib/gemsmith/templates/%project_name%/lib/%project_path%/container.rb.erb +3 -25
- data/lib/gemsmith/templates/%project_name%/lib/%project_path%/import.rb.erb +5 -0
- data/lib/gemsmith/templates/%project_name%/spec/lib/%project_path%/cli/actions/config_spec.rb.erb +3 -3
- data/lib/gemsmith/templates/%project_name%/spec/lib/%project_path%/cli/parser_spec.rb.erb +1 -1
- data/lib/gemsmith/templates/%project_name%/spec/lib/%project_path%/cli/parsers/core_spec.rb.erb +1 -1
- data/lib/gemsmith/templates/%project_name%/spec/lib/%project_path%/cli/shell_spec.rb.erb +16 -13
- data/lib/gemsmith/templates/%project_name%/spec/support/shared_contexts/application_dependencies.rb.erb +21 -0
- data/lib/gemsmith/tools/editor.rb +2 -9
- data/lib/gemsmith/tools/installer.rb +5 -5
- data/lib/gemsmith/tools/pusher.rb +23 -5
- data/lib/gemsmith/tools/validator.rb +1 -10
- data/lib/gemsmith/tools/versioner.rb +6 -6
- data/lib/gemsmith/tools/viewer.rb +1 -10
- data.tar.gz.sig +0 -0
- metadata +48 -28
- metadata.gz.sig +0 -0
- data/lib/gemsmith/templates/%project_name%/spec/support/shared_contexts/application_container.rb.erb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7078991f9fcbcb707c47a3bbc7fb390725c3048c26de414728624f01a5a42a9e
|
4
|
+
data.tar.gz: aefb802ad6d7e39a454c553b40921c596c5000adee42e14f5e195eafcda95e0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66f5dbee7fd91d463f89b8e95819eac28af1ee9af66bc1314d32103cd085a238c6dd8c8e7011e02ef588781f9397e3db3aacfb35b03a545f3e1fc67ea2591a6a
|
7
|
+
data.tar.gz: fd91bff49d27af059de47ace1aafacc50b0a4e7938e1b8627f5cb6b856498a64fab0bb4bcf4cbec47a339bf54f09d52e1d18788bc47bdaf849f615c5f83a6f0c
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -14,8 +14,7 @@ toc::[]
|
|
14
14
|
|
15
15
|
== Features
|
16
16
|
|
17
|
-
* Supports all
|
18
|
-
which is used for smithing Ruby projects.
|
17
|
+
* Supports all link:https://www.alchemists.io/projects/rubysmith[Rubysmith] features.
|
19
18
|
* Supports basic gem skeletons or more advanced Command Line Interface (CLI) skeletons.
|
20
19
|
* Supports gem building, installing for local development, and publishing.
|
21
20
|
* Supports the editing and viewing of installed gems.
|
@@ -37,13 +36,12 @@ gem install gemsmith
|
|
37
36
|
|
38
37
|
== Upgrade
|
39
38
|
|
40
|
-
If upgrading from
|
39
|
+
If upgrading from 17.0.0 to 18.0.0, you'll want to be aware of the following changes:
|
41
40
|
|
42
|
-
*
|
43
|
-
* The
|
44
|
-
|
45
|
-
|
46
|
-
link:https://www.alchemists.io/projects/caliber[Caliber] gem now.
|
41
|
+
* The `--dead_end` build option has been removed.
|
42
|
+
* The Milestoner configuraition has been updated to support ASCII Doc format by default and the
|
43
|
+
ability to sign tags has been removed (this happens dynamically based on your Git configuration
|
44
|
+
which gives you more flexibility).
|
47
45
|
|
48
46
|
== Usage
|
49
47
|
|
@@ -72,7 +70,6 @@ BUILD OPTIONS:
|
|
72
70
|
--[no-]conduct Add code of conduct documentation. Default: true.
|
73
71
|
--[no-]console Add console script. Default: true.
|
74
72
|
--[no-]contributions Add contributions documentation. Default: true.
|
75
|
-
--[no-]dead_end Add Dead End gem. Default: true.
|
76
73
|
--[no-]debug Add Debug gem. Default: true.
|
77
74
|
--[no-]git Add Git. Default: true.
|
78
75
|
--[no-]git_hub Add GitHub templates. Default: false.
|
@@ -102,7 +99,7 @@ build options allow you to further customize the kind of gem you want to build.
|
|
102
99
|
are enabled by default. For detailed documentation on all supported flags, see the
|
103
100
|
link:https://www.alchemists.io/projects/rubysmith/#_build[Rubysmith] documentation.
|
104
101
|
|
105
|
-
The build option
|
102
|
+
The build option which is unique to Gemsmith is the `--cli` option. This allows you to build a gem
|
106
103
|
which has a Command Line Interface (CLI). There are multiple ways a CLI can be built in Ruby but
|
107
104
|
Gemsmith takes an approach which builds upon Ruby's native `OptionParser` with help from
|
108
105
|
link:https://dry-rb.org/gems/dry-container[Dry Container]. All of this culminates in a design that
|
@@ -301,7 +298,8 @@ link:https://guides.rubygems.org/security[Security].
|
|
301
298
|
|
302
299
|
== Private Gem Servers
|
303
300
|
|
304
|
-
By default, the following
|
301
|
+
By default, the following command will publicly publish your gem to
|
302
|
+
link:https://rubygems.org[RubyGems]:
|
305
303
|
|
306
304
|
[source,bash]
|
307
305
|
----
|
@@ -319,20 +317,19 @@ Add the following metadata to your gemspec:
|
|
319
317
|
[source,ruby]
|
320
318
|
----
|
321
319
|
Gem::Specification.new do |spec|
|
322
|
-
spec.metadata = {
|
323
|
-
"allowed_push_key" => "example_key",
|
324
|
-
"allowed_push_host" => "https://gems.example.com"
|
325
|
-
}
|
320
|
+
spec.metadata = {"allowed_push_host" => "https://private.example.com"}
|
326
321
|
end
|
327
322
|
----
|
328
323
|
|
329
|
-
The gemspec metadata
|
330
|
-
link:https://guides.rubygems.org/specification-reference/#metadata[RubyGems Specification].
|
331
|
-
represents the following:
|
324
|
+
💡 The gemspec metadata _must_ be strings per the
|
325
|
+
link:https://guides.rubygems.org/specification-reference/#metadata[RubyGems Specification].
|
332
326
|
|
333
|
-
|
334
|
-
|
335
|
-
*
|
327
|
+
Use of the `allowed_push_host` key provides two important capabilities:
|
328
|
+
|
329
|
+
* Prevents you from accidentally publishing your private gem to the public RubyGems server (default
|
330
|
+
behavior).
|
331
|
+
* Defines the lookup key in your `$HOME/.gem/credentials` file which contains your private
|
332
|
+
credentials for authentication to your private server (more on this below).
|
336
333
|
|
337
334
|
=== Gem Credentials
|
338
335
|
|
@@ -340,18 +337,52 @@ With your gem specification metadata established, you are ready to publish your
|
|
340
337
|
private server. If this is your first time publishing a gem and no gem credentials have been
|
341
338
|
configured, you'll be prompted for them. Gem credentials are stored in the RubyGems
|
342
339
|
`$HOME/.gem/credentials` file. From this point forward, future gem publishing will use your stored
|
343
|
-
credentials instead.
|
344
|
-
|
340
|
+
credentials instead.
|
341
|
+
|
342
|
+
Multiple credentials can be stored in the `$HOME/.gem/credentials` file as well. Example:
|
345
343
|
|
346
344
|
[source,yaml]
|
347
345
|
----
|
348
346
|
:rubygems_api_key: 2a0b460650e67d9b85a60e183defa376
|
349
|
-
:
|
347
|
+
https://private.example.com: Basic dXNlcjpwYXNzd29yZA==
|
348
|
+
----
|
349
|
+
|
350
|
+
Notice how the first line contains credentials for the public RubyGems server while the second line
|
351
|
+
is for our private example server. You'll also notice that the key is not a symbol but a URL string
|
352
|
+
to our private server. This is important as this is how we link our gem specification metadata to
|
353
|
+
our private credentials. To illustrate further, here are both files truncated and shown together:
|
354
|
+
|
355
|
+
....
|
356
|
+
# Gem specificaiton metadata which defines the private host to publish to.
|
357
|
+
spec.metadata = {"allowed_push_host" => "https://private.example.com"}
|
358
|
+
|
359
|
+
# Gem credentials where the URL value above becomes the key which enables authentication.
|
360
|
+
https://private.example.com: Basic dXNlcjpwYXNzd29yZA==
|
361
|
+
....
|
362
|
+
|
363
|
+
When the above are linked together like this, you enable Gemsmith to publish your gem using only the
|
364
|
+
following command:
|
365
|
+
|
366
|
+
[source,bash]
|
350
367
|
----
|
368
|
+
gemsmith --publish
|
369
|
+
----
|
370
|
+
|
371
|
+
This is especially powerful when publishing to
|
372
|
+
link:https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry[GitHub's
|
373
|
+
Packages registory] which would look like this when properly configured (truncated for brevity):
|
374
|
+
|
375
|
+
....
|
376
|
+
# Gem specification
|
377
|
+
spec.metadata = {"allowed_push_host" => "https://rubygems.pkg.github.com/alchemists"}
|
378
|
+
|
379
|
+
# Gem credentials
|
380
|
+
https://rubygems.pkg.github.com/alchemists: Bearer ghp_c5b8d394abefebbf45c7b27b379c74978923
|
381
|
+
....
|
351
382
|
|
352
|
-
|
353
|
-
`$HOME/.gem/credentials` in your default editor and remove the line(s) you don't need. Upon
|
354
|
-
publish of your gem, you'll be prompted for the missing credentials.
|
383
|
+
Lastly, should you need to delete a credential (due to a bad login/password for example), you can
|
384
|
+
open the `$HOME/.gem/credentials` in your default editor and remove the line(s) you don't need. Upon
|
385
|
+
next publish of your gem, you'll be prompted for the missing credentials.
|
355
386
|
|
356
387
|
== Promotion
|
357
388
|
|
@@ -359,7 +390,6 @@ Once your gem is released, let the world know about your accomplishment by posti
|
|
359
390
|
these sites:
|
360
391
|
|
361
392
|
* link:https://rubyflow.com[RubyFlow]
|
362
|
-
* link:https://rubyradar.dev[Ruby Radar]
|
363
393
|
* link:https://ruby.libhunt.com[Ruby Library Hunt]
|
364
394
|
* link:https://rubydaily.org[RubyDaily]
|
365
395
|
* link:https://awesome-ruby.com[Awesome Ruby]
|
data/gemsmith.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "gemsmith"
|
5
|
-
spec.version = "
|
5
|
+
spec.version = "18.0.0"
|
6
6
|
spec.authors = ["Brooke Kuhlmann"]
|
7
7
|
spec.email = ["brooke@alchemists.io"]
|
8
8
|
spec.homepage = "https://www.alchemists.io/projects/gemsmith"
|
@@ -22,12 +22,13 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.cert_chain = [Gem.default_cert_path]
|
23
23
|
|
24
24
|
spec.required_ruby_version = "~> 3.1"
|
25
|
+
spec.add_dependency "auto_injector", "~> 0.4"
|
26
|
+
spec.add_dependency "cogger", "~> 0.0"
|
25
27
|
spec.add_dependency "dry-container", "~> 0.9"
|
26
28
|
spec.add_dependency "dry-monads", "~> 1.4"
|
27
|
-
spec.add_dependency "milestoner", "~>
|
28
|
-
spec.add_dependency "pastel", "~> 0.8"
|
29
|
+
spec.add_dependency "milestoner", "~> 14.0"
|
29
30
|
spec.add_dependency "refinements", "~> 9.2"
|
30
|
-
spec.add_dependency "rubysmith", "~>
|
31
|
+
spec.add_dependency "rubysmith", "~> 3.0"
|
31
32
|
spec.add_dependency "runcom", "~> 8.2"
|
32
33
|
spec.add_dependency "spek", "~> 0.2"
|
33
34
|
spec.add_dependency "versionaire", "~> 10.0"
|
@@ -19,7 +19,8 @@ module Gemsmith
|
|
19
19
|
return configuration unless configuration.build_circle_ci
|
20
20
|
|
21
21
|
builder.call(configuration.merge(template_path: "%project_name%/.circleci/config.yml.erb"))
|
22
|
-
.replace("Gemfile.lock"
|
22
|
+
.replace %({{checksum "Gemfile.lock"}}),
|
23
|
+
%({{checksum "Gemfile"}}-{{checksum "#{project_name}.gemspec"}})
|
23
24
|
|
24
25
|
configuration
|
25
26
|
end
|
@@ -27,6 +28,8 @@ module Gemsmith
|
|
27
28
|
private
|
28
29
|
|
29
30
|
attr_reader :configuration, :builder
|
31
|
+
|
32
|
+
def project_name = configuration.project_name
|
30
33
|
end
|
31
34
|
end
|
32
35
|
end
|
@@ -47,16 +47,24 @@ module Gemsmith
|
|
47
47
|
CONTENT
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
50
|
+
def render_configuration
|
51
51
|
[
|
52
|
-
"%project_name%/lib/%project_path%/cli/actions/config.rb.erb",
|
53
|
-
"%project_name%/lib/%project_path%/cli/parser.rb.erb",
|
54
|
-
"%project_name%/lib/%project_path%/cli/parsers/core.rb.erb",
|
55
|
-
"%project_name%/lib/%project_path%/cli/shell.rb.erb",
|
56
52
|
"%project_name%/lib/%project_path%/configuration/content.rb.erb",
|
57
53
|
"%project_name%/lib/%project_path%/configuration/defaults.yml.erb",
|
58
54
|
"%project_name%/lib/%project_path%/configuration/loader.rb.erb",
|
59
|
-
"%project_name%/lib/%project_path%/container.rb.erb"
|
55
|
+
"%project_name%/lib/%project_path%/container.rb.erb",
|
56
|
+
"%project_name%/lib/%project_path%/import.rb.erb"
|
57
|
+
].each { |path| builder.call(configuration.merge(template_path: path)).render }
|
58
|
+
end
|
59
|
+
|
60
|
+
def render_cli
|
61
|
+
[
|
62
|
+
"%project_name%/lib/%project_path%/cli/actions/config.rb.erb",
|
63
|
+
"%project_name%/lib/%project_path%/cli/actions/container.rb.erb",
|
64
|
+
"%project_name%/lib/%project_path%/cli/actions/import.rb.erb",
|
65
|
+
"%project_name%/lib/%project_path%/cli/parser.rb.erb",
|
66
|
+
"%project_name%/lib/%project_path%/cli/parsers/core.rb.erb",
|
67
|
+
"%project_name%/lib/%project_path%/cli/shell.rb.erb"
|
60
68
|
].each { |path| builder.call(configuration.merge(template_path: path)).render }
|
61
69
|
end
|
62
70
|
|
@@ -77,7 +85,7 @@ module Gemsmith
|
|
77
85
|
return unless configuration.build_rspec
|
78
86
|
|
79
87
|
[
|
80
|
-
"%project_name%/spec/support/shared_contexts/
|
88
|
+
"%project_name%/spec/support/shared_contexts/application_dependencies.rb.erb",
|
81
89
|
"%project_name%/spec/support/shared_examples/a_parser.rb.erb"
|
82
90
|
].each { |path| builder.call(configuration.merge(template_path: path)).render }
|
83
91
|
end
|
@@ -5,12 +5,15 @@ module Gemsmith
|
|
5
5
|
module Git
|
6
6
|
# Builds project skeleton initial Git commit message.
|
7
7
|
class Commit
|
8
|
+
include Import[:specification]
|
9
|
+
|
8
10
|
def self.call(...) = new(...).call
|
9
11
|
|
10
|
-
def initialize configuration, builder: Rubysmith::Builder,
|
12
|
+
def initialize configuration, builder: Rubysmith::Builder, **dependencies
|
13
|
+
super(**dependencies)
|
14
|
+
|
11
15
|
@configuration = configuration
|
12
16
|
@builder = builder
|
13
|
-
@container = container
|
14
17
|
end
|
15
18
|
|
16
19
|
def call
|
@@ -28,7 +31,7 @@ module Gemsmith
|
|
28
31
|
|
29
32
|
private
|
30
33
|
|
31
|
-
attr_reader :configuration, :builder
|
34
|
+
attr_reader :configuration, :builder
|
32
35
|
|
33
36
|
def body
|
34
37
|
<<~CONTENT
|
@@ -38,8 +41,6 @@ module Gemsmith
|
|
38
41
|
end
|
39
42
|
|
40
43
|
def project_name = configuration.project_name
|
41
|
-
|
42
|
-
def specification = container[__method__]
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end
|
@@ -5,9 +5,12 @@ module Gemsmith
|
|
5
5
|
module Actions
|
6
6
|
# Handles the config action.
|
7
7
|
class Config
|
8
|
-
|
8
|
+
include Gemsmith::Import[:kernel, :logger]
|
9
|
+
|
10
|
+
def initialize client: Configuration::Loader::CLIENT, **dependencies
|
11
|
+
super(**dependencies)
|
12
|
+
|
9
13
|
@client = client
|
10
|
-
@container = container
|
11
14
|
end
|
12
15
|
|
13
16
|
def call selection
|
@@ -20,15 +23,11 @@ module Gemsmith
|
|
20
23
|
|
21
24
|
private
|
22
25
|
|
23
|
-
attr_reader :client
|
26
|
+
attr_reader :client
|
24
27
|
|
25
28
|
def edit = kernel.system("$EDITOR #{client.current}")
|
26
29
|
|
27
30
|
def view = kernel.system("cat #{client.current}")
|
28
|
-
|
29
|
-
def kernel = container[__method__]
|
30
|
-
|
31
|
-
def logger = container[__method__]
|
32
31
|
end
|
33
32
|
end
|
34
33
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "dry/container"
|
4
|
+
|
5
|
+
module Gemsmith
|
6
|
+
module CLI
|
7
|
+
module Actions
|
8
|
+
# Provides a single container with application and action specific dependencies.
|
9
|
+
module Container
|
10
|
+
extend Dry::Container::Mixin
|
11
|
+
|
12
|
+
config.registry = ->(container, key, value, _options) { container[key.to_s] = value }
|
13
|
+
|
14
|
+
merge Gemsmith::Container
|
15
|
+
|
16
|
+
register(:config) { Config.new }
|
17
|
+
register(:build) { Build.new }
|
18
|
+
register(:install) { Install.new }
|
19
|
+
register(:publish) { Publish.new }
|
20
|
+
register(:edit) { Edit.new }
|
21
|
+
register(:view) { View.new }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -8,12 +8,14 @@ module Gemsmith
|
|
8
8
|
module Actions
|
9
9
|
# Handles the edit action for editing an installed gem.
|
10
10
|
class Edit
|
11
|
+
include Gemsmith::Import[:kernel, :logger]
|
11
12
|
include Dry::Monads[:result]
|
12
13
|
|
13
|
-
def initialize picker: Spek::Picker, editor: Tools::Editor.new,
|
14
|
+
def initialize picker: Spek::Picker, editor: Tools::Editor.new, **dependencies
|
15
|
+
super(**dependencies)
|
16
|
+
|
14
17
|
@picker = picker
|
15
18
|
@editor = editor
|
16
|
-
@container = container
|
17
19
|
end
|
18
20
|
|
19
21
|
def call gem_name
|
@@ -26,13 +28,9 @@ module Gemsmith
|
|
26
28
|
|
27
29
|
private
|
28
30
|
|
29
|
-
attr_reader :picker, :editor
|
31
|
+
attr_reader :picker, :editor
|
30
32
|
|
31
33
|
def error(&) = logger.error(&)
|
32
|
-
|
33
|
-
def kernel = container[__method__]
|
34
|
-
|
35
|
-
def logger = container[__method__]
|
36
34
|
end
|
37
35
|
end
|
38
36
|
end
|
@@ -8,12 +8,14 @@ module Gemsmith
|
|
8
8
|
module Actions
|
9
9
|
# Handles the install action.
|
10
10
|
class Install
|
11
|
+
include Gemsmith::Import[:logger]
|
11
12
|
include Dry::Monads[:result]
|
12
13
|
|
13
|
-
def initialize installer: Tools::Installer.new, loader: Spek::Loader,
|
14
|
+
def initialize installer: Tools::Installer.new, loader: Spek::Loader, **dependencies
|
15
|
+
super(**dependencies)
|
16
|
+
|
14
17
|
@installer = installer
|
15
18
|
@loader = loader
|
16
|
-
@container = container
|
17
19
|
end
|
18
20
|
|
19
21
|
def call configuration
|
@@ -26,11 +28,9 @@ module Gemsmith
|
|
26
28
|
|
27
29
|
private
|
28
30
|
|
29
|
-
attr_reader :installer, :loader
|
31
|
+
attr_reader :installer, :loader
|
30
32
|
|
31
33
|
def error(&) = logger.error(&)
|
32
|
-
|
33
|
-
def logger = container[__method__]
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -8,12 +8,14 @@ module Gemsmith
|
|
8
8
|
module Actions
|
9
9
|
# Handles the publish action.
|
10
10
|
class Publish
|
11
|
+
include Gemsmith::Import[:logger]
|
11
12
|
include Dry::Monads[:result]
|
12
13
|
|
13
|
-
def initialize publisher: Tools::Publisher.new, loader: Spek::Loader,
|
14
|
+
def initialize publisher: Tools::Publisher.new, loader: Spek::Loader, **dependencies
|
15
|
+
super(**dependencies)
|
16
|
+
|
14
17
|
@publisher = publisher
|
15
18
|
@loader = loader
|
16
|
-
@container = container
|
17
19
|
end
|
18
20
|
|
19
21
|
def call configuration
|
@@ -26,11 +28,9 @@ module Gemsmith
|
|
26
28
|
|
27
29
|
private
|
28
30
|
|
29
|
-
attr_reader :publisher, :loader
|
31
|
+
attr_reader :publisher, :loader
|
30
32
|
|
31
33
|
def error(&) = logger.error(&)
|
32
|
-
|
33
|
-
def logger = container[__method__]
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -8,12 +8,14 @@ module Gemsmith
|
|
8
8
|
module Actions
|
9
9
|
# Handles the view action for viewing an installed gem in default browser.
|
10
10
|
class View
|
11
|
+
include Gemsmith::Import[:kernel, :logger]
|
11
12
|
include Dry::Monads[:result]
|
12
13
|
|
13
|
-
def initialize picker: Spek::Picker, viewer: Tools::Viewer.new,
|
14
|
+
def initialize picker: Spek::Picker, viewer: Tools::Viewer.new, **dependencies
|
15
|
+
super(**dependencies)
|
16
|
+
|
14
17
|
@picker = picker
|
15
18
|
@viewer = viewer
|
16
|
-
@container = container
|
17
19
|
end
|
18
20
|
|
19
21
|
def call gem_name
|
@@ -26,13 +28,9 @@ module Gemsmith
|
|
26
28
|
|
27
29
|
private
|
28
30
|
|
29
|
-
attr_reader :picker, :viewer
|
31
|
+
attr_reader :picker, :viewer
|
30
32
|
|
31
33
|
def error(&) = logger.error(&)
|
32
|
-
|
33
|
-
def kernel = container[__method__]
|
34
|
-
|
35
|
-
def logger = container[__method__]
|
36
34
|
end
|
37
35
|
end
|
38
36
|
end
|
data/lib/gemsmith/cli/parser.rb
CHANGED
@@ -6,28 +6,32 @@ module Gemsmith
|
|
6
6
|
module CLI
|
7
7
|
# Assembles and parses all Command Line Interface (CLI) options.
|
8
8
|
class Parser
|
9
|
+
include Import[:configuration]
|
10
|
+
|
9
11
|
CLIENT = OptionParser.new nil, 40, " "
|
10
12
|
|
11
13
|
# Order is important.
|
12
14
|
SECTIONS = [Parsers::Core, Rubysmith::CLI::Parsers::Build, Parsers::Build].freeze
|
13
15
|
|
14
|
-
def initialize sections: SECTIONS, client: CLIENT,
|
16
|
+
def initialize sections: SECTIONS, client: CLIENT, **dependencies
|
17
|
+
super(**dependencies)
|
18
|
+
|
15
19
|
@sections = sections
|
16
20
|
@client = client
|
17
|
-
@
|
21
|
+
@configuration_duplicate = configuration.dup
|
18
22
|
end
|
19
23
|
|
20
24
|
def call arguments = []
|
21
|
-
sections.each { |section| section.call
|
25
|
+
sections.each { |section| section.call configuration_duplicate, client: }
|
22
26
|
client.parse arguments
|
23
|
-
|
27
|
+
configuration_duplicate.freeze
|
24
28
|
end
|
25
29
|
|
26
30
|
def to_s = client.to_s
|
27
31
|
|
28
32
|
private
|
29
33
|
|
30
|
-
attr_reader :sections, :client, :
|
34
|
+
attr_reader :sections, :client, :configuration_duplicate
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
@@ -7,16 +7,20 @@ module Gemsmith
|
|
7
7
|
module Parsers
|
8
8
|
# Handles parsing of Command Line Interface (CLI) build options.
|
9
9
|
class Build
|
10
|
+
include Import[:colorizer]
|
11
|
+
|
10
12
|
using Refinements::Structs
|
11
13
|
|
12
14
|
def self.call(...) = new(...).call
|
13
15
|
|
14
16
|
def initialize configuration = Container[:configuration],
|
15
17
|
client: Parser::CLIENT,
|
16
|
-
|
18
|
+
**dependencies
|
19
|
+
|
20
|
+
super(**dependencies)
|
21
|
+
|
17
22
|
@configuration = configuration
|
18
23
|
@client = client
|
19
|
-
@container = container
|
20
24
|
end
|
21
25
|
|
22
26
|
def call arguments = []
|
@@ -27,7 +31,7 @@ module Gemsmith
|
|
27
31
|
|
28
32
|
private
|
29
33
|
|
30
|
-
attr_reader :configuration, :client
|
34
|
+
attr_reader :configuration, :client
|
31
35
|
|
32
36
|
def add_cli
|
33
37
|
client.on(
|
@@ -46,8 +50,6 @@ module Gemsmith
|
|
46
50
|
.then { |boolean| boolean ? colorizer.green(boolean) : colorizer.red(boolean) }
|
47
51
|
.then { |colored_boolean| "Default: #{colored_boolean}" }
|
48
52
|
end
|
49
|
-
|
50
|
-
def colorizer = container[__method__]
|
51
53
|
end
|
52
54
|
end
|
53
55
|
end
|
@@ -8,16 +8,19 @@ module Gemsmith
|
|
8
8
|
module Parsers
|
9
9
|
# Handles parsing of Command Line Interface (CLI) core options.
|
10
10
|
class Core
|
11
|
+
include Import[:specification]
|
12
|
+
|
11
13
|
using Refinements::Structs
|
12
14
|
|
13
15
|
def self.call(...) = new(...).call
|
14
16
|
|
15
17
|
def initialize configuration = Container[:configuration],
|
16
18
|
client: Parser::CLIENT,
|
17
|
-
|
19
|
+
**dependencies
|
20
|
+
super(**dependencies)
|
21
|
+
|
18
22
|
@configuration = configuration
|
19
23
|
@client = client
|
20
|
-
@container = container
|
21
24
|
end
|
22
25
|
|
23
26
|
def call arguments = []
|
@@ -30,7 +33,7 @@ module Gemsmith
|
|
30
33
|
|
31
34
|
private
|
32
35
|
|
33
|
-
attr_reader :configuration, :client
|
36
|
+
attr_reader :configuration, :client
|
34
37
|
|
35
38
|
def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
|
36
39
|
|
@@ -86,8 +89,6 @@ module Gemsmith
|
|
86
89
|
configuration.merge! action_help: true
|
87
90
|
end
|
88
91
|
end
|
89
|
-
|
90
|
-
def specification = container[__method__]
|
91
92
|
end
|
92
93
|
end
|
93
94
|
end
|