rubysmith 4.1.0 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 800b586dd843e166d9fc97e0034b4929111ee1f9dc0cb9e02ce294d512cfb227
4
- data.tar.gz: 984327cfa351cd57aa103cbfc94e09a060afe4611d49504e61263cc5a6ff776a
3
+ metadata.gz: 20400688d18009b8693a50e2aaf540091135655cf7b44a447ad2299f2fccea46
4
+ data.tar.gz: 0f7d4d8121b57dce5dbd25f17bd76366269d74856ff8cdcd1000908d6d8d9a08
5
5
  SHA512:
6
- metadata.gz: e6012f65fb94be8bd2a515d3647c51b905bb591a3d4f5e692e53e502bc9ac573cf753de33d041639d21e10f2668258d3cfb9cb4c620365a04098dc6f7da1bbff
7
- data.tar.gz: e226baccb45c568d104bd4775672573509bdd6d5d03f478b61b4c125bbc056ed21803949771a542fd975687782f3bed90a06bfc1f694b333e569f4963d0b8c35
6
+ metadata.gz: cacd542dcdb79197f4db085021d4756f38e71017d88dd2aa1db55e43e1e60f80818d1da2f19841de58e5e0d8b903ce9343c3fce4dc1d70fcad2c97ece9abf323
7
+ data.tar.gz: d2aed19508d58fbe8def647ae99e9e6d9a3ad504b08de531439c6a8a8ec7a10924ab9256b12755800e4416271e53b3a517813f8c034c02e8ad6ecd67f591ca1f
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core"
3
4
  require "refinements/strings"
4
5
  require "refinements/structs"
5
6
 
@@ -31,7 +32,7 @@ module Rubysmith
31
32
 
32
33
  private
33
34
 
34
- def indentation = "".indent configuration.project_levels
35
+ def indentation = ::Core::EMPTY_STRING.indent configuration.project_levels
35
36
 
36
37
  def module_name = configuration.project_class
37
38
 
@@ -34,10 +34,8 @@ module Rubysmith
34
34
  attr_reader :configuration, :builder
35
35
 
36
36
  def body
37
- <<~CONTENT
38
- Generated with [#{specification.label}](#{specification.homepage_url})
39
- #{specification.version}.
40
- CONTENT
37
+ "Generated with [#{specification.label}](#{specification.homepage_url}) " \
38
+ "#{specification.version}."
41
39
  end
42
40
 
43
41
  def project_name = configuration.project_name
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core"
3
4
  require "optparse"
4
5
 
5
6
  module Rubysmith
@@ -18,7 +19,7 @@ module Rubysmith
18
19
  @configuration_duplicate = configuration.dup
19
20
  end
20
21
 
21
- def call arguments = []
22
+ def call arguments = Core::EMPTY_ARRAY
22
23
  sections.each { |section| section.call configuration_duplicate, client: }
23
24
  client.parse arguments
24
25
  configuration_duplicate.freeze
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core"
3
4
  require "refinements/structs"
4
5
 
5
6
  module Rubysmith
@@ -21,7 +22,7 @@ module Rubysmith
21
22
  @client = client
22
23
  end
23
24
 
24
- def call arguments = []
25
+ def call arguments = ::Core::EMPTY_ARRAY
25
26
  client.separator "\nBUILD OPTIONS:\n"
26
27
  collate
27
28
  client.parse arguments
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core"
3
4
  require "refinements/structs"
4
5
 
5
6
  module Rubysmith
@@ -21,7 +22,7 @@ module Rubysmith
21
22
  @client = client
22
23
  end
23
24
 
24
- def call arguments = []
25
+ def call arguments = ::Core::EMPTY_ARRAY
25
26
  client.banner = specification.labeled_summary
26
27
  client.separator "\nUSAGE:\n"
27
28
  collate
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core"
3
4
  require "milestoner"
4
5
 
5
6
  module Rubysmith
@@ -13,7 +14,7 @@ module Rubysmith
13
14
  @parser = parser
14
15
  end
15
16
 
16
- def call arguments = []
17
+ def call arguments = Core::EMPTY_ARRAY
17
18
  perform parser.call(arguments)
18
19
  rescue OptionParser::ParseError, Milestoner::Error => error
19
20
  logger.error { error.message }
@@ -82,25 +82,21 @@ module Rubysmith
82
82
  :project_version,
83
83
  :target_root,
84
84
  :template_path,
85
- :template_roots,
86
- keyword_init: true
85
+ :template_roots
87
86
  ) do
88
87
  using Refinements::Arrays
89
88
  using Refinements::Strings
90
89
  using Refinements::Structs
91
90
 
92
- def initialize *arguments
91
+ def initialize target_root: Pathname.pwd, template_roots: [], **arguments
93
92
  super
94
-
95
- self[:template_roots] ||= [Pathname(__dir__).join("../templates")]
96
- self[:target_root] ||= Pathname.pwd
97
93
  freeze
98
94
  end
99
95
 
100
- def add_template_roots paths
101
- Array(paths).map { |path| Pathname path }
102
- .including(template_roots)
103
- .then { |roots| dup.merge! template_roots: roots }
96
+ def add_template_roots *paths
97
+ paths.map { |path| Pathname path }
98
+ .including(template_roots)
99
+ .then { |roots| dup.merge! template_roots: roots }
104
100
  end
105
101
 
106
102
  def maximize = update_build_options(true)
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/container"
4
+
5
+ module Rubysmith
6
+ module Configuration
7
+ module Enhancers
8
+ # Provides a container of enhancers for injection into other objects.
9
+ module Container
10
+ extend Dry::Container::Mixin
11
+
12
+ register(:current_time) { Enhancers::CurrentTime }
13
+ register(:git_hub_user) { Enhancers::GitHubUser }
14
+ register(:git_email) { Enhancers::GitEmail }
15
+ register(:git_user) { Enhancers::GitUser }
16
+ register(:template_root) { Enhancers::TemplateRoot }
17
+ end
18
+ end
19
+ end
20
+ end
@@ -4,21 +4,11 @@ require "refinements/structs"
4
4
 
5
5
  module Rubysmith
6
6
  module Configuration
7
+ # Adds current time to content.
7
8
  module Enhancers
8
- # Adds current time to content.
9
- class CurrentTime
10
- using Refinements::Structs
9
+ using Refinements::Structs
11
10
 
12
- def initialize now = Time.now
13
- @now = now
14
- end
15
-
16
- def call(content) = content.merge(now:)
17
-
18
- private
19
-
20
- attr_reader :now
21
- end
11
+ CurrentTime = -> content, at: Time.now { content.merge(now: at) }
22
12
  end
23
13
  end
24
14
  end
@@ -6,25 +6,15 @@ require "refinements/structs"
6
6
 
7
7
  module Rubysmith
8
8
  module Configuration
9
+ # Dynamically adds Git email if defined.
9
10
  module Enhancers
10
- # Dynamically adds Git email if defined.
11
- class GitEmail
12
- using Refinements::Strings
13
- using Refinements::Structs
11
+ using Refinements::Strings
12
+ using Refinements::Structs
14
13
 
15
- def initialize git: Gitt::Repository.new
16
- @git = git
17
- end
14
+ GitEmail = lambda do |content, git: Gitt::Repository.new|
15
+ return content unless String(content.author_email).blank?
18
16
 
19
- def call content
20
- String(content.author_email).blank? ? content.merge(author_email: email) : content
21
- end
22
-
23
- private
24
-
25
- attr_reader :git
26
-
27
- def email = git.get("user.email").value_or("")
17
+ content.merge author_email: git.get("user.email").value_or("")
28
18
  end
29
19
  end
30
20
  end
@@ -6,25 +6,15 @@ require "refinements/structs"
6
6
 
7
7
  module Rubysmith
8
8
  module Configuration
9
+ # Dynamically adds GitHub user if user is defined.
9
10
  module Enhancers
10
- # Dynamically adds GitHub user if user is defined.
11
- class GitHubUser
12
- using Refinements::Strings
13
- using Refinements::Structs
11
+ using Refinements::Strings
12
+ using Refinements::Structs
14
13
 
15
- def initialize git: Gitt::Repository.new
16
- @git = git
17
- end
14
+ GitHubUser = lambda do |content, git: Gitt::Repository.new|
15
+ return content unless String(content.git_hub_user).blank?
18
16
 
19
- def call content
20
- String(content.git_hub_user).blank? ? content.merge(git_hub_user: user) : content
21
- end
22
-
23
- private
24
-
25
- attr_reader :git
26
-
27
- def user = git.get "github.user"
17
+ content.merge git_hub_user: git.get("github.user").value_or("default")
28
18
  end
29
19
  end
30
20
  end
@@ -6,28 +6,19 @@ require "refinements/structs"
6
6
 
7
7
  module Rubysmith
8
8
  module Configuration
9
+ # Dynamically adds Git user if defined.
9
10
  module Enhancers
10
- # Dynamically adds Git user if defined.
11
- class GitUser
12
- using Refinements::Strings
13
- using Refinements::Structs
11
+ using Refinements::Strings
12
+ using Refinements::Structs
14
13
 
15
- def initialize git: Gitt::Repository.new
16
- @git = git
17
- end
14
+ GitUser = lambda do |content, git: Gitt::Repository.new|
15
+ return content unless String(content.author_name).blank?
18
16
 
19
- def call(content) = String(content.author_name).blank? ? content.merge(**user) : content
20
-
21
- private
22
-
23
- attr_reader :git
24
-
25
- def user
26
- git.get("user.name")
27
- .value_or("")
28
- .then { |name| String(name).split }
29
- .then { |first, last| {author_given_name: first, author_family_name: last} }
30
- end
17
+ git.get("user.name")
18
+ .value_or("")
19
+ .then { |name| String(name).split }
20
+ .then { |first, last| {author_given_name: first, author_family_name: last} }
21
+ .then { |user| content.merge(**user) }
31
22
  end
32
23
  end
33
24
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubysmith
4
+ module Configuration
5
+ module Enhancers
6
+ # Prepends template roots to existing content.
7
+ TemplateRoot = lambda do |content, overrides: Pathname(__dir__).join("../../templates")|
8
+ content.add_template_roots(*Array(overrides))
9
+ end
10
+ end
11
+ end
12
+ end
@@ -16,32 +16,28 @@ module Rubysmith
16
16
  DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
17
17
  CLIENT = Runcom::Config.new "rubysmith/configuration.yml", defaults: DEFAULTS
18
18
 
19
- ENHANCERS = [
20
- Enhancers::CurrentTime.new,
21
- Enhancers::GitEmail.new,
22
- Enhancers::GitHubUser.new,
23
- Enhancers::GitUser.new
24
- ].freeze
25
-
26
19
  def self.call(...) = new(...).call
27
20
 
28
- def self.with_defaults = new(client: DEFAULTS, enhancers: [])
21
+ def self.with_defaults = new(client: DEFAULTS, enhancers: {})
29
22
 
30
- def initialize content: Content.new, client: CLIENT, enhancers: ENHANCERS
23
+ def initialize content: Content.new, client: CLIENT, enhancers: Enhancers::Container
31
24
  @content = content
32
25
  @client = client
33
26
  @enhancers = enhancers
34
27
  end
35
28
 
36
29
  def call
37
- enhancers.reduce(preload_content) { |preload, enhancer| enhancer.call preload }
30
+ enhancers.each
31
+ .reduce(preload_content) { |preload, (_key, enhancer)| enhancer.call preload }
38
32
  .freeze
39
33
  end
40
34
 
41
- private
35
+ protected
42
36
 
43
37
  attr_reader :content, :client, :enhancers
44
38
 
39
+ private
40
+
45
41
  def preload_content = content.merge(**client.to_h.flatten_keys)
46
42
  end
47
43
  end
data/rubysmith.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "rubysmith"
5
- spec.version = "4.1.0"
5
+ spec.version = "4.3.0"
6
6
  spec.authors = ["Brooke Kuhlmann"]
7
7
  spec.email = ["brooke@alchemists.io"]
8
8
  spec.homepage = "https://github.com/bkuhlmann/rubysmith"
@@ -24,17 +24,18 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.required_ruby_version = "~> 3.2"
26
26
  spec.add_dependency "cogger", "~> 0.5"
27
+ spec.add_dependency "core", "~> 0.1"
27
28
  spec.add_dependency "dry-container", "~> 0.11"
28
- spec.add_dependency "gitt", "~> 1.0"
29
+ spec.add_dependency "gitt", "~> 1.1"
29
30
  spec.add_dependency "infusible", "~> 1.0"
30
- spec.add_dependency "milestoner", "~> 15.0"
31
+ spec.add_dependency "milestoner", "~> 15.2"
31
32
  spec.add_dependency "pastel", "~> 0.8"
32
- spec.add_dependency "pragmater", "~> 12.0"
33
+ spec.add_dependency "pragmater", "~> 12.1"
33
34
  spec.add_dependency "refinements", "~> 10.0"
34
35
  spec.add_dependency "rubocop", "~> 1.41"
35
36
  spec.add_dependency "runcom", "~> 9.0"
36
37
  spec.add_dependency "spek", "~> 1.0"
37
- spec.add_dependency "tocer", "~> 15.0"
38
+ spec.add_dependency "tocer", "~> 15.1"
38
39
  spec.add_dependency "zeitwerk", "~> 2.6"
39
40
 
40
41
  spec.bindir = "exe"
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: 4.1.0
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -28,7 +28,7 @@ cert_chain:
28
28
  CxDe2+VuChj4I1nvIHdu+E6XoEVlanUPKmSg6nddhkKn2gC45Kyzh6FZqnzH/CRp
29
29
  RFE=
30
30
  -----END CERTIFICATE-----
31
- date: 2022-12-28 00:00:00.000000000 Z
31
+ date: 2023-01-08 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: cogger
@@ -44,6 +44,20 @@ dependencies:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0.5'
47
+ - !ruby/object:Gem::Dependency
48
+ name: core
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.1'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.1'
47
61
  - !ruby/object:Gem::Dependency
48
62
  name: dry-container
49
63
  requirement: !ruby/object:Gem::Requirement
@@ -64,14 +78,14 @@ dependencies:
64
78
  requirements:
65
79
  - - "~>"
66
80
  - !ruby/object:Gem::Version
67
- version: '1.0'
81
+ version: '1.1'
68
82
  type: :runtime
69
83
  prerelease: false
70
84
  version_requirements: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
- version: '1.0'
88
+ version: '1.1'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: infusible
77
91
  requirement: !ruby/object:Gem::Requirement
@@ -92,14 +106,14 @@ dependencies:
92
106
  requirements:
93
107
  - - "~>"
94
108
  - !ruby/object:Gem::Version
95
- version: '15.0'
109
+ version: '15.2'
96
110
  type: :runtime
97
111
  prerelease: false
98
112
  version_requirements: !ruby/object:Gem::Requirement
99
113
  requirements:
100
114
  - - "~>"
101
115
  - !ruby/object:Gem::Version
102
- version: '15.0'
116
+ version: '15.2'
103
117
  - !ruby/object:Gem::Dependency
104
118
  name: pastel
105
119
  requirement: !ruby/object:Gem::Requirement
@@ -120,14 +134,14 @@ dependencies:
120
134
  requirements:
121
135
  - - "~>"
122
136
  - !ruby/object:Gem::Version
123
- version: '12.0'
137
+ version: '12.1'
124
138
  type: :runtime
125
139
  prerelease: false
126
140
  version_requirements: !ruby/object:Gem::Requirement
127
141
  requirements:
128
142
  - - "~>"
129
143
  - !ruby/object:Gem::Version
130
- version: '12.0'
144
+ version: '12.1'
131
145
  - !ruby/object:Gem::Dependency
132
146
  name: refinements
133
147
  requirement: !ruby/object:Gem::Requirement
@@ -190,14 +204,14 @@ dependencies:
190
204
  requirements:
191
205
  - - "~>"
192
206
  - !ruby/object:Gem::Version
193
- version: '15.0'
207
+ version: '15.1'
194
208
  type: :runtime
195
209
  prerelease: false
196
210
  version_requirements: !ruby/object:Gem::Requirement
197
211
  requirements:
198
212
  - - "~>"
199
213
  - !ruby/object:Gem::Version
200
- version: '15.0'
214
+ version: '15.1'
201
215
  - !ruby/object:Gem::Dependency
202
216
  name: zeitwerk
203
217
  requirement: !ruby/object:Gem::Requirement
@@ -260,10 +274,12 @@ files:
260
274
  - lib/rubysmith/cli/shell.rb
261
275
  - lib/rubysmith/configuration/content.rb
262
276
  - lib/rubysmith/configuration/defaults.yml
277
+ - lib/rubysmith/configuration/enhancers/container.rb
263
278
  - lib/rubysmith/configuration/enhancers/current_time.rb
264
279
  - lib/rubysmith/configuration/enhancers/git_email.rb
265
280
  - lib/rubysmith/configuration/enhancers/git_hub_user.rb
266
281
  - lib/rubysmith/configuration/enhancers/git_user.rb
282
+ - lib/rubysmith/configuration/enhancers/template_root.rb
267
283
  - lib/rubysmith/configuration/loader.rb
268
284
  - lib/rubysmith/container.rb
269
285
  - lib/rubysmith/extensions/bundler.rb
@@ -334,7 +350,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
350
  - !ruby/object:Gem::Version
335
351
  version: '0'
336
352
  requirements: []
337
- rubygems_version: 3.4.1
353
+ rubygems_version: 3.4.2
338
354
  signing_key:
339
355
  specification_version: 4
340
356
  summary: A command line interface for smithing Ruby projects.
metadata.gz.sig CHANGED
Binary file