Sha256: 257cacc77330a5c90b2e562ffbca9d7e968f2bc80e402246dc19caee85c625b7

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

module Ruby
  module Signature
    class TypeName
      attr_reader :namespace
      attr_reader :name
      attr_reader :kind

      def initialize(namespace:, name:)
        @namespace = namespace
        @name = name
        @kind = case name.to_s[0,1]
                when /[A-Z]/
                  :class
                when /[a-z]/
                  :alias
                when "_"
                  :interface
                end
      end

      def ==(other)
        other.is_a?(self.class) && other.namespace == namespace && other.name == name
      end

      alias eql? ==

      def hash
        self.class.hash ^ namespace.hash ^ name.hash
      end

      def to_s
        "#{namespace.to_s}#{name}"
      end

      def to_json(*a)
        to_s.to_json(*a)
      end

      def to_namespace
        namespace.append(self.name)
      end

      def class?
        kind == :class
      end

      def alias?
        kind == :alias
      end

      def absolute!
        self.class.new(namespace: namespace.absolute!, name: name)
      end

      def absolute?
        namespace.absolute?
      end

      def relative!
        self.class.new(namespace: namespace.relative!, name: name)
      end

      def interface?
        kind == :interface
      end

      def with_prefix(namespace)
        self.class.new(namespace: namespace + self.namespace, name: name)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
steep-0.14.0 vendor/ruby-signature/lib/ruby/signature/type_name.rb
steep-0.13.0 vendor/ruby-signature/lib/ruby/signature/type_name.rb
steep-0.12.0 vendor/ruby-signature/lib/ruby/signature/type_name.rb