# File htree/traverse.rb, line 435 def fetch_attribute(uname, *rest, &block) if 1 < rest.length raise ArgumentError, "wrong number of arguments (#{1+rest.length} for 2)" end if !rest.empty? && block_given? raise ArgumentError, "block supersedes default value argument" end uname = uname.universal_name if uname.respond_to? :universal_name return update_attribute_hash.fetch(uname) { if block_given? return yield(uname) elsif !rest.empty? return rest[0] else raise IndexError, "attribute not found: #{uname.inspect}" end } end