Sha256: cb35121c22ee21bc95b1475e59cf5efb694d6408d46b53cb65e8e5cdd5ef9a9f

Contents?: true

Size: 1.48 KB

Versions: 3

Compression:

Stored size: 1.48 KB

Contents

module Droom
  class SuggestionsController < Droom::EngineController
    respond_to :json, :js
    before_filter :authenticate_user!
    before_filter :get_classes
    
    def index
      fragment = params[:term]
      max = params[:limit] || 10
      show_when_empty = params[:empty] == "all"
      if !show_when_empty && fragment.blank?
        @suggestions = []
      else
        if @types.include?('event') && fragment.length > 6 && span = Chronic.parse(fragment, :guess => false)
          @suggestions = Droom::Event.falling_within(span).visible_to(current_user.person)
          @title = span.width > 86400 ? "Events in #{fragment}" : "Events on #{fragment}"
        else
          @suggestions = @klasses.collect {|klass|
            klass.constantize.visible_to(current_user.person).matching(fragment).limit(max.to_i)
          }.flatten.sort_by(&:name).slice(0, max.to_i)
        end
      end
      respond_with @suggestions do |format|
        format.json {
          render :json => @suggestions.map(&:as_suggestion).to_json
        }
        format.js {
          render :partial => "droom/shared/suggestions"
        }
      end
    end

  protected

    def get_classes
      suggestible_classes = Droom.suggestible_classes
      requested_types = [params[:type]].flatten.compact.uniq
      requested_types = Droom.suggestible_classes.keys if requested_types.empty?
      @types = suggestible_classes.keys & requested_types
      @klasses = suggestible_classes.values_at(*@types)
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
droom-0.4.3 app/controllers/droom/suggestions_controller.rb
droom-0.4.2 app/controllers/droom/suggestions_controller.rb
droom-0.4.1 app/controllers/droom/suggestions_controller.rb