Class: OrderedHash

Inherits:
Hash show all
Defined in:
lib/quickbooks/structure.rb

Instance Method Summary collapse

Methods inherited from Hash

#-, #camelize_keys, #camelize_keys!, #diff, #expand_slashes, #expand_slashes!, #flatten_slashes, #flatten_slashes!, #only, #only!, #reverse_merge, #reverse_merge!, #slash_camelize_keys!, #slashed!, #slashed?, #stringify_keys, #stringify_keys!, #stringify_values, #stringify_values!, #transform_keys, #transform_keys!, #underscore_keys, #underscore_keys!

Constructor Details

#initialize(*keys_in_order, &block) ⇒ OrderedHash

Returns a new instance of OrderedHash.



347
348
349
350
# File 'lib/quickbooks/structure.rb', line 347

def initialize(*keys_in_order, &block)
  super(&block)
  @keys_in_order = keys_in_order.flatten + (self.keys.reject {|e| !keys_in_order.flatten.include?(e) }).compact.keep_unique!
end

Instance Method Details

#[](k) ⇒ Object



384
385
386
387
388
389
390
391
392
# File 'lib/quickbooks/structure.rb', line 384

def [](k)
  # If the value being retrieved is a hash or an array, we need to make sure it's an Ordered one.
  v = get_value(k)
  if (v.is_a?(Hash) || v.is_a?(Array)) && !v.ordered?
    child_order = @keys_in_order.step_into_slash(k)
    v = self[k] = v.ordered!(child_order)
  end
  v
end

#[]=(k, v) ⇒ Object



380
381
382
383
# File 'lib/quickbooks/structure.rb', line 380

def []=(k,v)
  @keys_in_order << k
  set_value(k,v)
end

#dupObject



352
353
354
# File 'lib/quickbooks/structure.rb', line 352

def dup
  Hash.new.replace(self)
end

#each(&block) ⇒ Object



369
370
371
372
373
# File 'lib/quickbooks/structure.rb', line 369

def each(&block)
  self.keys.each do |k|
    block.call(k, self[k])
  end
end

#each_key(&block) ⇒ Object



374
375
376
# File 'lib/quickbooks/structure.rb', line 374

def each_key(&block)
  self.keys.each &block
end

#each_unorderedObject



343
# File 'lib/quickbooks/structure.rb', line 343

alias :each_unordered :each

#each_value(&block) ⇒ Object



377
378
379
# File 'lib/quickbooks/structure.rb', line 377

def each_value(&block)
  self.values.each &block
end

#get_valueObject



345
# File 'lib/quickbooks/structure.rb', line 345

alias :get_value :[]

#keysObject



363
364
365
# File 'lib/quickbooks/structure.rb', line 363

def keys
  expand_slashes.keys.sort {|a,b| @keys_in_order.index(a) <=> @keys_in_order.index(b)}
end

#ordered!Object



356
357
358
# File 'lib/quickbooks/structure.rb', line 356

def ordered!
  false
end

#ordered?Boolean

Returns:

  • (Boolean)


359
360
361
# File 'lib/quickbooks/structure.rb', line 359

def ordered?
  true
end

#set_valueObject



344
# File 'lib/quickbooks/structure.rb', line 344

alias :set_value :[]=

#unordered_keysObject



341
# File 'lib/quickbooks/structure.rb', line 341

alias :unordered_keys :keys

#unordered_valuesObject



342
# File 'lib/quickbooks/structure.rb', line 342

alias :unordered_values :values

#valuesObject



366
367
368
# File 'lib/quickbooks/structure.rb', line 366

def values
  self.keys.collect {|k| self[k]}
end