Class: Reality::OrderedHash
- Inherits:
-
Hash
- Object
- Hash
- Reality::OrderedHash
- Defined in:
- lib/reality/orderedhash.rb
Instance Attribute Summary collapse
-
#order ⇒ Object
Returns the value of attribute order.
-
#to_yaml_style ⇒ Object
Returns the value of attribute to_yaml_style.
Class Method Summary collapse
Instance Method Summary collapse
- #==(hsh2) ⇒ Object
- #__class__ ⇒ Object
- #class ⇒ Object
- #clear ⇒ Object
- #delete(key) ⇒ Object
- #delete_if ⇒ Object
- #each ⇒ Object (also: #each_pair)
- #each_key ⇒ Object
- #each_value ⇒ Object
- #each_with_index ⇒ Object
- #first ⇒ Object
-
#initialize(*a, &b) ⇒ OrderedHash
constructor
A new instance of OrderedHash.
- #inspect ⇒ Object
- #invert ⇒ Object
- #keys ⇒ Object
- #last ⇒ Object
- #merge(hsh2) ⇒ Object
- #orig_store ⇒ Object
- #pop ⇒ Object
- #push(k, v) ⇒ Object
- #reject(&block) ⇒ Object
- #reject!(&block) ⇒ Object
- #replace(hsh2) ⇒ Object
- #select ⇒ Object
- #shift ⇒ Object
- #store(a, b) ⇒ Object (also: #[]=)
- #store_only(a, b) ⇒ Object
- #to_a ⇒ Object
- #to_s ⇒ Object
- #unshift(k, v) ⇒ Object
- #update(hsh2) ⇒ Object (also: #merge!)
- #values ⇒ Object
- #yaml_inline! ⇒ Object
- #yaml_inline=(bool) ⇒ Object
Constructor Details
#initialize(*a, &b) ⇒ OrderedHash
Returns a new instance of OrderedHash.
47 48 49 50 |
# File 'lib/reality/orderedhash.rb', line 47 def initialize(*a, &b) super @order = [] end |
Instance Attribute Details
#order ⇒ Object
Returns the value of attribute order.
28 29 30 |
# File 'lib/reality/orderedhash.rb', line 28 def order @order end |
#to_yaml_style ⇒ Object
Returns the value of attribute to_yaml_style.
213 214 215 |
# File 'lib/reality/orderedhash.rb', line 213 def to_yaml_style @to_yaml_style end |
Class Method Details
.[](*args) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/reality/orderedhash.rb', line 31 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 0.step(args.size - 1, 2) do |a| b = a + 1 hsh[args[a]] = args[b] end end hsh end |
Instance Method Details
#==(hsh2) ⇒ Object
65 66 67 68 |
# File 'lib/reality/orderedhash.rb', line 65 def ==(hsh2) return false if @order != hsh2.order super hsh2 end |
#__class__ ⇒ Object
209 210 211 |
# File 'lib/reality/orderedhash.rb', line 209 def __class__ OrderedHash end |
#class ⇒ Object
205 206 207 |
# File 'lib/reality/orderedhash.rb', line 205 def class Hash end |
#clear ⇒ Object
70 71 72 73 |
# File 'lib/reality/orderedhash.rb', line 70 def clear @order = [] super end |
#delete(key) ⇒ Object
75 76 77 78 |
# File 'lib/reality/orderedhash.rb', line 75 def delete(key) @order.delete key super end |
#delete_if ⇒ Object
97 98 99 100 101 102 |
# File 'lib/reality/orderedhash.rb', line 97 def delete_if @order.clone.each { |k| delete k if yield(k) } self end |
#each ⇒ Object Also known as: each_pair
90 91 92 93 |
# File 'lib/reality/orderedhash.rb', line 90 def each @order.each { |k| yield k, self[k] } self end |
#each_key ⇒ Object
80 81 82 83 |
# File 'lib/reality/orderedhash.rb', line 80 def each_key @order.each { |k| yield k } self end |
#each_value ⇒ Object
85 86 87 88 |
# File 'lib/reality/orderedhash.rb', line 85 def each_value @order.each { |k| yield self[k] } self end |
#each_with_index ⇒ Object
245 246 247 248 |
# File 'lib/reality/orderedhash.rb', line 245 def each_with_index @order.each_with_index { |k, index| yield k, self[k], index } self end |
#first ⇒ Object
114 115 116 |
# File 'lib/reality/orderedhash.rb', line 114 def first {@order.first => self[@order.first]} end |
#inspect ⇒ Object
182 183 184 185 186 |
# File 'lib/reality/orderedhash.rb', line 182 def inspect ary = [] each { |k, v| ary << k.inspect + '=>' + v.inspect } '{' + ary.join(', ') + '}' end |
#invert ⇒ Object
122 123 124 125 126 |
# File 'lib/reality/orderedhash.rb', line 122 def invert hsh2 = Hash.new @order.each { |k| hsh2[self[k]] = k } hsh2 end |
#keys ⇒ Object
110 111 112 |
# File 'lib/reality/orderedhash.rb', line 110 def keys @order end |
#last ⇒ Object
118 119 120 |
# File 'lib/reality/orderedhash.rb', line 118 def last {@order.last => self[@order.last]} end |
#merge(hsh2) ⇒ Object
195 196 197 |
# File 'lib/reality/orderedhash.rb', line 195 def merge(hsh2) self.dup(update(hsh2)) end |
#orig_store ⇒ Object
56 |
# File 'lib/reality/orderedhash.rb', line 56 alias orig_store store |
#pop ⇒ Object
167 168 169 170 |
# File 'lib/reality/orderedhash.rb', line 167 def pop key = @order.last key ? [key, delete(key)] : nil end |
#push(k, v) ⇒ Object
157 158 159 160 161 162 163 164 165 |
# File 'lib/reality/orderedhash.rb', line 157 def push(k, v) unless self.include? k @order.push k orig_store(k, v) true else false end end |
#reject(&block) ⇒ Object
128 129 130 |
# File 'lib/reality/orderedhash.rb', line 128 def reject(&block) self.dup.delete_if(&block) end |
#reject!(&block) ⇒ Object
132 133 134 135 |
# File 'lib/reality/orderedhash.rb', line 132 def reject!(&block) hsh2 = reject(&block) self == hsh2 ? nil : hsh2 end |
#replace(hsh2) ⇒ Object
137 138 139 140 |
# File 'lib/reality/orderedhash.rb', line 137 def replace hsh2 @order = hsh2.keys super hsh2 end |
#select ⇒ Object
199 200 201 202 203 |
# File 'lib/reality/orderedhash.rb', line 199 def select ary = [] each { |k, v| ary << [k, v] if yield k, v } ary end |
#shift ⇒ Object
142 143 144 145 |
# File 'lib/reality/orderedhash.rb', line 142 def shift key = @order.first key ? [key, delete(key)] : super end |
#store(a, b) ⇒ Object Also known as: []=
58 59 60 61 |
# File 'lib/reality/orderedhash.rb', line 58 def store(a, b) @order.push a unless has_key? a super a, b end |
#store_only(a, b) ⇒ Object
52 53 54 |
# File 'lib/reality/orderedhash.rb', line 52 def store_only a, b store a, b end |
#to_a ⇒ Object
172 173 174 175 176 |
# File 'lib/reality/orderedhash.rb', line 172 def to_a ary = [] each { |k, v| ary << [k, v] } ary end |
#to_s ⇒ Object
178 179 180 |
# File 'lib/reality/orderedhash.rb', line 178 def to_s self.to_a.to_s end |
#unshift(k, v) ⇒ Object
147 148 149 150 151 152 153 154 155 |
# File 'lib/reality/orderedhash.rb', line 147 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!
188 189 190 191 |
# File 'lib/reality/orderedhash.rb', line 188 def update(hsh2) hsh2.each { |k, v| self[k] = v } self end |
#values ⇒ Object
104 105 106 107 108 |
# File 'lib/reality/orderedhash.rb', line 104 def values ary = [] @order.each { |k| ary.push self[k] } ary end |
#yaml_inline! ⇒ Object
241 242 243 |
# File 'lib/reality/orderedhash.rb', line 241 def yaml_inline! self.yaml_inline = true end |
#yaml_inline=(bool) ⇒ Object
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/reality/orderedhash.rb', line 215 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 { |opts| YAML::quick_emit(object_id, opts) { |emitter| emitter << '{ ' << map { |kv| kv.join ': ' }.join(', ') << ' }' } } class << self def to_yaml opts = {} begin @__yaml_inline ? @__yaml_inline_meth[opts] : super rescue @to_yaml_style = :inline super end end end end end @__yaml_inline = bool end |