Skip to content

Instantly share code, notes, and snippets.

@nicholasjhenry
Created October 31, 2013 14:14
Show Gist options
  • Select an option

  • Save nicholasjhenry/7250531 to your computer and use it in GitHub Desktop.

Select an option

Save nicholasjhenry/7250531 to your computer and use it in GitHub Desktop.
class UsersController < ApplicationController
def create
CreateUser.new(User).call(params[:user], CreateResponse.new(self))
end
class CreateResponse < SimpleDelegator
def user_created(user)
flash[:notice] ="The user was created successfully"
redirect_to :index
end
def user_creation_failed(user)
render 'new', locals: { user: user }
end
end
end
class CreateUser
def initialize(users_repository)
@users_repository = users_repository
end
def call(attributes: {}, listener)
user = @users_repository.new attributes
if user.save
listener.user_created(user)
else
listener.user_creation_failed(user) unless user.save
end
end
end
@nicholasjhenry
Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment