Sha256: 3c8dc400347fb977c1784923b7b2541498cc7504ceed779d2fe72d6f4674ea87

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

require_relative './node'
require_relative './path_set'

module UrlRegexp
  class Path < Node
    attr_reader :label, :paths
    attr_accessor :path_end

    def initialize(label = nil, parent = nil)
      @label = label
      @parent = parent
      @paths = PathSet.new
      @path_end = false
    end

    def hash
      [@label, @paths.hash].hash
    end

    def append(path)
      if path == ''
        @paths.append(Path.new('', self))
      else
        if @parent.nil?
          _, label, rest = path.split('/', 3)
        else
          label, rest = path.split('/', 2)
        end
        if label
          unless p = @paths.find { |_p| _p.label == label }
            p = Path.new(label, self)
            @paths.append(p)
          end
          if rest.nil?
            p.path_end = true
          else
            p.append(rest)
          end
        end
      end
    end

    def to_regexp_s
      s = @paths.to_regexp_s
      s = "/#{s}" unless s.nil?
      s = "(#{s})?" if @path_end && s.to_s != ''
      s = "#{Regexp.quote(@label)}#{s}" if @label
      s
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
url_regexp-0.1.0 lib/url_regexp/path.rb