Sha256: 69edac2934bf6b3266e5143f4bdfd01fa672b36251a5cc55623560fa69bc805b

Contents?: true

Size: 1.9 KB

Versions: 8

Compression:

Stored size: 1.9 KB

Contents

module Yoda
  module Model
    class Path
      attr_reader :name

      # @param path [Path, String]
      # @return [Path]
      def self.build(path)
        path.is_a?(Path) ? path : new(path)
      end

      # @param names [Array<Path, String>]
      # @return [Path]
      def self.from_names(names)
        new(names.join('::'))
      end

      # @param name [String]
      def initialize(name)
        fail ArgumentError, name unless name.is_a?(String)
        @name = name
      end

      def absolute?
        name.start_with?('::')
      end

      # @return [String]
      def basename
        @basename ||= begin
          if name.end_with?('::')
            ''
          else
            name.split('::').last || ''
          end
        end
      end

      # @return [String]
      def spacename
        @spacename ||= begin
          if name.end_with?('::')
            name.gsub(/::\Z/, '')
          else
            name.split('::').slice(0..-2).join('::')
          end
        end
      end

      # @return [String]
      def to_s
        name
      end

      def split
        name.gsub(/\A::/, '').split('::') + (name.end_with?('::') ? [''] : [])
      end

      # @param another [Path, String]
      # @return [Path]
      def concat(another)
        if self.class.build(another).absolute?
          self
        else
          self.class.new([self.to_s, another.to_s].reject(&:empty?).join('::'))
        end
      end

      # @return [Array<String>]
      def namespaces
        name.split('::')
      end

      # @return [Array<Path>]
      def parent_paths
        if spacename.empty?
          []
        else
          [spacename] + Path.new(spacename).parent_paths
        end
      end

      def hash
        [self.class.name, name].hash
      end

      def ==(another)
        eql?(another)
      end

      def eql?(another)
        another.is_a?(Path) && name == another.name
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
yoda-language-server-0.7.2 lib/yoda/model/path.rb
yoda-language-server-0.7.1 lib/yoda/model/path.rb
yoda-language-server-0.7.0 lib/yoda/model/path.rb
yoda-language-server-0.6.2 lib/yoda/model/path.rb
yoda-language-server-0.6.1 lib/yoda/model/path.rb
yoda-language-server-0.6.0 lib/yoda/model/path.rb
yoda-language-server-0.5.0 lib/yoda/model/path.rb
yoda-language-server-0.4.0 lib/yoda/model/path.rb