diff options
Diffstat (limited to 'Library/Homebrew/extend/set.rb')
| -rw-r--r-- | Library/Homebrew/extend/set.rb | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Library/Homebrew/extend/set.rb b/Library/Homebrew/extend/set.rb new file mode 100644 index 000000000..b45b85de9 --- /dev/null +++ b/Library/Homebrew/extend/set.rb @@ -0,0 +1,24 @@ +require 'set' + +class ComparableSet < Set + def add new + # smileys only + return super new unless new.respond_to? :> + + objs = find_all { |o| o.class == new.class } + objs.each do |o| + return self if o > new + delete o + end + super new + end + + alias_method :<<, :add + + # Set#merge bypasses enumerating the set's contents, + # so the subclassed #add would never be called + def merge enum + enum.is_a?(Enumerable) or raise ArgumentError, "value must be enumerable" + enum.each { |o| add(o) } + end +end |
