sqliki_generator 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/USAGE +14 -30
- data/{sqliki_generator-0.0.1.gemspec → sqliki_generator-0.0.2.gemspec} +5 -6
- data/sqliki_generator.rb +2 -9
- data/templates/README +9 -2
- data/templates/controller_sqliki_controller.rb +32 -33
- data/templates/model_draft.rb +26 -30
- data/templates/{view_new.rhtml → view_create.rhtml} +0 -0
- data/templates/view_edit.rhtml +4 -4
- data/templates/view_list.rhtml +2 -5
- metadata +13 -5
- data/templates/view_find.rhtml +0 -2
- data/templates/view_inplace_save.rhtml +0 -2
data/USAGE
CHANGED
@@ -9,38 +9,22 @@ SYNOPSIS
|
|
9
9
|
DESCRIPTION
|
10
10
|
This generator creates a rudimentary SQL-based wiki.
|
11
11
|
|
12
|
-
Included:
|
13
|
-
- a User model which uses sha1 encryption for passwords
|
14
|
-
- a Controller with signup, login, welcome and logoff actions
|
15
|
-
- a mixin which lets you easily add advanced authentication
|
16
|
-
features to your abstract base controller
|
17
|
-
- a user_model.sql with the minimal sql required to get the model to work.
|
18
|
-
- extensive unit and functional test cases to make sure nothing breaks.
|
19
|
-
|
20
12
|
EXAMPLE
|
21
13
|
./script/generate sqliki Wiki
|
22
14
|
|
23
|
-
This will generate a Wiki controller
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
save
|
38
|
-
raw
|
39
|
-
html
|
40
|
-
inplace_edit
|
41
|
-
inplace_save
|
42
|
-
create
|
43
|
-
update
|
44
|
-
destroy
|
15
|
+
This will generate a Wiki controller which provides users:
|
16
|
+
/wiki/index (==list) -- list all pages (alphabeticaly)
|
17
|
+
/wiki/wanted -- ..pages with no content
|
18
|
+
/wiki/orphaned -- ..pages that aren't linked to
|
19
|
+
/wiki/recently_revised -- ..pages in reverse order of edits
|
20
|
+
/wiki/show/(page) -- Show an existing page
|
21
|
+
/wiki/create/(page) -- Create a new page
|
22
|
+
/wiki/edit/(page) -- Edit an existing page
|
23
|
+
...and additional methods for control flow / internal use:
|
24
|
+
/wiki/raw
|
25
|
+
/wiki/html
|
26
|
+
/wiki/inplace_edit
|
27
|
+
/wiki/destroy
|
28
|
+
/wiki/rollback/(draft)
|
45
29
|
|
46
30
|
The tables are always called pages, drafts, and links
|
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
SPEC = Gem::Specification.new do |s|
|
4
4
|
s.name = %q{sqliki_generator}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.2"
|
6
6
|
s.date = %q{2005-08-25}
|
7
7
|
s.summary = %q{[Rails] SQL-based wiki generator.}
|
8
8
|
s.require_paths = ["."]
|
@@ -16,21 +16,20 @@ SPEC = Gem::Specification.new do |s|
|
|
16
16
|
templates/README
|
17
17
|
templates/model_draft.rb
|
18
18
|
templates/view_edit.rhtml
|
19
|
-
templates/view_find.rhtml
|
20
19
|
templates/view__form.rhtml
|
21
20
|
templates/view_inplace_edit.rhtml
|
22
|
-
templates/view_inplace_save.rhtml
|
23
21
|
templates/view_list.rhtml
|
24
|
-
templates/
|
22
|
+
templates/view_create.rhtml
|
25
23
|
templates/view_rollback.rhtml
|
26
24
|
templates/view_show.rhtml
|
27
25
|
templates/model_link.rb
|
28
26
|
templates/model_page.rb
|
29
27
|
templates/controller_sqliki_controller.rb
|
30
28
|
sqliki_generator.rb
|
31
|
-
sqliki_generator-0.0.
|
29
|
+
sqliki_generator-0.0.2.gemspec
|
32
30
|
}
|
33
|
-
s.add_dependency(
|
31
|
+
s.add_dependency('rails', [">= 0.13.1"])
|
32
|
+
s.add_dependency('redcloth')
|
34
33
|
end
|
35
34
|
|
36
35
|
if $0 == __FILE__
|
data/sqliki_generator.rb
CHANGED
@@ -2,10 +2,6 @@ class SqlikiGenerator < Rails::Generator::NamedBase
|
|
2
2
|
def manifest
|
3
3
|
record do |m|
|
4
4
|
|
5
|
-
#
|
6
|
-
# For v0.0.1, there's no renaming it
|
7
|
-
file_name = 'sqliki'
|
8
|
-
|
9
5
|
# Models.
|
10
6
|
%w{page draft link}.each do |x|
|
11
7
|
m.template "model_#{x}.rb",File.join("app/models", class_path, "#{x}.rb")
|
@@ -13,14 +9,11 @@ class SqlikiGenerator < Rails::Generator::NamedBase
|
|
13
9
|
|
14
10
|
# Views.
|
15
11
|
m.directory File.join("app/views", class_path, file_name)
|
16
|
-
%w{edit
|
12
|
+
%w{edit _form inplace_edit list create rollback show }.each do |x|
|
17
13
|
m.template "view_#{x}.rhtml",File.join("app/views", class_path, file_name, "#{x}.rhtml")
|
18
14
|
end
|
19
15
|
|
20
|
-
|
21
|
-
%w{sqliki}.each do |x|
|
22
|
-
m.template "controller_#{x}_controller.rb",File.join("app/controllers", class_path, "#{x}_controller.rb")
|
23
|
-
end
|
16
|
+
m.template "controller_sqliki_controller.rb",File.join("app/controllers", class_path, "#{file_name}_controller.rb")
|
24
17
|
|
25
18
|
# Libs.
|
26
19
|
%w{sanitize_html}.each do |x|
|
data/templates/README
CHANGED
@@ -84,5 +84,12 @@ CREATE TABLE links (
|
|
84
84
|
|
85
85
|
== Changelog
|
86
86
|
|
87
|
-
0.0.1
|
88
|
-
|
87
|
+
0.0.1
|
88
|
+
First gem release
|
89
|
+
0.0.2
|
90
|
+
Made the name of the controller changeable
|
91
|
+
Removed the system specific path for RedCloth
|
92
|
+
Implemented Orphaned/Wanted/Recently_revised
|
93
|
+
Cleaned up the controller interface (w. the the
|
94
|
+
trick from Tobias Luetke's Postback Generator)
|
95
|
+
|
@@ -1,9 +1,9 @@
|
|
1
|
-
class
|
1
|
+
class <%= class_name %>Controller < ApplicationController
|
2
2
|
model :draft
|
3
3
|
include LoginSystem
|
4
4
|
before_filter :login_required
|
5
5
|
def identify_page
|
6
|
-
@page ||= Page.find_by_title(params[:id])
|
6
|
+
@page ||= Page.find_by_title(params[:id])
|
7
7
|
end
|
8
8
|
def index
|
9
9
|
list
|
@@ -15,62 +15,61 @@ class SqlikiController < ApplicationController
|
|
15
15
|
def html
|
16
16
|
render_text identify_page.current_draft.html
|
17
17
|
end
|
18
|
-
def inplace_edit
|
19
|
-
edit
|
20
|
-
end
|
21
18
|
def rollback
|
22
19
|
identify_page
|
23
20
|
#@page.current_draft = ???
|
24
21
|
render :action => 'show'
|
25
22
|
end
|
26
|
-
def save
|
27
|
-
end
|
28
|
-
def inplace_save
|
29
|
-
save
|
30
|
-
end
|
31
23
|
def wanted
|
24
|
+
list :wanted
|
25
|
+
render :action => 'list'
|
32
26
|
end
|
33
27
|
def orphaned
|
28
|
+
list :orphaned
|
29
|
+
render :action => 'list'
|
34
30
|
end
|
35
31
|
def recently_revised
|
36
|
-
|
37
|
-
|
32
|
+
list :recently_revised
|
33
|
+
render :action => 'list'
|
38
34
|
end
|
39
35
|
def list(condition=:all)
|
40
|
-
@page_pages, @pages = paginate :page, :per_page =>
|
36
|
+
@page_pages, @pages = paginate :page, {:per_page => 20}.merge(case condition
|
37
|
+
when :wanted then {:conditions => 'current_draft_id IS NULL'}
|
38
|
+
when :orphaned then {
|
39
|
+
:join => 'p LEFT JOIN links l ON l.page_id = p.id left join drafts dx on dx.id = l.draft_id left join pages px on px.current_draft_id = dx.id',
|
40
|
+
:conditions => 'page_id IS NULL'
|
41
|
+
}
|
42
|
+
when :recently_revised then {:order_by => 'updated_on DESC'}
|
43
|
+
else {:order_by => 'title'}
|
44
|
+
end)
|
41
45
|
end
|
42
46
|
def show
|
43
|
-
identify_page || redirect_to(:action => '
|
44
|
-
end
|
45
|
-
def new
|
46
|
-
@page = Page.new_page(@params[:id])
|
47
|
+
identify_page || redirect_to(:action => 'create', :id => @params[:id])
|
47
48
|
end
|
48
49
|
def create
|
49
|
-
|
50
|
-
@page.save
|
51
|
-
if @page.update_attributes(params[:page])
|
52
|
-
#@page.current_draft.created_by = @session[:user]
|
53
|
-
#@page.save
|
50
|
+
@page = Page.new_page(@params[:id])
|
51
|
+
if @request.post? and @page.update_attributes(params[:page]) and @page.save
|
54
52
|
flash[:notice] = 'Page was successfully created.'
|
55
|
-
redirect_to :action => '
|
56
|
-
else
|
57
|
-
render :action => 'new'
|
53
|
+
redirect_to :action => 'show', :id => @page.title
|
58
54
|
end
|
59
55
|
end
|
60
|
-
def
|
61
|
-
|
56
|
+
def inplace_edit
|
57
|
+
if not identify_page
|
58
|
+
redirect_to(:action => 'create', :id => @params[:id])
|
59
|
+
elsif @request.post? and @page.update_attributes(params[:page])
|
60
|
+
redirect_to :action => 'html', :id => @page.title
|
61
|
+
end
|
62
62
|
end
|
63
|
-
def
|
64
|
-
identify_page
|
65
|
-
|
63
|
+
def edit
|
64
|
+
if not identify_page
|
65
|
+
redirect_to(:action => 'create', :id => @params[:id])
|
66
|
+
elsif @request.post? and @page.update_attributes(params[:page])
|
66
67
|
flash[:notice] = 'Page was successfully updated.'
|
67
68
|
redirect_to :action => 'show', :id => @page.title
|
68
|
-
else
|
69
|
-
render :action => 'edit'
|
70
69
|
end
|
71
70
|
end
|
72
71
|
def destroy
|
73
|
-
identify_page.destroy
|
72
|
+
identify_page.destroy if @request.post?
|
74
73
|
redirect_to :action => 'list'
|
75
74
|
end
|
76
75
|
end
|
data/templates/model_draft.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'sanitize_html'
|
2
|
-
require '
|
2
|
+
require 'redcloth'
|
3
3
|
|
4
4
|
class Draft < ActiveRecord::Base
|
5
5
|
acts_as_tree :foreign_key => 'based_on_draft_id'
|
@@ -15,27 +15,15 @@ class Draft < ActiveRecord::Base
|
|
15
15
|
end
|
16
16
|
class RopaRojo < RedCloth
|
17
17
|
def hard_break(text)
|
18
|
-
|
18
|
+
@rules.each do |rule_name|
|
19
|
+
method( rule_name ).call( text ) if rule_name.to_s.match /^pre_/
|
20
|
+
end
|
19
21
|
super
|
20
22
|
end
|
21
23
|
def to_html(*rules,&callback)
|
22
24
|
@callback = callback
|
23
25
|
rules = DEFAULT_RULES if rules.empty?
|
24
|
-
text = super(*([:
|
25
|
-
text << %q{
|
26
|
-
<script type="text/javascript" language="JavaScript">
|
27
|
-
<!--
|
28
|
-
function toggle(name) {
|
29
|
-
q=document.getElementById(name);
|
30
|
-
if (q.style.display == 'none')
|
31
|
-
{q.style.display = 'block';}
|
32
|
-
else
|
33
|
-
{q.style.display = 'none';};
|
34
|
-
}
|
35
|
-
//-->
|
36
|
-
</script>
|
37
|
-
} if @need_toggle_function
|
38
|
-
text
|
26
|
+
text = super(*([:pre_wiki_words,:pre_make_divs,:post_add_toggle]+rules))
|
39
27
|
end
|
40
28
|
def htmlesc(str,mode)
|
41
29
|
super
|
@@ -73,7 +61,7 @@ class Draft < ActiveRecord::Base
|
|
73
61
|
/mx
|
74
62
|
DIV_RE = /#{ALT_TEXT}#{DIV_BRACKETS}/m
|
75
63
|
|
76
|
-
def
|
64
|
+
def pre_make_divs( text )
|
77
65
|
## break the text into <div> blocks based on {{{ ... }}}
|
78
66
|
while text.gsub!( DIV_RE ) { |m|
|
79
67
|
has_link,pre,atts,link_text,title,div_block = $~.captures
|
@@ -88,6 +76,21 @@ class Draft < ActiveRecord::Base
|
|
88
76
|
}; end
|
89
77
|
text
|
90
78
|
end
|
79
|
+
def post_add_toggle(text)
|
80
|
+
text << %q{
|
81
|
+
<script type="text/javascript" language="JavaScript">
|
82
|
+
<!--
|
83
|
+
function toggle(name) {
|
84
|
+
q=document.getElementById(name);
|
85
|
+
if (q.style.display == 'none')
|
86
|
+
{q.style.display = 'block';}
|
87
|
+
else
|
88
|
+
{q.style.display = 'none';};
|
89
|
+
}
|
90
|
+
//-->
|
91
|
+
</script>
|
92
|
+
} if @need_toggle_function
|
93
|
+
end
|
91
94
|
NOT_WIKI_WORD = /\\(([A-Z]+[a-z0-9]+){2,})/
|
92
95
|
WIKI_WORD = /#{ALT_TEXT}(([A-Z]+[a-z1-9]+){2,})/
|
93
96
|
WIKI_PHRASE = /#{ALT_TEXT}\[\[(.*?)\]\]/m
|
@@ -95,33 +98,26 @@ class Draft < ActiveRecord::Base
|
|
95
98
|
ww.gsub(/([a-z0-9])([A-Z])/,'\1 \2');
|
96
99
|
end
|
97
100
|
def clean_wiki_word(ww)
|
98
|
-
ww.gsub(/
|
101
|
+
ww.gsub(/[^A-Za-z0-9$-_.+!*'(),]/,'')
|
99
102
|
end
|
100
103
|
include ActionView::Helpers::TagHelper
|
101
104
|
include ActionView::Helpers::UrlHelper
|
102
|
-
#def wiki_link(ww)
|
103
|
-
# #link_to ww, {:controller => 'sqliki', :action => 'show', :id => clean_wiki_word(ww)}
|
104
|
-
# link_to ww, "/sqliki/show/#{clean_wiki_word(ww)}"
|
105
|
-
# end
|
106
105
|
def wiki_link(link_text,ww)
|
107
|
-
|
108
|
-
|
109
|
-
(@callback && @callback.call(:wiki_link,link_text,ww))
|
110
|
-
(link_to link_text, "/sqliki/show/#{clean_wiki_word(ww)}")
|
106
|
+
(@callback && @callback.call(:wiki_link,link_text,ww)) ||
|
107
|
+
(link_to link_text, "/<%= file_name %>/show/#{clean_wiki_word(ww)}")
|
111
108
|
end
|
112
|
-
def
|
109
|
+
def pre_wiki_words(text)
|
113
110
|
text.gsub!(NOT_WIKI_WORD) { |m| shelve $1 }
|
114
111
|
[WIKI_PHRASE,WIKI_WORD].each {|pattern|
|
115
112
|
text.gsub!(pattern) { |m|
|
116
113
|
has_link,pre,atts,link_text,title,ww = $~.captures
|
117
114
|
ww = split_wiki_word(ww) if pattern == WIKI_WORD
|
118
|
-
(pre||'') + wiki_link("<span #{
|
115
|
+
(pre||'') + shelve(wiki_link("<span #{pba(atts)}>#{link_text||ww}</span>",ww))
|
119
116
|
}
|
120
117
|
}
|
121
118
|
text
|
122
119
|
end
|
123
120
|
end
|
124
|
-
#include ActionView::Helpers::TextHelper
|
125
121
|
def textilize(body) #html
|
126
122
|
if body.blank?
|
127
123
|
""
|
File without changes
|
data/templates/view_edit.rhtml
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
<h1><%%= @page.title %></h1>
|
2
2
|
|
3
|
-
<%%= start_form_tag :action => '
|
3
|
+
<%%= start_form_tag :action => 'edit', :id => @page.title %>
|
4
4
|
<%%= render_partial 'form' %>
|
5
|
-
<%%= submit_tag '
|
5
|
+
<%%= submit_tag 'Save changes' %>
|
6
|
+
<%%= link_to 'Cancle changes', :action => 'show', :id => @page.title %>
|
6
7
|
<%%= end_form_tag %>
|
7
8
|
|
8
|
-
|
9
|
-
<%%= link_to 'List', :action => 'list' %>
|
9
|
+
|
data/templates/view_list.rhtml
CHANGED
@@ -6,14 +6,11 @@
|
|
6
6
|
|
7
7
|
<%% for page in @pages %>
|
8
8
|
<tr>
|
9
|
-
<td><%%= page.title %></td>
|
9
|
+
<td><%%= link_to page.title, :action => 'show', :id => page.title %></td>
|
10
10
|
<td><%%= page.author.login %></td>
|
11
11
|
<td><%%= page.created_on %></td>
|
12
12
|
<td><%%= page.current_draft.author.login %></td>
|
13
13
|
<td><%%= page.current_draft.created_on %></td>
|
14
|
-
<td><%%= link_to 'Show', :action => 'show', :id => page.title %></td>
|
15
|
-
<td><%%= link_to 'Edit', :action => 'edit', :id => page.title %></td>
|
16
|
-
<td><%%= link_to 'Destroy', {:action => 'destroy', :id => page.title}, :confirm => 'Are you sure?' %></td>
|
17
14
|
</tr>
|
18
15
|
<%% end %>
|
19
16
|
</table>
|
@@ -23,4 +20,4 @@
|
|
23
20
|
|
24
21
|
<br />
|
25
22
|
|
26
|
-
<%%= link_to 'New page', :action => '
|
23
|
+
<%%= link_to 'New page', :action => 'create' %>
|
metadata
CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: sqliki_generator
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
6
|
+
version: 0.0.2
|
7
7
|
date: 2005-08-25
|
8
8
|
summary: "[Rails] SQL-based wiki generator."
|
9
9
|
require_paths:
|
@@ -32,19 +32,17 @@ files:
|
|
32
32
|
- templates/README
|
33
33
|
- templates/model_draft.rb
|
34
34
|
- templates/view_edit.rhtml
|
35
|
-
- templates/view_find.rhtml
|
36
35
|
- templates/view__form.rhtml
|
37
36
|
- templates/view_inplace_edit.rhtml
|
38
|
-
- templates/view_inplace_save.rhtml
|
39
37
|
- templates/view_list.rhtml
|
40
|
-
- templates/
|
38
|
+
- templates/view_create.rhtml
|
41
39
|
- templates/view_rollback.rhtml
|
42
40
|
- templates/view_show.rhtml
|
43
41
|
- templates/model_link.rb
|
44
42
|
- templates/model_page.rb
|
45
43
|
- templates/controller_sqliki_controller.rb
|
46
44
|
- sqliki_generator.rb
|
47
|
-
- sqliki_generator-0.0.
|
45
|
+
- sqliki_generator-0.0.2.gemspec
|
48
46
|
test_files: []
|
49
47
|
rdoc_options: []
|
50
48
|
extra_rdoc_files: []
|
@@ -61,4 +59,14 @@ dependencies:
|
|
61
59
|
- ">="
|
62
60
|
- !ruby/object:Gem::Version
|
63
61
|
version: 0.13.1
|
62
|
+
version:
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: redcloth
|
65
|
+
version_requirement:
|
66
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
67
|
+
requirements:
|
68
|
+
-
|
69
|
+
- ">"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 0.0.0
|
64
72
|
version:
|
data/templates/view_find.rhtml
DELETED