Skip to content
Snippets Groups Projects
snippets_controller.rb 1.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • class Projects::SnippetsController < Projects::ApplicationController
    
      before_filter :module_enabled
      before_filter :snippet, only: [:show, :edit, :destroy, :update, :raw]
    
      # Allow read any snippet
      before_filter :authorize_read_snippet!
    
      # Allow write(create) snippet
      before_filter :authorize_write_snippet!, only: [:new, :create]
    
      # Allow modify snippet
      before_filter :authorize_modify_snippet!, only: [:edit, :update]
    
      # Allow destroy snippet
      before_filter :authorize_admin_snippet!, only: [:destroy]
    
    
      layout 'project_resource'
    
    
      respond_to :html
    
      def index
        @snippets = @project.snippets.fresh.non_expired
      end
    
      def new
        @snippet = @project.snippets.new
      end
    
      def create
        @snippet = @project.snippets.new(params[:snippet])
        @snippet.author = current_user
        @snippet.save
    
        if @snippet.valid?
          redirect_to [@project, @snippet]
        else
          respond_with(@snippet)
        end
      end
    
      def edit
      end
    
      def update
        @snippet.update_attributes(params[:snippet])
    
        if @snippet.valid?
          redirect_to [@project, @snippet]
        else
          respond_with(@snippet)
        end
      end
    
      def show
        @note = @project.notes.new(noteable: @snippet)
        @target_type = :snippet
        @target_id = @snippet.id
      end
    
      def destroy
        return access_denied! unless can?(current_user, :admin_snippet, @snippet)
    
        @snippet.destroy
    
        redirect_to project_snippets_path(@project)
      end
    
      def raw
        send_data(
          @snippet.content,
          type: "text/plain",
          disposition: 'inline',
          filename: @snippet.file_name
        )
      end
    
      protected
    
      def snippet
        @snippet ||= @project.snippets.find(params[:id])
      end
    
      def authorize_modify_snippet!
        return render_404 unless can?(current_user, :modify_snippet, @snippet)
      end
    
      def authorize_admin_snippet!
        return render_404 unless can?(current_user, :admin_snippet, @snippet)
      end
    
      def module_enabled
        return render_404 unless @project.snippets_enabled
      end
    end