Parent

Class/Module Index [+]

Quicksearch

Ramaze::Dictionary

Public Class Methods

[]( *args ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 82
def []( *args )
  hsh = new
  if Hash === args[0]
    hsh.replace(args[0])
  elsif (args.size % 2) != 0
    raise ArgumentError, "odd number of elements for Hash"
  else
    while !args.empty?
      hsh[args.shift] = args.shift
    end
  end
  hsh
end
alpha( *args, &block ) click to toggle source

Alternate to new which creates a dictionary sorted by key.

d = Dictionary.alpha
d["z"] = 1
d["y"] = 2
d["x"] = 3
d  #=> {"x"=>3,"y"=>2,"z"=>2}

This is equivalent to:

Dictionary.new.order_by { |key,value| key }
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 114
def alpha( *args, &block )
  new( *args, &block ).order_by_key
end
auto( *args ) click to toggle source

Alternate to new which auto-creates sub-dictionaries as needed.

d = Dictionary.auto
d["a"]["b"]["c"] = "abc"  #=> { "a"=>{"b"=>{"c"=>"abc"}}}
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 123
def auto( *args )
  #AutoDictionary.new(*args)
  leet = lambda { |hsh, key| hsh[key] = new( &leet ) }
  new(*args, &leet)
end
new( *args, &blk ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 130
def initialize( *args, &blk )
  @order = []
  @order_by = nil
  @hash = Hash.new( *args, &blk )
end
new_by( *args, &blk ) click to toggle source

Like new but the block sets the order.

# File lib/ramaze/snippets/ramaze/dictionary.rb, line 98
def new_by( *args, &blk )
  new(*args).order_by(&blk)
end

Public Instance Methods

<<(kv) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 321
def <<(kv)
  push(*kv)
end
==( hsh2 ) click to toggle source

def ==( hsh2 )

return false if @order != hsh2.order
super hsh2

end

# File lib/ramaze/snippets/ramaze/dictionary.rb, line 202
def ==( hsh2 )
  if hsh2.is_a?( Dictionary )
    @order == hsh2.order &&
      @hash  == hsh2.instance_variable_get("@hash")
  else
    false
  end
end
[](k) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 211
def [] k
  @hash[ k ]
end
[]=(k, i=nil, v=nil) click to toggle source

Store operator.

h[key] = value

Or with additional index.

h[key,index] = value
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 227
def []=(k, i=nil, v=nil)
  if v
    insert(i,k,v)
  else
    store(k,i)
  end
end
clear() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 245
def clear
  @order = []
  @hash.clear
end
delete( key ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 250
def delete( key )
  @order.delete( key )
  @hash.delete( key )
end
delete_if() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 271
def delete_if
  order.clone.each { |k| delete k if yield }
  self
end
dup() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 356
def dup
  self.class[*to_a.flatten]
end
each() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 265
def each
  order.each { |k| yield( k,@hash[k] ) }
  self
end
Also aliased as: each_pair
each_key() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 255
def each_key
  order.each { |k| yield( k ) }
  self
end
each_pair() click to toggle source
Alias for: each
each_value() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 260
def each_value
  order.each { |k| yield( @hash[k] ) }
  self
end
empty?() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 395
def empty?
  @hash.empty?
end
fetch( k ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 215
def fetch( k )
  @hash.fetch( k )
end
find() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 377
def find
  each{|k,v| return k, v if yield(k,v) }
  return nil
end
first() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 382
def first
  @hash[order.first]
end
insert( i,k,v ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 235
def insert( i,k,v )
  @order.insert( i,k )
  @hash.store( k,v )
end
inspect() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 350
def inspect
  ary = []
  each {|k,v| ary << k.inspect + "=>" + v.inspect}
  '{' + ary.join(", ") + '}'
end
invert() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 286
def invert
  hsh2 = self.class.new
  order.each { |k| hsh2[@hash[k]] = k }
  hsh2
end
keys() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 282
def keys
  order
end
last() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 386
def last
  @hash[order.last]
end
length() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 390
def length
  @order.length
end
Also aliased as: size
merge( hsh2 ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 367
def merge( hsh2 )
  self.dup.update(hsh2)
end
merge!( hsh2 ) click to toggle source
Alias for: update
order() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 136
def order
  reorder if @order_by
  @order
end
order_by( &block ) click to toggle source

Keep dictionary sorted by a specific sort order.

# File lib/ramaze/snippets/ramaze/dictionary.rb, line 143
def order_by( &block )
  @order_by = block
  order
  self
end
order_by_key() click to toggle source

Keep dictionary sorted by key.

d = Dictionary.new.order_by_key
d["z"] = 1
d["y"] = 2
d["x"] = 3
d  #=> {"x"=>3,"y"=>2,"z"=>2}

This is equivalent to:

Dictionary.new.order_by { |key,value| key }

The initializer Dictionary#alpha also provides this.

# File lib/ramaze/snippets/ramaze/dictionary.rb, line 163
def order_by_key
  @order_by = lambda { |k,v| k }
  order
  self
end
order_by_value() click to toggle source

Keep dictionary sorted by value.

d = Dictionary.new.order_by_value
d["z"] = 1
d["y"] = 2
d["x"] = 3
d  #=> {"x"=>3,"y"=>2,"z"=>2}

This is equivalent to:

Dictionary.new.order_by { |key,value| value }
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 181
def order_by_value
  @order_by = lambda { |k,v| v }
  order
  self
end
pop() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 335
def pop
  key = order.last
  key ? [key,delete(key)] : nil
end
push( k,v ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 325
def push( k,v )
  unless @hash.include?( k )
    @order.push( k )
    @hash.store( k,v )
    true
  else
    false
  end
end
reject( &block ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 292
def reject( &block )
  self.dup.delete_if(&block)
end
reject!( &block ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 296
def reject!( &block )
  hsh2 = reject(&block)
  self == hsh2 ? nil : hsh2
end
reorder() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 189
def reorder
  if @order_by
    assoc = @order.collect{ |k| [k,@hash[k]] }.sort_by( &@order_by )
    @order = assoc.collect{ |k,v| k }
  end
  @order
end
replace( hsh2 ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 301
def replace( hsh2 )
  @order = hsh2.order
  @hash = hsh2.hash
end
select() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 371
def select
  ary = []
  each { |k,v| ary << [k,v] if yield k,v }
  ary
end
shift() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 306
def shift
  key = order.first
  key ? [key,delete(key)] : super
end
size() click to toggle source
Alias for: length
store( a,b ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 240
def store( a,b )
  @order.push( a ) unless @hash.has_key?( a )
  @hash.store( a,b )
end
to_a() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 340
def to_a
  ary = []
  each { |k,v| ary << [k,v] }
  ary
end
to_s() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 346
def to_s
  self.to_a.to_s
end
unshift( k,v ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 311
def unshift( k,v )
  unless @hash.include?( k )
    @order.unshift( k )
    @hash.store( k,v )
    true
  else
    false
  end
end
update( hsh2 ) click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 360
def update( hsh2 )
  hsh2.each { |k,v| self[k] = v }
  reorder
  self
end
Also aliased as: merge!
values() click to toggle source
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 276
def values
  ary = []
  order.each { |k| ary.push @hash[k] }
  ary
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.