stiki 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/LICENSE +176 -0
  2. data/README.rdoc +65 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/project_monster_wiki/application.js +15 -0
  5. data/app/assets/javascripts/project_monster_wiki/authors.js +2 -0
  6. data/app/assets/javascripts/project_monster_wiki/pages.js +2 -0
  7. data/app/assets/javascripts/project_monster_wiki/spaces.js +2 -0
  8. data/app/assets/stylesheets/stiki/application.css.scss +17 -0
  9. data/app/assets/stylesheets/stiki/authors.css +4 -0
  10. data/app/assets/stylesheets/stiki/pages.css +54 -0
  11. data/app/assets/stylesheets/stiki/spaces.css +4 -0
  12. data/app/controllers/stiki/application_controller.rb +6 -0
  13. data/app/controllers/stiki/authors_controller.rb +6 -0
  14. data/app/controllers/stiki/pages_controller.rb +94 -0
  15. data/app/controllers/stiki/spaces_controller.rb +42 -0
  16. data/app/helpers/stiki/application_helper.rb +17 -0
  17. data/app/helpers/stiki/authors_helper.rb +4 -0
  18. data/app/helpers/stiki/pages_helper.rb +4 -0
  19. data/app/helpers/stiki/spaces_helper.rb +4 -0
  20. data/app/models/stiki/author.rb +9 -0
  21. data/app/models/stiki/page.rb +33 -0
  22. data/app/models/stiki/space.rb +16 -0
  23. data/app/views/stiki/pages/_form.html.erb +35 -0
  24. data/app/views/stiki/pages/edit.html.erb +13 -0
  25. data/app/views/stiki/pages/index.html.erb +51 -0
  26. data/app/views/stiki/pages/new.html.erb +13 -0
  27. data/app/views/stiki/pages/show.html.erb +86 -0
  28. data/app/views/stiki/spaces/index.html.erb +52 -0
  29. data/config/routes.rb +13 -0
  30. data/db/migrate/20120731063610_create_stiki_spaces.rb +10 -0
  31. data/db/migrate/20120731063657_create_stiki_pages.rb +13 -0
  32. data/db/migrate/20120731063721_create_stiki_authors.rb +14 -0
  33. data/lib/stiki/authenticate/devise.rb +19 -0
  34. data/lib/stiki/authenticate.rb +7 -0
  35. data/lib/stiki/authorize/cancan.rb +9 -0
  36. data/lib/stiki/authorize.rb +7 -0
  37. data/lib/stiki/engine.rb +6 -0
  38. data/lib/stiki/model/map_author.rb +10 -0
  39. data/lib/stiki/model.rb +7 -0
  40. data/lib/stiki/version.rb +3 -0
  41. data/lib/stiki.rb +70 -0
  42. data/lib/tasks/stiki_tasks.rake +4 -0
  43. data/spec/controllers/stiki/pages_controller_spec.rb +82 -0
  44. data/spec/controllers/stiki/spaces_controller_spec.rb +43 -0
  45. data/spec/factories/pages.rb +7 -0
  46. data/spec/factories/spaces.rb +5 -0
  47. data/spec/lib/authenticate/devise_spec.rb +26 -0
  48. data/spec/lib/stiki_spec.rb +47 -0
  49. data/spec/models/stiki/author_spec.rb +6 -0
  50. data/spec/models/stiki/page_spec.rb +8 -0
  51. data/spec/models/stiki/space_spec.rb +7 -0
  52. data/spec/spec_helper.rb +77 -0
  53. data/test/dummy/README.rdoc +261 -0
  54. data/test/dummy/Rakefile +7 -0
  55. data/test/dummy/app/assets/javascripts/application.js +15 -0
  56. data/test/dummy/app/assets/stylesheets/application.css +18 -0
  57. data/test/dummy/app/controllers/application_controller.rb +3 -0
  58. data/test/dummy/app/helpers/application_helper.rb +2 -0
  59. data/test/dummy/app/views/layouts/application.html.erb +22 -0
  60. data/test/dummy/config/application.rb +59 -0
  61. data/test/dummy/config/boot.rb +10 -0
  62. data/test/dummy/config/database.yml +25 -0
  63. data/test/dummy/config/environment.rb +5 -0
  64. data/test/dummy/config/environments/development.rb +37 -0
  65. data/test/dummy/config/environments/production.rb +67 -0
  66. data/test/dummy/config/environments/test.rb +37 -0
  67. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  68. data/test/dummy/config/initializers/inflections.rb +15 -0
  69. data/test/dummy/config/initializers/mime_types.rb +5 -0
  70. data/test/dummy/config/initializers/secret_token.rb +7 -0
  71. data/test/dummy/config/initializers/session_store.rb +8 -0
  72. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  73. data/test/dummy/config/locales/en.yml +5 -0
  74. data/test/dummy/config/routes.rb +4 -0
  75. data/test/dummy/config.ru +4 -0
  76. data/test/dummy/db/development.sqlite3 +0 -0
  77. data/test/dummy/db/schema.rb +46 -0
  78. data/test/dummy/db/test.sqlite3 +0 -0
  79. data/test/dummy/log/development.log +69 -0
  80. data/test/dummy/log/test.log +59362 -0
  81. data/test/dummy/public/404.html +26 -0
  82. data/test/dummy/public/422.html +26 -0
  83. data/test/dummy/public/500.html +25 -0
  84. data/test/dummy/public/favicon.ico +0 -0
  85. data/test/dummy/script/rails +6 -0
  86. data/test/test_helper.rb +15 -0
  87. metadata +319 -0
@@ -0,0 +1,35 @@
1
+ <fieldset>
2
+
3
+ <%- if page.errors %>
4
+ <div class="control-group error">
5
+ <%- page.errors.full_messages.each do |error| %>
6
+ <div class="error help-block">
7
+ <%= error %>
8
+ </div>
9
+ <% end -%>
10
+ </div>
11
+ <% end -%>
12
+
13
+ <div class="control-group">
14
+ <%= label_tag 'title', 'Title', :class => "control-label" %>
15
+ <div class="controls">
16
+ <input class="field input-xlarge span11" id="title" name="page[title]" value="<%= page.title %>" size="30" type="text">
17
+ </div>
18
+ <%= label_tag 'body', 'Body', :class => "control-label" %>
19
+ <div class="controls">
20
+ <textarea class="field input-xlarge span11" id="body" name="page[body]" rows="20"><%= page.body %></textarea>
21
+ </div>
22
+ </div>
23
+ <div class="form-actions">
24
+ <div class="span2">
25
+ <%= submit_tag "Save", :class => "btn btn-primary btn-large" %>
26
+ </div>
27
+ <div class="span2">
28
+ <% if page.id %>
29
+ <%= link_to 'Cancel', stiki_routes.space_page_path(@space, page), :class => 'btn' %>
30
+ <% else %>
31
+ <%= link_to 'Cancel', stiki_routes.space_pages_path(@space), :class => 'btn' %>
32
+ <% end %>
33
+ </div>
34
+ </div>
35
+ </fieldset>
@@ -0,0 +1,13 @@
1
+ <div class="row-fluid">
2
+ <div class="span8">
3
+ <div class="row-fluid well">
4
+ <h2>Edit <%= @page.title %></h2>
5
+ </div>
6
+
7
+ <div class="row-fluid well">
8
+ <%= form_tag( stiki_routes.space_page_path(@space, @page), :class => 'form-horizontal', :method => :put) do |f| %>
9
+ <%= render( :partial => 'stiki/pages/form', :locals => { :f => f, :page => @page } ) %>
10
+ <% end -%>
11
+ </div>
12
+ </div>
13
+ </div>
@@ -0,0 +1,51 @@
1
+ <div class="stiki">
2
+ <div class="page">
3
+ <div class="row-fluid">
4
+ <div class="span10 well">
5
+ <div class="span9">
6
+ <h1><%= @space.name %> Pages</h1>
7
+ </div>
8
+ <div class="span3">
9
+ <ul class="breadcrumb">
10
+ <li>
11
+ <div class="btn-group">
12
+ <button class="btn dropdown-toggle" data-toggle="dropdown">Change Space<span class="caret"></span></button>
13
+ <ul class="dropdown-menu">
14
+ <li><a href="<%= stiki_routes.spaces_path %>">All Spaces</a></li>
15
+ <%- @spaces.each do |space| %>
16
+ <li><a href="<%= stiki_routes.space_pages_path(space) %>"><%= space.name %></a></li>
17
+ <% end -%>
18
+ </ul>
19
+ </div>
20
+ </li>
21
+ </ul>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ <div class="row-fluid">
26
+ <div class="span10 well">
27
+ <ul class="nav nav-list page-list">
28
+ <%- @pages.each do |page| %>
29
+ <li>
30
+ <%= link_to page.title, stiki_routes.space_page_path(@space, page), :class => "span11" %>
31
+
32
+ <%- if has_access( :delete, @page ) %>
33
+ <%= button_to "X", stiki_routes.space_page_path( @space, page ), :method => :delete,
34
+ :class => 'close', :confirm => 'Are you sure you want to delete this Wiki Page?' %>
35
+ <% end -%>
36
+
37
+ </li>
38
+ <li class="clear"></li>
39
+ <% end -%>
40
+ </ul>
41
+ </div>
42
+ </div>
43
+ <%- if has_access( :create, Stiki::Page ) %>
44
+ <div class="row-fluid">
45
+ <div class="span10 well">
46
+ <%= link_to 'Create Page', stiki_routes.new_space_page_path(@space), :class => 'btn-large btn btn-success' %>
47
+ </div>
48
+ </div>
49
+ <% end -%>
50
+ </div>
51
+ </div>
@@ -0,0 +1,13 @@
1
+ <div class="row-fluid">
2
+ <div class="span8">
3
+ <div class="row-fluid well">
4
+ <h2>New Page in <%= @space.name %></h2>
5
+ </div>
6
+
7
+ <div class="row-fluid well">
8
+ <%= form_tag( stiki_routes.space_pages_path(@space), :class => 'form-horizontal' ) do |f| %>
9
+ <%= render( :partial => 'stiki/pages/form', :locals => { :f => f, :page => @page } ) %>
10
+ <% end -%>
11
+ </div>
12
+ </div>
13
+ </div>
@@ -0,0 +1,86 @@
1
+ <div class="stiki">
2
+ <div class="row-fluid page">
3
+ <div class="span12 well">
4
+ <div class="row-fluid">
5
+ <div class="span7 title">
6
+ <h1>
7
+ <%= link_to '<i class="icon-chevron-left"></i>'.html_safe, stiki_routes.space_pages_path(@space) %>
8
+ <%= @page.title %>
9
+ </h1>
10
+ </div>
11
+ <div class="span5">
12
+ <ul class="breadcrumb">
13
+ <li>
14
+ <span class="divider">/</span>
15
+ </li>
16
+ <li>
17
+ <div class="btn-group">
18
+ <button class="btn dropdown-toggle" data-toggle="dropdown"><%= @space.name %> <span class="caret"></span></button>
19
+ <ul class="dropdown-menu">
20
+ <li><a href="<%= stiki_routes.spaces_path %>">All Spaces</a></li>
21
+ <li class="divider"></li>
22
+ <%- @spaces.each do |space| %>
23
+ <li><a href="<%= stiki_routes.space_pages_path(space) %>"><%= space.name %></a></li>
24
+ <% end -%>
25
+ </ul>
26
+ </div>
27
+ </li>
28
+ <li>
29
+ <span class="divider">/</span>
30
+ </li>
31
+ <li>
32
+ <div class="btn-group">
33
+ <button class="btn dropdown-toggle" data-toggle="dropdown"><%= @page.title %> <span class="caret"></span></button>
34
+ <ul class="dropdown-menu">
35
+ <li><a href="<%= stiki_routes.space_pages_path(@space) %>">All Pages</a></li>
36
+ <li class="divider"></li>
37
+ <%- @pages.each do |page| %>
38
+ <li><a href="<%= stiki_routes.space_page_path(@space,page) %>"><%= page.title %></a></li>
39
+ <% end -%>
40
+ </ul>
41
+ </div>
42
+ </li>
43
+
44
+ </ul>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ <div class="row-fluid">
49
+ <div class="span9">
50
+ <div class="row-fluid">
51
+ <div class="span12 well"><%= @markup %></div>
52
+ </div>
53
+ <div class="row-fluid">
54
+ <div class="span12 well">
55
+ <%- if has_access( :update, @page ) %>
56
+ <div class="span2">
57
+ <%= link_to 'Edit', stiki_routes.edit_space_page_path(@space,@page), :class => 'btn btn-large btn-primary' %>
58
+ </div>
59
+ <% end -%>
60
+ <%- if has_access( :delete, @page ) %>
61
+ <div class="span2 delete">
62
+ <%= button_to "Delete", stiki_routes.space_page_path( @space, @page ), :method => :delete,
63
+ :class => 'btn', :confirm => 'Are you sure you want to delete this Wiki Page?' %>
64
+ </div>
65
+ <% end -%>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ <div class="span3">
70
+ <div class="row-fluid">
71
+ <div class="span12 well">
72
+ <ul class="nav nav-list author">
73
+ <li class="nav-header">Contributors</li>
74
+ <%- @page.authors.each do |author| %>
75
+ <li>
76
+ <%= user_name( author ) %>
77
+ <%= "<span class='badge badge-success' title='Author'>A</span>".html_safe if author.creator %>
78
+ <%= "<span class='badge badge-info' title='Last Edit'>L</span>".html_safe if author.last_edit %></li>
79
+ </li>
80
+ <% end -%>
81
+ </ul>
82
+ <div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
@@ -0,0 +1,52 @@
1
+ <%- @spaces.each do |space| %>
2
+ <div class="row-fluid">
3
+ <div class="span8">
4
+ <div class="row-fluid">
5
+ <div class="hero-unit">
6
+ <h2><%= link_to space.name, stiki_routes.space_pages_path(space) %></h2>
7
+ <h4 style="float:left">Created by <%= user_name( space.creator ) %></h4>
8
+ <%- if has_access( :update, @page ) %>
9
+ <%= button_to "X", stiki_routes.space_path( space ), :method => :delete,
10
+ :class => 'close', :confirm => 'Are you sure you want to delete this Wiki Space?' %>
11
+ <% end -%>
12
+ </div>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ <% end -%>
17
+ <%- if has_access( :create, Stiki::Space ) %>
18
+ <div class="row-fluid create-space">
19
+ <div class="span8 well">
20
+ <a href="#" class="create-space-trigger">Create New Space</a>
21
+ </div>
22
+ </div>
23
+ <div class="row-fluid create-space" style="display:none">
24
+ <div class="span8">
25
+ <div class="row-fluid">
26
+ <%= form_tag( stiki_routes.spaces_path, :class => 'form-horizontal' ) do |f| %>
27
+ <fieldset class="well">
28
+ <h2>Create New Space</h2>
29
+ <div class="control-group">
30
+ <%= label_tag 'name', 'Name', :class => "control-label" %>
31
+ <div class="controls">
32
+ <input class="input-xlarge" id="name" name="space[name]" size="30" type="text">
33
+ </div>
34
+ </div>
35
+ <div class="form-actions">
36
+ <%= submit_tag "Create", :class => "btn btn-primary btn-large" %>
37
+ <a href="#" class="create-space-trigger btn">Cancel</a>
38
+ </div>
39
+ </fieldset>
40
+ <% end -%>
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+ <script>
46
+ $(function() {
47
+ $('.create-space-trigger').click( function() {
48
+ $('.create-space').slideToggle();
49
+ });
50
+ });
51
+ </script>
52
+ <% end -%>
data/config/routes.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'friendly_id'
2
+
3
+ Stiki::Engine.routes.draw do
4
+
5
+ resources :authors, :controller => 'stiki::authors'
6
+
7
+ resources :spaces, :controller => 'stiki::spaces' do
8
+ resources :pages, :controller => 'stiki::pages'
9
+ end
10
+
11
+ root :to => 'stiki::spaces#index'
12
+
13
+ end
@@ -0,0 +1,10 @@
1
+ class CreateStikiSpaces < ActiveRecord::Migration
2
+ def change
3
+ create_table :stiki_spaces do |t|
4
+ t.string :name
5
+ t.string :slug
6
+ t.timestamps
7
+ end
8
+ add_index :stiki_spaces, :slug, unique: true
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ class CreateStikiPages < ActiveRecord::Migration
2
+ def change
3
+ create_table :stiki_pages do |t|
4
+ t.string :title
5
+ t.string :slug
6
+ t.text :body
7
+ t.integer :parent_id
8
+ t.integer :space_id
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ class CreateStikiAuthors < ActiveRecord::Migration
2
+ def change
3
+ create_table :stiki_authors do |t|
4
+ t.integer :user_id
5
+ t.integer :authorable_id
6
+ t.string :authorable_type
7
+ t.boolean :creator
8
+ t.boolean :last_edit
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :stiki_authors, [:authorable_id, :authorable_type]
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ require 'stiki'
2
+ require 'stiki/authenticate'
3
+
4
+ module Stiki::Authenticate::Devise
5
+ def self.included(base)
6
+ if Stiki.auth_mapping
7
+ auth_required = Stiki.auth_mapping[base.controller_name.to_sym]
8
+ if auth_required
9
+ if auth_required == :all
10
+ base.before_filter "authenticate_#{Stiki::Helper.user_model_name}!".to_sym
11
+ else
12
+ base.before_filter "authenticate_#{Stiki::Helper.user_model_name}!".to_sym, auth_required
13
+ end
14
+ end
15
+ else
16
+ raise "Stiki.auth_mapping was nil"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ require 'stiki'
2
+
3
+ module Stiki
4
+ module Authenticate
5
+
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'stiki/authorize'
2
+
3
+ module Stiki::Authorize::Cancan
4
+ def self.included(base)
5
+ require 'cancan'
6
+ require 'cancan/ability'
7
+ base.load_and_authorize_resource base.class.name
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'stiki'
2
+
3
+ module Stiki
4
+ module Authorize
5
+
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module Stiki
2
+ class Engine < ::Rails::Engine
3
+ #isolate_namespace ProjectMonsterWiki
4
+
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ require 'stiki/model'
2
+ require 'active_support/concern'
3
+
4
+ module Stiki::Model::MapAuthor
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ belongs_to :user, :class_name => Stiki.user_class
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'stiki'
2
+
3
+ module Stiki
4
+ module Model
5
+
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module Stiki
2
+ VERSION = "0.0.1"
3
+ end
data/lib/stiki.rb ADDED
@@ -0,0 +1,70 @@
1
+ require "stiki/engine"
2
+ require 'stiki/authenticate/devise'
3
+ require 'stiki/authorize/cancan'
4
+ require 'stiki/model/map_author'
5
+
6
+ module Stiki
7
+
8
+ mattr_accessor :user_class
9
+ mattr_accessor :user_name_via
10
+ mattr_accessor :authenticate_by
11
+ mattr_accessor :authenticate_pages
12
+ mattr_accessor :authenticate_spaces
13
+ mattr_accessor :auth_mapping
14
+
15
+ mattr_accessor :authorize_by
16
+
17
+ def self.reload
18
+ config( &@@config_blk ) if @@config_blk
19
+ end
20
+
21
+ def self.config(&blk)
22
+ @@config_blk = blk
23
+
24
+ yield self
25
+
26
+ if user_class
27
+ unless @@user_name_via.nil?
28
+ @@user_name_via = @@user_name_via.to_sym
29
+ else
30
+ @@user_name_via = :to_s
31
+ end
32
+
33
+ ::Stiki::Author.send(:include, Stiki::Model::MapAuthor)
34
+ end
35
+
36
+ if authenticate_by
37
+
38
+ if authenticate_by.to_sym == :devise
39
+
40
+ if user_class.nil?
41
+ raise "Stiki.user_class is required for devise auth"
42
+ end
43
+
44
+ @@authenticate_pagess = {:only => [:new, :create, :edit, :update]} if @@authenticate_pages.nil?
45
+ @@authenticate_spaces = {:only => [:new, :create, :edit, :update]} if @@authenticate_spaces.nil?
46
+
47
+ @@auth_mapping = { :pages => @@authenticate_pages, :spaces => @@authenticate_spaces }
48
+
49
+ ::Stiki::SpacesController.send(:include, Stiki::Authenticate::Devise )
50
+
51
+ ::Stiki::PagesController.send( :include, Stiki::Authenticate::Devise )
52
+ end
53
+
54
+ end
55
+
56
+ if authorize_by
57
+ if authorize_by.to_sym == :cancan
58
+ ::Stiki::SpacesController.send(:include, Stiki::Authorize::Cancan )
59
+
60
+ ::Stiki::PagesController.send( :include, Stiki::Authorize::Cancan )
61
+ end
62
+ end
63
+ end
64
+
65
+ module Helper
66
+ def self.user_model_name
67
+ Stiki.user_class.constantize.name.underscore
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :project_monster_wiki do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+ require 'stiki/pages_controller'
3
+
4
+ describe Stiki::PagesController do
5
+
6
+ before do
7
+ Stiki.config do |stiki|
8
+ stiki.user_class = 'Author'
9
+ end
10
+ end
11
+
12
+ it "should have before_filters" do
13
+ Stiki::PagesController.filters[:before].should include(:get_space);
14
+ end
15
+
16
+ describe "GET #index" do
17
+ before do
18
+ @space = FactoryGirl.create(:space)
19
+ get :index, :space_id => @space.slug, :use_route => :stiki
20
+ end
21
+
22
+ it { response.should be_success }
23
+ it { should assign_to(:space) }
24
+ it { should assign_to(:pages) }
25
+ it { should render_template('stiki/pages/index') }
26
+ end
27
+
28
+ describe "GET #show" do
29
+ before do
30
+ @page = FactoryGirl.create(:page)
31
+ @space = @page.space
32
+ get :show, :space_id => @space.slug, :id => @page.slug, :use_route => :stiki
33
+ end
34
+
35
+ it { should_not set_the_flash }
36
+ it { response.should be_success }
37
+ it { should assign_to(:space) }
38
+ it { should assign_to(:page) }
39
+ it { should assign_to(:markup) }
40
+ it { should render_template('stiki/pages/show') }
41
+ end
42
+
43
+ describe "GET #new" do
44
+ before do
45
+ @space = FactoryGirl.create(:space)
46
+ get :new, :space_id => @space.slug, :use_route => :stiki
47
+ end
48
+
49
+ it { should_not set_the_flash }
50
+ it { response.should be_success }
51
+ it { should assign_to(:space) }
52
+ it { should assign_to(:page) }
53
+ it { should render_template('stiki/pages/new') }
54
+ end
55
+
56
+ describe "GET #create" do
57
+ context "success" do
58
+ before do
59
+ @space = FactoryGirl.create(:space)
60
+ post :create, :space_id => @space.slug, :page => { :title => 'title123', :body => 'body123' }, :use_route => :stiki
61
+ end
62
+
63
+ it { response.should be_redirect }
64
+ end
65
+
66
+ context "error" do
67
+ before do
68
+ @space = FactoryGirl.create(:space)
69
+ post :create, :space_id => @space.slug, :use_route => :stiki
70
+ end
71
+
72
+ it { response.should be_success }
73
+ it { should assign_to(:space) }
74
+ it { should assign_to(:page) }
75
+ it { should render_template('stiki/pages/new') }
76
+ it "should not be a valid page" do
77
+ assigns(:page).should_not be_valid
78
+ end
79
+ end
80
+ end
81
+
82
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+ require 'stiki/spaces_controller'
3
+
4
+ describe Stiki::SpacesController do
5
+
6
+ describe "GET #index" do
7
+ before do
8
+ @space1 = FactoryGirl.create(:space)
9
+ @space2 = FactoryGirl.create(:space)
10
+ @space3 = FactoryGirl.create(:space)
11
+
12
+ get :index, :use_route => :stiki
13
+ end
14
+
15
+ it { response.should be_success }
16
+ it { should assign_to(:spaces) }
17
+ it { assigns(:spaces).size.should eql 3 }
18
+ it { should render_template('stiki/spaces/index') }
19
+ end
20
+
21
+ describe "GET #create" do
22
+ context "success" do
23
+ before do
24
+ expect {
25
+ post :create, :space => { :name => 'name123' }, :use_route => :stiki
26
+ }.to change{ Stiki::Space.count }.by(1)
27
+ end
28
+
29
+ it { response.should be_redirect }
30
+ end
31
+
32
+ context "error" do
33
+ before do
34
+ expect {
35
+ post :create, :use_route => :stiki
36
+ }.to change{ Stiki::Space.count }.by(0)
37
+ end
38
+
39
+ it { response.should be_redirect }
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :page, class: 'Stiki::Page' do
3
+ sequence(:title) { |n| "Test#{n}#{Time.now.to_s.gsub(/[ :-]/, '')}" }
4
+ body "body"
5
+ space
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ FactoryGirl.define do
2
+ factory :space, class: 'Stiki::Space' do
3
+ sequence(:name) { |n| "Test#{n}#{Time.now.to_s.gsub(/[ :-]/, '')}" }
4
+ end
5
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require 'stiki/authenticate/devise'
3
+
4
+ describe Stiki::Authenticate::Devise do
5
+
6
+ describe "include in Controllers" do
7
+ before do
8
+ Stiki.config do |stiki|
9
+ stiki.authenticate_by = :devise
10
+ stiki.user_class = 'Author'
11
+ stiki.authenticate_pages = :all
12
+ stiki.authenticate_spaces = [:new, :create, :edit, :update]
13
+ end
14
+ end
15
+
16
+ it "should set before_filter in PagesController" do
17
+ Stiki::PagesController.filters[:before].should include( :authenticate_author! )
18
+ end
19
+
20
+ it "should set before_filter in SpacesController" do
21
+ Stiki::SpacesController.filters[:before].should include( :authenticate_author! )
22
+ end
23
+
24
+ end
25
+
26
+ end