Hanami

Un framework desacoplado para Ruby

(antes Lotus)

Renich Bon Ciric <renich@woralelandia.com>

¿WTF?

  • ¡¿Otro framework?!
    • 100% desacoplado
    • 100% objetos
    • Thread-safe
    • Uso bajo de recursos
    • Fácil de probar
    • TDD hasta el final

Hanami, por Luca Guidi

HANAMI

Un framework de frameworks

Model ─ View ─ Controller

Router ─ Utils ─ Validations

Helpers ─ Mailer ─ Assets

Empecemos

Componente

Instalación

# instalación completa
gem install hanami

# instalación de un solo componente
gem install hanami-<nombre-del-componente>

# lista de componentes
$ gem list hanami -r

*** REMOTE GEMS ***

hanami (0.7.0)
hanami-assets (0.2.0)
hanami-controller (0.6.0)
hanami-helpers (0.3.0)
hanami-mailer (0.2.0)
hanami-model (0.6.0)
hanami-router (0.6.0)
hanami-utils (0.7.0)
hanami-validations (0.5.0)
hanami-view (0.6.0)

Modelo

# pre-requisitos
## instalación de gemas
gem install sqlite3 hanami-model

## creación de DB (sqlite)
echo 'create table users( id integer primary key autoincrement, name varchar(50), age int);' \
    | sqlite3 mymodel.sqlite3

SQLite3

require 'hanami/model'

class User
    include Hanami::Entity
    attributes :name, :age
end

class UserRepository
    include Hanami::Repository
end

Hanami::Model.configure do
    adapter type: :sql, uri: 'sqlite://mymodel.sqlite3'

    mapping do
        collection :users do
            entity User
            repository UserRepository

            attribute :id, Integer
            attribute :name, String
            attribute :age, Integer
        end
    end
end

Hanami::Model.load!

user = User.new( name: 'Renich', age: 34 )
user = UserRepository.create( user )

puts user.id

u = UserRepository.find(user.id)
puts u == user

SQLite3

Modelo

require 'hanami/model'

class User
    include Hanami::Entity
    attributes :name, :age
end

class UserRepository
    include Hanami::Repository
end

Hanami::Model.configure do
    adapter type: :memory, uri: 'memory://localhost/mymodel'

    mapping do
        collection :users do
            entity User
            repository UserRepository

            attribute :id, Integer
            attribute :name, String
            attribute :age, Integer
        end
    end
end

Hanami::Model.load!

user = User.new( name: 'Renich', age: 34 )
user = UserRepository.create( user )

puts user.id

u = UserRepository.find(user.id)
u == user

Memory

Modelo

require 'hanami/model'

class User
    include Hanami::Entity
    attributes :name, :age
end

class UserRepository
    include Hanami::Repository
end

Hanami::Model.configure do
    adapter type: :file_system, uri: 'file:///mymodel'

    mapping do
        collection :users do
            entity User
            repository UserRepository

            attribute :id, Integer
            attribute :name, String
            attribute :age, Integer
        end
    end
end

Hanami::Model.load!

user = User.new( name: 'Renich', age: 34 )
user = UserRepository.create( user )

puts user.id

u = UserRepository.find(user.id)
u == user

Filesystem

Aplicación

Fin

Hanami

By Rene Bon Ciric

Hanami

  • 824