JS-Tech/resj

View on GitHub
app/controllers/cards_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
class CardsController < ApplicationController

  def index
    respond_to do |format|
            format.json { @cards = search }
        end
  end

  def show
    @card = Card.find(params[:id])
  end

  private

  def search
    clean(params)
    cards = Card.online.order(:validity)
    if params[:name].present?
      cards = cards.where("name ilike ?", "%#{params[:name]}%")
    end
    if params[:card_types].present?
      cards = cards.where(card_type: params[:card_types])
    end
    if params[:cantons].present?
      cards = cards.joins(:location).where(locations: { canton_id: params[:cantons] })
    end
    if params[:tags].present?
      cards = cards.joins(:taggings).where(taggings: { tag_id: params[:tags] })
    end
    return cards
  end

  def clean(params)
    # reject empty strings and convert values to an integer ("string".to_i returns 0)
    [params[:card_types], params[:cantons], params[:tags]].compact.each do |p| 
      p.reject! { |c| c.empty? }
      p.map! { |c| c.to_i }
    end
  end

end