zena 1.2.3 → 1.2.4

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 (98) hide show
  1. data/History.txt +29 -1
  2. data/Rakefile +0 -1
  3. data/app/controllers/documents_controller.rb +1 -1
  4. data/app/controllers/nodes_controller.rb +34 -8
  5. data/app/controllers/sites_controller.rb +8 -1
  6. data/app/controllers/user_sessions_controller.rb +13 -3
  7. data/app/models/acl.rb +16 -0
  8. data/app/models/document.rb +33 -14
  9. data/app/models/idx_nodes_integer.rb +5 -0
  10. data/app/models/image.rb +16 -4
  11. data/app/models/node.rb +16 -3
  12. data/app/models/relation_proxy.rb +3 -3
  13. data/app/models/site.rb +11 -1
  14. data/app/models/string_hash.rb +1 -1
  15. data/app/models/template.rb +1 -1
  16. data/app/models/user.rb +6 -1
  17. data/app/models/virtual_class.rb +36 -1
  18. data/app/views/acls/_form.rhtml +5 -1
  19. data/app/views/acls/_li.rhtml +1 -1
  20. data/app/views/templates/document_create_tabs/_file.rhtml +1 -0
  21. data/app/views/templates/document_create_tabs/_template.rhtml +1 -1
  22. data/app/views/users/_form.rhtml +1 -0
  23. data/app/views/virtual_classes/_form.erb +8 -7
  24. data/bricks/acls/lib/bricks/acls.rb +43 -15
  25. data/bricks/acls/zena/migrate/20130313110443_add_create_kpath_to_acl.rb +13 -0
  26. data/bricks/acls/zena/migrate/20130429073432_fix_create_kpath_default.rb +8 -0
  27. data/bricks/acls/zena/test/integration/acl_integration_test.rb +53 -1
  28. data/bricks/acls/zena/test/sites/erebus/acls.yml +21 -0
  29. data/bricks/acls/zena/test/unit/acl_test.rb +35 -2
  30. data/bricks/math/lib/bricks/math.rb +1 -1
  31. data/bricks/sphinx/zena/tasks.rb +1 -1
  32. data/bricks/spreadsheet/lib/bricks/spreadsheet.rb +1 -1
  33. data/bricks/worker/zena/worker +25 -0
  34. data/config/environment.rb +1 -1
  35. data/config/environments/production.rb +1 -1
  36. data/config/gems.yml +6 -5
  37. data/lib/bricks/requirements_validation.rb +1 -1
  38. data/lib/log_recorder/lib/log_recorder.rb +1 -1
  39. data/lib/tasks/zena.rake +10 -2
  40. data/lib/zena.rb +4 -3
  41. data/lib/zena/app.rb +1 -0
  42. data/lib/zena/deploy/httpd.rhtml +2 -2
  43. data/lib/zena/deploy/template.rb +15 -5
  44. data/lib/zena/info.rb +1 -1
  45. data/lib/zena/parser/zazen_rules.rb +9 -2
  46. data/lib/zena/remote/connection.rb +2 -2
  47. data/lib/zena/remote/interface.rb +8 -2
  48. data/lib/zena/remote/node.rb +1 -1
  49. data/lib/zena/routes.rb +2 -1
  50. data/lib/zena/use/action.rb +8 -2
  51. data/lib/zena/use/ajax.rb +31 -20
  52. data/lib/zena/use/calendar.rb +2 -0
  53. data/lib/zena/use/conditional.rb +15 -14
  54. data/lib/zena/use/dates.rb +5 -2
  55. data/lib/zena/use/display.rb +3 -2
  56. data/lib/zena/use/forms.rb +36 -9
  57. data/lib/zena/use/i18n.rb +8 -2
  58. data/lib/zena/use/image_builder.rb +7 -0
  59. data/lib/zena/use/query_node.rb +24 -8
  60. data/lib/zena/use/relations.rb +2 -6
  61. data/lib/zena/use/rendering.rb +10 -6
  62. data/lib/zena/use/upload.rb +6 -4
  63. data/lib/zena/use/urls.rb +13 -5
  64. data/lib/zena/use/zafu_safe_definitions.rb +1 -1
  65. data/public/javascripts/grid.js +11 -2
  66. data/public/javascripts/upload-progress.js +5 -3
  67. data/public/javascripts/zena.js +6 -2
  68. data/public/stylesheets/upload-progress.css +1 -0
  69. data/test/fixtures/files/TestNode.zafu +2 -2
  70. data/test/fixtures/files/translations_fr.yml +2 -1
  71. data/test/functional/acls_controller_test.rb +6 -0
  72. data/test/functional/nodes_controller_test.rb +1 -1
  73. data/test/functional/sites_controller_test.rb +19 -0
  74. data/test/integration/navigation_test.rb +7 -0
  75. data/test/integration/query_node/filters.yml +10 -0
  76. data/test/integration/zafu_compiler/action.yml +8 -4
  77. data/test/integration/zafu_compiler/ajax.yml +4 -4
  78. data/test/integration/zafu_compiler/calendar.yml +8 -15
  79. data/test/integration/zafu_compiler/context.yml +1 -1
  80. data/test/integration/zafu_compiler/dates.yml +5 -1
  81. data/test/integration/zafu_compiler/display.yml +1 -2
  82. data/test/integration/zafu_compiler/forms.yml +37 -10
  83. data/test/integration/zafu_compiler/query.yml +5 -5
  84. data/test/integration/zafu_compiler/relations.yml +8 -8
  85. data/test/integration/zafu_compiler/safe_definitions.yml +7 -2
  86. data/test/integration/zafu_compiler/urls.yml +24 -3
  87. data/test/integration/zafu_compiler/zazen.yml +9 -1
  88. data/test/selenium/Destroy/destroy1.rsel +2 -1
  89. data/test/selenium/Destroy/destroy2.rsel +17 -0
  90. data/test/unit/document_test.rb +17 -4
  91. data/test/unit/relation_proxy_test.rb +19 -8
  92. data/test/unit/string_hash_test.rb +1 -1
  93. data/test/unit/template_test.rb +3 -3
  94. data/test/unit/virtual_class_test.rb +77 -0
  95. data/test/unit/zena/use/urls_test.rb +9 -1
  96. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +1 -1
  97. data/zena.gemspec +60 -53
  98. metadata +145 -125
@@ -33,7 +33,7 @@ icon:
33
33
  node: 'cleanWater'
34
34
  src: "<r:icon do='title'/>"
35
35
  tem: "/ORDER BY links.id DESC/"
36
- res: "it's a lake"
36
+ res: "it&#39;s a lake"
37
37
 
38
38
  pages:
39
39
  context:
@@ -91,7 +91,7 @@ pages_random:
91
91
 
92
92
  nodes_in_project:
93
93
  src: "<r:nodes in='project' limit='2'><r:each join=', '><r:show attr='title'/></r:each></r:nodes>"
94
- res: "it's a lake, Lake Tanganyika"
94
+ res: "it&#39;s a lake, Lake Tanganyika"
95
95
 
96
96
  nodes_in_project_stored:
97
97
  src: "<r:void set_foo='this'><r:node where='id = 29 in site'>from <r:show attr='title'/>, look at <r:foo do='title'/>: <r:foo do='pages in project' do='each' join=', ' do='title'/></r:node></r:void>"
@@ -289,7 +289,7 @@ projects:
289
289
 
290
290
  nodes:
291
291
  src: "<r:nodes in='project'><r:each join=', ' do='show' attr='title'/></r:nodes>"
292
- res: "it's a lake, Lake Tanganyika, parc opening, status title, water"
292
+ res: "it&#39;s a lake, Lake Tanganyika, parc opening, status title, water"
293
293
 
294
294
  menu_with_favorites:
295
295
  context:
@@ -348,7 +348,7 @@ where:
348
348
 
349
349
  where_like:
350
350
  src: "<r:images where='title like \"%ke\"' in='site' do='each' join=',' do='title'/>"
351
- res: "it's a lake"
351
+ res: "it&#39;s a lake"
352
352
 
353
353
  else:
354
354
  src: "<r:nodes where='id = 1' in='site' else='[this]' do='each' join=',' do='title'/>"
@@ -363,7 +363,7 @@ where_not:
363
363
  context:
364
364
  node: 'cleanWater'
365
365
  src: "<r:nodes where='title ne \"status title\"' do='each' join=',' do='title'/>"
366
- res: "it's a lake,Lake Tanganyika,parc opening,water"
366
+ res: "it&#39;s a lake,Lake Tanganyika,parc opening,water"
367
367
 
368
368
  where_two_attributes:
369
369
  src: "<r:nodes where='log_at ne event_at' in='site' do='each' join=', ' do='title'/>"
@@ -373,7 +373,7 @@ where_two_attributes:
373
373
  many_or:
374
374
  # old: or='images in site' or='tags in site'
375
375
  src: "<r:tagged in='site or images in site or tags in site' do='each' join=',' do='title'/>"
376
- res: "Art,bird,Clean Water project,flower,it's a lake,News list,parc opening,Top menu"
376
+ res: "Art,bird,Clean Water project,flower,it&#39;s a lake,News list,parc opening,Top menu"
377
377
 
378
378
  hot_or_page:
379
379
  context:
@@ -405,11 +405,11 @@ group_by_project_sort_zip:
405
405
  context:
406
406
  visitor: ant
407
407
  src: "<r:images in='site' order='zip ASC' do='group' by='project' sort='id'><b do='project' do='title'/>: <r:each join=', ' do='title'/></r:images>"
408
- res: "<b>Clean Water project</b>: it's a lake<b>a wiki with Zena</b>: bird, flower<b>Zena the wild CMS</b>: Autumn Tree"
408
+ res: "<b>Clean Water project</b>: it&#39;s a lake<b>a wiki with Zena</b>: bird, flower<b>Zena the wild CMS</b>: Autumn Tree"
409
409
 
410
410
  group_by_parent_sort:
411
411
  src: "<r:images in='site' order='title ASC' do='group' by='parent' sort='title'><b do='parent' do='title'/>: <r:each join=', ' do='title'/></r:images>"
412
- res: "<b>a wiki with Zena</b>: bird, flower<b>Clean Water project</b>: it's a lake"
412
+ res: "<b>a wiki with Zena</b>: bird, flower<b>Clean Water project</b>: it&#39;s a lake"
413
413
 
414
414
  nodes_in_site_group_by_year:
415
415
  old_src: "<r:nodes in='site' group='log_at:year' order='log_at:year asc, title ASC' do='each' join=', '><r:show attr='log_at' format='%Y'/></r:nodes>"
@@ -96,7 +96,7 @@ map_join:
96
96
  node: 'cleanWater'
97
97
  src: "<r:children do='map(\"title\").join(\",\")'/>"
98
98
  tem: "/var1.map\{\|_map_obj\| _map_obj.prop\['title'\]\}/"
99
- res: "crocodiles,it's a lake,The lake we love,parc opening,status title,water"
99
+ res: "crocodiles,it&#39;s a lake,The lake we love,parc opening,status title,water"
100
100
 
101
101
  sum:
102
102
  context:
@@ -145,7 +145,12 @@ range:
145
145
  x: 4
146
146
  src: "<r:void do='(0..params[:x].to_i).to_a'><span do='each' join=' ' do='this'/></r:void>"
147
147
  res: '<span>0</span> <span>1</span> <span>2</span> <span>3</span> <span>4</span>'
148
-
148
+
149
+ range_literal:
150
+ src: "<r:void do='(0..4).to_a'><span do='each' join=' ' do='this'/></r:void>"
151
+ tem: '/\(0..4\)/'
152
+ res: '<span>0</span> <span>1</span> <span>2</span> <span>3</span> <span>4</span>'
153
+
149
154
  hash_to_params:
150
155
  context:
151
156
  q:
@@ -187,10 +187,19 @@ encode_params:
187
187
  b: 'Bee'
188
188
  c: 'Sea'
189
189
  x: ''
190
- src: "<r:link encode_params='a,c,x,y'/>"
191
- tem: "/:encode_params => \"a,c,x,y\"/"
190
+ src: "<r:link encode_params='a,c,x,y,mode'/>"
191
+ tem: "/:encode_params => \"a,c,x,y,mode\"/"
192
192
  res: "/page22\.html\?a%5Bb%5D=Bee&c=Sea'/"
193
193
 
194
+ encode_params_mode:
195
+ context:
196
+ mode: 'print'
197
+ a: 'Sea'
198
+ b: ''
199
+ src: "<r:link encode_params='a,b,mode'/>"
200
+ tem: "/:encode_params => \"a,b,mode\"/"
201
+ res: "/page22_print\.html\?a=Sea'/"
202
+
194
203
  title_link_mode:
195
204
  old_src: "<h2 do='title' link='details'/>"
196
205
  src: "<h2 do='link' mode='details' do='title' live='true'/>"
@@ -264,7 +273,19 @@ target_blank:
264
273
 
265
274
  action_destroy:
266
275
  src: "<r:link action='destroy'/>"
267
- res: "<a data-confirm='Destroy status title ?' href='/nodes/22' onclick='return Zena.m(this,\"delete\")'>status title</a>"
276
+ res: "<a data-confirm='Destroy \"status title\" ?' href='/nodes/22' onclick='return Zena.m(this,\"delete\")'>status title</a>"
277
+
278
+ action_destroy_message_apos:
279
+ context:
280
+ p: "O'Hear"
281
+ src: "<r:link action='destroy' confirm='#{params[:p]}'/>"
282
+ res: "<a data-confirm='O&apos;Hear' href='/nodes/22' onclick='return Zena.m(this,\"delete\")'>status title</a>"
283
+
284
+ action_destroy_message_apos_remote:
285
+ context:
286
+ p: "O'Hear"
287
+ src: "<div id='foo' do='block'></div><r:link action='destroy' confirm='#{params[:p]}' update='foo'/>"
288
+ res: "/confirm\(this.getAttribute\(.data-confirm.\)\)/"
268
289
 
269
290
  action_publish:
270
291
  src: "<r:link action='publish'/>"
@@ -125,4 +125,12 @@ target:
125
125
  src: |
126
126
  <r:zazen text='"":12' target="foobar"/>
127
127
  tem: /:target => "foobar"/
128
- res: /<div class='zazen'><p><a .* target=\"foobar\"/
128
+ res: /<div class='zazen'><p><a .* target=\"foobar\"/
129
+
130
+ notextile_not_auth:
131
+ src: "<r:zazen text='<notextile>hello</notextile>'/>"
132
+ res: "<div class='zazen'></div>"
133
+
134
+ notextile_auth:
135
+ src: "<r:zazen notextile='true' text='<notextile>hello\nblah\nblah</notextile>'/>"
136
+ res: "<div class='zazen'>hello\nblah\nblah</div>"
@@ -4,11 +4,12 @@ verify_element_not_present 'destroy_destroy1'
4
4
 
5
5
  click 'css=img[alt=add]'
6
6
  type 'destroy_list1_title', 'destroy1'
7
+ type 'destroy_list1_summary', 'destroy1'
7
8
  click 'css=input[type=submit]'
8
9
  wait_for_element_present 'destroy_destroy1'
9
10
 
10
11
  click 'css=#destroy_destroy1 a'
11
- assert_confirmation 'Destroy destroy1 ?'
12
+ assert_confirmation 'Destroy "destroy1" ?'
12
13
  wait_for_element_not_present 'destroy_destroy1'
13
14
 
14
15
  # Reload
@@ -0,0 +1,17 @@
1
+ # Add first element
2
+ open '/oo/testnode37.html?test=destroy1'
3
+ verify_element_not_present 'destroy_destroy2'
4
+
5
+ click 'css=img[alt=add]'
6
+ type 'destroy_list1_title', "rock'n rol\"l"
7
+ type 'destroy_list1_summary', 'destroy2'
8
+ click 'css=input[type=submit]'
9
+ wait_for_element_present 'destroy_destroy2'
10
+
11
+ click 'css=#destroy_destroy2 a'
12
+ assert_confirmation 'Destroy "rock\'n rol"l" ?'
13
+ wait_for_element_not_present 'destroy_destroy2'
14
+
15
+ # Reload
16
+ open '/oo/testnode37.html?test=destroy2'
17
+ verify_element_not_present 'destroy_destroy2'
@@ -7,19 +7,32 @@ class DocumentTest < Zena::Unit::TestCase
7
7
  should 'return self on unknown content_type' do
8
8
  class Dummy < Document
9
9
  end
10
- assert_equal Dummy, Dummy.document_class_from_content_type('zorglub')
10
+ assert_equal 'DocumentTest::Dummy', Dummy.document_class_from_content_type('zorglub').to_s
11
11
  end
12
12
 
13
13
  should 'return Image on image types' do
14
- assert_equal Image, Document.document_class_from_content_type('image/png')
14
+ assert_equal 'Image', Document.document_class_from_content_type('image/png').to_s
15
15
  end
16
16
 
17
17
  should 'not return Image on svg' do
18
- assert_equal TextDocument, Document.document_class_from_content_type('image/svg+xml')
18
+ assert_equal 'TextDocument', Document.document_class_from_content_type('image/svg+xml').to_s
19
19
  end
20
20
 
21
21
  should 'return TextDocument on nil' do
22
- assert_equal TextDocument, Document.document_class_from_content_type(nil)
22
+ assert_equal 'TextDocument', Document.document_class_from_content_type(nil).to_s
23
+ end
24
+
25
+ should 'return matching content_type sub-class' do
26
+ login(:lion)
27
+ secure(VirtualClass) {
28
+ VirtualClass.create(
29
+ :superclass => 'TextDocument',
30
+ :name => 'HtmlDoc',
31
+ :create_group_id => groups_id(:public),
32
+ :content_type => 'text/html'
33
+ )}
34
+ assert_equal VirtualClass['HtmlDoc'], Document.document_class_from_content_type('text/html')
35
+ assert_equal VirtualClass['TextDocument'], Document.document_class_from_content_type('text/plain')
23
36
  end
24
37
  end
25
38
 
@@ -572,22 +572,33 @@ class RelationProxyTest < Zena::Unit::TestCase
572
572
  subject do
573
573
  node = secure(Node) { nodes(:cleanWater)}
574
574
  end
575
-
576
- setup do
575
+
576
+ should 'update with string list of ids' do
577
577
  login(:lion)
578
578
  node = secure(Node) { nodes(:cleanWater)}
579
579
  assert_difference('Link.count', 3) do
580
- node.update_attributes_with_transformation('reference_ids' => [:art, :menu, :bird_jpg].map {|s| nodes_zip(s)})
580
+ node.update_attributes_with_transformation('reference_ids' => [:art, :menu, :bird_jpg].map {|s| nodes_zip(s)}.join(', '))
581
581
  end
582
582
  end
583
+
584
+ context 'updating' do
583
585
 
584
- should 'use other_id to update status' do
585
- assert_difference('Link.count', 0) do
586
- assert subject.update_attributes_with_transformation('rel' => {'reference' => {'other_id' => nodes_zip(:art), :status => 100}})
587
- err subject
586
+ setup do
587
+ login(:lion)
588
+ node = secure(Node) { nodes(:cleanWater)}
589
+ assert_difference('Link.count', 3) do
590
+ node.update_attributes_with_transformation('reference_ids' => [:art, :menu, :bird_jpg].map {|s| nodes_zip(s)})
591
+ end
588
592
  end
589
593
 
590
- assert_equal 100, subject.find(:first, 'reference where l_status = 100').l_status
594
+ should 'use other_id to update status' do
595
+ assert_difference('Link.count', 0) do
596
+ assert subject.update_attributes_with_transformation('rel' => {'reference' => {'other_id' => nodes_zip(:art), :status => 100}})
597
+ err subject
598
+ end
599
+
600
+ assert_equal 100, subject.find(:first, 'reference where l_status = 100').l_status
601
+ end
591
602
  end
592
603
  end # With many links
593
604
  end
@@ -12,7 +12,7 @@ class StringHashTest < Test::Unit::TestCase
12
12
  end
13
13
 
14
14
  should 'convert to json' do
15
- assert_match %r{"json_class":"StringHash",\{"data":\{"b":"2","a":"1"|"a":"1","b":"2"\}\}|\{"data":\{"b":"2","a":"1"|"a":"1","b":"2"\},"json_class":"StringHash"\}}, subject.to_json
15
+ assert_match %r{"json_class":"StringHash","data":\{"b":"2","a":"1"|"a":"1","b":"2"\}|"data":\{"b":"2","a":"1"|"a":"1","b":"2"\},"json_class":"StringHash"}, subject.to_json
16
16
  end
17
17
 
18
18
  should 'create from json' do
@@ -123,7 +123,7 @@ class TemplateTest < Zena::Unit::TestCase
123
123
 
124
124
  context 'with a blank title' do
125
125
  subject do
126
- secure(Template) { Template.create(:parent_id=>nodes_id(:default), :target_klass => 'Section') }
126
+ secure(Template) { Template.create(:parent_id => nodes_id(:default), :target_klass => 'Section') }
127
127
  end
128
128
 
129
129
  should 'use target_klass as title' do
@@ -198,9 +198,9 @@ class TemplateTest < Zena::Unit::TestCase
198
198
  secure!(Document) { Document.create(:parent_id => nodes_id(:default), :title => 'sub.html')}
199
199
  end
200
200
 
201
- should 'create a Template' do
201
+ should 'create a TextDocument' do
202
202
  assert !subject.new_record?
203
- assert_kind_of Template, subject
203
+ assert_kind_of TextDocument, subject
204
204
  end
205
205
  end # with an html extension
206
206
 
@@ -60,6 +60,17 @@ class VirtualClassTest < Zena::Unit::TestCase
60
60
  assert !classes_for_form.include?("Page")
61
61
  assert !classes_for_form.include?("Reference")
62
62
  end
63
+
64
+ def test_sub_classes
65
+ # add a sub class
66
+ login(:lion)
67
+ vclass = VirtualClass.create(:superclass => 'Post', :name => 'Super', :create_group_id => groups_id(:public))
68
+ assert !vclass.new_record?
69
+
70
+ login(:anon)
71
+
72
+ assert_equal %w{Post Super}, VirtualClass['Post'].sub_classes.map(&:name)
73
+ end
63
74
 
64
75
  def test_post_classes_for_form_opt
65
76
  # add a sub class
@@ -808,8 +819,74 @@ class VirtualClassTest < Zena::Unit::TestCase
808
819
  should 'consider role methods as safe' do
809
820
  assert_equal Hash[:class=>String, :method=>"prop['assigned']", :nil=>true], subject.safe_method_type(['assigned'])
810
821
  end
822
+
823
+ # with content_type
824
+ #
811
825
  end # A virtual class
826
+
827
+ context 'Creating a virtual class' do
828
+ context 'with an admin visitor' do
829
+ setup do
830
+ login(:lion)
831
+ end
832
+
833
+ context 'with content_type' do
834
+ subject do
835
+ {
836
+ :superclass => 'Document',
837
+ :name => 'HtmlDoc',
838
+ :create_group_id => groups_id(:public),
839
+ :content_type => 'text/html'}
840
+ end
841
+
842
+ should 'save and create regexp' do
843
+ v = secure(VirtualClass) { VirtualClass.new(subject) }
844
+ assert v.save
845
+ assert_equal %r{^text/html$}, v.content_type_re
846
+ end
847
+
848
+ should 'add an error on bad content_type' do
849
+ v = secure(VirtualClass) { VirtualClass.new(subject.merge(:content_type => '(')) }
850
+ assert !v.save
851
+ assert_equal 'invalid characters', v.errors[:content_type]
852
+ end
853
+
854
+ end
855
+ end
856
+ end
857
+
858
+ context 'A Virtual class' do
859
+ context 'subclass of Document with content_type' do
860
+ setup do
861
+ login(:lion)
862
+ end
863
+
864
+ context 'with content_type' do
865
+ subject do
866
+ secure(VirtualClass) {
867
+ VirtualClass.create(
868
+ :superclass => 'TextDocument',
869
+ :name => 'HtmlDoc',
870
+ :create_group_id => groups_id(:public),
871
+ :content_type => 'text/html'
872
+ )}
873
+ end
812
874
 
875
+ should 'be used to create matching content_type documents' do
876
+ klass = subject
877
+ n = secure!(Document) { Document.create(
878
+ :parent_id => nodes_id(:cleanWater),
879
+ :content_type => 'text/html',
880
+ :file => uploaded_text('some.txt'))
881
+ }
882
+
883
+ assert !n.new_record?
884
+ assert_equal subject.name, n.klass
885
+ end
886
+ end
887
+ end
888
+ end
889
+
813
890
  context 'A visitor with write access' do
814
891
  setup do
815
892
  login(:tiger)
@@ -53,6 +53,14 @@ class UrlsTest < Zena::View::TestCase
53
53
  assert_equal '/en/projects-list/Clean-Water-project/page22.html?a%5Bb%5D=Bee&p=Pepe', zen_path(node, :encode_params => 'p,a')
54
54
  end
55
55
 
56
+ def test_zen_path_query_params_array
57
+ login(:anon)
58
+ node = secure!(Node) { nodes(:status) }
59
+ assert_equal '/en/projects-list/Clean-Water-project/page22.html?p=5', zen_path(node, :p => 5)
60
+ @params = {'p' => 'Pepe', 'b' => ['','bee','c','','dee']}
61
+ assert_equal '/en/projects-list/Clean-Water-project/page22.html?b%5B%5D=bee&b%5B%5D=c&b%5B%5D=dee&p=Pepe', zen_path(node, :encode_params => 'p,b')
62
+ end
63
+
56
64
  def test_zen_path_cache_stamp
57
65
  login(:ant)
58
66
  node = secure!(Node) { nodes(:zena) }
@@ -127,7 +135,7 @@ class UrlsTest < Zena::View::TestCase
127
135
  end
128
136
 
129
137
  def test_data_path_for_public_documents
130
- login(:ant)
138
+ login(:lion)
131
139
  node = secure!(Node) { nodes(:water_pdf) }
132
140
  assert_equal "/en/projects-list/Clean-Water-project/document25.pdf", data_path(node)
133
141
  node = secure!(Node) { nodes(:status) }
@@ -1,4 +1,4 @@
1
- require 'yaml'
1
+ require 'safe_yaml'
2
2
  require 'erb'
3
3
 
4
4
  class SeleniumOnRailsConfig
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{zena}
8
- s.version = "1.2.3"
8
+ s.version = "1.2.4"
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{2013-03-11}
12
+ s.date = %q{2013-06-13}
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}
@@ -68,6 +68,7 @@ Gem::Specification.new do |s|
68
68
  "app/models/group.rb",
69
69
  "app/models/idx_nodes_datetime.rb",
70
70
  "app/models/idx_nodes_float.rb",
71
+ "app/models/idx_nodes_integer.rb",
71
72
  "app/models/idx_nodes_ml_string.rb",
72
73
  "app/models/idx_nodes_string.rb",
73
74
  "app/models/idx_project.rb",
@@ -285,6 +286,8 @@ Gem::Specification.new do |s|
285
286
  "bricks/acls/zena/init.rb",
286
287
  "bricks/acls/zena/migrate/20110509141600_create_acls.rb",
287
288
  "bricks/acls/zena/migrate/20110627193757_add_allowed_mode_and_format_to_acl.rb",
289
+ "bricks/acls/zena/migrate/20130313110443_add_create_kpath_to_acl.rb",
290
+ "bricks/acls/zena/migrate/20130429073432_fix_create_kpath_default.rb",
288
291
  "bricks/acls/zena/test/integration/acl_integration_test.rb",
289
292
  "bricks/acls/zena/test/sites/erebus/acls.yml",
290
293
  "bricks/acls/zena/test/sites/erebus/groups.yml",
@@ -2011,6 +2014,7 @@ Gem::Specification.new do |s|
2011
2014
  "test/selenium/Add/add3.rsel",
2012
2015
  "test/selenium/Destroy/0setup.rsel",
2013
2016
  "test/selenium/Destroy/destroy1.rsel",
2017
+ "test/selenium/Destroy/destroy2.rsel",
2014
2018
  "test/selenium/Drop/0setup.rsel",
2015
2019
  "test/selenium/Drop/drop1.rsel",
2016
2020
  "test/selenium/Drop/drop2.rsel",
@@ -2473,84 +2477,87 @@ Gem::Specification.new do |s|
2473
2477
  s.specification_version = 3
2474
2478
 
2475
2479
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
2476
- s.add_runtime_dependency(%q<rails>, ["= 2.3.11"])
2477
- s.add_runtime_dependency(%q<differ>, ["= 0.1.2"])
2480
+ s.add_runtime_dependency(%q<tzinfo>, [">= 0"])
2478
2481
  s.add_runtime_dependency(%q<fast_gettext>, ["~> 0.4.16"])
2479
- s.add_runtime_dependency(%q<shoulda>, ["= 2.10.3"])
2480
- s.add_runtime_dependency(%q<open4>, [">= 0"])
2481
- s.add_runtime_dependency(%q<authlogic>, ["= 2.1.3"])
2482
- s.add_runtime_dependency(%q<querybuilder>, ["= 1.2.1"])
2482
+ s.add_runtime_dependency(%q<rubyless>, ["= 0.8.10"])
2483
2483
  s.add_runtime_dependency(%q<jeweler>, [">= 0"])
2484
- s.add_runtime_dependency(%q<yamltest>, ["= 0.7.0"])
2485
2484
  s.add_runtime_dependency(%q<json>, ["= 1.5.1"])
2485
+ s.add_runtime_dependency(%q<shoulda>, ["= 2.10.3"])
2486
+ s.add_runtime_dependency(%q<httmultiparty>, ["= 0.3.8"])
2487
+ s.add_runtime_dependency(%q<gem_plugin>, [">= 0"])
2486
2488
  s.add_runtime_dependency(%q<daemons>, [">= 0"])
2487
- s.add_runtime_dependency(%q<property>, ["= 2.3.2"])
2488
- s.add_runtime_dependency(%q<versions>, ["= 0.3.1"])
2489
- s.add_runtime_dependency(%q<simple_xlsx_writer>, [">= 0"])
2489
+ s.add_runtime_dependency(%q<yamltest>, ["= 0.7.0"])
2490
+ s.add_runtime_dependency(%q<open4>, [">= 0"])
2491
+ s.add_runtime_dependency(%q<authlogic>, ["= 2.1.3"])
2492
+ s.add_runtime_dependency(%q<safe_yaml>, ["= 0.8.0"])
2493
+ s.add_runtime_dependency(%q<rails>, ["= 2.3.18"])
2490
2494
  s.add_runtime_dependency(%q<hpricot>, [">= 0"])
2491
- s.add_runtime_dependency(%q<gettext>, ["= 2.1.0"])
2492
- s.add_runtime_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
2493
- s.add_runtime_dependency(%q<tzinfo>, [">= 0"])
2494
- s.add_runtime_dependency(%q<gem_plugin>, [">= 0"])
2495
- s.add_runtime_dependency(%q<rubyless>, ["= 0.8.8"])
2496
- s.add_runtime_dependency(%q<syntax>, ["= 1.0.0"])
2495
+ s.add_runtime_dependency(%q<querybuilder>, ["= 1.2.2"])
2496
+ s.add_runtime_dependency(%q<simple_xlsx_writer>, [">= 0"])
2497
+ s.add_runtime_dependency(%q<property>, ["= 2.3.2"])
2497
2498
  s.add_runtime_dependency(%q<uuidtools>, ["= 2.0.0"])
2499
+ s.add_runtime_dependency(%q<syntax>, ["= 1.0.0"])
2498
2500
  s.add_runtime_dependency(%q<will_paginate>, ["~> 2.3.12"])
2499
- s.add_runtime_dependency(%q<httparty>, ["= 0.7.8"])
2501
+ s.add_runtime_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
2500
2502
  s.add_runtime_dependency(%q<RedCloth>, ["= 3.0.4"])
2503
+ s.add_runtime_dependency(%q<versions>, ["= 0.3.1"])
2504
+ s.add_runtime_dependency(%q<differ>, ["= 0.1.2"])
2505
+ s.add_runtime_dependency(%q<gettext>, ["= 2.1.0"])
2501
2506
  else
2502
- s.add_dependency(%q<rails>, ["= 2.3.11"])
2503
- s.add_dependency(%q<differ>, ["= 0.1.2"])
2507
+ s.add_dependency(%q<tzinfo>, [">= 0"])
2504
2508
  s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
2505
- s.add_dependency(%q<shoulda>, ["= 2.10.3"])
2506
- s.add_dependency(%q<open4>, [">= 0"])
2507
- s.add_dependency(%q<authlogic>, ["= 2.1.3"])
2508
- s.add_dependency(%q<querybuilder>, ["= 1.2.1"])
2509
+ s.add_dependency(%q<rubyless>, ["= 0.8.10"])
2509
2510
  s.add_dependency(%q<jeweler>, [">= 0"])
2510
- s.add_dependency(%q<yamltest>, ["= 0.7.0"])
2511
2511
  s.add_dependency(%q<json>, ["= 1.5.1"])
2512
+ s.add_dependency(%q<shoulda>, ["= 2.10.3"])
2513
+ s.add_dependency(%q<httmultiparty>, ["= 0.3.8"])
2514
+ s.add_dependency(%q<gem_plugin>, [">= 0"])
2512
2515
  s.add_dependency(%q<daemons>, [">= 0"])
2513
- s.add_dependency(%q<property>, ["= 2.3.2"])
2514
- s.add_dependency(%q<versions>, ["= 0.3.1"])
2515
- s.add_dependency(%q<simple_xlsx_writer>, [">= 0"])
2516
+ s.add_dependency(%q<yamltest>, ["= 0.7.0"])
2517
+ s.add_dependency(%q<open4>, [">= 0"])
2518
+ s.add_dependency(%q<authlogic>, ["= 2.1.3"])
2519
+ s.add_dependency(%q<safe_yaml>, ["= 0.8.0"])
2520
+ s.add_dependency(%q<rails>, ["= 2.3.18"])
2516
2521
  s.add_dependency(%q<hpricot>, [">= 0"])
2517
- s.add_dependency(%q<gettext>, ["= 2.1.0"])
2518
- s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
2519
- s.add_dependency(%q<tzinfo>, [">= 0"])
2520
- s.add_dependency(%q<gem_plugin>, [">= 0"])
2521
- s.add_dependency(%q<rubyless>, ["= 0.8.8"])
2522
- s.add_dependency(%q<syntax>, ["= 1.0.0"])
2522
+ s.add_dependency(%q<querybuilder>, ["= 1.2.2"])
2523
+ s.add_dependency(%q<simple_xlsx_writer>, [">= 0"])
2524
+ s.add_dependency(%q<property>, ["= 2.3.2"])
2523
2525
  s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
2526
+ s.add_dependency(%q<syntax>, ["= 1.0.0"])
2524
2527
  s.add_dependency(%q<will_paginate>, ["~> 2.3.12"])
2525
- s.add_dependency(%q<httparty>, ["= 0.7.8"])
2528
+ s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
2526
2529
  s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
2530
+ s.add_dependency(%q<versions>, ["= 0.3.1"])
2531
+ s.add_dependency(%q<differ>, ["= 0.1.2"])
2532
+ s.add_dependency(%q<gettext>, ["= 2.1.0"])
2527
2533
  end
2528
2534
  else
2529
- s.add_dependency(%q<rails>, ["= 2.3.11"])
2530
- s.add_dependency(%q<differ>, ["= 0.1.2"])
2535
+ s.add_dependency(%q<tzinfo>, [">= 0"])
2531
2536
  s.add_dependency(%q<fast_gettext>, ["~> 0.4.16"])
2532
- s.add_dependency(%q<shoulda>, ["= 2.10.3"])
2533
- s.add_dependency(%q<open4>, [">= 0"])
2534
- s.add_dependency(%q<authlogic>, ["= 2.1.3"])
2535
- s.add_dependency(%q<querybuilder>, ["= 1.2.1"])
2537
+ s.add_dependency(%q<rubyless>, ["= 0.8.10"])
2536
2538
  s.add_dependency(%q<jeweler>, [">= 0"])
2537
- s.add_dependency(%q<yamltest>, ["= 0.7.0"])
2538
2539
  s.add_dependency(%q<json>, ["= 1.5.1"])
2540
+ s.add_dependency(%q<shoulda>, ["= 2.10.3"])
2541
+ s.add_dependency(%q<httmultiparty>, ["= 0.3.8"])
2542
+ s.add_dependency(%q<gem_plugin>, [">= 0"])
2539
2543
  s.add_dependency(%q<daemons>, [">= 0"])
2540
- s.add_dependency(%q<property>, ["= 2.3.2"])
2541
- s.add_dependency(%q<versions>, ["= 0.3.1"])
2542
- s.add_dependency(%q<simple_xlsx_writer>, [">= 0"])
2544
+ s.add_dependency(%q<yamltest>, ["= 0.7.0"])
2545
+ s.add_dependency(%q<open4>, [">= 0"])
2546
+ s.add_dependency(%q<authlogic>, ["= 2.1.3"])
2547
+ s.add_dependency(%q<safe_yaml>, ["= 0.8.0"])
2548
+ s.add_dependency(%q<rails>, ["= 2.3.18"])
2543
2549
  s.add_dependency(%q<hpricot>, [">= 0"])
2544
- s.add_dependency(%q<gettext>, ["= 2.1.0"])
2545
- s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
2546
- s.add_dependency(%q<tzinfo>, [">= 0"])
2547
- s.add_dependency(%q<gem_plugin>, [">= 0"])
2548
- s.add_dependency(%q<rubyless>, ["= 0.8.8"])
2549
- s.add_dependency(%q<syntax>, ["= 1.0.0"])
2550
+ s.add_dependency(%q<querybuilder>, ["= 1.2.2"])
2551
+ s.add_dependency(%q<simple_xlsx_writer>, [">= 0"])
2552
+ s.add_dependency(%q<property>, ["= 2.3.2"])
2550
2553
  s.add_dependency(%q<uuidtools>, ["= 2.0.0"])
2554
+ s.add_dependency(%q<syntax>, ["= 1.0.0"])
2551
2555
  s.add_dependency(%q<will_paginate>, ["~> 2.3.12"])
2552
- s.add_dependency(%q<httparty>, ["= 0.7.8"])
2556
+ s.add_dependency(%q<ruby-recaptcha>, ["= 1.0.3"])
2553
2557
  s.add_dependency(%q<RedCloth>, ["= 3.0.4"])
2558
+ s.add_dependency(%q<versions>, ["= 0.3.1"])
2559
+ s.add_dependency(%q<differ>, ["= 0.1.2"])
2560
+ s.add_dependency(%q<gettext>, ["= 2.1.0"])
2554
2561
  end
2555
2562
  end
2556
2563