Sha256: 2a7a223ccec725da939fb64721e84a2ac30cda9d3263e5f48692570226b37d18

Contents?: true

Size: 916 Bytes

Versions: 2

Compression:

Stored size: 916 Bytes

Contents

# frozen_string_literal: true

require_relative 'key_pointer'

module Teton
  # Understands a fully-qualified path to a resource or resources.
  class Key
    attr_reader :path, :parts, :separator

    def initialize(path, separator:)
      raise ArgumentError, 'separator is required' if separator.to_s.empty?
      raise ArgumentError, 'path is required'      if path.to_s.empty?

      @path      = path.to_s
      @parts     = path.to_s.split(separator)
      @separator = separator.to_s

      freeze
    end

    def to_s(suffix_keys = [])
      suffix_keys = Array(suffix_keys)

      (parts + suffix_keys).join(separator)
    end

    def traverse
      parts.each_with_index do |_part, index|
        yield KeyPointer.new(self, index)
      end
    end

    def entry?
      parts.length.even?
    end

    def resource?
      parts.length.odd?
    end

    def last_part
      parts.last
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
teton-0.0.3 lib/teton/key.rb
teton-0.0.2 lib/teton/key.rb