In Files

  • yaml/ypath.rb

Parent

Methods

YAML::YPath

Attributes

flags[RW]
predicates[RW]
segments[RW]

Public Class Methods

each_path( str ) click to toggle source
 
               # File yaml/ypath.rb, line 25
def YPath.each_path( str )
    #
    # Find choices
    #
    paths = []
    str = "(#{ str })"
    while str.sub!( /\(([^()]+)\)/, "\n#{ paths.length }\n" )
        paths.push $1.split( '|' )
    end

    #
    # Construct all possible paths
    #
    all = [ str ]
    ( paths.length - 1 ).downto( 0 ) do |i|
        all = all.collect do |a|
            paths[i].collect do |p|
                a.gsub( /\n#{ i }\n/, p )
            end
        end.flatten.uniq
    end
    all.collect do |path|
        yield YPath.new( path )
    end
end
            
new( str ) click to toggle source
 
               # File yaml/ypath.rb, line 9
def initialize( str )
    @segments = []
    @predicates = []
    @flags = nil
    while str =~ /^\/?(\/|[^\/\[]+)(?:\[([^\]]+)\])?/
        @segments.push $1
        @predicates.push $2
        str = $'
    end
    unless str.to_s.empty?
        @segments += str.split( "/" )
    end
    if @segments.length == 0
        @segments.push "."
    end
end