Sha256: 87d5c94cfb9dbee9fe581c8ef180d58993b8231f8dfd7a0acfbc3db679c9287c

Contents?: true

Size: 1021 Bytes

Versions: 1

Compression:

Stored size: 1021 Bytes

Contents

# typed: true
# frozen_string_literal: true

require('cli/ui')

module CLI
  module UI
    module Widgets
      class Base
        extend T::Sig
        extend T::Helpers
        abstract!

        class << self
          extend T::Sig

          sig { params(argstring: String).returns(String) }
          def call(argstring)
            new(argstring).render
          end
        end

        sig { params(argstring: String).void }
        def initialize(argstring)
          pat = self.class.argparse_pattern
          unless (@match_data = pat.match(argstring))
            raise(Widgets::InvalidWidgetArguments.new(argstring, pat))
          end

          @match_data.names.each do |name|
            instance_variable_set(:"@#{name}", @match_data[name])
          end
        end

        class << self
          extend T::Sig

          sig { abstract.returns(Regexp) }
          def argparse_pattern; end
        end

        sig { abstract.returns(String) }
        def render; end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cli-ui-2.3.0 lib/cli/ui/widgets/base.rb