Sha256: f25a005dc28427c448598e9d6c7659d6a40c812afc2def251395b9bdfb10819a

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

require 'addressable/uri'
require 'rom/gateway'

module Rom
  module Dynamo
    class Gateway < ROM::Gateway
      attr_reader :ddb, :options

      def initialize(uri)
        uri = Addressable::URI.parse(uri)
        opts =  { region: uri.host }
        opts.merge!(uri.query_values) if uri.query
        opts.keys.each { |k| opts[k.to_sym] = opts.delete(k) }

        @options = opts
        @ddb = Aws::DynamoDB::Client.new(@options)
        @prefix = uri.path.gsub('/', '')
        @datasets = {}
      end

      def use_logger(logger)
        @logger = logger
      end

      def dataset(name)
        name = "#{@prefix}#{name}"
        @datasets[name] ||= _has?(name) && Dataset.new(connection: @ddb, name: name)
      end

      def dataset?(name)
        !!self[name]
      end

      def [](name)
        @datasets["#{@prefix}#{name}"]
      end

    private
      def _has?(name)
        @ddb.describe_table(table_name: name)
      rescue Aws::DynamoDB::Errors::ResourceNotFoundException
        return false
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-dynamo-0.14.0 lib/rom/dynamo/repository.rb