compages 0.4.0
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/.project +18 -0
- data/README +180 -0
- data/Rakefile +10 -0
- data/app/controllers/application.rb +4 -0
- data/app/controllers/contents_controller.rb +116 -0
- data/app/controllers/pages_controller.rb +59 -0
- data/app/controllers/render_controller.rb +24 -0
- data/app/helpers/application_helper.rb +6 -0
- data/app/helpers/contents_helper.rb +5 -0
- data/app/helpers/pages_helper.rb +5 -0
- data/app/helpers/render_helper.rb +2 -0
- data/app/models/content.rb +26 -0
- data/app/models/meta_data.rb +3 -0
- data/app/models/page.rb +106 -0
- data/app/models/page_element.rb +9 -0
- data/app/views/contents/_content_preview.rhtml +1 -0
- data/app/views/contents/_contents_list.rhtml +3 -0
- data/app/views/contents/_show_library.rhtml +60 -0
- data/app/views/contents/_write_now.rhtml +42 -0
- data/app/views/layouts/pages.rhtml +24 -0
- data/app/views/layouts/render.rhtml +11 -0
- data/app/views/pages/_change_theme.rhtml +0 -0
- data/app/views/pages/_edit_menu.rhtml +62 -0
- data/app/views/pages/_page_listed.rhtml +13 -0
- data/app/views/pages/_select_theme.rhtml +4 -0
- data/app/views/pages/edit.rhtml +35 -0
- data/app/views/pages/index.rhtml +45 -0
- data/app/views/pages/list.rhtml +41 -0
- data/app/views/pages/list_a.rhtml +40 -0
- data/app/views/pages/welcome.rhtml +27 -0
- data/app/views/render/_blank.rhtml +3 -0
- data/app/views/render/show.rhtml +1 -0
- data/bin/compages +14 -0
- data/config/boot.rb +44 -0
- data/config/database.yml.home +35 -0
- data/config/environment.rb +53 -0
- data/config/environments/development.rb +21 -0
- data/config/environments/production.rb +18 -0
- data/config/environments/test.rb +19 -0
- data/config/routes.rb +32 -0
- data/db/Copia di schema.rb +48 -0
- data/db/migrate/001_create_pages.rb +12 -0
- data/db/migrate/002_create_contents.rb +12 -0
- data/db/migrate/003_create_meta_datas.rb +14 -0
- data/db/migrate/004_create_page_elements.rb +17 -0
- data/db/migrate/005_add_urlnames.rb +15 -0
- data/db/migrate/006_add_sessions.rb +15 -0
- data/db/schema.mysql.sql +65 -0
- data/db/schema.postgresql.sql +65 -0
- data/db/schema.rb +49 -0
- data/db/schema.sqlite.sql +65 -0
- data/db/schema.sqlserver.sql +71 -0
- data/db/schema_version +1 -0
- data/doc/ER-model/v1.dia +0 -0
- data/doc/ER-model/v2.dia +0 -0
- data/doc/ER-model/v3.dia +0 -0
- data/doc/README_FOR_APP +2 -0
- data/doc/esempi/doc-vir/ecds.htm +2362 -0
- data/doc/esempi/doc-vir/ecds_files/search.gif +0 -0
- data/doc/esempi/doc-vir/ecds_files/upld.gif +0 -0
- data/doc/esempi/doc-vir/ecds_files/upld.jpg +0 -0
- data/installer/apache13.conf.example.template +33 -0
- data/installer/apache20.conf.example.template +40 -0
- data/installer/lighttpd.conf.example.template +6 -0
- data/installer/rails_installer_defaults.yml +5 -0
- data/lib/redcloth.rb +1130 -0
- data/lib/render_engine.rb +94 -0
- data/lib/tasks/release.rake +46 -0
- data/public/.htaccess +41 -0
- data/public/404.html +8 -0
- data/public/500.html +8 -0
- data/public/_index.html +277 -0
- data/public/favicon.ico +0 -0
- data/public/images/body_bg.gif +0 -0
- data/public/images/body_bg_short.gif +0 -0
- data/public/images/ie_shadow.png +0 -0
- data/public/images/journal_reflex.gif +0 -0
- data/public/images/journal_shadow.gif +0 -0
- data/public/images/logo_journal_small.bmp +0 -0
- data/public/images/logo_journal_small.png +0 -0
- data/public/images/page_edit_shadow.png +0 -0
- data/public/images/restore_bar.png +0 -0
- data/public/images/spinner.gif +0 -0
- data/public/javascripts/application.js +23 -0
- data/public/javascripts/controls.js +815 -0
- data/public/javascripts/dragdrop.js +913 -0
- data/public/javascripts/effects.js +958 -0
- data/public/javascripts/lowpro.js +307 -0
- data/public/javascripts/prototype.js +2006 -0
- data/public/robots.txt +1 -0
- data/public/stylesheets/compages.css +196 -0
- data/public/stylesheets/editing.css +180 -0
- data/public/stylesheets/editing_ie_filth.css +36 -0
- data/public/themes/Doc_basic/_script.js +342 -0
- data/public/themes/Doc_basic/images/Thumbs.db +0 -0
- data/public/themes/Doc_basic/images/search.gif +0 -0
- data/public/themes/Doc_basic/images/upld.gif +0 -0
- data/public/themes/Doc_basic/images/upld.jpg +0 -0
- data/public/themes/Doc_basic/index.html +114 -0
- data/public/themes/Doc_basic/style.css +1743 -0
- data/public/themes/color7boxes/default2.css +42 -0
- data/public/themes/color7boxes/index.html +40 -0
- data/public/themes/prova/index.html +12 -0
- data/public/zDoc/images/search.gif +0 -0
- data/public/zDoc/images/upld.gif +0 -0
- data/public/zDoc/images/upld.jpg +0 -0
- data/public/zDoc/index.html +176 -0
- data/public/zDoc/script.js +342 -0
- data/public/zDoc/style.css +1741 -0
- data/script/about +3 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/test/fixtures/contents.yml +5 -0
- data/test/fixtures/meta_datas.yml +5 -0
- data/test/fixtures/page_elements.yml +5 -0
- data/test/fixtures/pages.yml +5 -0
- data/test/functional/contents_controller_test.rb +18 -0
- data/test/functional/pages_controller_test.rb +18 -0
- data/test/functional/render_controller_test.rb +18 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/content_test.rb +10 -0
- data/test/unit/meta_data_test.rb +10 -0
- data/test/unit/page_element_test.rb +10 -0
- data/test/unit/page_test.rb +10 -0
- data/tmp/sessions/ruby_sess.0ced4c30e36477ab +0 -0
- data/tmp/sessions/ruby_sess.20fbe26671422e70 +0 -0
- data/tmp/sessions/ruby_sess.2c72521f3a7e2ba9 +0 -0
- data/tmp/sessions/ruby_sess.4107a69d982a2eb7 +0 -0
- data/tmp/sessions/ruby_sess.573ded9c7fdd9035 +0 -0
- data/tmp/sessions/ruby_sess.5a9767815bb96258 +0 -0
- data/tmp/sessions/ruby_sess.85d723b794005388 +0 -0
- data/tmp/sessions/ruby_sess.875b3b3e3529afdb +0 -0
- data/tmp/sessions/ruby_sess.936766f3a397c88b +0 -0
- data/tmp/sessions/ruby_sess.984e2e4c9a2e7891 +0 -0
- data/tmp/sessions/ruby_sess.a1faebd7448bc45d +0 -0
- data/tmp/sessions/ruby_sess.a415768c7635bc15 +0 -0
- data/tmp/sessions/ruby_sess.b2dadcbe6c1b0add +0 -0
- data/tmp/sessions/ruby_sess.ca9100beb103a428 +0 -0
- data/tmp/sessions/ruby_sess.d649c800a046efde +0 -0
- data/tmp/sessions/ruby_sess.db73bbfafd5a537c +0 -0
- data/tmp/sessions/ruby_sess.e32487b847524df1 +0 -0
- data/tmp/sessions/ruby_sess.f4e45d67828cc437 +0 -0
- data/tmp/sessions/ruby_sess.f5a3f064f2f7a26f +0 -0
- data/tmp/sessions/ruby_sess.ff0c47b35f238cda +0 -0
- data/vendor/plugins/acts_as_urlnameable.tar.gz +0 -0
- data/vendor/plugins/acts_as_urlnameable/LICENSE +19 -0
- data/vendor/plugins/acts_as_urlnameable/README +193 -0
- data/vendor/plugins/acts_as_urlnameable/Rakefile +25 -0
- data/vendor/plugins/acts_as_urlnameable/TODO +5 -0
- data/vendor/plugins/acts_as_urlnameable/db/00x_add_urlnames_table.rb +15 -0
- data/vendor/plugins/acts_as_urlnameable/db/urlnames_table.sql +7 -0
- data/vendor/plugins/acts_as_urlnameable/doc/classes/ActiveRecord/Acts/Urlnameable/ClassMethods.html +167 -0
- data/vendor/plugins/acts_as_urlnameable/doc/classes/ActiveRecord/Acts/Urlnameable/InstanceMethods.html +213 -0
- data/vendor/plugins/acts_as_urlnameable/doc/classes/ActiveRecord/Acts/Urlnameable/SingletonMethods.html +189 -0
- data/vendor/plugins/acts_as_urlnameable/doc/created.rid +1 -0
- data/vendor/plugins/acts_as_urlnameable/doc/files/LICENSE.html +129 -0
- data/vendor/plugins/acts_as_urlnameable/doc/files/README.html +333 -0
- data/vendor/plugins/acts_as_urlnameable/doc/files/TODO.html +121 -0
- data/vendor/plugins/acts_as_urlnameable/doc/files/lib/acts_as_urlnameable_rb.html +101 -0
- data/vendor/plugins/acts_as_urlnameable/doc/fr_class_index.html +29 -0
- data/vendor/plugins/acts_as_urlnameable/doc/fr_file_index.html +30 -0
- data/vendor/plugins/acts_as_urlnameable/doc/fr_method_index.html +34 -0
- data/vendor/plugins/acts_as_urlnameable/doc/index.html +24 -0
- data/vendor/plugins/acts_as_urlnameable/doc/rdoc-style.css +208 -0
- data/vendor/plugins/acts_as_urlnameable/init.rb +3 -0
- data/vendor/plugins/acts_as_urlnameable/lib/acts_as_urlnameable.rb +159 -0
- data/vendor/plugins/acts_as_urlnameable/lib/urlname.rb +3 -0
- data/vendor/plugins/acts_as_urlnameable/test/acts_as_urlnameable_test.rb +233 -0
- data/vendor/plugins/acts_as_urlnameable/test/connection.rb +8 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/article.rb +13 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/articles.yml +62 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/page.rb +14 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/pages.yml +35 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/people.yml +9 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/person.rb +26 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/schema.rb +24 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/section.rb +5 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/sections.yml +9 -0
- data/vendor/plugins/acts_as_urlnameable/test/fixtures/urlnames.yml +153 -0
- data/vendor/plugins/acts_as_urlnameable/test/test_helper.rb +42 -0
- data/vendor/plugins/gems/README +30 -0
- data/vendor/plugins/gems/init.rb +9 -0
- data/vendor/plugins/gems/tasks/gems_tasks.rake +32 -0
- data/vendor/plugins/unobtrusive_javascript/CHANGELOG +72 -0
- data/vendor/plugins/unobtrusive_javascript/README +73 -0
- data/vendor/plugins/unobtrusive_javascript/Rakefile +33 -0
- data/vendor/plugins/unobtrusive_javascript/about.yml +6 -0
- data/vendor/plugins/unobtrusive_javascript/assets/javascripts/lowpro.js +307 -0
- data/vendor/plugins/unobtrusive_javascript/init.rb +21 -0
- data/vendor/plugins/unobtrusive_javascript/install.rb +1 -0
- data/vendor/plugins/unobtrusive_javascript/lib/actionview_helpers_patches.rb +17 -0
- data/vendor/plugins/unobtrusive_javascript/lib/asset_tag_helper_patches.rb +33 -0
- data/vendor/plugins/unobtrusive_javascript/lib/behaviour_caching.rb +70 -0
- data/vendor/plugins/unobtrusive_javascript/lib/controllers/unobtrusive_javascript_controller.rb +52 -0
- data/vendor/plugins/unobtrusive_javascript/lib/prototype_helper_patches.rb +72 -0
- data/vendor/plugins/unobtrusive_javascript/lib/scriptaculous_helper_patches.rb +62 -0
- data/vendor/plugins/unobtrusive_javascript/lib/tag_helper_patches.rb +37 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs.rb +32 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/behaviour_helper.rb +62 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/behaviour_script.rb +54 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/behaviour_script_converter.rb +23 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/controller_methods.rb +55 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/helpers.rb +152 -0
- data/vendor/plugins/unobtrusive_javascript/lib/ujs/javascript_proxies.rb +57 -0
- data/vendor/plugins/unobtrusive_javascript/tasks/unobtrusive_javascript_tasks.rake +15 -0
- data/vendor/plugins/unobtrusive_javascript/test/asset_tag_helper_patches_test.rb +32 -0
- data/vendor/plugins/unobtrusive_javascript/test/behaviour_helper_test.rb +180 -0
- data/vendor/plugins/unobtrusive_javascript/test/behaviour_script_converter_test.rb +72 -0
- data/vendor/plugins/unobtrusive_javascript/test/behaviour_script_test.rb +98 -0
- data/vendor/plugins/unobtrusive_javascript/test/config/environment.rb +8 -0
- data/vendor/plugins/unobtrusive_javascript/test/config/routes.rb +4 -0
- data/vendor/plugins/unobtrusive_javascript/test/config/schema.rb +3 -0
- data/vendor/plugins/unobtrusive_javascript/test/controller_methods_test.rb +48 -0
- data/vendor/plugins/unobtrusive_javascript/test/helpers_test.rb +186 -0
- data/vendor/plugins/unobtrusive_javascript/test/javascript_proxies_test.rb +3 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/boot.rb +26 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/gem/action_controller.rb +11 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/gem/action_mailer.rb +4 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/gem/active_record.rb +27 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/gem/rails.rb +31 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/ptk.rb +148 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/ptk/suite/difference.rb +23 -0
- data/vendor/plugins/unobtrusive_javascript/test/lib/stubs/controller_stub.rb +10 -0
- data/vendor/plugins/unobtrusive_javascript/test/ptk_helper.rb +29 -0
- data/vendor/plugins/unobtrusive_javascript/test/tag_helper_patches_test.rb +59 -0
- data/vendor/plugins/unobtrusive_javascript/test/test_helper.rb +25 -0
- data/vendor/plugins/unobtrusive_javascript/test/unobtrusive_javascript_controller_test.rb +95 -0
- data/vendor/plugins/unobtrusive_javascript/uninstall.rb +1 -0
- data/vendor/redcloth/bin/redcloth +3 -0
- data/vendor/redcloth/doc/CHANGELOG +160 -0
- data/vendor/redcloth/doc/COPYING +25 -0
- data/vendor/redcloth/doc/README +106 -0
- data/vendor/redcloth/doc/REFERENCE +216 -0
- data/vendor/redcloth/doc/make.rb +359 -0
- data/vendor/redcloth/lib/redcloth.rb +1130 -0
- data/vendor/redcloth/run-tests.rb +28 -0
- data/vendor/redcloth/setup.rb +1376 -0
- data/vendor/redcloth/tests/code.yml +105 -0
- data/vendor/redcloth/tests/hard_breaks.yml +26 -0
- data/vendor/redcloth/tests/images.yml +171 -0
- data/vendor/redcloth/tests/instiki.yml +39 -0
- data/vendor/redcloth/tests/links.yml +155 -0
- data/vendor/redcloth/tests/lists.yml +77 -0
- data/vendor/redcloth/tests/markdown.yml +218 -0
- data/vendor/redcloth/tests/poignant.yml +64 -0
- data/vendor/redcloth/tests/table.yml +198 -0
- data/vendor/redcloth/tests/textism.yml +406 -0
- metadata +432 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Fri Mar 10 16:08:29 EST 2006
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
5
|
+
|
|
6
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
7
|
+
<head>
|
|
8
|
+
<title>File: LICENSE</title>
|
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
|
+
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
|
11
|
+
<link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
|
|
12
|
+
<script type="text/javascript">
|
|
13
|
+
// <![CDATA[
|
|
14
|
+
|
|
15
|
+
function popupCode( url ) {
|
|
16
|
+
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function toggleCode( id ) {
|
|
20
|
+
if ( document.getElementById )
|
|
21
|
+
elem = document.getElementById( id );
|
|
22
|
+
else if ( document.all )
|
|
23
|
+
elem = eval( "document.all." + id );
|
|
24
|
+
else
|
|
25
|
+
return false;
|
|
26
|
+
|
|
27
|
+
elemStyle = elem.style;
|
|
28
|
+
|
|
29
|
+
if ( elemStyle.display != "block" ) {
|
|
30
|
+
elemStyle.display = "block"
|
|
31
|
+
} else {
|
|
32
|
+
elemStyle.display = "none"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Make codeblocks hidden by default
|
|
39
|
+
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
|
40
|
+
|
|
41
|
+
// ]]>
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
</head>
|
|
45
|
+
<body>
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
<div id="fileHeader">
|
|
50
|
+
<h1>LICENSE</h1>
|
|
51
|
+
<table class="header-table">
|
|
52
|
+
<tr class="top-aligned-row">
|
|
53
|
+
<td><strong>Path:</strong></td>
|
|
54
|
+
<td>LICENSE
|
|
55
|
+
</td>
|
|
56
|
+
</tr>
|
|
57
|
+
<tr class="top-aligned-row">
|
|
58
|
+
<td><strong>Last Update:</strong></td>
|
|
59
|
+
<td>Fri Mar 10 14:52:56 EST 2006</td>
|
|
60
|
+
</tr>
|
|
61
|
+
</table>
|
|
62
|
+
</div>
|
|
63
|
+
<!-- banner header -->
|
|
64
|
+
|
|
65
|
+
<div id="bodyContent">
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
<div id="contextContent">
|
|
70
|
+
|
|
71
|
+
<div id="description">
|
|
72
|
+
<p>
|
|
73
|
+
Copyright © 2006 Gabriel Gironda
|
|
74
|
+
</p>
|
|
75
|
+
<p>
|
|
76
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
|
77
|
+
copy of this software and associated documentation files (the
|
|
78
|
+
"Software"), to deal in the Software without restriction,
|
|
79
|
+
including without limitation the rights to use, copy, modify, merge,
|
|
80
|
+
publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
81
|
+
permit persons to whom the Software is furnished to do so, subject to the
|
|
82
|
+
following conditions:
|
|
83
|
+
</p>
|
|
84
|
+
<p>
|
|
85
|
+
The above copyright notice and this permission notice shall be included in
|
|
86
|
+
all copies or substantial portions of the Software.
|
|
87
|
+
</p>
|
|
88
|
+
<p>
|
|
89
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
90
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
91
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
92
|
+
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
93
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
94
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
95
|
+
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
96
|
+
</p>
|
|
97
|
+
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
<!-- if includes -->
|
|
108
|
+
|
|
109
|
+
<div id="section">
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
<!-- if method_list -->
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
<div id="validator-badges">
|
|
125
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
</body>
|
|
129
|
+
</html>
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
5
|
+
|
|
6
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
7
|
+
<head>
|
|
8
|
+
<title>File: README</title>
|
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
|
+
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
|
11
|
+
<link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
|
|
12
|
+
<script type="text/javascript">
|
|
13
|
+
// <![CDATA[
|
|
14
|
+
|
|
15
|
+
function popupCode( url ) {
|
|
16
|
+
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function toggleCode( id ) {
|
|
20
|
+
if ( document.getElementById )
|
|
21
|
+
elem = document.getElementById( id );
|
|
22
|
+
else if ( document.all )
|
|
23
|
+
elem = eval( "document.all." + id );
|
|
24
|
+
else
|
|
25
|
+
return false;
|
|
26
|
+
|
|
27
|
+
elemStyle = elem.style;
|
|
28
|
+
|
|
29
|
+
if ( elemStyle.display != "block" ) {
|
|
30
|
+
elemStyle.display = "block"
|
|
31
|
+
} else {
|
|
32
|
+
elemStyle.display = "none"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Make codeblocks hidden by default
|
|
39
|
+
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
|
40
|
+
|
|
41
|
+
// ]]>
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
</head>
|
|
45
|
+
<body>
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
<div id="fileHeader">
|
|
50
|
+
<h1>README</h1>
|
|
51
|
+
<table class="header-table">
|
|
52
|
+
<tr class="top-aligned-row">
|
|
53
|
+
<td><strong>Path:</strong></td>
|
|
54
|
+
<td>README
|
|
55
|
+
</td>
|
|
56
|
+
</tr>
|
|
57
|
+
<tr class="top-aligned-row">
|
|
58
|
+
<td><strong>Last Update:</strong></td>
|
|
59
|
+
<td>Fri Mar 10 16:08:00 EST 2006</td>
|
|
60
|
+
</tr>
|
|
61
|
+
</table>
|
|
62
|
+
</div>
|
|
63
|
+
<!-- banner header -->
|
|
64
|
+
|
|
65
|
+
<div id="bodyContent">
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
<div id="contextContent">
|
|
70
|
+
|
|
71
|
+
<div id="description">
|
|
72
|
+
<h2>About</h2>
|
|
73
|
+
<p>
|
|
74
|
+
This plugin provides an easy way to give your ActiveRecord models clean
|
|
75
|
+
urlnames, for use anywhere you don’t want to use a plain old integer
|
|
76
|
+
id.
|
|
77
|
+
</p>
|
|
78
|
+
<p>
|
|
79
|
+
To use it, first either copy over the migration in
|
|
80
|
+
<tt>db/00x_add_urlnames_table.rb</tt> and migrate it to it, or import the
|
|
81
|
+
SQL in <tt>db/urlnames_table.sql</tt>.
|
|
82
|
+
</p>
|
|
83
|
+
<p>
|
|
84
|
+
This plugin also requires at least Rails 1.1 (currently edge. See <a
|
|
85
|
+
href="http://wiki.rubyonrails.com/rails/pages/EdgeRails">wiki.rubyonrails.com/rails/pages/EdgeRails</a>)
|
|
86
|
+
For updates see <a
|
|
87
|
+
href="http://gabriel.gironda.org">gabriel.gironda.org</a>, and for
|
|
88
|
+
licensing see LICENSE.
|
|
89
|
+
</p>
|
|
90
|
+
<hr size="2"></hr><h2>Simple usage:</h2>
|
|
91
|
+
<h3>Setting the url name</h3>
|
|
92
|
+
<p>
|
|
93
|
+
The usage that will work for 80% of cases is this:
|
|
94
|
+
</p>
|
|
95
|
+
<pre>
|
|
96
|
+
class Article < ActiveRecord::Base
|
|
97
|
+
acts_as_urlnameable :title
|
|
98
|
+
end
|
|
99
|
+
</pre>
|
|
100
|
+
<p>
|
|
101
|
+
This will format the value of the <tt>title</tt> attribute of the record to
|
|
102
|
+
one suitable for use in a URL and save it. Further changes to
|
|
103
|
+
<tt>title</tt> will not overwrite the url name. The value can then be
|
|
104
|
+
accessed with +object.urlname+. If the url name already exists, an error
|
|
105
|
+
will be added to the <tt>urlname</tt> attribute.
|
|
106
|
+
</p>
|
|
107
|
+
<p>
|
|
108
|
+
To allow overwrites of the url name, call <tt>acts_as_urlname</tt> with the
|
|
109
|
+
following option:
|
|
110
|
+
</p>
|
|
111
|
+
<pre>
|
|
112
|
+
class Article < ActiveRecord::Base
|
|
113
|
+
acts_as_urlnameable :title, :overwrite => true
|
|
114
|
+
end
|
|
115
|
+
</pre>
|
|
116
|
+
<h3>Validation</h3>
|
|
117
|
+
<p>
|
|
118
|
+
The url name will now be overwritten if the value of <tt>title</tt>
|
|
119
|
+
changes. To change the default validation message you can use the
|
|
120
|
+
<tt>:message</tt> option:
|
|
121
|
+
</p>
|
|
122
|
+
<pre>
|
|
123
|
+
class Article < ActiveRecord::Base
|
|
124
|
+
acts_as_urlnameable :title, :overwrite => true, :message => 'is unavailable.'
|
|
125
|
+
end
|
|
126
|
+
</pre>
|
|
127
|
+
<h3>Finding records</h3>
|
|
128
|
+
<p>
|
|
129
|
+
Records can be located via the <tt>find_by_urlname</tt> method, like so:
|
|
130
|
+
</p>
|
|
131
|
+
<pre>
|
|
132
|
+
Article.find_by_urlname('some_urlname')
|
|
133
|
+
</pre>
|
|
134
|
+
<hr size="2"></hr><h2>Advanced usage:</h2>
|
|
135
|
+
<p>
|
|
136
|
+
This section is for those of us who like to mess with ActiveRecord a little
|
|
137
|
+
more than usual.
|
|
138
|
+
</p>
|
|
139
|
+
<h3>Setting the url name</h3>
|
|
140
|
+
<p>
|
|
141
|
+
You can set objects to be known by any past url names they may have had,
|
|
142
|
+
even if the current one is different. The usage in this case would be:
|
|
143
|
+
</p>
|
|
144
|
+
<pre>
|
|
145
|
+
class Article < ActiveRecord::Base
|
|
146
|
+
acts_as_urlnameable :title, :mode => :multiple
|
|
147
|
+
end
|
|
148
|
+
</pre>
|
|
149
|
+
<p>
|
|
150
|
+
The instance method <tt>past_urlnames</tt> will then return all url names
|
|
151
|
+
other than the current one, while <tt>all_urlnames</tt> will return all url
|
|
152
|
+
names the object has ever been known by, including the current url name.
|
|
153
|
+
The <tt>:overwrite</tt> option has no effect on objects with multiple
|
|
154
|
+
urlnames for obvious reasons.
|
|
155
|
+
</p>
|
|
156
|
+
<p>
|
|
157
|
+
You can also define your own <tt>urlnameify</tt> method if you would prefer
|
|
158
|
+
not to use the default url name formatting.
|
|
159
|
+
</p>
|
|
160
|
+
<pre>
|
|
161
|
+
class Article < ActiveRecord::Base
|
|
162
|
+
acts_as_urlnameable :title, :mode => :multiple
|
|
163
|
+
|
|
164
|
+
protected
|
|
165
|
+
def urlnameify(text)
|
|
166
|
+
text.to_s.downcase + '_permalink'
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
</pre>
|
|
170
|
+
<h3>Validation</h3>
|
|
171
|
+
<p>
|
|
172
|
+
Acts as Urlnameable gives you five options for validation:
|
|
173
|
+
</p>
|
|
174
|
+
<pre>
|
|
175
|
+
* Skip any kind of validation (usually undesirable)
|
|
176
|
+
* Validating against the base class (the default)
|
|
177
|
+
* Validating against the child class (for use with single table inheritance)
|
|
178
|
+
* Validating against the parent object (for associations)
|
|
179
|
+
* Define your own validate_urlname method
|
|
180
|
+
</pre>
|
|
181
|
+
<h4>Skipping validation</h4>
|
|
182
|
+
<p>
|
|
183
|
+
To skip validation, use the plugin like so:
|
|
184
|
+
</p>
|
|
185
|
+
<pre>
|
|
186
|
+
class Article < ActiveRecord::Base
|
|
187
|
+
acts_as_urlnameable :title, :mode => :multiple, :validate => false
|
|
188
|
+
end
|
|
189
|
+
</pre>
|
|
190
|
+
<h4>Validating against the base class or child class</h4>
|
|
191
|
+
<p>
|
|
192
|
+
If you’re using single table inheritance in ActiveRecord, and your
|
|
193
|
+
models look like this for example:
|
|
194
|
+
</p>
|
|
195
|
+
<pre>
|
|
196
|
+
class Article < ActiveRecord::Base
|
|
197
|
+
acts_as_urlnameable :title
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
class SpecialArticle < Article
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
class Draft < Article
|
|
204
|
+
end
|
|
205
|
+
</pre>
|
|
206
|
+
<p>
|
|
207
|
+
Then by default, a Draft can not have the same url name as a
|
|
208
|
+
SpecialArticle. If you’d like to change this behaviour, then use the
|
|
209
|
+
<tt>:sti_class</tt> option with <tt>:validate</tt>
|
|
210
|
+
</p>
|
|
211
|
+
<pre>
|
|
212
|
+
class Article < ActiveRecord::Base
|
|
213
|
+
acts_as_urlnameable :title, :validate => :sti_class
|
|
214
|
+
end
|
|
215
|
+
</pre>
|
|
216
|
+
<p>
|
|
217
|
+
Now Draft and SpecialArticle can have the same url name set.
|
|
218
|
+
<tt>SpecialArticle.find_by_urlname</tt> will find only the SpecialArticle
|
|
219
|
+
with the matching url name, and <tt>Draft.find_by_urlname</tt> will find
|
|
220
|
+
only the Draft with the url name given.
|
|
221
|
+
</p>
|
|
222
|
+
<p>
|
|
223
|
+
<tt>Article.find_by_urlname</tt> will find the first Article with the given
|
|
224
|
+
url name, whereas <tt>Article.find_all_by_urlname</tt> will find both the
|
|
225
|
+
Draft and SpecialArticle objects.
|
|
226
|
+
</p>
|
|
227
|
+
<h4>Validating against the parent object</h4>
|
|
228
|
+
<p>
|
|
229
|
+
Here’s an example model setup:
|
|
230
|
+
</p>
|
|
231
|
+
<pre>
|
|
232
|
+
class Person < ActiveRecord::Base
|
|
233
|
+
has_many :articles
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
class Article < ActiveRecord::Base
|
|
237
|
+
acts_as_urlnameable :title
|
|
238
|
+
belongs_to :person
|
|
239
|
+
end
|
|
240
|
+
</pre>
|
|
241
|
+
<p>
|
|
242
|
+
If you would like to validate the url name for an article against the
|
|
243
|
+
parent object, pass the name of the <tt>belongs_to</tt> association as the
|
|
244
|
+
option for <tt>:validate</tt>. Example:
|
|
245
|
+
</p>
|
|
246
|
+
<pre>
|
|
247
|
+
class Article < ActiveRecord::Base
|
|
248
|
+
acts_as_urlnameable :title, :validate => :person
|
|
249
|
+
belongs_to :person
|
|
250
|
+
end
|
|
251
|
+
</pre>
|
|
252
|
+
<p>
|
|
253
|
+
Now for the validation to work properly, you must instantiate the new
|
|
254
|
+
article through the association. This is best explained like this:
|
|
255
|
+
</p>
|
|
256
|
+
<pre>
|
|
257
|
+
# Find two different people
|
|
258
|
+
bob = Person.find_by_first_name('bob')
|
|
259
|
+
joe = Person.find_by_first_name('joe')
|
|
260
|
+
|
|
261
|
+
# Have Bob write a new article
|
|
262
|
+
bobs_article = bob.articles.build(:title => "My first article", :body => "This is my first article")
|
|
263
|
+
bobs_article.save # passes validation and saves ok
|
|
264
|
+
|
|
265
|
+
# Have Joe write a new article
|
|
266
|
+
joes_article = joe.articles.build(:title => "My first article", :body => "This is my first article")
|
|
267
|
+
joes_article.save # passes validation and saves ok
|
|
268
|
+
|
|
269
|
+
# Find Bob's first article
|
|
270
|
+
bob.articles.find_by_urlname('my_first_article')
|
|
271
|
+
|
|
272
|
+
# Find Joe's first article
|
|
273
|
+
joe.articles.find_by_urlname('my_first_article')
|
|
274
|
+
</pre>
|
|
275
|
+
<p>
|
|
276
|
+
Both articles validate because the validation is scoped against the owner.
|
|
277
|
+
Bob and Joe can both have articles known as ‘my_first_article’,
|
|
278
|
+
and the finder method will find only their own articles.
|
|
279
|
+
<tt>Article.find_all_by_urlname(‘my_first_article’)</tt> will
|
|
280
|
+
find both articles.
|
|
281
|
+
</p>
|
|
282
|
+
<h4>Custom validation</h4>
|
|
283
|
+
<p>
|
|
284
|
+
You can also define your own validate_urlname method in the class for
|
|
285
|
+
custom validation, like so:
|
|
286
|
+
</p>
|
|
287
|
+
<pre>
|
|
288
|
+
class Person < ActiveRecord::Base
|
|
289
|
+
acts_as_urlnameable :first_name
|
|
290
|
+
|
|
291
|
+
protected
|
|
292
|
+
def validate_urlname
|
|
293
|
+
if Person.find_by_urlname(attr_to_urlname)
|
|
294
|
+
errors.add(:urlname, 'is not available.')
|
|
295
|
+
elsif attr_to_urlname == 'bob'
|
|
296
|
+
errors.add_to_base('You might be Bob, and I hate Bob.')
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
</pre>
|
|
301
|
+
|
|
302
|
+
</div>
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
</div>
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
</div>
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
<!-- if includes -->
|
|
312
|
+
|
|
313
|
+
<div id="section">
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
<!-- if method_list -->
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
<div id="validator-badges">
|
|
329
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
|
330
|
+
</div>
|
|
331
|
+
|
|
332
|
+
</body>
|
|
333
|
+
</html>
|