Sha256: bbed2c34eca44d4fb23d1a88c8637f429164a2fe199ac73226f34ea409971bdb

Contents?: true

Size: 1.73 KB

Versions: 33

Compression:

Stored size: 1.73 KB

Contents

module Appfuel
  module Repository
    class StorageMap
      attr_reader :domain_name, :container_name, :entries,
                  :storage_type, :storage_key

      def initialize(data)
        fail "Mapping data must be a hash" unless data.is_a?(Hash)

        @container_name = data[:container]
        @domain_name    = data.fetch(:domain_name)  { domain_name_failure }.to_s
        @storage_type   = data.fetch(:storage_type) { storage_type_failure }
        @storage_key    = data.fetch(:storage_key)  { storage_key_failure }
        @entries        = data.fetch(:entries)      { entries_failure }
      end

      def storage_attr(domain_attr)
        entries.each do |data|
           return data[:storage_attr] if data[:domain_attr] == domain_attr
        end

        fail "[storage_map #{domain_name}] #{domain_attr} not registered"
      end

      def domain_attr(storage_attr)
        entries.each do |data|
           return data[:domain_attr] if data[:storage_attr] == storage_attr
        end

        fail "[storage_map #{domain_name}] #{storage_attr} not registered"
      end

      def each
        entries.each do |data|
          yield data[:domain_attr], data[:storage_attr], data[:skip]
        end
      end

      private

      def domain_name_failure
        fail "Fully qualified domain name is required"
      end

      def storage_type_failure
        domain_failure("storage_type is required for storage map")
      end

      def storage_key_failure
        domain_failure(":storage_key is required for storage map")
      end

      def entries_failure
        domain_failure(":mapping_entries are required for storage map")
      end

      def domain_failure(msg)
        fail "[#{domain_name}] #{msg}"
      end
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
appfuel-0.7.0 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.16 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.15 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.14 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.13 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.12 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.11 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.10 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.9 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.8 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.7 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.6 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.5 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.4 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.3 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.6.1 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.5.16 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.5.15 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.5.14 lib/appfuel/storage/repository/storage_map.rb
appfuel-0.5.13 lib/appfuel/storage/repository/storage_map.rb