zena 1.0.0.beta2 → 1.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/History.txt +12 -0
- data/app/controllers/application_controller.rb +0 -1
- data/app/controllers/columns_controller.rb +11 -1
- data/app/controllers/nodes_controller.rb +79 -19
- data/app/controllers/versions_controller.rb +0 -2
- data/app/controllers/virtual_classes_controller.rb +19 -6
- data/app/models/column.rb +5 -1
- data/app/models/comment.rb +1 -6
- data/app/models/node.rb +21 -3
- data/app/models/role.rb +21 -0
- data/app/models/site.rb +7 -2
- data/app/models/template.rb +3 -3
- data/app/models/text_document.rb +4 -4
- data/app/models/user.rb +21 -8
- data/app/views/columns/_li.html.erb +1 -0
- data/app/views/nodes/_groups.rhtml +1 -1
- data/app/views/sites/_form.erb +3 -1
- data/app/views/sites/_li.erb +1 -0
- data/app/views/sites/index.erb +1 -1
- data/app/views/virtual_classes/_form.erb +11 -2
- data/app/views/virtual_classes/_li.erb +5 -2
- data/bin/zena +1 -1
- data/bricks/math/lib/bricks/math.rb +1 -1
- data/bricks/mongrel/README +3 -0
- data/bricks/mongrel/zena/deploy.rb +56 -0
- data/bricks/passenger/README +3 -0
- data/bricks/passenger/zena/deploy.rb +49 -0
- data/config/bricks.yml +6 -0
- data/config/deploy.rb +24 -18
- data/config/gems.yml +3 -3
- data/db/migrate/20100915062903_add_api_group_id_to_site.rb +9 -0
- data/lib/tasks/zena.rake +39 -35
- data/lib/zena.rb +5 -6
- data/lib/zena/acts/enrollable.rb +37 -6
- data/lib/zena/app.rb +4 -2
- data/lib/zena/deploy.rb +110 -150
- data/lib/zena/deploy/awstats.conf.rhtml +4 -4
- data/lib/zena/deploy/httpd.rhtml +2 -1
- data/lib/zena/deploy/stats.vhost.rhtml +7 -7
- data/lib/zena/deploy/vhost.rhtml +1 -1
- data/lib/zena/deploy/vhost_www.rhtml +4 -4
- data/lib/zena/foxy_parser.rb +6 -5
- data/lib/zena/info.rb +1 -1
- data/lib/zena/integration/test_case.rb +8 -3
- data/lib/zena/parser.rb +11 -11
- data/lib/zena/parser/zafu_tags.rb +2 -2
- data/lib/zena/remote.rb +16 -0
- data/lib/zena/remote/connection.rb +67 -0
- data/lib/zena/remote/interface.rb +405 -0
- data/lib/zena/remote/klass.rb +14 -0
- data/lib/zena/remote/mock.rb +58 -0
- data/lib/zena/remote/node.rb +76 -0
- data/lib/zena/routes.rb +2 -1
- data/lib/zena/use.rb +9 -4
- data/lib/zena/use/ajax.rb +3 -3
- data/lib/zena/use/authlogic.rb +8 -1
- data/lib/zena/use/context.rb +22 -21
- data/lib/zena/use/dates.rb +26 -3
- data/lib/zena/use/display.rb +33 -5
- data/lib/zena/use/forms.rb +90 -12
- data/lib/zena/use/fulltext.rb +1 -1
- data/lib/zena/use/i18n.rb +118 -31
- data/lib/zena/use/query_builder.rb +7 -5
- data/lib/zena/use/query_node.rb +30 -4
- data/lib/zena/use/rendering.rb +1 -1
- data/lib/zena/use/search.rb +10 -7
- data/lib/zena/use/urls.rb +3 -3
- data/lib/zena/use/zafu_attributes.rb +2 -2
- data/lib/zena/use/zafu_eval.rb +1 -1
- data/lib/zena/use/zafu_safe_definitions.rb +1 -0
- data/lib/zena/use/zafu_templates.rb +1 -1
- data/lib/zena/zafu_compiler.rb +5 -1
- data/public/javascripts/zena.js +4 -4
- data/public/stylesheets/admin.css +1 -0
- data/test/custom_queries/complex.host.yml +3 -3
- data/test/fixtures/files/translations_fr.yml +4 -1
- data/test/functional/application_controller_test.rb +2 -2
- data/test/functional/nodes_controller_test.rb +57 -5
- data/test/functional/users_controller_test.rb +10 -9
- data/test/functional/virtual_classes_controller_test.rb +48 -0
- data/test/integration/navigation_test.rb +13 -1
- data/test/integration/query_node/filters.yml +5 -0
- data/test/integration/query_node_test.rb +1 -1
- data/test/integration/zafu_compiler/ajax.yml +13 -19
- data/test/integration/zafu_compiler/basic.yml +0 -72
- data/test/integration/zafu_compiler/complex.yml +1 -1
- data/test/integration/zafu_compiler/complex_ok.yml +19 -0
- data/test/integration/zafu_compiler/dates.yml +62 -1
- data/test/integration/zafu_compiler/display.yml +4 -4
- data/test/integration/zafu_compiler/forms.yml +19 -7
- data/test/integration/zafu_compiler/i18n.yml +56 -1
- data/test/integration/zafu_compiler/later.yml +23 -1
- data/test/integration/zafu_compiler/relations.yml +1 -1
- data/test/integration/zafu_compiler/roles.yml +29 -1
- data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
- data/test/integration/zafu_compiler/zafu_attributes.yml +2 -1
- data/test/integration/zafu_compiler_test.rb +5 -3
- data/test/sites/zena/columns.yml +3 -0
- data/test/sites/zena/roles.yml +0 -1
- data/test/sites/zena/sites.yml +1 -0
- data/test/sites/zena/versions.yml +2 -0
- data/test/unit/node_test.rb +27 -9
- data/test/unit/relation_proxy_test.rb +7 -4
- data/test/unit/remote_test.rb +379 -0
- data/test/unit/user_test.rb +47 -0
- data/test/unit/zena/acts/enrollable_test.rb +36 -7
- data/test/unit/zena/acts/serializable_test.rb +14 -2
- data/test/unit/zena/use/i18n_test.rb +32 -5
- data/test/unit/zena/use/query_node_test.rb +13 -1
- data/zena.gemspec +25 -11
- metadata +24 -10
@@ -246,4 +246,4 @@ all_course_emp_dates_paginate:
|
|
246
246
|
ref_date: 2004-03-01
|
247
247
|
# in 6 months = before 2004-09-01
|
248
248
|
src: "<r:all_course_emp_dates where='last_date is null or (repeat_every is not null and next_date lt REF_DATE + 6 month)' order='priority desc, log_at asc, node_name ASC' limit='3' paginate='p'><r:link page='list'/> <r:each join=',' do='node_name'/>"
|
249
|
-
res: "/1 <a.*>2</a> <a.*>3</a> <a.*>4</a> resp_management, secure_a_site, team_motivation/"
|
249
|
+
res: "/1 <a.*>2</a> <a.*>3</a> <a.*>4</a> resp_management, secure_a_site, team_motivation/"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
it_should_compile_custom_select:
|
2
|
+
context:
|
3
|
+
node_name: '@node'
|
4
|
+
node: roger
|
5
|
+
visitor: complex_admin
|
6
|
+
site: complex
|
7
|
+
ref_date: 2004-09-01
|
8
|
+
src: "<r:emp_form_dates do='each' join=', '><r:show attr='node_name'/>(<r:priority/>)</r:emp_form_dates>"
|
9
|
+
res: 'secureASite(10), winchUsage(10), dangerousTransportations(10), engine(5), transmitInformation(5), fiberJunction(5), formulateProblems(5), radioUsage(1)'
|
10
|
+
|
11
|
+
it_should_group_by_custom_select:
|
12
|
+
context:
|
13
|
+
node_name: '@node'
|
14
|
+
node: roger
|
15
|
+
visitor: complex_admin
|
16
|
+
site: complex
|
17
|
+
ref_date: 2004-09-01
|
18
|
+
src: "<r:emp_form_dates do='group' by='priority' do='each_group' join=', '><r:show attr='priority'/></r:emp_form_dates>"
|
19
|
+
res: '10, 5, 1'
|
@@ -55,4 +55,65 @@ show_date_foo:
|
|
55
55
|
lang: fr
|
56
56
|
src: "<r:show eval='date' format='%A %d.%m.%Y'/>"
|
57
57
|
tem: "/main_date/"
|
58
|
-
res: 'dimanche 16.05.2010'
|
58
|
+
res: 'dimanche 16.05.2010'
|
59
|
+
|
60
|
+
strftime:
|
61
|
+
src: "<p do='log_at.strftime(\"%d-%m\")'/>"
|
62
|
+
res: "<p>05-04</p>"
|
63
|
+
|
64
|
+
date_tformat:
|
65
|
+
context:
|
66
|
+
node: 'people'
|
67
|
+
lang: 'fr'
|
68
|
+
src: "<r:show date='created_at' tformat='%d %B %Y'/>"
|
69
|
+
tem: "<%= format_date(@node.created_at, :format => \"%d %B %Y\") %>"
|
70
|
+
res: "10 mars 2006"
|
71
|
+
|
72
|
+
date_tz:
|
73
|
+
context:
|
74
|
+
visitor: 'ant'
|
75
|
+
node: 'people'
|
76
|
+
lang: 'en'
|
77
|
+
src: "<r:show date='created_at' format='%H:%M'/> / <r:show date='created_at' format='%H:%M' tz='Asia/Jakarta'/>"
|
78
|
+
res: "01:00 / 07:00"
|
79
|
+
|
80
|
+
date_tz_field:
|
81
|
+
context:
|
82
|
+
node: nature
|
83
|
+
src: "<r:nodes do='each' join=', '><r:show attr='node_name'/>: <r:show date='created_at' format='%H:%M' tz='#{tz || \"Europe/Zurich\"}'/> | <r:show date='created_at' format='%H:%M' tz='UTC'/></r:nodes>"
|
84
|
+
res: "forest: 01:00 | 00:00, tree: 07:00 | 00:00"
|
85
|
+
|
86
|
+
date_fr:
|
87
|
+
context:
|
88
|
+
visitor: ant
|
89
|
+
lang: 'fr'
|
90
|
+
src: "<r:show date='created_at' format='%a'/>"
|
91
|
+
res: "ven"
|
92
|
+
|
93
|
+
date_fr_lang:
|
94
|
+
context:
|
95
|
+
lang: 'fr'
|
96
|
+
old_src: "<r:show date='created_at' format='%a' lang='en'/>"
|
97
|
+
src: "<r:show attr='created_at' format='%a' lang='en'/>"
|
98
|
+
tem: "<%= format_date(@node.created_at, :lang => \"en\", :format => \"%a\") %>"
|
99
|
+
res: "Fri"
|
100
|
+
|
101
|
+
date_context:
|
102
|
+
old_src: "<r:date select='2008-03-02'><r:show date='current_date' format='%A %d.%m.%Y'/></r:date>"
|
103
|
+
src: "<r:show eval='parse_date(\"2008-03-02\")' format='%A %d.%m.%Y'/>"
|
104
|
+
res: "Sunday 02.03.2008"
|
105
|
+
|
106
|
+
date_from_params:
|
107
|
+
context:
|
108
|
+
year: 1975
|
109
|
+
old_src: "<r:date select='[param:year]-01-01'><r:show date='current_date' format='%A %d.%m.%Y'/></r:date>"
|
110
|
+
src: "<r:show eval='parse_date(\"#{params[:year]}-01-01\")' format='%A %d.%m.%Y'/>"
|
111
|
+
tem: "<%= format_date(parse_date(\"#{params[:year]}-01-01\"), :format => \"%A %d.%m.%Y\") %>"
|
112
|
+
res: "Wednesday 01.01.1975"
|
113
|
+
|
114
|
+
date_from_params_in_query:
|
115
|
+
context:
|
116
|
+
year: 2006
|
117
|
+
src: "<r:date text='#{params[:year]}/04/03' format='%Y/%m/%d' do='show' eval='date' format='%Y-%m-%d'/>"
|
118
|
+
tem: "/_zdate = \"#\{params\[:year\]\}/04/03\".to_utc\(\"%Y/%m/%d\"\) -%>/"
|
119
|
+
res: "2006-04-03"
|
@@ -63,21 +63,21 @@ show_live_no_tag:
|
|
63
63
|
|
64
64
|
show_format:
|
65
65
|
old_src: "<b do='[id]' format='%.2f'/>"
|
66
|
-
src: "<b do='
|
66
|
+
src: "<b do='id' format='%.2f'/>"
|
67
67
|
res: "<b>22.00</b>"
|
68
68
|
|
69
69
|
show_format_nil:
|
70
70
|
context:
|
71
71
|
node: 'bird_jpg'
|
72
72
|
old_src: "<b do='[d_id]' format='%.2f'/>"
|
73
|
-
src: "<b do='
|
73
|
+
src: "<b do='weight' format='%.2f'/>"
|
74
74
|
res: "<b>0.00</b>"
|
75
75
|
|
76
76
|
show_format_hide_zero:
|
77
77
|
context:
|
78
78
|
node: 'bird_jpg'
|
79
79
|
old_src: "<b do='[d_id]' format='%.2f' zero='hide'/>"
|
80
|
-
src: "<b do='
|
80
|
+
src: "<b do='weight' format='%.2f' zero='hide'/>"
|
81
81
|
res: "<b></b>"
|
82
82
|
|
83
83
|
show_edit_preview:
|
@@ -93,7 +93,7 @@ title_in_version_context:
|
|
93
93
|
|
94
94
|
show_shortcut:
|
95
95
|
old_src: "<p do='[title]'>hello</p>"
|
96
|
-
src: "<p do='
|
96
|
+
src: "<p do='title'>hello</p>"
|
97
97
|
tem: "<p><%= @node.prop['title'] %></p>"
|
98
98
|
res: "<p>status title</p>"
|
99
99
|
|
@@ -14,6 +14,24 @@ add_btn:
|
|
14
14
|
</table>"
|
15
15
|
res: "/<tr class='btn_add' id='list1_add'><td><b><a href='#' onclick/"
|
16
16
|
|
17
|
+
form_put:
|
18
|
+
# default should be a put method
|
19
|
+
src: "<r:form></r:form>"
|
20
|
+
tem: "/form_for.*:url.*node_path\(@node\.zip\)/"
|
21
|
+
res: '/<form action="/nodes/\d+".*method="post".*input name="_method" type="hidden" value="put"/'
|
22
|
+
|
23
|
+
form_post:
|
24
|
+
# Should make a post on new objects
|
25
|
+
src: "<r:new klass='Post' title='Joe'><r:form></r:form></r:new>"
|
26
|
+
tem: "/if var1 = new_instance\(\"Post\", :title => \"Joe\"\)/"
|
27
|
+
res: "!/\"put\"/"
|
28
|
+
|
29
|
+
new:
|
30
|
+
# Should accept allowed params (from class and roles) and transform ids to zip (back and forth)
|
31
|
+
src: "<r:new klass='Letter' title='Joe' parent_id='#{project.id}' paper='white' origin='Mars' bad='value'><r:form><r:input name='title'/> <r:input name='parent_id'/></r:form></r:new>"
|
32
|
+
tem: "/:title => \"Joe\", :parent_id => .*@node.project.zip.*, :paper => \"white\", :origin => \"Mars\"/"
|
33
|
+
res: "/<input type='text' name='node\[title\]' value='Joe'/> <input type='text' name='node\[parent_id\]' value='21'/><div class='hidden'><input type='hidden' name='node\[klass\]' value='Letter'/><input type='hidden' name='node\[paper\]' value='white'/><input type='hidden' name='node\[origin\]' value='Mars'/></div>/"
|
34
|
+
|
17
35
|
translate_id_to_zip:
|
18
36
|
src: "<b do='hot_id'/><i do='parent_id'/>"
|
19
37
|
tem: "<b><%= @node.rel[\"hot\"].try(:other_zip) %></b><i><%= @node.parent_zip %></i>"
|
@@ -48,12 +66,6 @@ select_nodes_show_attr:
|
|
48
66
|
src: "<r:form><r:select name='title' nodes='images in site' attr='ext' show='title'/></r:form>"
|
49
67
|
res: "/name=.node\[title\].>.*<option value=\"jpg\">flower</option>\n<option value=\"jpg\">it's a lake</option>/"
|
50
68
|
|
51
|
-
select_nodes_data_list:
|
52
|
-
context:
|
53
|
-
node: status
|
54
|
-
src: "<r:data><r:each><r:form><select nodes='projects in site' name='node_a_id'/></r:form></r:each></r:data>"
|
55
|
-
res: "/option\s* value=.29.\s* selected=.selected.>wiki/"
|
56
|
-
|
57
69
|
select_time_zone:
|
58
70
|
src: "<r:form><r:select type='time_zone' name='d_tz'/></r:form>"
|
59
71
|
res: "/Asia/Jakarta.*Europe/Zurich.*US/Hawai"
|
@@ -127,4 +139,4 @@ input_new:
|
|
127
139
|
show_in_form:
|
128
140
|
src: "<r:form><b do='title'/></r:form>"
|
129
141
|
tem: "/<b><%= @node.prop\['title'\] %></b>/"
|
130
|
-
res: '/<b>status title</b>/'
|
142
|
+
res: '/<b>status title</b>/'
|
@@ -78,10 +78,18 @@ trans_attr:
|
|
78
78
|
res: "english"
|
79
79
|
|
80
80
|
trans_text_dyn_string:
|
81
|
+
context:
|
82
|
+
lang: 'fr'
|
81
83
|
src: "<r:trans text='lang_#{ref_lang}'/>"
|
82
84
|
tem: "<%= trans(\"lang_#{@node.ref_lang}\") %>"
|
83
85
|
res: "lang_en"
|
84
86
|
|
87
|
+
trans_rubyless_dyn_string:
|
88
|
+
context:
|
89
|
+
lang: 'fr'
|
90
|
+
src: "<r:load dictionary='/default/translations'><p do='t(\"lang_#{ref_lang}\")'/></r:load>"
|
91
|
+
res: "<p>anglais</p>"
|
92
|
+
|
85
93
|
trans_literal_string:
|
86
94
|
src: "<r:trans text='e#{\"\"}n'/>"
|
87
95
|
tem: "english"
|
@@ -104,4 +112,51 @@ complex_lang_list:
|
|
104
112
|
<ul do='site.lang_list'>
|
105
113
|
<li do='each' class='#{this == visitor.lang ? "on" : "off"}' do='zen_path(@node, :lang => this)'/>
|
106
114
|
</ul>
|
107
|
-
res: "/li class='on'>/oo/projects/cleanWater/page22.html\?lang=en</"
|
115
|
+
res: "/li class='on'>/oo/projects/cleanWater/page22.html\?lang=en</"
|
116
|
+
|
117
|
+
html_lang_and_dict:
|
118
|
+
src: "<html xmlns='http://www.w3.org/1999/xhtml' lang='#{v.lang}' do='load' dictionary='/default/translations' xml:lang='en'></html>"
|
119
|
+
res: "<html xmlns='http://www.w3.org/1999/xhtml' lang='en'></html>"
|
120
|
+
|
121
|
+
dictionary_fr:
|
122
|
+
context:
|
123
|
+
lang: 'fr'
|
124
|
+
src: "<r:load dictionary='/default/translations'><r:trans>foo</r:trans>: <r:t>I love</r:t> <r:trans>words</r:trans></r:load>"
|
125
|
+
tem: "<% _zdict = load_dictionary(828931430) -%>foo: j'aime les mots"
|
126
|
+
res: "foo: j'aime les mots"
|
127
|
+
|
128
|
+
dynamic_dictionary_eval_fr:
|
129
|
+
context:
|
130
|
+
lang: 'fr'
|
131
|
+
node: status
|
132
|
+
src: "<r:load dictionary='/default/translations'><r:eval>trans(node_name)</r:eval></r:load>"
|
133
|
+
tem: "<% _zdict = load_dictionary(828931430) -%><%= _zdict.get(@node.node_name) %>"
|
134
|
+
res: "statut"
|
135
|
+
|
136
|
+
dynamic_dictionary_t_fr:
|
137
|
+
context:
|
138
|
+
lang: 'fr'
|
139
|
+
node: status
|
140
|
+
src: "<r:load dictionary='/default/translations'><r:t attr='node_name'/></r:load>"
|
141
|
+
tem: "<% _zdict = load_dictionary(828931430) -%><%= _zdict.get(@node.node_name) %>"
|
142
|
+
res: "statut"
|
143
|
+
|
144
|
+
dynamic_dictionary_literal_fr:
|
145
|
+
context:
|
146
|
+
lang: 'fr'
|
147
|
+
node: status
|
148
|
+
src: "<r:load dictionary='/default/translations'><r:eval>trans('status')</r:eval></r:load>"
|
149
|
+
tem: "<% _zdict = load_dictionary(828931430) -%>statut"
|
150
|
+
res: "statut"
|
151
|
+
|
152
|
+
dictionary_de:
|
153
|
+
context:
|
154
|
+
lang: 'de'
|
155
|
+
src: "<r:load dictionary='/default/translations'><r:trans>foo</r:trans>: <r:trans>I love</r:trans> <r:trans>words</r:trans></r:load>"
|
156
|
+
tem: "<% _zdict = load_dictionary(828931430) -%>foo: Ich liebe Wörter"
|
157
|
+
res: "foo: Ich liebe Wörter"
|
158
|
+
|
159
|
+
dictionary_tformat:
|
160
|
+
src: "<r:load dictionary='/default/translations'><r:show date='created_at' tformat='date_format'/></r:load>"
|
161
|
+
tem: "<% _zdict = load_dictionary(828931430) -%><%= format_date(@node.created_at, :format => \"[%d.%m]\") %>"
|
162
|
+
res: "[10.03]"
|
@@ -28,4 +28,26 @@ each_in_each_dom_id:
|
|
28
28
|
# [swap] needs to be reimplemented
|
29
29
|
swap_in_each:
|
30
30
|
src: "<r:pages><li do='each'><span do='swap' attr='origin' states='todo,done,alert'/></li></r:pages>"
|
31
|
-
tem: "/<li id='list1_<%= var1.zip %>'><span>.*var1.can_write?.*tag_to_remote.*else.*var1.version.dyn\[\"status\"\]/"
|
31
|
+
tem: "/<li id='list1_<%= var1.zip %>'><span>.*var1.can_write?.*tag_to_remote.*else.*var1.version.dyn\[\"status\"\]/"
|
32
|
+
|
33
|
+
|
34
|
+
# [ajax] zazen edit=true (maybe should implement in zafu_attributes with filter_edit)
|
35
|
+
zazen_edit:
|
36
|
+
src: "<r:zazen attr='node_name' edit='true'/>"
|
37
|
+
tem: "<div class='zazen' id='list1_name'><% if @node.can_write? -%><span class='zazen_edit'><%= link_to_remote(\"edit\", :url => edit_node_path(@node.zip) + \"?attribute=name&dom_id=list1_name&zazen=true\", :method => :get) %></span><% end -%><%= zazen(@node.node_name, :node=>@node) %></div>"
|
38
|
+
res: "/div class='zazen' id='list1_name'>.*Ajax\.Request\('/nodes/22/edit\?attribute=name/"
|
39
|
+
|
40
|
+
zazen_edit_publish_force:
|
41
|
+
src: "<r:zazen attr='node_name' edit='true' publish='force'/>"
|
42
|
+
tem: "/attribute=node_name&dom_id=.*_node_name&publish=force&zazen=true/"
|
43
|
+
|
44
|
+
zazen_edit_publish_true:
|
45
|
+
src: "<r:zazen attr='node_name' edit='true' publish='true'/>"
|
46
|
+
tem: "/attribute=node_name&dom_id=.*_node_name&publish=true&zazen=true/"
|
47
|
+
|
48
|
+
# Update query builder for DataEntry
|
49
|
+
select_nodes_data_list:
|
50
|
+
context:
|
51
|
+
node: status
|
52
|
+
src: "<r:data><r:each><r:form><select nodes='projects in site' name='node_a_id'/></r:form></r:each></r:data>"
|
53
|
+
res: "/option\s* value=.29.\s* selected=.selected.>wiki/"
|
@@ -336,7 +336,7 @@ else:
|
|
336
336
|
|
337
337
|
incompatible_else:
|
338
338
|
src: "<r:letters where='node_name = 1' in='site' else='this' do='each' join=',' do='node_name'/>"
|
339
|
-
tem: "
|
339
|
+
tem: "/Incompatible.*\(Node\).*finder \(\[Letter\]\)/"
|
340
340
|
|
341
341
|
where_not:
|
342
342
|
context:
|
@@ -25,4 +25,32 @@ show_property_filter_role_has_role:
|
|
25
25
|
|
26
26
|
show_bad_role:
|
27
27
|
src: "<r:Foo>abc</r:Foo>"
|
28
|
-
tem: "/Invalid role or class 'Foo'/"
|
28
|
+
tem: "/Invalid role or class 'Foo'/"
|
29
|
+
|
30
|
+
form_with_all_roles:
|
31
|
+
context:
|
32
|
+
node: tree_jpg
|
33
|
+
src: |
|
34
|
+
<r:possible_roles>
|
35
|
+
<fieldset do='each'>
|
36
|
+
<legend do='name'/>
|
37
|
+
<ul do='columns'>
|
38
|
+
<li do='each'><label do='name'/> <r:input/></li>
|
39
|
+
</ul>
|
40
|
+
</fieldset>
|
41
|
+
</r:possible_roles>
|
42
|
+
res: "/label.weight.*node\[weight\].*origin.*value='Big Bang'.*assigned/"
|
43
|
+
|
44
|
+
show_all_properties:
|
45
|
+
context:
|
46
|
+
node: tree_jpg
|
47
|
+
src: |
|
48
|
+
<r:roles>
|
49
|
+
<fieldset do='each'>
|
50
|
+
<legend do='name'/>
|
51
|
+
<ul do='columns'>
|
52
|
+
<li do='each' do='if' test='@node.send(name)'><label do='name'/> <r:eval>@node.send(name)</r:eval></li>
|
53
|
+
</ul>
|
54
|
+
</fieldset>
|
55
|
+
</r:roles>
|
56
|
+
res: "/<label>origin</label> Big Bang</li>/"
|
@@ -137,7 +137,8 @@ test_negative_value:
|
|
137
137
|
tem: "<div class='<%= ((@node.custom_a==-10)) ? ' off' : '' %>'>...</div>"
|
138
138
|
|
139
139
|
anchor_attribute:
|
140
|
-
|
140
|
+
# Use to_s so that the method executed replaces the dummy text.
|
141
|
+
src: "<p do='id.to_s' anchor='#{node_name}'>hello</p>"
|
141
142
|
res: "<a class='anchor' name='status'></a><p>22</p>"
|
142
143
|
|
143
144
|
anchor_true:
|
@@ -25,21 +25,23 @@ class ZafuCompilerTest < Zena::Controller::TestCase
|
|
25
25
|
'zafu_attributes',
|
26
26
|
'zazen',
|
27
27
|
'security',
|
28
|
+
'ajax',
|
29
|
+
'complex_ok',
|
30
|
+
'forms',
|
28
31
|
]
|
29
32
|
|
30
33
|
BUG = [
|
31
|
-
'ajax',
|
32
34
|
'apphelper',
|
33
35
|
'basic',
|
34
36
|
'complex',
|
35
37
|
'data',
|
36
38
|
'eval',
|
37
|
-
'
|
39
|
+
'complex',
|
38
40
|
]
|
39
41
|
|
40
42
|
LATER = %w{later}
|
41
43
|
|
42
|
-
yamltest :directories => ([:default] + Bricks.zafu_tests), :files => OK
|
44
|
+
yamltest :directories => ([:default] + Bricks.zafu_tests), :files => OK
|
43
45
|
|
44
46
|
Section # make sure we load Section links before trying relations
|
45
47
|
|
data/test/sites/zena/columns.yml
CHANGED
data/test/sites/zena/roles.yml
CHANGED
data/test/sites/zena/sites.yml
CHANGED
@@ -175,6 +175,7 @@ cleanWater_en:
|
|
175
175
|
prop:
|
176
176
|
assigned: gaspard
|
177
177
|
tz: Asia/Jakarta
|
178
|
+
foo: Some old legacy stuff
|
178
179
|
title: Clean Water project
|
179
180
|
|
180
181
|
|
@@ -420,6 +421,7 @@ tree_jpg_en:
|
|
420
421
|
summary: "photography © André Karwath 2004"
|
421
422
|
text: ""
|
422
423
|
origin: Big Bang
|
424
|
+
tz: Asia/Jakarta
|
423
425
|
cached_role_ids: Original
|
424
426
|
content_type: image/jpeg
|
425
427
|
ext: jpg
|
data/test/unit/node_test.rb
CHANGED
@@ -1027,22 +1027,31 @@ done: \"I am done\""
|
|
1027
1027
|
end
|
1028
1028
|
|
1029
1029
|
def test_classes_for_form
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1030
|
+
Node.get_class('Tag')
|
1031
|
+
assert_equal [
|
1032
|
+
["Page", "Page"],
|
1033
|
+
[" Project", "Project"],
|
1034
|
+
[" Section", "Section"],
|
1035
|
+
[" Skin", "Skin"],
|
1036
|
+
[" Tag", "Tag"],
|
1037
|
+
], Node.classes_for_form(:class=>'Page', :without=>'Document')
|
1034
1038
|
end
|
1035
1039
|
|
1036
1040
|
def test_change_to_classes_for_form
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
+
Node.get_class('Tag')
|
1042
|
+
assert_equal [
|
1043
|
+
["Page", "Page"],
|
1044
|
+
[" Project", "Project"],
|
1045
|
+
[" Section", "Section"],
|
1046
|
+
[" Skin", "Skin"],
|
1047
|
+
[" Tag", "Tag"],
|
1048
|
+
], Project.classes_for_form(:class=>'Page', :without=>'Document')
|
1041
1049
|
end
|
1042
1050
|
|
1043
1051
|
def test_allowed_change_to_classes
|
1052
|
+
Node.get_class('Tag')
|
1044
1053
|
node_changes = Node.allowed_change_to_classes.reject{|k| k[/Dummy/]} # In case we are testing after Secure
|
1045
|
-
assert_equal %w{Node Note Letter Post Page Project Section Skin Reference}, node_changes
|
1054
|
+
assert_equal %w{Node Note Letter Post Page Project Section Skin Tag Reference}, node_changes
|
1046
1055
|
|
1047
1056
|
assert_equal node_changes, Page.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1048
1057
|
assert_equal node_changes, Project.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
@@ -1447,4 +1456,13 @@ done: \"I am done\""
|
|
1447
1456
|
note = secure(Node) { nodes(:opening) }
|
1448
1457
|
assert_equal %w{text title}, note.parse_keys.sort
|
1449
1458
|
end
|
1459
|
+
|
1460
|
+
def test_safe_send
|
1461
|
+
node = secure(Node) { nodes(:status) }
|
1462
|
+
assert_equal 'safe_send("title")', RubyLess.translate(Node, 'send("title")')
|
1463
|
+
|
1464
|
+
assert_equal 'status title', node.safe_send("title")
|
1465
|
+
assert_equal nodes_zip(:status).to_s, node.safe_send("id")
|
1466
|
+
assert_equal nil, node.safe_send("object_id")
|
1467
|
+
end
|
1450
1468
|
end
|