Every repository with this icon (
Every repository with this icon (
Home
El reto
Los Nosferatu nos enfrentamos a:
- Motor de persistencia: DataMapper
- Framework: Camping
- Motor de vistas: Haml .. pero lo vamos a hacer con Markaby para evitar una lucha hasta la muerte
- Librería Javascript: SproutCore
- Testing: RSpec
DataMapper
http://datamapper.org/doku.php
Instalar
$ sudo gem install do_sqlite3 data_mapper
Intalará unas 14 gemas de dependencia
Atención no poner
$ sudo gem datamapper (noooo)
Setup contra sqlite
DataMapper.setup(:default, "sqlite3:///#{Dir.pwd}/nosferatu.sqlite")
El modelo
Para enchufarlo con DataMapper haces un include en el modelo. Los atributos los defines inline.
class Link include DataMapper::Resource has n, :comments property :id, Integer, :serial => true property :title, String property :url, String end
Automigraciones
DataMapper tiene automigraciones osea que al parecer compara la defición del modelo con la definición actual de la DB y hace los cambios adecuados.
DataMapper.auto_migrate!
DataMapper.auto_upgrade!
Cuidado con activar el .automigrate porque se carga la tabla y si tenía registros desaparecerán.
Si activas auto_upgrade! la base de datos se modificará si metes un nuevo property en un modelo.
to_json
Haciendo un
require ‘dm-serializer’
Podemos hacer
mi_datamapper_instance.to_json
Y nos devuelve un json guapo sin tener que currárnoslo.
Camping
Install
$ sudo gem install camping
La gema ‘campingomnibus’ te instala a demás un montón de gemas satélites pero que los de Monster of Ruby no nos dejan usar así que nada.
El hola mundo
Un fichero ruby tal que así
#!ruby
#!/usr/local/bin/ruby -rubygems
require ‘camping’Camping.goes :Nosferatu
module Nosferatu::Controllers
class Home < R ‘/’
def get
@variable = ‘Hola Mundo’
render :home
end
endmodule Nosferatu::Views
def home
html do
title { ‘Nosferatu Home’ }
body do
p { @variable }
end
end
end
end
Y en consola con un:
$ ruby nosferatu.rb
Ya tendríamos un servidor escuchando en el puerto 3301 y atendiendo a la petición /home
Devolver Json
Si en vez de devolver una vista queremos devolver texto o por ejemplo json, no hay que llamar al render en el controlador
module Nosferatu::Controllers
class Home < R '/'
def get
@variable = 'Hola Mundo'
@variable.to_json
end
end
Las urls
/ -> /links/index (GET) /link/:id (GET) /link/new (GET) /link/create (POST) /link/:id/vote (POST) /link/:id/comment/create (POST)
Rspec
Instalación
$ sudo gem install rspec
Conectar Rspec con Camping
Hay que invocar al wrapper que genera Camping y no a la clase directamente porque el wrapper es el que le otorga de método render y demás.
require 'rubygems'
require 'spec'
require 'nosferatu'
describe Nosferatu::Controllers::LinksIndex do
describe '/' do
it 'should create Link when create Link' do
num_before = Link.all.size
Nosferatu.post(
:LinksIndex,
'links',
:input => {'title' => 'pepe', 'url' => 'url'}
)
Link.all.size.should == (num_before + 1)
end
end
end
Fijarse que la llamada es tal que así:
. (
:,
,
:input => <parámetros>
)






