Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • da112aba312d5df256534d2dd9c2d1262c49e63d
  • arise par défaut
  • list
3 résultats

Meteo.pm

Blame
  • tracks_controller.rb 2,20 Kio
    class TracksController < ApplicationController
      def filters( *filters )
        filters.each do | filter |
          if param = params[filter] || params["#{filter}_id"]
            @tracks = @tracks.send( "with_#{filter}", param )
          end
        end
      end
    
      def filterCondition ( filters )
        query = ""
        filters.each do | filter |
          if param = params[filter] #|| params["#{filter}_id"]
            unless query.empty?
              query.concat(" and")
            end
    
            case filter
            when :tag, :channel, :user
              query.concat" #{filter}s.name='#{param}'"
            when :date
              query.concat(" date(irc_posts.posted_at)='#{param}'")
            end
          end
        end
        return query
      end
    
      def filterQuery ( filters )
        query=""
    
        if [:channel, :user, :date].any? {|param| params.has_key? param}
          query.concat(" inner join irc_posts ON irc_posts.track_id = tracks.id")
        end
    
        filters.each do | filter |
          if params[filter] || params["#{filter}_id"]
            case filter
            when :channel
              query.concat(" inner join channels on irc_posts.channel_id = channels.id")
            when :user
              query.concat(" inner join users on irc_posts.user_id = users.id")
            when :tag
              query.concat(" inner join tag_assignations on tag_assignations.track_id = tracks.id inner join tags on tags.id = tag_assignations.tag_id")
            end
          end
        end
        return query
      end
    
      def filtersOptimized( *filters )
        condition = filterCondition( filters )
        query = filterQuery( filters )
    
    
        if [:channel, :user, :date].any? {|param| params.has_key? param}
          @tracks = Track.joins(query).where(condition).group(:track_id).page params[:page]
        else
          @tracks = Track.joins(query).where(condition).page params[:page]
        end
      end
    
      def index
        #@tracks = Track.includes(:tags).page params[:page]
        #filters :tag, :channel, :user
        filtersOptimized :tag, :channel, :user, :date
        render json: @tracks, 
          status: 200, 
          meta: {
            current_page: @tracks.current_page,
            per_page: @tracks.default_per_page,
            total_pages: @tracks.num_pages
          } 
      end
    
      def show 
        @track = Track.find(params[:id])
        
        render json: @track, status: 200
      end
    
    end