summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Sizov <vsv2711@gmail.com>2012-02-19 16:35:31 +0200
committerValery Sizov <vsv2711@gmail.com>2012-02-19 19:50:13 +0200
commiteacea15a2156200fb363508e1bd92fc48226345b (patch)
treeab39c7146df5082b222169bd21dff0af2fefb62f
parentdf27ec29f3e0514ad80da95673b5b02e3fb10125 (diff)
downloadgitlab-ce-eacea15a2156200fb363508e1bd92fc48226345b.tar.gz
wiki base sceleton
-rw-r--r--app/controllers/wikis_controller.rb61
-rw-r--r--app/models/project.rb1
-rw-r--r--app/models/wiki.rb20
-rw-r--r--app/views/layouts/_project_menu.html.haml5
-rw-r--r--app/views/projects/_form.html.haml4
-rw-r--r--app/views/wikis/_form.html.haml16
-rw-r--r--app/views/wikis/edit.html.haml7
-rw-r--r--app/views/wikis/index.html.haml21
-rw-r--r--app/views/wikis/new.html.haml5
-rw-r--r--app/views/wikis/show.html.haml7
-rw-r--r--config/routes.rb2
-rw-r--r--db/migrate/20120216215008_create_wikis.rb11
-rw-r--r--db/migrate/20120219130957_add_slug_to_wiki.rb6
-rw-r--r--db/migrate/20120219140810_add_wiki_enabled_to_project.rb6
-rw-r--r--db/schema.rb14
-rw-r--r--spec/controllers/wikis_controller_spec.rb164
-rw-r--r--spec/views/wikis/edit.html.haml_spec.rb20
-rw-r--r--spec/views/wikis/index.html.haml_spec.rb24
-rw-r--r--spec/views/wikis/new.html.haml_spec.rb20
-rw-r--r--spec/views/wikis/show.html.haml_spec.rb18
20 files changed, 432 insertions, 0 deletions
diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb
new file mode 100644
index 00000000000..96c1ac4ac14
--- /dev/null
+++ b/app/controllers/wikis_controller.rb
@@ -0,0 +1,61 @@
+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
+
+ respond_to do |format|
+ format.html # new.html.erb
+ format.json { render json: @wiki }
+ end
+ end
+
+ def edit
+ @wiki = Wiki.find(params[:id])
+ end
+
+ def create
+ @wiki = Wiki.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 }
+ 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.destroy
+
+ respond_to do |format|
+ format.html { redirect_to wikis_url }
+ format.json { head :no_content }
+ end
+ end
+end
diff --git a/app/models/project.rb b/app/models/project.rb
index 017ef2ce573..c3c710090d7 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -12,6 +12,7 @@ class Project < ActiveRecord::Base
has_many :deploy_keys, :dependent => :destroy, :foreign_key => "project_id", :class_name => "Key"
has_many :web_hooks, :dependent => :destroy
has_many :protected_branches, :dependent => :destroy
+ has_many :wikis, :dependent => :destroy
acts_as_taggable
diff --git a/app/models/wiki.rb b/app/models/wiki.rb
new file mode 100644
index 00000000000..7c50446865e
--- /dev/null
+++ b/app/models/wiki.rb
@@ -0,0 +1,20 @@
+class Wiki < ActiveRecord::Base
+ belongs_to :project
+
+ validates :content, :title, :presence => true
+ validates :title, :length => 1..250,
+ :uniqueness => {:scope => :project_id, :case_sensitive => false}
+
+ before_save :set_slug
+
+
+ def to_param
+ slug
+ end
+
+ protected
+
+ def set_slug
+ self.slug = self.title.parameterize
+ end
+end
diff --git a/app/views/layouts/_project_menu.html.haml b/app/views/layouts/_project_menu.html.haml
index c47a1863922..22439aad29f 100644
--- a/app/views/layouts/_project_menu.html.haml
+++ b/app/views/layouts/_project_menu.html.haml
@@ -11,6 +11,7 @@
- if @project.issues_enabled
= link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do
Issues
+
- if @project.merge_requests_enabled
= link_to project_merge_requests_path(@project), :class => (controller.controller_name == "merge_requests") ? "current" : nil do
Merge Requests
@@ -18,3 +19,7 @@
- if @project.wall_enabled
= link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do
Wall
+
+ - if @project.wiki_enabled
+ -#= link_to project_wikis_path(@project), :class => current_page?(:controller => "projects", :action => "wiki", :id => @project) ? "current" : nil do
+ Wiki
diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml
index 167a7d008d9..6137aa5e279 100644
--- a/app/views/projects/_form.html.haml
+++ b/app/views/projects/_form.html.haml
@@ -41,6 +41,10 @@
.clearfix
= f.label :wall_enabled, "Wall"
.input= f.check_box :wall_enabled
+
+ .clearfix
+ = f.label :wiki_enabled, "Wiki"
+ .input= f.check_box :wiki_enabled
.clearfix
= f.label :description
diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml
new file mode 100644
index 00000000000..1f2e1d91700
--- /dev/null
+++ b/app/views/wikis/_form.html.haml
@@ -0,0 +1,16 @@
+= form_for @wiki do |f|
+ -if @wiki.errors.any?
+ #error_explanation
+ %h2= "#{pluralize(@wiki.errors.count, "error")} prohibited this wiki from being saved:"
+ %ul
+ - @wiki.errors.full_messages.each do |msg|
+ %li= msg
+
+ .field
+ = f.label :title
+ = f.text_field :title
+ .field
+ = f.label :content
+ = f.text_area :content
+ .actions
+ = f.submit 'Save'
diff --git a/app/views/wikis/edit.html.haml b/app/views/wikis/edit.html.haml
new file mode 100644
index 00000000000..801ed6400b2
--- /dev/null
+++ b/app/views/wikis/edit.html.haml
@@ -0,0 +1,7 @@
+%h1 Editing wiki
+
+= render 'form'
+
+= link_to 'Show', @wiki
+\|
+= link_to 'Back', wikis_path
diff --git a/app/views/wikis/index.html.haml b/app/views/wikis/index.html.haml
new file mode 100644
index 00000000000..d19297f82ad
--- /dev/null
+++ b/app/views/wikis/index.html.haml
@@ -0,0 +1,21 @@
+%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
new file mode 100644
index 00000000000..c5024d765a1
--- /dev/null
+++ b/app/views/wikis/new.html.haml
@@ -0,0 +1,5 @@
+%h1 New wiki
+
+= render 'form'
+
+= link_to 'Back', wikis_path
diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml
new file mode 100644
index 00000000000..1ea6743769d
--- /dev/null
+++ b/app/views/wikis/show.html.haml
@@ -0,0 +1,7 @@
+%p#notice= notice
+
+%h3= @wiki.title
+= @wiki.content
+
+%br
+= link_to 'Edit', edit_project_wiki_path(@project, @wiki)
diff --git a/config/routes.rb b/config/routes.rb
index 5d880df1739..0a0218a04ef 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,5 +1,6 @@
Gitlab::Application.routes.draw do
+
# Optionally, enable Resque here
require 'resque/server'
mount Resque::Server.new, at: '/info/resque'
@@ -55,6 +56,7 @@ Gitlab::Application.routes.draw do
get "files"
end
+ resources :wikis, :only => [:show, :edit, :destroy]
resource :repository do
member do
get "branches"
diff --git a/db/migrate/20120216215008_create_wikis.rb b/db/migrate/20120216215008_create_wikis.rb
new file mode 100644
index 00000000000..38947df389c
--- /dev/null
+++ b/db/migrate/20120216215008_create_wikis.rb
@@ -0,0 +1,11 @@
+class CreateWikis < ActiveRecord::Migration
+ def change
+ create_table :wikis do |t|
+ t.string :title
+ t.text :content
+ t.integer :project_id
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20120219130957_add_slug_to_wiki.rb b/db/migrate/20120219130957_add_slug_to_wiki.rb
new file mode 100644
index 00000000000..5f2d5970a89
--- /dev/null
+++ b/db/migrate/20120219130957_add_slug_to_wiki.rb
@@ -0,0 +1,6 @@
+class AddSlugToWiki < ActiveRecord::Migration
+ def change
+ add_column :wikis, :slug, :string
+
+ end
+end
diff --git a/db/migrate/20120219140810_add_wiki_enabled_to_project.rb b/db/migrate/20120219140810_add_wiki_enabled_to_project.rb
new file mode 100644
index 00000000000..ebd71bea84d
--- /dev/null
+++ b/db/migrate/20120219140810_add_wiki_enabled_to_project.rb
@@ -0,0 +1,6 @@
+class AddWikiEnabledToProject < ActiveRecord::Migration
+ def change
+ add_column :projects, :wiki_enabled, :boolean, :default => true, :null => false
+
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 0ec8cfafc50..a6cf39c58ad 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,11 @@
#
# It's strongly recommended to check this file into your version control system.
+<<<<<<< HEAD
ActiveRecord::Schema.define(:version => 20120216085842) do
+=======
+ActiveRecord::Schema.define(:version => 20120219140810) do
+>>>>>>> wiki base sceleton
create_table "issues", :force => true do |t|
t.string "title"
@@ -80,6 +84,7 @@ ActiveRecord::Schema.define(:version => 20120216085842) do
t.boolean "issues_enabled", :default => true, :null => false
t.boolean "wall_enabled", :default => true, :null => false
t.boolean "merge_requests_enabled", :default => true, :null => false
+ t.boolean "wiki_enabled", :default => true, :null => false
end
create_table "protected_branches", :force => true do |t|
@@ -158,4 +163,13 @@ ActiveRecord::Schema.define(:version => 20120216085842) do
t.datetime "updated_at"
end
+ create_table "wikis", :force => true do |t|
+ t.string "title"
+ t.text "content"
+ t.integer "project_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "slug"
+ end
+
end
diff --git a/spec/controllers/wikis_controller_spec.rb b/spec/controllers/wikis_controller_spec.rb
new file mode 100644
index 00000000000..bb601aac2ff
--- /dev/null
+++ b/spec/controllers/wikis_controller_spec.rb
@@ -0,0 +1,164 @@
+require 'spec_helper'
+
+# This spec was generated by rspec-rails when you ran the scaffold generator.
+# It demonstrates how one might use RSpec to specify the controller code that
+# was generated by Rails when you ran the scaffold generator.
+#
+# It assumes that the implementation code is generated by the rails scaffold
+# generator. If you are using any extension libraries to generate different
+# controller code, this generated spec may or may not pass.
+#
+# It only uses APIs available in rails and/or rspec-rails. There are a number
+# of tools you can use to make these specs even more expressive, but we're
+# sticking to rails and rspec-rails APIs to keep things simple and stable.
+#
+# Compared to earlier versions of this generator, there is very limited use of
+# stubs and message expectations in this spec. Stubs are only used when there
+# is no simpler way to get a handle on the object needed for the example.
+# Message expectations are only used when there is no simpler way to specify
+# that an instance is receiving a specific message.
+
+describe WikisController do
+
+ # This should return the minimal set of attributes required to create a valid
+ # Wiki. As you add validations to Wiki, be sure to
+ # update the return value of this method accordingly.
+ def valid_attributes
+ {}
+ end
+
+ # This should return the minimal set of values that should be in the session
+ # in order to pass any filters (e.g. authentication) defined in
+ # WikisController. Be sure to keep this updated too.
+ def valid_session
+ {}
+ end
+
+ describe "GET index" do
+ it "assigns all wikis as @wikis" do
+ wiki = Wiki.create! valid_attributes
+ get :index, {}, valid_session
+ assigns(:wikis).should eq([wiki])
+ end
+ end
+
+ describe "GET show" do
+ it "assigns the requested wiki as @wiki" do
+ wiki = Wiki.create! valid_attributes
+ get :show, {:id => wiki.to_param}, valid_session
+ assigns(:wiki).should eq(wiki)
+ end
+ end
+
+ describe "GET new" do
+ it "assigns a new wiki as @wiki" do
+ get :new, {}, valid_session
+ assigns(:wiki).should be_a_new(Wiki)
+ end
+ end
+
+ describe "GET edit" do
+ it "assigns the requested wiki as @wiki" do
+ wiki = Wiki.create! valid_attributes
+ get :edit, {:id => wiki.to_param}, valid_session
+ assigns(:wiki).should eq(wiki)
+ end
+ end
+
+ describe "POST create" do
+ describe "with valid params" do
+ it "creates a new Wiki" do
+ expect {
+ post :create, {:wiki => valid_attributes}, valid_session
+ }.to change(Wiki, :count).by(1)
+ end
+
+ it "assigns a newly created wiki as @wiki" do
+ post :create, {:wiki => valid_attributes}, valid_session
+ assigns(:wiki).should be_a(Wiki)
+ assigns(:wiki).should be_persisted
+ end
+
+ it "redirects to the created wiki" do
+ post :create, {:wiki => valid_attributes}, valid_session
+ response.should redirect_to(Wiki.last)
+ end
+ end
+
+ describe "with invalid params" do
+ it "assigns a newly created but unsaved wiki as @wiki" do
+ # Trigger the behavior that occurs when invalid params are submitted
+ Wiki.any_instance.stub(:save).and_return(false)
+ post :create, {:wiki => {}}, valid_session
+ assigns(:wiki).should be_a_new(Wiki)
+ end
+
+ it "re-renders the 'new' template" do
+ # Trigger the behavior that occurs when invalid params are submitted
+ Wiki.any_instance.stub(:save).and_return(false)
+ post :create, {:wiki => {}}, valid_session
+ response.should render_template("new")
+ end
+ end
+ end
+
+ describe "PUT update" do
+ describe "with valid params" do
+ it "updates the requested wiki" do
+ wiki = Wiki.create! valid_attributes
+ # Assuming there are no other wikis in the database, this
+ # specifies that the Wiki created on the previous line
+ # receives the :update_attributes message with whatever params are
+ # submitted in the request.
+ Wiki.any_instance.should_receive(:update_attributes).with({'these' => 'params'})
+ put :update, {:id => wiki.to_param, :wiki => {'these' => 'params'}}, valid_session
+ end
+
+ it "assigns the requested wiki as @wiki" do
+ wiki = Wiki.create! valid_attributes
+ put :update, {:id => wiki.to_param, :wiki => valid_attributes}, valid_session
+ assigns(:wiki).should eq(wiki)
+ end
+
+ it "redirects to the wiki" do
+ wiki = Wiki.create! valid_attributes
+ put :update, {:id => wiki.to_param, :wiki => valid_attributes}, valid_session
+ response.should redirect_to(wiki)
+ end
+ end
+
+ describe "with invalid params" do
+ it "assigns the wiki as @wiki" do
+ wiki = Wiki.create! valid_attributes
+ # Trigger the behavior that occurs when invalid params are submitted
+ Wiki.any_instance.stub(:save).and_return(false)
+ put :update, {:id => wiki.to_param, :wiki => {}}, valid_session
+ assigns(:wiki).should eq(wiki)
+ end
+
+ it "re-renders the 'edit' template" do
+ wiki = Wiki.create! valid_attributes
+ # Trigger the behavior that occurs when invalid params are submitted
+ Wiki.any_instance.stub(:save).and_return(false)
+ put :update, {:id => wiki.to_param, :wiki => {}}, valid_session
+ response.should render_template("edit")
+ end
+ end
+ end
+
+ describe "DELETE destroy" do
+ it "destroys the requested wiki" do
+ wiki = Wiki.create! valid_attributes
+ expect {
+ delete :destroy, {:id => wiki.to_param}, valid_session
+ }.to change(Wiki, :count).by(-1)
+ end
+
+ it "redirects to the wikis list" do
+ wiki = Wiki.create! valid_attributes
+ delete :destroy, {:id => wiki.to_param}, valid_session
+ response.should redirect_to(wikis_url)
+ end
+ end
+
+end
diff --git a/spec/views/wikis/edit.html.haml_spec.rb b/spec/views/wikis/edit.html.haml_spec.rb
new file mode 100644
index 00000000000..194dfcaf29e
--- /dev/null
+++ b/spec/views/wikis/edit.html.haml_spec.rb
@@ -0,0 +1,20 @@
+require 'spec_helper'
+
+describe "wikis/edit" do
+ before(:each) do
+ @wiki = assign(:wiki, stub_model(Wiki,
+ :title => "MyString",
+ :content => "MyText"
+ ))
+ end
+
+ it "renders the edit wiki form" do
+ render
+
+ # Run the generator again with the --webrat flag if you want to use webrat matchers
+ assert_select "form", :action => wikis_path(@wiki), :method => "post" do
+ assert_select "input#wiki_title", :name => "wiki[title]"
+ assert_select "textarea#wiki_content", :name => "wiki[content]"
+ end
+ end
+end
diff --git a/spec/views/wikis/index.html.haml_spec.rb b/spec/views/wikis/index.html.haml_spec.rb
new file mode 100644
index 00000000000..753d4a27e4c
--- /dev/null
+++ b/spec/views/wikis/index.html.haml_spec.rb
@@ -0,0 +1,24 @@
+require 'spec_helper'
+
+describe "wikis/index" do
+ before(:each) do
+ assign(:wikis, [
+ stub_model(Wiki,
+ :title => "Title",
+ :content => "MyText"
+ ),
+ stub_model(Wiki,
+ :title => "Title",
+ :content => "MyText"
+ )
+ ])
+ end
+
+ it "renders a list of wikis" do
+ render
+ # Run the generator again with the --webrat flag if you want to use webrat matchers
+ assert_select "tr>td", :text => "Title".to_s, :count => 2
+ # Run the generator again with the --webrat flag if you want to use webrat matchers
+ assert_select "tr>td", :text => "MyText".to_s, :count => 2
+ end
+end
diff --git a/spec/views/wikis/new.html.haml_spec.rb b/spec/views/wikis/new.html.haml_spec.rb
new file mode 100644
index 00000000000..f167d4a0bad
--- /dev/null
+++ b/spec/views/wikis/new.html.haml_spec.rb
@@ -0,0 +1,20 @@
+require 'spec_helper'
+
+describe "wikis/new" do
+ before(:each) do
+ assign(:wiki, stub_model(Wiki,
+ :title => "MyString",
+ :content => "MyText"
+ ).as_new_record)
+ end
+
+ it "renders new wiki form" do
+ render
+
+ # Run the generator again with the --webrat flag if you want to use webrat matchers
+ assert_select "form", :action => wikis_path, :method => "post" do
+ assert_select "input#wiki_title", :name => "wiki[title]"
+ assert_select "textarea#wiki_content", :name => "wiki[content]"
+ end
+ end
+end
diff --git a/spec/views/wikis/show.html.haml_spec.rb b/spec/views/wikis/show.html.haml_spec.rb
new file mode 100644
index 00000000000..b8144df057e
--- /dev/null
+++ b/spec/views/wikis/show.html.haml_spec.rb
@@ -0,0 +1,18 @@
+require 'spec_helper'
+
+describe "wikis/show" do
+ before(:each) do
+ @wiki = assign(:wiki, stub_model(Wiki,
+ :title => "Title",
+ :content => "MyText"
+ ))
+ end
+
+ it "renders attributes in <p>" do
+ render
+ # Run the generator again with the --webrat flag if you want to use webrat matchers
+ rendered.should match(/Title/)
+ # Run the generator again with the --webrat flag if you want to use webrat matchers
+ rendered.should match(/MyText/)
+ end
+end