Sha256: 83a9bfa579904d547c065211f7cfba652df520cb2972d1bc7f8aea4a9bac74e8

Contents?: true

Size: 1.86 KB

Versions: 2

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

require "refinements/struct"

module Gemsmith
  module Builders
    # Builds project skeleton CLI templates.
    class CLI < Rubysmith::Builders::Abstract
      using Refinements::Struct

      def call
        return configuration unless configuration.build_cli

        render
        configuration
      end

      private

      def render = private_methods.sort.grep(/render_/).each { |method| __send__ method }

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

      def render_core
        content = configuration.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(configuration.merge(template_path: path)).render }
      end

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

      def render_specs
        return unless configuration.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(configuration.merge(template_path: path)).render }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gemsmith-21.10.0 lib/gemsmith/builders/cli.rb
gemsmith-21.9.0 lib/gemsmith/builders/cli.rb