zena 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. data/History.txt +38 -1
  2. data/app/controllers/documents_controller.rb +7 -5
  3. data/app/controllers/nodes_controller.rb +47 -6
  4. data/app/controllers/user_sessions_controller.rb +12 -3
  5. data/app/controllers/virtual_classes_controller.rb +8 -2
  6. data/app/models/acl.rb +5 -2
  7. data/app/models/cached_page.rb +5 -5
  8. data/app/models/column.rb +27 -4
  9. data/app/models/group.rb +1 -1
  10. data/app/models/node.rb +106 -24
  11. data/app/models/note.rb +2 -1
  12. data/app/models/relation.rb +9 -4
  13. data/app/models/relation_proxy.rb +2 -2
  14. data/app/models/role.rb +12 -5
  15. data/app/models/site.rb +10 -9
  16. data/app/models/skin.rb +8 -0
  17. data/app/models/string_hash.rb +65 -0
  18. data/app/models/text_document.rb +1 -1
  19. data/app/models/user.rb +2 -0
  20. data/app/models/virtual_class.rb +43 -10
  21. data/app/views/comments/create.rjs +1 -32
  22. data/app/views/comments/edit.rjs +1 -1
  23. data/app/views/comments/update.rjs +1 -1
  24. data/app/views/documents/show.rhtml +1 -1
  25. data/app/views/groups/_form.rhtml +7 -0
  26. data/app/views/groups/_li.rhtml +1 -1
  27. data/app/views/nodes/500.html +2 -1
  28. data/app/views/nodes/destroy.rjs +2 -0
  29. data/app/views/sites/jobs.erb +2 -3
  30. data/app/views/templates/document_create_tabs/_file.rhtml +1 -1
  31. data/app/views/templates/document_create_tabs/_import.rhtml +4 -1
  32. data/app/views/templates/document_create_tabs/_template.rhtml +3 -0
  33. data/app/views/templates/document_create_tabs/_text_document.rhtml +3 -0
  34. data/app/views/versions/custom_tab.rhtml +1 -1
  35. data/app/views/versions/edit.rhtml +1 -1
  36. data/bricks/acls/lib/bricks/acls.rb +3 -3
  37. data/bricks/acls/zena/test/unit/acl_test.rb +15 -0
  38. data/bricks/fs_skin/lib/bricks/fs_skin.rb +190 -0
  39. data/bricks/fs_skin/zena/init.rb +1 -0
  40. data/bricks/fs_skin/zena/migrate/20110702010330_add_fs_skin_to_idx_templates.rb +12 -0
  41. data/bricks/{static → fs_skin}/zena/skins/blog/Image-edit.zafu +0 -0
  42. data/bricks/{static → fs_skin}/zena/skins/blog/Image.zafu +0 -0
  43. data/bricks/{static → fs_skin}/zena/skins/blog/Node-+index.zafu +0 -0
  44. data/bricks/{static → fs_skin}/zena/skins/blog/Node-+notFound.zafu +0 -0
  45. data/bricks/{static → fs_skin}/zena/skins/blog/Node-+search.zafu +0 -0
  46. data/bricks/{static → fs_skin}/zena/skins/blog/Node.zafu +1 -1
  47. data/bricks/{static → fs_skin}/zena/skins/blog/Post.zafu +0 -0
  48. data/bricks/{static → fs_skin}/zena/skins/blog/Project--kml.zafu +0 -0
  49. data/bricks/{static → fs_skin}/zena/skins/blog/Project.zafu +0 -0
  50. data/bricks/{static → fs_skin}/zena/skins/blog/comments.zafu +0 -0
  51. data/bricks/{static → fs_skin}/zena/skins/blog/dict.yml +0 -0
  52. data/bricks/{static → fs_skin}/zena/skins/blog/img/dateBg.jpg +0 -0
  53. data/bricks/{static → fs_skin}/zena/skins/blog/img/header.png +0 -0
  54. data/bricks/{static → fs_skin}/zena/skins/blog/img/mapPin.png +0 -0
  55. data/bricks/{static → fs_skin}/zena/skins/blog/img/menu.gif +0 -0
  56. data/bricks/{static → fs_skin}/zena/skins/blog/img/menuover.gif +0 -0
  57. data/bricks/{static → fs_skin}/zena/skins/blog/img/style.css +0 -0
  58. data/bricks/fs_skin/zena/tasks.rb +26 -0
  59. data/bricks/{static/zena/test/integration/static_integration_test.rb → fs_skin/zena/test/integration/fs_skin_integration_test.rb} +6 -6
  60. data/bricks/fs_skin/zena/test/unit/fs_skin_test.rb +33 -0
  61. data/bricks/grid/lib/bricks/grid.rb +4 -3
  62. data/bricks/tags/lib/bricks/tags.rb +1 -7
  63. data/bricks/zena/zena/migrate/20120605091558_add_ssl_login_to_site.rb +7 -0
  64. data/bricks/zena/zena/migrate/20120630123551_add_auto_publish_to_group.rb +9 -0
  65. data/config/bricks.yml +3 -3
  66. data/config/gems.yml +2 -3
  67. data/lib/tasks/zena.rake +7 -3
  68. data/lib/zafu.rb +7 -0
  69. data/lib/zafu/all.rb +21 -0
  70. data/lib/zafu/compiler.rb +7 -0
  71. data/lib/zafu/controller_methods.rb +58 -0
  72. data/lib/zafu/handler.rb +57 -0
  73. data/lib/zafu/info.rb +4 -0
  74. data/lib/zafu/markup.rb +309 -0
  75. data/lib/zafu/mock_helper.rb +42 -0
  76. data/lib/zafu/node_context.rb +203 -0
  77. data/lib/zafu/ordered_hash.rb +53 -0
  78. data/lib/zafu/parser.rb +676 -0
  79. data/lib/zafu/parsing_rules.rb +382 -0
  80. data/lib/zafu/process/ajax.rb +530 -0
  81. data/lib/zafu/process/conditional.rb +92 -0
  82. data/lib/zafu/process/context.rb +186 -0
  83. data/lib/zafu/process/forms.rb +143 -0
  84. data/lib/zafu/process/html.rb +186 -0
  85. data/lib/zafu/process/ruby_less_processing.rb +321 -0
  86. data/lib/zafu/security.rb +15 -0
  87. data/lib/zafu/template.rb +25 -0
  88. data/lib/zafu/test_helper.rb +19 -0
  89. data/lib/zafu/view_methods.rb +6 -0
  90. data/lib/zena.rb +1 -1
  91. data/lib/zena/acts/enrollable.rb +1 -1
  92. data/lib/zena/app.rb +4 -17
  93. data/lib/zena/console.rb +18 -1
  94. data/lib/zena/core_ext/file_utils.rb +13 -1
  95. data/lib/zena/core_ext/fixnum.rb +4 -0
  96. data/lib/zena/core_ext/float.rb +7 -0
  97. data/lib/zena/deploy.rb +4 -2
  98. data/lib/zena/deploy/app_init.rhtml +2 -1
  99. data/lib/zena/deploy/database.rhtml +1 -1
  100. data/lib/zena/info.rb +1 -1
  101. data/lib/zena/parser/zazen_rules.rb +4 -4
  102. data/lib/zena/routes.rb +1 -1
  103. data/lib/zena/test_controller.rb +1 -1
  104. data/lib/zena/use.rb +14 -1
  105. data/lib/zena/use/action.rb +4 -2
  106. data/lib/zena/use/ajax.rb +86 -38
  107. data/lib/zena/use/authlogic.rb +16 -1
  108. data/lib/zena/use/calendar.rb +37 -17
  109. data/lib/zena/use/conditional.rb +2 -2
  110. data/lib/zena/use/context.rb +30 -9
  111. data/lib/zena/use/dates.rb +39 -3
  112. data/lib/zena/use/display.rb +6 -19
  113. data/lib/zena/use/forms.rb +100 -79
  114. data/lib/zena/use/i18n.rb +40 -16
  115. data/lib/zena/use/query_builder.rb +0 -6
  116. data/lib/zena/use/query_node.rb +17 -4
  117. data/lib/zena/use/relations.rb +1 -3
  118. data/lib/zena/use/rendering.rb +10 -8
  119. data/lib/zena/use/scope_index.rb +5 -1
  120. data/lib/zena/use/search.rb +2 -1
  121. data/lib/zena/use/urls.rb +82 -77
  122. data/lib/zena/use/workflow.rb +12 -4
  123. data/lib/zena/use/zafu_safe_definitions.rb +37 -9
  124. data/lib/zena/use/zafu_templates.rb +49 -20
  125. data/lib/zena/use/zazen.rb +6 -2
  126. data/locale/it/LC_MESSAGES/zena.mo +0 -0
  127. data/locale/it/zena.mo +0 -0
  128. data/locale/it/zena.po +1982 -0
  129. data/public/images/arrow_back.png +0 -0
  130. data/public/images/remove_tag.png +0 -0
  131. data/public/javascripts/grid.js +800 -199
  132. data/public/javascripts/window.js +1 -1
  133. data/public/javascripts/zena.js +130 -21
  134. data/public/stylesheets/grid.css +11 -2
  135. data/public/stylesheets/zena.css +2 -1
  136. data/test/custom_queries/complex.host.yml +5 -0
  137. data/test/fixtures/files/TestNode.zafu +36 -0
  138. data/test/functional/nodes_controller_test.rb +18 -1
  139. data/test/integration/zafu_compiler/action.yml +2 -2
  140. data/test/integration/zafu_compiler/ajax.yml +44 -26
  141. data/test/integration/zafu_compiler/asset.yml +12 -2
  142. data/test/integration/zafu_compiler/basic.yml +0 -16
  143. data/test/integration/zafu_compiler/calendar.yml +6 -6
  144. data/test/integration/zafu_compiler/complex_ok.yml +23 -1
  145. data/test/integration/zafu_compiler/conditional.yml +5 -5
  146. data/test/integration/zafu_compiler/context.yml +6 -5
  147. data/test/integration/zafu_compiler/dates.yml +23 -2
  148. data/test/integration/zafu_compiler/display.yml +46 -2
  149. data/test/integration/zafu_compiler/errors.yml +2 -2
  150. data/test/integration/zafu_compiler/eval.yml +35 -7
  151. data/test/integration/zafu_compiler/forms.yml +47 -13
  152. data/test/integration/zafu_compiler/i18n.yml +2 -2
  153. data/test/integration/zafu_compiler/meta.yml +35 -1
  154. data/test/integration/zafu_compiler/query.yml +23 -4
  155. data/test/integration/zafu_compiler/relations.yml +10 -6
  156. data/test/integration/zafu_compiler/roles.yml +4 -4
  157. data/test/integration/zafu_compiler/rubyless.yml +11 -1
  158. data/test/integration/zafu_compiler/safe_definitions.yml +23 -5
  159. data/test/integration/zafu_compiler/security.yml +10 -6
  160. data/test/integration/zafu_compiler/urls.yml +23 -6
  161. data/test/integration/zafu_compiler/zafu_attributes.yml +1 -1
  162. data/test/integration/zafu_compiler/zazen.yml +14 -0
  163. data/test/selenium/Add/add3.rsel +8 -8
  164. data/test/selenium/Destroy/0setup.rsel +12 -0
  165. data/test/selenium/Destroy/destroy1.rsel +16 -0
  166. data/test/selenium/Edit/edit2.rsel +9 -9
  167. data/test/selenium/Edit/edit5.rsel +9 -9
  168. data/test/selenium/Edit/edit6.rsel +9 -9
  169. data/test/selenium/Form/form4.rsel +17 -0
  170. data/test/selenium/Toggle/toggle1.rsel +2 -0
  171. data/test/selenium/Toggle/toggle2.rsel +18 -0
  172. data/test/sites/zena/columns.yml +3 -0
  173. data/test/sites/zena/versions.yml +7 -0
  174. data/test/unit/cached_page_test.rb +13 -13
  175. data/test/unit/column_test.rb +26 -0
  176. data/test/unit/node_test.rb +16 -1
  177. data/test/unit/project_test.rb +6 -1
  178. data/test/unit/relation_test.rb +1 -1
  179. data/test/unit/role_test.rb +1 -1
  180. data/test/unit/string_hash_test.rb +30 -0
  181. data/test/unit/virtual_class_test.rb +31 -17
  182. data/test/unit/zafu_markup_test.rb +414 -0
  183. data/test/unit/zafu_node_context_test.rb +375 -0
  184. data/test/unit/zafu_ordered_hash_test.rb +69 -0
  185. data/test/unit/zena/acts/enrollable_test.rb +1 -1
  186. data/test/unit/zena/parser/zafu_asset.yml +0 -10
  187. data/test/unit/zena/parser/zazen.yml +1 -1
  188. data/test/unit/zena/parser_test.rb +1 -72
  189. data/test/unit/zena/use/dates_test.rb +1 -1
  190. data/test/unit/zena/use/rendering_test.rb +24 -7
  191. data/test/unit/zena/use/scope_index_test.rb +17 -0
  192. data/test/unit/zena/use/zazen_test.rb +2 -1
  193. data/zena.gemspec +71 -37
  194. metadata +104 -83
  195. data/app/views/nodes/destroy.erb +0 -0
  196. data/bricks/static/lib/bricks/static.rb +0 -151
  197. data/bricks/static/zena/init.rb +0 -1
  198. data/bricks/static/zena/migrate/20110702010330_add_static_to_idx_templates.rb +0 -12
  199. data/bricks/static/zena/test/unit/static_test.rb +0 -33
  200. data/lib/zena/parser/zafu_rules.rb +0 -244
  201. data/lib/zena/parser/zafu_tags.rb +0 -198
  202. data/lib/zena/parser/zena_rules.rb +0 -23
@@ -0,0 +1,69 @@
1
+ require 'test_helper'
2
+
3
+ class OrderedHashTest < Test::Unit::TestCase
4
+
5
+ context 'An OrderedHash' do
6
+ setup do
7
+ @hash = Zafu::OrderedHash.new
8
+ @hash[:a] = 1
9
+ @hash[:c] = 2
10
+ @hash[:b] = 3
11
+ end
12
+
13
+ should 'keep keys in insertion order' do
14
+ assert_equal [:a, :c, :b], @hash.keys
15
+ end
16
+
17
+ should 'list each in insertion order' do
18
+ res = []
19
+ @hash.each do |k, v|
20
+ res << v
21
+ end
22
+ assert_equal [1, 2, 3], res
23
+ end
24
+
25
+ should 'remove entry on delete' do
26
+ @hash.delete(:c)
27
+ assert_equal [:a, :b], @hash.keys
28
+ end
29
+
30
+ context 'running through keys' do
31
+ should 'allow key alteration' do
32
+ @hash.keys.each do |k|
33
+ assert k != :d
34
+ @hash[:d] = 'x'
35
+ end
36
+ end
37
+ end
38
+
39
+ context 'running each' do
40
+ should 'allow key alteration' do
41
+ @hash.each do |k, v|
42
+ assert k != :d
43
+ @hash[:d] = 'x'
44
+ end
45
+ end
46
+ end
47
+
48
+ context 'with a duplicate' do
49
+ setup do
50
+ @dup = @hash.dup
51
+ end
52
+
53
+ should 'not alter duplicate on set' do
54
+ @hash[:d] = 4
55
+ assert_equal [:a, :c, :b], @dup.keys
56
+ end
57
+
58
+ should 'not alter duplicate on change' do
59
+ @hash[:a] = 10
60
+ assert_equal 1, @dup[:a]
61
+ end
62
+
63
+ should 'not alter duplicate on delete' do
64
+ @hash.delete(:a)
65
+ assert_equal [:a, :c, :b], @dup.keys
66
+ end
67
+ end
68
+ end
69
+ end
@@ -139,7 +139,7 @@ class EnrollableTest < Zena::Unit::TestCase
139
139
  assert_kind_of Proc, type[:class]
140
140
  klass = type[:class].call[:class]
141
141
  assert_equal VirtualClass['Section'], klass
142
- assert_equal %w{assigned cached_role_ids origin summary text title tz weight}, klass.columns.keys.sort
142
+ assert_equal %w{assigned cached_role_ids origin settings summary text title tz weight}, klass.columns.keys.sort
143
143
  end
144
144
  end # A safe method returning a sub-class of Node
145
145
 
@@ -31,13 +31,3 @@ change_script_src:
31
31
  <script src='/test_script/functions.js' type='text/javascript'>
32
32
  var = 'hello world!'
33
33
  </script>
34
-
35
- change_style_url:
36
- src: |
37
- <style>
38
- #super { background:url('images/logo.png');}
39
- </style>
40
- res: |
41
- <style>
42
- #super { background:url('/test_/images/logo.png');}
43
- </style>
@@ -215,4 +215,4 @@ wiki_link_partial_url:
215
215
 
216
216
  make_asset:
217
217
  src: "my email: [email]bob@example.com[/email]."
218
- res: "<p>my email: [make_asset asset_tag:|email| content:|bob@example.com| output:|html|].</p>"
218
+ res: "<p>my email: [make_asset asset_tag:|email| content:|bob@example.com| output:|html|].</p>"
@@ -79,11 +79,8 @@ class ParserTest < Test::Unit::TestCase
79
79
  class ParserTestHelper < Zena::Parser::DummyHelper
80
80
  include ParserTest::Mock
81
81
  end
82
- yamltest :files => [:zafu, :zafu_asset, :zafu_insight, :zazen] #, :options => {:latex => {:module => :zazen, :output => 'latex'}}
82
+ yamltest :files => [:zazen] #, :options => {:latex => {:module => :zazen, :output => 'latex'}}
83
83
  MODULES = {
84
- :zafu => [Zena::Parser::ZafuRules, Zena::Parser::ZafuTags, ZafuTestTags],
85
- :zafu_asset => [Zena::Parser::ZafuRules, Zena::Parser::ZafuTags, ZafuTestTags],
86
- :zafu_insight => [Zena::Parser::ZafuRules, Zena::Parser::ZafuTags, ZafuTestTags],
87
84
  :zazen => [Zena::Parser::ZazenRules, Zena::Parser::ZazenTags],
88
85
  }
89
86
  @@test_parsers = {}
@@ -103,10 +100,6 @@ class ParserTest < Test::Unit::TestCase
103
100
  end
104
101
  end
105
102
 
106
- def test_single
107
- yt_do_test('zafu', 'only_hello')
108
- end
109
-
110
103
  def test_zazen_image_no_image
111
104
  file = 'zazen'
112
105
  test = 'image_no_image'
@@ -116,69 +109,5 @@ class ParserTest < Test::Unit::TestCase
116
109
  assert_equal @@test_strings[file][test]['res'], res
117
110
  end
118
111
 
119
- def test_all_descendants
120
- block = @@test_parsers['zafu'].new(
121
- "<r:pages><r:each><b do='test'/></r:each><r:add><p><i do='add_link'/><b do='title'/></p></r:add><b do='title'/></r:pages>",
122
- :helper => ParserTestHelper.new(@@test_strings['basic'])
123
- )
124
- assert_equal ['add', 'add_link', 'each', 'pages', 'test', 'title'], block.all_descendants.keys.sort
125
- assert_equal 2, block.all_descendants['title'].size
126
- assert_equal ['add_link', 'title'], block.descendant('add').all_descendants.keys.sort
127
- end
128
-
129
- def test_descendants
130
- block = @@test_parsers['zafu'].new(
131
- "<r:pages><r:each><b do='test'/></r:each><r:add><p><i do='add_link'/><b do='title'/></p></r:add><b do='title'/></r:pages>",
132
- :helper => ParserTestHelper.new(@@test_strings['basic'])
133
- )
134
- assert_equal 2, block.descendants('title').size
135
- assert_equal ['test'], block.descendants('each')[0].descendants('test').map {|n| n.method}
136
- assert_equal [], block.descendants('each')[0].descendants('foo')
137
- end
138
-
139
- def test_ancestor
140
- block = @@test_parsers['zafu'].new(
141
- "<r:pages><r:each><b do='test'/></r:each><r:add><p><i do='add_link'/><b do='title'/></p></r:add><b do='title'/></r:pages>",
142
- :helper => ParserTestHelper.new(@@test_strings['basic'])
143
- )
144
- sub_block = block.descendant('add_link')
145
- assert_equal ['void', 'pages', 'add'], sub_block.ancestors.map{|a| a.method}
146
- assert_equal sub_block.ancestor('pages'), block.descendant('pages')
147
- end
148
-
149
- def test_public_descendants
150
- block = @@test_parsers['zafu'].new(
151
- "<r:pages><r:each><b do='test'/></r:each><r:add><p><i do='add_link'/><b do='title'/></p></r:add><b do='title'/></r:pages>",
152
- :helper => ParserTestHelper.new(@@test_strings['basic'])
153
- )
154
- block.all_descendants.merge('self'=>[block]).each do |k,blocks|
155
- blocks.each do |b|
156
- b.send(:remove_instance_variable, :@all_descendants)
157
- class << b
158
- def public_descendants
159
- if ['each'].include?(@method)
160
- {}
161
- else
162
- super
163
- end
164
- end
165
- end
166
- end
167
- end
168
- assert_equal ['add', 'add_link', 'each', 'pages', 'title'], block.all_descendants.keys.sort
169
- assert_equal ['test'], block.descendant('each').all_descendants.keys.sort
170
- end
171
-
172
- def test_root
173
- block = @@test_parsers['zafu'].new(
174
- "<r:pages><r:each><b do='test'/></r:each><r:add><p><i do='add_link'/><b do='title'/></p></r:add><b do='title'/></r:pages>",
175
- :helper => ParserTestHelper.new(@@test_strings['basic'])
176
- )
177
- sub_block = block.descendant('add_link')
178
- assert_equal 'add_link', sub_block.method
179
- assert_equal 'add', sub_block.parent.method
180
- assert_equal block, sub_block.root
181
- end
182
-
183
112
  yt_make
184
113
  end
@@ -5,7 +5,7 @@ class DatesTest < Zena::View::TestCase
5
5
  def test_date_box
6
6
  login(:anon)
7
7
  visiting(:status)
8
- assert_match %r{span class="date_box".*img src="\/calendar\/iconCalendar.gif".*input id='datef.*' name='node\[updated_at\]' type='text' value='2006-04-11 00:00'}m, date_box(@node, 'updated_at')
8
+ assert_match %r{span class="date_box".*img src="\/calendar\/iconCalendar.gif".*input id='datef.*' name='node\[updated_at\]' type='text' value='2006-04-11 00:00'}m, date_box(@node, 'node[updated_at]', :value => @node.updated_at)
9
9
  end
10
10
 
11
11
  # see dates.yml
@@ -10,11 +10,21 @@ class RenderingTest < Zena::View::TestCase
10
10
  context 'resolving template_url' do
11
11
 
12
12
  should 'append host and insert lang on template_path_from_template_url' do
13
- assert_equal '/test.host/zafu/SKIN/TEMPLATE/en/DOM_ID', template_path_from_template_url('SKIN/TEMPLATE/DOM_ID')
13
+ assert_equal '/test.host/zafu/SKIN/TEMPLATE/en/DOM_ID.erb', template_path_from_template_url('', 'SKIN/TEMPLATE/DOM_ID', false)
14
+ end
15
+
16
+ should 'build template on template_path_from_template_url' do
17
+ fullpath = fullpath_from_template_url('wiki skin/Page-changes/_main', false)
18
+ if File.exist?(fullpath)
19
+ FileUtils.rm(fullpath)
20
+ end
21
+ assert_equal '/test.host/zafu/wiki skin/Page-changes/en/foo.erb', template_path_from_template_url('', 'wiki skin/Page-changes/foo', true)
22
+ assert File.exist?(fullpath)
23
+ FileUtils.rm(fullpath)
14
24
  end
15
25
 
16
26
  should 'return a fullpath on fullpath_from_template_url' do
17
- assert_equal "#{SITES_ROOT}/test.host/zafu/SKIN/TEMPLATE/en/DOM_ID", fullpath_from_template_url('SKIN/TEMPLATE/DOM_ID')
27
+ assert_equal "#{SITES_ROOT}/test.host/zafu/SKIN/TEMPLATE/en/DOM_ID.erb", fullpath_from_template_url('SKIN/TEMPLATE/DOM_ID', false)
18
28
  end
19
29
 
20
30
  should 'return a relative path on admin_layout' do
@@ -149,7 +159,7 @@ class RenderingInControllerTest < Zena::Controller::TestCase
149
159
  login(:anon)
150
160
  # render page to build template
151
161
  get 'show', :path => ["section#{nodes_zip(:people)}_#{@mode}.html"], :prefix => 'en'
152
- assert_equal "<div id='foo'>hello people</div>", @response.body
162
+ assert_equal "<div id='foo' data-z='12'>hello people</div>", @response.body
153
163
  end
154
164
 
155
165
  should 'execute Element update' do
@@ -158,7 +168,7 @@ class RenderingInControllerTest < Zena::Controller::TestCase
158
168
  :t_url => 'Default skin/Node-ins/foo',
159
169
  :dom_id => 'foo',
160
170
  }
161
- assert_equal %Q{Element.replace("foo", "\\u003Cdiv id='foo'\\u003Ehello people\\u003C/div\\u003E");\n}, @response.body
171
+ assert_equal %Q{Element.replace(\"foo\", \"\\u003Cdiv id='foo' data-z='12'\\u003Ehello people\\u003C/div\\u003E\");\n}, @response.body
162
172
  end
163
173
 
164
174
  context 'with insert' do
@@ -169,7 +179,7 @@ class RenderingInControllerTest < Zena::Controller::TestCase
169
179
  :dom_id => 'foo',
170
180
  :insert => 'bottom',
171
181
  }
172
- assert_equal %Q{Zena.insert_inner("foo", "bottom", "\\u003Cdiv id='foo'\\u003Ehello people\\u003C/div\\u003E");\n}, @response.body
182
+ assert_equal %Q{Zena.insert_inner(\"foo\", \"bottom\", \"\\u003Cdiv id='foo' data-z='12'\\u003Ehello people\\u003C/div\\u003E\");\n}, @response.body
173
183
  end
174
184
  end # with insert
175
185
  end # to update
@@ -179,12 +189,12 @@ class RenderingInControllerTest < Zena::Controller::TestCase
179
189
  subject do
180
190
  login(:lion)
181
191
  # create template for 'special' mode
182
- t = secure(Template) { Template.create(:parent_id => nodes_id(:default), :title => 'Node-bar.zafu', :text => @zafu, :v_status => Zena::Status::Pub) }
192
+ @template = secure(Template) { Template.create(:parent_id => nodes_id(:default), :title => 'Node-bar.zafu', :text => @zafu, :v_status => Zena::Status::Pub) }
183
193
  login(:anon)
184
194
  {:action => 'show', :controller => 'nodes', :path => ["section#{nodes_zip(:people)}_bar.html"], :prefix => 'en'}
185
195
  end
186
196
 
187
- should 'type and disposition headers' do
197
+ should 'set type and disposition headers' do
188
198
  @zafu = %q{<r:headers X-Foobar='my thing' Content-Type='text/css' Content-Disposition='attachment; filename=special_#{title}.csv'/>}
189
199
  get_subject
190
200
  assert_response :success
@@ -196,6 +206,13 @@ class RenderingInControllerTest < Zena::Controller::TestCase
196
206
  assert_equal v, @response.headers[k]
197
207
  end
198
208
  end
209
+
210
+ should 'find master template' do
211
+ @zafu = %q{MASTER_TEMPLATE[<r:master_template do='id'/>]}
212
+ get_subject
213
+ assert_response :success
214
+ assert_equal "MASTER_TEMPLATE[#{@template.zip}]", @response.body
215
+ end
199
216
  end # Custom rendering options
200
217
 
201
218
  end
@@ -99,6 +99,23 @@ class ScopeIndexTest < Zena::Unit::TestCase
99
99
  end
100
100
  end # deleting a sub node
101
101
 
102
+ context 'deleting a node' do
103
+ subject do
104
+ blog = nil
105
+ assert_difference('IdxProject.count', 1) do
106
+ blog = secure(Node) { Node.create_node(:parent_id => @project.zip, :v_status => Zena::Status::Pub, :klass => 'Blog', :title => 'Life threat') }
107
+ end
108
+ blog
109
+ end
110
+
111
+ should 'rebuild target indexes' do
112
+ node = subject
113
+ assert_difference('IdxProject.count', -1) do
114
+ node.destroy
115
+ end
116
+ end
117
+ end # deleting a sub node
118
+
102
119
  context 'moving a sub node' do
103
120
  subject do
104
121
  secure(Node) { VirtualClass['Contact'].create_instance(:first_name => 'Friedrich', :name => 'Hölderlin', :parent_id => nodes_id(:zena), :v_status => Zena::Status::Pub) }
@@ -28,6 +28,7 @@ class ZazenTest < Zena::View::TestCase
28
28
  def test_make_link
29
29
  # * ["":34] creates a link to node 34 with node's title.
30
30
  assert_equal '<p><a href="/en/projects-list/Clean-Water-project">Clean Water project</a></p>', zazen('"":21')
31
+ assert_equal '<p><a href="/en/projects-list/Clean-Water-project" target="_blank">Clean Water project</a></p>', zazen('"":21', :target => "_blank")
31
32
  # * ["title":34] creates a link to node 34 with the given title.
32
33
  assert_equal '<p><a href="/en/projects-list/Clean-Water-project">hello</a></p>', zazen('"hello":21')
33
34
  # * ["":034] if the node id starts with '0', creates a popup link.
@@ -243,7 +244,7 @@ class ZazenTest < Zena::View::TestCase
243
244
 
244
245
  def test_table_asset
245
246
  login(:tiger)
246
- assert_match %r{<table data-a='node\[shopping_list\]'.*class='grid'}m, zazen("This is a table test:\n\n|shopping_list|")
247
+ assert_match %r{<table id='grid[^']+' data-a='node\[shopping_list\]'.*class='grid'}m, zazen("This is a table test:\n\n|shopping_list|")
247
248
  end
248
249
 
249
250
  # only works if recaptcha plugin is installed
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{zena}
8
- s.version = "1.2.1"
8
+ s.version = "1.2.2"
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{2012-05-01}
12
+ s.date = %q{2012-08-30}
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}
@@ -86,6 +86,7 @@ Gem::Specification.new do |s|
86
86
  "app/models/section.rb",
87
87
  "app/models/site.rb",
88
88
  "app/models/skin.rb",
89
+ "app/models/string_hash.rb",
89
90
  "app/models/template.rb",
90
91
  "app/models/template_content.rb",
91
92
  "app/models/template_version.rb",
@@ -188,7 +189,7 @@ Gem::Specification.new do |s|
188
189
  "app/views/nodes/_show_attr.rhtml",
189
190
  "app/views/nodes/clear_order.rjs",
190
191
  "app/views/nodes/create.rjs",
191
- "app/views/nodes/destroy.erb",
192
+ "app/views/nodes/destroy.rjs",
192
193
  "app/views/nodes/drive.rjs",
193
194
  "app/views/nodes/drop.rjs",
194
195
  "app/views/nodes/edit.html.erb",
@@ -298,6 +299,29 @@ Gem::Specification.new do |s|
298
299
  "bricks/captcha/lib/bricks/captcha.rb",
299
300
  "bricks/captcha/zena/init.rb",
300
301
  "bricks/captcha/zena/test/zafu/captcha.yml",
302
+ "bricks/fs_skin/lib/bricks/fs_skin.rb",
303
+ "bricks/fs_skin/zena/init.rb",
304
+ "bricks/fs_skin/zena/migrate/20110702010330_add_fs_skin_to_idx_templates.rb",
305
+ "bricks/fs_skin/zena/skins/blog/Image-edit.zafu",
306
+ "bricks/fs_skin/zena/skins/blog/Image.zafu",
307
+ "bricks/fs_skin/zena/skins/blog/Node-+index.zafu",
308
+ "bricks/fs_skin/zena/skins/blog/Node-+notFound.zafu",
309
+ "bricks/fs_skin/zena/skins/blog/Node-+search.zafu",
310
+ "bricks/fs_skin/zena/skins/blog/Node.zafu",
311
+ "bricks/fs_skin/zena/skins/blog/Post.zafu",
312
+ "bricks/fs_skin/zena/skins/blog/Project--kml.zafu",
313
+ "bricks/fs_skin/zena/skins/blog/Project.zafu",
314
+ "bricks/fs_skin/zena/skins/blog/comments.zafu",
315
+ "bricks/fs_skin/zena/skins/blog/dict.yml",
316
+ "bricks/fs_skin/zena/skins/blog/img/dateBg.jpg",
317
+ "bricks/fs_skin/zena/skins/blog/img/header.png",
318
+ "bricks/fs_skin/zena/skins/blog/img/mapPin.png",
319
+ "bricks/fs_skin/zena/skins/blog/img/menu.gif",
320
+ "bricks/fs_skin/zena/skins/blog/img/menuover.gif",
321
+ "bricks/fs_skin/zena/skins/blog/img/style.css",
322
+ "bricks/fs_skin/zena/tasks.rb",
323
+ "bricks/fs_skin/zena/test/integration/fs_skin_integration_test.rb",
324
+ "bricks/fs_skin/zena/test/unit/fs_skin_test.rb",
301
325
  "bricks/grid/lib/bricks/grid.rb",
302
326
  "bricks/grid/zena/init.rb",
303
327
  "bricks/math/lib/bricks/math.rb",
@@ -345,28 +369,6 @@ Gem::Specification.new do |s|
345
369
  "bricks/spreadsheet/zena/test/unit/xlsx_test.rb",
346
370
  "bricks/spreadsheet/zena/test/zafu/README",
347
371
  "bricks/spreadsheet/zena/test/zafu/spreadsheet.yml",
348
- "bricks/static/lib/bricks/static.rb",
349
- "bricks/static/zena/init.rb",
350
- "bricks/static/zena/migrate/20110702010330_add_static_to_idx_templates.rb",
351
- "bricks/static/zena/skins/blog/Image-edit.zafu",
352
- "bricks/static/zena/skins/blog/Image.zafu",
353
- "bricks/static/zena/skins/blog/Node-+index.zafu",
354
- "bricks/static/zena/skins/blog/Node-+notFound.zafu",
355
- "bricks/static/zena/skins/blog/Node-+search.zafu",
356
- "bricks/static/zena/skins/blog/Node.zafu",
357
- "bricks/static/zena/skins/blog/Post.zafu",
358
- "bricks/static/zena/skins/blog/Project--kml.zafu",
359
- "bricks/static/zena/skins/blog/Project.zafu",
360
- "bricks/static/zena/skins/blog/comments.zafu",
361
- "bricks/static/zena/skins/blog/dict.yml",
362
- "bricks/static/zena/skins/blog/img/dateBg.jpg",
363
- "bricks/static/zena/skins/blog/img/header.png",
364
- "bricks/static/zena/skins/blog/img/mapPin.png",
365
- "bricks/static/zena/skins/blog/img/menu.gif",
366
- "bricks/static/zena/skins/blog/img/menuover.gif",
367
- "bricks/static/zena/skins/blog/img/style.css",
368
- "bricks/static/zena/test/integration/static_integration_test.rb",
369
- "bricks/static/zena/test/unit/static_test.rb",
370
372
  "bricks/tags/README",
371
373
  "bricks/tags/lib/bricks/tags.rb",
372
374
  "bricks/tags/zena/init.rb",
@@ -394,6 +396,8 @@ Gem::Specification.new do |s|
394
396
  "bricks/zena/zena/migrate/20110710113731_remove_icon_field.rb",
395
397
  "bricks/zena/zena/migrate/20111101103900_add_comment_to_columns.rb",
396
398
  "bricks/zena/zena/migrate/20111214112233_add_comment_to_relations.rb",
399
+ "bricks/zena/zena/migrate/20120605091558_add_ssl_login_to_site.rb",
400
+ "bricks/zena/zena/migrate/20120630123551_add_auto_publish_to_group.rb",
397
401
  "config/boot.rb",
398
402
  "config/bricks.yml",
399
403
  "config/database_example.yml",
@@ -563,6 +567,28 @@ Gem::Specification.new do |s|
563
567
  "lib/tasks/zena.rake",
564
568
  "lib/tasks/zena.rb",
565
569
  "lib/upload_progress_server.rb",
570
+ "lib/zafu.rb",
571
+ "lib/zafu/all.rb",
572
+ "lib/zafu/compiler.rb",
573
+ "lib/zafu/controller_methods.rb",
574
+ "lib/zafu/handler.rb",
575
+ "lib/zafu/info.rb",
576
+ "lib/zafu/markup.rb",
577
+ "lib/zafu/mock_helper.rb",
578
+ "lib/zafu/node_context.rb",
579
+ "lib/zafu/ordered_hash.rb",
580
+ "lib/zafu/parser.rb",
581
+ "lib/zafu/parsing_rules.rb",
582
+ "lib/zafu/process/ajax.rb",
583
+ "lib/zafu/process/conditional.rb",
584
+ "lib/zafu/process/context.rb",
585
+ "lib/zafu/process/forms.rb",
586
+ "lib/zafu/process/html.rb",
587
+ "lib/zafu/process/ruby_less_processing.rb",
588
+ "lib/zafu/security.rb",
589
+ "lib/zafu/template.rb",
590
+ "lib/zafu/test_helper.rb",
591
+ "lib/zafu/view_methods.rb",
566
592
  "lib/zazen_parser.rb",
567
593
  "lib/zena.rb",
568
594
  "lib/zena/acts/enrollable.rb",
@@ -579,6 +605,7 @@ Gem::Specification.new do |s|
579
605
  "lib/zena/core_ext/dir.rb",
580
606
  "lib/zena/core_ext/file_utils.rb",
581
607
  "lib/zena/core_ext/fixnum.rb",
608
+ "lib/zena/core_ext/float.rb",
582
609
  "lib/zena/core_ext/string.rb",
583
610
  "lib/zena/crypto_provider/initial.rb",
584
611
  "lib/zena/db.rb",
@@ -608,11 +635,8 @@ Gem::Specification.new do |s|
608
635
  "lib/zena/loader/yaml_loader.rb",
609
636
  "lib/zena/migrator.rb",
610
637
  "lib/zena/parser.rb",
611
- "lib/zena/parser/zafu_rules.rb",
612
- "lib/zena/parser/zafu_tags.rb",
613
638
  "lib/zena/parser/zazen_rules.rb",
614
639
  "lib/zena/parser/zazen_tags.rb",
615
- "lib/zena/parser/zena_rules.rb",
616
640
  "lib/zena/refactor/act_as_content.rb",
617
641
  "lib/zena/remote.rb",
618
642
  "lib/zena/remote/connection.rb",
@@ -682,6 +706,9 @@ Gem::Specification.new do |s|
682
706
  "locale/fr/LC_MESSAGES/zena.mo",
683
707
  "locale/fr/zena.mo",
684
708
  "locale/fr/zena.po",
709
+ "locale/it/LC_MESSAGES/zena.mo",
710
+ "locale/it/zena.mo",
711
+ "locale/it/zena.po",
685
712
  "locale/log.txt",
686
713
  "locale/zena.pot",
687
714
  "misc/zena",
@@ -764,6 +791,7 @@ Gem::Specification.new do |s|
764
791
  "public/images/application_view_tile.png",
765
792
  "public/images/application_xp.png",
766
793
  "public/images/application_xp_terminal.png",
794
+ "public/images/arrow_back.png",
767
795
  "public/images/arrow_branch.png",
768
796
  "public/images/arrow_divide.png",
769
797
  "public/images/arrow_down.png",
@@ -1500,6 +1528,7 @@ Gem::Specification.new do |s|
1500
1528
  "public/images/project.png",
1501
1529
  "public/images/rails.png",
1502
1530
  "public/images/rainbow.png",
1531
+ "public/images/remove_tag.png",
1503
1532
  "public/images/report.png",
1504
1533
  "public/images/report_add.png",
1505
1534
  "public/images/report_delete.png",
@@ -1976,6 +2005,8 @@ Gem::Specification.new do |s|
1976
2005
  "test/selenium/Add/add1.rsel",
1977
2006
  "test/selenium/Add/add2.rsel",
1978
2007
  "test/selenium/Add/add3.rsel",
2008
+ "test/selenium/Destroy/0setup.rsel",
2009
+ "test/selenium/Destroy/destroy1.rsel",
1979
2010
  "test/selenium/Drop/0setup.rsel",
1980
2011
  "test/selenium/Drop/drop1.rsel",
1981
2012
  "test/selenium/Drop/drop2.rsel",
@@ -1996,6 +2027,7 @@ Gem::Specification.new do |s|
1996
2027
  "test/selenium/Form/form1.rsel",
1997
2028
  "test/selenium/Form/form2.rsel",
1998
2029
  "test/selenium/Form/form3.rsel",
2030
+ "test/selenium/Form/form4.rsel",
1999
2031
  "test/selenium/Grid/0setup.rsel",
2000
2032
  "test/selenium/Grid/grid1.rsel",
2001
2033
  "test/selenium/Paginate/0setup.rsel",
@@ -2005,6 +2037,7 @@ Gem::Specification.new do |s|
2005
2037
  "test/selenium/Swap/swap2.rsel",
2006
2038
  "test/selenium/Toggle/0setup.rsel",
2007
2039
  "test/selenium/Toggle/toggle1.rsel",
2040
+ "test/selenium/Toggle/toggle2.rsel",
2008
2041
  "test/sites/README",
2009
2042
  "test/sites/complex/columns.yml",
2010
2043
  "test/sites/complex/complex.png",
@@ -2072,6 +2105,7 @@ Gem::Specification.new do |s|
2072
2105
  "test/unit/section_test.rb",
2073
2106
  "test/unit/site_test.rb",
2074
2107
  "test/unit/skin_test.rb",
2108
+ "test/unit/string_hash_test.rb",
2075
2109
  "test/unit/template_test.rb",
2076
2110
  "test/unit/template_version_test.rb",
2077
2111
  "test/unit/text_document_content_test.rb",
@@ -2081,6 +2115,9 @@ Gem::Specification.new do |s|
2081
2115
  "test/unit/version_test.rb",
2082
2116
  "test/unit/virtual_class_test.rb",
2083
2117
  "test/unit/workflow_test.rb",
2118
+ "test/unit/zafu_markup_test.rb",
2119
+ "test/unit/zafu_node_context_test.rb",
2120
+ "test/unit/zafu_ordered_hash_test.rb",
2084
2121
  "test/unit/zena/acts/enrollable_test.rb",
2085
2122
  "test/unit/zena/acts/secure_test.rb",
2086
2123
  "test/unit/zena/acts/serializable_test.rb",
@@ -2436,10 +2473,9 @@ Gem::Specification.new do |s|
2436
2473
  s.add_runtime_dependency(%q<httparty>, ["= 0.7.8"])
2437
2474
  s.add_runtime_dependency(%q<simple_xlsx_writer>, [">= 0"])
2438
2475
  s.add_runtime_dependency(%q<rubyless>, ["= 0.8.6"])
2439
- s.add_runtime_dependency(%q<property>, ["= 2.2.0"])
2476
+ s.add_runtime_dependency(%q<property>, ["= 2.3.2"])
2440
2477
  s.add_runtime_dependency(%q<uuidtools>, ["= 2.0.0"])
2441
2478
  s.add_runtime_dependency(%q<authlogic>, ["= 2.1.3"])
2442
- s.add_runtime_dependency(%q<zafu>, ["= 0.8.6"])
2443
2479
  s.add_runtime_dependency(%q<shoulda>, ["= 2.10.3"])
2444
2480
  s.add_runtime_dependency(%q<fast_gettext>, ["~> 0.4.16"])
2445
2481
  s.add_runtime_dependency(%q<syntax>, ["= 1.0.0"])
@@ -2455,7 +2491,7 @@ Gem::Specification.new do |s|
2455
2491
  s.add_runtime_dependency(%q<differ>, ["= 0.1.2"])
2456
2492
  s.add_runtime_dependency(%q<RedCloth>, ["= 3.0.4"])
2457
2493
  s.add_runtime_dependency(%q<open4>, [">= 0"])
2458
- s.add_runtime_dependency(%q<querybuilder>, ["= 1.1.0"])
2494
+ s.add_runtime_dependency(%q<querybuilder>, ["= 1.1.3"])
2459
2495
  else
2460
2496
  s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
2461
2497
  s.add_dependency(%q<tzinfo>, [">= 0"])
@@ -2463,10 +2499,9 @@ Gem::Specification.new do |s|
2463
2499
  s.add_dependency(%q<httparty>, ["= 0.7.8"])
2464
2500
  s.add_dependency(%q<simple_xlsx_writer>, [">= 0"])
2465
2501
  s.add_dependency(%q<rubyless>, ["= 0.8.6"])
2466
- s.add_dependency(%q<property>, ["= 2.2.0"])
2502
+ s.add_dependency(%q<property>, ["= 2.3.2"])
2467
2503
  s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
2468
2504
  s.add_dependency(%q<authlogic>, ["= 2.1.3"])
2469
- s.add_dependency(%q<zafu>, ["= 0.8.6"])
2470
2505
  s.add_dependency(%q<shoulda>, ["= 2.10.3"])
2471
2506
  s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
2472
2507
  s.add_dependency(%q<syntax>, ["= 1.0.0"])
@@ -2482,7 +2517,7 @@ Gem::Specification.new do |s|
2482
2517
  s.add_dependency(%q<differ>, ["= 0.1.2"])
2483
2518
  s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
2484
2519
  s.add_dependency(%q<open4>, [">= 0"])
2485
- s.add_dependency(%q<querybuilder>, ["= 1.1.0"])
2520
+ s.add_dependency(%q<querybuilder>, ["= 1.1.3"])
2486
2521
  end
2487
2522
  else
2488
2523
  s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
@@ -2491,10 +2526,9 @@ Gem::Specification.new do |s|
2491
2526
  s.add_dependency(%q<httparty>, ["= 0.7.8"])
2492
2527
  s.add_dependency(%q<simple_xlsx_writer>, [">= 0"])
2493
2528
  s.add_dependency(%q<rubyless>, ["= 0.8.6"])
2494
- s.add_dependency(%q<property>, ["= 2.2.0"])
2529
+ s.add_dependency(%q<property>, ["= 2.3.2"])
2495
2530
  s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
2496
2531
  s.add_dependency(%q<authlogic>, ["= 2.1.3"])
2497
- s.add_dependency(%q<zafu>, ["= 0.8.6"])
2498
2532
  s.add_dependency(%q<shoulda>, ["= 2.10.3"])
2499
2533
  s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
2500
2534
  s.add_dependency(%q<syntax>, ["= 1.0.0"])
@@ -2510,7 +2544,7 @@ Gem::Specification.new do |s|
2510
2544
  s.add_dependency(%q<differ>, ["= 0.1.2"])
2511
2545
  s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
2512
2546
  s.add_dependency(%q<open4>, [">= 0"])
2513
- s.add_dependency(%q<querybuilder>, ["= 1.1.0"])
2547
+ s.add_dependency(%q<querybuilder>, ["= 1.1.3"])
2514
2548
  end
2515
2549
  end
2516
2550