Merge branch 'wiki-refactoring' into 'master'
Wiki refactoring Better names for variables and classes
This commit is contained in:
commit
fae6eb6353
|
@ -1,62 +1,67 @@
|
|||
require 'project_wiki'
|
||||
|
||||
class Projects::WikisController < Projects::ApplicationController
|
||||
before_filter :authorize_read_wiki!
|
||||
before_filter :authorize_write_wiki!, only: [:edit, :create, :history]
|
||||
before_filter :authorize_admin_wiki!, only: :destroy
|
||||
before_filter :load_gollum_wiki
|
||||
before_filter :load_project_wiki
|
||||
|
||||
def pages
|
||||
@wiki_pages = @gollum_wiki.pages
|
||||
@wiki_pages = @project_wiki.pages
|
||||
end
|
||||
|
||||
def show
|
||||
@wiki = @gollum_wiki.find_page(params[:id], params[:version_id])
|
||||
@page = @project_wiki.find_page(params[:id], params[:version_id])
|
||||
|
||||
if @wiki
|
||||
if @page
|
||||
render 'show'
|
||||
else
|
||||
return render('empty') unless can?(current_user, :write_wiki, @project)
|
||||
@wiki = WikiPage.new(@gollum_wiki)
|
||||
@wiki.title = params[:id]
|
||||
@page = WikiPage.new(@project_wiki)
|
||||
@page.title = params[:id]
|
||||
|
||||
render 'edit'
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
@wiki = @gollum_wiki.find_page(params[:id])
|
||||
@page = @project_wiki.find_page(params[:id])
|
||||
end
|
||||
|
||||
def update
|
||||
@wiki = @gollum_wiki.find_page(params[:id])
|
||||
@page = @project_wiki.find_page(params[:id])
|
||||
|
||||
return render('empty') unless can?(current_user, :write_wiki, @project)
|
||||
|
||||
if @wiki.update(content, format, message)
|
||||
redirect_to [@project, @wiki], notice: 'Wiki was successfully updated.'
|
||||
if @page.update(content, format, message)
|
||||
redirect_to [@project, @page], notice: 'Wiki was successfully updated.'
|
||||
else
|
||||
render 'edit'
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
@wiki = WikiPage.new(@gollum_wiki)
|
||||
@page = WikiPage.new(@project_wiki)
|
||||
|
||||
if @wiki.create(wiki_params)
|
||||
redirect_to project_wiki_path(@project, @wiki), notice: 'Wiki was successfully updated.'
|
||||
if @page.create(wiki_params)
|
||||
redirect_to project_wiki_path(@project, @page), notice: 'Wiki was successfully updated.'
|
||||
else
|
||||
render action: "edit"
|
||||
end
|
||||
end
|
||||
|
||||
def history
|
||||
@wiki = @gollum_wiki.find_page(params[:id])
|
||||
@page = @project_wiki.find_page(params[:id])
|
||||
|
||||
redirect_to(project_wiki_path(@project, :home), notice: "Page not found") unless @wiki
|
||||
unless @page
|
||||
redirect_to(project_wiki_path(@project, :home), notice: "Page not found")
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@wiki = @gollum_wiki.find_page(params[:id])
|
||||
@wiki.delete if @wiki
|
||||
@page = @project_wiki.find_page(params[:id])
|
||||
@page.delete if @page
|
||||
|
||||
redirect_to project_wiki_path(@project, :home), notice: "Page was successfully deleted"
|
||||
end
|
||||
|
||||
|
@ -65,12 +70,12 @@ class Projects::WikisController < Projects::ApplicationController
|
|||
|
||||
private
|
||||
|
||||
def load_gollum_wiki
|
||||
@gollum_wiki = GollumWiki.new(@project, current_user)
|
||||
def load_project_wiki
|
||||
@project_wiki = ProjectWiki.new(@project, current_user)
|
||||
|
||||
# Call #wiki to make sure the Wiki Repo is initialized
|
||||
@gollum_wiki.wiki
|
||||
rescue GollumWiki::CouldNotCreateWikiError => ex
|
||||
@project_wiki.wiki
|
||||
rescue ProjectWiki::CouldNotCreateWikiError => ex
|
||||
flash[:notice] = "Could not create Wiki Repository at this time. Please try again later."
|
||||
redirect_to @project
|
||||
return false
|
||||
|
@ -91,5 +96,4 @@ class Projects::WikisController < Projects::ApplicationController
|
|||
def message
|
||||
params[:wiki][:message]
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class GollumWiki
|
||||
class ProjectWiki
|
||||
include Gitlab::ShellAdapter
|
||||
|
||||
MARKUPS = {
|
|
@ -19,7 +19,7 @@ class WikiPage
|
|||
validates :title, presence: true
|
||||
validates :content, presence: true
|
||||
|
||||
# The Gitlab GollumWiki instance.
|
||||
# The Gitlab ProjectWiki instance.
|
||||
attr_reader :wiki
|
||||
|
||||
# The raw Gollum::Page instance.
|
||||
|
@ -118,7 +118,7 @@ class WikiPage
|
|||
# :content - The raw markup content.
|
||||
# :format - Optional symbol representing the
|
||||
# content format. Can be any type
|
||||
# listed in the GollumWiki::MARKUPS
|
||||
# listed in the ProjectWiki::MARKUPS
|
||||
# Hash.
|
||||
# :message - Optional commit message to set on
|
||||
# the new page.
|
||||
|
@ -135,7 +135,7 @@ class WikiPage
|
|||
#
|
||||
# new_content - The raw markup content to replace the existing.
|
||||
# format - Optional symbol representing the content format.
|
||||
# See GollumWiki::MARKUPS Hash for available formats.
|
||||
# See ProjectWiki::MARKUPS Hash for available formats.
|
||||
# message - Optional commit message to set on the new version.
|
||||
#
|
||||
# Returns the String SHA1 of the newly created page
|
||||
|
@ -181,5 +181,4 @@ class WikiPage
|
|||
end
|
||||
@persisted
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -74,8 +74,8 @@ module Projects
|
|||
if @project.wiki_enabled?
|
||||
begin
|
||||
# force the creation of a wiki,
|
||||
GollumWiki.new(@project, @project.owner).wiki
|
||||
rescue GollumWiki::CouldNotCreateWikiError => ex
|
||||
ProjectWiki.new(@project, @project.owner).wiki
|
||||
rescue ProjectWiki::CouldNotCreateWikiError => ex
|
||||
# Prevent project observer crash
|
||||
# if failed to create wiki
|
||||
nil
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
= form_for [@project, @wiki], method: @wiki.persisted? ? :put : :post, html: { class: 'form-horizontal' } do |f|
|
||||
-if @wiki.errors.any?
|
||||
= form_for [@project, @page], method: @page.persisted? ? :put : :post, html: { class: 'form-horizontal' } do |f|
|
||||
-if @page.errors.any?
|
||||
#error_explanation
|
||||
%h2= "#{pluralize(@wiki.errors.count, "error")} prohibited this wiki from being saved:"
|
||||
%h2= "#{pluralize(@page.errors.count, "error")} prohibited this wiki from being saved:"
|
||||
%ul
|
||||
- @wiki.errors.full_messages.each do |msg|
|
||||
- @page.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
||||
= f.hidden_field :title, value: @wiki.title
|
||||
= f.hidden_field :title, value: @page.title
|
||||
.form-group
|
||||
= f.label :format, class: 'control-label'
|
||||
.col-sm-10
|
||||
= f.select :format, options_for_select(GollumWiki::MARKUPS, {selected: @wiki.format}), {}, class: "form-control"
|
||||
= f.select :format, options_for_select(ProjectWiki::MARKUPS, {selected: @page.format}), {}, class: "form-control"
|
||||
|
||||
.row
|
||||
.col-sm-2
|
||||
|
@ -31,9 +31,9 @@
|
|||
.col-sm-10= f.text_field :message, class: 'form-control', rows: 18
|
||||
|
||||
.form-actions
|
||||
- if @wiki && @wiki.persisted?
|
||||
- if @page && @page.persisted?
|
||||
= f.submit 'Save changes', class: "btn-save btn"
|
||||
= link_to "Cancel", project_wiki_path(@project, @wiki), class: "btn btn-cancel"
|
||||
= link_to "Cancel", project_wiki_path(@project, @page), class: "btn btn-cancel"
|
||||
- else
|
||||
= f.submit 'Create page', class: "btn-create btn"
|
||||
= link_to "Cancel", project_wiki_path(@project, :home), class: "btn btn-cancel"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
%span.pull-right
|
||||
- if (@wiki && @wiki.persisted?)
|
||||
= link_to history_project_wiki_path(@project, @wiki), class: "btn btn-grouped" do
|
||||
- if (@page && @page.persisted?)
|
||||
= link_to history_project_wiki_path(@project, @page), class: "btn btn-grouped" do
|
||||
Page History
|
||||
- if can?(current_user, :write_wiki, @project)
|
||||
= link_to edit_project_wiki_path(@project, @wiki), class: "btn btn-grouped" do
|
||||
= link_to edit_project_wiki_path(@project, @page), class: "btn btn-grouped" do
|
||||
%i.icon-edit
|
||||
Edit
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
= render 'main_links'
|
||||
%h3.page-title
|
||||
Editing -
|
||||
%span.light #{@wiki.title.titleize}
|
||||
%span.light #{@page.title.titleize}
|
||||
%hr
|
||||
= render 'form'
|
||||
|
||||
.pull-right
|
||||
- if @wiki.persisted? && can?(current_user, :admin_wiki, @project)
|
||||
= link_to project_wiki_path(@project, @wiki), data: { confirm: "Are you sure you want to delete this page?"}, method: :delete, class: "btn btn-small btn-remove" do
|
||||
- if @page.persisted? && can?(current_user, :admin_wiki, @project)
|
||||
= link_to project_wiki_path(@project, @page), data: { confirm: "Are you sure you want to delete this page?"}, method: :delete, class: "btn btn-small btn-remove" do
|
||||
Delete this page
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
.col-sm-6
|
||||
%h3.page-title
|
||||
Git access for
|
||||
%strong= @gollum_wiki.path_with_namespace
|
||||
%strong= @project_wiki.path_with_namespace
|
||||
|
||||
.col-sm-6
|
||||
= render "shared/clone_panel", project: @gollum_wiki
|
||||
= render "shared/clone_panel", project: @project_wiki
|
||||
|
||||
.git-empty
|
||||
%fieldset
|
||||
|
@ -18,8 +18,8 @@
|
|||
%legend Clone Your Wiki:
|
||||
%pre.dark
|
||||
:preserve
|
||||
git clone #{ content_tag(:span, default_url_to_repo(@gollum_wiki), class: 'clone')}
|
||||
cd #{@gollum_wiki.path}
|
||||
git clone #{ content_tag(:span, default_url_to_repo(@project_wiki), class: 'clone')}
|
||||
cd #{@project_wiki.path}
|
||||
|
||||
%legend Start Gollum And Edit Locally:
|
||||
%pre.dark
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
= render 'nav'
|
||||
%h3.page-title
|
||||
%span.light History for
|
||||
= link_to @wiki.title.titleize, project_wiki_path(@project, @wiki)
|
||||
= link_to @page.title.titleize, project_wiki_path(@project, @page)
|
||||
|
||||
%table.table
|
||||
%thead
|
||||
|
@ -12,11 +12,11 @@
|
|||
%th Last updated
|
||||
%th Format
|
||||
%tbody
|
||||
- @wiki.versions.each do |version|
|
||||
- @page.versions.each do |version|
|
||||
- commit = version
|
||||
%tr
|
||||
%td
|
||||
= link_to project_wiki_path(@project, @wiki, version_id: commit.id) do
|
||||
= link_to project_wiki_path(@project, @page, version_id: commit.id) do
|
||||
= commit.short_id
|
||||
%td
|
||||
= commit_author_link(commit, avatar: true, size: 24)
|
||||
|
@ -26,4 +26,4 @@
|
|||
#{time_ago_with_tooltip(version.date)}
|
||||
%td
|
||||
%strong
|
||||
= @wiki.page.wiki.page(@wiki.page.name, commit.id).try(:format)
|
||||
= @page.page.wiki.page(@page.page.name, commit.id).try(:format)
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
= render 'nav'
|
||||
%h3.page-title
|
||||
= @wiki.title.titleize
|
||||
= @page.title.titleize
|
||||
= render 'main_links'
|
||||
- if @wiki.historical?
|
||||
- if @page.historical?
|
||||
.warning_message
|
||||
This is an old version of this page.
|
||||
You can view the #{link_to "most recent version", project_wiki_path(@project, @wiki)} or browse the #{link_to "history", history_project_wiki_path(@project, @wiki)}.
|
||||
You can view the #{link_to "most recent version", project_wiki_path(@project, @page)} or browse the #{link_to "history", history_project_wiki_path(@project, @page)}.
|
||||
|
||||
%hr
|
||||
|
||||
.wiki-holder
|
||||
.wiki
|
||||
= preserve do
|
||||
= render_wiki_content(@wiki)
|
||||
= render_wiki_content(@page)
|
||||
|
||||
%hr
|
||||
|
||||
.wiki-last-edit-by
|
||||
Last edited by #{commit_author_link(@wiki.commit, avatar: true, size: 16)} #{time_ago_with_tooltip(@wiki.commit.created_at)}
|
||||
Last edited by #{commit_author_link(@page.commit, avatar: true, size: 16)} #{time_ago_with_tooltip(@page.commit.created_at)}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class ProjectWiki < Spinach::FeatureSteps
|
||||
class Spinach::Features::ProjectWiki < Spinach::FeatureSteps
|
||||
include SharedAuthentication
|
||||
include SharedProject
|
||||
include SharedNote
|
||||
|
@ -16,7 +16,7 @@ class ProjectWiki < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
Given 'I create the Wiki Home page' do
|
||||
fill_in "Content", with: '[link test](test)'
|
||||
fill_in "wiki_content", with: '[link test](test)'
|
||||
click_on "Create page"
|
||||
end
|
||||
|
||||
|
@ -87,6 +87,6 @@ class ProjectWiki < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
def wiki
|
||||
@gollum_wiki = GollumWiki.new(project, current_user)
|
||||
@project_wiki = ProjectWiki.new(project, current_user)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -24,7 +24,7 @@ module Backup
|
|||
puts "[FAILED]".red
|
||||
end
|
||||
|
||||
wiki = GollumWiki.new(project)
|
||||
wiki = ProjectWiki.new(project)
|
||||
|
||||
if File.exists?(path_to_repo(wiki))
|
||||
print " * #{wiki.path_with_namespace} ... "
|
||||
|
@ -59,7 +59,7 @@ module Backup
|
|||
puts "[FAILED]".red
|
||||
end
|
||||
|
||||
wiki = GollumWiki.new(project)
|
||||
wiki = ProjectWiki.new(project)
|
||||
|
||||
if File.exists?(path_to_bundle(wiki))
|
||||
print " * #{wiki.path_with_namespace} ... "
|
||||
|
|
|
@ -60,6 +60,8 @@ class Redcarpet::Render::GitlabHTML < Redcarpet::Render::HTML
|
|||
end
|
||||
|
||||
def is_wiki?
|
||||
@template.instance_variable_get("@wiki")
|
||||
if @template.instance_variable_get("@project_wiki")
|
||||
@template.instance_variable_get("@page")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
require "spec_helper"
|
||||
|
||||
describe GollumWiki do
|
||||
describe ProjectWiki do
|
||||
|
||||
def remove_temp_repo(path)
|
||||
FileUtils.rm_rf path
|
||||
|
@ -23,7 +23,7 @@ describe GollumWiki do
|
|||
let(:user) { project.owner }
|
||||
let(:gitlab_shell) { Gitlab::Shell.new }
|
||||
|
||||
subject { GollumWiki.new(project, user) }
|
||||
subject { ProjectWiki.new(project, user) }
|
||||
|
||||
before do
|
||||
create_temp_repo(subject.send(:path_to_repo))
|
||||
|
@ -68,15 +68,15 @@ describe GollumWiki do
|
|||
end
|
||||
|
||||
it "creates a new wiki repo if one does not yet exist" do
|
||||
wiki = GollumWiki.new(project, user)
|
||||
wiki = ProjectWiki.new(project, user)
|
||||
wiki.create_page("index", "test content").should_not == false
|
||||
|
||||
FileUtils.rm_rf wiki.send(:path_to_repo)
|
||||
end
|
||||
|
||||
it "raises CouldNotCreateWikiError if it can't create the wiki repository" do
|
||||
GollumWiki.any_instance.stub(:init_repo).and_return(false)
|
||||
expect { GollumWiki.new(project, user).wiki }.to raise_exception(GollumWiki::CouldNotCreateWikiError)
|
||||
ProjectWiki.any_instance.stub(:init_repo).and_return(false)
|
||||
expect { ProjectWiki.new(project, user).wiki }.to raise_exception(ProjectWiki::CouldNotCreateWikiError)
|
||||
end
|
||||
end
|
||||
|
|
@ -22,7 +22,7 @@ describe WikiPage do
|
|||
let(:project) { create(:project) }
|
||||
let(:repository) { project.repository }
|
||||
let(:user) { project.owner }
|
||||
let(:wiki) { GollumWiki.new(project, user) }
|
||||
let(:wiki) { ProjectWiki.new(project, user) }
|
||||
|
||||
subject { WikiPage.new(wiki) }
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ describe Projects::CreateService do
|
|||
context 'wiki_enabled true creates wiki repository directory' do
|
||||
before do
|
||||
@project = create_project(@user, @opts)
|
||||
@path = GollumWiki.new(@project, @user).send(:path_to_repo)
|
||||
@path = ProjectWiki.new(@project, @user).send(:path_to_repo)
|
||||
end
|
||||
|
||||
it { File.exists?(@path).should be_true }
|
||||
|
@ -52,7 +52,7 @@ describe Projects::CreateService do
|
|||
before do
|
||||
@opts.merge!(wiki_enabled: false)
|
||||
@project = create_project(@user, @opts)
|
||||
@path = GollumWiki.new(@project, @user).send(:path_to_repo)
|
||||
@path = ProjectWiki.new(@project, @user).send(:path_to_repo)
|
||||
end
|
||||
|
||||
it { File.exists?(@path).should be_false }
|
||||
|
|
|
@ -52,7 +52,7 @@ module TestEnv
|
|||
def setup_stubs()
|
||||
# Use tmp dir for FS manipulations
|
||||
repos_path = testing_path()
|
||||
GollumWiki.any_instance.stub(:init_repo) do |path|
|
||||
ProjectWiki.any_instance.stub(:init_repo) do |path|
|
||||
create_temp_repo(File.join(repos_path, "#{path}.git"))
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue