zena 1.1.3 → 1.2.0

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