ging/social_stream

View on GitHub
base/app/controllers/search_controller.rb

Summary

Maintainability
A
3 hrs
Test Coverage
class SearchController < ApplicationController
  include ActionView::Helpers::SanitizeHelper

  RESULTS_SEARCH_PER_PAGE=16

  def index
    @search_result =
      if params[:q].blank? || params[:q].strip.size < SocialStream::Search::MIN_QUERY
        Kaminari.paginate_array([])
      elsif params[:mode] == "quick"
        search :quick
      else
        search :extended
      end

    respond_to do |format|
      format.html {
        if request.xhr?
          if params[:mode] == "quick"
            render partial: "quick"
          else
            if params[:q].present?
              render partial: 'results'
            else
              render partial: 'index'
            end
          end
        end
      }

      format.json {
        json_obj = (
          params[:type].present? ?
          { params[:type].pluralize => @search_result } :
          @search_result
        )

        render :json => json_obj.as_json(helper: self)
      }

      format.js
    end
  end

  private

  def search mode
    page =  ( mode == :quick ? 1 : params[:page] )
    limit = ( mode == :quick ? 7 : RESULTS_SEARCH_PER_PAGE )

    SocialStream::Search.search(params[:q],
                                current_subject,
                                mode:  mode,
                                key:   params[:type],
                                page:  page,
                                limit: limit)

  end
end