junebug-wiki 0.0.22 → 0.0.23
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.
- 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