Sha256: 0c0ada21ca4394a5e553b77e5aa771a3277c1cc02895854a3371636dec00f8df

Contents?: true

Size: 882 Bytes

Versions: 2

Compression:

Stored size: 882 Bytes

Contents

require 'addressable/uri'

module ROM

  class Adapter
    include Equalizer.new(:connection)

    @adapters = []

    attr_reader :uri

    def self.setup(uri_string)
      uri = Addressable::URI.parse(uri_string)

      unless adapter = self[uri.scheme]
        raise ArgumentError, "#{uri_string.inspect} uri is not supported"
      end

      adapter.new(uri)
    end

    def self.register(adapter)
      @adapters.unshift adapter
    end

    def self.[](scheme)
      @adapters.detect { |adapter| adapter.schemes.include?(scheme.to_sym) }
    end

    def initialize(uri)
      @uri = uri
    end

    def connection
      raise NotImplementedError, "#{self.class}#connection must be implemented"
    end

    def extend_relation_class(klass)
      klass
    end

    def extend_relation_instance(relation)
      relation
    end

    def schema
      []
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rom-0.3.1 lib/rom/adapter.rb
rom-0.3.0 lib/rom/adapter.rb