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