junebug-wiki 0.0.22 → 0.0.23
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +10 -0
- data/RELEASE_NOTES.txt +7 -0
- data/deploy/config.yml +3 -2
- data/deploy/public/style/base.css +1 -0
- data/lib/junebug.rb +1 -1
- data/lib/junebug/controllers.rb +18 -21
- data/lib/junebug/models.rb +4 -4
- data/lib/junebug/version.rb +1 -1
- data/lib/junebug/views.rb +5 -5
- data/test/wiki_test.rb +45 -9
- metadata +1 -1
data/History.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
= 0.0.23 2006-11-28
|
2
|
+
|
3
|
+
* *EXISTING USERS PLEASE READ THE RELEASE NOTES*
|
4
|
+
* Cleaned up redirect handling
|
5
|
+
* Renamed 'url' config parameter to 'feedurl'
|
6
|
+
* Make edit button always visible
|
7
|
+
* Fix for camping error on initial load
|
8
|
+
* Allow dashes in wikiwords
|
9
|
+
* More tests
|
10
|
+
|
1
11
|
= 0.0.22 2006-11-28
|
2
12
|
|
3
13
|
* *EXISTING USERS PLEASE READ THE RELEASE NOTES*
|
data/RELEASE_NOTES.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
= 0.0.23 2006-11-28
|
2
|
+
|
3
|
+
Robert Gogolok rightly pointed out that the 'url' parameter in config.yml was confusing, so I renamed it 'feedurl'. You will need to make this change to any existing junebug wikis.
|
4
|
+
|
5
|
+
Also, as part of this change, I cleaned up the redirect handling code. This might affect users operating a proxied Junebug wiki. I will add some notes to http://www.junebugwiki.com for setting up an apache proxy for Junebug.
|
6
|
+
|
7
|
+
|
1
8
|
= 0.0.22 2006-11-28
|
2
9
|
|
3
10
|
The wikiword syntax has changed slightly. Starting in this version, wikiwords can not contain underscores. Furthermore, in page urls, spaces will now be replaced by underscores. Example:
|
data/deploy/config.yml
CHANGED
@@ -30,7 +30,8 @@ dbconnection:
|
|
30
30
|
# host: localhost
|
31
31
|
|
32
32
|
# configuring rss
|
33
|
-
|
34
|
-
|
33
|
+
# you should only need to change this is you have an external feed manager like feedburner
|
34
|
+
feedtitle: Wiki Updates
|
35
|
+
feedurl: http://localhost:3301
|
35
36
|
feed: http://localhost:3301/all/feed
|
36
37
|
|
data/lib/junebug.rb
CHANGED
data/lib/junebug/controllers.rb
CHANGED
@@ -2,26 +2,24 @@ require 'junebug/ext/diff'
|
|
2
2
|
|
3
3
|
module Junebug::Controllers
|
4
4
|
|
5
|
-
|
6
5
|
class Index < R '/'
|
7
6
|
def get
|
8
7
|
redirect Junebug.startpage
|
9
8
|
end
|
10
9
|
end
|
11
10
|
|
12
|
-
class Show < R '/([0-9A-Za-z_]+)', '/([0-9A-Za-z_]+)/(\d+)'
|
11
|
+
class Show < R '/([0-9A-Za-z_-]+)', '/([0-9A-Za-z_-]+)/(\d+)'
|
13
12
|
def get page_name, version = nil
|
14
|
-
|
15
|
-
redirect("#{Junebug.config['url']}/#{page_name.gsub(/ /,'+')}/1/edit") and return unless @page = Page.find_by_title(page_name.gsub(/_/,' '))
|
13
|
+
redirect(Edit, page_name, 1) and return unless @page = Page.find_by_title(page_name.gsub(/_/,' '))
|
16
14
|
@page_title = @page.title
|
17
15
|
@version = (version.nil? or version == @page.version.to_s) ? @page : @page.versions.find_by_version(version)
|
18
16
|
render :show
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
22
|
-
class Edit < R '/([0-9A-Za-z_]+)/edit', '/([0-9A-Za-z_]+)/(\d+)/edit'
|
20
|
+
class Edit < R '/([0-9A-Za-z_-]+)/edit', '/([0-9A-Za-z_-]+)/(\d+)/edit'
|
23
21
|
def get page_name, version = nil
|
24
|
-
redirect("
|
22
|
+
redirect("/login?return_to=#{CGI::escape(@env['REQUEST_URI'])}") and return unless logged_in?
|
25
23
|
page_name_spc = page_name.gsub(/_/,' ')
|
26
24
|
@page = Page.find(:first, :conditions=>['title = ?', page_name_spc])
|
27
25
|
@page = Page.create(:title => page_name_spc, :user_id=>@state.user.id) unless @page
|
@@ -32,7 +30,7 @@ module Junebug::Controllers
|
|
32
30
|
|
33
31
|
# FIXME: no error checking, also no verify quicksave/readonly rights
|
34
32
|
def post page_name
|
35
|
-
redirect("
|
33
|
+
redirect("/login?return_to=#{CGI::escape(@env['REQUEST_URI'])}") and return unless logged_in?
|
36
34
|
page_name_spc = page_name.gsub(/_/,' ')
|
37
35
|
if input.submit == 'save'
|
38
36
|
if ! input.quicksave
|
@@ -47,32 +45,31 @@ module Junebug::Controllers
|
|
47
45
|
current_version.update_attributes(attrs)
|
48
46
|
page.without_revision { page.update_attributes(attrs) }
|
49
47
|
end
|
50
|
-
|
51
|
-
redirect "#{Junebug.config['url']}/#{input.post_title.gsub(/ /,'_')}"
|
48
|
+
redirect Show, input.post_title.gsub(/ /,'_')
|
52
49
|
else # cancel
|
53
|
-
redirect
|
50
|
+
redirect Show, page_name
|
54
51
|
end
|
55
52
|
end
|
56
53
|
end
|
57
54
|
|
58
|
-
class Delete < R '/([0-9A-Za-z_]+)/delete'
|
55
|
+
class Delete < R '/([0-9A-Za-z_-]+)/delete'
|
59
56
|
def get page_name
|
60
|
-
redirect("
|
57
|
+
redirect("/login") and return unless logged_in?
|
61
58
|
Page.find_by_title(page_name.gsub(/_/,' ')).destroy() if is_admin?
|
62
59
|
redirect Junebug.startpage
|
63
60
|
end
|
64
61
|
|
65
62
|
end
|
66
63
|
|
67
|
-
class Revert < R '/([0-9A-Za-z_]+)/(\d+)/revert'
|
64
|
+
class Revert < R '/([0-9A-Za-z_-]+)/(\d+)/revert'
|
68
65
|
def get page_name, version
|
69
|
-
redirect("
|
66
|
+
redirect("/login") and return unless logged_in?
|
70
67
|
Page.find_by_title(page_name.gsub(/_/,' ')).revert_to!(version) if is_admin?
|
71
|
-
redirect
|
68
|
+
redirect Show, page_name
|
72
69
|
end
|
73
70
|
end
|
74
71
|
|
75
|
-
class Versions < R '/([0-9A-Za-z_]+)/versions'
|
72
|
+
class Versions < R '/([0-9A-Za-z_-]+)/versions'
|
76
73
|
def get page_name
|
77
74
|
page_name_spc = page_name.gsub(/_/,' ')
|
78
75
|
@page = Page.find_by_title(page_name_spc)
|
@@ -90,7 +87,7 @@ module Junebug::Controllers
|
|
90
87
|
end
|
91
88
|
end
|
92
89
|
|
93
|
-
class Backlinks < R '/([0-9A-Za-z_]+)/backlinks'
|
90
|
+
class Backlinks < R '/([0-9A-Za-z_-]+)/backlinks'
|
94
91
|
def get page_name
|
95
92
|
page_name_spc = page_name.gsub(/_/,' ')
|
96
93
|
@page = Page.find_by_title(page_name_spc)
|
@@ -108,7 +105,7 @@ module Junebug::Controllers
|
|
108
105
|
end
|
109
106
|
end
|
110
107
|
|
111
|
-
class Diff < R '/([0-9A-Za-z_]+)/(\d+)/(\d+)/diff'
|
108
|
+
class Diff < R '/([0-9A-Za-z_-]+)/(\d+)/(\d+)/diff'
|
112
109
|
include HTMLDiff
|
113
110
|
def get page_name, v1, v2
|
114
111
|
page_name_spc = page_name.gsub(/_/,' ')
|
@@ -164,7 +161,7 @@ module Junebug::Controllers
|
|
164
161
|
if @user
|
165
162
|
if @user.password == input.password
|
166
163
|
@state.user = @user
|
167
|
-
input.return_to.blank? ? redirect(Junebug.startpage) : redirect(
|
164
|
+
input.return_to.blank? ? redirect(Junebug.startpage) : redirect(input.return_to)
|
168
165
|
return
|
169
166
|
else
|
170
167
|
@notice = 'Authentication failed'
|
@@ -173,7 +170,7 @@ module Junebug::Controllers
|
|
173
170
|
@user = User.create :username=>input.username, :password=>input.password
|
174
171
|
if @user.errors.empty?
|
175
172
|
@state.user = @user
|
176
|
-
input.return_to.blank? ? redirect(Junebug.startpage) : redirect(
|
173
|
+
input.return_to.blank? ? redirect(Junebug.startpage) : redirect(input.return_to)
|
177
174
|
return
|
178
175
|
else
|
179
176
|
@notice = @user.errors.full_messages[0]
|
@@ -186,7 +183,7 @@ module Junebug::Controllers
|
|
186
183
|
class Logout
|
187
184
|
def get
|
188
185
|
@state.user = nil
|
189
|
-
input.return_to.blank? ? redirect(Junebug.startpage) : redirect(
|
186
|
+
input.return_to.blank? ? redirect(Junebug.startpage) : redirect(input.return_to)
|
190
187
|
end
|
191
188
|
end
|
192
189
|
end
|
data/lib/junebug/models.rb
CHANGED
@@ -25,13 +25,13 @@ module Junebug::Models
|
|
25
25
|
end
|
26
26
|
|
27
27
|
class Page < Base
|
28
|
-
belongs_to :user
|
28
|
+
belongs_to :user, :class_name=>"Junebug::Models::User" # Hack to prevent camping error on initial load
|
29
29
|
#PAGE_LINK = /\[\[([^\]|]*)[|]?([^\]]*)\]\]/
|
30
|
-
PAGE_LINK = /\[\[([0-9A-Za-z ]+)[|]?([^\]]*)\]\]/
|
30
|
+
PAGE_LINK = /\[\[([0-9A-Za-z -]+)[|]?([^\]]*)\]\]/
|
31
31
|
#before_save { |r| r.title = r.title.underscore }
|
32
32
|
#PAGE_LINK = /([A-Z][a-z]+[A-Z]\w+)/
|
33
33
|
validates_uniqueness_of :title
|
34
|
-
validates_format_of :title, :with => /^[0-9A-Za-z ]+$/
|
34
|
+
validates_format_of :title, :with => /^[0-9A-Za-z -]+$/
|
35
35
|
validates_presence_of :title
|
36
36
|
acts_as_versioned
|
37
37
|
non_versioned_fields.push 'title'
|
@@ -46,7 +46,7 @@ module Junebug::Models
|
|
46
46
|
end
|
47
47
|
|
48
48
|
class Page::Version < Base
|
49
|
-
belongs_to :user
|
49
|
+
belongs_to :user, :class_name=>"Junebug::Models::User" # Hack to prevent camping error on initial load
|
50
50
|
end
|
51
51
|
|
52
52
|
class CreateJunebug < V 1.0
|
data/lib/junebug/version.rb
CHANGED
data/lib/junebug/views.rb
CHANGED
@@ -23,10 +23,10 @@ module Junebug::Views
|
|
23
23
|
def show
|
24
24
|
_header (@version.version == @page.version ? :backlinks : :show)
|
25
25
|
_body do
|
26
|
-
_button 'edit', R(Edit, @page.title_url, @version.version), {:style=>'float: right; margin: 0 0 5px 5px;'} if
|
26
|
+
_button 'edit', R(Edit, @page.title_url, @version.version), {:style=>'float: right; margin: 0 0 5px 5px;'} if (@version.version == @page.version && (! @page.readonly || is_admin?))
|
27
27
|
h1 @page.title
|
28
28
|
_markup @version.body
|
29
|
-
_button 'edit', R(Edit, @page.title_url, @version.version), {:style=>'float: right; margin: 5px 0 0 5px;'} if
|
29
|
+
_button 'edit', R(Edit, @page.title_url, @version.version), {:style=>'float: right; margin: 5px 0 0 5px;'} if (@version.version == @page.version && (! @page.readonly || is_admin?)) && (@version.body && @version.body.size > 200)
|
30
30
|
br :clear=>'all'
|
31
31
|
end
|
32
32
|
_footer {
|
@@ -64,7 +64,7 @@ module Junebug::Views
|
|
64
64
|
br
|
65
65
|
input :value => @page.title, :name => 'post_title', :size => 30,
|
66
66
|
:type => 'text'
|
67
|
-
small " word characters
|
67
|
+
small " word characters (0-9A-Za-z), dashes, and spaces only"
|
68
68
|
}
|
69
69
|
p {
|
70
70
|
label 'Page Content'
|
@@ -288,14 +288,14 @@ module Junebug::Views
|
|
288
288
|
xml.feed "xmlns"=>"http://www.w3.org/2005/Atom" do
|
289
289
|
|
290
290
|
xml.title Junebug.config['feedtitle'] || "Wiki Updates"
|
291
|
-
xml.id Junebug.config['
|
291
|
+
xml.id Junebug.config['feedurl'] + '/'
|
292
292
|
xml.link "rel" => "self", "href" => Junebug.config['feed']
|
293
293
|
|
294
294
|
pages = Junebug::Models::Page.find(:all, :order => 'updated_at DESC', :limit => 20)
|
295
295
|
xml.updated pages.first.updated_at.xmlschema
|
296
296
|
|
297
297
|
pages.each do |page|
|
298
|
-
url = Junebug.config['
|
298
|
+
url = Junebug.config['feedurl'] + '/' + page.title
|
299
299
|
xml.entry do
|
300
300
|
xml.id url
|
301
301
|
xml.title page.title
|
data/test/wiki_test.rb
CHANGED
@@ -6,7 +6,7 @@ include Junebug::Models
|
|
6
6
|
|
7
7
|
class JunebugTest < Camping::FunctionalTest
|
8
8
|
|
9
|
-
fixtures :junebug_users
|
9
|
+
#fixtures :junebug_users
|
10
10
|
|
11
11
|
def setup
|
12
12
|
super
|
@@ -43,10 +43,6 @@ class JunebugTest < Camping::FunctionalTest
|
|
43
43
|
assert_response :redirect
|
44
44
|
assert_redirected_to '/login'
|
45
45
|
|
46
|
-
post '/Welcome_to_Junebug/edit'
|
47
|
-
assert_response :redirect
|
48
|
-
assert_redirected_to '/login'
|
49
|
-
|
50
46
|
get '/Welcome_to_Junebug/delete'
|
51
47
|
assert_response :redirect
|
52
48
|
assert_redirected_to '/login'
|
@@ -55,6 +51,47 @@ class JunebugTest < Camping::FunctionalTest
|
|
55
51
|
assert_response :redirect
|
56
52
|
assert_redirected_to '/login'
|
57
53
|
end
|
54
|
+
|
55
|
+
def test_edit_cycle
|
56
|
+
get '/Welcome_to_Junebug/edit'
|
57
|
+
assert_response :redirect
|
58
|
+
assert_redirected_to '/login'
|
59
|
+
|
60
|
+
post '/login', :username => 'admin', :password => 'password'
|
61
|
+
assert_response :redirect
|
62
|
+
assert_redirected_to '/Welcome_to_Junebug'
|
63
|
+
|
64
|
+
get '/Welcome_to_Junebug/edit'
|
65
|
+
assert_response :success
|
66
|
+
|
67
|
+
pagename = "Welcome to Junebug"
|
68
|
+
page = Junebug::Models::Page.find_by_title(pagename)
|
69
|
+
|
70
|
+
# submit nochange
|
71
|
+
post "/#{page.title_url}/edit", :post_title=>page.title, :post_body=>page.body, :post_readonly=>page.readonly, :submit=>'save'
|
72
|
+
assert_response :redirect
|
73
|
+
assert_redirected_to "/#{page.title_url}"
|
74
|
+
page2 = Junebug::Models::Page.find_by_title(page.title)
|
75
|
+
assert_equal page.title, page2.title
|
76
|
+
assert_equal page.body, page2.body
|
77
|
+
assert_equal page.user_id, page2.user_id
|
78
|
+
assert_equal page.readonly, page2.readonly
|
79
|
+
assert_equal page.version+1, page2.version
|
80
|
+
|
81
|
+
pagename = "Welcome to Junebug"
|
82
|
+
page = Junebug::Models::Page.find_by_title(pagename)
|
83
|
+
|
84
|
+
# submit edited title and body
|
85
|
+
post "/#{page.title_url}/edit", :post_title=>page.title+'2', :post_body=>page.body+'2', :post_readonly=>page.readonly, :submit=>'save'
|
86
|
+
assert_response :redirect
|
87
|
+
assert_redirected_to "/#{page.title_url+'2'}"
|
88
|
+
page2 = Junebug::Models::Page.find_by_title(page.title+'2')
|
89
|
+
assert_equal page.title+'2', page2.title
|
90
|
+
assert_equal page.body+'2', page2.body
|
91
|
+
assert_equal page.user_id, page2.user_id
|
92
|
+
assert_equal page.readonly, page2.readonly
|
93
|
+
assert_equal page.version+1, page2.version
|
94
|
+
end
|
58
95
|
|
59
96
|
|
60
97
|
#
|
@@ -98,6 +135,9 @@ class PageTest < Camping::UnitTest
|
|
98
135
|
page = create(:title => 'Test Page')
|
99
136
|
assert page.valid?
|
100
137
|
|
138
|
+
page = create(:title => 'Test-Page')
|
139
|
+
assert page.valid?
|
140
|
+
|
101
141
|
page = create(:title => 'test page')
|
102
142
|
assert page.valid?
|
103
143
|
|
@@ -128,10 +168,6 @@ class PageTest < Camping::UnitTest
|
|
128
168
|
page = create(:title => '*')
|
129
169
|
deny page.valid?
|
130
170
|
assert_not_nil page.errors.on(:title)
|
131
|
-
|
132
|
-
page = create(:title => 'page-1')
|
133
|
-
deny page.valid?
|
134
|
-
assert_not_nil page.errors.on(:title)
|
135
171
|
|
136
172
|
page = create(:title => 'page\'s')
|
137
173
|
deny page.valid?
|
metadata
CHANGED