stiki 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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