Class: DataObjects::Connection
- Inherits:
-
Object
- Object
- DataObjects::Connection
- Includes:
- Logging
- Defined in:
- lib/data_objects/connection.rb
Overview
An abstract connection to a DataObjects resource. The physical connection may be broken and re-established from time to time.
Class Method Summary collapse
-
.inherited(target) ⇒ Object
Ensure that all Connection subclasses handle pooling and logging uniformly.
-
.new(uri_s) ⇒ Object
Make a connection to the database using the DataObjects::URI given.
Instance Method Summary collapse
-
#create_command(text) ⇒ Object
Create a Command object of the right subclass using the given text.
-
#dispose ⇒ Object
:nodoc:.
- #extension ⇒ Object
-
#initialize(uri) ⇒ Connection
constructor
:nodoc:.
-
#to_s ⇒ Object
Show the URI for this connection, without the password the connection was setup with.
Methods included from Logging
Constructor Details
#initialize(uri) ⇒ Connection
:nodoc:
112 113 114 |
# File 'lib/data_objects/connection.rb', line 112 def initialize(uri) #:nodoc: raise NotImplementedError.new end |
Class Method Details
.inherited(target) ⇒ Object
Ensure that all Connection subclasses handle pooling and logging uniformly. See also DataObjects::Pooling and DataObjects::Logger
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/data_objects/connection.rb', line 73 def self.inherited(target) target.class_eval do # Allocate a Connection object from the pool, creating one if necessary. This method is active in Connection subclasses only. def self.new(*args) instance = allocate instance.send(:initialize, *args) instance end include Quoting end if driver_module_name = target.name.split('::')[-2] driver_module = DataObjects::const_get(driver_module_name) driver_module.class_eval <<-EOS, __FILE__, __LINE__ def self.logger @logger end def self.logger=(logger) @logger = logger end EOS driver_module.logger = DataObjects::Logger.new(nil, :off) end end |
.new(uri_s) ⇒ Object
Make a connection to the database using the DataObjects::URI given. Note that the physical connection may be delayed until the first command is issued, so success here doesn’t necessarily mean you can connect.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/data_objects/connection.rb', line 14 def self.new(uri_s) uri = DataObjects::URI::parse(uri_s) case uri.scheme.to_sym when :java warn 'JNDI URLs (connection strings) are only for use with JRuby' unless RUBY_PLATFORM =~ /java/ driver = uri.query.delete('scheme') driver = uri.query.delete('driver') conn_uri = uri.to_s.gsub(/\?$/, '') when :jdbc warn 'JDBC URLs (connection strings) are only for use with JRuby' unless RUBY_PLATFORM =~ /java/ path = uri.subscheme driver = if path.split(':').first == 'sqlite' 'sqlite3' elsif path.split(':').first == 'postgresql' 'postgres' else path.split(':').first end conn_uri = uri_s # NOTE: for now, do not reformat this JDBC connection # string -- or, in other words, do not let # DataObjects::URI#to_s be called -- as it is not # correctly handling JDBC URLs, and in doing so, causing # java.sql.DriverManager.getConnection to throw a # 'No suitable driver found for...' exception. else driver = uri.scheme conn_uri = uri end # Exceptions to how a driver class is determined for a given URI driver_class = if driver == 'sqlserver' 'SqlServer' else driver.capitalize end clazz = DataObjects.const_get(driver_class)::Connection unless clazz.method_defined? :close if (uri.scheme.to_sym == :java) clazz.class_eval do alias close dispose end else clazz.class_eval do include Pooling alias close release end end end clazz.new(conn_uri) end |
Instance Method Details
#create_command(text) ⇒ Object
Create a Command object of the right subclass using the given text
121 122 123 |
# File 'lib/data_objects/connection.rb', line 121 def create_command(text) self.class.concrete_command.new(self, text) end |
#dispose ⇒ Object
:nodoc:
116 117 118 |
# File 'lib/data_objects/connection.rb', line 116 def dispose #:nodoc: raise NotImplementedError.new end |
#extension ⇒ Object
125 126 127 |
# File 'lib/data_objects/connection.rb', line 125 def extension driver_namespace.const_get('Extension').new(self) end |
#to_s ⇒ Object
Show the URI for this connection, without the password the connection was setup with
108 109 110 |
# File 'lib/data_objects/connection.rb', line 108 def to_s @uri.to_s end |