Skip to content

Instantly share code, notes, and snippets.

@joaquimadraz
Last active August 29, 2015 14:28
Show Gist options
  • Save joaquimadraz/3668cab01d0376d22e80 to your computer and use it in GitHub Desktop.
Save joaquimadraz/3668cab01d0376d22e80 to your computer and use it in GitHub Desktop.
User create use case, validate, complete_date and save
module UseCases
module User
module Create
class Validate < RestMyCase::Base
# all necessary validations to persit
context_reader :user,
:user_attributes
def perform
context.user = user.present? ? user : User.new(user_attributes) # ActiveRecord Model
if user_attributes
if "#{user.first_name}".length == 0
user.errors.add(:first_name, 'is missing')
elsif "#{user.first_name}".length < 2
user.errors.add(:first_name, 'is invalid, must have at least 2 characters')
end
if "#{user.last_name}".length == 0
user.errors.add(:last_name, 'is missing')
elsif "#{user.last_name}".length < 2
user.errors.add(:last_name, 'is invalid, must have at least 2 characters')
end
...
if user.errors.length > 0
# populate context.status with :confict,
# context.status.conflict? = true and
# stops execution flow
failure!(:conflict)
end
else
failure!(:bad_request)
end
end
end
class CompleteData < RestMyCase::Base
# use case to add more data before create
context_reader :user # available since validate use case
def perform
user.object_token = 'generated_uniq_token'
end
end
class Save < RestMyCase::Base
# use case to save user
context_reader :user
def perform
unless user.save
failure!(:conflict)
end
end
end
class Base < RestMyCase::Base
# create user use case
depends Validate,
CompleteData,
Save
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment