module LibXML::Ext::Uniq

Constants

DELEGATORS

Public Class Methods

included(base) click to toggle source
# 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

Public Instance Methods

to_a() click to toggle source
# 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
uniq() click to toggle source
# 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
uniq!() click to toggle source
# File lib/libxml/ext/uniq_mixin.rb, line 63
def uniq!
  @_uniq = true
  self
end
uniq?() click to toggle source
# File lib/libxml/ext/uniq_mixin.rb, line 68
def uniq?
  @_uniq
end