ruby--ruby/lib/xsd/namedelements.rb

91 lines
1.6 KiB
Ruby

=begin
XSD4R - WSDL named element collection.
Copyright (C) 2002, 2003 NAKAMURA, Hiroshi.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PRATICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 675 Mass
Ave, Cambridge, MA 02139, USA.
=end
module XSD
class NamedElements
include Enumerable
def initialize
@elements = []
@cache = {}
end
def dup
o = NamedElements.new
o.elements = @elements.dup
o
end
def size
@elements.size
end
def [](idx)
if idx.is_a?(Numeric)
@elements[idx]
else
@cache[idx] ||= @elements.find { |item| item.name == idx }
end
end
def find_name(name)
@elements.find { |item| item.name.name == name }
end
def each
@elements.each do |element|
yield(element)
end
end
def <<(rhs)
@elements << rhs
self
end
def delete(rhs)
@elements.delete(rhs)
end
def +(rhs)
o = NamedElements.new
o.elements = @elements + rhs.elements
o
end
def concat(rhs)
@elements.concat(rhs.elements)
self
end
protected
def elements=(rhs)
@elements = rhs
end
def elements
@elements
end
end
end