Sha256: 9cd27ad71ccfed077bfe5f2f08398ea578b80385a64a7a7fd1f0a18268517292

Contents?: true

Size: 942 Bytes

Versions: 9

Compression:

Stored size: 942 Bytes

Contents

# http://tfletcher.com/lib/dictable.rb
 
# Provides dictionary/hash-like mixin for any enumerable object that yields
# key-value pairs and responds_to :update (the included Dict builds upon Array).
#
# For example:
#
#   require 'dictable'
#
#   a = Dict.new
#  
#   d[:one] = 1
#   d[:two] = 2
#  
#   d[:one]    -> 1
#   d[:ten]    -> nil
#              
#   d.keys     -> [:one, :two]
#   d.values   -> [1, 2]
#   d.to_hash  -> {:two=>2, :one=>1}
#
#
module Dictable
  def [](key)
    each { |(k, v)| return v if k == key }
    return nil
  end
  def []=(key, value)
    update key, value
  end
  def keys
    inject([]) { |keys, (k, v)| keys << k }
  end
  def values
    inject([]) { |values, (k, v)| values << v }
  end
  def to_hash
    inject({}) { |hash, (k, v)| hash.update({ k => v }) }
  end
end

class Dict < Array
  include Dictable
  def update(key, value)
    delete_if { |(k, v)| k == key }
    push [ key, value ]
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
quality_extensions-1.4.0 lib/quality_extensions/dictable.rb
quality_extensions-1.3.2 lib/quality_extensions/dictable.rb
quality_extensions-1.3.1 lib/quality_extensions/dictable.rb
quality_extensions-1.3.0 lib/quality_extensions/dictable.rb
quality_extensions-1.1.6 lib/quality_extensions/dictable.rb
quality_extensions-1.1.4 lib/quality_extensions/dictable.rb
quality_extensions-1.1.2 lib/quality_extensions/dictable.rb
quality_extensions-1.1.3 lib/quality_extensions/dictable.rb
quality_extensions-1.1.1 lib/quality_extensions/dictable.rb