Sha256: dbea67998d974a0be051a45b7b645af7f6d5e09894fc7242fd08f456d108bc1d

Contents?: true

Size: 1.66 KB

Versions: 4

Compression:

Stored size: 1.66 KB

Contents

module Yoda
  module Store
    module Objects
      # @todo Rename to SingletonClassObject
      class MetaClassObject < NamespaceObject
        class Connected < NamespaceObject::Connected
          delegate_to_object :base_class_address

          # @return [NamespaceObject::Connected]
          def superclass
            ancestor_tree.superclass.with_connection(**connection_options)
          end

          # @return [Base::Connected, nil]
          def instance
            registry.get(path)&.with_connection(**connection_options)
          end
        end

        # @param path [String]
        # @return [String]
        def self.address_of(path)
          "#{path}%class"
        end

        # @param address [String]
        # @return [true, false]
        def self.meta_class_address?(address)
          address.end_with?('%class')
        end

        # @param address [String]
        # @return [String]
        def self.path_of(address)
          address.sub(/%class$/, '')
        end

        # @param path [String]
        # @param document [Document, nil]
        # @param tag_list [TagList, nil]
        # @param instance_method_paths [Array<String>]
        # @param instance_mixin_paths [Array<String>]
        def initialize(**kwargs)
          super(**kwargs)
        end

        # @return [String]
        def name
          @name ||= path.match(MODULE_TAIL_PATTERN) { |md| md[1] || md[2] }
        end

        def kind
          :meta_class
        end

        # @return [String]
        def address
          MetaClassObject.address_of(path)
        end

        # @return [String]
        def base_class_address
          path
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
yoda-language-server-0.10.1 lib/yoda/store/objects/meta_class_object.rb
yoda-language-server-0.10.0 lib/yoda/store/objects/meta_class_object.rb
yoda-language-server-0.9.0 lib/yoda/store/objects/meta_class_object.rb
yoda-language-server-0.8.0 lib/yoda/store/objects/meta_class_object.rb