class Gemsmith::Builders::CLI

Builds project skeleton CLI templates.

Public Instance Methods

call() click to toggle source
# File lib/gemsmith/builders/cli.rb, line 11
def call
  return false unless settings.build_cli

  render
  true
end

Private Instance Methods

render(= private_methods.sort.grep(/render_/).each { |method| __send__ method }) click to toggle source
# File lib/gemsmith/builders/cli.rb, line 20
      def render = private_methods.sort.grep(/render_/).each { |method| __send__ method }

      def render_exe
        builder.call(settings.merge(template_path: "%project_name%/exe/%project_name%.erb"))
               .render
               .permit 0o755
      end

      def render_core
        content = settings.merge template_path: "%project_name%/lib/%project_path%.rb.erb"

        builder.call(content)
               .insert_before(/tag/, %(  loader.inflector.inflect "cli" => "CLI"\n))
      end

      def render_configuration
        [
          "%project_name%/lib/%project_path%/configuration/contract.rb.erb",
          "%project_name%/lib/%project_path%/configuration/model.rb.erb",
          "%project_name%/lib/%project_path%/configuration/defaults.yml.erb",
          "%project_name%/lib/%project_path%/container.rb.erb",
          "%project_name%/lib/%project_path%/import.rb.erb"
        ].each { |path| builder.call(settings.merge(template_path: path)).render }
      end

      def render_shell
        path = "%project_name%/lib/%project_path%/cli/shell.rb.erb"
        builder.call(settings.merge(template_path: path)).render
      end

      def render_requirements
        return if settings.build_zeitwerk

        builder.call(settings.merge(template_path: "%project_name%/lib/%project_path%.rb.erb"))
               .render
               .prepend <<~CONTENT
                 require "demo/configuration/contract"
                 require "demo/configuration/model"
                 require "demo/container"
                 require "demo/import"

                 require "demo/cli/shell"

                 # Main namespace.
               CONTENT
      end

      def render_specs
        return unless settings.build_rspec

        [
          "%project_name%/spec/lib/%project_path%/cli/shell_spec.rb.erb",
          "%project_name%/spec/support/shared_contexts/application_dependencies.rb.erb"
        ].each { |path| builder.call(settings.merge(template_path: path)).render }
      end
    end
render_configuration() click to toggle source
# File lib/gemsmith/builders/cli.rb, line 35
def render_configuration
  [
    "%project_name%/lib/%project_path%/configuration/contract.rb.erb",
    "%project_name%/lib/%project_path%/configuration/model.rb.erb",
    "%project_name%/lib/%project_path%/configuration/defaults.yml.erb",
    "%project_name%/lib/%project_path%/container.rb.erb",
    "%project_name%/lib/%project_path%/import.rb.erb"
  ].each { |path| builder.call(settings.merge(template_path: path)).render }
end
render_core() click to toggle source
# File lib/gemsmith/builders/cli.rb, line 28
def render_core
  content = settings.merge template_path: "%project_name%/lib/%project_path%.rb.erb"

  builder.call(content)
         .insert_before(/tag/, %(  loader.inflector.inflect "cli" => "CLI"\n))
end
render_exe() click to toggle source
# File lib/gemsmith/builders/cli.rb, line 22
def render_exe
  builder.call(settings.merge(template_path: "%project_name%/exe/%project_name%.erb"))
         .render
         .permit 0o755
end
render_requirements() click to toggle source
# File lib/gemsmith/builders/cli.rb, line 50
      def render_requirements
        return if settings.build_zeitwerk

        builder.call(settings.merge(template_path: "%project_name%/lib/%project_path%.rb.erb"))
               .render
               .prepend <<~CONTENT
                 require "demo/configuration/contract"
                 require "demo/configuration/model"
                 require "demo/container"
                 require "demo/import"

                 require "demo/cli/shell"

                 # Main namespace.
               CONTENT
      end
render_shell() click to toggle source
# File lib/gemsmith/builders/cli.rb, line 45
def render_shell
  path = "%project_name%/lib/%project_path%/cli/shell.rb.erb"
  builder.call(settings.merge(template_path: path)).render
end
render_specs() click to toggle source
# File lib/gemsmith/builders/cli.rb, line 67
def render_specs
  return unless settings.build_rspec

  [
    "%project_name%/spec/lib/%project_path%/cli/shell_spec.rb.erb",
    "%project_name%/spec/support/shared_contexts/application_dependencies.rb.erb"
  ].each { |path| builder.call(settings.merge(template_path: path)).render }
end