1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/yaml/ypath.rb
tenderlove e959fda8ff * lib/yaml/encoding.rb: YAML.encode, YAML.decode are deprecated.
* lib/yaml/stringio.rb: yaml/stringio.rb is deprecated.

* lib/yaml/ypath.rb: YAML::YPath is deprecated.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27057 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-03-26 03:33:08 +00:00

54 lines
1.4 KiB
Ruby

#
# YAML::YPath
#
warn "#{caller[0]}: YAML::YPath is deprecated" if $VERBOSE
module YAML
class YPath
attr_accessor :segments, :predicates, :flags
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
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
end
end