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.
- data/History.txt +23 -1
- data/MIT-LICENSE +2 -2
- data/README.rdoc +2 -15
- data/app/controllers/acls_controller.rb +1 -1
- data/app/controllers/documents_controller.rb +12 -3
- data/app/controllers/nodes_controller.rb +1 -3
- data/app/controllers/sites_controller.rb +7 -0
- data/app/controllers/versions_controller.rb +1 -1
- data/app/controllers/virtual_classes_controller.rb +7 -8
- data/app/models/acl.rb +3 -2
- data/app/models/relation_proxy.rb +2 -1
- data/app/models/role.rb +16 -0
- data/app/models/site.rb +48 -0
- data/app/models/text_document.rb +2 -1
- data/app/models/user.rb +2 -1
- data/app/models/zip.rb +2 -1
- data/app/views/acls/index.rhtml +11 -1
- data/app/views/documents/show.rhtml +1 -1
- data/app/views/relations/_add.erb +2 -2
- data/app/views/relations/_form.erb +5 -2
- data/app/views/relations/_li.erb +4 -1
- data/app/views/relations/index.erb +3 -3
- data/app/views/sites/_form.erb +1 -1
- data/app/views/sites/_job.erb +4 -0
- data/app/views/sites/index.erb +1 -1
- data/app/views/sites/jobs.erb +10 -0
- data/app/views/templates/document_create_tabs/_file.rhtml +3 -0
- data/app/views/zafu/default/Node-+search.zafu +2 -2
- data/bricks/acls/zena/init.rb +2 -1
- data/bricks/acls/zena/test/integration/acl_integration_test.rb +5 -5
- data/bricks/acls/zena/test/sites/erebus/acls.yml +2 -2
- data/bricks/acls/zena/test/unit/acl_test.rb +2 -2
- data/bricks/grid/lib/bricks/grid.rb +110 -0
- data/bricks/grid/zena/init.rb +4 -0
- data/bricks/math/lib/bricks/math.rb +1 -0
- data/bricks/pdf/lib/bricks/pdf.rb +10 -1
- data/bricks/sphinx/zena/tasks.rb +8 -40
- data/bricks/spreadsheet/README +31 -0
- data/bricks/spreadsheet/lib/bricks/spreadsheet.rb +293 -0
- data/bricks/spreadsheet/zena/init.rb +3 -0
- data/bricks/spreadsheet/zena/test/sites/zena/links.yml +11 -0
- data/bricks/spreadsheet/zena/test/unit/xlsx_test.rb +5 -0
- data/bricks/spreadsheet/zena/test/zafu/README +27 -0
- data/bricks/spreadsheet/zena/test/zafu/spreadsheet.yml +19 -0
- data/bricks/worker/lib/bricks/worker.rb +11 -5
- data/bricks/worker/zena/init.rb +8 -0
- data/bricks/worker/zena/migrate/20120501091514_add_site_id_to_jobs.rb +9 -0
- data/bricks/zena/zena/migrate/01_base.rb +0 -7
- data/bricks/zena/zena/migrate/20111214112233_add_comment_to_relations.rb +9 -0
- data/config/bricks.yml +15 -1
- data/config/environments/production.rb +2 -2
- data/config/gems.yml +6 -1
- data/doc/zafu_changes.yml +1 -1
- data/lib/tasks/zena.rake +6 -2
- data/lib/zena/app.rb +1 -1
- data/lib/zena/code/default_syntax.rb +5 -1
- data/lib/zena/db_helper/mysql.rb +5 -1
- data/lib/zena/deploy/app_init.rhtml +11 -7
- data/lib/zena/deploy/awstats.conf.rhtml +1 -1
- data/lib/zena/deploy/start_stop.rhtml +5 -5
- data/lib/zena/deploy/vhost.rhtml +16 -2
- data/lib/zena/deploy.rb +5 -3
- data/lib/zena/info.rb +1 -1
- data/lib/zena/parser/zazen_rules.rb +7 -7
- data/lib/zena/remote/node.rb +7 -0
- data/lib/zena/routes.rb +4 -5
- data/lib/zena/test_controller.rb +18 -1
- data/lib/zena/use/action.rb +13 -4
- data/lib/zena/use/ajax.rb +10 -4
- data/lib/zena/use/authlogic.rb +1 -1
- data/lib/zena/use/calendar.rb +4 -0
- data/lib/zena/use/conditional.rb +3 -0
- data/lib/zena/use/dates.rb +44 -4
- data/lib/zena/use/display.rb +45 -15
- data/lib/zena/use/forms.rb +59 -30
- data/lib/zena/use/query_builder.rb +12 -12
- data/lib/zena/use/recursion.rb +1 -1
- data/lib/zena/use/rendering.rb +18 -17
- data/lib/zena/use/urls.rb +2 -1
- data/lib/zena/use/zafu_safe_definitions.rb +0 -9
- data/lib/zena/use/zafu_templates.rb +2 -2
- data/lib/zena/use/zazen.rb +1 -3
- data/lib/zena/use.rb +13 -2
- data/lib/zena.rb +8 -2
- data/public/images/bullet_back.png +0 -0
- data/public/javascripts/grid.js +535 -0
- data/public/javascripts/tablekit.js +0 -0
- data/public/javascripts/window.js +0 -0
- data/public/javascripts/zena.js +17 -7
- data/public/stylesheets/admin.css +5 -1
- data/public/stylesheets/grid.css +19 -0
- data/test/fixtures/files/TestNode.zafu +123 -311
- data/test/fixtures/files/translations_fr.yml +6 -1
- data/test/functional/acls_controller_test.rb +2 -2
- data/test/functional/nodes_controller_test.rb +17 -11
- data/test/functional/virtual_classes_controller_test.rb +1 -1
- data/test/integration/query_node/basic.yml +9 -0
- data/test/integration/query_node/dates.yml +1 -1
- data/test/integration/zafu_compiler/ajax.yml +9 -9
- data/test/integration/zafu_compiler/basic.yml +0 -24
- data/test/integration/zafu_compiler/dates.yml +24 -7
- data/test/integration/zafu_compiler/display.yml +45 -2
- data/test/integration/zafu_compiler/errors.yml +0 -6
- data/test/integration/zafu_compiler/forms.yml +41 -3
- data/test/integration/zafu_compiler/query.yml +29 -3
- data/test/integration/zafu_compiler/roles.yml +0 -4
- data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
- data/test/integration/zafu_compiler_test.rb +11 -3
- data/test/selenium/Add/add3.rsel +8 -8
- data/test/selenium/Drop/drop1.rsel +12 -12
- data/test/selenium/Drop/drop2.rsel +14 -14
- data/test/selenium/Drop/drop3.rsel +21 -21
- data/test/selenium/Drop/drop4.rsel +1 -1
- data/test/selenium/Edit/edit2.rsel +9 -9
- data/test/selenium/Edit/edit4.rsel +55 -0
- data/test/selenium/Edit/edit5.rsel +41 -0
- data/test/selenium/Edit/edit6.rsel +53 -0
- data/test/selenium/Filter/0setup.rsel +12 -0
- data/test/selenium/Filter/filter1.rsel +9 -0
- data/test/selenium/Filter/filter2.rsel +9 -0
- data/test/selenium/Form/form1.rsel +1 -1
- data/test/selenium/Form/form2.rsel +1 -1
- data/test/selenium/Form/form3.rsel +15 -0
- data/test/selenium/Grid/0setup.rsel +13 -0
- data/test/selenium/Grid/grid1.rsel +11 -0
- data/test/selenium/Swap/0setup.rsel +12 -0
- data/test/selenium/Swap/swap1.rsel +13 -0
- data/test/selenium/Swap/swap2.rsel +11 -0
- data/test/selenium/Toggle/toggle1.rsel +6 -6
- data/test/sites/zena/versions.yml +1 -1
- data/test/unit/relation_proxy_test.rb +36 -0
- data/test/unit/site_test.rb +10 -2
- data/test/unit/zena/use/rendering_test.rb +7 -6
- data/test/unit/zena/use/zazen_test.rb +1 -2
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +24 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +58 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +88 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +27 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +23 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +19 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +19 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +22 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +23 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +25 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +20 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +20 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +104 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +13 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +25 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +166 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +304 -0
- data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +37 -0
- data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +52 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +118 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
- data/vendor/TextMate/Zena.tmbundle/info.plist +17 -0
- data/vendor/plugins/selenium-on-rails/CHANGELOG +125 -0
- data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +202 -0
- data/vendor/plugins/selenium-on-rails/README.md +202 -0
- data/vendor/plugins/selenium-on-rails/Rakefile +38 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +265 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +148 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +231 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +195 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +295 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +219 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +156 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +179 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +223 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +441 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +3098 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +2080 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +116 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +116 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +126 -0
- data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +150 -0
- data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +422 -0
- data/vendor/plugins/selenium-on-rails/doc/files/README.html +321 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +108 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +222 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +109 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +111 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +118 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +101 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +114 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +113 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +120 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +108 -0
- data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +115 -0
- data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +42 -0
- data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +43 -0
- data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +182 -0
- data/vendor/plugins/selenium-on-rails/doc/index.html +24 -0
- data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +208 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +19 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +50 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +16 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +14 -0
- data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +11 -0
- data/vendor/plugins/selenium-on-rails/init.rb +15 -0
- data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +122 -0
- data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +16 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +8 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +215 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +57 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +36 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +61 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +20 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +44 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +87 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +56 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +116 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +1002 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +514 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +91 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +24 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +11 -0
- data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +30 -0
- data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +18 -0
- data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +5 -0
- data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +9 -0
- data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +67 -0
- data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +26 -0
- data/vendor/plugins/selenium-on-rails/routes.rb +24 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +7 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +8 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +110 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +109 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +145 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +55 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +177 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +177 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +298 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +16 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +205 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +1759 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +1800 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +6 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +142 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +150 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +53 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +356 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +2006 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +101 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +815 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +915 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +958 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +47 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +283 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +383 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +91 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +69 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +1616 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +72 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +3184 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +2300 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +153 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +377 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +175 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +148 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +695 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +1362 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +5 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +803 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +1537 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +979 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +3 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +75 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +153 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +43 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +316 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +566 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +2816 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +549 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +149 -0
- data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +2450 -0
- data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +8 -0
- data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +37 -0
- data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +27 -0
- data/vendor/plugins/selenium-on-rails/test/paths_test.rb +72 -0
- data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +157 -0
- data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +708 -0
- data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +242 -0
- data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +67 -0
- data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +43 -0
- data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +35 -0
- data/vendor/plugins/selenium-on-rails/test/setup_test.rb +31 -0
- data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +109 -0
- data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +17 -0
- data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +51 -0
- data/vendor/plugins/selenium-on-rails/test/test_helper.rb +101 -0
- data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +12 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +6 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +2 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +6 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +5 -0
- data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +5 -0
- data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +7 -0
- data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +8 -0
- data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +7 -0
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +1 -0
- data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +1 -0
- data/zena.gemspec +290 -7
- metadata +346 -52
- data/app/views/nodes/_table.rhtml +0 -14
- data/lib/zena/use/grid.rb +0 -154
data/History.txt
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
== 1.2.0
|
|
2
|
+
|
|
3
|
+
* Major changes
|
|
4
|
+
* Added 'remove_from_db' method to remove a site from the database.
|
|
5
|
+
* Fixed asset caching PLEASE FIX YOUR VHOST FILES: rake zena:create_vhost -s host='xxxxx'.
|
|
6
|
+
* Fixed deadlock_retry (a bug in the error message aborted the retry).
|
|
7
|
+
* Created 'spreadsheet' brick to ease xlsx and csv generation. <===== TODO: Document
|
|
8
|
+
* Better JS based grid editor.
|
|
9
|
+
|
|
10
|
+
* Minor changes
|
|
11
|
+
* Enabled Acl during document upload.
|
|
12
|
+
* Fixed a bug when using [edit] in a list with [add].
|
|
13
|
+
* Fixed 'unknown this' bug in [calendar] when rendering in a [block].
|
|
14
|
+
* Enabled 'alt_class' to work on multiple elements ([each]).
|
|
15
|
+
* Fixed ajax bugs with dom_ids in nested partials.
|
|
16
|
+
* Better Acl display, comments on relations.
|
|
17
|
+
* Support for 'to_date' on time object with proper timezone translation. <===== TODO: Document
|
|
18
|
+
* Time to 'year' should use timezone.
|
|
19
|
+
* Added tprefix to [select] (with default value) to ease translated options for select. <===== TODO: Document
|
|
20
|
+
* Fixed bug when using [input] checkbox with param.
|
|
21
|
+
* Added jobs list in admin links.
|
|
22
|
+
|
|
1
23
|
== 1.1.3 2011-11-09
|
|
2
24
|
|
|
3
25
|
* Major changes
|
|
@@ -263,4 +285,4 @@
|
|
|
263
285
|
== 0.11.1 2009-04-03
|
|
264
286
|
|
|
265
287
|
* Minor enhancements
|
|
266
|
-
* Better testing of custom queries using latest querybuilder (0.5.2)
|
|
288
|
+
* Better testing of custom queries using latest querybuilder (0.5.2)
|
data/MIT-LICENSE
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (c) 2007-
|
|
1
|
+
Copyright (c) 2007-2012 Gaspard Bucher
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
4
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
16
16
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
17
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
18
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
-
THE SOFTWARE.
|
|
19
|
+
THE SOFTWARE.
|
data/README.rdoc
CHANGED
|
@@ -108,18 +108,5 @@ Versions:
|
|
|
108
108
|
monit (debian package to monitor your mongrel processes)
|
|
109
109
|
|
|
110
110
|
|
|
111
|
-
===
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
add this to nodes_controller macros:
|
|
115
|
-
act_as_railsdav
|
|
116
|
-
include Zena::WebDav
|
|
117
|
-
|
|
118
|
-
add this to 'config/environment.rb'
|
|
119
|
-
require File.join(File.dirname(__FILE__), '../lib/webdav_adapter')
|
|
120
|
-
|
|
121
|
-
install railsdav
|
|
122
|
-
# script/plugin install http://svn.liverail.net/svn/plugins/railsdav
|
|
123
|
-
|
|
124
|
-
install dependencies
|
|
125
|
-
# sudo gem install mime-types, unicode
|
|
111
|
+
=== Install MySQL on Lion (with rbenv: remove the sudo)
|
|
112
|
+
http://stackoverflow.com/questions/6340174/mysql-gem-on-osx-10-7-lion
|
|
@@ -6,7 +6,7 @@ class AclsController < ApplicationController
|
|
|
6
6
|
|
|
7
7
|
def index
|
|
8
8
|
secure(Acl) do
|
|
9
|
-
@acls = Acl.paginate(:all, :order => 'priority DESC, name ASC', :per_page => 20, :page => params[:page])
|
|
9
|
+
@acls = Acl.paginate(:all, :order => 'action ASC, priority DESC, name ASC', :per_page => 20, :page => params[:page])
|
|
10
10
|
end
|
|
11
11
|
@acl = Acl.new
|
|
12
12
|
|
|
@@ -61,7 +61,15 @@ class DocumentsController < ApplicationController
|
|
|
61
61
|
else
|
|
62
62
|
page.call 'UploadProgress.setAsFinished'
|
|
63
63
|
page.delay(1) do # allow the progress bar fade to complete
|
|
64
|
-
|
|
64
|
+
if params[:redir]
|
|
65
|
+
page << "Zena.reload_and_close(#{params[:redir].inspect})"
|
|
66
|
+
end
|
|
67
|
+
if params[:js]
|
|
68
|
+
page << params[:js]
|
|
69
|
+
end
|
|
70
|
+
if !params[:redir] && !params[:js]
|
|
71
|
+
page.redirect_to document_url(@node[:zip])
|
|
72
|
+
end
|
|
65
73
|
end
|
|
66
74
|
end
|
|
67
75
|
end
|
|
@@ -90,9 +98,10 @@ class DocumentsController < ApplicationController
|
|
|
90
98
|
def find_node
|
|
91
99
|
|
|
92
100
|
if params[:id]
|
|
93
|
-
@node =
|
|
101
|
+
@node = visitor.find_node(nil, params[:id], nil, request)
|
|
102
|
+
raise ActiveRecord::RecordNotFound unless @node.kind_of?(Document)
|
|
94
103
|
elsif parent_zip = (params[:node] || params)[:parent_id]
|
|
95
|
-
@parent =
|
|
104
|
+
@parent = visitor.find_node(nil, parent_zip, nil, request)
|
|
96
105
|
else
|
|
97
106
|
# TODO: a better error message
|
|
98
107
|
raise ActiveRecord::RecordNotFound
|
|
@@ -25,8 +25,6 @@ class NodesController < ApplicationController
|
|
|
25
25
|
before_filter :check_path, :only => [:index, :show]
|
|
26
26
|
layout :popup_layout, :only => [:edit, :import]
|
|
27
27
|
|
|
28
|
-
include Zena::Use::Grid::ControllerMethods
|
|
29
|
-
|
|
30
28
|
def index
|
|
31
29
|
if @node = secure(Node) { Node.find(current_site.root_id) }
|
|
32
30
|
respond_to do |format|
|
|
@@ -235,7 +233,7 @@ class NodesController < ApplicationController
|
|
|
235
233
|
if @node.errors.empty?
|
|
236
234
|
flash.now[:notice] = 'Node was successfully created.'
|
|
237
235
|
format.html {
|
|
238
|
-
redirect_to params[:redir] || zen_path(@node, :mode => params[:mode])
|
|
236
|
+
redirect_to params[:redir] || zen_path(@node, :mode => params[:mode], :new => 'true')
|
|
239
237
|
}
|
|
240
238
|
format.js
|
|
241
239
|
format.xml { render :xml => @node.to_xml(:root => 'node'), :status => :created, :location => node_url(@node) }
|
|
@@ -74,7 +74,7 @@ class VersionsController < ApplicationController
|
|
|
74
74
|
@edit = true
|
|
75
75
|
end
|
|
76
76
|
if params[:close] == 'true'
|
|
77
|
-
js_data << "Zena.
|
|
77
|
+
js_data << "Zena.reload_and_close();"
|
|
78
78
|
else
|
|
79
79
|
js_data << <<-END_TXT
|
|
80
80
|
Zena.editor_setup('#{preview_node_version_path(:node_id=>@node[:zip], :id=>(@node.version.number || 0), :escape => false)}');
|
|
@@ -63,18 +63,17 @@ class VirtualClassesController < ApplicationController
|
|
|
63
63
|
@yaml.gsub!(/\A---\s*\n/, "--- \n")
|
|
64
64
|
current = current_compared_to(data)
|
|
65
65
|
a = clean_yaml(current).gsub('{}', '')
|
|
66
|
-
|
|
66
|
+
a = Zena::CodeSyntax.new(a, 'yaml').to_html
|
|
67
67
|
b = @yaml
|
|
68
|
-
|
|
68
|
+
b = Zena::CodeSyntax.new(b, 'yaml').to_html
|
|
69
69
|
@diff = Differ.diff_by_line(b, a).format_as(:html)
|
|
70
70
|
|
|
71
71
|
# UGLY HACK to not escape <ins> and <del>
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
end
|
|
72
|
+
#@diff.gsub!(/<((ins|del)[^>]*)>/, '_ZYAML__\2_')
|
|
73
|
+
#@diff.gsub!(/<\/(ins|del)>/, '_ZYAMLC__\1_')
|
|
74
|
+
#@diff = Zena::CodeSyntax.new(@diff, 'yaml').to_html
|
|
75
|
+
#@diff.gsub!(/_ZYAML__(\w+)_/, '<\1 class="differ">')
|
|
76
|
+
#@diff.gsub!(/_ZYAMLC__(\w+)_/, '</\1>')
|
|
78
77
|
end
|
|
79
78
|
end
|
|
80
79
|
end
|
data/app/models/acl.rb
CHANGED
|
@@ -77,9 +77,10 @@ class Acl < ActiveRecord::Base
|
|
|
77
77
|
@node = node
|
|
78
78
|
@params = params
|
|
79
79
|
@asset_host = request ? request.port.to_i == Zena::ASSET_PORT : false
|
|
80
|
+
query_str = safe_eval(self.query)
|
|
80
81
|
|
|
81
82
|
# We add a stupid order clause to avoid the 'order by title' thing.
|
|
82
|
-
query = Node.build_query(:first,
|
|
83
|
+
query = Node.build_query(:first, query_str + ' order by id asc',
|
|
83
84
|
:node_name => '@node',
|
|
84
85
|
:main_class => @node.virtual_class,
|
|
85
86
|
:rubyless_helper => self
|
|
@@ -94,7 +95,7 @@ class Acl < ActiveRecord::Base
|
|
|
94
95
|
errors.add(:query, err.message)
|
|
95
96
|
end
|
|
96
97
|
nil
|
|
97
|
-
rescue
|
|
98
|
+
rescue => err
|
|
98
99
|
errors.add(:query, err.message)
|
|
99
100
|
nil
|
|
100
101
|
end
|
|
@@ -160,7 +160,7 @@ class RelationProxy < Relation
|
|
|
160
160
|
end
|
|
161
161
|
attributes_to_update[:id] = v.map{|r| r.id.to_i}
|
|
162
162
|
else
|
|
163
|
-
attributes_to_update[:id] = v.map(&:to_i)
|
|
163
|
+
attributes_to_update[:id] = v.select {|e| !e.blank?}.map(&:to_i)
|
|
164
164
|
end
|
|
165
165
|
else
|
|
166
166
|
attributes_to_update[:id] = v.blank? ? nil : v.to_i
|
|
@@ -176,6 +176,7 @@ class RelationProxy < Relation
|
|
|
176
176
|
if zip_values.kind_of?(Array)
|
|
177
177
|
attributes_to_update[:id] = []
|
|
178
178
|
zip_values.each do |zip|
|
|
179
|
+
next if zip.blank?
|
|
179
180
|
if id = secure(Node) { Node.translate_pseudo_id(zip, :id, @start) }
|
|
180
181
|
# ok
|
|
181
182
|
id_to_zip[id] = zip
|
data/app/models/role.rb
CHANGED
|
@@ -22,6 +22,7 @@ class Role < ActiveRecord::Base
|
|
|
22
22
|
include RubyLess
|
|
23
23
|
# Columns defined in the role.
|
|
24
24
|
safe_method :columns => {:class => ['Column'], :method => 'defined_safe_columns'}
|
|
25
|
+
safe_method [:column, String] => {:class => 'Column', :nil => true, :method => 'defined_safe_column'}
|
|
25
26
|
|
|
26
27
|
safe_method :name => String
|
|
27
28
|
|
|
@@ -191,6 +192,21 @@ class Role < ActiveRecord::Base
|
|
|
191
192
|
@safe_column ||= defined_columns.values.sort {|a,b| a.name <=> b.name}
|
|
192
193
|
end
|
|
193
194
|
|
|
195
|
+
# By default, all defined columns are safe (see )
|
|
196
|
+
def defined_safe_column(name)
|
|
197
|
+
if real_class?
|
|
198
|
+
# Get columns from the 'native' schema of the real class (this schema is a Property::Role,
|
|
199
|
+
# not a VirtualClass or ::Role).
|
|
200
|
+
#
|
|
201
|
+
# Only columns explicitly declared safe are safe here
|
|
202
|
+
if real_class.safe_method_type(name)
|
|
203
|
+
real_class.schema.defined_columns[name]
|
|
204
|
+
end
|
|
205
|
+
else
|
|
206
|
+
defined_columns[name]
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
194
210
|
def export
|
|
195
211
|
res = Zafu::OrderedHash.new
|
|
196
212
|
res['type'] = real_class? ? 'Class' : type
|
data/app/models/site.rb
CHANGED
|
@@ -16,6 +16,39 @@ The #Site model holds configuration information for a site:
|
|
|
16
16
|
+default_lang+:: The default language of the site.
|
|
17
17
|
=end
|
|
18
18
|
class Site < ActiveRecord::Base
|
|
19
|
+
CLEANUP_SQL = [
|
|
20
|
+
['attachments' , 'site_id = ?'],
|
|
21
|
+
['cached_pages' , 'site_id = ?'],
|
|
22
|
+
['cached_pages_nodes' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
23
|
+
['caches' , 'site_id = ?'],
|
|
24
|
+
['columns' , 'site_id = ?'],
|
|
25
|
+
['comments' , 'site_id = ?'],
|
|
26
|
+
['data_entries' , 'site_id = ?'],
|
|
27
|
+
['discussions' , 'site_id = ?'],
|
|
28
|
+
['groups_users' , 'group_id IN (SELECT id FROM groups WHERE site_id = ?)'],
|
|
29
|
+
['groups' , 'site_id = ?'],
|
|
30
|
+
|
|
31
|
+
['idx_nodes_datetimes' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
32
|
+
['idx_nodes_floats' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
33
|
+
['idx_nodes_integers' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
34
|
+
['idx_nodes_ml_strings', 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
35
|
+
['idx_nodes_strings' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
36
|
+
['idx_projects' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
37
|
+
['idx_templates' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
38
|
+
|
|
39
|
+
['iformats' , 'site_id = ?'],
|
|
40
|
+
['links' , 'source_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
41
|
+
['links' , 'target_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
42
|
+
|
|
43
|
+
['nodes_roles' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
|
|
44
|
+
['relations' , 'site_id = ?'],
|
|
45
|
+
['roles' , 'site_id = ?'],
|
|
46
|
+
['sites' , 'id = ?'],
|
|
47
|
+
['users' , 'site_id = ?'],
|
|
48
|
+
['versions' , 'site_id = ?'],
|
|
49
|
+
['zips' , 'site_id = ?'],
|
|
50
|
+
['nodes' , 'site_id = ?'],
|
|
51
|
+
]
|
|
19
52
|
ACTIONS = %w{clear_cache rebuild_index}
|
|
20
53
|
include RubyLess
|
|
21
54
|
safe_method :host => String, :lang_list => [String], :default_lang => String
|
|
@@ -439,6 +472,21 @@ class Site < ActiveRecord::Base
|
|
|
439
472
|
true
|
|
440
473
|
end
|
|
441
474
|
|
|
475
|
+
# This is only called from the console (not accessible through controllers)
|
|
476
|
+
def remove_from_db
|
|
477
|
+
node_cleanup = nil
|
|
478
|
+
site_id = self.id.to_s
|
|
479
|
+
CLEANUP_SQL.each do |table, clause|
|
|
480
|
+
clause = clause.gsub('?', site_id)
|
|
481
|
+
begin
|
|
482
|
+
Zena::Db.execute("DELETE FROM #{table} WHERE (#{clause})")
|
|
483
|
+
rescue => err
|
|
484
|
+
puts clause
|
|
485
|
+
puts err
|
|
486
|
+
end
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
|
|
442
490
|
private
|
|
443
491
|
def valid_site
|
|
444
492
|
errors.add(:host, 'invalid') if self[:host].nil? || (self[:host] =~ /^\./) || (self[:host] =~ /[^\w\.\-]/)
|
data/app/models/text_document.rb
CHANGED
|
@@ -15,7 +15,8 @@ class TextDocument < Document
|
|
|
15
15
|
class << self
|
|
16
16
|
# Return true if a new text document can be created with the content_type. Used by the superclass Document to choose the corret subclass when creating a new object.
|
|
17
17
|
def accept_content_type?(content_type)
|
|
18
|
-
(content_type =~ /^(text)/ &&
|
|
18
|
+
(content_type =~ /^(text|image\/svg\+xml|x-javascript)/) &&
|
|
19
|
+
(Zena::TYPE_TO_EXT[content_type.chomp] != ['rtf'])
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
# Return true if the content_type can change independantly from the file
|
data/app/models/user.rb
CHANGED
|
@@ -14,7 +14,8 @@ If you want to give administrative rights to a user, simply put him/her into the
|
|
|
14
14
|
|
|
15
15
|
Users have access rights defined by the groups they belong to. They also have a 'status' indicating the kind of
|
|
16
16
|
things they can/cannot do :
|
|
17
|
-
+:
|
|
17
|
+
+:admin+:: (60): can read/write/publish in any group, can create users/groups
|
|
18
|
+
+:user+:: (50): can read/write/publish
|
|
18
19
|
+:commentator+:: (40): can write comments
|
|
19
20
|
+:moderated+:: (30): can write moderated comments
|
|
20
21
|
+:reader+:: (20): can only read
|
data/app/models/zip.rb
CHANGED
data/app/views/acls/index.rhtml
CHANGED
|
@@ -12,6 +12,16 @@
|
|
|
12
12
|
<th><%= _('exec group') %></th>
|
|
13
13
|
<th><%= _('exec skin') %></th>
|
|
14
14
|
</tr>
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
<% action = nil; @acls.each do |acl| -%>
|
|
17
|
+
<% if acl.action != action; action= acl.action -%>
|
|
18
|
+
<tr>
|
|
19
|
+
<th class='nav sub constant' colspan='9'>
|
|
20
|
+
<%= action %>
|
|
21
|
+
</th>
|
|
22
|
+
</tr>
|
|
23
|
+
<% end -%>
|
|
24
|
+
<%= render :partial=>'acls/li', :collection=>[acl] %>
|
|
25
|
+
<% end -%>
|
|
16
26
|
<%= render :partial=>'acls/add' %>
|
|
17
27
|
</table>
|
|
@@ -12,6 +12,6 @@
|
|
|
12
12
|
<td class='preview'><p><%= img_tag(@node, :mode=>'pv') %></p><p class='size'><%= fsize(@node.size) %></p></td>
|
|
13
13
|
<td class='description'><h3 class='title s<%= @node.version.status %>'><span class='doc_id'><%= @node[:zip] %></span> <%= @node.title %> <%= node_actions(@node, :actions => :all) %></h3><p class='summary'><%= zazen(@node.summary) %></p></td></tr>
|
|
14
14
|
</table>
|
|
15
|
-
<p class='btn_validate'><%= link_to _("upload more"), new_document_path(:parent_id => @node.parent_zip) %> // <%= link_to_function _('close'), "Zena.
|
|
15
|
+
<p class='btn_validate'><%= link_to _("upload more"), new_document_path(:parent_id => @node.parent_zip) %> // <%= link_to_function _('close'), "Zena.reload_and_close();" %></p>
|
|
16
16
|
</div>
|
|
17
17
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<tr id='add_relation' class='btn_add'>
|
|
2
2
|
<td class='add'><%= link_to_function _('btn_relation_add'), "['add_relation', 'add_relation_form'].each(Element.toggle); $('relation_source_role').focus();" %></td>
|
|
3
|
-
<td colspan='
|
|
3
|
+
<td colspan='4' class='add_relation'></td>
|
|
4
4
|
</tr>
|
|
5
5
|
<tr id='add_relation_form' style='display:none;'>
|
|
6
6
|
<%= render :partial=>'relations/form' %>
|
|
7
|
-
</tr>
|
|
7
|
+
</tr>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
link_to_function _('btn_x'), "['add_relation', 'add_relation_form'].each(Element.toggle)"
|
|
6
6
|
end %>
|
|
7
7
|
</td>
|
|
8
|
-
<td class="add" colspan="
|
|
8
|
+
<td class="add" colspan="4">
|
|
9
9
|
<div id='relation_errors'><%= error_messages_for(:relation, :object => @relation) %></div>
|
|
10
10
|
<% unless @relation.new_record? %>
|
|
11
11
|
<%= form_remote_tag(:url => relation_path(@relation), :method => :put ) %>
|
|
@@ -36,6 +36,9 @@
|
|
|
36
36
|
<td class="light" ><%= text_field('relation', 'target_icon', :size=>18 ) %></td>
|
|
37
37
|
<td class="dark" ><%= text_field('relation', 'source_icon', :size=>18 ) %></td>
|
|
38
38
|
</tr>
|
|
39
|
+
<tr><td colspan='3'>
|
|
40
|
+
<%= text_area('relation', 'comment', :rows => 2, :cols => 40) %></td>
|
|
41
|
+
</td></tr>
|
|
39
42
|
<tr><td colspan='3'><p class='btn_validate'><input type='submit' value='<%= _('validate') %>'/></p></td></tr>
|
|
40
43
|
</table>
|
|
41
44
|
</form>
|
|
@@ -44,4 +47,4 @@
|
|
|
44
47
|
<p class='destroy'><%= _('destroy relation (with all links)') %> <input type='submit' value='<%= _('destroy') %>'></p>
|
|
45
48
|
</form>
|
|
46
49
|
<% end -%>
|
|
47
|
-
</td>
|
|
50
|
+
</td>
|
data/app/views/relations/_li.erb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<h2 class='title'><%= _('relations') %></h2>
|
|
2
2
|
<table id='relation_list' class='admin' cellspacing="0">
|
|
3
|
-
<tr><th class='nav' colspan='
|
|
3
|
+
<tr><th class='nav' colspan='5'><%= will_paginate @relations %></th></tr>
|
|
4
4
|
<% @classes.keys.sort.each do |kpath| -%>
|
|
5
5
|
<tr class='virtual_class'>
|
|
6
|
-
<th class='nav sub constant' colspan='
|
|
6
|
+
<th class='nav sub constant' colspan='5'>
|
|
7
7
|
<span class='kpath'><%= kpath %></span> <%= VirtualClass.find_by_kpath(kpath).to_s %>
|
|
8
8
|
</th>
|
|
9
9
|
</tr>
|
|
@@ -12,4 +12,4 @@
|
|
|
12
12
|
<% end -%>
|
|
13
13
|
<% end -%>
|
|
14
14
|
<%= render :partial=>'relations/add' %>
|
|
15
|
-
</table>
|
|
15
|
+
</table>
|
data/app/views/sites/_form.erb
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<tr><td class='label'><%= _('options') %></td><td>
|
|
26
26
|
<% Site.attributes_for_form[:bool].each do |sym| -%>
|
|
27
27
|
<input type='hidden' name='site[<%= sym %>]' value=''/>
|
|
28
|
-
<input type='checkbox' name='site[<%= sym %>]' value='1'<%= @site
|
|
28
|
+
<input type='checkbox' name='site[<%= sym %>]' value='1'<%= @site.send(sym) ? " checked='checked'" : '' %>/> <%= _(sym.to_s) %><br/>
|
|
29
29
|
<% end -%>
|
|
30
30
|
</td></tr>
|
|
31
31
|
<% if !@site.new_record? %>
|
data/app/views/sites/index.erb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<h2 class='title'><%= _('sites') %></h2>
|
|
2
2
|
|
|
3
3
|
<table id='site_list' class='admin' cellspacing="0">
|
|
4
|
-
<tr><th class='nav' colspan='10'><%= will_paginate @sites
|
|
4
|
+
<tr><th class='nav' colspan='10'><%= will_paginate @sites %></th></tr>
|
|
5
5
|
<%= render :partial=>'sites/li', :collection=>@sites %>
|
|
6
6
|
</table>
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
<%= upload_form_tag(:action => 'upload') %>
|
|
2
2
|
<%= hidden_field 'node', 'parent_id', :value=>@node.parent_zip %>
|
|
3
|
+
<% [:redir, :js].each do |p|; next unless params[p] %>
|
|
4
|
+
<input type='hidden' name='<%= p %>' value='<%= h params[p] %>'/>
|
|
5
|
+
<% end %>
|
|
3
6
|
<p class="btn_validate"><input type="submit" value='<%= _('validate') %>'/></p>
|
|
4
7
|
|
|
5
8
|
<%= upload_field %>
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
|
|
7
7
|
<ul id='search_results' do='search_results'>
|
|
8
8
|
<li class='result_entry' do='each'>
|
|
9
|
-
<p class='result_image' do='Document'>
|
|
9
|
+
<p class='result_image' do='Document?'>
|
|
10
10
|
<r:link format='data' do='img' alt_src='icon' mode='pv'/>
|
|
11
11
|
<r:else do='link' do='img' alt_src='icon' mode='pv'/>
|
|
12
12
|
</p>
|
|
13
13
|
<p class='result_name'><r:link/></p>
|
|
14
14
|
<p class='result_path'><r:show attr='short_path'/></p>
|
|
15
|
-
<r:summary/>
|
|
15
|
+
<r:zazen attr='summary'/>
|
|
16
16
|
<div class='clear'></div>
|
|
17
17
|
</li>
|
|
18
18
|
<r:else>
|
data/bricks/acls/zena/init.rb
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
Zena.use Bricks::Acls
|
|
1
|
+
Zena.use Bricks::Acls
|
|
2
|
+
Site::CLEANUP_SQL.unshift ['acls', 'site_id = ?']
|
|
@@ -82,7 +82,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
|
82
82
|
Zena::Db.execute "UPDATE acls SET format = 'csv' WHERE id = #{acls_id(:rap)}"
|
|
83
83
|
login(:hades)
|
|
84
84
|
# Create special mode template
|
|
85
|
-
secure(Template) { Template.create(:parent_id => nodes_id(:sky), :title => 'Node--csv', :text =>
|
|
85
|
+
secure(Template) { Template.create(:parent_id => nodes_id(:sky), :title => 'Node--csv', :text => %q{<r:spreadsheet><r:row><r:cell>foo</r:cell><r:cell eval='title'/></r:row></r:spreadsheet>}) }
|
|
86
86
|
post 'http://erebus.host/session', :login=>'demeter', :password=>'demeter'
|
|
87
87
|
end
|
|
88
88
|
|
|
@@ -94,7 +94,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
|
94
94
|
should 'allow given mode' do
|
|
95
95
|
get "http://erebus.host/oo/project#{nodes_zip(:queen)}.csv"
|
|
96
96
|
assert_response :success
|
|
97
|
-
assert_equal
|
|
97
|
+
assert_equal "foo;My Queen;\n", response.body
|
|
98
98
|
end
|
|
99
99
|
end # with fixed format
|
|
100
100
|
|
|
@@ -144,7 +144,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
|
144
144
|
context 'with acl for create enabled' do
|
|
145
145
|
setup do
|
|
146
146
|
# The visitor can create objects in assigned_project as direct parent
|
|
147
|
-
Zena::Db.execute "UPDATE acls SET query = 'assigned_project', action = 'create' WHERE id = #{acls_id(:rap)}"
|
|
147
|
+
Zena::Db.execute "UPDATE acls SET query = '%q{assigned_project}', action = 'create' WHERE id = #{acls_id(:rap)}"
|
|
148
148
|
@create_url = "http://erebus.host/nodes?node[parent_id]=#{nodes_zip(:queen)}&node[klass]=Page&node[title]=foobar"
|
|
149
149
|
end
|
|
150
150
|
|
|
@@ -197,7 +197,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
|
197
197
|
context 'with acl for update enabled' do
|
|
198
198
|
setup do
|
|
199
199
|
# The visitor can update objects in assigned_project
|
|
200
|
-
Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'update' WHERE id = #{acls_id(:rap)}"
|
|
200
|
+
Zena::Db.execute "UPDATE acls SET query = '%q{nodes in project from assigned_project}', action = 'update' WHERE id = #{acls_id(:rap)}"
|
|
201
201
|
@update_url = "http://erebus.host/nodes/#{nodes_zip(:persephone)}?node[title]=foobar"
|
|
202
202
|
end
|
|
203
203
|
|
|
@@ -241,7 +241,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
|
|
|
241
241
|
context 'with acl for delete enabled' do
|
|
242
242
|
setup do
|
|
243
243
|
# The visitor can delete objects in assigned_project
|
|
244
|
-
Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'delete' WHERE id = #{acls_id(:rap)}"
|
|
244
|
+
Zena::Db.execute "UPDATE acls SET query = '%q{nodes in project from assigned_project}', action = 'delete' WHERE id = #{acls_id(:rap)}"
|
|
245
245
|
@delete_url = "http://erebus.host/nodes/#{nodes_zip(:persephone)}"
|
|
246
246
|
end
|
|
247
247
|
|
|
@@ -6,7 +6,7 @@ rap:
|
|
|
6
6
|
# can read
|
|
7
7
|
action: read
|
|
8
8
|
# all 'assigned_projects' and the visitor's home node
|
|
9
|
-
query: assigned_projects or self
|
|
9
|
+
query: "%q{assigned_projects or self}"
|
|
10
10
|
# by receiving the 'erebus' access group
|
|
11
11
|
exec_group: erebus
|
|
12
12
|
# and viewing it through the 'sky' Skin.
|
|
@@ -25,7 +25,7 @@ self:
|
|
|
25
25
|
# can read
|
|
26
26
|
action: read
|
|
27
27
|
# self
|
|
28
|
-
query: nodes where 1=0
|
|
28
|
+
query: '%q{nodes where 1=0}'
|
|
29
29
|
# by receiving the 'erebus' access group
|
|
30
30
|
exec_group: erebus
|
|
31
31
|
# and viewing it through the 'sky' Skin.
|
|
@@ -59,7 +59,7 @@ class AclTest < Zena::Unit::TestCase
|
|
|
59
59
|
visitor.instance_eval do
|
|
60
60
|
@group_ids = self.group_ids + [erebus_id]
|
|
61
61
|
end
|
|
62
|
-
assert subject.update_attributes(:query => 'nodes where 1 =
|
|
62
|
+
assert subject.update_attributes(:query => "'nodes where 1 = \#{asset_host? ? 1 : 0} in site'")
|
|
63
63
|
assert_nil subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request)
|
|
64
64
|
assert_equal 'A plan to overrule Zeus', subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request(:get, {}, 80)).title
|
|
65
65
|
end
|
|
@@ -103,7 +103,7 @@ class AclTest < Zena::Unit::TestCase
|
|
|
103
103
|
|
|
104
104
|
context 'with many acls' do
|
|
105
105
|
setup do
|
|
106
|
-
Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'read' WHERE id = #{acls_id(:self)}"
|
|
106
|
+
Zena::Db.execute "UPDATE acls SET query = \"'nodes in project from assigned_project'\", action = 'read' WHERE id = #{acls_id(:self)}"
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
should 'try acls in turn' do
|