rubysmith 4.9.0 → 5.1.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +91 -117
- data/lib/rubysmith/builders/core.rb +0 -1
- data/lib/rubysmith/cli/actions/amazing_print.rb +25 -0
- data/lib/rubysmith/cli/actions/caliber.rb +25 -0
- data/lib/rubysmith/cli/actions/circle_ci.rb +25 -0
- data/lib/rubysmith/cli/actions/citation.rb +25 -0
- data/lib/rubysmith/cli/actions/community.rb +25 -0
- data/lib/rubysmith/cli/actions/conduct.rb +25 -0
- data/lib/rubysmith/cli/actions/console.rb +25 -0
- data/lib/rubysmith/cli/actions/contributions.rb +25 -0
- data/lib/rubysmith/cli/actions/debug.rb +25 -0
- data/lib/rubysmith/cli/actions/funding.rb +25 -0
- data/lib/rubysmith/cli/actions/git.rb +25 -0
- data/lib/rubysmith/cli/actions/git_hub.rb +25 -0
- data/lib/rubysmith/cli/actions/git_hub_ci.rb +25 -0
- data/lib/rubysmith/cli/actions/git_lint.rb +25 -0
- data/lib/rubysmith/cli/actions/guard.rb +25 -0
- data/lib/rubysmith/cli/actions/license.rb +25 -0
- data/lib/rubysmith/cli/actions/maximum.rb +25 -0
- data/lib/rubysmith/cli/actions/minimum.rb +25 -0
- data/lib/rubysmith/cli/actions/name.rb +23 -0
- data/lib/rubysmith/cli/actions/publish.rb +16 -4
- data/lib/rubysmith/cli/actions/rake.rb +25 -0
- data/lib/rubysmith/cli/actions/readme.rb +25 -0
- data/lib/rubysmith/cli/actions/reek.rb +25 -0
- data/lib/rubysmith/cli/actions/refinements.rb +25 -0
- data/lib/rubysmith/cli/actions/rspec.rb +25 -0
- data/lib/rubysmith/cli/actions/security.rb +25 -0
- data/lib/rubysmith/cli/actions/setup.rb +25 -0
- data/lib/rubysmith/cli/actions/simple_cov.rb +25 -0
- data/lib/rubysmith/cli/actions/versions.rb +25 -0
- data/lib/rubysmith/cli/actions/yard.rb +25 -0
- data/lib/rubysmith/cli/actions/zeitwerk.rb +25 -0
- data/lib/rubysmith/cli/{actions → commands}/build.rb +45 -7
- data/lib/rubysmith/cli/shell.rb +20 -18
- data/lib/rubysmith/configuration/contract.rb +78 -0
- data/lib/rubysmith/configuration/defaults.yml +52 -73
- data/lib/rubysmith/configuration/{content.rb → model.rb} +8 -22
- data/lib/rubysmith/configuration/transformers/current_time.rb +18 -0
- data/lib/rubysmith/configuration/transformers/git_email.rb +21 -0
- data/lib/rubysmith/configuration/transformers/git_hub_user.rb +21 -0
- data/lib/rubysmith/configuration/transformers/git_user.rb +24 -0
- data/lib/rubysmith/configuration/transformers/target_root.rb +18 -0
- data/lib/rubysmith/configuration/transformers/template_root.rb +32 -0
- data/lib/rubysmith/container.rb +23 -3
- data/lib/rubysmith/extensions/milestoner.rb +1 -1
- data/lib/rubysmith/extensions/pragmater.rb +8 -8
- data/lib/rubysmith/extensions/tocer.rb +8 -8
- data/lib/rubysmith/pathway.rb +1 -0
- data/lib/rubysmith/templates/%project_name%/Gemfile.erb +4 -4
- data/rubysmith.gemspec +16 -13
- data.tar.gz.sig +0 -0
- metadata +112 -46
- metadata.gz.sig +0 -0
- data/lib/rubysmith/cli/actions/config.rb +0 -33
- data/lib/rubysmith/cli/actions/container.rb +0 -20
- data/lib/rubysmith/cli/actions/import.rb +0 -11
- data/lib/rubysmith/cli/parser.rb +0 -35
- data/lib/rubysmith/cli/parsers/build.rb +0 -307
- data/lib/rubysmith/cli/parsers/core.rb +0 -72
- data/lib/rubysmith/configuration/enhancers/container.rb +0 -20
- data/lib/rubysmith/configuration/enhancers/current_time.rb +0 -14
- data/lib/rubysmith/configuration/enhancers/git_email.rb +0 -21
- data/lib/rubysmith/configuration/enhancers/git_hub_user.rb +0 -21
- data/lib/rubysmith/configuration/enhancers/git_user.rb +0 -25
- data/lib/rubysmith/configuration/enhancers/template_root.rb +0 -12
- data/lib/rubysmith/configuration/loader.rb +0 -44
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores Guard flag.
         | 
| 10 | 
            +
                  class Guard < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add Guard gem."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]guard"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_guard }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_guard: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores license flag.
         | 
| 10 | 
            +
                  class License < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add license documentation."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]license"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_license }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_license: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Forces maximum configuration.
         | 
| 10 | 
            +
                  class Maximum < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Use maximum options."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--max"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_maximum }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(*) = input.merge!(input.maximize)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Forces minimum configuration.
         | 
| 10 | 
            +
                  class Minimum < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Use minimum options."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--min"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_minimum }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(*) = input.merge!(input.minimize)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores project (build) name.
         | 
| 10 | 
            +
                  class Name < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Set project name."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on %w[-n --name], argument: "NAME"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    def call(name) = input.merge!(project_name: name)
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -1,15 +1,27 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 3 6 | 
             
            module Rubysmith
         | 
| 4 7 | 
             
              module CLI
         | 
| 5 8 | 
             
                module Actions
         | 
| 6 | 
            -
                  #  | 
| 7 | 
            -
                  class Publish
         | 
| 8 | 
            -
                     | 
| 9 | 
            +
                  # Publishes project.
         | 
| 10 | 
            +
                  class Publish < Sod::Action
         | 
| 11 | 
            +
                    include Import[:configuration]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Publish project."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on %w[-p --publish], argument: "VERSION"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    def initialize(extension: Extensions::Milestoner, **)
         | 
| 20 | 
            +
                      super(**)
         | 
| 9 21 | 
             
                      @extension = extension
         | 
| 10 22 | 
             
                    end
         | 
| 11 23 |  | 
| 12 | 
            -
                    def call( | 
| 24 | 
            +
                    def call(version) = extension.call configuration.merge(project_version: version)
         | 
| 13 25 |  | 
| 14 26 | 
             
                    private
         | 
| 15 27 |  | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores Rake flag.
         | 
| 10 | 
            +
                  class Rake < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add Rake gem."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]rake"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_rake }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_rake: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores readme flag.
         | 
| 10 | 
            +
                  class Readme < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add readme documentation."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]readme"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_readme }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_readme: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores Reek flag.
         | 
| 10 | 
            +
                  class Reek < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add Reek gem."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]reek"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_reek }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_reek: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores Refinements flag.
         | 
| 10 | 
            +
                  class Refinements < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add Refinements gem."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]refinements"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_refinements }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_refinements: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores RSpec flag.
         | 
| 10 | 
            +
                  class RSpec < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add RSpec gem."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]rspec"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_rspec }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_rspec: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores security flag.
         | 
| 10 | 
            +
                  class Security < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add security."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]security"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_security }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_security: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores setup flag.
         | 
| 10 | 
            +
                  class Setup < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add setup script."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]setup"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_setup }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_setup: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores SimpleCov flag.
         | 
| 10 | 
            +
                  class SimpleCov < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add SimpleCov gem."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]simple_cov"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_simple_cov }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_simple_cov: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores versions flag.
         | 
| 10 | 
            +
                  class Versions < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add version history."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]versions"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_versions }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_versions: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores Yard flag.
         | 
| 10 | 
            +
                  class Yard < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add Yard gem."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]yard"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_yard }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_yard: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rubysmith
         | 
| 7 | 
            +
              module CLI
         | 
| 8 | 
            +
                module Actions
         | 
| 9 | 
            +
                  # Stores Zeitwerk flag.
         | 
| 10 | 
            +
                  class Zeitwerk < Sod::Action
         | 
| 11 | 
            +
                    include Import[:input]
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    using ::Refinements::Structs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    description "Add Zeitwerk gem."
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    on "--[no-]zeitwerk"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    default { Container[:configuration].build_zeitwerk }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def call(value = default) = input.merge!(build_zeitwerk: value)
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -1,11 +1,14 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require "refinements/structs"
         | 
| 4 | 
            +
            require "sod"
         | 
| 5 | 
            +
             | 
| 3 6 | 
             
            module Rubysmith
         | 
| 4 7 | 
             
              module CLI
         | 
| 5 | 
            -
                module  | 
| 6 | 
            -
                  #  | 
| 7 | 
            -
                  class Build
         | 
| 8 | 
            -
                    include  | 
| 8 | 
            +
                module Commands
         | 
| 9 | 
            +
                  # Stores table of contents root path.
         | 
| 10 | 
            +
                  class Build < Sod::Command
         | 
| 11 | 
            +
                    include Import[:input, :kernel, :logger]
         | 
| 9 12 |  | 
| 10 13 | 
             
                    # Order is important.
         | 
| 11 14 | 
             
                    # rubocop:todo Metrics/CollectionLiteralLength
         | 
| @@ -40,14 +43,49 @@ module Rubysmith | |
| 40 43 | 
             
                    ].freeze
         | 
| 41 44 | 
             
                    # rubocop:enable Metrics/CollectionLiteralLength
         | 
| 42 45 |  | 
| 46 | 
            +
                    handle "build"
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    description "Build new project."
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    on Actions::Name
         | 
| 51 | 
            +
                    on Actions::AmazingPrint
         | 
| 52 | 
            +
                    on Actions::Caliber
         | 
| 53 | 
            +
                    on Actions::Console
         | 
| 54 | 
            +
                    on Actions::Contributions
         | 
| 55 | 
            +
                    on Actions::CircleCI
         | 
| 56 | 
            +
                    on Actions::Citation
         | 
| 57 | 
            +
                    on Actions::Community
         | 
| 58 | 
            +
                    on Actions::Conduct
         | 
| 59 | 
            +
                    on Actions::Debug
         | 
| 60 | 
            +
                    on Actions::Funding
         | 
| 61 | 
            +
                    on Actions::Git
         | 
| 62 | 
            +
                    on Actions::GitHub
         | 
| 63 | 
            +
                    on Actions::GitHubCI
         | 
| 64 | 
            +
                    on Actions::GitLint
         | 
| 65 | 
            +
                    on Actions::Guard
         | 
| 66 | 
            +
                    on Actions::License
         | 
| 67 | 
            +
                    on Actions::Maximum
         | 
| 68 | 
            +
                    on Actions::Minimum
         | 
| 69 | 
            +
                    on Actions::Rake
         | 
| 70 | 
            +
                    on Actions::Readme
         | 
| 71 | 
            +
                    on Actions::Reek
         | 
| 72 | 
            +
                    on Actions::Refinements
         | 
| 73 | 
            +
                    on Actions::RSpec
         | 
| 74 | 
            +
                    on Actions::Security
         | 
| 75 | 
            +
                    on Actions::Setup
         | 
| 76 | 
            +
                    on Actions::SimpleCov
         | 
| 77 | 
            +
                    on Actions::Versions
         | 
| 78 | 
            +
                    on Actions::Yard
         | 
| 79 | 
            +
                    on Actions::Zeitwerk
         | 
| 80 | 
            +
             | 
| 43 81 | 
             
                    def initialize(builders: BUILDERS, **)
         | 
| 44 82 | 
             
                      super(**)
         | 
| 45 83 | 
             
                      @builders = builders
         | 
| 46 84 | 
             
                    end
         | 
| 47 85 |  | 
| 48 | 
            -
                    def call | 
| 49 | 
            -
                      log_info "Building project skeleton: #{ | 
| 50 | 
            -
                      builders.each { |builder| builder.call  | 
| 86 | 
            +
                    def call
         | 
| 87 | 
            +
                      log_info "Building project skeleton: #{input.project_name}..."
         | 
| 88 | 
            +
                      builders.each { |builder| builder.call input }
         | 
| 51 89 | 
             
                      log_info "Project skeleton complete!"
         | 
| 52 90 | 
             
                    end
         | 
| 53 91 |  | 
    
        data/lib/rubysmith/cli/shell.rb
    CHANGED
    
    | @@ -1,38 +1,40 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require " | 
| 4 | 
            -
            require "milestoner"
         | 
| 3 | 
            +
            require "sod"
         | 
| 5 4 |  | 
| 6 5 | 
             
            module Rubysmith
         | 
| 7 6 | 
             
              module CLI
         | 
| 8 7 | 
             
                # The main Command Line Interface (CLI) object.
         | 
| 9 8 | 
             
                class Shell
         | 
| 10 | 
            -
                  include  | 
| 9 | 
            +
                  include Import[:defaults_path, :xdg_config, :specification]
         | 
| 11 10 |  | 
| 12 | 
            -
                  def initialize( | 
| 11 | 
            +
                  def initialize(context: Sod::Context, dsl: Sod, **)
         | 
| 13 12 | 
             
                    super(**)
         | 
| 14 | 
            -
                    @ | 
| 13 | 
            +
                    @context = context
         | 
| 14 | 
            +
                    @dsl = dsl
         | 
| 15 15 | 
             
                  end
         | 
| 16 16 |  | 
| 17 | 
            -
                  def call  | 
| 18 | 
            -
                    act_on parser.call(arguments)
         | 
| 19 | 
            -
                  rescue OptionParser::ParseError, Milestoner::Error => error
         | 
| 20 | 
            -
                    logger.error { error.message }
         | 
| 21 | 
            -
                  end
         | 
| 17 | 
            +
                  def call(...) = cli.call(...)
         | 
| 22 18 |  | 
| 23 19 | 
             
                  private
         | 
| 24 20 |  | 
| 25 | 
            -
                  attr_reader : | 
| 21 | 
            +
                  attr_reader :context, :dsl
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def cli
         | 
| 24 | 
            +
                    context = build_context
         | 
| 26 25 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
                       | 
| 30 | 
            -
                       | 
| 31 | 
            -
                       | 
| 32 | 
            -
                       | 
| 33 | 
            -
                      else kernel.puts parser.to_s
         | 
| 26 | 
            +
                    dsl.new :rubysmith, banner: specification.banner do
         | 
| 27 | 
            +
                      on(Sod::Prefabs::Commands::Config, context:)
         | 
| 28 | 
            +
                      on Commands::Build
         | 
| 29 | 
            +
                      on Actions::Publish
         | 
| 30 | 
            +
                      on(Sod::Prefabs::Actions::Version, context:)
         | 
| 31 | 
            +
                      on Sod::Prefabs::Actions::Help, self
         | 
| 34 32 | 
             
                    end
         | 
| 35 33 | 
             
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  def build_context
         | 
| 36 | 
            +
                    context[defaults_path:, xdg_config:, version_label: specification.labeled_version]
         | 
| 37 | 
            +
                  end
         | 
| 36 38 | 
             
                end
         | 
| 37 39 | 
             
              end
         | 
| 38 40 | 
             
            end
         | 
| @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "dry/schema"
         | 
| 4 | 
            +
            require "etcher"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Dry::Schema.load_extensions :monads
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module Rubysmith
         | 
| 9 | 
            +
              module Configuration
         | 
| 10 | 
            +
                Contract = Dry::Schema.Params do
         | 
| 11 | 
            +
                  optional(:author_email).filled :string
         | 
| 12 | 
            +
                  optional(:author_family_name).filled :string
         | 
| 13 | 
            +
                  optional(:author_given_name).filled :string
         | 
| 14 | 
            +
                  optional(:author_url).filled :string
         | 
| 15 | 
            +
                  required(:build_amazing_print).filled :bool
         | 
| 16 | 
            +
                  required(:build_caliber).filled :bool
         | 
| 17 | 
            +
                  required(:build_circle_ci).filled :bool
         | 
| 18 | 
            +
                  required(:build_citation).filled :bool
         | 
| 19 | 
            +
                  required(:build_cli).filled :bool
         | 
| 20 | 
            +
                  required(:build_community).filled :bool
         | 
| 21 | 
            +
                  required(:build_conduct).filled :bool
         | 
| 22 | 
            +
                  required(:build_console).filled :bool
         | 
| 23 | 
            +
                  required(:build_contributions).filled :bool
         | 
| 24 | 
            +
                  required(:build_debug).filled :bool
         | 
| 25 | 
            +
                  required(:build_funding).filled :bool
         | 
| 26 | 
            +
                  required(:build_git).filled :bool
         | 
| 27 | 
            +
                  required(:build_git_hub).filled :bool
         | 
| 28 | 
            +
                  required(:build_git_hub_ci).filled :bool
         | 
| 29 | 
            +
                  required(:build_git_lint).filled :bool
         | 
| 30 | 
            +
                  required(:build_guard).filled :bool
         | 
| 31 | 
            +
                  required(:build_license).filled :bool
         | 
| 32 | 
            +
                  required(:build_maximum).filled :bool
         | 
| 33 | 
            +
                  required(:build_minimum).filled :bool
         | 
| 34 | 
            +
                  required(:build_rake).filled :bool
         | 
| 35 | 
            +
                  required(:build_readme).filled :bool
         | 
| 36 | 
            +
                  required(:build_reek).filled :bool
         | 
| 37 | 
            +
                  required(:build_refinements).filled :bool
         | 
| 38 | 
            +
                  required(:build_rspec).filled :bool
         | 
| 39 | 
            +
                  required(:build_security).filled :bool
         | 
| 40 | 
            +
                  required(:build_setup).filled :bool
         | 
| 41 | 
            +
                  required(:build_simple_cov).filled :bool
         | 
| 42 | 
            +
                  required(:build_versions).filled :bool
         | 
| 43 | 
            +
                  required(:build_yard).filled :bool
         | 
| 44 | 
            +
                  required(:build_zeitwerk).filled :bool
         | 
| 45 | 
            +
                  optional(:citation_affiliation).filled :string
         | 
| 46 | 
            +
                  optional(:citation_message).filled :string
         | 
| 47 | 
            +
                  optional(:citation_orcid).filled :string
         | 
| 48 | 
            +
                  required(:documentation_format).filled :string
         | 
| 49 | 
            +
                  required(:extensions_milestoner_documentation_format).filled :string
         | 
| 50 | 
            +
                  required(:extensions_milestoner_prefixes).array :string
         | 
| 51 | 
            +
                  required(:extensions_pragmater_comments).array :string
         | 
| 52 | 
            +
                  required(:extensions_pragmater_patterns).array :string
         | 
| 53 | 
            +
                  required(:extensions_tocer_label).filled :string
         | 
| 54 | 
            +
                  required(:extensions_tocer_patterns).array :string
         | 
| 55 | 
            +
                  optional(:git_hub_user).filled :string
         | 
| 56 | 
            +
                  required(:license_label).filled :string
         | 
| 57 | 
            +
                  required(:license_name).filled :string
         | 
| 58 | 
            +
                  required(:license_version).filled :string
         | 
| 59 | 
            +
                  optional(:now).filled :time
         | 
| 60 | 
            +
                  optional(:project_name).filled :string
         | 
| 61 | 
            +
                  optional(:project_url_community).filled :string
         | 
| 62 | 
            +
                  optional(:project_url_conduct).filled :string
         | 
| 63 | 
            +
                  optional(:project_url_contributions).filled :string
         | 
| 64 | 
            +
                  optional(:project_url_download).filled :string
         | 
| 65 | 
            +
                  optional(:project_url_funding).filled :string
         | 
| 66 | 
            +
                  optional(:project_url_home).filled :string
         | 
| 67 | 
            +
                  optional(:project_url_issues).filled :string
         | 
| 68 | 
            +
                  optional(:project_url_license).filled :string
         | 
| 69 | 
            +
                  optional(:project_url_security).filled :string
         | 
| 70 | 
            +
                  optional(:project_url_source).filled :string
         | 
| 71 | 
            +
                  optional(:project_url_versions).filled :string
         | 
| 72 | 
            +
                  required(:project_version).filled :string
         | 
| 73 | 
            +
                  required(:target_root).filled Etcher::Types::Pathname
         | 
| 74 | 
            +
                  optional(:template_path).filled Etcher::Types::Pathname
         | 
| 75 | 
            +
                  required(:template_roots).array Etcher::Types::Pathname
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
            end
         |