summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorValery Sizov <vsv2711@gmail.com>2012-02-19 19:05:35 +0200
committerValery Sizov <vsv2711@gmail.com>2012-02-19 19:50:13 +0200
commit4c1b8558df1a874716989b8217ab0acf97d6da04 (patch)
treeb9a8beb6e9a2f0f1e50c864b23101c65bd24b527 /app
parenteacea15a2156200fb363508e1bd92fc48226345b (diff)
downloadgitlab-ce-4c1b8558df1a874716989b8217ab0acf97d6da04.tar.gz
Wiki: base implemetation logic
Diffstat (limited to 'app')
-rw-r--r--app/controllers/wikis_controller.rb45
-rw-r--r--app/models/wiki.rb18
-rw-r--r--app/views/layouts/_project_menu.html.haml2
-rw-r--r--app/views/wikis/_form.html.haml3
-rw-r--r--app/views/wikis/edit.html.haml6
-rw-r--r--app/views/wikis/index.html.haml21
-rw-r--r--app/views/wikis/new.html.haml5
7 files changed, 33 insertions, 67 deletions
diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb
index 96c1ac4ac14..128e30c14c0 100644
--- a/app/controllers/wikis_controller.rb
+++ b/app/controllers/wikis_controller.rb
@@ -1,61 +1,42 @@
class WikisController < ApplicationController
before_filter :project
layout "project"
- respond_to :html
def show
- @wiki = @project.wikis.find_by_slug(params[:id])
- respond_with(@wiki)
- end
-
- def new
- @wiki = Wiki.new
-
+ @wiki = @project.wikis.where(:slug => params[:id]).order("created_at").last
respond_to do |format|
- format.html # new.html.erb
- format.json { render json: @wiki }
+ if @wiki
+ format.html
+ else
+ @wiki = @project.wikis.new(:slug => params[:id])
+ format.html { render "edit" }
+ end
end
end
def edit
- @wiki = Wiki.find(params[:id])
+ @wiki = @project.wikis.where(:slug => params[:id]).order("created_at").last
+ @wiki = Wiki.regenerate_from @wiki
end
def create
- @wiki = Wiki.new(params[:wiki])
+ @wiki = @project.wikis.new(params[:wiki])
respond_to do |format|
if @wiki.save
- format.html { redirect_to @wiki, notice: 'Wiki was successfully created.' }
- format.json { render json: @wiki, status: :created, location: @wiki }
- else
- format.html { render action: "new" }
- format.json { render json: @wiki.errors, status: :unprocessable_entity }
- end
- end
- end
-
- def update
- @wiki = Wiki.find(params[:id])
-
- respond_to do |format|
- if @wiki.update_attributes(params[:wiki])
- format.html { redirect_to @wiki, notice: 'Wiki was successfully updated.' }
- format.json { head :no_content }
+ format.html { redirect_to [@project, @wiki], notice: 'Wiki was successfully updated.' }
else
format.html { render action: "edit" }
- format.json { render json: @wiki.errors, status: :unprocessable_entity }
end
end
end
-
+
def destroy
- @wiki = Wiki.find(params[:id])
+ @wiki = @project.wikis.find(params[:id])
@wiki.destroy
respond_to do |format|
format.html { redirect_to wikis_url }
- format.json { head :no_content }
end
end
end
diff --git a/app/models/wiki.rb b/app/models/wiki.rb
index 7c50446865e..b1ecc06e132 100644
--- a/app/models/wiki.rb
+++ b/app/models/wiki.rb
@@ -2,10 +2,9 @@ class Wiki < ActiveRecord::Base
belongs_to :project
validates :content, :title, :presence => true
- validates :title, :length => 1..250,
- :uniqueness => {:scope => :project_id, :case_sensitive => false}
+ validates :title, :length => 1..250
- before_save :set_slug
+ before_update :set_slug
def to_param
@@ -17,4 +16,17 @@ class Wiki < ActiveRecord::Base
def set_slug
self.slug = self.title.parameterize
end
+
+ class << self
+ def regenerate_from wiki
+ regenerated_field = [:slug, :content, :title]
+
+ new_wiki = Wiki.new
+ regenerated_field.each do |field|
+ new_wiki.send("#{field}=", wiki.send(field))
+ end
+ new_wiki
+ end
+
+ end
end
diff --git a/app/views/layouts/_project_menu.html.haml b/app/views/layouts/_project_menu.html.haml
index 22439aad29f..6a4a3156c07 100644
--- a/app/views/layouts/_project_menu.html.haml
+++ b/app/views/layouts/_project_menu.html.haml
@@ -21,5 +21,5 @@
Wall
- if @project.wiki_enabled
- -#= link_to project_wikis_path(@project), :class => current_page?(:controller => "projects", :action => "wiki", :id => @project) ? "current" : nil do
+ = link_to project_wiki_path(@project, :index), :class => current_page?(:controller => "projects", :action => "wiki", :id => @project) ? "current" : nil do
Wiki
diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml
index 1f2e1d91700..5c57c2b3179 100644
--- a/app/views/wikis/_form.html.haml
+++ b/app/views/wikis/_form.html.haml
@@ -1,4 +1,4 @@
-= form_for @wiki do |f|
+= form_for [@project, @wiki] do |f|
-if @wiki.errors.any?
#error_explanation
%h2= "#{pluralize(@wiki.errors.count, "error")} prohibited this wiki from being saved:"
@@ -9,6 +9,7 @@
.field
= f.label :title
= f.text_field :title
+ = f.hidden_field :slug
.field
= f.label :content
= f.text_area :content
diff --git a/app/views/wikis/edit.html.haml b/app/views/wikis/edit.html.haml
index 801ed6400b2..f83ff9e1d64 100644
--- a/app/views/wikis/edit.html.haml
+++ b/app/views/wikis/edit.html.haml
@@ -1,7 +1,5 @@
-%h1 Editing wiki
+%h1 Editing page
= render 'form'
-= link_to 'Show', @wiki
-\|
-= link_to 'Back', wikis_path
+= link_to 'Show', [@project, @wiki]
diff --git a/app/views/wikis/index.html.haml b/app/views/wikis/index.html.haml
deleted file mode 100644
index d19297f82ad..00000000000
--- a/app/views/wikis/index.html.haml
+++ /dev/null
@@ -1,21 +0,0 @@
-%h1 Listing wikis
-
-%table
- %tr
- %th Title
- %th Content
- %th
- %th
- %th
-
- - @wikis.each do |wiki|
- %tr
- %td= wiki.title
- %td= wiki.content
- %td= link_to 'Show', wiki
- %td= link_to 'Edit', edit_wiki_path(wiki)
- %td= link_to 'Destroy', wiki, :confirm => 'Are you sure?', :method => :delete
-
-%br
-
-= link_to 'New Wiki', new_wiki_path
diff --git a/app/views/wikis/new.html.haml b/app/views/wikis/new.html.haml
deleted file mode 100644
index c5024d765a1..00000000000
--- a/app/views/wikis/new.html.haml
+++ /dev/null
@@ -1,5 +0,0 @@
-%h1 New wiki
-
-= render 'form'
-
-= link_to 'Back', wikis_path