Sha256: 0372eba557534a652781f69790b387f33225dbccb95545fbd1e708e53b382fc6

Contents?: true

Size: 733 Bytes

Versions: 2

Compression:

Stored size: 733 Bytes

Contents

#          Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the Ruby license.

class OrderedSet
  instance_methods.each { |m| undef_method m unless m =~ /^__/ }

  def initialize(*args)
    @set = *args
    @set ||= []
    @set = [@set] unless Array === @set
    @set.uniq!
  end

  def method_missing(meth, *args, &block)
    case meth.to_s
    when /push|unshift|\<\</
      @set.delete *args
    when '[]='
      @set.map! do |e|
        if Array === args.last
          args.last.include?(e) ? nil : e
        else
          args.last == e ? nil : e
        end
      end
    end
    @set.__send__(meth, *args, &block)
  ensure
    @set.delete nil
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ramaze-0.2.0 lib/ramaze/snippets/ordered_set.rb
ramaze-0.2.1 lib/ramaze/snippets/ordered_set.rb