Parent

Class/Module Index [+]

Quicksearch

OrderedHash

AUTHOR

jan molic /mig/at/1984/dot/cz/

DESCRIPTION

Hash with preserved order and some array-like extensions
Public domain.

THANKS

Andrew Johnson for his suggestions and fixes of Hash[],
merge, to_a, inspect and shift

Attributes

order[RW]
to_yaml_style[RW]

Public Class Methods

[](*args) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 16
def [](*args)
  hsh = OrderedHash.new
  if args[0].is_a?(Hash)
    hsh.replace args[0]
  elsif args.size.odd?
    raise ArgumentError, 'odd number of elements for Hash'
  else
    0.step(args.size - 1, 2) do |a|
      b = a + 1
      hsh[args[a]] = args[b]
    end
  end
  hsh
end
new(*a, &b) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 32
def initialize(*a, &b)
  super
  @order = []
end
to_yaml(opts = {}) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 207
def to_yaml(opts = {})
  @__yaml_inline ? @__yaml_inline_meth[ opts ] : super
rescue
  @to_yaml_style = :inline
  super
end

Public Instance Methods

==(other) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 48
def ==(other)
  return false if @order != other.order
  super other
end
[]=(a, b) click to toggle source
Alias for: store
__class__() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 190
def __class__
  OrderedHash
end
class() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 186
def class
  Hash
end
clear() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 53
def clear
  @order = []
  super
end
delete(key) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 58
def delete(key)
  @order.delete key
  super
end
delete_if() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 79
def delete_if
  @order.clone.each do |k|
    delete k if yield(k)
  end
  self
end
each() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 73
def each
  @order.each { |k| yield k, self[k] }
  self
end
Also aliased as: each_pair
each_key() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 63
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/nanoc/base/ordered_hash.rb, line 68
def each_value
  @order.each { |k| yield self[k] }
  self
end
each_with_index() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 223
def each_with_index
  @order.each_with_index { |k, index| yield k, self[k], index }
  self
end
first() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 96
def first
  { @order.first => self[@order.first] }
end
inspect() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 164
def inspect
  ary = []
  each { |k, v| ary << k.inspect + '=>' + v.inspect }
  '{' + ary.join(', ') + '}'
end
invert() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 104
def invert
  hsh2 = {}
  @order.each { |k| hsh2[self[k]] = k }
  hsh2
end
keys() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 92
def keys
  @order
end
last() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 100
def last
  { @order.last => self[@order.last] }
end
merge(hsh2) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 176
def merge(hsh2)
  dup update(hsh2)
end
merge!(hsh2) click to toggle source
Alias for: update
orig_store(a, b) click to toggle source
Alias for: store
pop() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 149
def pop
  key = @order.last
  key ? [key, delete(key)] : nil
end
push(k, v) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 139
def push(k, v)
  if self.include? k
    false
  else
    @order.push k
    orig_store(k, v)
    true
  end
end
reject(&block) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 110
def reject(&block)
  dup.delete_if(&block)
end
reject!(&block) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 114
def reject!(&block)
  hsh2 = reject(&block)
  self == hsh2 ? nil : hsh2
end
replace(hsh2) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 119
def replace(hsh2)
  @order = hsh2.keys
  super hsh2
end
select() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 180
def select
  ary = []
  each { |k, v| ary << [k, v] if yield k, v }
  ary
end
shift() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 124
def shift
  key = @order.first
  key ? [key, delete(key)] : super
end
store(a, b) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 42
def store(a, b)
  @order.push a unless key? a
  super a, b
end
Also aliased as: orig_store, []=
store_only(a, b) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 37
def store_only(a, b)
  store a, b
end
to_a() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 154
def to_a
  ary = []
  each { |k, v| ary << [k, v] }
  ary
end
to_s() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 160
def to_s
  to_a.to_s
end
unshift(k, v) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 129
def unshift(k, v)
  if self.include? k
    false
  else
    @order.unshift k
    orig_store(k, v)
    true
  end
end
update(hsh2) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 170
def update(hsh2)
  hsh2.each { |k, v| self[k] = v }
  self
end
Also aliased as: merge!
values() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 86
def values
  ary = []
  @order.each { |k| ary.push self[k] }
  ary
end
yaml_inline!() click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 219
def yaml_inline!
  self.yaml_inline = true
end
yaml_inline=(bool) click to toggle source
# File lib/nanoc/base/ordered_hash.rb, line 195
def yaml_inline=(bool)
  if respond_to?('to_yaml_style')
    self.to_yaml_style = :inline
  else
    unless defined? @__yaml_inline_meth
      @__yaml_inline_meth =
      lambda do |opts|
        YAML.quick_emit(object_id, opts) do |emitter|
          emitter << '{ ' << map { |kv| kv.join ': ' }.join(', ') << ' }'
        end
      end
      class << self
        def to_yaml(opts = {})
          @__yaml_inline ? @__yaml_inline_meth[ opts ] : super
        rescue
          @to_yaml_style = :inline
          super
        end
      end
    end
  end
  @__yaml_inline = bool
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.