zena 0.16.4 → 0.16.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +20 -9
- data/README.rdoc +27 -29
- data/Rakefile +1 -0
- data/app/controllers/nodes_controller.rb +37 -16
- data/app/models/node.rb +4 -2
- data/app/models/virtual_class.rb +1 -0
- data/app/views/templates/defaults/+login.zafu +30 -23
- data/app/views/templates/document_create_tabs/_file.rhtml +1 -1
- data/bricks/sphinx/misc/tasks.rb +2 -1
- data/bricks/worker/misc/tasks.rb +16 -0
- data/bricks/worker/misc/worker +13 -3
- data/config/bricks.yml +3 -3
- data/config/gems.yml +1 -1
- data/db/init/base/skins/default/Node-+login.zafu +21 -7
- data/db/schema.rb +14 -0
- data/lib/bricks/requirements_validation.rb +9 -10
- data/lib/zena/core_ext/string.rb +2 -1
- data/lib/zena/info.rb +1 -1
- data/lib/zena/use/grid.rb +2 -1
- data/lib/zena/use/html_tags.rb +32 -1
- data/lib/zena/use/rendering.rb +3 -0
- data/public/javascripts/zena.js +3 -0
- data/test/functional/nodes_controller_test.rb +7 -4
- data/test/unit/node_test.rb +6 -0
- data/zena.gemspec +6 -18
- metadata +149 -114
data/History.txt
CHANGED
@@ -1,11 +1,22 @@
|
|
1
|
+
== 0.16.5 2010-04-15
|
2
|
+
|
3
|
+
* 2 major enhancements
|
4
|
+
* added a way to easily check duplicate names when adding documents
|
5
|
+
* ruby 1.9 compatibility fixes
|
6
|
+
|
7
|
+
* 3 minor enhancements
|
8
|
+
* better default +login mode
|
9
|
+
* fixed image cache stamp not always used
|
10
|
+
* some minor bug fixes
|
11
|
+
|
1
12
|
== 0.16.4 2010-02-22
|
2
13
|
|
3
|
-
* 3 major
|
14
|
+
* 3 major enhancements
|
4
15
|
* fixed installation and runtime bugs on Windows
|
5
16
|
* moved ruby files in 'lib' into their Zena namespace
|
6
17
|
* german translations [Lars Kanis]
|
7
18
|
|
8
|
-
* 2 minor
|
19
|
+
* 2 minor enhancements
|
9
20
|
* fixed edgy bug with name duplicates
|
10
21
|
* fixed bug that would show a 'site not found' error instead of a 404
|
11
22
|
|
@@ -28,13 +39,13 @@
|
|
28
39
|
|
29
40
|
== 0.16.0 2010-01-15
|
30
41
|
|
31
|
-
* 3 major enhancements
|
42
|
+
* 3 major enhancements
|
32
43
|
* Sphinx search support
|
33
44
|
* Authlogic authentification
|
34
45
|
* attachments can now be provided with an url
|
35
46
|
* added [node:attribute_name] to use in querybuilder
|
36
47
|
|
37
|
-
* 5 minor
|
48
|
+
* 5 minor enhancements
|
38
49
|
* logrotate setup support with capistrano
|
39
50
|
* fixed contact content zip bug
|
40
51
|
* fixed fullpath set to NULL instead of kept in sync
|
@@ -48,11 +59,11 @@
|
|
48
59
|
|
49
60
|
== 0.15.1 2009-10-27
|
50
61
|
|
51
|
-
* 2 major enhancements
|
62
|
+
* 2 major enhancements
|
52
63
|
* Passenger support (deploy, upload progress)
|
53
64
|
* JS popup & gallery support (setting in image formats)
|
54
65
|
|
55
|
-
* 6 minor enhancements
|
66
|
+
* 6 minor enhancements
|
56
67
|
* fixed some deployment tasks (capistrano)
|
57
68
|
* fixed zena:setup task to copy files instead of symlink
|
58
69
|
* better versions list and diff select
|
@@ -62,19 +73,19 @@
|
|
62
73
|
|
63
74
|
== 0.15.0 2009-10-16
|
64
75
|
|
65
|
-
* 5 major enhancements
|
76
|
+
* 5 major enhancements
|
66
77
|
* running rails 2.3.4
|
67
78
|
* installable as gem without RMagick
|
68
79
|
* usable as gem with config.gem
|
69
80
|
* supports sqlite3
|
70
81
|
* 'zena' command to create app
|
71
82
|
|
72
|
-
* 3 minor enhancemnts
|
83
|
+
* 3 minor enhancemnts
|
73
84
|
* huge speed improvement in version loading
|
74
85
|
* massive code cleanup
|
75
86
|
* better team workflow (reworked access rights)
|
76
87
|
|
77
88
|
== 0.11.1 2009-04-03
|
78
89
|
|
79
|
-
* minor enhancements
|
90
|
+
* minor enhancements
|
80
91
|
* Better testing of custom queries using latest querybuilder (0.5.2)
|
data/README.rdoc
CHANGED
@@ -1,63 +1,61 @@
|
|
1
|
-
|
1
|
+
= DESCRIPTION:
|
2
2
|
|
3
3
|
CMS with super natural powers, based on Ruby on Rails
|
4
4
|
|
5
5
|
website: http://zenadmin.org
|
6
6
|
licence: MIT
|
7
7
|
|
8
|
-
|
8
|
+
= Getting started
|
9
9
|
|
10
|
-
# sudo gem sources -a http://gems.github.com
|
11
10
|
# sudo gem install zena
|
12
11
|
# zena myapp
|
12
|
+
# cd myapp
|
13
|
+
# rake zena:init RAILS_ENV=production
|
13
14
|
|
14
|
-
|
15
|
+
You can now visit http://localhost:3000 (user = admin, password = admin)
|
15
16
|
|
16
|
-
|
17
|
+
These commands do the following:
|
17
18
|
|
18
|
-
|
19
|
+
1. Install the zena gem and dependencies
|
20
|
+
2. Create an empty application
|
21
|
+
3. ...
|
22
|
+
4. Create the database, migrate, create the 'localhost' website in 'production' environment and start server.
|
19
23
|
|
20
|
-
|
24
|
+
The 'zena:init' rake task does the following:
|
21
25
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
+
# rake db:create RAILS_ENV=production
|
27
|
+
# rake zena:migrate
|
28
|
+
# rake zena:mksite LANG=en RAILS_ENV=production PASSWORD=admin HOST=localhost
|
29
|
+
# script/server -e production
|
26
30
|
|
27
|
-
|
28
|
-
1. Create the database with (using a mysql client)
|
29
|
-
create database zena DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
|
31
|
+
Read more: http://zenadmin.org/documentation
|
30
32
|
|
31
|
-
|
32
|
-
mkdir log
|
33
|
+
== Details
|
33
34
|
|
34
|
-
|
35
|
-
(change user, password if needed)
|
35
|
+
Have a look at the generator used by 'zena' command:
|
36
36
|
|
37
|
-
|
38
|
-
rake zena:migrate RAILS_ENV=production
|
37
|
+
http://github.com/zena/zena/blob/master/config/zena.rb
|
39
38
|
|
40
|
-
|
41
|
-
rake zena:mksite HOST=example.com PASSWORD=secret LANG=en RAILS_ENV=production
|
39
|
+
=== Production
|
42
40
|
|
43
|
-
|
41
|
+
You should use capistrano to ease deployment. See 'config/delploy.rb'.
|
44
42
|
|
45
|
-
|
43
|
+
=== Create a new site
|
46
44
|
# rake zena:mksite HOST=example.com PASSWORD=secret RAILS_ENV=production
|
47
45
|
|
48
|
-
|
46
|
+
=== Start
|
49
47
|
# ruby lib/upload_progress_server.rb start
|
50
48
|
# script/server -S config/mongrel_upload_progress.conf
|
51
49
|
|
52
|
-
|
50
|
+
=== Stop
|
53
51
|
# ^C (interrupt)
|
54
52
|
# ruby lib/upload_progress_server.rb stop
|
55
53
|
|
56
54
|
|
57
|
-
|
55
|
+
=== Login
|
58
56
|
You can now login with 'admin' and the password you used to make the site.
|
59
57
|
|
60
|
-
|
58
|
+
=== Dependencies
|
61
59
|
|
62
60
|
=== 1. Original in debian etch (might need to replace jpeg by libjpeg62)
|
63
61
|
# aptitude install build-essential apache2 mysql-server libmagick9-dev gs-gpl libssl-dev gettext libgettext-ruby libreadline5 libreadline5-dev zlib1g-dev libncurses5 libncurses5-dev unzip liburi-perl libjpeg-dev subversion ssh sudo awstats
|
@@ -110,7 +108,7 @@ Versions:
|
|
110
108
|
monit (debian package to monitor your mongrel processes)
|
111
109
|
|
112
110
|
|
113
|
-
|
111
|
+
=== Very experimental webDAV
|
114
112
|
Should not be used for production.
|
115
113
|
|
116
114
|
add this to nodes_controller macros:
|
data/Rakefile
CHANGED
@@ -291,29 +291,50 @@ class NodesController < ApplicationController
|
|
291
291
|
# AJAX HELPER
|
292
292
|
# TODO: test
|
293
293
|
def attribute
|
294
|
-
method = params[:attr]
|
295
|
-
if [:v_text
|
294
|
+
method = params[:attr]
|
295
|
+
if (params[:pseudo_id] || params[:name]).blank? || !%w{v_title v_text v_summary name path short_path}.include?(method)
|
296
|
+
# Error
|
297
|
+
render :text => ''
|
298
|
+
return
|
299
|
+
end
|
300
|
+
|
301
|
+
if id_query = params[:pseudo_id]
|
296
302
|
# '+' are not escaped as they should in ajax query
|
297
|
-
|
298
|
-
node_id = secure!(Node) { Node.translate_pseudo_id(
|
303
|
+
id_query.sub!(/ +$/) {|spaces| '+' * spaces.length }
|
304
|
+
node_id = secure!(Node) { Node.translate_pseudo_id(id_query, :id, @node)}
|
299
305
|
@node = secure!(Node) { Node.find(node_id) }
|
306
|
+
elsif name_query = params[:name]
|
307
|
+
if name_query =~ /^(.*)\.[a-z]{2,3}$/
|
308
|
+
name_query = $1
|
309
|
+
end
|
300
310
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
if [:v_text, :v_summary].include?(method)
|
307
|
-
render :inline=>"<%= zazen(@text) %>"
|
308
|
-
else
|
309
|
-
render :inline=>@text
|
310
|
-
end
|
311
|
+
conditions = [[]]
|
312
|
+
|
313
|
+
if kpath = params[:kpath]
|
314
|
+
conditions[0] << "kpath LIKE ?"
|
315
|
+
conditions << "#{kpath}%"
|
311
316
|
end
|
317
|
+
|
318
|
+
conditions[0] << "name LIKE ?"
|
319
|
+
conditions << "#{name_query}%"
|
320
|
+
|
321
|
+
conditions[0] = conditions[0].join(' AND ')
|
322
|
+
@node = secure!(Node) { Node.find(:first, :conditions => conditions, :order => "zip DESC")}
|
323
|
+
end
|
324
|
+
|
325
|
+
if %w{path short_path}.include?(method)
|
326
|
+
path = @node.send(method)
|
327
|
+
render :text => path.join('/ ')
|
312
328
|
else
|
313
|
-
|
329
|
+
@text = @node.send(method)
|
330
|
+
if %w{v_text v_summary}.include?(method)
|
331
|
+
render :text => "<%= zazen(@text) %>"
|
332
|
+
else
|
333
|
+
render :text => @text
|
334
|
+
end
|
314
335
|
end
|
315
336
|
rescue ActiveRecord::RecordNotFound
|
316
|
-
render :
|
337
|
+
render :text => (params[:pseudo_id] ? _('node not found') : _('new'))
|
317
338
|
end
|
318
339
|
|
319
340
|
# TODO: test
|
data/app/models/node.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
=begin rdoc
|
2
3
|
A Node is the root class of all elements in the zena application. Class inheritance diagram:
|
3
4
|
|
@@ -250,7 +251,8 @@ class Node < ActiveRecord::Base
|
|
250
251
|
|
251
252
|
# Return class or virtual class from name.
|
252
253
|
def get_class(rel, opts={})
|
253
|
-
|
254
|
+
# mushroom_types ==> MushroomType
|
255
|
+
class_name = rel =~ /\A[a-z]/ ? rel.singularize.camelize : rel
|
254
256
|
begin
|
255
257
|
klass = Module.const_get(class_name)
|
256
258
|
raise NameError unless klass.ancestors.include?(Node)
|
@@ -1716,4 +1718,4 @@ class Node < ActiveRecord::Base
|
|
1716
1718
|
|
1717
1719
|
end
|
1718
1720
|
|
1719
|
-
Bricks.apply_patches
|
1721
|
+
Bricks.apply_patches
|
data/app/models/virtual_class.rb
CHANGED
@@ -1,32 +1,39 @@
|
|
1
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
2
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" do='void' lang="en" set_lang='[v_lang]' xml:lang='en'>
|
4
|
-
<head>
|
5
|
-
<title do='title_for_layout' do='trans'>login</title>
|
6
|
-
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
7
|
-
<meta http-equiv="Content-Language" do='void' content='fr-fr' tset_content='[v_lang]_content'/>
|
8
3
|
|
9
|
-
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" do='void' lang="en" set_lang='[v_lang]' xml:lang='en'>
|
5
|
+
<head>
|
6
|
+
<title do='[v_title]' name='title'>Zena site</title>
|
7
|
+
<r:stylesheets list='reset'/>
|
8
|
+
<style>
|
9
|
+
body { color:#666; background: #ddd url('') no-repeat; font:13px Verdana, Helvetica, sans-serif; }
|
10
|
+
a { color:#922; text-decoration:none;}
|
11
|
+
.welcome { text-align:center; border-bottom:1px solid grey; padding:10px; background:#aaa; color:#333;}
|
12
|
+
table { margin:20px;}
|
13
|
+
td { padding:5px; }
|
14
|
+
#login_form { border:1px solid grey; background:#eee; width:400px; margin:200px auto; padding:0;}
|
15
|
+
</style>
|
10
16
|
</head>
|
11
|
-
<body>
|
12
|
-
<!-- There was a problem with the rendering of the original zafu code. Using default '+login' template. -->
|
13
|
-
<div id='login_form'><div>
|
14
|
-
<form action="/session" method="post"> <table>
|
15
|
-
<tr>
|
16
|
-
<td><label for='user_login' do='trans'>User name:</label></td>
|
17
|
-
<td><input name="login" size="20" type="text" /></td>
|
18
|
-
</tr>
|
19
|
-
<tr>
|
20
|
-
<td><label for='user_password' do='trans'>Password:</label></td>
|
21
17
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
18
|
+
<body do='void' name='body'>
|
19
|
+
<div id='login_form'>
|
20
|
+
<p class='welcome'><r:t>Login for</r:t> <b do='[v_title]'/></p>
|
21
|
+
<form action="/session" method="post"> <table>
|
22
|
+
<tr>
|
23
|
+
<td><label for='user_login' do='trans'>User name:</label></td>
|
24
|
+
<td><input id='user_login' name="login" size="20" type="text" /></td>
|
25
|
+
</tr>
|
26
|
+
<tr>
|
27
|
+
<td><label for='user_password' do='trans'>Password:</label></td>
|
28
|
+
|
29
|
+
<td><input name="password" size="20" type="password" /></td>
|
30
|
+
</tr>
|
31
|
+
<tr><td></td><td><input name="commit" type="submit" value=" login " /></td></tr>
|
32
|
+
</table>
|
33
|
+
</form>
|
34
|
+
</div>
|
28
35
|
<script type="text/javascript">
|
29
36
|
window.onload = document.getElementById('user_login').focus();
|
30
37
|
</script>
|
31
38
|
</body>
|
32
|
-
</html>
|
39
|
+
</html>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<%= upload_field %>
|
6
6
|
|
7
7
|
<label for='node_name'><%= _('title') %></label>
|
8
|
-
<input id='node_v_title' type='text' name='node[v_title]'
|
8
|
+
<input id='node_v_title' type='text' name='node[v_title]' onchange="Zena.get_filename(this,'existing_doc');"/> <%= check_exists(:node => @parent, :watch => 'node_v_title', :kpath => 'ND', :show => 'short_path') %><br/>
|
9
9
|
|
10
10
|
<label for='node_v_summary'><%= _('summary') %></label>
|
11
11
|
<textarea id='node_v_summary' rows='3' name='node[v_summary]'></textarea><br/>
|
data/bricks/sphinx/misc/tasks.rb
CHANGED
@@ -97,6 +97,8 @@ namespace :sphinx do
|
|
97
97
|
sphinx_conf.controller.start
|
98
98
|
|
99
99
|
if ThinkingSphinx.sphinx_running?
|
100
|
+
# We need to read the pid file from within Zena application (run under www-data user).
|
101
|
+
`chown www-data:www-data #{sphinx_conf.pid_file}`
|
100
102
|
puts "Sphinx searchd: started successfully (pid #{ThinkingSphinx.sphinx_pid})."
|
101
103
|
else
|
102
104
|
tail = `tail -n 10 #{sphinx_conf.searchd_log_file.inspect}`
|
@@ -134,5 +136,4 @@ namespace :sphinx do
|
|
134
136
|
puts "Sphinx searchd: indexing failed\n#{res}"
|
135
137
|
end
|
136
138
|
end
|
137
|
-
|
138
139
|
end
|
data/bricks/worker/misc/tasks.rb
CHANGED
@@ -65,4 +65,20 @@ namespace :worker do
|
|
65
65
|
sleep(1)
|
66
66
|
worker.start
|
67
67
|
end
|
68
|
+
|
69
|
+
desc "Run worker jobs index requests (never returns)"
|
70
|
+
task :run => :environment do
|
71
|
+
require 'delayed/worker'
|
72
|
+
begin
|
73
|
+
require 'thinking_sphinx/deltas/delayed_delta'
|
74
|
+
rescue LoadError
|
75
|
+
# Ignore
|
76
|
+
end
|
77
|
+
|
78
|
+
Delayed::Worker.new(
|
79
|
+
:min_priority => ENV['MIN_PRIORITY'],
|
80
|
+
:max_priority => ENV['MAX_PRIORITY']
|
81
|
+
).start
|
82
|
+
end
|
83
|
+
|
68
84
|
end
|
data/bricks/worker/misc/worker
CHANGED
@@ -12,7 +12,7 @@ ARGV.each do |arg|
|
|
12
12
|
end
|
13
13
|
|
14
14
|
unless %w{index start stop restart}.include?(cmd)
|
15
|
-
puts "Usage: script/
|
15
|
+
puts "Usage: script/worker RAILS_ENV=production [start|stop|restart]"
|
16
16
|
exit -1
|
17
17
|
end
|
18
18
|
|
@@ -22,7 +22,9 @@ daemon_options = {
|
|
22
22
|
:multiple => false,
|
23
23
|
:dir_mode => :normal,
|
24
24
|
:dir => File.join(dir, 'log'),
|
25
|
-
:backtrace => true
|
25
|
+
:backtrace => true,
|
26
|
+
# Create a worker.output to redirect STDOUT and STDERR
|
27
|
+
:log_output => true,
|
26
28
|
}
|
27
29
|
|
28
30
|
ARGV.clear
|
@@ -34,7 +36,15 @@ Daemons.run_proc('worker', daemon_options) do
|
|
34
36
|
Dir.chdir dir
|
35
37
|
ENV['RAILS_ENV'] = RAILS_ENV = env
|
36
38
|
require File.join('config', 'environment')
|
37
|
-
|
39
|
+
|
40
|
+
require 'delayed/worker'
|
41
|
+
begin
|
42
|
+
require 'thinking_sphinx/deltas/delayed_delta'
|
43
|
+
rescue LoadError
|
44
|
+
# Ignore
|
45
|
+
end
|
46
|
+
|
47
|
+
puts "Starting worker..."
|
38
48
|
|
39
49
|
Delayed::Worker.new.start
|
40
50
|
end
|
data/config/bricks.yml
CHANGED
@@ -8,14 +8,14 @@ development:
|
|
8
8
|
tags: ON
|
9
9
|
captcha: ON
|
10
10
|
sphinx:
|
11
|
-
switch:
|
11
|
+
switch: ON
|
12
12
|
activate_if:
|
13
13
|
gem: 'thinking_sphinx'
|
14
14
|
adapter: 'mysql,postgresql'
|
15
15
|
run_if:
|
16
16
|
file: 'log/searchd.development.pid'
|
17
17
|
worker:
|
18
|
-
switch:
|
18
|
+
switch: ON
|
19
19
|
activate_if:
|
20
20
|
gem: 'delayed_job'
|
21
21
|
|
@@ -23,7 +23,7 @@ production:
|
|
23
23
|
tags: ON
|
24
24
|
captcha: ON
|
25
25
|
sphinx:
|
26
|
-
switch:
|
26
|
+
switch: ON
|
27
27
|
activate_if:
|
28
28
|
gem: 'thinking_sphinx'
|
29
29
|
adapter: 'mysql,postgresql'
|
data/config/gems.yml
CHANGED
@@ -1,9 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" do='void' lang="en" set_lang='[v_lang]' xml:lang='en'>
|
5
|
+
<head>
|
6
|
+
<title do='[v_title]' name='title'>Zena site</title>
|
7
|
+
<r:stylesheets list='reset'/>
|
8
|
+
<style>
|
9
|
+
body { color:#666; background: #ddd url('') no-repeat; font:13px Verdana, Helvetica, sans-serif; }
|
10
|
+
a { color:#922; text-decoration:none;}
|
11
|
+
.welcome { text-align:center; border-bottom:1px solid grey; padding:10px; background:#aaa; color:#333;}
|
12
|
+
table { margin:20px;}
|
13
|
+
td { padding:5px; }
|
14
|
+
#login_form { border:1px solid grey; background:#eee; width:400px; margin:200px auto; padding:0;}
|
15
|
+
</style>
|
16
|
+
</head>
|
17
|
+
|
18
|
+
<body do='void' name='body'>
|
6
19
|
<div id='login_form'>
|
20
|
+
<p class='welcome'><r:t>Login for</r:t> <b do='[v_title]'/></p>
|
7
21
|
<form action="/session" method="post"> <table>
|
8
22
|
<tr>
|
9
23
|
<td><label for='user_login' do='trans'>User name:</label></td>
|
@@ -21,5 +35,5 @@
|
|
21
35
|
<script type="text/javascript">
|
22
36
|
window.onload = document.getElementById('user_login').focus();
|
23
37
|
</script>
|
24
|
-
|
25
|
-
</
|
38
|
+
</body>
|
39
|
+
</html>
|
data/db/schema.rb
CHANGED
@@ -80,6 +80,19 @@ ActiveRecord::Schema.define(:version => 20100115134729) do
|
|
80
80
|
t.decimal "value_b", :precision => 24, :scale => 8
|
81
81
|
end
|
82
82
|
|
83
|
+
create_table "delayed_jobs", :force => true do |t|
|
84
|
+
t.integer "priority", :default => 0
|
85
|
+
t.integer "attempts", :default => 0
|
86
|
+
t.text "handler"
|
87
|
+
t.text "last_error"
|
88
|
+
t.datetime "run_at"
|
89
|
+
t.datetime "locked_at"
|
90
|
+
t.datetime "failed_at"
|
91
|
+
t.string "locked_by"
|
92
|
+
t.datetime "created_at"
|
93
|
+
t.datetime "updated_at"
|
94
|
+
end
|
95
|
+
|
83
96
|
create_table "discussions", :force => true do |t|
|
84
97
|
t.datetime "created_at"
|
85
98
|
t.datetime "updated_at"
|
@@ -176,6 +189,7 @@ ActiveRecord::Schema.define(:version => 20100115134729) do
|
|
176
189
|
t.integer "custom_a"
|
177
190
|
t.integer "custom_b"
|
178
191
|
t.text "vhash"
|
192
|
+
t.boolean "delta", :default => true, :null => false
|
179
193
|
end
|
180
194
|
|
181
195
|
create_table "relations", :force => true do |t|
|
@@ -8,15 +8,14 @@ module Bricks
|
|
8
8
|
errors = []
|
9
9
|
requirements.each do |k,v|
|
10
10
|
case k
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
# end
|
11
|
+
when 'gem'
|
12
|
+
v.split(',').each do |name|
|
13
|
+
begin
|
14
|
+
require name.strip
|
15
|
+
rescue LoadError => err
|
16
|
+
errors << "'#{name}' missing"
|
17
|
+
end
|
18
|
+
end
|
20
19
|
when 'file'
|
21
20
|
v.split(',').each do |name|
|
22
21
|
unless File.exist?("#{RAILS_ROOT}/#{name}")
|
@@ -52,7 +51,7 @@ module Bricks
|
|
52
51
|
if defined?(ActiveRecord::Base) && logger = ActiveRecord::Base.logger
|
53
52
|
ActiveRecord::Base.logger.warn "'#{brick}' not activated: #{errors.join(', ')}"
|
54
53
|
end
|
55
|
-
puts "'#{brick}' not activated: #{errors.join(', ')}" if RAILS_ENV == 'development'
|
54
|
+
# puts "'#{brick}' not activated: #{errors.join(', ')}" if RAILS_ENV == 'development'
|
56
55
|
end
|
57
56
|
end
|
58
57
|
config[brick] = opts unless errors
|
data/lib/zena/core_ext/string.rb
CHANGED
data/lib/zena/info.rb
CHANGED
@@ -9,7 +9,7 @@ ZENA_CALENDAR_LANGS = ["en", "fr", "de"] # FIXME: build this dynamically from ex
|
|
9
9
|
ENABLE_XSENDFILE = false
|
10
10
|
|
11
11
|
module Zena
|
12
|
-
VERSION = '0.16.
|
12
|
+
VERSION = '0.16.5'
|
13
13
|
REVISION = 1336
|
14
14
|
ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
15
15
|
end
|
data/lib/zena/use/grid.rb
CHANGED
data/lib/zena/use/html_tags.rb
CHANGED
@@ -307,11 +307,42 @@ module Zena
|
|
307
307
|
end
|
308
308
|
input_id = opt[:input_id] ? " id='#{params[:input_id]}'" : ''
|
309
309
|
# we use both 'onChange' and 'onKeyup' for old javascript compatibility
|
310
|
-
update = "new Ajax.Updater('#{name_ref}', '/nodes/#{(node || @node).zip}/attribute?
|
310
|
+
update = "new Ajax.Updater('#{name_ref}', '/nodes/#{(node || @node).zip}/attribute?pseudo_id=' + this.value + '&attr=#{attribute}', {method:'get', asynchronous:true, evalScripts:true});"
|
311
311
|
"<div class='select_id'><input type='text' size='8'#{input_id} name='#{obj}[#{sym}]' value='#{zip}' onChange=\"#{update}\" onKeyup=\"#{update}\"/>"+
|
312
312
|
"<span class='select_id_name' id='#{name_ref}'>#{current}</span></div>"
|
313
313
|
end
|
314
314
|
|
315
|
+
# TODO: select_id should use 'check_exists'
|
316
|
+
def check_exists(opts)
|
317
|
+
watch = opts[:watch] || 'node_v_title'
|
318
|
+
name_ref = unique_id
|
319
|
+
params = []
|
320
|
+
|
321
|
+
# Filtering key
|
322
|
+
key = 'name'
|
323
|
+
params << "#{key}=' + this.value + '"
|
324
|
+
|
325
|
+
# Attribute to display
|
326
|
+
attribute = opts[:show] || 'short_path'
|
327
|
+
params << "attr=#{attribute}"
|
328
|
+
|
329
|
+
# Scoping
|
330
|
+
if kpath = opts[:kpath]
|
331
|
+
params << "kpath=#{kpath}"
|
332
|
+
end
|
333
|
+
|
334
|
+
function_name = "check#{unique_id}"
|
335
|
+
js_data << "#{function_name} = function(event) {
|
336
|
+
new Ajax.Updater('#{name_ref}', '/nodes/#{(opts[:node] || @node).zip}/attribute?#{params.join('&')}', {method:'get', asynchronous:true, evalScripts:true});
|
337
|
+
};"
|
338
|
+
|
339
|
+
js_data << "$('#{watch}').check_exists = #{function_name};"
|
340
|
+
js_data << "Event.observe('#{watch}', 'change', #{function_name});"
|
341
|
+
js_data << "Event.observe('#{watch}', 'keyup', #{function_name});"
|
342
|
+
|
343
|
+
"<span class='select_id_name' id='#{name_ref}'>#{opts[:current]}</span>"
|
344
|
+
end
|
345
|
+
|
315
346
|
def unique_id
|
316
347
|
@counter ||= 0
|
317
348
|
"#{Time.now.to_i}_#{@counter += 1}"
|
data/lib/zena/use/rendering.rb
CHANGED
@@ -241,6 +241,9 @@ module Zena
|
|
241
241
|
path = ((path.empty? || path == "/") ? "/index" : URI.unescape(path))
|
242
242
|
ext = params[:format].blank? ? 'html' : params[:format]
|
243
243
|
path << ".#{ext}" unless path =~ /\.#{ext}(\?\d+|)$/
|
244
|
+
if cachestamp_format?(params['format'])
|
245
|
+
path << "?" << make_cachestamp(@node, params['mode'])
|
246
|
+
end
|
244
247
|
path
|
245
248
|
end
|
246
249
|
|
data/public/javascripts/zena.js
CHANGED
@@ -132,6 +132,9 @@ Zena.get_filename = function(source, target) {
|
|
132
132
|
var path = $(source).value;
|
133
133
|
var elements = path.split(/[\\\/]+/g);
|
134
134
|
$(target).value = elements[elements.length - 1];
|
135
|
+
if ($(target).check_exists) {
|
136
|
+
$(target).check_exists();
|
137
|
+
}
|
135
138
|
}
|
136
139
|
}
|
137
140
|
|
@@ -68,7 +68,7 @@ class NodesControllerTest < Zena::Controller::TestCase
|
|
68
68
|
# cache info ok
|
69
69
|
get 'show', :prefix => 'en', :path => ["image#{node.zip}.jpg"], :cachestamp => node.updated_at.to_i
|
70
70
|
assert_response :success
|
71
|
-
assert File.exist?("#{SITES_ROOT}/test.host/public/en/image#{node.zip}.jpg")
|
71
|
+
assert File.exist?("#{SITES_ROOT}/test.host/public/en/image#{node.zip}.jpg?#{node.updated_at.to_i}")
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
@@ -136,7 +136,8 @@ END:VCALENDAR
|
|
136
136
|
node = secure!(Node) { nodes(:style_css) }
|
137
137
|
without_files('/test.host/public') do
|
138
138
|
name = "textdocument#{node.zip}.css"
|
139
|
-
|
139
|
+
base_filename = "#{SITES_ROOT}/test.host/public/en/#{name}"
|
140
|
+
filename = "#{base_filename}?#{node.updated_at.to_i}"
|
140
141
|
with_caching do
|
141
142
|
assert !File.exist?(filename)
|
142
143
|
get 'show', :prefix => 'en', :path => [name], :cachestamp => node.updated_at.to_i
|
@@ -148,11 +149,13 @@ END:VCALENDAR
|
|
148
149
|
assert node.errors.empty?
|
149
150
|
assert_equal Zena::Status[:pub], node.version.status
|
150
151
|
assert_equal versions_id(:style_css_en), node.version.id # auto publish
|
151
|
-
assert !File.exist?(filename) # cached page removed
|
152
|
+
assert !File.exist?(filename) # old cached page removed
|
153
|
+
filename = "#{base_filename}?#{node.updated_at.to_i}"
|
154
|
+
assert !File.exist?(filename) # not yet created
|
152
155
|
get 'show', :prefix => 'en', :path => [name], :cachestamp => node.updated_at.to_i
|
153
156
|
assert_response :success
|
154
|
-
assert_match %r[/\* empty \*/], File.read(filename)
|
155
157
|
assert File.exist?(filename) # cached page created again
|
158
|
+
assert_match %r[/\* empty \*/], File.read(filename)
|
156
159
|
end
|
157
160
|
end
|
158
161
|
end
|
data/test/unit/node_test.rb
CHANGED
@@ -869,6 +869,12 @@ class NodeTest < Zena::Unit::TestCase
|
|
869
869
|
assert_equal TextDocument, Node.get_class('TextDocument')
|
870
870
|
end
|
871
871
|
|
872
|
+
def test_get_class_without_plural
|
873
|
+
login(:lion)
|
874
|
+
vclass = VirtualClass.create(:superclass => 'Project', :name => 'Process', :create_group_id => groups_id(:public))
|
875
|
+
assert_equal vclass, Node.get_class('Process')
|
876
|
+
end
|
877
|
+
|
872
878
|
def test_get_attributes_from_yaml
|
873
879
|
f = Tempfile.new('any.yml')
|
874
880
|
path = f.path
|
data/zena.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{zena}
|
8
|
-
s.version = "0.16.
|
8
|
+
s.version = "0.16.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Gaspard Bucher"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-04-15}
|
13
13
|
s.default_executable = %q{zena}
|
14
14
|
s.description = %q{zena is a Ruby on Rails CMS (content managment system) with a focus on usability, ease of customization and web 2.0 goodness (application like behaviour).}
|
15
15
|
s.email = %q{gaspard@teti.ch}
|
@@ -1918,7 +1918,7 @@ Gem::Specification.new do |s|
|
|
1918
1918
|
s.rdoc_options = ["--charset=UTF-8"]
|
1919
1919
|
s.require_paths = ["lib"]
|
1920
1920
|
s.rubyforge_project = %q{zena}
|
1921
|
-
s.rubygems_version = %q{1.3.
|
1921
|
+
s.rubygems_version = %q{1.3.6}
|
1922
1922
|
s.summary = %q{CMS with super natural powers, based on Ruby on Rails}
|
1923
1923
|
s.test_files = [
|
1924
1924
|
"spec/controllers/versions_controller_spec.rb",
|
@@ -2024,18 +2024,14 @@ Gem::Specification.new do |s|
|
|
2024
2024
|
s.add_runtime_dependency(%q<rails>, ["= 2.3.4"])
|
2025
2025
|
s.add_runtime_dependency(%q<uuidtools>, ["= 2.0.0"])
|
2026
2026
|
s.add_runtime_dependency(%q<authlogic>, ["= 2.1.3"])
|
2027
|
-
s.add_runtime_dependency(%q<ts-delayed-delta>, [">= 1.0.2"])
|
2028
2027
|
s.add_runtime_dependency(%q<shoulda>, [">= 2.10.2"])
|
2029
2028
|
s.add_runtime_dependency(%q<fast_gettext>, ["~> 0.4.16"])
|
2030
|
-
s.add_runtime_dependency(%q<delayed_job>, [">= 1.8.4"])
|
2031
2029
|
s.add_runtime_dependency(%q<syntax>, ["= 1.0.0"])
|
2032
2030
|
s.add_runtime_dependency(%q<yamltest>, [">= 0.5.3"])
|
2033
|
-
s.add_runtime_dependency(%q<thinking-sphinx>, [">= 1.3.14"])
|
2034
2031
|
s.add_runtime_dependency(%q<json>, [">= 1.1.9"])
|
2035
2032
|
s.add_runtime_dependency(%q<will_paginate>, ["~> 2.3.12"])
|
2036
|
-
s.add_runtime_dependency(%q<gettext>, ["
|
2033
|
+
s.add_runtime_dependency(%q<gettext>, [">= 1.93.0"])
|
2037
2034
|
s.add_runtime_dependency(%q<jeweler>, [">= 0"])
|
2038
|
-
s.add_runtime_dependency(%q<rmagick>, [">= 2.10.0"])
|
2039
2035
|
s.add_runtime_dependency(%q<hpricot>, [">= 0"])
|
2040
2036
|
s.add_runtime_dependency(%q<differ>, [">= 0.1.1"])
|
2041
2037
|
s.add_runtime_dependency(%q<RedCloth>, ["= 3.0.4"])
|
@@ -2047,18 +2043,14 @@ Gem::Specification.new do |s|
|
|
2047
2043
|
s.add_dependency(%q<rails>, ["= 2.3.4"])
|
2048
2044
|
s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
|
2049
2045
|
s.add_dependency(%q<authlogic>, ["= 2.1.3"])
|
2050
|
-
s.add_dependency(%q<ts-delayed-delta>, [">= 1.0.2"])
|
2051
2046
|
s.add_dependency(%q<shoulda>, [">= 2.10.2"])
|
2052
2047
|
s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
|
2053
|
-
s.add_dependency(%q<delayed_job>, [">= 1.8.4"])
|
2054
2048
|
s.add_dependency(%q<syntax>, ["= 1.0.0"])
|
2055
2049
|
s.add_dependency(%q<yamltest>, [">= 0.5.3"])
|
2056
|
-
s.add_dependency(%q<thinking-sphinx>, [">= 1.3.14"])
|
2057
2050
|
s.add_dependency(%q<json>, [">= 1.1.9"])
|
2058
2051
|
s.add_dependency(%q<will_paginate>, ["~> 2.3.12"])
|
2059
|
-
s.add_dependency(%q<gettext>, ["
|
2052
|
+
s.add_dependency(%q<gettext>, [">= 1.93.0"])
|
2060
2053
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
2061
|
-
s.add_dependency(%q<rmagick>, [">= 2.10.0"])
|
2062
2054
|
s.add_dependency(%q<hpricot>, [">= 0"])
|
2063
2055
|
s.add_dependency(%q<differ>, [">= 0.1.1"])
|
2064
2056
|
s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
|
@@ -2071,18 +2063,14 @@ Gem::Specification.new do |s|
|
|
2071
2063
|
s.add_dependency(%q<rails>, ["= 2.3.4"])
|
2072
2064
|
s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
|
2073
2065
|
s.add_dependency(%q<authlogic>, ["= 2.1.3"])
|
2074
|
-
s.add_dependency(%q<ts-delayed-delta>, [">= 1.0.2"])
|
2075
2066
|
s.add_dependency(%q<shoulda>, [">= 2.10.2"])
|
2076
2067
|
s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
|
2077
|
-
s.add_dependency(%q<delayed_job>, [">= 1.8.4"])
|
2078
2068
|
s.add_dependency(%q<syntax>, ["= 1.0.0"])
|
2079
2069
|
s.add_dependency(%q<yamltest>, [">= 0.5.3"])
|
2080
|
-
s.add_dependency(%q<thinking-sphinx>, [">= 1.3.14"])
|
2081
2070
|
s.add_dependency(%q<json>, [">= 1.1.9"])
|
2082
2071
|
s.add_dependency(%q<will_paginate>, ["~> 2.3.12"])
|
2083
|
-
s.add_dependency(%q<gettext>, ["
|
2072
|
+
s.add_dependency(%q<gettext>, [">= 1.93.0"])
|
2084
2073
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
2085
|
-
s.add_dependency(%q<rmagick>, [">= 2.10.0"])
|
2086
2074
|
s.add_dependency(%q<hpricot>, [">= 0"])
|
2087
2075
|
s.add_dependency(%q<differ>, [">= 0.1.1"])
|
2088
2076
|
s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zena
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 16
|
8
|
+
- 5
|
9
|
+
version: 0.16.5
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Gaspard Bucher
|
@@ -9,229 +14,257 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-04-15 00:00:00 +02:00
|
13
18
|
default_executable: zena
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: ruby-recaptcha
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - "="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 0
|
30
|
+
- 0
|
23
31
|
version: 1.0.0
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: tzinfo
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ">="
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 3
|
44
|
+
- 12
|
33
45
|
version: 0.3.12
|
34
|
-
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
35
48
|
- !ruby/object:Gem::Dependency
|
36
49
|
name: rubyless
|
37
|
-
|
38
|
-
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
52
|
requirements:
|
41
53
|
- - ">="
|
42
54
|
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
- 3
|
58
|
+
- 5
|
43
59
|
version: 0.3.5
|
44
|
-
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
45
62
|
- !ruby/object:Gem::Dependency
|
46
63
|
name: rails
|
47
|
-
|
48
|
-
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
66
|
requirements:
|
51
67
|
- - "="
|
52
68
|
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 2
|
71
|
+
- 3
|
72
|
+
- 4
|
53
73
|
version: 2.3.4
|
54
|
-
|
74
|
+
type: :runtime
|
75
|
+
version_requirements: *id004
|
55
76
|
- !ruby/object:Gem::Dependency
|
56
77
|
name: uuidtools
|
57
|
-
|
58
|
-
|
59
|
-
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
60
80
|
requirements:
|
61
81
|
- - "="
|
62
82
|
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 2
|
85
|
+
- 0
|
86
|
+
- 0
|
63
87
|
version: 2.0.0
|
64
|
-
|
88
|
+
type: :runtime
|
89
|
+
version_requirements: *id005
|
65
90
|
- !ruby/object:Gem::Dependency
|
66
91
|
name: authlogic
|
67
|
-
|
68
|
-
|
69
|
-
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
70
94
|
requirements:
|
71
95
|
- - "="
|
72
96
|
- !ruby/object:Gem::Version
|
97
|
+
segments:
|
98
|
+
- 2
|
99
|
+
- 1
|
100
|
+
- 3
|
73
101
|
version: 2.1.3
|
74
|
-
version:
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: ts-delayed-delta
|
77
102
|
type: :runtime
|
78
|
-
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: 1.0.2
|
84
|
-
version:
|
103
|
+
version_requirements: *id006
|
85
104
|
- !ruby/object:Gem::Dependency
|
86
105
|
name: shoulda
|
87
|
-
|
88
|
-
|
89
|
-
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
90
108
|
requirements:
|
91
109
|
- - ">="
|
92
110
|
- !ruby/object:Gem::Version
|
111
|
+
segments:
|
112
|
+
- 2
|
113
|
+
- 10
|
114
|
+
- 2
|
93
115
|
version: 2.10.2
|
94
|
-
|
116
|
+
type: :runtime
|
117
|
+
version_requirements: *id007
|
95
118
|
- !ruby/object:Gem::Dependency
|
96
119
|
name: fast_gettext
|
97
|
-
|
98
|
-
|
99
|
-
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
prerelease: false
|
121
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
100
122
|
requirements:
|
101
123
|
- - ~>
|
102
124
|
- !ruby/object:Gem::Version
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
- 4
|
128
|
+
- 16
|
103
129
|
version: 0.4.16
|
104
|
-
version:
|
105
|
-
- !ruby/object:Gem::Dependency
|
106
|
-
name: delayed_job
|
107
130
|
type: :runtime
|
108
|
-
|
109
|
-
version_requirements: !ruby/object:Gem::Requirement
|
110
|
-
requirements:
|
111
|
-
- - ">="
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: 1.8.4
|
114
|
-
version:
|
131
|
+
version_requirements: *id008
|
115
132
|
- !ruby/object:Gem::Dependency
|
116
133
|
name: syntax
|
117
|
-
|
118
|
-
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
prerelease: false
|
135
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
120
136
|
requirements:
|
121
137
|
- - "="
|
122
138
|
- !ruby/object:Gem::Version
|
139
|
+
segments:
|
140
|
+
- 1
|
141
|
+
- 0
|
142
|
+
- 0
|
123
143
|
version: 1.0.0
|
124
|
-
|
144
|
+
type: :runtime
|
145
|
+
version_requirements: *id009
|
125
146
|
- !ruby/object:Gem::Dependency
|
126
147
|
name: yamltest
|
127
|
-
|
128
|
-
|
129
|
-
version_requirements: !ruby/object:Gem::Requirement
|
148
|
+
prerelease: false
|
149
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
130
150
|
requirements:
|
131
151
|
- - ">="
|
132
152
|
- !ruby/object:Gem::Version
|
153
|
+
segments:
|
154
|
+
- 0
|
155
|
+
- 5
|
156
|
+
- 3
|
133
157
|
version: 0.5.3
|
134
|
-
version:
|
135
|
-
- !ruby/object:Gem::Dependency
|
136
|
-
name: thinking-sphinx
|
137
158
|
type: :runtime
|
138
|
-
|
139
|
-
version_requirements: !ruby/object:Gem::Requirement
|
140
|
-
requirements:
|
141
|
-
- - ">="
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: 1.3.14
|
144
|
-
version:
|
159
|
+
version_requirements: *id010
|
145
160
|
- !ruby/object:Gem::Dependency
|
146
161
|
name: json
|
147
|
-
|
148
|
-
|
149
|
-
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
prerelease: false
|
163
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
150
164
|
requirements:
|
151
165
|
- - ">="
|
152
166
|
- !ruby/object:Gem::Version
|
167
|
+
segments:
|
168
|
+
- 1
|
169
|
+
- 1
|
170
|
+
- 9
|
153
171
|
version: 1.1.9
|
154
|
-
|
172
|
+
type: :runtime
|
173
|
+
version_requirements: *id011
|
155
174
|
- !ruby/object:Gem::Dependency
|
156
175
|
name: will_paginate
|
157
|
-
|
158
|
-
|
159
|
-
version_requirements: !ruby/object:Gem::Requirement
|
176
|
+
prerelease: false
|
177
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
160
178
|
requirements:
|
161
179
|
- - ~>
|
162
180
|
- !ruby/object:Gem::Version
|
181
|
+
segments:
|
182
|
+
- 2
|
183
|
+
- 3
|
184
|
+
- 12
|
163
185
|
version: 2.3.12
|
164
|
-
|
186
|
+
type: :runtime
|
187
|
+
version_requirements: *id012
|
165
188
|
- !ruby/object:Gem::Dependency
|
166
189
|
name: gettext
|
167
|
-
|
168
|
-
|
169
|
-
version_requirements: !ruby/object:Gem::Requirement
|
190
|
+
prerelease: false
|
191
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
170
192
|
requirements:
|
171
|
-
- - "
|
193
|
+
- - ">="
|
172
194
|
- !ruby/object:Gem::Version
|
195
|
+
segments:
|
196
|
+
- 1
|
197
|
+
- 93
|
198
|
+
- 0
|
173
199
|
version: 1.93.0
|
174
|
-
|
200
|
+
type: :runtime
|
201
|
+
version_requirements: *id013
|
175
202
|
- !ruby/object:Gem::Dependency
|
176
203
|
name: jeweler
|
177
|
-
|
178
|
-
|
179
|
-
version_requirements: !ruby/object:Gem::Requirement
|
204
|
+
prerelease: false
|
205
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
180
206
|
requirements:
|
181
207
|
- - ">="
|
182
208
|
- !ruby/object:Gem::Version
|
209
|
+
segments:
|
210
|
+
- 0
|
183
211
|
version: "0"
|
184
|
-
version:
|
185
|
-
- !ruby/object:Gem::Dependency
|
186
|
-
name: rmagick
|
187
212
|
type: :runtime
|
188
|
-
|
189
|
-
version_requirements: !ruby/object:Gem::Requirement
|
190
|
-
requirements:
|
191
|
-
- - ">="
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
version: 2.10.0
|
194
|
-
version:
|
213
|
+
version_requirements: *id014
|
195
214
|
- !ruby/object:Gem::Dependency
|
196
215
|
name: hpricot
|
197
|
-
|
198
|
-
|
199
|
-
version_requirements: !ruby/object:Gem::Requirement
|
216
|
+
prerelease: false
|
217
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
200
218
|
requirements:
|
201
219
|
- - ">="
|
202
220
|
- !ruby/object:Gem::Version
|
221
|
+
segments:
|
222
|
+
- 0
|
203
223
|
version: "0"
|
204
|
-
|
224
|
+
type: :runtime
|
225
|
+
version_requirements: *id015
|
205
226
|
- !ruby/object:Gem::Dependency
|
206
227
|
name: differ
|
207
|
-
|
208
|
-
|
209
|
-
version_requirements: !ruby/object:Gem::Requirement
|
228
|
+
prerelease: false
|
229
|
+
requirement: &id016 !ruby/object:Gem::Requirement
|
210
230
|
requirements:
|
211
231
|
- - ">="
|
212
232
|
- !ruby/object:Gem::Version
|
233
|
+
segments:
|
234
|
+
- 0
|
235
|
+
- 1
|
236
|
+
- 1
|
213
237
|
version: 0.1.1
|
214
|
-
|
238
|
+
type: :runtime
|
239
|
+
version_requirements: *id016
|
215
240
|
- !ruby/object:Gem::Dependency
|
216
241
|
name: RedCloth
|
217
|
-
|
218
|
-
|
219
|
-
version_requirements: !ruby/object:Gem::Requirement
|
242
|
+
prerelease: false
|
243
|
+
requirement: &id017 !ruby/object:Gem::Requirement
|
220
244
|
requirements:
|
221
245
|
- - "="
|
222
246
|
- !ruby/object:Gem::Version
|
247
|
+
segments:
|
248
|
+
- 3
|
249
|
+
- 0
|
250
|
+
- 4
|
223
251
|
version: 3.0.4
|
224
|
-
|
252
|
+
type: :runtime
|
253
|
+
version_requirements: *id017
|
225
254
|
- !ruby/object:Gem::Dependency
|
226
255
|
name: querybuilder
|
227
|
-
|
228
|
-
|
229
|
-
version_requirements: !ruby/object:Gem::Requirement
|
256
|
+
prerelease: false
|
257
|
+
requirement: &id018 !ruby/object:Gem::Requirement
|
230
258
|
requirements:
|
231
259
|
- - "="
|
232
260
|
- !ruby/object:Gem::Version
|
261
|
+
segments:
|
262
|
+
- 0
|
263
|
+
- 5
|
264
|
+
- 8
|
233
265
|
version: 0.5.8
|
234
|
-
|
266
|
+
type: :runtime
|
267
|
+
version_requirements: *id018
|
235
268
|
description: zena is a Ruby on Rails CMS (content managment system) with a focus on usability, ease of customization and web 2.0 goodness (application like behaviour).
|
236
269
|
email: gaspard@teti.ch
|
237
270
|
executables:
|
@@ -2149,18 +2182,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
2149
2182
|
requirements:
|
2150
2183
|
- - ">="
|
2151
2184
|
- !ruby/object:Gem::Version
|
2185
|
+
segments:
|
2186
|
+
- 0
|
2152
2187
|
version: "0"
|
2153
|
-
version:
|
2154
2188
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
2155
2189
|
requirements:
|
2156
2190
|
- - ">="
|
2157
2191
|
- !ruby/object:Gem::Version
|
2192
|
+
segments:
|
2193
|
+
- 0
|
2158
2194
|
version: "0"
|
2159
|
-
version:
|
2160
2195
|
requirements: []
|
2161
2196
|
|
2162
2197
|
rubyforge_project: zena
|
2163
|
-
rubygems_version: 1.3.
|
2198
|
+
rubygems_version: 1.3.6
|
2164
2199
|
signing_key:
|
2165
2200
|
specification_version: 3
|
2166
2201
|
summary: CMS with super natural powers, based on Ruby on Rails
|