ManageIQ/manageiq-providers-amazon

View on GitHub
app/models/manageiq/providers/amazon/inventory/hash_collection.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
class ManageIQ::Providers::Amazon::Inventory::HashCollection
  attr_reader :collection

  def initialize(collection)
    @collection = collection
  end

  def each
    collection.each { |item| yield(transform(item)) }
  end

  def all
    collection.each_with_object([]) { |item, obj| obj << transform(item) }
  end

  delegate :count, to: :all
  alias size count

  private
  def transform(item)
    transform_keys(item.respond_to?(:to_hash) ? item.to_hash : item.data.to_hash)
  end

  def transform_keys(value)
    case value
    when Array
      value.map { |x| transform_keys(x) }
    when Hash
      Hash[value.map { |k, v| [k.to_s.underscore, transform_keys(v)] }]
    else
      value
    end
  end
end