Rene Bon Ciric
FOSS Consultant and Creative Commons Musician.
Un framework desacoplado para Ruby
(antes Lotus)
Renich Bon Ciric <renich@woralelandia.com>
Hanami, por Luca Guidi
Un framework de frameworks
Model ─ View ─ Controller
Router ─ Utils ─ Validations
Helpers ─ Mailer ─ Assets
# 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)
# 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
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
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
By Rene Bon Ciric