Advertisement
Guest User

Untitled

a guest
Apr 17th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.89 KB | None | 0 0
  1. class CreateFavoriteForm
  2.   include ActiveModel::Model
  3.  
  4.   validate :scoped_favorite_limit
  5.   validate :favorable_is_uniq
  6.  
  7.   def initialize(user:, **params)
  8.     @user = user
  9.     @params = params.merge(user_id: @user.id)
  10.   end
  11.  
  12.   def save
  13.     favorite = Favorite.new(@params)
  14.     return favorite.save if valid? && favorite.valid?
  15.     promote_errors(favorite)
  16.     false
  17.   end
  18.  
  19.   private
  20.  
  21.   def scoped_favorite_limit
  22.     if @user.favorites.where(favorable_type: @params[:favorable_type]).count > 99
  23.       errors.add(:favorites, "too many favorites")
  24.     end
  25.   end
  26.  
  27.   def favorable_is_uniq
  28.     if @user.favorites.where(favorable_type: @params[:favorable_type], favorable_id: @params[:favorable_id]).exists?
  29.       errors.add(:favorites, "must be unique")
  30.     end
  31.   end
  32.  
  33.   def promote_errors(object)
  34.     object.errors.each do |key, val|
  35.       errors.add(key, val)
  36.     end
  37.   end
  38. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement