mikevallano/tmdb-moviequeue

View on GitHub
app/lib/sorting_handler.rb

Summary

Maintainability
B
5 hrs
Test Coverage
module SortingHandler

  def list_sort_handler(sort_by, member = nil)
    @sort_by = sort_by
    @member = member
    if @member.present?
      @user = User.find(@member)
    end

    #this determines which params will show the sub-sort by list member
    @watched_sorts = ["watched movies", "unwatched movies", "only show unwatched",
      "only show watched", "recently watched"]

    case @sort_by
    when "title"
      @movies = @list.movies.by_title
    when "shortest runtime"
      @movies = @list.movies.by_shortest_runtime
    when "longest runtime"
      @movies = @list.movies.by_longest_runtime
    when "newest release"
      @movies = @list.movies.by_recent_release_date
    when "vote average"
      @movies = @list.movies.by_highest_vote_average
    when "recently added to list"
      @movies = @list.movies.by_recently_added(@list)
    when "watched movies"
      if @member.present?
        @movies = @list.movies.by_watched_by_user(@list, @user)
      else
        @movies = @list.movies.by_watched_by_user(@list, current_user)
      end
    when "unwatched movies"
      if @member.present?
        @movies = @list.movies.by_unwatched_by_user(@list, @user)
      else
        @movies = @list.movies.by_unwatched_by_user(@list, current_user)
      end
    when "only show unwatched"
      if @member.present?
        @movies = @list.movies.unwatched_by_user(@user)
      else
        @movies = @list.movies.unwatched_by_user(current_user)
      end
    when "only show watched"
      if @member.present?
        @movies = @list.movies.watched_by_user(@user)
      else
        @movies = @list.movies.watched_by_user(current_user)
      end
    when "highest priority"
      @movies = @list.movies.by_highest_priority(@list)
    when "recently watched"
      if @member.present?
        @movies = @list.movies.by_recently_watched_by_user(@user)
      else
        @movies = @list.movies.by_recently_watched_by_user(current_user)
      end
    end #case
    @movies = @movies.paginate(:page => params[:page], per_page: 20)
  end #list sort handler

  def movies_index_sort_handler(sort_by)
    @sort_by = sort_by

    case @sort_by
    when "title"
      @movies = current_user.all_movies_by_title
    when "shortest runtime"
      @movies = current_user.all_movies_by_shortest_runtime
    when "longest runtime"
      @movies = current_user.all_movies_by_longest_runtime
    when "newest release"
      @movies = current_user.all_movies_by_recent_release_date
    when "vote average"
      @movies = current_user.all_movies_by_highest_vote_average
    when "recently watched"
      @movies = current_user.all_movies_by_recently_watched
    when "watched movies"
      @movies = current_user.all_movies_by_watched
    when "unwatched movies"
      @movies = @movies = current_user.all_movies_by_unwatched
    when "only show unwatched"
      @movies = Movie.unwatched_by_user(current_user)
    when "only show watched"
      @movies = Movie.watched_by_user(current_user)
    when "movies not on a list"
      @movies = current_user.all_movies_not_on_a_list
    else
      @movies = current_user.all_movies
    end #case

    @movies = @movies.paginate(:page => params[:page], per_page: 20)
  end #movies index sort handler

end #module