zena 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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