# class Syck::YPath

### Attributes

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

### Public Class Methods

each_path( str ) { |y_path| ... } click to toggle source

    # File lib/syck/ypath.rb, line 27
    def self.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 lib/syck/ypath.rb, line 11
    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