Sha256: 254c5b1524fdb4f762bcc347a0dc91a228d7ff78c3a38b21ddf6264429d203fa

Contents?: true

Size: 1.52 KB

Versions: 15

Compression:

Stored size: 1.52 KB

Contents

require "refinements/structs"

<% namespace do %>
  module CLI
    module Parsers
      # Handles parsing of Command Line Interface (CLI) core options.
      class Core
        include Import[:specification]

        using Refinements::Structs

        def self.call(...) = new(...).call

        def initialize configuration = Container[:configuration],
                       client: Parser::CLIENT,
                       **dependencies

          super(**dependencies)
          @configuration = configuration
          @client = client
        end

        def call arguments = []
          client.banner = specification.labeled_summary
          client.separator "\nUSAGE:\n"
          collate
          client.parse arguments
          configuration
        end

        private

        attr_reader :configuration, :client

        def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }

        def add_config
          client.on "-c",
                    "--config ACTION",
                    %i[edit view],
                    "Manage gem configuration: edit or view." do |action|
            configuration.merge! action_config: action
          end
        end

        def add_version
          client.on "-v", "--version", "Show gem version." do
            configuration.merge! action_version: true
          end
        end

        def add_help
          client.on "-h", "--help", "Show this message." do
            configuration.merge! action_help: true
          end
        end
      end
    end
  end
<% end %>

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
gemsmith-19.1.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-19.0.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.9.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.8.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.7.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.6.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.5.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.4.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.3.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.2.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.1.1 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.1.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.0.2 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.0.1 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb
gemsmith-18.0.0 lib/gemsmith/templates/%project_name%/lib/%project_path%/cli/parsers/core.rb.erb