Class: DBD4::OrderedHash

Inherits:
Hash
  • Object
show all
Defined in:
lib/dbd4/ordered_hash.rb

Direct Known Subclasses

Relations

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*a, &b) ⇒ OrderedHash

Returns a new instance of OrderedHash.



22
23
24
25
# File 'lib/dbd4/ordered_hash.rb', line 22

def initialize(*a, &b)
	super
	@order = []
end

Instance Attribute Details

#orderObject

Returns the value of attribute order.



4
5
6
# File 'lib/dbd4/ordered_hash.rb', line 4

def order
  @order
end

Class Method Details

.[](*args) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/dbd4/ordered_hash.rb', line 8

def [] *args
	hsh = OrderedHash.new
	if Hash === args[0]
		hsh.replace args[0]
	elsif (args.size % 2) != 0
		raise ArgumentError, "odd number of elements for Hash"
	else
		hsh[args.shift] = args.shift while args.size > 0
	end
	hsh
end

Instance Method Details

#==(hsh2) ⇒ Object



40
41
42
43
44
# File 'lib/dbd4/ordered_hash.rb', line 40

def == hsh2
	return hsh2==self if !hsh2.is_a?(OrderedHash)
	return false if @order != hsh2.order
	super hsh2
end

#clearObject



46
47
48
49
# File 'lib/dbd4/ordered_hash.rb', line 46

def clear
	@order = []
	super
end

#delete(key) ⇒ Object



51
52
53
54
# File 'lib/dbd4/ordered_hash.rb', line 51

def delete key
	@order.delete key
	super
end

#delete_ifObject



73
74
75
76
77
78
# File 'lib/dbd4/ordered_hash.rb', line 73

def delete_if
	@order.clone.each { |k|
		delete k if yield
	}
	self
end

#eachObject Also known as: each_pair



66
67
68
69
# File 'lib/dbd4/ordered_hash.rb', line 66

def each
	@order.each { |k| yield k,self[k] }
	self
end

#each_keyObject



56
57
58
59
# File 'lib/dbd4/ordered_hash.rb', line 56

def each_key
	@order.each { |k| yield k }
	self
end

#each_valueObject



61
62
63
64
# File 'lib/dbd4/ordered_hash.rb', line 61

def each_value
	@order.each { |k| yield self[k] }
	self
end

#firstObject



140
141
142
# File 'lib/dbd4/ordered_hash.rb', line 140

def first
	self[@order.first]
end

#inspectObject



158
159
160
161
162
# File 'lib/dbd4/ordered_hash.rb', line 158

def inspect
	ary = []
	each {|k,v| ary << k.inspect + "=>" + v.inspect}
	'{' + ary.join(", ") + '}'
end

#invertObject



90
91
92
93
94
# File 'lib/dbd4/ordered_hash.rb', line 90

def invert
	hsh2 = Hash.new
	@order.each { |k| hsh2[self[k]] = k }
	hsh2
end

#keysObject



86
87
88
# File 'lib/dbd4/ordered_hash.rb', line 86

def keys
	@order
end

#lastObject



144
145
146
# File 'lib/dbd4/ordered_hash.rb', line 144

def last
	self[@order.last]
end

#merge(hsh2) ⇒ Object



171
172
173
# File 'lib/dbd4/ordered_hash.rb', line 171

def merge hsh2
	self.dup update(hsh2)
end

#orig_storeObject



31
# File 'lib/dbd4/ordered_hash.rb', line 31

alias orig_store store

#popObject



135
136
137
138
# File 'lib/dbd4/ordered_hash.rb', line 135

def pop
	key = @order.last
	key ? [key,delete(key)] : nil
end

#push(k, v) ⇒ Object



125
126
127
128
129
130
131
132
133
# File 'lib/dbd4/ordered_hash.rb', line 125

def push k,v
	unless self.include? k
		@order.push k
		orig_store(k,v)
		true
	else
		false
	end
end

#reject(&block) ⇒ Object



96
97
98
# File 'lib/dbd4/ordered_hash.rb', line 96

def reject &block
	self.dup.delete_if( &block )
end

#reject!(&block) ⇒ Object



100
101
102
103
# File 'lib/dbd4/ordered_hash.rb', line 100

def reject! &block
	hsh2 = reject( &block )
	self == hsh2 ? nil : hsh2
end

#replace(hsh2) ⇒ Object



105
106
107
108
# File 'lib/dbd4/ordered_hash.rb', line 105

def replace hsh2
	@order = hsh2.keys
	super hsh2
end

#selectObject



175
176
177
178
179
# File 'lib/dbd4/ordered_hash.rb', line 175

def select
	ary = []
	each { |k,v| ary << [k,v] if yield k,v }
	ary
end

#shiftObject



110
111
112
113
# File 'lib/dbd4/ordered_hash.rb', line 110

def shift
	key = @order.first
	key ? [key,delete(key)] : super
end

#store(a, b) ⇒ Object Also known as: []=



33
34
35
36
# File 'lib/dbd4/ordered_hash.rb', line 33

def store a,b
	@order.push a unless has_key? a
	super a,b
end

#store_only(a, b) ⇒ Object



27
28
29
# File 'lib/dbd4/ordered_hash.rb', line 27

def store_only a,b
	store a,b
end

#to_aObject



148
149
150
151
152
# File 'lib/dbd4/ordered_hash.rb', line 148

def to_a
	ary = []
	each { |k,v| ary << [k,v] }
	ary
end

#to_sObject



154
155
156
# File 'lib/dbd4/ordered_hash.rb', line 154

def to_s
	self.to_a.to_s
end

#unshift(k, v) ⇒ Object



115
116
117
118
119
120
121
122
123
# File 'lib/dbd4/ordered_hash.rb', line 115

def unshift k,v
	unless self.include? k
		@order.unshift k
		orig_store(k,v)
		true
	else
		false
	end
end

#update(hsh2) ⇒ Object Also known as: merge!



164
165
166
167
# File 'lib/dbd4/ordered_hash.rb', line 164

def update hsh2
	hsh2.each { |k,v| self[k] = v }
	self
end

#valuesObject



80
81
82
83
84
# File 'lib/dbd4/ordered_hash.rb', line 80

def values
	ary = []
	@order.each { |k| ary.push self[k] }
	ary
end