# File lib/libxml/ext/uniq_mixin.rb, line 72 def self.included(base) base.send(:alias_method, :_libxml_ext_original_to_a, :to_a) # overwrite original methods instance_methods.each { |method| base.send(:define_method, method, instance_method(method)) } end
# File lib/libxml/ext/uniq_mixin.rb, line 38 def to_a ary = _libxml_ext_original_to_a seen = Hash.new { |h, k| h[k] = true; false } # return unique nodes according to their #to_s @_uniq ? ary.delete_if { |node| seen[node.to_s] } : ary end
# File lib/libxml/ext/uniq_mixin.rb, line 46 def uniq proxy = self.class.new.uniq! proxy.instance_variable_set(:@_this, self) class << proxy (instance_methods.map { |m| m.to_s } - DELEGATORS).each { |method| undef_method(method) unless method =~ /\A__/ || method == 'object_id' } def method_missing(*args) @_this.send(*args, &block_given? ? Proc.new : nil) end end proxy end
# File lib/libxml/ext/uniq_mixin.rb, line 63 def uniq! @_uniq = true self end
# File lib/libxml/ext/uniq_mixin.rb, line 68 def uniq? @_uniq end