zena 1.0.0.beta3 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (418) hide show
  1. data/History.txt +29 -0
  2. data/Rakefile +2 -0
  3. data/TODO_ZENA_1_0 +13 -23
  4. data/app/controllers/columns_controller.rb +1 -1
  5. data/app/controllers/comments_controller.rb +4 -3
  6. data/app/controllers/documents_controller.rb +8 -11
  7. data/app/controllers/nodes_controller.rb +39 -21
  8. data/app/controllers/users_controller.rb +8 -3
  9. data/app/controllers/versions_controller.rb +2 -2
  10. data/app/controllers/virtual_classes_controller.rb +17 -11
  11. data/app/helpers/documents_helper.rb +0 -3
  12. data/app/helpers/users_helper.rb +17 -0
  13. data/app/models/cache.rb +36 -31
  14. data/app/models/column.rb +48 -5
  15. data/app/models/comment.rb +14 -5
  16. data/app/models/data_entry.rb +2 -2
  17. data/app/models/document.rb +23 -33
  18. data/app/models/idx_nodes_datetime.rb +4 -0
  19. data/app/models/idx_nodes_float.rb +4 -0
  20. data/app/models/idx_project.rb +3 -0
  21. data/app/models/node.rb +372 -308
  22. data/app/models/page.rb +1 -31
  23. data/app/models/relation.rb +4 -4
  24. data/app/models/relation_proxy.rb +128 -17
  25. data/app/models/role.rb +27 -2
  26. data/app/models/site.rb +64 -56
  27. data/app/models/template.rb +11 -12
  28. data/app/models/text_document.rb +6 -7
  29. data/app/models/user.rb +95 -46
  30. data/app/models/version.rb +2 -2
  31. data/app/models/virtual_class.rb +418 -73
  32. data/app/views/columns/_form.html.erb +1 -1
  33. data/app/views/columns/_li.html.erb +1 -1
  34. data/app/views/comments/_form.rhtml +1 -1
  35. data/app/views/comments/_li.rhtml +1 -1
  36. data/app/views/comments/_li_simple.rhtml +1 -1
  37. data/app/views/groups/_form.rhtml +1 -1
  38. data/app/views/links/_li.rhtml +1 -1
  39. data/app/views/nodes/_groups.rhtml +1 -1
  40. data/app/views/nodes/_import_results.rhtml +1 -1
  41. data/app/views/nodes/_parent.rhtml +1 -1
  42. data/app/views/nodes/_results.rhtml +1 -1
  43. data/app/views/nodes/create.rjs +4 -2
  44. data/app/views/relations/_li.erb +2 -2
  45. data/app/views/templates/document_create_tabs/_file.rhtml +1 -1
  46. data/app/views/templates/document_create_tabs/_template.rhtml +2 -2
  47. data/app/views/templates/document_create_tabs/_text_document.rhtml +2 -2
  48. data/app/views/templates/edit_tabs/_help.rhtml +1 -1
  49. data/app/views/templates/edit_tabs/_title.rhtml +0 -3
  50. data/app/views/users/_form.rhtml +2 -6
  51. data/app/views/users/_li.rhtml +1 -3
  52. data/app/views/users/create.rjs +4 -4
  53. data/app/views/users/preferences.html.erb +1 -4
  54. data/app/views/versions/custom_tab.rhtml +5 -0
  55. data/app/views/virtual_classes/_form.erb +20 -10
  56. data/app/views/virtual_classes/_li.erb +21 -8
  57. data/app/views/zafu/default/Node-+search.zafu +1 -1
  58. data/app/views/zafu/default/Node.zafu +3 -3
  59. data/bricks/captcha/lib/bricks/captcha.rb +1 -1
  60. data/bricks/mongrel/zena/deploy.rb +14 -0
  61. data/bricks/{data2pdf → pdf}/.document +0 -0
  62. data/bricks/pdf/README +33 -0
  63. data/bricks/{data2pdf → pdf}/Rakefile +0 -0
  64. data/bricks/pdf/VERSION +1 -0
  65. data/bricks/pdf/lib/bricks/pdf.rb +110 -0
  66. data/bricks/pdf/lib/bricks/pdf/engine/prince.rb +38 -0
  67. data/bricks/pdf/lib/bricks/pdf/engine/xhtml2pdf.rb +9 -0
  68. data/bricks/pdf/lib/bricks/pdf/install.rb +121 -0
  69. data/bricks/pdf/test/engines/test_prince.rb +15 -0
  70. data/bricks/pdf/test/engines/test_xhtml2pdf.rb +15 -0
  71. data/bricks/{data2pdf → pdf}/test/fixtures/application.css +0 -0
  72. data/bricks/{data2pdf → pdf}/test/fixtures/contact.html +0 -0
  73. data/bricks/{data2pdf → pdf}/test/fixtures/pisa-default.css +0 -0
  74. data/bricks/{data2pdf → pdf}/test/fixtures/sheet1.css +0 -0
  75. data/bricks/{data2pdf → pdf}/test/fixtures/sheet2.css +0 -0
  76. data/bricks/{data2pdf → pdf}/test/fixtures/simple-html.html +0 -0
  77. data/bricks/{data2pdf → pdf}/test/fixtures/simple-text.txt +0 -0
  78. data/bricks/{data2pdf → pdf}/test/helper.rb +4 -5
  79. data/bricks/pdf/test/shoulda_macros/shoulda_pdf.rb +72 -0
  80. data/bricks/pdf/zena/init.rb +5 -0
  81. data/bricks/pdf/zena/tasks.rb +17 -0
  82. data/bricks/sphinx/lib/{use_sphinx.rb → bricks/sphinx.rb} +1 -1
  83. data/bricks/tags/zena/init.rb +2 -2
  84. data/bricks/tags/zena/test/zafu/tags.yml +4 -4
  85. data/bricks/zena/zena/migrate/01_base.rb +482 -0
  86. data/config/bricks.yml +22 -6
  87. data/config/gems.yml +8 -6
  88. data/db/20100628074512_zena0x_to1x.rb +6 -1
  89. data/db/fix/024_correct_vclass_kpath.rb +11 -0
  90. data/db/fix/025_move_tag_into_vclass.rb +13 -0
  91. data/db/{migrate → fix}/026_rename_templates.rb +0 -0
  92. data/db/{migrate → fix}/045_avoid_star_in_templates.rb +0 -0
  93. data/db/{migrate → fix}/046_fix_zazen_image_tag.rb +0 -0
  94. data/db/{migrate → fix}/047_change_default_link_id_to_zero.rb +1 -3
  95. data/db/{migrate → fix}/049_fix_publish_from_is_null.rb +0 -0
  96. data/db/{migrate → fix}/20090924141459_zafu_fix_sept09.rb +0 -0
  97. data/db/{migrate → fix}/20091013100351_rename_publish_group_to_drive_group.rb +1 -3
  98. data/db/{migrate → fix}/20091124161608_rebuild_fullpath.rb +0 -1
  99. data/db/{migrate → fix}/20100115134729_rebuild_fullpath_after_fix.rb +0 -0
  100. data/db/{migrate → fix}/20100526090140_renamed_contact_model_to_base_contact.rb +2 -4
  101. data/db/{migrate → fix/old_migrations}/001_create_base.rb +0 -1
  102. data/db/{migrate → fix/old_migrations}/002_add_time_zone_to_users.rb +0 -0
  103. data/db/{migrate → fix/old_migrations}/003_add_custom_base_flag.rb +0 -0
  104. data/db/{migrate → fix/old_migrations}/004_rename_template_skin.rb +0 -0
  105. data/db/{migrate → fix/old_migrations}/005_create_cached_pages.rb +0 -0
  106. data/db/{migrate → fix/old_migrations}/006_create_sites.rb +0 -0
  107. data/db/{migrate → fix/old_migrations}/007_replace_id_by_zip.rb +0 -0
  108. data/db/{migrate → fix/old_migrations}/008_user_status.rb +0 -0
  109. data/db/{migrate → fix/old_migrations}/009_fulltext.rb +0 -0
  110. data/db/fix/old_migrations/010_create_template_content.rb +17 -0
  111. data/db/{migrate → fix/old_migrations}/011_project_to_section.rb +0 -0
  112. data/db/{migrate → fix/old_migrations}/012_add_project_id.rb +0 -0
  113. data/db/{migrate → fix/old_migrations}/013_remove_defaults.rb +0 -0
  114. data/db/{migrate → fix/old_migrations}/014_add_sort_field.rb +0 -0
  115. data/db/{migrate → fix/old_migrations}/015_add_dyn_attributes.rb +0 -0
  116. data/db/{migrate → fix/old_migrations}/016_remove_translations.rb +0 -0
  117. data/db/{migrate → fix/old_migrations}/017_rename_authorize.rb +0 -0
  118. data/db/{migrate → fix/old_migrations}/018_add_auth_option.rb +0 -0
  119. data/db/{migrate → fix/old_migrations}/019_remove_user_status.rb +0 -0
  120. data/db/{migrate → fix/old_migrations}/020_create_participation.rb +0 -0
  121. data/db/{migrate → fix/old_migrations}/021_create_relations.rb +0 -0
  122. data/db/{migrate → fix/old_migrations}/022_create_virtual_classes.rb +0 -0
  123. data/db/{migrate → fix/old_migrations}/023_ip_on_anonymous_comment.rb +0 -0
  124. data/db/{migrate → fix/old_migrations}/027_add_country_to_contacts.rb +0 -0
  125. data/db/{migrate → fix/old_migrations}/028_change_size_of_conten_type_field.rb +0 -0
  126. data/db/{migrate → fix/old_migrations}/029_create_data_entries.rb +0 -0
  127. data/db/{migrate → fix/old_migrations}/030_redit_auto_publish_site_settings.rb +0 -0
  128. data/db/{migrate → fix/old_migrations}/031_create_iformats.rb +0 -0
  129. data/db/{migrate → fix/old_migrations}/032_caches_context_as_hash.rb +0 -0
  130. data/db/{migrate → fix/old_migrations}/033_documents_kpath_change.rb +0 -0
  131. data/db/{migrate → fix/old_migrations}/034_change_file_storage.rb +0 -0
  132. data/db/{migrate → fix/old_migrations}/035_add_status_to_link.rb +0 -0
  133. data/db/{migrate → fix/old_migrations}/036_add_flag_fields_on_nodes.rb +0 -0
  134. data/db/{migrate → fix/old_migrations}/037_add_auto_create_discussion_to_v_class.rb +0 -0
  135. data/db/{migrate → fix/old_migrations}/038_create_site_attributes.rb +0 -0
  136. data/db/{migrate → fix/old_migrations}/039_default_position.rb +0 -0
  137. data/db/{migrate → fix/old_migrations}/040_second_value_for_data_entry.rb +0 -0
  138. data/db/{migrate → fix/old_migrations}/041_add_attributes_to_v_class.rb +0 -0
  139. data/db/{migrate → fix/old_migrations}/042_fix_position_should_be_float.rb +0 -0
  140. data/db/{migrate → fix/old_migrations}/043_move_user_lang_into_participation.rb +0 -0
  141. data/db/{migrate → fix/old_migrations}/044_remove_monolingual_site_option.rb +0 -0
  142. data/db/{migrate → fix/old_migrations}/048_link_source_target_can_be_null.rb +0 -0
  143. data/db/{migrate → fix/old_migrations}/050_date_in_links.rb +0 -0
  144. data/db/{migrate → fix/old_migrations}/051_add_exif_tags_to_images.rb +0 -0
  145. data/db/{migrate → fix/old_migrations}/20090825201159_insert_zero_link.rb +0 -0
  146. data/db/{migrate → fix/old_migrations}/20090825201200_merge_bricks_migrations_with_std_migrations.rb +0 -0
  147. data/db/{migrate → fix/old_migrations}/20090927125912_allow_null_in_text_fields.rb +0 -0
  148. data/db/{migrate → fix/old_migrations}/20090928133440_no_more_private_nodes.rb +0 -0
  149. data/db/{migrate → fix/old_migrations}/20090928143754_version_status_change.rb +0 -0
  150. data/db/{migrate → fix/old_migrations}/20091001084025_change_status_values_for_comments.rb +0 -0
  151. data/db/{migrate → fix/old_migrations}/20091009084057_add_vhash_in_node.rb +0 -0
  152. data/db/{migrate → fix/old_migrations}/20091014130833_fix_template_title.rb +0 -0
  153. data/db/{migrate → fix/old_migrations}/20091014183726_merge_participation_into_users.rb +0 -0
  154. data/db/{migrate → fix/old_migrations}/20091018200734_add_popup_info_to_image_format.rb +0 -0
  155. data/db/{migrate → fix/old_migrations}/20091026161708_add_persistence_token.rb +0 -0
  156. data/db/{migrate → fix/old_migrations}/20091101184952_add_session_table.rb +0 -0
  157. data/db/{migrate → fix/old_migrations}/20091123175137_add_single_access_token.rb +0 -0
  158. data/db/{migrate → fix/old_migrations}/20100125062254_add_dynamo_to_version.rb +0 -0
  159. data/db/{migrate → fix/old_migrations}/20100201133242_remove_default_status_on_version.rb +0 -0
  160. data/db/{migrate → fix/old_migrations}/20100208194210_create_attachments.rb +0 -0
  161. data/db/{migrate → fix/old_migrations}/20100210112319_change_dynamo_to_property.rb +0 -0
  162. data/db/{migrate → fix/old_migrations}/20100320145726_transform_template_contents_into_index.rb +0 -0
  163. data/db/{migrate → fix/old_migrations}/20100328125634_change_skin_name_to_id.rb +0 -0
  164. data/db/{migrate → fix/old_migrations}/20100417061257_add_properties_to_sites.rb +0 -0
  165. data/db/{migrate → fix/old_migrations}/20100419163149_rename_name_to_node_name.rb +0 -0
  166. data/db/{migrate → fix/old_migrations}/20100422091606_change_v_class_table_into_roles.rb +0 -0
  167. data/db/{migrate → fix/old_migrations}/20100422094048_node_habtm_roles.rb +0 -0
  168. data/db/{migrate → fix/old_migrations}/20100422115935_create_columns.rb +0 -0
  169. data/db/{migrate → fix/old_migrations}/20100513181529_add_site_id_to_columns.rb +0 -0
  170. data/db/{migrate → fix/old_migrations}/20100519091711_add_index_definition_to_columns.rb +0 -0
  171. data/db/{migrate → fix/old_migrations}/20100519091940_create_idx_nodes_string.rb +0 -0
  172. data/db/{migrate → fix/old_migrations}/20100519232432_create_idx_nodes_ml_string.rb +0 -0
  173. data/db/{migrate → fix/old_migrations}/20100525113858_add_porperties_to_users.rb +0 -0
  174. data/db/{migrate → fix/old_migrations}/20100527130937_change_column_index_to_string.rb +0 -0
  175. data/db/{migrate → fix/old_migrations}/20100531135128_add_fulltext_builder_fields.rb +0 -0
  176. data/db/{migrate → fix/old_migrations}/20100915062903_add_api_group_id_to_site.rb +0 -0
  177. data/db/fix/old_migrations/20100923154807_remove_base_contact.rb +84 -0
  178. data/db/fix/old_migrations/20100926192223_remove_su_user.rb +8 -0
  179. data/db/fix/old_migrations/20100927141658_add_eval_attributes_to_v_class.rb +12 -0
  180. data/db/fix/old_migrations/20100928185257_add_obvious_idx.rb +52 -0
  181. data/db/fix/old_migrations/20100929143111_remove_node_name.rb +11 -0
  182. data/db/fix/old_migrations/20101006090454_store_properties_in_long_text.rb +9 -0
  183. data/db/fix/old_migrations/20101014185753_remove_user_prototype_id.rb +9 -0
  184. data/db/fix/old_migrations/20101101084318_create_scope_index.rb +35 -0
  185. data/db/fix/old_migrations/20101109074232_create_idx_nodes_tables.rb +65 -0
  186. data/db/fix/old_migrations/20101110184235_add_role_update_to_site.rb +9 -0
  187. data/db/fix/old_migrations/20101116103920_change_scope_index.rb +31 -0
  188. data/db/fix/old_migrations/20101123125822_add_integer_idx.rb +17 -0
  189. data/db/fix/old_migrations/20101130134522_add_index_field.rb +13 -0
  190. data/db/fix/old_migrations/20101213133816_add_group_to_relation.rb +9 -0
  191. data/db/init/base/help.fr.zml +1 -1
  192. data/db/init/base/skins/default.zml +0 -1
  193. data/db/init/base/skins/default/Node-+search.zafu +1 -1
  194. data/db/init/base/skins/default/Node-tree.zafu +3 -3
  195. data/db/init/base/skins/default/Node.zafu +3 -3
  196. data/lib/bricks/loader.rb +4 -1
  197. data/lib/bricks/requirements_validation.rb +11 -6
  198. data/lib/log_recorder/lib/log_recorder.rb +2 -2
  199. data/lib/tasks/zena.rake +25 -15
  200. data/lib/zena.rb +42 -9
  201. data/lib/zena/acts/enrollable.rb +81 -99
  202. data/lib/zena/acts/secure.rb +27 -23
  203. data/lib/zena/acts/secure_node.rb +10 -55
  204. data/lib/zena/acts/serializable.rb +9 -10
  205. data/lib/zena/app.rb +0 -2
  206. data/lib/zena/code_syntax.rb +1 -1
  207. data/lib/zena/controller/test_case.rb +0 -5
  208. data/lib/zena/core_ext/string.rb +48 -20
  209. data/lib/zena/db.rb +10 -442
  210. data/lib/zena/db_helper/abstract_db.rb +184 -0
  211. data/lib/zena/db_helper/mysql.rb +150 -0
  212. data/lib/zena/db_helper/postgresql.rb +79 -0
  213. data/lib/zena/db_helper/sqlite3.rb +135 -0
  214. data/lib/zena/deploy.rb +4 -1
  215. data/lib/zena/deploy/httpd.rhtml +3 -3
  216. data/lib/zena/deploy/vhost.rhtml +1 -1
  217. data/lib/zena/foxy_parser.rb +37 -18
  218. data/lib/zena/info.rb +3 -13
  219. data/lib/zena/migrator.rb +0 -1
  220. data/lib/zena/parser/zafu_rules.rb +9 -4
  221. data/lib/zena/parser/zazen_rules.rb +5 -5
  222. data/lib/zena/parser/zena_rules.rb +1 -1
  223. data/lib/zena/remote/interface.rb +1 -1
  224. data/lib/zena/site_worker.rb +3 -3
  225. data/lib/zena/test_controller.rb +10 -10
  226. data/lib/zena/use/action.rb +66 -6
  227. data/lib/zena/use/ajax.rb +39 -13
  228. data/lib/zena/use/ancestry.rb +210 -0
  229. data/lib/zena/use/authlogic.rb +30 -1
  230. data/lib/zena/use/calendar.rb +158 -0
  231. data/lib/zena/use/conditional.rb +3 -2
  232. data/lib/zena/use/context.rb +42 -12
  233. data/lib/zena/use/dates.rb +15 -14
  234. data/lib/zena/use/display.rb +54 -7
  235. data/lib/zena/use/error_rendering.rb +1 -0
  236. data/lib/zena/use/field_index.rb +20 -0
  237. data/lib/zena/use/fixtures.rb +12 -9
  238. data/lib/zena/use/forms.rb +230 -106
  239. data/lib/zena/use/fulltext.rb +28 -14
  240. data/lib/zena/use/html_tags.rb +1 -24
  241. data/lib/zena/use/i18n.rb +69 -14
  242. data/lib/zena/use/kpath.rb +60 -0
  243. data/lib/zena/use/ml_index.rb +6 -4
  244. data/lib/zena/use/node_context.rb +63 -0
  245. data/lib/zena/use/prop_eval.rb +90 -0
  246. data/lib/zena/use/query_builder.rb +159 -29
  247. data/lib/zena/use/query_comment.rb +1 -1
  248. data/lib/zena/use/query_node.rb +147 -56
  249. data/lib/zena/use/recursion.rb +2 -2
  250. data/lib/zena/use/relations.rb +31 -19
  251. data/lib/zena/use/rendering.rb +111 -121
  252. data/lib/zena/use/scope_index.rb +230 -0
  253. data/lib/zena/use/search.rb +7 -7
  254. data/lib/zena/use/urls.rb +87 -25
  255. data/lib/zena/use/version_hash.rb +113 -113
  256. data/lib/zena/use/workflow.rb +5 -1
  257. data/lib/zena/use/zafu_attributes.rb +11 -14
  258. data/lib/zena/use/zafu_eval.rb +1 -1
  259. data/lib/zena/use/zafu_safe_definitions.rb +91 -9
  260. data/lib/zena/use/zafu_templates.rb +146 -102
  261. data/lib/zena/use/zazen.rb +5 -4
  262. data/lib/zena/zafu_compiler.rb +1 -0
  263. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  264. data/locale/en/zena.po +0 -1
  265. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  266. data/locale/fr/zena.mo +0 -0
  267. data/locale/fr/zena.po +4 -4
  268. data/misc/zena +35 -0
  269. data/misc/zena_init +41 -0
  270. data/public/images/ext/{basecontact.png → contact.png} +0 -0
  271. data/public/javascripts/zena.js +35 -7
  272. data/public/stylesheets/admin.css +5 -2
  273. data/public/stylesheets/default.css +2 -1
  274. data/public/stylesheets/popup.css +1 -1
  275. data/public/stylesheets/zena.css +2 -2
  276. data/test/custom_queries/complex.host.yml +12 -5
  277. data/test/fixtures/files/Node-test.zafu +3 -3
  278. data/test/fixtures/files/translations_fr.yml +4 -2
  279. data/test/functional/documents_controller_test.rb +31 -0
  280. data/test/functional/nodes_controller_commit_test.rb +1 -5
  281. data/test/functional/nodes_controller_test.rb +92 -12
  282. data/test/functional/user_sessions_controller_test.rb +2 -2
  283. data/test/functional/users_controller_test.rb +31 -29
  284. data/test/functional/versions_controller_test.rb +2 -2
  285. data/test/functional/virtual_classes_controller_test.rb +2 -2
  286. data/test/integration/multiple_hosts_test.rb +19 -8
  287. data/test/integration/navigation_test.rb +91 -12
  288. data/test/integration/query_node/basic.yml +40 -37
  289. data/test/integration/query_node/complex.yml +23 -18
  290. data/test/integration/query_node/dates.yml +3 -3
  291. data/test/integration/query_node/errors.yml +7 -1
  292. data/test/integration/query_node/filters.yml +41 -35
  293. data/test/integration/query_node/idx_fields.yml +11 -0
  294. data/test/integration/query_node/idx_key_value.yml +77 -0
  295. data/test/integration/query_node/idx_scope.yml +33 -0
  296. data/test/integration/query_node/relations.yml +13 -13
  297. data/test/integration/query_node_test.rb +6 -10
  298. data/test/integration/zafu_compiler/action.yml +19 -6
  299. data/test/integration/zafu_compiler/ajax.yml +111 -51
  300. data/test/integration/zafu_compiler/apphelper.yml +1 -1
  301. data/test/integration/zafu_compiler/asset.yml +1 -1
  302. data/test/integration/zafu_compiler/basic.yml +42 -52
  303. data/test/integration/zafu_compiler/calendar.yml +3 -3
  304. data/test/integration/zafu_compiler/complex.yml +16 -16
  305. data/test/integration/zafu_compiler/complex_ok.yml +2 -2
  306. data/test/integration/zafu_compiler/conditional.yml +42 -33
  307. data/test/integration/zafu_compiler/data.yml +3 -3
  308. data/test/integration/zafu_compiler/dates.yml +25 -10
  309. data/test/integration/zafu_compiler/display.yml +49 -12
  310. data/test/integration/zafu_compiler/errors.yml +26 -6
  311. data/test/integration/zafu_compiler/eval.yml +4 -4
  312. data/test/integration/zafu_compiler/forms.yml +89 -15
  313. data/test/integration/zafu_compiler/i18n.yml +23 -18
  314. data/test/integration/zafu_compiler/idx_scope.yml +7 -0
  315. data/test/integration/zafu_compiler/later.yml +10 -16
  316. data/test/integration/zafu_compiler/off/off.yml +2 -2
  317. data/test/integration/zafu_compiler/query.yml +207 -0
  318. data/test/integration/zafu_compiler/recursion.yml +2 -2
  319. data/test/integration/zafu_compiler/relations.yml +144 -168
  320. data/test/integration/zafu_compiler/roles.yml +86 -10
  321. data/test/integration/zafu_compiler/rubyless.yml +49 -6
  322. data/test/integration/zafu_compiler/safe_definitions.yml +35 -6
  323. data/test/integration/zafu_compiler/search.yml +1 -1
  324. data/test/integration/zafu_compiler/security.yml +37 -0
  325. data/test/integration/zafu_compiler/urls.yml +50 -40
  326. data/test/integration/zafu_compiler/user.yml +21 -6
  327. data/test/integration/zafu_compiler/version.yml +6 -6
  328. data/test/integration/zafu_compiler/zafu_attributes.yml +43 -34
  329. data/test/integration/zafu_compiler/zazen.yml +10 -10
  330. data/test/integration/zafu_compiler_test.rb +19 -13
  331. data/test/sites/complex/nodes.yml +0 -2
  332. data/test/sites/complex/roles.yml +9 -1
  333. data/test/sites/complex/sites.yml +0 -1
  334. data/test/sites/complex/users.yml +2 -5
  335. data/test/sites/ocean/nodes.yml +2 -5
  336. data/test/sites/ocean/roles.yml +8 -0
  337. data/test/sites/ocean/sites.yml +0 -1
  338. data/test/sites/ocean/users.yml +0 -13
  339. data/test/sites/zena/columns.yml +27 -5
  340. data/test/sites/zena/idx_projects.yml +5 -0
  341. data/test/sites/zena/nodes.yml +8 -32
  342. data/test/sites/zena/relations.yml +5 -0
  343. data/test/sites/zena/roles.yml +25 -3
  344. data/test/sites/zena/sites.yml +2 -2
  345. data/test/sites/zena/users.yml +1 -21
  346. data/test/sites/zena/versions.yml +35 -12
  347. data/test/test_helper.rb +7 -0
  348. data/test/unit/after_commit_test.rb +7 -7
  349. data/test/unit/cache_test.rb +32 -0
  350. data/test/unit/cached_page_test.rb +1 -1
  351. data/test/unit/column_test.rb +31 -7
  352. data/test/unit/comment_test.rb +2 -2
  353. data/test/unit/core_ext_test.rb +38 -7
  354. data/test/unit/document_test.rb +14 -42
  355. data/test/unit/node_test.rb +311 -324
  356. data/test/unit/note_test.rb +23 -31
  357. data/test/unit/page_test.rb +16 -58
  358. data/test/unit/project_test.rb +2 -2
  359. data/test/unit/relation_proxy_test.rb +148 -21
  360. data/test/unit/relation_test.rb +23 -3
  361. data/test/unit/remote_test.rb +15 -9
  362. data/test/unit/role_test.rb +9 -0
  363. data/test/unit/site_test.rb +49 -47
  364. data/test/unit/skin_test.rb +16 -0
  365. data/test/unit/template_test.rb +60 -69
  366. data/test/unit/text_document_test.rb +15 -14
  367. data/test/unit/user_test.rb +101 -41
  368. data/test/unit/version_test.rb +4 -4
  369. data/test/unit/virtual_class_test.rb +577 -36
  370. data/test/unit/workflow_test.rb +58 -21
  371. data/test/unit/zena/acts/enrollable_test.rb +36 -127
  372. data/test/unit/zena/acts/secure_test.rb +6 -22
  373. data/test/unit/zena/acts/serializable_test.rb +18 -0
  374. data/test/unit/zena/db_test.rb +14 -14
  375. data/test/unit/zena/parser/zafu.yml +5 -3
  376. data/test/unit/zena/use/ancestry_test.rb +198 -0
  377. data/test/unit/zena/use/calendar_test.rb +8 -8
  378. data/test/unit/zena/use/dates_test.rb +2 -0
  379. data/test/unit/zena/use/fulltext_test.rb +9 -1
  380. data/test/unit/zena/use/html_tags_test.rb +2 -16
  381. data/test/unit/zena/use/i18n_test.rb +2 -2
  382. data/test/unit/zena/use/kpath_test.rb +13 -0
  383. data/test/unit/zena/use/ml_index_test.rb +60 -12
  384. data/test/unit/zena/use/prop_eval_test.rb +170 -0
  385. data/test/unit/zena/use/query_node_test.rb +9 -2
  386. data/test/unit/zena/use/rendering_test.rb +98 -1
  387. data/test/unit/zena/use/scope_index_test.rb +464 -0
  388. data/test/unit/zena/use/urls_test.rb +23 -13
  389. data/test/unit/zena/use/version_hash_test.rb +2 -2
  390. data/test/unit/zena/use/zafu_template_test.rb +21 -8
  391. data/test/unit/zena/use/zazen_test.rb +47 -47
  392. data/zena.gemspec +177 -143
  393. metadata +222 -141
  394. data/app/models/base_contact.rb +0 -79
  395. data/app/models/book.rb +0 -242
  396. data/app/models/contact_content.rb +0 -70
  397. data/app/models/contact_version.rb +0 -40
  398. data/app/models/reference.rb +0 -18
  399. data/app/views/templates/edit_tabs/_basecontact.rhtml +0 -8
  400. data/bricks/data2pdf/README +0 -19
  401. data/bricks/data2pdf/VERSION +0 -1
  402. data/bricks/data2pdf/lib/data2pdf.rb +0 -60
  403. data/bricks/data2pdf/lib/engines/prince.rb +0 -39
  404. data/bricks/data2pdf/lib/engines/xhtml2pdf.rb +0 -41
  405. data/bricks/data2pdf/lib/install.rb +0 -111
  406. data/bricks/data2pdf/test/engines/test_prince.rb +0 -14
  407. data/bricks/data2pdf/test/engines/test_xhtml2pdf.rb +0 -14
  408. data/bricks/data2pdf/test/shoulda_macros/shoulda_data2pdf.rb +0 -91
  409. data/bricks/data2pdf/test/unit/test_rendering.rb +0 -37
  410. data/config/routes.rb +0 -3
  411. data/db/migrate/010_create_template_content.rb +0 -17
  412. data/db/migrate/024_correct_vclass_kpath.rb +0 -13
  413. data/db/migrate/025_move_tag_into_vclass.rb +0 -15
  414. data/lib/version_off.rb +0 -323
  415. data/lib/zena/use/node_name.rb +0 -94
  416. data/test/integration/query_node/properties.yml +0 -41
  417. data/test/unit/base_contact_test.rb +0 -242
  418. data/test/unit/node_name_test.rb +0 -137
@@ -20,15 +20,15 @@ bad_query:
20
20
  tem: "<span class='parser_error'><span class='method'>images</span> <span class='message'>Syntax error near \"oo bar baz\".</span></span>"
21
21
 
22
22
  bad_field_in_query:
23
- src: "<r:images where='node_name = baz'>ok</r:images>"
23
+ src: "<r:images where='title = baz'>ok</r:images>"
24
24
  res: "<span class='parser_error'><span class='method'>images</span> <span class='message'>Unknown field 'baz'.</span></span>"
25
25
 
26
26
  bad_relation:
27
- src: "<div do='categories in site' do='each' join=', ' do='node_name'/>"
27
+ src: "<div do='categories in site' do='each' join=', ' do='title'/>"
28
28
  tem: "<div><span class='parser_error'><span class='method'>categories in site</span> <span class='message'>Unknown relation 'categories'.</span></span></div>"
29
29
 
30
30
  bad_order_clause:
31
- src: "<r:images order='l_status ASC' do='each' join=',' do='node_name'/>"
31
+ src: "<r:images order='l_status ASC' do='each' join=',' do='title'/>"
32
32
  res: "/Unknown field 'l_status'./"
33
33
 
34
34
  show_var:
@@ -52,11 +52,11 @@ bad_argument_list_in_eval:
52
52
  res: "/unterminated string meets end of file/"
53
53
 
54
54
  nil_value:
55
- src: "<r:show eval='4 * custom_a'/>"
55
+ eval: "4 * custom_a"
56
56
  res: ""
57
57
 
58
58
  not_finished_block:
59
- src: "<r:if kind_of='Document'><r:link format='data'><r:img mode='tiny'/> <r:show attr='node_name'/>.<r:show attr='ext'/></r:link><r:else do='link'/></r:if>"
59
+ src: "<r:if kind_of='Document'><r:link format='data'><r:img mode='tiny'/> <r:show attr='title'/>.<r:show attr='ext'/></r:link><r:else do='link'/></r:if>"
60
60
 
61
61
  missing_template:
62
62
  src: "<r:include template='Foo'/>"
@@ -76,4 +76,24 @@ zazen_bad_attr:
76
76
 
77
77
  toggle_bad_finder_class:
78
78
  src: "<span do='toggle' set='favorite' for='visitor'/>"
79
- res: "/Invalid class 'for' parameter: User/"
79
+ res: "/Invalid class 'for' parameter: User/"
80
+
81
+ map_join:
82
+ context:
83
+ node: 'cleanWater'
84
+ src: "<r:children do='map(:flobo).join(\",\")'/>"
85
+ tem: "/unknown method .*map\(:flobo\)/"
86
+
87
+ query_on_vclass:
88
+ # typical syntax error (should be Contact?)
89
+ src: "<r:Contact><div do='pages in site'>...</div></r:Contact>"
90
+ # should not crash
91
+ tem: "/parser_error.*method.*pages in site.*No query builder for class VirtualClass/"
92
+
93
+ datebox_on_vclass:
94
+ src: "<r:Contact><r:input type='date' name='log_at'/></r:Contact>"
95
+ tem: "/unknown method 'log_at\(\)' for .* VirtualClass./"
96
+
97
+ bad_iconv:
98
+ src: "<r:iconv to='foobar'>écrit</r:iconv>"
99
+ tem: "/invalid encoding \"foobar\"/"
@@ -12,13 +12,13 @@ sprintf:
12
12
  res: "<b>22.00</b>"
13
13
 
14
14
  set_var:
15
- src: "<r:set var='foo'>I am <r:show attr='node_name'/></r:set> <p do='show' var='foo'/>"
16
- tem: "<% set_foo = capture do %>I am <%= @node.name %><% end -%> <p><%= set_foo %></p>"
15
+ src: "<r:set var='foo'>I am <r:show attr='title'/></r:set> <p do='show' var='foo'/>"
16
+ tem: "<% set_foo = capture do %>I am <%= @node.name %><% end %> <p><%= set_foo %></p>"
17
17
  res: " <p>I am status</p>"
18
18
 
19
19
  eval_mult:
20
20
  src: "<r:set var='foo'>134</r:set><r:show eval='foo * 0.1'/>"
21
- tem: "<% set_foo = capture do %>134<% end -%><%= (set_foo.to_f * 0.1) %>"
21
+ tem: "<% set_foo = capture do %>134<% end %><%= (set_foo.to_f * 0.1) %>"
22
22
  res: "13.4"
23
23
 
24
24
  eval_with_attr:
@@ -47,7 +47,7 @@ show_var:
47
47
  res: "<b>12345</b>"
48
48
 
49
49
  show_var_overwrites_attribute:
50
- src: "<r:set var='name'>12345</r:set><b do='node_name'/>"
50
+ src: "<r:set var='name'>12345</r:set><b do='title'/>"
51
51
  res: "<b>12345</b>"
52
52
 
53
53
  test_var:
@@ -9,7 +9,7 @@ default:
9
9
 
10
10
  add_btn:
11
11
  src: "<table do='pages' in='site' limit='1'>
12
- <tr do='each'><td do='node_name'/></tr>
12
+ <tr do='each'><td do='title'/></tr>
13
13
  <tr do='add'><td><b><r:add_btn/></b></td></tr>
14
14
  </table>"
15
15
  res: "/<tr class='btn_add' id='list1_add'><td><b><a href='#' onclick/"
@@ -20,15 +20,21 @@ form_put:
20
20
  tem: "/form_for.*:url.*node_path\(@node\.zip\)/"
21
21
  res: '/<form action="/nodes/\d+".*method="post".*input name="_method" type="hidden" value="put"/'
22
22
 
23
+ form_should_not_insert_parent_id:
24
+ context:
25
+ node: 'zena'
26
+ src: "<r:form></r:form>"
27
+ tem: "!/parent_id/"
28
+
23
29
  form_post:
24
30
  # Should make a post on new objects
25
- src: "<r:new klass='Post' title='Joe'><r:form></r:form></r:new>"
31
+ src: "<r:new klass='Post' title='\"Joe\"'><r:form></r:form></r:new>"
26
32
  tem: "/if var1 = new_instance\(\"Post\", :title => \"Joe\"\)/"
27
33
  res: "!/\"put\"/"
28
34
 
29
35
  new:
30
36
  # Should accept allowed params (from class and roles) and transform ids to zip (back and forth)
31
- src: "<r:new klass='Letter' title='Joe' parent_id='#{project.id}' paper='white' origin='Mars' bad='value'><r:form><r:input name='title'/> <r:input name='parent_id'/></r:form></r:new>"
37
+ src: "<r:new klass='Letter' title='%q{Joe}' parent_id='project.id' paper='%q{white}' origin='%q{Mars}' bad='%q{value}'><r:form><r:input name='title'/> <r:input name='parent_id'/></r:form></r:new>"
32
38
  tem: "/:title => \"Joe\", :parent_id => .*@node.project.zip.*, :paper => \"white\", :origin => \"Mars\"/"
33
39
  res: "/<input type='text' name='node\[title\]' value='Joe'/> <input type='text' name='node\[parent_id\]' value='21'/><div class='hidden'><input type='hidden' name='node\[klass\]' value='Letter'/><input type='hidden' name='node\[paper\]' value='white'/><input type='hidden' name='node\[origin\]' value='Mars'/></div>/"
34
40
 
@@ -48,10 +54,10 @@ select_class_new_node:
48
54
 
49
55
  select_nodes:
50
56
  src: "<r:form><select nodes='images in site' name='foo'></select></r:form>"
51
- res: "/name='node\[foo\]'><option value=\"\" selected=\"selected\"></option>\n<option value=\"30\">bird</option>\n<option value=\"31\">flower</option>/"
57
+ res: "/name='node\[foo\]'><option value=\"\" selected=\"selected\"></option>\n<option value=\"40\">Autumn Tree</option>\n<option value=\"30\">bird</option>/"
52
58
 
53
59
  do_not_set_parent_id_if_form_contains_parent_id:
54
- src: "<r:children><r:each do='node_name'/><r:add/><r:form><r:select name='parent_id' nodes='projects in site'/><input name='title'/></r:form></r:children>"
60
+ src: "<r:children><r:each do='title'/><r:add/><r:form><r:select name='parent_id' nodes='projects in site'/><input name='title'/></r:form></r:children>"
55
61
  res: "!/node\[parent_id\].\s+value/"
56
62
 
57
63
  select_nodes_selected:
@@ -59,8 +65,8 @@ select_nodes_selected:
59
65
  res: "/option\s* value=.21.\s* selected=.selected.>Clean Water/"
60
66
 
61
67
  select_nodes_in_ajax:
62
- src: "<r:pages><r:each do='node_name'/><r:add/><r:form><r:select nodes='images in site' name='d_ref'/></r:form></r:pages>"
63
- res: "/name=.node\[d_ref\].><option value=\"\" selected=\"selected\"></option>\n<option value=\"30\">bird</option>\n<option value=\"31\">flower</option>/"
68
+ src: "<r:pages><r:each do='title'/><r:add/><r:form><r:select nodes='images in site' name='d_ref'/></r:form></r:pages>"
69
+ res: "/name=.node\[d_ref\].><option value=\"\" selected=\"selected\"></option>\n<option value=\"40\">Autumn Tree</option>\n<option value=\"30\">bird</option>/"
64
70
 
65
71
  select_nodes_show_attr:
66
72
  src: "<r:form><r:select name='title' nodes='images in site' attr='ext' show='title'/></r:form>"
@@ -82,14 +88,32 @@ form_publish:
82
88
  checkbox:
83
89
  context:
84
90
  node: 'opening'
85
- src: "<r:checkbox role='calendar' values='11'/>"
86
- res: "/input type='checkbox' name='node\[calendar_ids\]\[\]' value='11' checked='checked'.*Zena.*hidden.*node\[calendar_ids\]\[\]' value=''/"
91
+ src: "<r:checkbox role='calendar' nodes='11'/>"
92
+ res: "/hidden.*node\[calendar_ids\]\[\]' value=''.*input type='checkbox' name='node\[calendar_ids\]\[\]' value='11' checked='checked'.*Zena/"
93
+
94
+ checkbox_literal:
95
+ context:
96
+ node: 'people'
97
+ src: "<r:checkbox name='assigned' values='gaspard,sophie'/>"
98
+ res: "/value='gaspard' checked='checked'/> <span>gaspard</span>/"
99
+
100
+ checkbox_literal_show:
101
+ context:
102
+ node: 'people'
103
+ src: "<r:checkbox name='assigned' values='gaspard,sophie' show='slave,master'/>"
104
+ res: "/value='gaspard' checked='checked'/> <span>slave</span>/"
105
+
106
+ checkbox_literal_tshow:
107
+ context:
108
+ node: 'people'
109
+ src: "<r:checkbox name='assigned' values='gaspard,sophie' tshow='fr,en'/>"
110
+ res: "/value='gaspard' checked='checked'/> <span>french</span>/"
87
111
 
88
112
  checkbox_finder:
89
113
  context:
90
114
  node: 'opening'
91
115
  src: "<r:checkbox role='calendar' nodes='projects in site'/>"
92
- res: "/value=.21.*Clean Water.*input type=.checkbox. name=.node\[calendar_ids\]\[\]. value=.29. checked=.checked.*wiki/"
116
+ res: "/input type=.checkbox. name=.node\[calendar_ids\]\[\]. value=.29. checked=.checked.*wiki.*value=.21.*Clean Water/"
93
117
 
94
118
  checkbox_checked_value:
95
119
  src: "<r:input type='checkbox' name='tagged[sky]'/>"
@@ -109,10 +133,22 @@ input_set_value:
109
133
  input:
110
134
  context:
111
135
  node: 'ant'
112
- src: "<r:BaseContact><r:input name='first_name'/></r:BaseContact>"
113
- tem: "<% if @node.kpath_match?('NRC') -%><input type='text' name='node[first_name]' value='<%= fquote @node.prop['first_name'] %>'/><% end -%>"
136
+ src: "<r:Contact?><r:input name='first_name'/></r:Contact?>"
137
+ tem: "<% if @node.kpath_match?('NRC') %><input type='text' name='node[first_name]' value='<%= fquote @node.prop['first_name'] %>'/><% end %>"
114
138
  res: "<input type='text' name='node[first_name]' value='Solenopsis'/>"
115
139
 
140
+ input_raw_name:
141
+ src: "<r:input param='first_name'/>"
142
+ tem: "<input type='text' name='first_name' value='<%= fquote params[:first_name] %>'/>"
143
+
144
+ input_param_value:
145
+ context:
146
+ foo:
147
+ "bar.baz": 'xyz'
148
+ src: "<r:input param='foo[bar.baz]'/>"
149
+ tem: "<input type='text' name='foo[bar.baz]' value='<%= fquote param_value(\"foo[bar.baz]\") %>'/>"
150
+ res: "<input type='text' name='foo[bar.baz]' value='xyz'/>"
151
+
116
152
  input_style:
117
153
  src: "<r:input style='display:none;' type='submit'/>"
118
154
  res: "<input type='submit' style='display:none;'/>"
@@ -120,23 +156,61 @@ input_style:
120
156
  textarea:
121
157
  context:
122
158
  node: 'ant'
123
- src: "<r:BaseContact do='textarea' name='first_name'/>"
159
+ src: "<r:Contact? do='textarea' name='first_name'/>"
124
160
  res: "<textarea name='node[first_name]'>Solenopsis</textarea>"
125
161
 
126
162
  textarea_with_blocks:
127
163
  context:
128
164
  node: 'ant'
129
- src: "<r:BaseContact do='textarea' name='first_name'>Sir <r:show attr='first_name'/></r:BaseContact>"
165
+ src: "<r:Contact? do='textarea' name='first_name'>Sir <r:show attr='first_name'/></r:Contact?>"
130
166
  tem: "/<textarea name='node\[first_name\]'>Sir <%= @node.prop\['first_name'\] %></textarea>/"
131
167
  res: "<textarea name='node[first_name]'>Sir Solenopsis</textarea>"
132
168
 
133
169
  input_new:
134
170
  context:
135
171
  node: 'ant'
136
- src: "<r:base_contacts><r:each/><r:form><r:input name='first_name'/></r:form><r:add/></r:base_contacts>"
172
+ src: "<r:contacts><r:each/><r:form><r:input name='first_name'/></r:form><r:add/></r:contacts>"
137
173
  res: "/name='node\[first_name\]' [^>]*id='list1_first_name'/"
138
174
 
139
175
  show_in_form:
140
176
  src: "<r:form><b do='title'/></r:form>"
141
177
  tem: "/<b><%= @node.prop\['title'\] %></b>/"
142
178
  res: '/<b>status title</b>/'
179
+
180
+ not_set_parent_id:
181
+ src: "<r:form></r:form>"
182
+ tem: "!/node\[parent_id\]/"
183
+
184
+ set_parent_id_in_new:
185
+ src: "<r:new klass='Page' do='form'></r:new>"
186
+ tem: "/node\[parent_id\].*@node.zip/"
187
+ res: "/<input type='hidden' name='node\[parent_id\]' value='22'/>/"
188
+
189
+
190
+ label_on_input:
191
+ context:
192
+ lang: fr
193
+ src: "<r:input label='t' name='title'/>"
194
+ res: "<label>titre</label> <span><input type='text' name='node[title]' value='Etat des travaux'/></span>"
195
+
196
+ label_on_textarea:
197
+ context:
198
+ lang: fr
199
+ src: "<r:textarea label='t' name='title'/>"
200
+ res: "<label>titre</label> <span><textarea name='node[title]'>Etat des travaux</textarea></span>"
201
+
202
+ label_on_checkbox:
203
+ context:
204
+ lang: fr
205
+ src: "<r:checkbox label='t' name='title' values='1,2'/>"
206
+ res: "/<label>titre</label>.*input type='checkbox'"
207
+
208
+ label_on_select:
209
+ context:
210
+ lang: fr
211
+ src: "<r:select label='t' name='title' values='1,2'/>"
212
+ res: "/<label>titre</label> <span><select name='node\[title\]'/"
213
+
214
+ param_on_select:
215
+ src: "<r:select param='q[contact.status]' values='0,-5,-10' tshow='active, being registered, inactive'/>"
216
+ res: "<select name='q[contact.status]'><option value=\"0\">active</option>\n<option value=\"-5\">being registered</option>\n<option value=\"-10\">inactive</option></select>"
@@ -87,7 +87,7 @@ trans_text_dyn_string:
87
87
  trans_rubyless_dyn_string:
88
88
  context:
89
89
  lang: 'fr'
90
- src: "<r:load dictionary='/default/translations'><p do='t(\"lang_#{ref_lang}\")'/></r:load>"
90
+ src: "<r:load dictionary='/Default skin/translations'><p do='t(\"lang_#{ref_lang}\")'/></r:load>"
91
91
  res: "<p>anglais</p>"
92
92
 
93
93
  trans_literal_string:
@@ -112,51 +112,56 @@ complex_lang_list:
112
112
  <ul do='site.lang_list'>
113
113
  <li do='each' class='#{this == visitor.lang ? "on" : "off"}' do='zen_path(@node, :lang =&gt; this)'/>
114
114
  </ul>
115
- res: "/li class='on'>/oo/projects/cleanWater/page22.html\?lang=en</"
115
+ res: "/li class='on'>/oo/projects-list/Clean-Water-project/page22.html\?lang=en</"
116
116
 
117
117
  html_lang_and_dict:
118
- src: "<html xmlns='http://www.w3.org/1999/xhtml' lang='#{v.lang}' do='load' dictionary='/default/translations' xml:lang='en'></html>"
118
+ src: "<html xmlns='http://www.w3.org/1999/xhtml' lang='#{v.lang}' do='load' dictionary='/Default skin/translations' xml:lang='en'></html>"
119
119
  res: "<html xmlns='http://www.w3.org/1999/xhtml' lang='en'></html>"
120
120
 
121
121
  dictionary_fr:
122
122
  context:
123
123
  lang: 'fr'
124
- src: "<r:load dictionary='/default/translations'><r:trans>foo</r:trans>: <r:t>I love</r:t> <r:trans>words</r:trans></r:load>"
125
- tem: "<% _zdict = load_dictionary(828931430) -%>foo: j'aime les mots"
124
+ src: "<r:load dictionary='/Default skin/translations'><r:trans>foo</r:trans>: <r:t>I love</r:t> <r:trans>words</r:trans></r:load>"
125
+ tem: "<% _zdict = load_dictionary(828931430) %>foo: j'aime les mots"
126
126
  res: "foo: j'aime les mots"
127
127
 
128
128
  dynamic_dictionary_eval_fr:
129
129
  context:
130
130
  lang: 'fr'
131
131
  node: status
132
- src: "<r:load dictionary='/default/translations'><r:eval>trans(node_name)</r:eval></r:load>"
133
- tem: "<% _zdict = load_dictionary(828931430) -%><%= _zdict.get(@node.node_name) %>"
134
- res: "statut"
132
+ src: "<r:load dictionary='/Default skin/translations'><r:eval>trans(title)</r:eval></r:load>"
133
+ tem: "<% _zdict = load_dictionary(828931430) %><%= _zdict.get(@node.prop['title']) %>"
134
+ res: "Etat des travaux"
135
135
 
136
136
  dynamic_dictionary_t_fr:
137
137
  context:
138
138
  lang: 'fr'
139
139
  node: status
140
- src: "<r:load dictionary='/default/translations'><r:t attr='node_name'/></r:load>"
141
- tem: "<% _zdict = load_dictionary(828931430) -%><%= _zdict.get(@node.node_name) %>"
142
- res: "statut"
140
+ src: "<r:load dictionary='/Default skin/translations'><r:t attr='title'/></r:load>"
141
+ tem: "<% _zdict = load_dictionary(828931430) %><%= _zdict.get(@node.prop['title']) %>"
142
+ res: "Etat des travaux"
143
143
 
144
144
  dynamic_dictionary_literal_fr:
145
145
  context:
146
146
  lang: 'fr'
147
147
  node: status
148
- src: "<r:load dictionary='/default/translations'><r:eval>trans('status')</r:eval></r:load>"
149
- tem: "<% _zdict = load_dictionary(828931430) -%>statut"
148
+ src: "<r:load dictionary='/Default skin/translations'><r:eval>trans('status title')</r:eval></r:load>"
149
+ tem: "<% _zdict = load_dictionary(828931430) %>statut"
150
150
  res: "statut"
151
151
 
152
152
  dictionary_de:
153
153
  context:
154
154
  lang: 'de'
155
- src: "<r:load dictionary='/default/translations'><r:trans>foo</r:trans>: <r:trans>I love</r:trans> <r:trans>words</r:trans></r:load>"
156
- tem: "<% _zdict = load_dictionary(828931430) -%>foo: Ich liebe Wörter"
155
+ src: "<r:load dictionary='/Default skin/translations'><r:trans>foo</r:trans>: <r:trans>I love</r:trans> <r:trans>words</r:trans></r:load>"
156
+ tem: "<% _zdict = load_dictionary(828931430) %>foo: Ich liebe Wörter"
157
157
  res: "foo: Ich liebe Wörter"
158
158
 
159
159
  dictionary_tformat:
160
- src: "<r:load dictionary='/default/translations'><r:show date='created_at' tformat='date_format'/></r:load>"
161
- tem: "<% _zdict = load_dictionary(828931430) -%><%= format_date(@node.created_at, :format => \"[%d.%m]\") %>"
162
- res: "[10.03]"
160
+ src: "<r:load dictionary='/Default skin/translations'><r:show date='created_at' tformat='date_format'/></r:load>"
161
+ tem: "<% _zdict = load_dictionary(828931430) %><%= format_date(@node.created_at, :format => \"[%d.%m]\") %>"
162
+ res: "[10.03]"
163
+
164
+ iconv:
165
+ src: "<r:iconv to='latin1'>août</r:iconv>"
166
+ tem: "<% _zdata = capture do %>août<% end %><%= Iconv.iconv(\"latin1\", 'utf8', _zdata) %>"
167
+ res: "ao\xfbt"
@@ -0,0 +1,7 @@
1
+ default:
2
+ context:
3
+ lang: 'en'
4
+ visitor: 'ant'
5
+ node: 'status'
6
+ src: "<b do='blog in site' do='scope_index.tag_title'/>"
7
+ tem: "/var1\.scope_index \? var1\.scope_index\.tag_title : nil/"
@@ -2,17 +2,17 @@
2
2
  # [set] should be reimplemented with RubyLess in mind
3
3
  if_test_param_var:
4
4
  src: "<r:set var='year'>3000</r:set><r:if test='year eq param:f'>funky!</r:if>"
5
- tem: "<% set_year = capture do %>3000<% end -%><% if set_year == params[:f] -%>funky!<% end -%>"
5
+ tem: "<% set_year = capture do %>3000<% end %><% if set_year == params[:f] %>funky!<% end %>"
6
6
 
7
7
  # [zafu_attribute:edit] needs reimplementation with JS rendering (like drag/drop): use data attribute ? class name ?
8
8
  show_edit:
9
- src: "<r:show attr='node_name' edit='true'/>"
10
- tem: "<% if @node.can_write? -%><span class='show_edit' id='list1_name'><%= link_to_remote(@node.name, :url => edit_node_path(@node.zip) + \"?attribute=name&dom_id=list1_name\", :method => :get) %></span><% else -%><%= @node.name %><% end -%>"
9
+ src: "<r:show attr='title' edit='true'/>"
10
+ tem: "<% if @node.can_write? %><span class='show_edit' id='list1_name'><%= link_to_remote(@node.name, :url => edit_node_path(@node.zip) + \"?attribute=name&dom_id=list1_name\", :method => :get) %></span><% else %><%= @node.name %><% end %>"
11
11
  res: "/span class='show_edit' id='list1_name'>.*Ajax\.Request\('/nodes/22/edit\?attribute=name/"
12
12
 
13
13
 
14
14
  # The result should replace scoped ids "list1_#{var1.zip}_#{var2.zip}" by "#{ndom_id(@node)}_#{var2.zip}".
15
- each_in_each_dom_id:
15
+ saved_each_in_each_dom_id:
16
16
  src: |
17
17
  <ul class='tags' do='tags in site'>
18
18
  <li do='each'><b do='link'/>
@@ -25,25 +25,19 @@ each_in_each_dom_id:
25
25
  </ul>
26
26
  'ajax/each/en/in/each/dom/id/list1.erb': "/id='<%= %Q\{#\{ndom_id(@node)\}_#\{var2.zip\}\} %>'>/"
27
27
 
28
- # [swap] needs to be reimplemented
29
- swap_in_each:
30
- src: "<r:pages><li do='each'><span do='swap' attr='origin' states='todo,done,alert'/></li></r:pages>"
31
- tem: "/<li id='list1_<%= var1.zip %>'><span>.*var1.can_write?.*tag_to_remote.*else.*var1.version.dyn\[\"status\"\]/"
32
-
33
-
34
28
  # [ajax] zazen edit=true (maybe should implement in zafu_attributes with filter_edit)
35
29
  zazen_edit:
36
- src: "<r:zazen attr='node_name' edit='true'/>"
37
- tem: "<div class='zazen' id='list1_name'><% if @node.can_write? -%><span class='zazen_edit'><%= link_to_remote(\"edit\", :url => edit_node_path(@node.zip) + \"?attribute=name&dom_id=list1_name&zazen=true\", :method => :get) %></span><% end -%><%= zazen(@node.node_name, :node=>@node) %></div>"
30
+ src: "<r:zazen attr='title' edit='true'/>"
31
+ tem: "<div class='zazen' id='list1_name'><% if @node.can_write? %><span class='zazen_edit'><%= link_to_remote(\"edit\", :url => edit_node_path(@node.zip) + \"?attribute=name&dom_id=list1_name&zazen=true\", :method => :get) %></span><% end %><%= zazen(@node.prop['title'], :node=>@node) %></div>"
38
32
  res: "/div class='zazen' id='list1_name'>.*Ajax\.Request\('/nodes/22/edit\?attribute=name/"
39
33
 
40
34
  zazen_edit_publish_force:
41
- src: "<r:zazen attr='node_name' edit='true' publish='force'/>"
42
- tem: "/attribute=node_name&dom_id=.*_node_name&publish=force&zazen=true/"
35
+ src: "<r:zazen attr='title' edit='true' publish='force'/>"
36
+ tem: "/attribute=title&dom_id=.*_title&publish=force&zazen=true/"
43
37
 
44
38
  zazen_edit_publish_true:
45
- src: "<r:zazen attr='node_name' edit='true' publish='true'/>"
46
- tem: "/attribute=node_name&dom_id=.*_node_name&publish=true&zazen=true/"
39
+ src: "<r:zazen attr='title' edit='true' publish='true'/>"
40
+ tem: "/attribute=title&dom_id=.*_title&publish=true&zazen=true/"
47
41
 
48
42
  # Update query builder for DataEntry
49
43
  select_nodes_data_list:
@@ -1,6 +1,6 @@
1
1
 
2
2
  cache_part:
3
- src: "<r:cache><r:show attr='node_name'/></r:cache>"
3
+ src: "<r:cache><r:show attr='title'/></r:cache>"
4
4
  tem: "<% cache1 = Cache.with(visitor.id, visitor.group_ids, \"NP\", \"en\", \"/cache/part/list1\") do capture do %><%= @node.name %><% end; end %><%= cache1 %>"
5
5
 
6
6
  trans_show:
@@ -12,4 +12,4 @@ trans_show:
12
12
 
13
13
  node_path:
14
14
  src: "<r:context select='/projects/wiki'><r:link/></r:context>"
15
- res: "<a href='/en/project29.html'>a wiki with zena</a>"
15
+ res: "<a href='/en/blog29.html'>a wiki with Zena</a>"
@@ -0,0 +1,207 @@
1
+ default:
2
+ context:
3
+ lang: 'en'
4
+ visitor: 'ant'
5
+ node: 'cleanWater'
6
+ src: "simple text"
7
+ tem: "simple text"
8
+ res: "simple text"
9
+
10
+ # ============= query_parse_param ========
11
+ empty:
12
+ tem: "<%= query_parse('para' => %{}) %>"
13
+ res: "1=1"
14
+
15
+ empty_quotes:
16
+ tem: "<%= query_parse('para' => %{\"\"}) %>"
17
+ res: "para = \"\""
18
+
19
+ empty_single_quotes:
20
+ tem: "<%= query_parse('para' => %{''}) %>"
21
+ res: "para = ''"
22
+
23
+ null_quoted:
24
+ tem: "<%= query_parse('para' => %{\"null\"}) %>"
25
+ res: "para = \"null\""
26
+
27
+ is_null:
28
+ tem: "<%= query_parse('para' => %{null}) %>"
29
+ res: "para is null"
30
+
31
+ is_not_null:
32
+ tem: "<%= query_parse('para' => %{!null}) %>"
33
+ res: "not (para is null)"
34
+
35
+ literal:
36
+ tem: "<%= query_parse('para' => %{hello}) %>"
37
+ res: "para = \"hello\""
38
+
39
+ literal_date:
40
+ tem: "<%= query_parse('para' => %{2.12.1983}) %>"
41
+ res: "para = '1983-12-02'"
42
+
43
+ number:
44
+ tem: "<%= query_parse('para' => %{45}) %>"
45
+ res: "para = 45"
46
+
47
+ not_number:
48
+ tem: "<%= query_parse('para' => %{!45}) %>"
49
+ res: "not (para = 45)"
50
+
51
+ greater_then:
52
+ tem: "<%= query_parse('para' => %{>32}) %>"
53
+ res: "para >32"
54
+
55
+ greater_then_date:
56
+ context:
57
+ lang: fr
58
+ tem: "<%= query_parse('para' => %{>7.5.1965}) %>"
59
+ res: "para >'1965-05-07'"
60
+
61
+ greater_or_equal_then:
62
+ tem: "<%= query_parse('para' => %{>=32}) %>"
63
+ res: "para >=32"
64
+
65
+ smaller_then:
66
+ tem: "<%= query_parse('para' => %{< 32}) %>"
67
+ res: "para < 32"
68
+
69
+ smaller_or_equal_then:
70
+ tem: "<%= query_parse('para' => %{<=32}) %>"
71
+ res: "para <=32"
72
+
73
+ equal:
74
+ tem: "<%= query_parse('para' => %{=32+3}) %>"
75
+ res: "para =32+3"
76
+
77
+ not_equal:
78
+ tem: "<%= query_parse('para' => %{!=32}) %>"
79
+ res: "not (para =32)"
80
+
81
+ interval:
82
+ tem: "<%= query_parse('para' => %{10..20}) %>"
83
+ res: "para >= 10 and para <= 20"
84
+
85
+ interval_date:
86
+ context:
87
+ lang: fr
88
+ tem: "<%= query_parse('para' => %{1.1.2010..31.12.2010}) %>"
89
+ res: "para >= '2010-01-01' and para <= '2010-12-31'"
90
+
91
+ not_interval_date:
92
+ context:
93
+ lang: fr
94
+ tem: "<%= query_parse('para' => %{!1.1.2010..31.12.2010}) %>"
95
+ res: "not (para >= '2010-01-01' and para <= '2010-12-31')"
96
+
97
+ interval_date_en:
98
+ context:
99
+ lang: en
100
+ tem: "<%= query_parse('para' => %{2010/1/1..2010/12/31}) %>"
101
+ res: "para >= '2010-01-01' and para <= '2010-12-31'"
102
+
103
+ like:
104
+ tem: "<%= query_parse('para' => %{*bar}) %>"
105
+ res: "para like \"%bar\""
106
+
107
+ like_at_end:
108
+ tem: "<%= query_parse('para' => %{bar*}) %>"
109
+ res: "para like \"bar%\""
110
+
111
+ literal_with_star:
112
+ tem: "<%= query_parse('para' => %{'*bar'}) %>"
113
+ res: "para = '*bar'"
114
+
115
+ many_params:
116
+ tem: "<%= query_parse('anti' => %{'*bar'}, 'gone' => %{> 13}) %>"
117
+ res: "/anti = '\*bar' and gone > 13|gone > 13 and anti = '\*bar'/"
118
+
119
+ rubyless_query_parse:
120
+ context:
121
+ p:
122
+ id: '> 45'
123
+ name: 'foo'
124
+ src: "<r:eval>query_parse(params[:p])</r:eval>"
125
+ res: "/id > 45 and name = \"foo\"|name = \"foo\" and id > 45/"
126
+
127
+ paginate_list:
128
+ src: "<r:pages in='site' limit='10' paginate='p' do='link' page='list'/>"
129
+ # should define page_name
130
+ res: "1 <a href='/oo/projects-list/Clean-Water-project?p=2'>2</a>"
131
+
132
+ paginate_count:
133
+ src: "<r:pages in='site' paginate='p' do='count'/>"
134
+ # should properly pass the query to sub-contexts.
135
+ tem: '/<%= _znodes %>/'
136
+ res: "18"
137
+
138
+ paginate_page_name:
139
+ context:
140
+ p: 5
141
+ src: "<r:pages in='site' limit='3' paginate='p' do='link' page='list' page_count='4' do='each'><r:page_name/>(<r:this/>)</r:pages>"
142
+ # should define page_name
143
+ res: "…(3) 4(4) 5 6(6)"
144
+ # ============= Dynamic query ========
145
+
146
+ query:
147
+ # Live compile and query from params
148
+ context:
149
+ visitor: lion
150
+ node: cleanWater
151
+ qb: "nodes where updated_at.year = 2007 in project"
152
+ src: "<r:query default='nodes in project' do='each' join=', ' do='title'/>"
153
+ tem: "/if var1 = query\('Node', \"@node\", params\[:qb\] \|\| \"nodes in project\"\)/"
154
+ res: 'crocodiles'
155
+
156
+ query_with_default:
157
+ # Live compile and query from params
158
+ context:
159
+ visitor: lion
160
+ node: cleanWater
161
+ src: "<r:query default='nodes in project' do='each' join=', ' do='title'/>"
162
+ res: "crocodiles, it's a lake, Keeping things clean !, The lake we love, Nice Bananas, parc opening, status title, water"
163
+
164
+ query_with_param:
165
+ # Live compile and query from params
166
+ context:
167
+ visitor: lion
168
+ node: cleanWater
169
+ qb: "nodes where updated_at.year = #{params[:p]} in project"
170
+ p: 2007
171
+ src: "<r:query default='nodes in project' do='each' join=', ' do='title'/>"
172
+ res: 'crocodiles'
173
+
174
+ query_eval:
175
+ # Live compile and query from params
176
+ context:
177
+ visitor: lion
178
+ node: cleanWater
179
+ scope: 'self'
180
+ src: "<r:query select='pages in #{params[:scope] || \"project\"}' default='pages in project' do='each' join=', ' do='title'/>"
181
+ res: 'crocodiles, Keeping things clean !, Nice Bananas, status title'
182
+
183
+ query_with_parse:
184
+ context:
185
+ filter:
186
+ title: 'status title'
187
+ src: "<r:query default='pages in site' select='pages where #{query_parse(params[:filter])} in site' do='each' join=', ' do='title'/>"
188
+ tem: '/query.*pages where #\{query_parse\(params\[:filter\]\)\} in site\"\)/'
189
+ res: 'status title'
190
+
191
+ query_with_parse_paginate:
192
+ src: "<r:query default='pages in site limit 4 paginate p' select='pages where #{query_parse(params[:q])} in site limit 2 paginate p' do='link' page='list'/>"
193
+ # should properly pass the query to sub-contexts.
194
+ tem: '/page_numbers/'
195
+ res: "/1.*2.*3.*4.*5/"
196
+
197
+ query_can_be_nil_bad_argument_type:
198
+ context:
199
+ filter:
200
+ title: 'status title'
201
+ src: "<r:query default='pages in site' eval='params[:filter]' do='each' join=', ' do='title'/>"
202
+ tem: '/params\[:filter\] \|\| \"pages in site\"/'
203
+ res: ''
204
+
205
+ query_truc:
206
+ tem: '<%= query("Page", "@node", "pages in site", :type => :count) %>'
207
+ res: '18'