Ruby on Rails
HowtoScrivereUnAdapterPerActiveRecord

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>

  • Caricare l’adapter

Modificate lib/activerecord.rb_ e aggiungete un’istruzione require per l’adapter del database foo:

require 'active_record/connection_adapters/foo_adapter'

  • Eseguire i tests unitari

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_.

  • Risolvete i bugs finchè tutti i test non passano

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.

  • Modificare install.rb

Aggiungete tutti i file che avete creato nel file install.rb.

  • Inviate le vostre modifiche

Potete trovare le istruzioni per questo passo su http://dev.rubyonrails.com.

category:Howto