diff options
author | Valery Sizov <vsv2711@gmail.com> | 2012-02-19 16:35:31 +0200 |
---|---|---|
committer | Valery Sizov <vsv2711@gmail.com> | 2012-02-19 19:50:13 +0200 |
commit | eacea15a2156200fb363508e1bd92fc48226345b (patch) | |
tree | ab39c7146df5082b222169bd21dff0af2fefb62f | |
parent | df27ec29f3e0514ad80da95673b5b02e3fb10125 (diff) | |
download | gitlab-ce-eacea15a2156200fb363508e1bd92fc48226345b.tar.gz |
wiki base sceleton
-rw-r--r-- | app/controllers/wikis_controller.rb | 61 | ||||
-rw-r--r-- | app/models/project.rb | 1 | ||||
-rw-r--r-- | app/models/wiki.rb | 20 | ||||
-rw-r--r-- | app/views/layouts/_project_menu.html.haml | 5 | ||||
-rw-r--r-- | app/views/projects/_form.html.haml | 4 | ||||
-rw-r--r-- | app/views/wikis/_form.html.haml | 16 | ||||
-rw-r--r-- | app/views/wikis/edit.html.haml | 7 | ||||
-rw-r--r-- | app/views/wikis/index.html.haml | 21 | ||||
-rw-r--r-- | app/views/wikis/new.html.haml | 5 | ||||
-rw-r--r-- | app/views/wikis/show.html.haml | 7 | ||||
-rw-r--r-- | config/routes.rb | 2 | ||||
-rw-r--r-- | db/migrate/20120216215008_create_wikis.rb | 11 | ||||
-rw-r--r-- | db/migrate/20120219130957_add_slug_to_wiki.rb | 6 | ||||
-rw-r--r-- | db/migrate/20120219140810_add_wiki_enabled_to_project.rb | 6 | ||||
-rw-r--r-- | db/schema.rb | 14 | ||||
-rw-r--r-- | spec/controllers/wikis_controller_spec.rb | 164 | ||||
-rw-r--r-- | spec/views/wikis/edit.html.haml_spec.rb | 20 | ||||
-rw-r--r-- | spec/views/wikis/index.html.haml_spec.rb | 24 | ||||
-rw-r--r-- | spec/views/wikis/new.html.haml_spec.rb | 20 | ||||
-rw-r--r-- | spec/views/wikis/show.html.haml_spec.rb | 18 |
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 |