Created
August 24, 2012 12:47
-
-
Save splattael/3450174 to your computer and use it in GitHub Desktop.
This file contains 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 CreateUser < Context | |
def initialize(attributes) | |
@attributes = attributes | |
end | |
def self.call(*args) | |
new(*args).tap(&:call) | |
end | |
def callback(*args) | |
# execute CallbackProxy | |
end | |
def call | |
user = User.create!(@attributes) | |
if with_team? | |
team = Team.create!(:leader => user) | |
success.user_created_with_team(user, team) | |
else | |
success.user_created(user) | |
end | |
rescue ActiveRecord::RecordInvalid => e | |
failure.user_invalid e, e.record | |
end | |
def success | |
# Record via CallbackProxy | |
end | |
def failure | |
# Record via CallbackProxy | |
end | |
class CallbackProxy | |
def method_missing(method, *args) | |
@methods << [ methods, args ] | |
end | |
def execute(callback) | |
@methods.each do |method, args| | |
callback.public_send(method, *args) | |
end | |
end | |
end | |
end | |
class UserMailer | |
def user_created(user) | |
end | |
def user_created_with_team(user, team) | |
end | |
end | |
class UserError | |
def user_invalid(error) | |
end | |
def lfp_sucks(error) | |
end | |
end | |
CreateUser.call(user_id).callback SendUserMail.new, UserError.new | |
CreateUser.call(user_id).callback UserMailer.new | |
CreateUser.call(user_id).callback :success => SendUserMail.new, :failure => UserError.new | |
CreateUser.call(user_id).callback do |success, failure| | |
success.user_created do |user| | |
end | |
success.user_created_with_team do |user| | |
end | |
failure.user_invalid do |error| | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment