Last active
December 23, 2015 10:59
-
-
Save chris-zwickilton/6625578 to your computer and use it in GitHub Desktop.
A flavor of Hexagonal Rails with factory created use cases
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class UsersController < ApplicationController | |
def create | |
create_user = UserUseCaseFactory.create_user(Responder.new(self) | |
create_user.do(params[:email], params[:password[) | |
end | |
class Responder < SimpleDelegator | |
def success(user) | |
render json: UserSerializer.new(user) | |
end | |
def failure(errors) | |
render json: { errors: errors }, status: :unprocessable_entity | |
end | |
end | |
end | |
class UserUseCaseFactory | |
def create_user(responder) | |
return CreateUser.new(User, responder) | |
end | |
end | |
class CreateUser | |
def initialize(users_repository, responder) | |
@users_repository = users_repository | |
@responder = responder | |
end | |
def do(email, password) | |
user = @users_repository.new(email: email, password: password) | |
if user.save | |
@responder.success(user) | |
else | |
@responder.failure(user.errors.full_messages) | |
end | |
end | |
end | |
class UserSerializer | |
def initialize(user) | |
@user = user | |
end | |
def to_json(args = nil) | |
hash = {} | |
hash["id"] = @user.id | |
hash["email"] = @user.email | |
hash.to_json | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment