Advertisement
Guest User

Untitled

a guest
Aug 20th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. # app/controllers/users_controller.rb
  2. class UsersController < ApplicationController
  3. def create
  4. Operations::User::Create.new.call(params[:user]) do |m|
  5. m.success do |user_response|
  6. render json: user_response
  7. end
  8.  
  9. m.failure do |responce|
  10. render json: responce, status: :not_acceptable
  11. end
  12. end
  13. end
  14. end
  15.  
  16. # app/operations/user/create.rb
  17. require 'dry/transaction'
  18.  
  19. module Operations::User
  20. class Create
  21. include Dry::Transaction
  22. include Dry::Monads::List::Mixin
  23.  
  24. VALIDATOR = Dry::Validation.Schema do
  25. required(:nickname).filled
  26. required(:email).filled
  27. required(:password).filled
  28. end
  29.  
  30. ALLOW_PARAMS = ::User.column_names.freeze
  31. DENY_PARAMS = %i[id].freeze
  32.  
  33. step :validate
  34. step :clean
  35. try :persist, catch: StandardError
  36. tee :log_data
  37.  
  38. def validate(user)
  39. result = VALIDATOR.call(user)
  40. result.success? ? Right(result) : Left(result.errors)
  41. end
  42.  
  43. def clean(user)
  44. Right(user.output.select! { |k, _v| ALLOW_PARAMS.include? k }.permit!.except(*DENY_PARAMS))
  45. end
  46.  
  47. def persist(user)
  48. ::User.create(user)
  49. end
  50.  
  51. def log_data(user)
  52. Rails.logger.info user.inspect
  53. end
  54. end
  55. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement