lib/rom/adapter.rb in rom-0.4.2 vs lib/rom/adapter.rb in rom-0.5.0

- old
+ new

@@ -1,17 +1,14 @@ require 'addressable/uri' module ROM - # Abstract adapter class # # @api public class Adapter include Equalizer.new(:connection) - @adapters = [] - # Return connection URI associated with the adapter # # @return [String] # # @api public @@ -22,10 +19,27 @@ # @return [Object] type varies depending on the adapter # # @api public attr_reader :connection + # Additional options hash + # + # @return [Hash] + # + # @api public + attr_reader :options + + # @api private + def self.inherited(adapter) + Adapter.adapters.unshift(adapter) + end + + # @api private + def self.adapters + @_adapters ||= [] + end + # Setup an adapter instance with the given connection URI # # @example # # Adapter = Class.new(ROM::Adapter) @@ -39,18 +53,19 @@ # @param [String] uri_string # # @return [Adapter] # # @api public - def self.setup(uri_string) + def self.setup(uri_string, options = {}) uri = Addressable::URI.parse(uri_string) + adapter = self[uri.scheme] - unless adapter = self[uri.scheme] + unless adapter raise ArgumentError, "#{uri_string.inspect} uri is not supported" end - adapter.new(uri) + adapter.new(uri, options) end # Register adapter class # # @example @@ -65,28 +80,41 @@ # ROM::Adapter[:super_db] # => Adapter # # @return [Array] registered adapters # # @api public - def self.register(adapter) - @adapters.unshift adapter + def self.register(_adapter) + warn "Adapter.register is no longer needed [#{caller[0]}" end # Return adapter class for the given scheme # # @see Adapter.register # # @return [Class] adapter class # # @api public def self.[](scheme) - @adapters.detect { |adapter| adapter.schemes.include?(scheme.to_sym) } + adapters.detect { |adapter| adapter.schemes.include?(scheme.to_sym) } end + # Hook for adapters to normalize scheme name + # # @api private - def initialize(uri) + def self.normalize_scheme(scheme) + scheme + end + + # @api private + def self.database_file?(_scheme) + false + end + + # @api private + def initialize(uri, options = {}) @uri = uri + @options = options end # Extension hook for adding adapter-specific behavior to a relation class # # @param [Class] klass Relation class generated by ROM @@ -142,17 +170,22 @@ # @api private def schema [] end + # Disconnect is optional and it's a no-op by default + # + # @api public + def disconnect + # noop + end + # Return namespace with adapter-specific command classes # # @return [Module] # # @api private def command_namespace self.class.const_get(:Commands) end - end - end