public
Description:
Home | Edit | New

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
end

module 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>
)

Last edited by fguillen, Sat Dec 13 14:10:28 -0800 2008
Home | Edit | New
Versions: