zena 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. data/History.txt +23 -1
  2. data/MIT-LICENSE +2 -2
  3. data/README.rdoc +2 -15
  4. data/app/controllers/acls_controller.rb +1 -1
  5. data/app/controllers/documents_controller.rb +12 -3
  6. data/app/controllers/nodes_controller.rb +1 -3
  7. data/app/controllers/sites_controller.rb +7 -0
  8. data/app/controllers/versions_controller.rb +1 -1
  9. data/app/controllers/virtual_classes_controller.rb +7 -8
  10. data/app/models/acl.rb +3 -2
  11. data/app/models/relation_proxy.rb +2 -1
  12. data/app/models/role.rb +16 -0
  13. data/app/models/site.rb +48 -0
  14. data/app/models/text_document.rb +2 -1
  15. data/app/models/user.rb +2 -1
  16. data/app/models/zip.rb +2 -1
  17. data/app/views/acls/index.rhtml +11 -1
  18. data/app/views/documents/show.rhtml +1 -1
  19. data/app/views/relations/_add.erb +2 -2
  20. data/app/views/relations/_form.erb +5 -2
  21. data/app/views/relations/_li.erb +4 -1
  22. data/app/views/relations/index.erb +3 -3
  23. data/app/views/sites/_form.erb +1 -1
  24. data/app/views/sites/_job.erb +4 -0
  25. data/app/views/sites/index.erb +1 -1
  26. data/app/views/sites/jobs.erb +10 -0
  27. data/app/views/templates/document_create_tabs/_file.rhtml +3 -0
  28. data/app/views/zafu/default/Node-+search.zafu +2 -2
  29. data/bricks/acls/zena/init.rb +2 -1
  30. data/bricks/acls/zena/test/integration/acl_integration_test.rb +5 -5
  31. data/bricks/acls/zena/test/sites/erebus/acls.yml +2 -2
  32. data/bricks/acls/zena/test/unit/acl_test.rb +2 -2
  33. data/bricks/grid/lib/bricks/grid.rb +110 -0
  34. data/bricks/grid/zena/init.rb +4 -0
  35. data/bricks/math/lib/bricks/math.rb +1 -0
  36. data/bricks/pdf/lib/bricks/pdf.rb +10 -1
  37. data/bricks/sphinx/zena/tasks.rb +8 -40
  38. data/bricks/spreadsheet/README +31 -0
  39. data/bricks/spreadsheet/lib/bricks/spreadsheet.rb +293 -0
  40. data/bricks/spreadsheet/zena/init.rb +3 -0
  41. data/bricks/spreadsheet/zena/test/sites/zena/links.yml +11 -0
  42. data/bricks/spreadsheet/zena/test/unit/xlsx_test.rb +5 -0
  43. data/bricks/spreadsheet/zena/test/zafu/README +27 -0
  44. data/bricks/spreadsheet/zena/test/zafu/spreadsheet.yml +19 -0
  45. data/bricks/worker/lib/bricks/worker.rb +11 -5
  46. data/bricks/worker/zena/init.rb +8 -0
  47. data/bricks/worker/zena/migrate/20120501091514_add_site_id_to_jobs.rb +9 -0
  48. data/bricks/zena/zena/migrate/01_base.rb +0 -7
  49. data/bricks/zena/zena/migrate/20111214112233_add_comment_to_relations.rb +9 -0
  50. data/config/bricks.yml +15 -1
  51. data/config/environments/production.rb +2 -2
  52. data/config/gems.yml +6 -1
  53. data/doc/zafu_changes.yml +1 -1
  54. data/lib/tasks/zena.rake +6 -2
  55. data/lib/zena/app.rb +1 -1
  56. data/lib/zena/code/default_syntax.rb +5 -1
  57. data/lib/zena/db_helper/mysql.rb +5 -1
  58. data/lib/zena/deploy/app_init.rhtml +11 -7
  59. data/lib/zena/deploy/awstats.conf.rhtml +1 -1
  60. data/lib/zena/deploy/start_stop.rhtml +5 -5
  61. data/lib/zena/deploy/vhost.rhtml +16 -2
  62. data/lib/zena/deploy.rb +5 -3
  63. data/lib/zena/info.rb +1 -1
  64. data/lib/zena/parser/zazen_rules.rb +7 -7
  65. data/lib/zena/remote/node.rb +7 -0
  66. data/lib/zena/routes.rb +4 -5
  67. data/lib/zena/test_controller.rb +18 -1
  68. data/lib/zena/use/action.rb +13 -4
  69. data/lib/zena/use/ajax.rb +10 -4
  70. data/lib/zena/use/authlogic.rb +1 -1
  71. data/lib/zena/use/calendar.rb +4 -0
  72. data/lib/zena/use/conditional.rb +3 -0
  73. data/lib/zena/use/dates.rb +44 -4
  74. data/lib/zena/use/display.rb +45 -15
  75. data/lib/zena/use/forms.rb +59 -30
  76. data/lib/zena/use/query_builder.rb +12 -12
  77. data/lib/zena/use/recursion.rb +1 -1
  78. data/lib/zena/use/rendering.rb +18 -17
  79. data/lib/zena/use/urls.rb +2 -1
  80. data/lib/zena/use/zafu_safe_definitions.rb +0 -9
  81. data/lib/zena/use/zafu_templates.rb +2 -2
  82. data/lib/zena/use/zazen.rb +1 -3
  83. data/lib/zena/use.rb +13 -2
  84. data/lib/zena.rb +8 -2
  85. data/public/images/bullet_back.png +0 -0
  86. data/public/javascripts/grid.js +535 -0
  87. data/public/javascripts/tablekit.js +0 -0
  88. data/public/javascripts/window.js +0 -0
  89. data/public/javascripts/zena.js +17 -7
  90. data/public/stylesheets/admin.css +5 -1
  91. data/public/stylesheets/grid.css +19 -0
  92. data/test/fixtures/files/TestNode.zafu +123 -311
  93. data/test/fixtures/files/translations_fr.yml +6 -1
  94. data/test/functional/acls_controller_test.rb +2 -2
  95. data/test/functional/nodes_controller_test.rb +17 -11
  96. data/test/functional/virtual_classes_controller_test.rb +1 -1
  97. data/test/integration/query_node/basic.yml +9 -0
  98. data/test/integration/query_node/dates.yml +1 -1
  99. data/test/integration/zafu_compiler/ajax.yml +9 -9
  100. data/test/integration/zafu_compiler/basic.yml +0 -24
  101. data/test/integration/zafu_compiler/dates.yml +24 -7
  102. data/test/integration/zafu_compiler/display.yml +45 -2
  103. data/test/integration/zafu_compiler/errors.yml +0 -6
  104. data/test/integration/zafu_compiler/forms.yml +41 -3
  105. data/test/integration/zafu_compiler/query.yml +29 -3
  106. data/test/integration/zafu_compiler/roles.yml +0 -4
  107. data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
  108. data/test/integration/zafu_compiler_test.rb +11 -3
  109. data/test/selenium/Add/add3.rsel +8 -8
  110. data/test/selenium/Drop/drop1.rsel +12 -12
  111. data/test/selenium/Drop/drop2.rsel +14 -14
  112. data/test/selenium/Drop/drop3.rsel +21 -21
  113. data/test/selenium/Drop/drop4.rsel +1 -1
  114. data/test/selenium/Edit/edit2.rsel +9 -9
  115. data/test/selenium/Edit/edit4.rsel +55 -0
  116. data/test/selenium/Edit/edit5.rsel +41 -0
  117. data/test/selenium/Edit/edit6.rsel +53 -0
  118. data/test/selenium/Filter/0setup.rsel +12 -0
  119. data/test/selenium/Filter/filter1.rsel +9 -0
  120. data/test/selenium/Filter/filter2.rsel +9 -0
  121. data/test/selenium/Form/form1.rsel +1 -1
  122. data/test/selenium/Form/form2.rsel +1 -1
  123. data/test/selenium/Form/form3.rsel +15 -0
  124. data/test/selenium/Grid/0setup.rsel +13 -0
  125. data/test/selenium/Grid/grid1.rsel +11 -0
  126. data/test/selenium/Swap/0setup.rsel +12 -0
  127. data/test/selenium/Swap/swap1.rsel +13 -0
  128. data/test/selenium/Swap/swap2.rsel +11 -0
  129. data/test/selenium/Toggle/toggle1.rsel +6 -6
  130. data/test/sites/zena/versions.yml +1 -1
  131. data/test/unit/relation_proxy_test.rb +36 -0
  132. data/test/unit/site_test.rb +10 -2
  133. data/test/unit/zena/use/rendering_test.rb +7 -6
  134. data/test/unit/zena/use/zazen_test.rb +1 -2
  135. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +24 -0
  136. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +58 -0
  137. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +88 -0
  138. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +27 -0
  139. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +23 -0
  140. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +19 -0
  141. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +19 -0
  142. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +16 -0
  143. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +16 -0
  144. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +16 -0
  145. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +18 -0
  146. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +18 -0
  147. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +16 -0
  148. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +18 -0
  149. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +16 -0
  150. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +16 -0
  151. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +16 -0
  152. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +16 -0
  153. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +16 -0
  154. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +16 -0
  155. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +18 -0
  156. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +16 -0
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +17 -0
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +17 -0
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +18 -0
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +22 -0
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +23 -0
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +25 -0
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +18 -0
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +18 -0
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +18 -0
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +16 -0
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +16 -0
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +20 -0
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +20 -0
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +16 -0
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +16 -0
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +16 -0
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +16 -0
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +16 -0
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +16 -0
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +16 -0
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +18 -0
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +16 -0
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +16 -0
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +16 -0
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +16 -0
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +16 -0
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +16 -0
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +16 -0
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +16 -0
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +16 -0
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +16 -0
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +16 -0
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +16 -0
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +16 -0
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +16 -0
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +16 -0
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +16 -0
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +16 -0
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +16 -0
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +16 -0
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +16 -0
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +16 -0
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +16 -0
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +16 -0
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +16 -0
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +16 -0
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +16 -0
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +16 -0
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +16 -0
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +16 -0
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +16 -0
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +16 -0
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +16 -0
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +104 -0
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +17 -0
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +13 -0
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +25 -0
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +166 -0
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +304 -0
  218. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +37 -0
  219. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +52 -0
  220. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  221. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +118 -0
  222. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  223. data/vendor/TextMate/Zena.tmbundle/info.plist +17 -0
  224. data/vendor/plugins/selenium-on-rails/CHANGELOG +125 -0
  225. data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +202 -0
  226. data/vendor/plugins/selenium-on-rails/README.md +202 -0
  227. data/vendor/plugins/selenium-on-rails/Rakefile +38 -0
  228. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +265 -0
  229. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +148 -0
  230. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +231 -0
  231. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +195 -0
  232. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +295 -0
  233. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +219 -0
  234. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +156 -0
  235. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +179 -0
  236. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +223 -0
  237. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +441 -0
  238. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +3098 -0
  239. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +2080 -0
  240. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +116 -0
  241. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +116 -0
  242. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +126 -0
  243. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +150 -0
  244. data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +422 -0
  245. data/vendor/plugins/selenium-on-rails/doc/files/README.html +321 -0
  246. data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +108 -0
  247. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +101 -0
  248. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +222 -0
  249. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +109 -0
  250. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +111 -0
  251. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +101 -0
  252. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +101 -0
  253. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +118 -0
  254. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +101 -0
  255. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +101 -0
  256. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +114 -0
  257. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +113 -0
  258. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +120 -0
  259. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +108 -0
  260. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +115 -0
  261. data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +42 -0
  262. data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +43 -0
  263. data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +182 -0
  264. data/vendor/plugins/selenium-on-rails/doc/index.html +24 -0
  265. data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +208 -0
  266. data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +19 -0
  267. data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +50 -0
  268. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +16 -0
  269. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +14 -0
  270. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +11 -0
  271. data/vendor/plugins/selenium-on-rails/init.rb +15 -0
  272. data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +122 -0
  273. data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +16 -0
  274. data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +8 -0
  275. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +215 -0
  276. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +57 -0
  277. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +36 -0
  278. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +61 -0
  279. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +20 -0
  280. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +44 -0
  281. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +87 -0
  282. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +56 -0
  283. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +116 -0
  284. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +1002 -0
  285. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +514 -0
  286. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +91 -0
  287. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +24 -0
  288. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +11 -0
  289. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +30 -0
  290. data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +18 -0
  291. data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +5 -0
  292. data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +9 -0
  293. data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +67 -0
  294. data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +26 -0
  295. data/vendor/plugins/selenium-on-rails/routes.rb +24 -0
  296. data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +7 -0
  297. data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +8 -0
  298. data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +110 -0
  299. data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +109 -0
  300. data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +145 -0
  301. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +55 -0
  302. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +177 -0
  303. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +177 -0
  304. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
  305. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
  306. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +298 -0
  307. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +16 -0
  308. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +205 -0
  309. data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
  310. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
  311. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
  312. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
  313. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
  314. data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
  315. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
  316. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
  317. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +1759 -0
  318. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +1800 -0
  319. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +6 -0
  320. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  321. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  322. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  323. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +356 -0
  324. data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +2006 -0
  325. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +101 -0
  326. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +815 -0
  327. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +915 -0
  328. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +958 -0
  329. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +47 -0
  330. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +283 -0
  331. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +383 -0
  332. data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +91 -0
  333. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +69 -0
  334. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +1616 -0
  335. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +72 -0
  336. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +3184 -0
  337. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +2300 -0
  338. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +153 -0
  339. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +377 -0
  340. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +175 -0
  341. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +148 -0
  342. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +695 -0
  343. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +1362 -0
  344. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +5 -0
  345. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +803 -0
  346. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +1537 -0
  347. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +979 -0
  348. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +3 -0
  349. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +75 -0
  350. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +153 -0
  351. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
  352. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +43 -0
  353. data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +316 -0
  354. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +566 -0
  355. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +2816 -0
  356. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +549 -0
  357. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +149 -0
  358. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +2450 -0
  359. data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +8 -0
  360. data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +37 -0
  361. data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +27 -0
  362. data/vendor/plugins/selenium-on-rails/test/paths_test.rb +72 -0
  363. data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +157 -0
  364. data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +708 -0
  365. data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +242 -0
  366. data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +67 -0
  367. data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +43 -0
  368. data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +35 -0
  369. data/vendor/plugins/selenium-on-rails/test/setup_test.rb +31 -0
  370. data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +109 -0
  371. data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +17 -0
  372. data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +51 -0
  373. data/vendor/plugins/selenium-on-rails/test/test_helper.rb +101 -0
  374. data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +1 -0
  375. data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +12 -0
  376. data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +6 -0
  377. data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +2 -0
  378. data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +6 -0
  379. data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +1 -0
  380. data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +5 -0
  381. data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +5 -0
  382. data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +7 -0
  383. data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +8 -0
  384. data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +7 -0
  385. data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +1 -0
  386. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +1 -0
  387. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +1 -0
  388. data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +1 -0
  389. data/zena.gemspec +290 -7
  390. metadata +346 -52
  391. data/app/views/nodes/_table.rhtml +0 -14
  392. data/lib/zena/use/grid.rb +0 -154
@@ -0,0 +1,9 @@
1
+ class AddCommentToRelations < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :relations, :comment, :text
4
+ end
5
+
6
+ def self.down
7
+ remove_column :relations, :comment
8
+ end
9
+ end
data/config/bricks.yml CHANGED
@@ -4,10 +4,13 @@ test:
4
4
  tags: ON
5
5
  captcha: ON
6
6
  acls: ON
7
+ grid: ON
7
8
  static: OFF
8
9
  sphinx: OFF
9
10
  worker: OFF
10
11
  uv: OFF
12
+ spreadsheet: ON
13
+
11
14
 
12
15
  development:
13
16
  asset_port: 7999
@@ -25,8 +28,14 @@ development:
25
28
  switch: ON
26
29
  live: ON
27
30
 
31
+ spreadsheet:
32
+ switch: ON
33
+ activate_if:
34
+ gem: 'simple_xlsx'
35
+
28
36
  tags: ON
29
37
  captcha: ON
38
+ grid: ON
30
39
  acls: ON
31
40
  static: OFF
32
41
  sphinx:
@@ -51,6 +60,10 @@ production:
51
60
  switch: ON
52
61
  activate_if:
53
62
  gem: 'uv'
63
+ spreadsheet:
64
+ switch: ON
65
+ activate_if:
66
+ gem: 'simple_xlsx'
54
67
  pdf:
55
68
  switch: ON
56
69
  engine: prince
@@ -59,6 +72,7 @@ production:
59
72
  live: ON
60
73
  tags: ON
61
74
  captcha: ON
75
+ grid: ON
62
76
  acls: ON
63
77
  static: OFF
64
78
  single: OFF
@@ -68,7 +82,7 @@ production:
68
82
  gem: 'thinking_sphinx'
69
83
  adapter: 'mysql,postgresql'
70
84
  run_if:
71
- file: 'log/searchd.production.pid'
85
+ file: 'log/searchd.pid'
72
86
  worker:
73
87
  switch: OFF
74
88
  activate_if:
@@ -1,5 +1,5 @@
1
1
  # Settings specified here will take precedence over those in config/environment.rb
2
- config.log_level = :debug
2
+ config.log_level = :info
3
3
 
4
4
  # The production environment is meant for finished, "live" apps.
5
5
  # Code is not reloaded between requests
@@ -24,4 +24,4 @@ CachedPage.perform_caching = true
24
24
  # config.action_controller.asset_host = "http://assets.example.com"
25
25
 
26
26
  # Disable delivery errors if you bad email addresses should just be ignored
27
- # config.action_mailer.raise_delivery_errors = false
27
+ # config.action_mailer.raise_delivery_errors = false
data/config/gems.yml CHANGED
@@ -15,13 +15,15 @@ httparty: '= 0.7.8'
15
15
  open4:
16
16
  daemons: # upload progress
17
17
  gem_plugin: # upload progress
18
+ simple_xlsx_writer: # spreadsheet
19
+ lib: 'simple_xlsx'
18
20
 
19
21
  querybuilder: '= 1.1.0'
20
22
  yamltest: '= 0.7.0'
21
23
  rubyless: '= 0.8.6'
22
24
  property: '= 2.2.0'
23
25
  versions: '= 0.3.1'
24
- zafu: '= 0.8.4'
26
+ zafu: '= 0.8.6'
25
27
 
26
28
  jeweler:
27
29
 
@@ -29,6 +31,9 @@ RedCloth:
29
31
  lib: 'redcloth'
30
32
  version: '= 3.0.4'
31
33
 
34
+ # ultraviolet needs oniguruma, which needs headers to compile
35
+ # ultraviolet:
36
+
32
37
  # Cannot do "gem 'rmagick', '= 1.3.14'" on some hosts. Leave this alone and
33
38
  # let 'require' pick whatever it can.
34
39
  # rmagick:
data/doc/zafu_changes.yml CHANGED
@@ -35,7 +35,7 @@ v_title: "title"
35
35
  "<r:text/>": "mat"
36
36
  "on_if_node='ancestor'": "on_if='is_ancestor?(main)'"
37
37
  "<div do='admin_links'/>": "<ol class='admin_links' do='admin_links'>
38
- <li do='each' do='show'><a href='#'>do this</a></li>
38
+ <li do='each' do='show'><a href='javascript:void(0)'>do this</a></li>
39
39
  </ol>"
40
40
  "set_class='li_s[v_status]'": "class='li_s#{v.status}'"
41
41
  "<meta name='keywords' do='void' set_content='[d_keywords]'/>": "<meta name='keywords' content='#{keywords}'/>"
data/lib/tasks/zena.rake CHANGED
@@ -430,13 +430,17 @@ namespace :zena do
430
430
  end
431
431
  end
432
432
 
433
- tests = ['test/unit/**/*_test.rb', 'test/functional/*_test.rb', 'test/integration/*_test.rb'].map {|p| "#{Zena::ROOT}/#{p}"}
433
+ tests = ['test/unit/**/*_test.rb', 'test/functional/*_test.rb', 'test/integration/*_test.rb'].map do |p|
434
+ Dir.glob(
435
+ "#{Zena::ROOT}/#{p}"
436
+ )
437
+ end.flatten
434
438
 
435
439
  tests += Bricks.test_files
436
440
 
437
441
  Rake::TestTask.new(:test => ["zena:test:prepare", "zena:build_fixtures"]) do |t|
438
442
  t.libs << "test"
439
- t.pattern = tests
443
+ t.test_files = tests
440
444
  t.verbose = true
441
445
  end
442
446
  Rake::Task['zena:test'].comment = "Run the tests in test/helpers and test/unit"
data/lib/zena/app.rb CHANGED
@@ -75,4 +75,4 @@ module Zena
75
75
  end
76
76
  end
77
77
  end
78
- end
78
+ end
@@ -19,7 +19,11 @@ module Zena
19
19
  "<code class='#{code_class}'>#{convertor.convert(@text, false)}</code>"
20
20
  else
21
21
  if pre_params = opts[:pre_params]
22
- tag = "<pre #{pre_params.join(' ')} class='#{code_class}'>"
22
+ if pre_params =~ /^(.*)class\s*=\s*('|")([^\2]+)\2(.*)$/
23
+ code_class = "#{code_class} #{$3}"
24
+ pre_params = "#{$1} #{$4}"
25
+ end
26
+ tag = "<pre #{pre_params} class='#{code_class}'>"
23
27
  else
24
28
  tag = "<pre class='#{code_class}'>"
25
29
  end
@@ -92,6 +92,10 @@ module Zena
92
92
  "DATE(#{arg})"
93
93
  when 'random'
94
94
  'RAND()'
95
+ when 'min'
96
+ "MIN(#{args.join(',')})"
97
+ when 'max'
98
+ "MAX(#{args.join(',')})"
95
99
  when 'coalesce'
96
100
  "COALESCE(#{args.join(',')})"
97
101
  else
@@ -165,7 +169,7 @@ module Zena
165
169
  if error.message =~ DEADLOCK_REGEX
166
170
  retry_count += 1
167
171
  if retry_count < DEADLOCK_MAX_RETRY
168
- Node.logger.warn "#{Time.now.strftim('%Y-%m-%d %H:%M:%S')} [#{current_site.host}] Retry (#{retry_count}) #{error.message}"
172
+ Node.logger.warn "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} [#{current_site.host}] Retry (#{retry_count}) #{error.message}"
169
173
  retry
170
174
  else
171
175
  raise
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Zena Startup script (automatically generated by 'cap debian:app_setup')
3
+ # Zena Startup script (automatically generated by 'cap debian:setup')
4
4
  #
5
5
  # chkconfig: - 85 15
6
6
  # description: zena_<%= config[:db_name] %> starts and stop services for <%= config[:db_name] %> Zena application.
@@ -20,7 +20,8 @@ operations = [
20
20
  'rake worker:',
21
21
  <% if config[:app_type] == :mongrel %>
22
22
  'mongrel_rails cluster::',
23
- <% end %>
23
+ <% end %>
24
+ # 'rake sphinx:',
24
25
  ]
25
26
 
26
27
  if %w{stop restart}.include?(cmd)
@@ -40,14 +41,17 @@ end
40
41
 
41
42
  if %w{start restart}.include?(cmd)
42
43
  puts "Starting #{APP_ROOT}..."
43
- operations.each do |op|
44
- run "cd #{APP_ROOT} && #{op}start"
45
- end
46
-
44
+
47
45
  <% if config[:haproxy_port] %>
48
- # Start haproxy
46
+ # Start haproxy first
49
47
  run "cd #{APP_ROOT} && haproxy -D -f config/haproxy.cnf"
50
48
  <% end %>
49
+ # Clear to make sure it all starts cleanly and we do not hang with
50
+ # dangling pid files.
51
+ run "cd #{APP_ROOT} && rm log/mongrel*.pid"
52
+ operations.each do |op|
53
+ run "cd #{APP_ROOT} && #{op}start"
54
+ end
51
55
  end
52
56
 
53
57
  unless %w{start stop restart}.include?(cmd)
@@ -185,7 +185,7 @@ HostAliases="localhost 127.0.0.1 <%= config[:host] %> stats.<%= config[:host] %>
185
185
  # 2 - DNS Lookup is made only from static DNS cache file (if it exists)
186
186
  # Default: 2
187
187
  #
188
- DNSLookup=2
188
+ DNSLookup=1
189
189
 
190
190
 
191
191
  # When AWStats updates its statistics, it stores results of its analysis in
@@ -1,19 +1,19 @@
1
1
  #! /bin/sh
2
2
  ### BEGIN INIT INFO
3
- # Provides: zena
4
- # Required-Start: $remote_fs
5
- # Required-Stop: $remote_fs
3
+ # Provides: Zena_<%= config[:db_name] %>
4
+ # Required-Start: $remote_fs $syslog $mysql
5
+ # Required-Stop: $remote_fs $syslog $mysql
6
6
  # Default-Start: 2 3 4 5
7
7
  # Default-Stop: 0 1 6
8
8
  # Short-Description: launch <%= init_script %>
9
9
  ### END INIT INFO
10
10
 
11
11
  # Author: Gaspard Bucher <gaspard@teti.ch>
12
- #
12
+ # Zena Startup script (automatically generated by 'cap debian:setup')
13
13
 
14
14
  # PATH should only include /usr/* if it runs after the mountnfs.sh script
15
15
  PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
16
- DESC="Zena server"
16
+ DESC="Zena <%= db_name %> server"
17
17
 
18
18
  case "$1" in
19
19
  start)
@@ -62,8 +62,22 @@
62
62
  # Rewrite to check for Rails cached page
63
63
  RewriteRule ^([^.]+)$ $1.html [QSA]
64
64
 
65
- # Redirect all non-static requests to cluster
66
- RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}%{QUERY_STRING} !-f
65
+ # Serve static (cached) assets
66
+ RewriteCond %{QUERY_STRING} ^[0-9]+$
67
+ RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}.%{QUERY_STRING} -f
68
+ # We have to use '.'. If we use '?' apache won't find the file.
69
+ RewriteRule ^/(.*)$ %{REQUEST_FILENAME}.%{QUERY_STRING} [L]
70
+
71
+ # Rails assets (static CSS, JS).
72
+ RewriteCond %{QUERY_STRING} ^[0-9]+$
73
+ RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f
74
+ RewriteRule ^/(.*)$ %{REQUEST_FILENAME} [L]
75
+
76
+ # else
77
+ # Request with query string (if some page is cached, the same page with a query should not be served as static)
78
+ RewriteCond %{QUERY_STRING} ^.+$ [OR]
79
+ # All non-static
80
+ RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
67
81
  RewriteRule ^/(.*)$ balancer://<%= config[:balancer] %>%{REQUEST_URI} [P,QSA,L]
68
82
  <% elsif config[:app_type] == :passenger %>
69
83
  PassengerAppRoot <%= config[:app_root] %>
data/lib/zena/deploy.rb CHANGED
@@ -123,6 +123,7 @@ Capistrano::Configuration.instance(:must_exist).load do
123
123
  clear_zafu
124
124
  clear_cache
125
125
  end
126
+ after "deploy:update", "after_update"
126
127
 
127
128
  desc "update symlink to 'sites' directory"
128
129
  task :app_update_symlinks, :roles => :app do
@@ -149,6 +150,7 @@ Capistrano::Configuration.instance(:must_exist).load do
149
150
  desc "create a new site [-s host='...' -s pass='...' -s lang='...']"
150
151
  task :mksite, :roles => :app do
151
152
  run "#{in_current} rake zena:mksite HOST='#{self[:host]}' PASSWORD='#{self[:pass]}' RAILS_ENV='production' HOST_LANG='#{self[:lang] || 'en'}'"
153
+ run "test -e #{sites_root}/#{self[:host]} || mkdir #{sites_root}/#{self[:host]}"
152
154
  create_vhost
153
155
  create_awstats
154
156
  logrotate
@@ -401,7 +403,7 @@ Capistrano::Configuration.instance(:must_exist).load do
401
403
  else
402
404
  init_name = db_name
403
405
  end
404
- run "cd /usr/local/bin && test -e /usr/local/bin/#{init_name} || ln -sf /usr/local/bin/zena_#{db_name} /usr/local/bin/#{init_name}"
406
+ run "cd /usr/local/bin && test -e /usr/local/bin/#{init_name}"
405
407
 
406
408
  if self[:rvm_ruby_string]
407
409
  run "rvm wrapper #{self[:rvm_ruby_string]} init zena_#{db_name}"
@@ -410,7 +412,7 @@ Capistrano::Configuration.instance(:must_exist).load do
410
412
  init_script = "/usr/local/bin/zena_#{db_name}"
411
413
  end
412
414
 
413
- start_stop = render("#{templates}/start_stop.rhtml", :config => self, :init_script => init_script)
415
+ start_stop = render("#{templates}/start_stop.rhtml", :config => self, :db_name => db_name, :init_script => init_script)
414
416
  put(start_stop, "/etc/init.d/zena_#{db_name}")
415
417
  run "chmod 755 /etc/init.d/zena_#{db_name}"
416
418
  # Install defaults
@@ -512,4 +514,4 @@ Capistrano::Configuration.instance(:must_exist).load do
512
514
  end
513
515
 
514
516
  end # deploy
515
- end
517
+ end
data/lib/zena/info.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Zena
2
- VERSION = '1.1.3'
2
+ VERSION = '1.2.0'
3
3
  ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
4
4
  end
@@ -334,18 +334,18 @@ module Zena
334
334
  "<pre>\\ZAZENBLOCKCODE#{block_counter}ZAZENBLOCKCODE\\</pre>"
335
335
  else
336
336
  params, text = $1, $2
337
- divparams = []
337
+ pre_params = []
338
338
  if params =~ /\A(.*)lang\s*=\s*("|')([^"']+)\2(.*)\Z/m
339
339
  pre, lang, post = $1.strip, $3, $4.strip
340
- divparams << pre if pre && pre != ""
341
- divparams << post if post && post != ""
340
+ pre_params << pre if pre && pre != ""
341
+ pre_params << post if post && post != ""
342
342
  else
343
- divparams << params.strip if params != ''
343
+ pre_params << params.strip if params != ''
344
344
  lang = ''
345
345
  end
346
- #divparams << "class='code'" unless params =~ /class\s*=/
347
- divparams = nil if divparams.empty?
348
- @escaped_code << [lang, text, divparams]
346
+ #pre_params << "class='code'" unless params =~ /class\s*=/
347
+ pre_params = pre_params.blank? ? nil : pre_params.join(' ')
348
+ @escaped_code << [lang, text, pre_params]
349
349
  block_counter += 1
350
350
  "<pre>\\ZAZENBLOCKCODE#{block_counter}ZAZENBLOCKCODE\\</pre>"
351
351
  end
@@ -41,6 +41,13 @@ module Zena
41
41
  @attributes['tag_names'] = SerializableArray.new('tag_names', 'tag', list)
42
42
  end
43
43
 
44
+ def parent_id(v)
45
+ if v then
46
+ # Cannot have nil values here (root node special case).
47
+ @attributes['parent_id'] = v
48
+ end
49
+ end
50
+
44
51
  def id
45
52
  @attributes['id']
46
53
  end
data/lib/zena/routes.rb CHANGED
@@ -12,11 +12,10 @@ module Zena
12
12
 
13
13
  resource :session, :controller => "user_sessions" # singleton resource
14
14
  resources :pings
15
- resources :users, :member => { :preferences => :get }
15
+ resources :users, :member => { :preferences => :get}
16
16
  resources :groups
17
17
  resources :acls
18
18
  resources :iformats
19
- resources :acls
20
19
 
21
20
 
22
21
  connect ':prefix/*path?:cachestamp', :controller => 'nodes', :action => 'show', :prefix => /\w\w/, :cachestamp => /\d+/
@@ -29,7 +28,7 @@ module Zena
29
28
  :order => :any, :clear_order => :any,
30
29
  :zafu => :get, :drop => :put, :attribute => :get,
31
30
  :find => :get # same as search but starting on current node instead of root
32
- }.merge(Zena::Use::Grid::Routes) do |nodes|
31
+ }.merge(Zena::Use.routes('nodes')) do |nodes|
33
32
  nodes.resources :versions,
34
33
  :member => { :edit => :get,
35
34
  :diff => :get,
@@ -66,7 +65,7 @@ module Zena
66
65
 
67
66
  resources :columns
68
67
 
69
- resources :sites, :member => { :action => :put }
68
+ resources :sites, :member => { :action => :put, :jobs => :get }
70
69
 
71
70
  resources :comments,
72
71
  :collection => { :empty_bin => :delete },
@@ -83,4 +82,4 @@ module Zena
83
82
  connect '*path', :controller => 'nodes', :action => 'catch_all'
84
83
  end
85
84
  end # Routes
86
- end # Zena
85
+ end # Zena
@@ -39,7 +39,19 @@ module Zena
39
39
  end
40
40
 
41
41
  def test_render
42
- render :inline => @text
42
+ if params[:format] and params[:format] != 'html' then
43
+ met = :"render_to_#{params[:format]}"
44
+ if respond_to?(met)
45
+ result = self.send(met, {:inline => @text})
46
+ render :text => result[:data]
47
+ headers.merge!(result[:type])
48
+ return
49
+ else
50
+ render :text => "Cannot handle #{params[:format]} rendering."
51
+ end
52
+ else
53
+ render :inline => @text
54
+ end
43
55
  rescue => err
44
56
  render :text => ([err.message] + err.backtrace[0..4]).join(" \n")
45
57
  end
@@ -70,6 +82,11 @@ module Zena
70
82
  params.delete(:text)
71
83
  params.delete(:url)
72
84
 
85
+ tz = params.delete(:tz)
86
+ if tz
87
+ visitor.time_zone = tz
88
+ end
89
+
73
90
  if controller = params.delete(:fake_controller)
74
91
  # This is used when we need url rewriting.
75
92
  case controller
@@ -6,10 +6,14 @@ module Zena
6
6
  # This method renders an action link without using Rails actions so that we can feed it with
7
7
  # erb from Zafu.
8
8
  def node_action_link(action, node_zip, opts={})
9
- publish = opts[:publish]
10
9
  text = opts[:text].blank? ? _("btn_#{action}") : opts[:text]
11
10
  title = opts[:title] || _("btn_title_#{action}")
12
- query = publish ? ["?=#{publish}"] : []
11
+ query = []
12
+ if params = opts[:params]
13
+ params.each do |k,v|
14
+ query << "#{k}=#{v}"
15
+ end
16
+ end
13
17
 
14
18
  if %w{edit drive add_doc}.include?(action)
15
19
  case action
@@ -223,7 +227,7 @@ class #{node.klass}: #{Array(node.klass).first.columns.keys.join(', ')}
223
227
  end
224
228
 
225
229
  def r_action
226
- return parser_error("Missing 'action' parameter.") unless action = @params[:select]
230
+ return parser_error("Missing 'select' parameter.") unless action = @params[:select]
227
231
 
228
232
  if self.node.will_be? Node
229
233
  node = self.node
@@ -233,7 +237,12 @@ class #{node.klass}: #{Array(node.klass).first.columns.keys.join(', ')}
233
237
  return parser_error("Invalid option 'actions' for #{node.klass}.")
234
238
  end
235
239
 
236
- out node_action_link(action, "<%= #{node}.zip %>", :text => text_for_link(''), :publish => @params[:publish])
240
+ params = {}
241
+ @params.each do |k,v|
242
+ next if k == :select
243
+ params[k] = RubyLess.translate_string(self, v)
244
+ end
245
+ out node_action_link(action, "<%= #{node}.zip %>", :text => text_for_link(''), :params => params)
237
246
  end
238
247
 
239
248
  def filter_actions
data/lib/zena/use/ajax.rb CHANGED
@@ -13,7 +13,7 @@ module Zena
13
13
  return "#{params[:dom_id]}_#{node.zip}"
14
14
  end
15
15
  elsif append_form && node.kind_of?(Node) && params[:zadd]
16
- return "#{params[:dom_id]}_form"
16
+ return "#{params[:dom_id]}_#{node.zip.to_i}"
17
17
  end
18
18
 
19
19
  @dom_id || params[:udom_id] || params[:dom_id]
@@ -74,7 +74,7 @@ module Zena
74
74
  page.replace params[:dom_id], :file => template_path_from_template_url + ".erb"
75
75
  end
76
76
  if params[:done] && params[:zadd]
77
- page.toggle "#{params[:dom_id]}_form", "#{params[:dom_id]}_add"
77
+ page.toggle "#{params[:dom_id]}_0", "#{params[:dom_id]}_add"
78
78
  page << params[:done]
79
79
  elsif params[:done]
80
80
  page << params[:done]
@@ -104,7 +104,7 @@ module Zena
104
104
  if params[:done]
105
105
  page << params[:done]
106
106
  elsif params[:zadd]
107
- page.toggle "#{params[:dom_id]}_form", "#{params[:dom_id]}_add"
107
+ page.toggle "#{params[:dom_id]}_0", "#{params[:dom_id]}_add"
108
108
  end
109
109
  when 'update'
110
110
  page.replace ndom_id, :file => template_path_from_template_url + ".erb"
@@ -138,6 +138,9 @@ module Zena
138
138
  end
139
139
  end
140
140
  end
141
+ if params[:redir]
142
+ page << "window.location.href = '#{params[:redir]}';"
143
+ end
141
144
  page << render_js(false)
142
145
  end
143
146
 
@@ -313,6 +316,9 @@ module Zena
313
316
  # We reuse the 'each' block.
314
317
  target = parent
315
318
  else
319
+ # Avoid altering parent node
320
+ @context[:node] = node.dup
321
+
316
322
  node.dom_prefix = dom_name
317
323
  target = self
318
324
  end
@@ -484,7 +490,7 @@ module Zena
484
490
  else
485
491
 
486
492
  if dom_id = target.markup.dyn_params[:id] || target.markup.params[:id]
487
- if dom_id =~ /^<%=\s+(.*?)\s+%>_form$/
493
+ if dom_id =~ /^<%=\s+(.*?)\s+%>_0$/
488
494
  # Rare case when we have a [drop] with [add]. (add element and then drop on it).
489
495
  dom_id = $1
490
496
  elsif dom_id =~ /^<%=\s+(.*?)\s+%>$/
@@ -81,7 +81,7 @@ module Zena
81
81
  # Create a fake cookie based on HTTP_AUTH using session_id and render_token. This is
82
82
  # only used for requests to localhost.
83
83
  def forge_cookie_with_http_auth
84
- if request.host == 'localhost' && request.port == Zena::ASSET_PORT
84
+ if (request.host == '127.0.0.1' || request.host == 'localhost') && request.port == Zena::ASSET_PORT
85
85
  authenticate_with_http_basic do |login, password|
86
86
  # login = visitor.id
87
87
  # password = persistence_token
@@ -329,8 +329,12 @@ module Zena
329
329
 
330
330
  # HACK to render sub-elements...
331
331
  bak = @blocks
332
+ saved_template = @context[:saved_template]
333
+ # reset saved scope
334
+ @context[:saved_template] = nil
332
335
  @blocks = opts[:cell].blocks
333
336
  cell_code = expand_if(var, node.move_to(var, [klass]))
337
+ @context[:saved_template] = saved_template
334
338
  @blocks = bak
335
339
  @markup = markup
336
340
 
@@ -35,6 +35,9 @@ module Zena::Use::Conditional
35
35
  return parser_error("Invalid role or class '#{class_name}'")
36
36
  end
37
37
 
38
+ # Class filtering should not block 'saved_dom_id' propagation.
39
+ new_node.saved_dom_id = node.saved_dom_id
40
+
38
41
  if parent.method == 'case'
39
42
  with_context(:node => new_node) do
40
43
  r_elsif(cond)
@@ -163,7 +163,7 @@ module Zena
163
163
  @main_dates ||= {}
164
164
  @main_dates[tz] ||= begin
165
165
  if params[:date]
166
- if date = params[:date].to_utc(ISO_DATE_FORMAT, tz)
166
+ if date = params[:date].to_utc(_(DATETIME), tz)
167
167
  date
168
168
  else
169
169
  # FIXME: when date parsing fails: show an error, not a 500...
@@ -293,14 +293,54 @@ module Zena
293
293
  rescue TZInfo::AmbiguousTime
294
294
  ''
295
295
  end
296
+
297
+ def year_tz(tz = nil)
298
+ if tz.blank?
299
+ tz = visitor.tz
300
+ elsif tz.kind_of?(String)
301
+ tz = TZInfo::Timezone.get(tz)
302
+ end
303
+ tz.utc_to_local(self).year
304
+ rescue TZInfo::InvalidTimezoneIdentifier
305
+ 0
306
+ rescue TZInfo::AmbiguousTime
307
+ 0
308
+ end
309
+
310
+ def to_date_tz(tz = nil)
311
+ if tz.blank?
312
+ tz = visitor.tz
313
+ elsif tz.kind_of?(String)
314
+ tz = TZInfo::Timezone.get(tz)
315
+ end
316
+ tz.utc_to_local(self).to_date
317
+ rescue TZInfo::InvalidTimezoneIdentifier
318
+ ''
319
+ rescue TZInfo::AmbiguousTime
320
+ ''
321
+ end
296
322
  end
297
323
 
298
324
  module ZafuMethods
299
325
  include RubyLess
300
- safe_method_for Time, :year => {:class => Number, :pre_processor => true}
301
- safe_method_for Time, [:strftime, String] => {:class => String, :pre_processor => true, :method => 'strftime_tz'}
302
- safe_method_for Time, [:strftime, String, String] => {:class => String, :pre_processor => true, :method => 'strftime_tz'}
326
+ safe_method_for Time, [:advance, {
327
+ :years => Number,
328
+ :months => Number,
329
+ :weeks => Number,
330
+ :days => Number,
331
+ :hours => Number,
332
+ :minutes => Number,
333
+ :seconds => Number}] => Time
334
+ safe_method_for Time, :to_i => {:class => Number, :pre_processor => true}
335
+ safe_method_for Time, :year => {:class => Number, :pre_processor => true, :method => 'year_tz'}
336
+ safe_method_for Time, [:year, String] => {:class => Number, :pre_processor => true, :method => 'year_tz'}
337
+ safe_method_for Time, [:year, TZInfo::Timezone] => {:class => Number, :pre_processor => true, :method => 'year_tz'}
338
+ safe_method_for Time, [:strftime, String] => {:class => String, :pre_processor => true, :method => 'strftime_tz'}
339
+ safe_method_for Time, [:strftime, String, String] => {:class => String, :pre_processor => true, :method => 'strftime_tz'}
303
340
  safe_method_for Time, [:strftime, String, TZInfo::Timezone] => {:class => String, :pre_processor => true, :method => 'strftime_tz'}
341
+ safe_method_for Time, :to_date => {:class => Date, :pre_processor => true, :method => 'to_date_tz'}
342
+ safe_method_for Time, [:to_date, String] => {:class => Date, :pre_processor => true, :method => 'to_date_tz'}
343
+ safe_method_for Time, [:to_date, TZInfo::Timezone] => {:class => Date, :pre_processor => true, :method => 'to_date_tz'}
304
344
  safe_method_for TZInfo::Timezone, :to_s => {:class => String, :pre_processor => true}
305
345
 
306
346
  safe_method :date => :get_date