rubysmith 5.0.1 → 5.2.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 (46) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/rubysmith/builder.rb +15 -4
  4. data/lib/rubysmith/builders/init.rb +29 -0
  5. data/lib/rubysmith/cli/actions/amazing_print.rb +1 -4
  6. data/lib/rubysmith/cli/actions/caliber.rb +1 -4
  7. data/lib/rubysmith/cli/actions/circle_ci.rb +1 -4
  8. data/lib/rubysmith/cli/actions/citation.rb +1 -4
  9. data/lib/rubysmith/cli/actions/community.rb +1 -4
  10. data/lib/rubysmith/cli/actions/conduct.rb +1 -4
  11. data/lib/rubysmith/cli/actions/console.rb +1 -4
  12. data/lib/rubysmith/cli/actions/contributions.rb +1 -4
  13. data/lib/rubysmith/cli/actions/debug.rb +1 -4
  14. data/lib/rubysmith/cli/actions/funding.rb +1 -4
  15. data/lib/rubysmith/cli/actions/git.rb +1 -4
  16. data/lib/rubysmith/cli/actions/git_hub.rb +1 -4
  17. data/lib/rubysmith/cli/actions/git_hub_ci.rb +1 -4
  18. data/lib/rubysmith/cli/actions/git_lint.rb +1 -4
  19. data/lib/rubysmith/cli/actions/guard.rb +1 -4
  20. data/lib/rubysmith/cli/actions/license.rb +1 -4
  21. data/lib/rubysmith/cli/actions/maximum.rb +1 -1
  22. data/lib/rubysmith/cli/actions/minimum.rb +1 -1
  23. data/lib/rubysmith/cli/actions/name.rb +1 -4
  24. data/lib/rubysmith/cli/actions/publish.rb +2 -2
  25. data/lib/rubysmith/cli/actions/rake.rb +1 -4
  26. data/lib/rubysmith/cli/actions/readme.rb +1 -4
  27. data/lib/rubysmith/cli/actions/reek.rb +1 -4
  28. data/lib/rubysmith/cli/actions/refinements.rb +1 -4
  29. data/lib/rubysmith/cli/actions/rspec.rb +1 -4
  30. data/lib/rubysmith/cli/actions/security.rb +1 -4
  31. data/lib/rubysmith/cli/actions/setup.rb +1 -4
  32. data/lib/rubysmith/cli/actions/simple_cov.rb +1 -4
  33. data/lib/rubysmith/cli/actions/versions.rb +1 -4
  34. data/lib/rubysmith/cli/actions/yard.rb +1 -4
  35. data/lib/rubysmith/cli/actions/zeitwerk.rb +1 -4
  36. data/lib/rubysmith/cli/commands/build.rb +1 -2
  37. data/lib/rubysmith/configuration/model.rb +0 -2
  38. data/lib/rubysmith/configuration/transformers/git_email.rb +12 -6
  39. data/lib/rubysmith/configuration/transformers/git_hub_user.rb +12 -6
  40. data/lib/rubysmith/configuration/transformers/git_user.rb +19 -9
  41. data/lib/rubysmith/configuration/transformers/template_root.rb +16 -6
  42. data/lib/rubysmith/container.rb +6 -4
  43. data/rubysmith.gemspec +1 -1
  44. data.tar.gz.sig +0 -0
  45. metadata +3 -2
  46. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0dbc9d9406cccf11b2508d5c27370906bf7f13b18e8506638ddc29a9ce003df4
4
- data.tar.gz: 64beedf46aea4a1768e98790c9c3e96acca2d274fe12805721588338584fb390
3
+ metadata.gz: cba3bd0c9495f7d9eac9352aaddcbff8697352579b03fc66c34cb476870ca967
4
+ data.tar.gz: 5792c9c7a7cc5a6d1265bbd4461acb1195d7e19107dd84b4b8f61d7a68946830
5
5
  SHA512:
6
- metadata.gz: 3e22613cee83158a67415a51e128603d5bea8ad9fb052c679520669c01e933fbd14c850efaddb0a30144ccca4515f7a96c45104b503e975b44f344fb2bbfd64f
7
- data.tar.gz: 5054c72f1a820e90cf414aa110246bb0d404737f13c61ea2117818474ff42316ea40217e8f19fd113316e994a67ed6878be64abcf444165a8216b49b8eda9ceb
6
+ metadata.gz: 9edc097233d311cd1d5f7978842aa1e97d8ce49f948221c21b7363aa778be090a890e9b8b41e86c65837d6cd0146dcddcd21590148a198acafc56b700abd533b
7
+ data.tar.gz: 076e94f6361e25ab206e7ec2528485a34c62a654452dea13919c655803ccae818c53df0166daecc7c960d2e4f40b25b94997af13dd82f8a6af20a3946e63a538
checksums.yaml.gz.sig CHANGED
Binary file
@@ -7,11 +7,11 @@ require "refinements/pathnames"
7
7
  module Rubysmith
8
8
  # Provides common functionality necessary for all builders.
9
9
  class Builder
10
- include Import[:logger]
10
+ include Import[:kernel, :logger]
11
11
 
12
12
  using Refinements::Pathnames
13
13
 
14
- HELPERS = {inserter: Text::Inserter, renderer: Renderers::ERB, kernel: Open3}.freeze
14
+ HELPERS = {inserter: Text::Inserter, renderer: Renderers::ERB, executor: Open3}.freeze
15
15
 
16
16
  def self.call(...) = new(...)
17
17
 
@@ -27,6 +27,17 @@ module Rubysmith
27
27
  self
28
28
  end
29
29
 
30
+ def check
31
+ path = build_path
32
+
33
+ if path.exist?
34
+ log_error "Path exists: #{path}."
35
+ kernel.abort
36
+ else
37
+ log_debug "Checked: #{path}."
38
+ end
39
+ end
40
+
30
41
  def delete
31
42
  log_debug "Deleting: #{relative_build_path}"
32
43
  build_path.delete
@@ -104,7 +115,7 @@ module Rubysmith
104
115
  attr_reader :configuration, :helpers
105
116
 
106
117
  def execute *command
107
- kernel.capture2e(*command).then do |result, status|
118
+ executor.capture2e(*command).then do |result, status|
108
119
  log_error result unless status.success?
109
120
  end
110
121
  end
@@ -113,7 +124,7 @@ module Rubysmith
113
124
 
114
125
  def renderer = helpers.fetch(__method__).new(configuration)
115
126
 
116
- def kernel = helpers.fetch(__method__)
127
+ def executor = helpers.fetch(__method__)
117
128
 
118
129
  def relative_build_path = build_path.relative_path_from(configuration.target_root)
119
130
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "refinements/structs"
5
+
6
+ module Rubysmith
7
+ module Builders
8
+ # Initializes building of project by checking for existence first.
9
+ class Init
10
+ using Refinements::Structs
11
+
12
+ def self.call(...) = new(...).call
13
+
14
+ def initialize configuration, builder: Builder
15
+ @configuration = configuration
16
+ @builder = builder
17
+ end
18
+
19
+ def call
20
+ builder.call(configuration.merge(template_path: "%project_name%")).check
21
+ configuration
22
+ end
23
+
24
+ private
25
+
26
+ attr_reader :configuration, :builder
27
+ end
28
+ end
29
+ end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class AmazingPrint < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Amazing Print gem."
16
13
 
17
14
  on "--[no-]amazing_print"
18
15
 
19
16
  default { Container[:configuration].build_amazing_print }
20
17
 
21
- def call(value = default) = input.merge!(build_amazing_print: value)
18
+ def call(value = default) = input.build_amazing_print = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Caliber < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Caliber gem."
16
13
 
17
14
  on "--[no-]caliber"
18
15
 
19
16
  default { Container[:configuration].build_caliber }
20
17
 
21
- def call(value = default) = input.merge!(build_caliber: value)
18
+ def call(value = default) = input.build_caliber = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class CircleCI < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Circle CI configuration."
16
13
 
17
14
  on "--[no-]circle_ci"
18
15
 
19
16
  default { Container[:configuration].build_circle_ci }
20
17
 
21
- def call(value = default) = input.merge!(build_circle_ci: value)
18
+ def call(value = default) = input.build_circle_ci = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Citation < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add citation documentation."
16
13
 
17
14
  on "--[no-]citation"
18
15
 
19
16
  default { Container[:configuration].build_citation }
20
17
 
21
- def call(value = default) = input.merge!(build_citation: value)
18
+ def call(value = default) = input.build_citation = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Community < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add community documentation."
16
13
 
17
14
  on "--[no-]community"
18
15
 
19
16
  default { Container[:configuration].build_community }
20
17
 
21
- def call(value = default) = input.merge!(build_community: value)
18
+ def call(value = default) = input.build_community = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Conduct < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add code of conduct documentation."
16
13
 
17
14
  on "--[no-]conduct"
18
15
 
19
16
  default { Container[:configuration].build_conduct }
20
17
 
21
- def call(value = default) = input.merge!(build_conduct: value)
18
+ def call(value = default) = input.build_conduct = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Console < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add console script."
16
13
 
17
14
  on "--[no-]console"
18
15
 
19
16
  default { Container[:configuration].build_console }
20
17
 
21
- def call(value = default) = input.merge!(build_console: value)
18
+ def call(value = default) = input.build_console = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Contributions < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add contributions documentation."
16
13
 
17
14
  on "--[no-]contributions"
18
15
 
19
16
  default { Container[:configuration].build_contributions }
20
17
 
21
- def call(value = default) = input.merge!(build_contributions: value)
18
+ def call(value = default) = input.build_contributions = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Debug < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Debug gem."
16
13
 
17
14
  on "--[no-]debug"
18
15
 
19
16
  default { Container[:configuration].build_debug }
20
17
 
21
- def call(value = default) = input.merge!(build_debug: value)
18
+ def call(value = default) = input.build_debug = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Funding < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add GitHub funding configuration."
16
13
 
17
14
  on "--[no-]funding"
18
15
 
19
16
  default { Container[:configuration].build_funding }
20
17
 
21
- def call(value = default) = input.merge!(build_funding: value)
18
+ def call(value = default) = input.build_funding = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Git < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Git repository."
16
13
 
17
14
  on "--[no-]git"
18
15
 
19
16
  default { Container[:configuration].build_git }
20
17
 
21
- def call(value = default) = input.merge!(build_git: value)
18
+ def call(value = default) = input.build_git = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class GitHub < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add GitHub templates."
16
13
 
17
14
  on "--[no-]git_hub"
18
15
 
19
16
  default { Container[:configuration].build_git_hub }
20
17
 
21
- def call(value = default) = input.merge!(build_git_hub: value)
18
+ def call(value = default) = input.build_git_hub = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class GitHubCI < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add GitHub continuous integration."
16
13
 
17
14
  on "--[no-]git_hub_ci"
18
15
 
19
16
  default { Container[:configuration].build_git_hub_ci }
20
17
 
21
- def call(value = default) = input.merge!(build_git_hub_ci: value)
18
+ def call(value = default) = input.build_git_hub_ci = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class GitLint < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Git Lint gem."
16
13
 
17
14
  on "--[no-]git-lint"
18
15
 
19
16
  default { Container[:configuration].build_git_lint }
20
17
 
21
- def call(value = default) = input.merge!(build_git_lint: value)
18
+ def call(value = default) = input.build_git_lint = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Guard < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Guard gem."
16
13
 
17
14
  on "--[no-]guard"
18
15
 
19
16
  default { Container[:configuration].build_guard }
20
17
 
21
- def call(value = default) = input.merge!(build_guard: value)
18
+ def call(value = default) = input.build_guard = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class License < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add license documentation."
16
13
 
17
14
  on "--[no-]license"
18
15
 
19
16
  default { Container[:configuration].build_license }
20
17
 
21
- def call(value = default) = input.merge!(build_license: value)
18
+ def call(value = default) = input.build_license = value
22
19
  end
23
20
  end
24
21
  end
@@ -18,7 +18,7 @@ module Rubysmith
18
18
 
19
19
  default { Container[:configuration].build_maximum }
20
20
 
21
- def call(*) = input.merge!(input.maximize)
21
+ def call(*) = input.merge! input.maximize
22
22
  end
23
23
  end
24
24
  end
@@ -18,7 +18,7 @@ module Rubysmith
18
18
 
19
19
  default { Container[:configuration].build_minimum }
20
20
 
21
- def call(*) = input.merge!(input.minimize)
21
+ def call(*) = input.merge! input.minimize
22
22
  end
23
23
  end
24
24
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,13 +9,11 @@ module Rubysmith
10
9
  class Name < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Set project name."
16
13
 
17
14
  on %w[-n --name], argument: "NAME"
18
15
 
19
- def call(name) = input.merge!(project_name: name)
16
+ def call(name) = input.project_name = name
20
17
  end
21
18
  end
22
19
  end
@@ -8,7 +8,7 @@ module Rubysmith
8
8
  module Actions
9
9
  # Publishes project.
10
10
  class Publish < Sod::Action
11
- include Import[:configuration]
11
+ include Import[:input]
12
12
 
13
13
  using ::Refinements::Structs
14
14
 
@@ -21,7 +21,7 @@ module Rubysmith
21
21
  @extension = extension
22
22
  end
23
23
 
24
- def call(version) = extension.call configuration.merge(project_version: version)
24
+ def call(version) = extension.call input.merge(project_version: version)
25
25
 
26
26
  private
27
27
 
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Rake < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Rake gem."
16
13
 
17
14
  on "--[no-]rake"
18
15
 
19
16
  default { Container[:configuration].build_rake }
20
17
 
21
- def call(value = default) = input.merge!(build_rake: value)
18
+ def call(value = default) = input.build_rake = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Readme < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add readme documentation."
16
13
 
17
14
  on "--[no-]readme"
18
15
 
19
16
  default { Container[:configuration].build_readme }
20
17
 
21
- def call(value = default) = input.merge!(build_readme: value)
18
+ def call(value = default) = input.build_readme = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Reek < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Reek gem."
16
13
 
17
14
  on "--[no-]reek"
18
15
 
19
16
  default { Container[:configuration].build_reek }
20
17
 
21
- def call(value = default) = input.merge!(build_reek: value)
18
+ def call(value = default) = input.build_reek = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Refinements < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Refinements gem."
16
13
 
17
14
  on "--[no-]refinements"
18
15
 
19
16
  default { Container[:configuration].build_refinements }
20
17
 
21
- def call(value = default) = input.merge!(build_refinements: value)
18
+ def call(value = default) = input.build_refinements = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class RSpec < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add RSpec gem."
16
13
 
17
14
  on "--[no-]rspec"
18
15
 
19
16
  default { Container[:configuration].build_rspec }
20
17
 
21
- def call(value = default) = input.merge!(build_rspec: value)
18
+ def call(value = default) = input.build_rspec = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Security < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add security."
16
13
 
17
14
  on "--[no-]security"
18
15
 
19
16
  default { Container[:configuration].build_security }
20
17
 
21
- def call(value = default) = input.merge!(build_security: value)
18
+ def call(value = default) = input.build_security = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Setup < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add setup script."
16
13
 
17
14
  on "--[no-]setup"
18
15
 
19
16
  default { Container[:configuration].build_setup }
20
17
 
21
- def call(value = default) = input.merge!(build_setup: value)
18
+ def call(value = default) = input.build_setup = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class SimpleCov < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add SimpleCov gem."
16
13
 
17
14
  on "--[no-]simple_cov"
18
15
 
19
16
  default { Container[:configuration].build_simple_cov }
20
17
 
21
- def call(value = default) = input.merge!(build_simple_cov: value)
18
+ def call(value = default) = input.build_simple_cov = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Versions < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add version history."
16
13
 
17
14
  on "--[no-]versions"
18
15
 
19
16
  default { Container[:configuration].build_versions }
20
17
 
21
- def call(value = default) = input.merge!(build_versions: value)
18
+ def call(value = default) = input.build_versions = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Yard < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Yard gem."
16
13
 
17
14
  on "--[no-]yard"
18
15
 
19
16
  default { Container[:configuration].build_yard }
20
17
 
21
- def call(value = default) = input.merge!(build_yard: value)
18
+ def call(value = default) = input.build_yard = value
22
19
  end
23
20
  end
24
21
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/structs"
4
3
  require "sod"
5
4
 
6
5
  module Rubysmith
@@ -10,15 +9,13 @@ module Rubysmith
10
9
  class Zeitwerk < Sod::Action
11
10
  include Import[:input]
12
11
 
13
- using ::Refinements::Structs
14
-
15
12
  description "Add Zeitwerk gem."
16
13
 
17
14
  on "--[no-]zeitwerk"
18
15
 
19
16
  default { Container[:configuration].build_zeitwerk }
20
17
 
21
- def call(value = default) = input.merge!(build_zeitwerk: value)
18
+ def call(value = default) = input.build_zeitwerk = value
22
19
  end
23
20
  end
24
21
  end
@@ -11,8 +11,8 @@ module Rubysmith
11
11
  include Import[:input, :kernel, :logger]
12
12
 
13
13
  # Order is important.
14
- # rubocop:todo Metrics/CollectionLiteralLength
15
14
  BUILDERS = [
15
+ Builders::Init,
16
16
  Builders::Core,
17
17
  Builders::Version,
18
18
  Builders::Documentation::Readme,
@@ -41,7 +41,6 @@ module Rubysmith
41
41
  Extensions::Rubocop,
42
42
  Builders::Git::Commit
43
43
  ].freeze
44
- # rubocop:enable Metrics/CollectionLiteralLength
45
44
 
46
45
  handle "build"
47
46
 
@@ -6,7 +6,6 @@ require "refinements/strings"
6
6
  require "refinements/structs"
7
7
 
8
8
  module Rubysmith
9
- # rubocop:disable Metrics/ModuleLength
10
9
  module Configuration
11
10
  # Defines the common configuration content for use throughout the gem.
12
11
  Model = Struct.new(
@@ -158,5 +157,4 @@ module Rubysmith
158
157
  end
159
158
  end
160
159
  end
161
- # rubocop:enable Metrics/ModuleLength
162
160
  end
@@ -1,18 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "dry/monads"
4
- require "gitt"
5
4
 
6
5
  module Rubysmith
7
6
  module Configuration
8
- # Dynamically adds Git email if defined.
9
7
  module Transformers
10
- include Dry::Monads[:result]
8
+ # Dynamically adds Git email if defined.
9
+ class GitEmail
10
+ include Import[:git]
11
+ include Dry::Monads[:result]
11
12
 
12
- GitEmail = lambda do |content, git: Gitt::Repository.new|
13
- return Dry::Monads::Success content if content[:author_email]
13
+ def call(content) = content[:author_email] ? Success(content) : email_or(content)
14
14
 
15
- git.get("user.email").fmap { |email| content.merge! author_email: email }
15
+ private
16
+
17
+ def email_or content
18
+ git.get("user.email", nil)
19
+ .fmap { |email| email ? content.merge!(author_email: email) : content }
20
+ .or { Success content }
21
+ end
16
22
  end
17
23
  end
18
24
  end
@@ -1,18 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "dry/monads"
4
- require "gitt"
5
4
 
6
5
  module Rubysmith
7
6
  module Configuration
8
- # Dynamically adds GitHub user if user is defined.
9
7
  module Transformers
10
- include Dry::Monads[:result]
8
+ # Dynamically adds GitHub user if user is defined.
9
+ class GitHubUser
10
+ include Import[:git]
11
+ include Dry::Monads[:result]
11
12
 
12
- GitHubUser = lambda do |content, git: Gitt::Repository.new|
13
- return Dry::Monads::Success content if content[:git_hub_user]
13
+ def call(content) = content[:git_hub_user] ? Success(content) : user_or(content)
14
14
 
15
- git.get("github.user").fmap { |user| content.merge! git_hub_user: user }
15
+ private
16
+
17
+ def user_or content
18
+ git.get("github.user", nil)
19
+ .fmap { |user| user ? content.merge!(git_hub_user: user) : content }
20
+ .or { Success content }
21
+ end
16
22
  end
17
23
  end
18
24
  end
@@ -1,21 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "dry/monads"
4
- require "gitt"
5
4
 
6
5
  module Rubysmith
7
6
  module Configuration
8
- # Dynamically adds Git user if defined.
9
7
  module Transformers
10
- include Dry::Monads[:result]
8
+ # Dynamically adds Git user if defined.
9
+ class GitUser
10
+ include Import[:git]
11
+ include Dry::Monads[:result]
12
+
13
+ def call content
14
+ return Success content if content[:author_given_name] || content[:author_family_name]
15
+
16
+ name_or content
17
+ end
18
+
19
+ private
20
+
21
+ def name_or(content) = split(content).or { Success content }
22
+
23
+ def split content
24
+ git.get("user.name", nil).fmap do |name|
25
+ next content unless name
11
26
 
12
- GitUser = lambda do |content, git: Gitt::Repository.new|
13
- if content[:author_given_name] || content[:author_family_name]
14
- Dry::Monads::Success content
15
- else
16
- git.get("user.name").fmap do |name|
17
27
  first, last = String(name).split
18
- content.merge author_given_name: first, author_family_name: last
28
+ content.merge! author_given_name: first, author_family_name: last
19
29
  end
20
30
  end
21
31
  end
@@ -5,17 +5,27 @@ require "refinements/arrays"
5
5
 
6
6
  module Rubysmith
7
7
  module Configuration
8
- # Prepends template roots to existing content.
9
8
  module Transformers
10
- include Dry::Monads[:result]
9
+ # Appends custom content to default template roots.
10
+ class TemplateRoot
11
+ include Dry::Monads[:result]
11
12
 
12
- using Refinements::Arrays
13
+ using Refinements::Arrays
13
14
 
14
- TemplateRoot = lambda do |content, overrides: Pathname(__dir__).join("../../templates")|
15
- Array(overrides).map { |path| Pathname path }
15
+ def initialize default = Pathname(__dir__).join("../../templates")
16
+ @default = default
17
+ end
18
+
19
+ def call content
20
+ Array(default).map { |path| Pathname path }
16
21
  .including(content[:template_roots])
17
22
  .compact
18
- .then { |paths| Dry::Monads::Success content.merge!(template_roots: paths) }
23
+ .then { |paths| Success content.merge!(template_roots: paths) }
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :default
19
29
  end
20
30
  end
21
31
  end
@@ -3,6 +3,7 @@
3
3
  require "cogger"
4
4
  require "dry-container"
5
5
  require "etcher"
6
+ require "gitt"
6
7
  require "runcom"
7
8
  require "spek"
8
9
 
@@ -20,10 +21,10 @@ module Rubysmith
20
21
  Etcher::Registry.new(contract: Configuration::Contract, model: Configuration::Model)
21
22
  .add_loader(Etcher::Loaders::YAML.new(self[:defaults_path]))
22
23
  .add_transformer(Configuration::Transformers::CurrentTime)
23
- .add_transformer(Configuration::Transformers::GitHubUser)
24
- .add_transformer(Configuration::Transformers::GitEmail)
25
- .add_transformer(Configuration::Transformers::GitUser)
26
- .add_transformer(Configuration::Transformers::TemplateRoot)
24
+ .add_transformer(Configuration::Transformers::GitHubUser.new)
25
+ .add_transformer(Configuration::Transformers::GitEmail.new)
26
+ .add_transformer(Configuration::Transformers::GitUser.new)
27
+ .add_transformer(Configuration::Transformers::TemplateRoot.new)
27
28
  .add_transformer(Configuration::Transformers::TargetRoot)
28
29
  end
29
30
 
@@ -31,6 +32,7 @@ module Rubysmith
31
32
  register(:defaults_path) { Pathname(__dir__).join("configuration/defaults.yml") }
32
33
  register(:xdg_config) { Runcom::Config.new "rubysmith/configuration.yml" }
33
34
  register(:specification) { Spek::Loader.call "#{__dir__}/../../rubysmith.gemspec" }
35
+ register(:git) { Gitt::Repository.new }
34
36
  register(:kernel) { Kernel }
35
37
  register(:logger) { Cogger.new formatter: :emoji }
36
38
  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 = "5.0.1"
5
+ spec.version = "5.2.0"
6
6
  spec.authors = ["Brooke Kuhlmann"]
7
7
  spec.email = ["brooke@alchemists.io"]
8
8
  spec.homepage = "https://github.com/bkuhlmann/rubysmith"
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: 5.0.1
4
+ version: 5.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -35,7 +35,7 @@ cert_chain:
35
35
  3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
36
36
  gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
37
37
  -----END CERTIFICATE-----
38
- date: 2023-06-16 00:00:00.000000000 Z
38
+ date: 2023-06-19 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: cogger
@@ -306,6 +306,7 @@ files:
306
306
  - lib/rubysmith/builders/git_hub.rb
307
307
  - lib/rubysmith/builders/git_hub_ci.rb
308
308
  - lib/rubysmith/builders/guard.rb
309
+ - lib/rubysmith/builders/init.rb
309
310
  - lib/rubysmith/builders/rake.rb
310
311
  - lib/rubysmith/builders/reek.rb
311
312
  - lib/rubysmith/builders/rspec/binstub.rb
metadata.gz.sig CHANGED
Binary file