ActiveRecord necessita di un adapter per ogni tipo di database con cui tu voglia lavorare e attualmente ci sono adattatori per molti tipi di database non commerciali, ma il supporto per molti di quelli commerciali è ancora mancante.
Non è molto difficile scrivere un adapter e vi mostrerò nel dettaglio, cosa dovrete fare per creare un adapter per il famoso database foo.
Tutti i percorsi sottostanti sono relativi alla directory rails/activerecord.
subversion e Rake devono essere installati sul vostro sistema. Istruzioni dettagliate per scaricare Rails possono essere trovate sotto http://dev.rubyonrails.com.
Poichè DBI aggiunge un altro livello di astrazione, farà diminuire le prestazioni, per questo motivo dovreste evitare di utilizzarlo per ActiveRecord. Per piacere, non mi fraintendete: DBI è fantastico ma ActiveRecord necessita delle migliori performance che si possono ottenere, per questo motivo utilizzate un driver nativo.
I test unitari hanno bisogno di due database differenti. Se la lunghezza del nome del database non è limitata, chiamateli _activerecord_unittest_ e _activerecord_unittest2_. Altrimenti chiamateli arunit e arunit2.
Nella directory test/fixtures/dbdefinitions_ create due files chiamati foo.sql e foo2.sql che contengono le istruzioni CREATE TABLE per i databases di test. Copiare e modificare file esistenti in questo caso è la soluzione migliore.
Installate i databases di test utilizzando i files SQL. foo.sql è per il database _activerecord_unittest_ (_arunit_) e foo2.sql è per _activerecord_unittest2_ (_arunit2_).
$ svn add test/fixtures/db_definitions/foo*.sql
Create una directory per le connessioni di test:
$ svn mkdir test/connections/native_foo
Create test/connections/nativefoo/connection.rb_ copiando e modificandone uno esistente.
$ svn add test/connections/native_foo/connection.rb
Implementare l’interfaccia della classe \AbstractAdapter, chiamate la vostra implementazione \FooAdapter, e salvatela come lib/activerecord/connection_adapters/foo_adapter.rb_.
Il codice sorgente degli adapters esistenti sono pieni di ispirazioni e di buone idee, quindi non reinventate la ruota e utilizzateli, per piacere.
Se avete bisogno di files aggiuntivi metteteli nella directory
lib/activerecord/vendor_.
$ svn add lib/active_record/connection_adapters/foo_adapter.rb
($ svn add lib/active_record/vendor/foo*)</pre>
Modificate lib/activerecord.rb_ e aggiungete un’istruzione require per l’adapter del database foo:
require 'active_record/connection_adapters/foo_adapter'
Aggiungete un nuovo task di test al Rakefile:
Rake::TestTask.new("test_foo") { |t|
t.libs << "test" << "test/connections/native_foo"
t.pattern = 'test/*_test.rb'
t.verbose = true
}
Dalla directory activerecord eseguite:
$ rake test_foo
Per maggiori istruzioni dettagliate su come eseguire i test unitari guardate il file _RUNNING_UNIT_TESTS_.
Se il vostro database non implementa una funzionalità che è richiesta da qualche test ma non è contenuta nell’interfaccia \AbstractAdapter, dovreste documentare questo test che fallisce da qualche parte.
Aggiungete tutti i file che avete creato nel file install.rb.
Potete trovare le istruzioni per questo passo su http://dev.rubyonrails.com.
category:Howto