- Tener ruby andando (de 1.8 para arriba vamos a estar bien)
- Tener instalado bundler.
- Tener algun servidor de base de datos, sqlite, mysql o postgres andando.
- Tener un pequeño proyecto de prueba instalado.
El proyecto tiene que tener el siguiente Gemfile.
source "https://rubygems.org/"
gem "sequel"
gem "sqlite3"
y un archivo database con el siguiente contenido
require 'sequel'
DB = Sequel.sqlite # memory database
DB.create_table :items do
primary_key :id
String :name
Float :price
end
Queremos hacer una gema que implemente proxies a la consultas que se van a ejecutar en la base de datos a traves de la interfaz que nos provee Sequel
.
Queremos poder definir algo de este estilo:
require 'sequel_proxy'
class SimpleProxy < SequelProxy::BaseProxy
def execute(sql, opts = nil, &block)
puts "Proxied"
super
end
end
SequelProxy.configure do |config|
config.adapter adaptador_sql_lite_de_sequel
config.use SimpleProxy
end
SequelProxy.enable!
Para eso vamos a crear una gema con bundler!
http://bundler.io/v1.10/rubygems.html
describe "integration tests" do
before do
module Sequel::Dummy; end
class ::Sequel::Dummy::Database
def execute(sql, options = nil, &block)
sql
end
end
class DummyProxy < BaseProxy
def execute(sql, options = nil, &block)
if sql =~ /users/
sql.gsub!('users', 'new_users')
end
super
end
end
SequelProxy.configure do |conf|
conf.adapter ::Sequel::Dummy::Database
conf.use DummyProxy
end
SequelProxy.enable!
end
it "runs all configured proxies in order" do
::Sequel::Dummy::Database.new.execute("SELECT * FROM users").must_equal("SELECT * FROM new_users")
end
end
Como prueba final, incluir la gema en el proyecto de prueba, y agregar el snippet de código de la seccion requsitos de la gema y verificar que el proxy funciona en el proyecto, y que no afecta el funcionamiento de Sequel en si mismo (las consultas siguen funcionando).