Commit fae6eb63535f6136704365692f4c34ccfd6eba67
Exists in
spb-stable
and in
3 other branches
Merge branch 'wiki-refactoring' into 'master'
Wiki refactoring Better names for variables and classes
Showing
19 changed files
with
401 additions
and
396 deletions
Show diff stats
app/controllers/projects/wikis_controller.rb
1 | +require 'project_wiki' | |
2 | + | |
1 | 3 | class Projects::WikisController < Projects::ApplicationController |
2 | 4 | before_filter :authorize_read_wiki! |
3 | 5 | before_filter :authorize_write_wiki!, only: [:edit, :create, :history] |
4 | 6 | before_filter :authorize_admin_wiki!, only: :destroy |
5 | - before_filter :load_gollum_wiki | |
7 | + before_filter :load_project_wiki | |
6 | 8 | |
7 | 9 | def pages |
8 | - @wiki_pages = @gollum_wiki.pages | |
10 | + @wiki_pages = @project_wiki.pages | |
9 | 11 | end |
10 | 12 | |
11 | 13 | def show |
12 | - @wiki = @gollum_wiki.find_page(params[:id], params[:version_id]) | |
14 | + @page = @project_wiki.find_page(params[:id], params[:version_id]) | |
13 | 15 | |
14 | - if @wiki | |
16 | + if @page | |
15 | 17 | render 'show' |
16 | 18 | else |
17 | 19 | return render('empty') unless can?(current_user, :write_wiki, @project) |
18 | - @wiki = WikiPage.new(@gollum_wiki) | |
19 | - @wiki.title = params[:id] | |
20 | + @page = WikiPage.new(@project_wiki) | |
21 | + @page.title = params[:id] | |
20 | 22 | |
21 | 23 | render 'edit' |
22 | 24 | end |
23 | 25 | end |
24 | 26 | |
25 | 27 | def edit |
26 | - @wiki = @gollum_wiki.find_page(params[:id]) | |
28 | + @page = @project_wiki.find_page(params[:id]) | |
27 | 29 | end |
28 | 30 | |
29 | 31 | def update |
30 | - @wiki = @gollum_wiki.find_page(params[:id]) | |
32 | + @page = @project_wiki.find_page(params[:id]) | |
31 | 33 | |
32 | 34 | return render('empty') unless can?(current_user, :write_wiki, @project) |
33 | 35 | |
34 | - if @wiki.update(content, format, message) | |
35 | - redirect_to [@project, @wiki], notice: 'Wiki was successfully updated.' | |
36 | + if @page.update(content, format, message) | |
37 | + redirect_to [@project, @page], notice: 'Wiki was successfully updated.' | |
36 | 38 | else |
37 | 39 | render 'edit' |
38 | 40 | end |
39 | 41 | end |
40 | 42 | |
41 | 43 | def create |
42 | - @wiki = WikiPage.new(@gollum_wiki) | |
44 | + @page = WikiPage.new(@project_wiki) | |
43 | 45 | |
44 | - if @wiki.create(wiki_params) | |
45 | - redirect_to project_wiki_path(@project, @wiki), notice: 'Wiki was successfully updated.' | |
46 | + if @page.create(wiki_params) | |
47 | + redirect_to project_wiki_path(@project, @page), notice: 'Wiki was successfully updated.' | |
46 | 48 | else |
47 | 49 | render action: "edit" |
48 | 50 | end |
49 | 51 | end |
50 | 52 | |
51 | 53 | def history |
52 | - @wiki = @gollum_wiki.find_page(params[:id]) | |
54 | + @page = @project_wiki.find_page(params[:id]) | |
53 | 55 | |
54 | - redirect_to(project_wiki_path(@project, :home), notice: "Page not found") unless @wiki | |
56 | + unless @page | |
57 | + redirect_to(project_wiki_path(@project, :home), notice: "Page not found") | |
58 | + end | |
55 | 59 | end |
56 | 60 | |
57 | 61 | def destroy |
58 | - @wiki = @gollum_wiki.find_page(params[:id]) | |
59 | - @wiki.delete if @wiki | |
62 | + @page = @project_wiki.find_page(params[:id]) | |
63 | + @page.delete if @page | |
64 | + | |
60 | 65 | redirect_to project_wiki_path(@project, :home), notice: "Page was successfully deleted" |
61 | 66 | end |
62 | 67 | |
... | ... | @@ -65,12 +70,12 @@ class Projects::WikisController < Projects::ApplicationController |
65 | 70 | |
66 | 71 | private |
67 | 72 | |
68 | - def load_gollum_wiki | |
69 | - @gollum_wiki = GollumWiki.new(@project, current_user) | |
73 | + def load_project_wiki | |
74 | + @project_wiki = ProjectWiki.new(@project, current_user) | |
70 | 75 | |
71 | 76 | # Call #wiki to make sure the Wiki Repo is initialized |
72 | - @gollum_wiki.wiki | |
73 | - rescue GollumWiki::CouldNotCreateWikiError => ex | |
77 | + @project_wiki.wiki | |
78 | + rescue ProjectWiki::CouldNotCreateWikiError => ex | |
74 | 79 | flash[:notice] = "Could not create Wiki Repository at this time. Please try again later." |
75 | 80 | redirect_to @project |
76 | 81 | return false |
... | ... | @@ -91,5 +96,4 @@ class Projects::WikisController < Projects::ApplicationController |
91 | 96 | def message |
92 | 97 | params[:wiki][:message] |
93 | 98 | end |
94 | - | |
95 | 99 | end | ... | ... |
app/models/gollum_wiki.rb
... | ... | @@ -1,120 +0,0 @@ |
1 | -class GollumWiki | |
2 | - include Gitlab::ShellAdapter | |
3 | - | |
4 | - MARKUPS = { | |
5 | - "Markdown" => :markdown, | |
6 | - "RDoc" => :rdoc | |
7 | - } | |
8 | - | |
9 | - class CouldNotCreateWikiError < StandardError; end | |
10 | - | |
11 | - # Returns a string describing what went wrong after | |
12 | - # an operation fails. | |
13 | - attr_reader :error_message | |
14 | - | |
15 | - def initialize(project, user = nil) | |
16 | - @project = project | |
17 | - @user = user | |
18 | - end | |
19 | - | |
20 | - def path | |
21 | - @project.path + '.wiki' | |
22 | - end | |
23 | - | |
24 | - def path_with_namespace | |
25 | - @project.path_with_namespace + ".wiki" | |
26 | - end | |
27 | - | |
28 | - def url_to_repo | |
29 | - gitlab_shell.url_to_repo(path_with_namespace) | |
30 | - end | |
31 | - | |
32 | - def ssh_url_to_repo | |
33 | - url_to_repo | |
34 | - end | |
35 | - | |
36 | - def http_url_to_repo | |
37 | - [Gitlab.config.gitlab.url, "/", path_with_namespace, ".git"].join('') | |
38 | - end | |
39 | - | |
40 | - # Returns the Gollum::Wiki object. | |
41 | - def wiki | |
42 | - @wiki ||= begin | |
43 | - Gollum::Wiki.new(path_to_repo) | |
44 | - rescue Gollum::NoSuchPathError | |
45 | - create_repo! | |
46 | - end | |
47 | - end | |
48 | - | |
49 | - def empty? | |
50 | - pages.empty? | |
51 | - end | |
52 | - | |
53 | - # Returns an Array of Gitlab WikiPage instances or an | |
54 | - # empty Array if this Wiki has no pages. | |
55 | - def pages | |
56 | - wiki.pages.map { |page| WikiPage.new(self, page, true) } | |
57 | - end | |
58 | - | |
59 | - # Finds a page within the repository based on a tile | |
60 | - # or slug. | |
61 | - # | |
62 | - # title - The human readable or parameterized title of | |
63 | - # the page. | |
64 | - # | |
65 | - # Returns an initialized WikiPage instance or nil | |
66 | - def find_page(title, version = nil) | |
67 | - if page = wiki.page(title, version) | |
68 | - WikiPage.new(self, page, true) | |
69 | - else | |
70 | - nil | |
71 | - end | |
72 | - end | |
73 | - | |
74 | - def create_page(title, content, format = :markdown, message = nil) | |
75 | - commit = commit_details(:created, message, title) | |
76 | - | |
77 | - wiki.write_page(title, format, content, commit) | |
78 | - rescue Gollum::DuplicatePageError => e | |
79 | - @error_message = "Duplicate page: #{e.message}" | |
80 | - return false | |
81 | - end | |
82 | - | |
83 | - def update_page(page, content, format = :markdown, message = nil) | |
84 | - commit = commit_details(:updated, message, page.title) | |
85 | - | |
86 | - wiki.update_page(page, page.name, format, content, commit) | |
87 | - end | |
88 | - | |
89 | - def delete_page(page, message = nil) | |
90 | - wiki.delete_page(page, commit_details(:deleted, message, page.title)) | |
91 | - end | |
92 | - | |
93 | - private | |
94 | - | |
95 | - def create_repo! | |
96 | - if init_repo(path_with_namespace) | |
97 | - Gollum::Wiki.new(path_to_repo) | |
98 | - else | |
99 | - raise CouldNotCreateWikiError | |
100 | - end | |
101 | - end | |
102 | - | |
103 | - def init_repo(path_with_namespace) | |
104 | - gitlab_shell.add_repository(path_with_namespace) | |
105 | - end | |
106 | - | |
107 | - def commit_details(action, message = nil, title = nil) | |
108 | - commit_message = message || default_message(action, title) | |
109 | - | |
110 | - {email: @user.email, name: @user.name, message: commit_message} | |
111 | - end | |
112 | - | |
113 | - def default_message(action, title) | |
114 | - "#{@user.username} #{action} page: #{title}" | |
115 | - end | |
116 | - | |
117 | - def path_to_repo | |
118 | - @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git") | |
119 | - end | |
120 | -end |
... | ... | @@ -0,0 +1,120 @@ |
1 | +class ProjectWiki | |
2 | + include Gitlab::ShellAdapter | |
3 | + | |
4 | + MARKUPS = { | |
5 | + "Markdown" => :markdown, | |
6 | + "RDoc" => :rdoc | |
7 | + } | |
8 | + | |
9 | + class CouldNotCreateWikiError < StandardError; end | |
10 | + | |
11 | + # Returns a string describing what went wrong after | |
12 | + # an operation fails. | |
13 | + attr_reader :error_message | |
14 | + | |
15 | + def initialize(project, user = nil) | |
16 | + @project = project | |
17 | + @user = user | |
18 | + end | |
19 | + | |
20 | + def path | |
21 | + @project.path + '.wiki' | |
22 | + end | |
23 | + | |
24 | + def path_with_namespace | |
25 | + @project.path_with_namespace + ".wiki" | |
26 | + end | |
27 | + | |
28 | + def url_to_repo | |
29 | + gitlab_shell.url_to_repo(path_with_namespace) | |
30 | + end | |
31 | + | |
32 | + def ssh_url_to_repo | |
33 | + url_to_repo | |
34 | + end | |
35 | + | |
36 | + def http_url_to_repo | |
37 | + [Gitlab.config.gitlab.url, "/", path_with_namespace, ".git"].join('') | |
38 | + end | |
39 | + | |
40 | + # Returns the Gollum::Wiki object. | |
41 | + def wiki | |
42 | + @wiki ||= begin | |
43 | + Gollum::Wiki.new(path_to_repo) | |
44 | + rescue Gollum::NoSuchPathError | |
45 | + create_repo! | |
46 | + end | |
47 | + end | |
48 | + | |
49 | + def empty? | |
50 | + pages.empty? | |
51 | + end | |
52 | + | |
53 | + # Returns an Array of Gitlab WikiPage instances or an | |
54 | + # empty Array if this Wiki has no pages. | |
55 | + def pages | |
56 | + wiki.pages.map { |page| WikiPage.new(self, page, true) } | |
57 | + end | |
58 | + | |
59 | + # Finds a page within the repository based on a tile | |
60 | + # or slug. | |
61 | + # | |
62 | + # title - The human readable or parameterized title of | |
63 | + # the page. | |
64 | + # | |
65 | + # Returns an initialized WikiPage instance or nil | |
66 | + def find_page(title, version = nil) | |
67 | + if page = wiki.page(title, version) | |
68 | + WikiPage.new(self, page, true) | |
69 | + else | |
70 | + nil | |
71 | + end | |
72 | + end | |
73 | + | |
74 | + def create_page(title, content, format = :markdown, message = nil) | |
75 | + commit = commit_details(:created, message, title) | |
76 | + | |
77 | + wiki.write_page(title, format, content, commit) | |
78 | + rescue Gollum::DuplicatePageError => e | |
79 | + @error_message = "Duplicate page: #{e.message}" | |
80 | + return false | |
81 | + end | |
82 | + | |
83 | + def update_page(page, content, format = :markdown, message = nil) | |
84 | + commit = commit_details(:updated, message, page.title) | |
85 | + | |
86 | + wiki.update_page(page, page.name, format, content, commit) | |
87 | + end | |
88 | + | |
89 | + def delete_page(page, message = nil) | |
90 | + wiki.delete_page(page, commit_details(:deleted, message, page.title)) | |
91 | + end | |
92 | + | |
93 | + private | |
94 | + | |
95 | + def create_repo! | |
96 | + if init_repo(path_with_namespace) | |
97 | + Gollum::Wiki.new(path_to_repo) | |
98 | + else | |
99 | + raise CouldNotCreateWikiError | |
100 | + end | |
101 | + end | |
102 | + | |
103 | + def init_repo(path_with_namespace) | |
104 | + gitlab_shell.add_repository(path_with_namespace) | |
105 | + end | |
106 | + | |
107 | + def commit_details(action, message = nil, title = nil) | |
108 | + commit_message = message || default_message(action, title) | |
109 | + | |
110 | + {email: @user.email, name: @user.name, message: commit_message} | |
111 | + end | |
112 | + | |
113 | + def default_message(action, title) | |
114 | + "#{@user.username} #{action} page: #{title}" | |
115 | + end | |
116 | + | |
117 | + def path_to_repo | |
118 | + @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git") | |
119 | + end | |
120 | +end | ... | ... |
app/models/wiki_page.rb
... | ... | @@ -19,7 +19,7 @@ class WikiPage |
19 | 19 | validates :title, presence: true |
20 | 20 | validates :content, presence: true |
21 | 21 | |
22 | - # The Gitlab GollumWiki instance. | |
22 | + # The Gitlab ProjectWiki instance. | |
23 | 23 | attr_reader :wiki |
24 | 24 | |
25 | 25 | # The raw Gollum::Page instance. |
... | ... | @@ -118,7 +118,7 @@ class WikiPage |
118 | 118 | # :content - The raw markup content. |
119 | 119 | # :format - Optional symbol representing the |
120 | 120 | # content format. Can be any type |
121 | - # listed in the GollumWiki::MARKUPS | |
121 | + # listed in the ProjectWiki::MARKUPS | |
122 | 122 | # Hash. |
123 | 123 | # :message - Optional commit message to set on |
124 | 124 | # the new page. |
... | ... | @@ -135,7 +135,7 @@ class WikiPage |
135 | 135 | # |
136 | 136 | # new_content - The raw markup content to replace the existing. |
137 | 137 | # format - Optional symbol representing the content format. |
138 | - # See GollumWiki::MARKUPS Hash for available formats. | |
138 | + # See ProjectWiki::MARKUPS Hash for available formats. | |
139 | 139 | # message - Optional commit message to set on the new version. |
140 | 140 | # |
141 | 141 | # Returns the String SHA1 of the newly created page |
... | ... | @@ -181,5 +181,4 @@ class WikiPage |
181 | 181 | end |
182 | 182 | @persisted |
183 | 183 | end |
184 | - | |
185 | 184 | end | ... | ... |
app/services/projects/create_service.rb
... | ... | @@ -74,8 +74,8 @@ module Projects |
74 | 74 | if @project.wiki_enabled? |
75 | 75 | begin |
76 | 76 | # force the creation of a wiki, |
77 | - GollumWiki.new(@project, @project.owner).wiki | |
78 | - rescue GollumWiki::CouldNotCreateWikiError => ex | |
77 | + ProjectWiki.new(@project, @project.owner).wiki | |
78 | + rescue ProjectWiki::CouldNotCreateWikiError => ex | |
79 | 79 | # Prevent project observer crash |
80 | 80 | # if failed to create wiki |
81 | 81 | nil | ... | ... |
app/views/projects/wikis/_form.html.haml
1 | -= form_for [@project, @wiki], method: @wiki.persisted? ? :put : :post, html: { class: 'form-horizontal' } do |f| | |
2 | - -if @wiki.errors.any? | |
1 | += form_for [@project, @page], method: @page.persisted? ? :put : :post, html: { class: 'form-horizontal' } do |f| | |
2 | + -if @page.errors.any? | |
3 | 3 | #error_explanation |
4 | - %h2= "#{pluralize(@wiki.errors.count, "error")} prohibited this wiki from being saved:" | |
4 | + %h2= "#{pluralize(@page.errors.count, "error")} prohibited this wiki from being saved:" | |
5 | 5 | %ul |
6 | - - @wiki.errors.full_messages.each do |msg| | |
6 | + - @page.errors.full_messages.each do |msg| | |
7 | 7 | %li= msg |
8 | 8 | |
9 | - = f.hidden_field :title, value: @wiki.title | |
9 | + = f.hidden_field :title, value: @page.title | |
10 | 10 | .form-group |
11 | 11 | = f.label :format, class: 'control-label' |
12 | 12 | .col-sm-10 |
13 | - = f.select :format, options_for_select(GollumWiki::MARKUPS, {selected: @wiki.format}), {}, class: "form-control" | |
13 | + = f.select :format, options_for_select(ProjectWiki::MARKUPS, {selected: @page.format}), {}, class: "form-control" | |
14 | 14 | |
15 | 15 | .row |
16 | 16 | .col-sm-2 |
... | ... | @@ -31,9 +31,9 @@ |
31 | 31 | .col-sm-10= f.text_field :message, class: 'form-control', rows: 18 |
32 | 32 | |
33 | 33 | .form-actions |
34 | - - if @wiki && @wiki.persisted? | |
34 | + - if @page && @page.persisted? | |
35 | 35 | = f.submit 'Save changes', class: "btn-save btn" |
36 | - = link_to "Cancel", project_wiki_path(@project, @wiki), class: "btn btn-cancel" | |
36 | + = link_to "Cancel", project_wiki_path(@project, @page), class: "btn btn-cancel" | |
37 | 37 | - else |
38 | 38 | = f.submit 'Create page', class: "btn-create btn" |
39 | 39 | = link_to "Cancel", project_wiki_path(@project, :home), class: "btn btn-cancel" | ... | ... |
app/views/projects/wikis/_main_links.html.haml
1 | 1 | %span.pull-right |
2 | - - if (@wiki && @wiki.persisted?) | |
3 | - = link_to history_project_wiki_path(@project, @wiki), class: "btn btn-grouped" do | |
2 | + - if (@page && @page.persisted?) | |
3 | + = link_to history_project_wiki_path(@project, @page), class: "btn btn-grouped" do | |
4 | 4 | Page History |
5 | 5 | - if can?(current_user, :write_wiki, @project) |
6 | - = link_to edit_project_wiki_path(@project, @wiki), class: "btn btn-grouped" do | |
6 | + = link_to edit_project_wiki_path(@project, @page), class: "btn btn-grouped" do | |
7 | 7 | %i.icon-edit |
8 | 8 | Edit | ... | ... |
app/views/projects/wikis/edit.html.haml
... | ... | @@ -3,11 +3,11 @@ |
3 | 3 | = render 'main_links' |
4 | 4 | %h3.page-title |
5 | 5 | Editing - |
6 | - %span.light #{@wiki.title.titleize} | |
6 | + %span.light #{@page.title.titleize} | |
7 | 7 | %hr |
8 | 8 | = render 'form' |
9 | 9 | |
10 | 10 | .pull-right |
11 | - - if @wiki.persisted? && can?(current_user, :admin_wiki, @project) | |
12 | - = 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 | |
11 | + - if @page.persisted? && can?(current_user, :admin_wiki, @project) | |
12 | + = 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 | |
13 | 13 | Delete this page | ... | ... |
app/views/projects/wikis/git_access.html.haml
... | ... | @@ -3,10 +3,10 @@ |
3 | 3 | .col-sm-6 |
4 | 4 | %h3.page-title |
5 | 5 | Git access for |
6 | - %strong= @gollum_wiki.path_with_namespace | |
6 | + %strong= @project_wiki.path_with_namespace | |
7 | 7 | |
8 | 8 | .col-sm-6 |
9 | - = render "shared/clone_panel", project: @gollum_wiki | |
9 | + = render "shared/clone_panel", project: @project_wiki | |
10 | 10 | |
11 | 11 | .git-empty |
12 | 12 | %fieldset |
... | ... | @@ -18,8 +18,8 @@ |
18 | 18 | %legend Clone Your Wiki: |
19 | 19 | %pre.dark |
20 | 20 | :preserve |
21 | - git clone #{ content_tag(:span, default_url_to_repo(@gollum_wiki), class: 'clone')} | |
22 | - cd #{@gollum_wiki.path} | |
21 | + git clone #{ content_tag(:span, default_url_to_repo(@project_wiki), class: 'clone')} | |
22 | + cd #{@project_wiki.path} | |
23 | 23 | |
24 | 24 | %legend Start Gollum And Edit Locally: |
25 | 25 | %pre.dark | ... | ... |
app/views/projects/wikis/history.html.haml
1 | 1 | = render 'nav' |
2 | 2 | %h3.page-title |
3 | 3 | %span.light History for |
4 | - = link_to @wiki.title.titleize, project_wiki_path(@project, @wiki) | |
4 | + = link_to @page.title.titleize, project_wiki_path(@project, @page) | |
5 | 5 | |
6 | 6 | %table.table |
7 | 7 | %thead |
... | ... | @@ -12,11 +12,11 @@ |
12 | 12 | %th Last updated |
13 | 13 | %th Format |
14 | 14 | %tbody |
15 | - - @wiki.versions.each do |version| | |
15 | + - @page.versions.each do |version| | |
16 | 16 | - commit = version |
17 | 17 | %tr |
18 | 18 | %td |
19 | - = link_to project_wiki_path(@project, @wiki, version_id: commit.id) do | |
19 | + = link_to project_wiki_path(@project, @page, version_id: commit.id) do | |
20 | 20 | = commit.short_id |
21 | 21 | %td |
22 | 22 | = commit_author_link(commit, avatar: true, size: 24) |
... | ... | @@ -26,4 +26,4 @@ |
26 | 26 | #{time_ago_with_tooltip(version.date)} |
27 | 27 | %td |
28 | 28 | %strong |
29 | - = @wiki.page.wiki.page(@wiki.page.name, commit.id).try(:format) | |
29 | + = @page.page.wiki.page(@page.page.name, commit.id).try(:format) | ... | ... |
app/views/projects/wikis/show.html.haml
1 | 1 | = render 'nav' |
2 | 2 | %h3.page-title |
3 | - = @wiki.title.titleize | |
3 | + = @page.title.titleize | |
4 | 4 | = render 'main_links' |
5 | -- if @wiki.historical? | |
5 | +- if @page.historical? | |
6 | 6 | .warning_message |
7 | 7 | This is an old version of this page. |
8 | - 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)}. | |
8 | + 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)}. | |
9 | 9 | |
10 | 10 | %hr |
11 | 11 | |
12 | 12 | .wiki-holder |
13 | 13 | .wiki |
14 | 14 | = preserve do |
15 | - = render_wiki_content(@wiki) | |
15 | + = render_wiki_content(@page) | |
16 | 16 | |
17 | 17 | %hr |
18 | 18 | |
19 | 19 | .wiki-last-edit-by |
20 | - Last edited by #{commit_author_link(@wiki.commit, avatar: true, size: 16)} #{time_ago_with_tooltip(@wiki.commit.created_at)} | |
20 | + Last edited by #{commit_author_link(@page.commit, avatar: true, size: 16)} #{time_ago_with_tooltip(@page.commit.created_at)} | ... | ... |
features/steps/project/wiki.rb
1 | -class ProjectWiki < Spinach::FeatureSteps | |
1 | +class Spinach::Features::ProjectWiki < Spinach::FeatureSteps | |
2 | 2 | include SharedAuthentication |
3 | 3 | include SharedProject |
4 | 4 | include SharedNote |
... | ... | @@ -16,7 +16,7 @@ class ProjectWiki < Spinach::FeatureSteps |
16 | 16 | end |
17 | 17 | |
18 | 18 | Given 'I create the Wiki Home page' do |
19 | - fill_in "Content", with: '[link test](test)' | |
19 | + fill_in "wiki_content", with: '[link test](test)' | |
20 | 20 | click_on "Create page" |
21 | 21 | end |
22 | 22 | |
... | ... | @@ -87,6 +87,6 @@ class ProjectWiki < Spinach::FeatureSteps |
87 | 87 | end |
88 | 88 | |
89 | 89 | def wiki |
90 | - @gollum_wiki = GollumWiki.new(project, current_user) | |
90 | + @project_wiki = ProjectWiki.new(project, current_user) | |
91 | 91 | end |
92 | 92 | end | ... | ... |
lib/backup/repository.rb
... | ... | @@ -24,7 +24,7 @@ module Backup |
24 | 24 | puts "[FAILED]".red |
25 | 25 | end |
26 | 26 | |
27 | - wiki = GollumWiki.new(project) | |
27 | + wiki = ProjectWiki.new(project) | |
28 | 28 | |
29 | 29 | if File.exists?(path_to_repo(wiki)) |
30 | 30 | print " * #{wiki.path_with_namespace} ... " |
... | ... | @@ -59,7 +59,7 @@ module Backup |
59 | 59 | puts "[FAILED]".red |
60 | 60 | end |
61 | 61 | |
62 | - wiki = GollumWiki.new(project) | |
62 | + wiki = ProjectWiki.new(project) | |
63 | 63 | |
64 | 64 | if File.exists?(path_to_bundle(wiki)) |
65 | 65 | print " * #{wiki.path_with_namespace} ... " | ... | ... |
lib/redcarpet/render/gitlab_html.rb
... | ... | @@ -60,6 +60,8 @@ class Redcarpet::Render::GitlabHTML < Redcarpet::Render::HTML |
60 | 60 | end |
61 | 61 | |
62 | 62 | def is_wiki? |
63 | - @template.instance_variable_get("@wiki") | |
63 | + if @template.instance_variable_get("@project_wiki") | |
64 | + @template.instance_variable_get("@page") | |
65 | + end | |
64 | 66 | end |
65 | 67 | end | ... | ... |
spec/models/gollum_wiki_spec.rb
... | ... | @@ -1,211 +0,0 @@ |
1 | -require "spec_helper" | |
2 | - | |
3 | -describe GollumWiki do | |
4 | - | |
5 | - def remove_temp_repo(path) | |
6 | - FileUtils.rm_rf path | |
7 | - end | |
8 | - | |
9 | - def commit_details | |
10 | - commit = {name: user.name, email: user.email, message: "test commit"} | |
11 | - end | |
12 | - | |
13 | - def create_page(name, content) | |
14 | - subject.wiki.write_page(name, :markdown, content, commit_details) | |
15 | - end | |
16 | - | |
17 | - def destroy_page(page) | |
18 | - subject.wiki.delete_page(page, commit_details) | |
19 | - end | |
20 | - | |
21 | - let(:project) { create(:project) } | |
22 | - let(:repository) { project.repository } | |
23 | - let(:user) { project.owner } | |
24 | - let(:gitlab_shell) { Gitlab::Shell.new } | |
25 | - | |
26 | - subject { GollumWiki.new(project, user) } | |
27 | - | |
28 | - before do | |
29 | - create_temp_repo(subject.send(:path_to_repo)) | |
30 | - end | |
31 | - | |
32 | - describe "#path_with_namespace" do | |
33 | - it "returns the project path with namespace with the .wiki extension" do | |
34 | - subject.path_with_namespace.should == project.path_with_namespace + ".wiki" | |
35 | - end | |
36 | - end | |
37 | - | |
38 | - describe "#url_to_repo" do | |
39 | - it "returns the correct ssh url to the repo" do | |
40 | - subject.url_to_repo.should == gitlab_shell.url_to_repo(subject.path_with_namespace) | |
41 | - end | |
42 | - end | |
43 | - | |
44 | - describe "#ssh_url_to_repo" do | |
45 | - it "equals #url_to_repo" do | |
46 | - subject.ssh_url_to_repo.should == subject.url_to_repo | |
47 | - end | |
48 | - end | |
49 | - | |
50 | - describe "#http_url_to_repo" do | |
51 | - it "provides the full http url to the repo" do | |
52 | - gitlab_url = Gitlab.config.gitlab.url | |
53 | - repo_http_url = "#{gitlab_url}/#{subject.path_with_namespace}.git" | |
54 | - subject.http_url_to_repo.should == repo_http_url | |
55 | - end | |
56 | - end | |
57 | - | |
58 | - describe "#wiki" do | |
59 | - it "contains a Gollum::Wiki instance" do | |
60 | - subject.wiki.should be_a Gollum::Wiki | |
61 | - end | |
62 | - | |
63 | - before do | |
64 | - Gitlab::Shell.any_instance.stub(:add_repository) do | |
65 | - create_temp_repo("#{Rails.root}/tmp/test-git-base-path/non-existant.wiki.git") | |
66 | - end | |
67 | - project.stub(:path_with_namespace).and_return("non-existant") | |
68 | - end | |
69 | - | |
70 | - it "creates a new wiki repo if one does not yet exist" do | |
71 | - wiki = GollumWiki.new(project, user) | |
72 | - wiki.create_page("index", "test content").should_not == false | |
73 | - | |
74 | - FileUtils.rm_rf wiki.send(:path_to_repo) | |
75 | - end | |
76 | - | |
77 | - it "raises CouldNotCreateWikiError if it can't create the wiki repository" do | |
78 | - GollumWiki.any_instance.stub(:init_repo).and_return(false) | |
79 | - expect { GollumWiki.new(project, user).wiki }.to raise_exception(GollumWiki::CouldNotCreateWikiError) | |
80 | - end | |
81 | - end | |
82 | - | |
83 | - describe "#empty?" do | |
84 | - context "when the wiki repository is empty" do | |
85 | - before do | |
86 | - Gitlab::Shell.any_instance.stub(:add_repository) do | |
87 | - create_temp_repo("#{Rails.root}/tmp/test-git-base-path/non-existant.wiki.git") | |
88 | - end | |
89 | - project.stub(:path_with_namespace).and_return("non-existant") | |
90 | - end | |
91 | - | |
92 | - its(:empty?) { should be_true } | |
93 | - end | |
94 | - | |
95 | - context "when the wiki has pages" do | |
96 | - before do | |
97 | - create_page("index", "This is an awesome new Gollum Wiki") | |
98 | - end | |
99 | - | |
100 | - its(:empty?) { should be_false } | |
101 | - end | |
102 | - end | |
103 | - | |
104 | - describe "#pages" do | |
105 | - before do | |
106 | - create_page("index", "This is an awesome new Gollum Wiki") | |
107 | - @pages = subject.pages | |
108 | - end | |
109 | - | |
110 | - after do | |
111 | - destroy_page(@pages.first.page) | |
112 | - end | |
113 | - | |
114 | - it "returns an array of WikiPage instances" do | |
115 | - @pages.first.should be_a WikiPage | |
116 | - end | |
117 | - | |
118 | - it "returns the correct number of pages" do | |
119 | - @pages.count.should == 1 | |
120 | - end | |
121 | - end | |
122 | - | |
123 | - describe "#find_page" do | |
124 | - before do | |
125 | - create_page("index page", "This is an awesome Gollum Wiki") | |
126 | - end | |
127 | - | |
128 | - after do | |
129 | - destroy_page(subject.pages.first.page) | |
130 | - end | |
131 | - | |
132 | - it "returns the latest version of the page if it exists" do | |
133 | - page = subject.find_page("index page") | |
134 | - page.title.should == "index page" | |
135 | - end | |
136 | - | |
137 | - it "returns nil if the page does not exist" do | |
138 | - subject.find_page("non-existant").should == nil | |
139 | - end | |
140 | - | |
141 | - it "can find a page by slug" do | |
142 | - page = subject.find_page("index-page") | |
143 | - page.title.should == "index page" | |
144 | - end | |
145 | - | |
146 | - it "returns a WikiPage instance" do | |
147 | - page = subject.find_page("index page") | |
148 | - page.should be_a WikiPage | |
149 | - end | |
150 | - end | |
151 | - | |
152 | - describe "#create_page" do | |
153 | - after do | |
154 | - destroy_page(subject.pages.first.page) | |
155 | - end | |
156 | - | |
157 | - it "creates a new wiki page" do | |
158 | - subject.create_page("test page", "this is content").should_not == false | |
159 | - subject.pages.count.should == 1 | |
160 | - end | |
161 | - | |
162 | - it "returns false when a duplicate page exists" do | |
163 | - subject.create_page("test page", "content") | |
164 | - subject.create_page("test page", "content").should == false | |
165 | - end | |
166 | - | |
167 | - it "stores an error message when a duplicate page exists" do | |
168 | - 2.times { subject.create_page("test page", "content") } | |
169 | - subject.error_message.should =~ /Duplicate page:/ | |
170 | - end | |
171 | - | |
172 | - it "sets the correct commit message" do | |
173 | - subject.create_page("test page", "some content", :markdown, "commit message") | |
174 | - subject.pages.first.page.version.message.should == "commit message" | |
175 | - end | |
176 | - end | |
177 | - | |
178 | - describe "#update_page" do | |
179 | - before do | |
180 | - create_page("update-page", "some content") | |
181 | - @gollum_page = subject.wiki.paged("update-page") | |
182 | - subject.update_page(@gollum_page, "some other content", :markdown, "updated page") | |
183 | - @page = subject.pages.first.page | |
184 | - end | |
185 | - | |
186 | - after do | |
187 | - destroy_page(@page) | |
188 | - end | |
189 | - | |
190 | - it "updates the content of the page" do | |
191 | - @page.raw_data.should == "some other content" | |
192 | - end | |
193 | - | |
194 | - it "sets the correct commit message" do | |
195 | - @page.version.message.should == "updated page" | |
196 | - end | |
197 | - end | |
198 | - | |
199 | - describe "#delete_page" do | |
200 | - before do | |
201 | - create_page("index", "some content") | |
202 | - @page = subject.wiki.paged("index") | |
203 | - end | |
204 | - | |
205 | - it "deletes the page" do | |
206 | - subject.delete_page(@page) | |
207 | - subject.pages.count.should == 0 | |
208 | - end | |
209 | - end | |
210 | - | |
211 | -end |
... | ... | @@ -0,0 +1,211 @@ |
1 | +require "spec_helper" | |
2 | + | |
3 | +describe ProjectWiki do | |
4 | + | |
5 | + def remove_temp_repo(path) | |
6 | + FileUtils.rm_rf path | |
7 | + end | |
8 | + | |
9 | + def commit_details | |
10 | + commit = {name: user.name, email: user.email, message: "test commit"} | |
11 | + end | |
12 | + | |
13 | + def create_page(name, content) | |
14 | + subject.wiki.write_page(name, :markdown, content, commit_details) | |
15 | + end | |
16 | + | |
17 | + def destroy_page(page) | |
18 | + subject.wiki.delete_page(page, commit_details) | |
19 | + end | |
20 | + | |
21 | + let(:project) { create(:project) } | |
22 | + let(:repository) { project.repository } | |
23 | + let(:user) { project.owner } | |
24 | + let(:gitlab_shell) { Gitlab::Shell.new } | |
25 | + | |
26 | + subject { ProjectWiki.new(project, user) } | |
27 | + | |
28 | + before do | |
29 | + create_temp_repo(subject.send(:path_to_repo)) | |
30 | + end | |
31 | + | |
32 | + describe "#path_with_namespace" do | |
33 | + it "returns the project path with namespace with the .wiki extension" do | |
34 | + subject.path_with_namespace.should == project.path_with_namespace + ".wiki" | |
35 | + end | |
36 | + end | |
37 | + | |
38 | + describe "#url_to_repo" do | |
39 | + it "returns the correct ssh url to the repo" do | |
40 | + subject.url_to_repo.should == gitlab_shell.url_to_repo(subject.path_with_namespace) | |
41 | + end | |
42 | + end | |
43 | + | |
44 | + describe "#ssh_url_to_repo" do | |
45 | + it "equals #url_to_repo" do | |
46 | + subject.ssh_url_to_repo.should == subject.url_to_repo | |
47 | + end | |
48 | + end | |
49 | + | |
50 | + describe "#http_url_to_repo" do | |
51 | + it "provides the full http url to the repo" do | |
52 | + gitlab_url = Gitlab.config.gitlab.url | |
53 | + repo_http_url = "#{gitlab_url}/#{subject.path_with_namespace}.git" | |
54 | + subject.http_url_to_repo.should == repo_http_url | |
55 | + end | |
56 | + end | |
57 | + | |
58 | + describe "#wiki" do | |
59 | + it "contains a Gollum::Wiki instance" do | |
60 | + subject.wiki.should be_a Gollum::Wiki | |
61 | + end | |
62 | + | |
63 | + before do | |
64 | + Gitlab::Shell.any_instance.stub(:add_repository) do | |
65 | + create_temp_repo("#{Rails.root}/tmp/test-git-base-path/non-existant.wiki.git") | |
66 | + end | |
67 | + project.stub(:path_with_namespace).and_return("non-existant") | |
68 | + end | |
69 | + | |
70 | + it "creates a new wiki repo if one does not yet exist" do | |
71 | + wiki = ProjectWiki.new(project, user) | |
72 | + wiki.create_page("index", "test content").should_not == false | |
73 | + | |
74 | + FileUtils.rm_rf wiki.send(:path_to_repo) | |
75 | + end | |
76 | + | |
77 | + it "raises CouldNotCreateWikiError if it can't create the wiki repository" do | |
78 | + ProjectWiki.any_instance.stub(:init_repo).and_return(false) | |
79 | + expect { ProjectWiki.new(project, user).wiki }.to raise_exception(ProjectWiki::CouldNotCreateWikiError) | |
80 | + end | |
81 | + end | |
82 | + | |
83 | + describe "#empty?" do | |
84 | + context "when the wiki repository is empty" do | |
85 | + before do | |
86 | + Gitlab::Shell.any_instance.stub(:add_repository) do | |
87 | + create_temp_repo("#{Rails.root}/tmp/test-git-base-path/non-existant.wiki.git") | |
88 | + end | |
89 | + project.stub(:path_with_namespace).and_return("non-existant") | |
90 | + end | |
91 | + | |
92 | + its(:empty?) { should be_true } | |
93 | + end | |
94 | + | |
95 | + context "when the wiki has pages" do | |
96 | + before do | |
97 | + create_page("index", "This is an awesome new Gollum Wiki") | |
98 | + end | |
99 | + | |
100 | + its(:empty?) { should be_false } | |
101 | + end | |
102 | + end | |
103 | + | |
104 | + describe "#pages" do | |
105 | + before do | |
106 | + create_page("index", "This is an awesome new Gollum Wiki") | |
107 | + @pages = subject.pages | |
108 | + end | |
109 | + | |
110 | + after do | |
111 | + destroy_page(@pages.first.page) | |
112 | + end | |
113 | + | |
114 | + it "returns an array of WikiPage instances" do | |
115 | + @pages.first.should be_a WikiPage | |
116 | + end | |
117 | + | |
118 | + it "returns the correct number of pages" do | |
119 | + @pages.count.should == 1 | |
120 | + end | |
121 | + end | |
122 | + | |
123 | + describe "#find_page" do | |
124 | + before do | |
125 | + create_page("index page", "This is an awesome Gollum Wiki") | |
126 | + end | |
127 | + | |
128 | + after do | |
129 | + destroy_page(subject.pages.first.page) | |
130 | + end | |
131 | + | |
132 | + it "returns the latest version of the page if it exists" do | |
133 | + page = subject.find_page("index page") | |
134 | + page.title.should == "index page" | |
135 | + end | |
136 | + | |
137 | + it "returns nil if the page does not exist" do | |
138 | + subject.find_page("non-existant").should == nil | |
139 | + end | |
140 | + | |
141 | + it "can find a page by slug" do | |
142 | + page = subject.find_page("index-page") | |
143 | + page.title.should == "index page" | |
144 | + end | |
145 | + | |
146 | + it "returns a WikiPage instance" do | |
147 | + page = subject.find_page("index page") | |
148 | + page.should be_a WikiPage | |
149 | + end | |
150 | + end | |
151 | + | |
152 | + describe "#create_page" do | |
153 | + after do | |
154 | + destroy_page(subject.pages.first.page) | |
155 | + end | |
156 | + | |
157 | + it "creates a new wiki page" do | |
158 | + subject.create_page("test page", "this is content").should_not == false | |
159 | + subject.pages.count.should == 1 | |
160 | + end | |
161 | + | |
162 | + it "returns false when a duplicate page exists" do | |
163 | + subject.create_page("test page", "content") | |
164 | + subject.create_page("test page", "content").should == false | |
165 | + end | |
166 | + | |
167 | + it "stores an error message when a duplicate page exists" do | |
168 | + 2.times { subject.create_page("test page", "content") } | |
169 | + subject.error_message.should =~ /Duplicate page:/ | |
170 | + end | |
171 | + | |
172 | + it "sets the correct commit message" do | |
173 | + subject.create_page("test page", "some content", :markdown, "commit message") | |
174 | + subject.pages.first.page.version.message.should == "commit message" | |
175 | + end | |
176 | + end | |
177 | + | |
178 | + describe "#update_page" do | |
179 | + before do | |
180 | + create_page("update-page", "some content") | |
181 | + @gollum_page = subject.wiki.paged("update-page") | |
182 | + subject.update_page(@gollum_page, "some other content", :markdown, "updated page") | |
183 | + @page = subject.pages.first.page | |
184 | + end | |
185 | + | |
186 | + after do | |
187 | + destroy_page(@page) | |
188 | + end | |
189 | + | |
190 | + it "updates the content of the page" do | |
191 | + @page.raw_data.should == "some other content" | |
192 | + end | |
193 | + | |
194 | + it "sets the correct commit message" do | |
195 | + @page.version.message.should == "updated page" | |
196 | + end | |
197 | + end | |
198 | + | |
199 | + describe "#delete_page" do | |
200 | + before do | |
201 | + create_page("index", "some content") | |
202 | + @page = subject.wiki.paged("index") | |
203 | + end | |
204 | + | |
205 | + it "deletes the page" do | |
206 | + subject.delete_page(@page) | |
207 | + subject.pages.count.should == 0 | |
208 | + end | |
209 | + end | |
210 | + | |
211 | +end | ... | ... |
spec/models/wiki_page_spec.rb
... | ... | @@ -22,7 +22,7 @@ describe WikiPage do |
22 | 22 | let(:project) { create(:project) } |
23 | 23 | let(:repository) { project.repository } |
24 | 24 | let(:user) { project.owner } |
25 | - let(:wiki) { GollumWiki.new(project, user) } | |
25 | + let(:wiki) { ProjectWiki.new(project, user) } | |
26 | 26 | |
27 | 27 | subject { WikiPage.new(wiki) } |
28 | 28 | ... | ... |
spec/services/projects/create_service_spec.rb
... | ... | @@ -42,7 +42,7 @@ describe Projects::CreateService do |
42 | 42 | context 'wiki_enabled true creates wiki repository directory' do |
43 | 43 | before do |
44 | 44 | @project = create_project(@user, @opts) |
45 | - @path = GollumWiki.new(@project, @user).send(:path_to_repo) | |
45 | + @path = ProjectWiki.new(@project, @user).send(:path_to_repo) | |
46 | 46 | end |
47 | 47 | |
48 | 48 | it { File.exists?(@path).should be_true } |
... | ... | @@ -52,7 +52,7 @@ describe Projects::CreateService do |
52 | 52 | before do |
53 | 53 | @opts.merge!(wiki_enabled: false) |
54 | 54 | @project = create_project(@user, @opts) |
55 | - @path = GollumWiki.new(@project, @user).send(:path_to_repo) | |
55 | + @path = ProjectWiki.new(@project, @user).send(:path_to_repo) | |
56 | 56 | end |
57 | 57 | |
58 | 58 | it { File.exists?(@path).should be_false } | ... | ... |
spec/support/test_env.rb
... | ... | @@ -52,7 +52,7 @@ module TestEnv |
52 | 52 | def setup_stubs() |
53 | 53 | # Use tmp dir for FS manipulations |
54 | 54 | repos_path = testing_path() |
55 | - GollumWiki.any_instance.stub(:init_repo) do |path| | |
55 | + ProjectWiki.any_instance.stub(:init_repo) do |path| | |
56 | 56 | create_temp_repo(File.join(repos_path, "#{path}.git")) |
57 | 57 | end |
58 | 58 | ... | ... |