Module: Gorillib::Hashlike::OverrideEnumerable

Defined in:
lib/gorillib/hashlike.rb

Overview

Overrides the implementation in Enumerable, which iterates on keys, not key/value pairs

Instance Method Summary collapse

Instance Method Details

#hsh.rejectHashlike #hsh.reject(->an_enumerator) ⇒ Enumerator

Deletes every key-value pair from +hsh+ for which +block+ evaluates to true (similar to Hashlike#delete_if), but works on (and returns) a copy of the +hsh+. Equivalent to hsh.dup.delete_if.

Overrides the implementation in Enumerable, which does the keys wrong.

Examples:

hsh = { :a => 100, :b => 200, :c => 300 }
hsh.reject{|key, val| key.to_s >= "b" }   # => { :a => 100 }
hsh # => { :a => 100, :b => 200, :c => 300 }

hsh = { :a => 100, :b => 200, :c => 300 }
hsh.reject{|key, val| key.to_s >= "z" }   # => { :a => 100, :b => 200, :c => 300 }
hsh # => { :a => 100, :b => 200, :c => 300 }

Overloads:

  • #hsh.rejectHashlike

    Deletes every key-value pair from +hsh+ for which +block+ evaluates truthy.

    Returns:

  • #hsh.reject(->an_enumerator) ⇒ Enumerator

    with no block, returns a raw enumerator

    Returns:

    • (Enumerator)


686
687
688
689
# File 'lib/gorillib/hashlike.rb', line 686

def reject(&block)
  return enum_for(:reject) unless block_given?
  self.dup.delete_if(&block)
end

#hsh.selectHashlike #hsh.select(->an_enumerator) ⇒ Enumerator

Deletes every key-value pair from +hsh+ for which +block+ evaluates to false (similar to Hashlike#keep_if), but works on (and returns) a copy of the +hsh+. Equivalent to hsh.dup.keep_if.

Overrides the implementation in Enumerable, which does the keys wrong.

Examples:

hsh = { :a => 100, :b => 200, :c => 300 }
hsh.select{|key, val| key.to_s >= "b" }   # => { :b => 200, :c => 300 }
hsh # => { :a => 100, :b => 200, :c => 300 }

hsh = { :a => 100, :b => 200, :c => 300 }
hsh.select{|key, val| key.to_s >= "z" }   # => { }
hsh # => { :a => 100, :b => 200, :c => 300 }

Overloads:

  • #hsh.selectHashlike

    Deletes every key-value pair from +hsh+ for which +block+ evaluates truthy.

    Returns:

  • #hsh.select(->an_enumerator) ⇒ Enumerator

    with no block, returns a raw enumerator

    Returns:

    • (Enumerator)


715
716
717
718
# File 'lib/gorillib/hashlike.rb', line 715

def select(&block)
  return enum_for(:select) unless block_given?
  self.dup.keep_if(&block)
end