Skip to content
Snippets Groups Projects
snippets_controller.rb 2.08 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_project_snippet!
    
    
      # Allow write(create) snippet
    
      before_filter :authorize_write_project_snippet!, only: [:new, :create]
    
    
      # Allow modify snippet
    
      before_filter :authorize_modify_project_snippet!, only: [:edit, :update]
    
    
      # Allow destroy snippet
    
      before_filter :authorize_admin_project_snippet!, only: [:destroy]
    
    
      respond_to :html
    
      def index
        @snippets = @project.snippets.fresh.non_expired
      end
    
      def new
    
    Andrew8xx8's avatar
    Andrew8xx8 committed
        @snippet = @project.snippets.build
    
      end
    
      def create
    
        @snippet = @project.snippets.build(snippet_params)
    
        @snippet.author = current_user
    
    
    Andrew8xx8's avatar
    Andrew8xx8 committed
        if @snippet.save
    
          redirect_to project_snippet_path(@project, @snippet)
    
        else
          respond_with(@snippet)
        end
      end
    
      def edit
      end
    
      def update
    
        if @snippet.update_attributes(snippet_params)
    
          redirect_to project_snippet_path(@project, @snippet)
    
        else
          respond_with(@snippet)
        end
      end
    
      def show
        @note = @project.notes.new(noteable: @snippet)
    
        @notes = @snippet.notes.fresh
    
      end
    
      def destroy
    
        return access_denied! unless can?(current_user, :admin_project_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_project_snippet!
    
        return render_404 unless can?(current_user, :modify_project_snippet, @snippet)
    
      def authorize_admin_project_snippet!
    
        return render_404 unless can?(current_user, :admin_project_snippet, @snippet)
    
      end
    
      def module_enabled
        return render_404 unless @project.snippets_enabled
      end
    
    
      def snippet_params
        params.require(:project_snippet).permit(:title, :content, :file_name, :private)
      end