Sha256: dd149991438324a398d0e51dd629fad007ebebf206a105ca87f216cad268a649

Contents?: true

Size: 863 Bytes

Versions: 22

Compression:

Stored size: 863 Bytes

Contents

# frozen_string_literal: true

require "refinements/pathname"

module Rubysmith
  # Represents a pathway which has source start and destination end.
  Pathway = Struct.new :start_root, :start_path, :end_root, keyword_init: true do
    using Refinements::Pathname

    # :reek:TooManyStatements
    def initialize *arguments
      super
      each_pair { |key, value| self[key] = Pathname value }
      self[:start_path] = start_path.absolute? ? start_path : start_root.join(start_path)
      freeze
    end

    def with(attributes) = self.class.new(to_h.merge(attributes))

    def end_path = end_root.join(from_parent, start_path.basename)

    def partial? = start_path.basename.fnmatch?("_*")

    private

    def from_parent
      return end_root.join start_path.parent if start_path.relative?

      start_path.relative_parent start_root
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
rubysmith-8.1.0 lib/rubysmith/pathway.rb
rubysmith-8.0.0 lib/rubysmith/pathway.rb
rubysmith-7.9.0 lib/rubysmith/pathway.rb
rubysmith-7.8.0 lib/rubysmith/pathway.rb
rubysmith-7.7.0 lib/rubysmith/pathway.rb
rubysmith-7.6.0 lib/rubysmith/pathway.rb
rubysmith-7.5.0 lib/rubysmith/pathway.rb
rubysmith-7.4.0 lib/rubysmith/pathway.rb
rubysmith-7.3.0 lib/rubysmith/pathway.rb
rubysmith-7.2.0 lib/rubysmith/pathway.rb
rubysmith-7.1.0 lib/rubysmith/pathway.rb
rubysmith-7.0.0 lib/rubysmith/pathway.rb
rubysmith-6.10.0 lib/rubysmith/pathway.rb
rubysmith-6.9.0 lib/rubysmith/pathway.rb
rubysmith-6.6.0 lib/rubysmith/pathway.rb
rubysmith-6.5.0 lib/rubysmith/pathway.rb
rubysmith-6.4.0 lib/rubysmith/pathway.rb
rubysmith-6.3.0 lib/rubysmith/pathway.rb
rubysmith-6.2.1 lib/rubysmith/pathway.rb
rubysmith-6.2.0 lib/rubysmith/pathway.rb