indentlabs/notebook

View on GitHub
app/controllers/user_followings_controller.rb

Summary

Maintainability
A
35 mins
Test Coverage
class UserFollowingsController < ApplicationController
  before_action :set_user_following, only: [:show, :edit, :update, :destroy]

  # GET /user_followings
  def index
    @user_followings = UserFollowing.all
  end

  # GET /user_followings/1
  def show
  end

  # GET /user_followings/new
  def new
    @user_following = UserFollowing.new
  end

  # GET /user_followings/1/edit
  def edit
  end

  # POST /user_followings
  def create
    user = User.find_by(id: user_following_params.fetch(:followed_user_id))
    return unless user.present?
    return if user_signed_in? && current_user.blocked_by?(user)

    @user_following = UserFollowing.new(user_following_params.merge({user_id: current_user.id}))
    if @user_following.save

      # Create a notification letting the user know!
      @user_following.followed_user.notifications.create(
        message_html:     "<div><span class='#{User.text_color}'>#{@user_following.user.display_name}</span> is now following your public updates.</div>",
        icon:             User.icon,
        icon_color:       User.color,
        happened_at:      DateTime.current,
        passthrough_link: Rails.application.routes.url_helpers.user_path(@user_following.user),
        reference_code:   'followed-by-user'
      )

      redirect_to @user_following.followed_user, notice: "You're now following #{@user_following.followed_user.name.presence || 'this user'}"
    else
      render :new
    end
  end

  # PATCH/PUT /user_followings/1
  def update
    if @user_following.update(user_following_params)
      redirect_to @user_following, notice: 'User following was successfully updated.'
    else
      render :edit
    end
  end

  # DELETE /user_followings/1
  def destroy
    user = @user_following.followed_user

    @user_following.destroy
    redirect_to user, notice: "You're no longer following this user."
  end

  private

  # Use callbacks to share common setup or constraints between actions.
  def set_user_following
    @user_following = UserFollowing.find(params[:id])
  end

  # Only allow a trusted parameter "white list" through.
  def user_following_params
    params.require(:user_following).permit(:followed_user_id)
  end
end