zena 0.16.9 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +16 -3
- data/CREDITS +8 -4
- data/History.txt +12 -15
- data/app/controllers/application_controller.rb +1 -0
- data/app/controllers/columns_controller.rb +130 -0
- data/app/controllers/documents_controller.rb +16 -4
- data/app/controllers/groups_controller.rb +1 -5
- data/app/controllers/iformats_controller.rb +1 -5
- data/app/controllers/nodes_controller.rb +116 -41
- data/app/controllers/preferences_controller.rb +2 -0
- data/app/controllers/relations_controller.rb +1 -5
- data/app/controllers/sites_controller.rb +1 -5
- data/app/controllers/user_sessions_controller.rb +8 -3
- data/app/controllers/users_controller.rb +23 -11
- data/app/controllers/versions_controller.rb +29 -46
- data/app/controllers/virtual_classes_controller.rb +20 -12
- data/app/helpers/documents_helper.rb +5 -1
- data/app/models/attachment.rb +41 -0
- data/app/models/base_contact.rb +79 -0
- data/app/models/cache.rb +2 -2
- data/app/models/cached_page.rb +5 -4
- data/app/models/column.rb +90 -0
- data/app/models/comment.rb +3 -1
- data/app/models/contact_content.rb +5 -5
- data/app/models/contact_version.rb +2 -2
- data/app/models/data_entry.rb +9 -8
- data/app/models/discussion.rb +4 -0
- data/app/models/document.rb +170 -42
- data/app/models/document_content.rb +5 -9
- data/app/models/group.rb +4 -3
- data/app/models/idx_nodes_ml_string.rb +5 -0
- data/app/models/idx_nodes_string.rb +5 -0
- data/app/models/idx_template.rb +35 -0
- data/app/models/iformat.rb +4 -4
- data/app/models/image.rb +193 -26
- data/app/models/link.rb +1 -1
- data/app/models/node.rb +358 -338
- data/app/models/note.rb +2 -4
- data/app/models/page.rb +10 -8
- data/app/models/reference.rb +1 -1
- data/app/models/relation.rb +40 -1
- data/app/models/relation_proxy.rb +37 -40
- data/app/models/role.rb +19 -0
- data/app/models/site.rb +54 -24
- data/app/models/skin.rb +1 -16
- data/app/models/template.rb +92 -62
- data/app/models/template_content.rb +12 -6
- data/app/models/text_document.rb +69 -36
- data/app/models/text_document_content.rb +3 -3
- data/app/models/user.rb +34 -13
- data/app/models/version.rb +47 -291
- data/app/models/virtual_class.rb +26 -29
- data/app/views/columns/_add.html.erb +6 -0
- data/app/views/columns/_form.html.erb +36 -0
- data/app/views/columns/_li.html.erb +11 -0
- data/app/views/columns/create.rjs +8 -0
- data/app/views/columns/destroy.rjs +6 -0
- data/app/views/columns/edit.html.erb +5 -0
- data/app/views/columns/index.html.erb +15 -0
- data/app/views/columns/new.html.erb +2 -0
- data/app/views/columns/show.rjs +1 -0
- data/app/views/columns/update.rjs +5 -0
- data/app/views/comments/_li.rhtml +1 -1
- data/app/views/comments/create.rjs +1 -1
- data/app/views/comments/index.rhtml +1 -1
- data/app/views/comments/publish.rjs +1 -1
- data/app/views/comments/remove.rjs +1 -1
- data/app/views/data_entries/_li.html.erb +1 -1
- data/app/views/discussions/create.rjs +1 -1
- data/app/views/documents/_crop.rhtml +4 -4
- data/app/views/documents/crop_form.rjs +1 -1
- data/app/views/documents/new.rhtml +1 -1
- data/app/views/documents/show.rhtml +4 -4
- data/app/views/groups/_form.rhtml +1 -1
- data/app/views/groups/index.rhtml +1 -1
- data/app/views/iformats/_form.rhtml +1 -1
- data/app/views/iformats/create.rjs +1 -1
- data/app/views/iformats/index.rhtml +1 -1
- data/app/views/links/create.rjs +1 -1
- data/app/views/links/destroy.rjs +1 -1
- data/app/views/links/show.rjs +1 -1
- data/app/views/nodes/_dates.rhtml +2 -2
- data/app/views/nodes/_gallery.rhtml +2 -2
- data/app/views/nodes/_list_nodes.rhtml +2 -2
- data/app/views/nodes/_parent.rhtml +1 -1
- data/app/views/nodes/_position.rhtml +2 -2
- data/app/views/nodes/_results.rhtml +1 -1
- data/app/views/nodes/create.rjs +1 -4
- data/app/views/nodes/destroy.erb +0 -0
- data/app/views/nodes/import.rhtml +1 -1
- data/app/views/nodes/save_text.rjs +3 -3
- data/app/views/nodes/table_update.rjs +1 -2
- data/app/views/nodes/update.rjs +1 -1
- data/app/views/relations/_form.erb +15 -15
- data/app/views/relations/_li.erb +5 -11
- data/app/views/relations/create.rjs +1 -1
- data/app/views/relations/index.erb +1 -1
- data/app/views/sites/_form.erb +3 -3
- data/app/views/sites/_li.erb +1 -1
- data/app/views/sites/index.erb +1 -1
- data/app/views/templates/document_create_tabs/_file.rhtml +3 -3
- data/app/views/templates/document_create_tabs/_template.rhtml +9 -9
- data/app/views/templates/document_create_tabs/{_text_doc.rhtml → _text_document.rhtml} +4 -4
- data/app/views/templates/edit_tabs/{_contact.rhtml → _basecontact.rhtml} +2 -2
- data/app/views/templates/edit_tabs/_document.rhtml +3 -3
- data/app/views/templates/edit_tabs/_help.rhtml +2 -2
- data/app/views/templates/edit_tabs/_image.rhtml +4 -4
- data/app/views/templates/edit_tabs/_template.rhtml +6 -6
- data/app/views/templates/edit_tabs/_text.rhtml +1 -1
- data/app/views/templates/edit_tabs/_textdocument.rhtml +4 -4
- data/app/views/templates/edit_tabs/_title.rhtml +9 -14
- data/app/views/users/_form.rhtml +1 -1
- data/app/views/users/change_info.rjs +1 -1
- data/app/views/users/change_password.rjs +1 -1
- data/app/views/users/index.rhtml +1 -1
- data/app/views/users/preferences.html.erb +10 -4
- data/app/views/users/update.rjs +1 -1
- data/app/views/versions/_list.rhtml +1 -1
- data/app/views/versions/_tr.rhtml +1 -1
- data/app/views/versions/backup.rjs +1 -1
- data/app/views/versions/destroy.rjs +6 -2
- data/app/views/versions/diff.rjs +1 -1
- data/app/views/versions/edit.rhtml +14 -6
- data/app/views/versions/preview.rjs +1 -1
- data/app/views/versions/show.rjs +1 -1
- data/app/views/virtual_classes/_add.erb +1 -1
- data/app/views/virtual_classes/_form.erb +15 -10
- data/app/views/virtual_classes/_li.erb +13 -7
- data/app/views/virtual_classes/create.rjs +2 -2
- data/app/views/virtual_classes/edit.html.erb +7 -0
- data/app/views/virtual_classes/index.erb +2 -2
- data/app/views/zafu/default/Node-+adminLayout.zafu +47 -0
- data/app/views/zafu/default/Node-+index.zafu +1 -0
- data/app/views/{templates/defaults/+login.zafu → zafu/default/Node-+login.zafu} +9 -7
- data/app/views/zafu/default/Node-+notFound.zafu +14 -0
- data/app/views/zafu/default/Node-+popupLayout.zafu +24 -0
- data/app/views/zafu/default/Node-+search.zafu +23 -0
- data/app/views/zafu/default/Node.zafu +95 -0
- data/bin/zena +0 -2
- data/bricks/captcha/lib/bricks/captcha.rb +62 -0
- data/bricks/captcha/zena/init.rb +11 -0
- data/bricks/data2pdf/.document +5 -0
- data/bricks/data2pdf/README +19 -0
- data/bricks/data2pdf/Rakefile +36 -0
- data/bricks/data2pdf/VERSION +1 -0
- data/bricks/data2pdf/lib/data2pdf.rb +60 -0
- data/bricks/data2pdf/lib/engines/prince.rb +39 -0
- data/bricks/data2pdf/lib/engines/xhtml2pdf.rb +41 -0
- data/bricks/data2pdf/lib/install.rb +111 -0
- data/bricks/data2pdf/test/engines/test_prince.rb +14 -0
- data/bricks/data2pdf/test/engines/test_xhtml2pdf.rb +14 -0
- data/bricks/data2pdf/test/fixtures/application.css +241 -0
- data/bricks/data2pdf/test/fixtures/contact.html +153 -0
- data/bricks/data2pdf/test/fixtures/pisa-default.css +207 -0
- data/bricks/data2pdf/test/fixtures/sheet1.css +207 -0
- data/bricks/data2pdf/test/fixtures/sheet2.css +207 -0
- data/bricks/data2pdf/test/fixtures/simple-html.html +337 -0
- data/bricks/data2pdf/test/fixtures/simple-text.txt +1 -0
- data/bricks/data2pdf/test/helper.rb +23 -0
- data/bricks/data2pdf/test/shoulda_macros/shoulda_data2pdf.rb +91 -0
- data/bricks/data2pdf/test/unit/test_rendering.rb +37 -0
- data/bricks/math/{patch/application_helper.rb → lib/bricks/math.rb} +0 -4
- data/bricks/math/zena/init.rb +4 -0
- data/bricks/sphinx/README +2 -2
- data/bricks/sphinx/lib/use_sphinx.rb +7 -11
- data/bricks/sphinx/{misc → zena}/deploy.rb +0 -0
- data/bricks/sphinx/{patch/node.rb → zena/init.rb} +1 -3
- data/bricks/sphinx/{migrate → zena/migrate}/20091102171258_add_delta_for_sphinx.rb +0 -0
- data/bricks/sphinx/{misc → zena}/sphinx.yml +0 -0
- data/bricks/sphinx/{misc → zena}/tasks.rb +0 -0
- data/bricks/tags/lib/{has_tags.rb → bricks/tags.rb} +12 -24
- data/bricks/tags/zena/init.rb +21 -0
- data/bricks/tags/{test → zena/test}/sites/zena/links.yml +0 -0
- data/bricks/tags/{test → zena/test}/unit/tags_test.rb +1 -1
- data/bricks/tags/zena/test/zafu/tags.yml +41 -0
- data/bricks/worker/README +2 -2
- data/bricks/worker/{misc → zena}/deploy.rb +0 -0
- data/bricks/worker/{misc → zena}/init.rb +2 -1
- data/bricks/worker/{migrate → zena/migrate}/20091104191643_create_delayed_jobs_table.rb +0 -0
- data/bricks/worker/{misc → zena}/tasks.rb +0 -0
- data/bricks/worker/{misc → zena}/worker +0 -0
- data/config/bricks.yml +2 -0
- data/config/deploy.rb +2 -7
- data/config/environment.rb +3 -5
- data/config/gems.yml +9 -4
- data/db/20100628074512_zena0x_to1x.rb +223 -0
- data/db/init/base/help.en.zml +3 -3
- data/db/init/base/help.fr.zml +3 -3
- data/db/init/base/skins.zml +2 -2
- data/db/init/base/skins/default.zml +4 -4
- data/db/init/base/skins/default/Node-+adminLayout.zafu +8 -7
- data/db/init/base/skins/default/Node-+login.zafu +9 -7
- data/db/init/base/skins/default/Node-+search.zafu +4 -1
- data/db/init/base/skins/default/Node-tree.zafu +3 -3
- data/db/init/base/skins/default/Node.zafu +20 -20
- data/db/init/base/skins/default/Project.zafu +1 -1
- data/db/init/base/skins/default/notes.zafu +5 -5
- data/db/init/base/skins/default/style.css +17 -12
- data/db/migrate/001_create_base.rb +1 -1
- data/db/migrate/008_user_status.rb +1 -1
- data/db/migrate/020_create_participation.rb +3 -3
- data/db/migrate/024_correct_vclass_kpath.rb +5 -3
- data/db/migrate/025_move_tag_into_vclass.rb +7 -5
- data/db/migrate/030_redit_auto_publish_site_settings.rb +2 -2
- data/db/migrate/032_caches_context_as_hash.rb +4 -2
- data/db/migrate/046_fix_zazen_image_tag.rb +2 -2
- data/db/migrate/047_change_default_link_id_to_zero.rb +4 -2
- data/db/migrate/20090825201159_insert_zero_link.rb +1 -1
- data/db/migrate/20090924141459_zafu_fix_sept09.rb +2 -2
- data/db/migrate/20100125062254_add_dynamo_to_version.rb +9 -0
- data/db/migrate/20100201133242_remove_default_status_on_version.rb +9 -0
- data/db/migrate/20100208194210_create_attachments.rb +17 -0
- data/db/migrate/20100210112319_change_dynamo_to_property.rb +9 -0
- data/db/migrate/20100320145726_transform_template_contents_into_index.rb +13 -0
- data/db/migrate/20100328125634_change_skin_name_to_id.rb +31 -0
- data/db/migrate/20100417061257_add_properties_to_sites.rb +9 -0
- data/db/migrate/20100419163149_rename_name_to_node_name.rb +9 -0
- data/db/migrate/20100422091606_change_v_class_table_into_roles.rb +27 -0
- data/db/migrate/20100422094048_node_habtm_roles.rb +13 -0
- data/db/migrate/20100422115935_create_columns.rb +15 -0
- data/db/migrate/20100513181529_add_site_id_to_columns.rb +9 -0
- data/db/migrate/20100519091711_add_index_definition_to_columns.rb +9 -0
- data/db/migrate/20100519091940_create_idx_nodes_string.rb +14 -0
- data/db/migrate/20100519232432_create_idx_nodes_ml_string.rb +15 -0
- data/db/migrate/20100525113858_add_porperties_to_users.rb +9 -0
- data/db/migrate/20100526090140_renamed_contact_model_to_base_contact.rb +13 -0
- data/db/migrate/20100527130937_change_column_index_to_string.rb +9 -0
- data/db/migrate/20100531135128_add_fulltext_builder_fields.rb +28 -0
- data/doc/zafu_changes.yml +2 -2
- data/lib/bricks/loader.rb +48 -26
- data/lib/exif_data.rb +21 -1
- data/lib/gettext_strings.rb +8 -1
- data/lib/tasks/zena.rake +55 -20
- data/lib/version_off.rb +323 -0
- data/lib/zazen_parser.rb +9 -0
- data/lib/zena.rb +13 -14
- data/lib/zena/acts/enrollable.rb +232 -0
- data/lib/zena/acts/secure.rb +86 -506
- data/lib/zena/acts/secure_node.rb +483 -0
- data/lib/zena/acts/serializable.rb +149 -0
- data/lib/zena/app.rb +36 -23
- data/lib/zena/code_syntax.rb +26 -2
- data/lib/zena/controller/test_case.rb +23 -2
- data/lib/zena/core_ext/file_utils.rb +3 -3
- data/lib/zena/core_ext/string.rb +2 -2
- data/lib/zena/db.rb +180 -24
- data/lib/zena/deploy.rb +140 -183
- data/lib/zena/deploy/awstats.conf.rhtml +4 -4
- data/lib/zena/deploy/httpd.rhtml +1 -2
- data/lib/zena/deploy/stats.vhost.rhtml +7 -7
- data/lib/zena/deploy/vhost.rhtml +1 -1
- data/lib/zena/deploy/vhost_www.rhtml +4 -4
- data/lib/zena/foxy_parser.rb +345 -295
- data/lib/zena/info.rb +1 -2
- data/lib/zena/integration/test_case.rb +70 -0
- data/lib/zena/loader/yaml_loader.rb +80 -0
- data/lib/zena/migrator.rb +2 -2
- data/lib/zena/parser.rb +19 -17
- data/lib/zena/parser/zafu_rules.rb +7 -0
- data/lib/zena/parser/zafu_tags.rb +2 -2
- data/lib/zena/parser/zazen_rules.rb +9 -29
- data/lib/zena/parser/zena_rules.rb +2 -2
- data/lib/zena/refactor/act_as_content.rb +6 -0
- data/lib/zena/routes.rb +9 -3
- data/lib/zena/site_worker.rb +48 -0
- data/lib/zena/test_controller.rb +49 -12
- data/lib/zena/use.rb +47 -0
- data/lib/zena/use/action.rb +230 -0
- data/lib/zena/use/ajax.rb +287 -13
- data/lib/zena/use/authlogic.rb +28 -12
- data/lib/zena/use/calendar.rb +2 -2
- data/lib/zena/use/conditional.rb +41 -0
- data/lib/zena/use/context.rb +187 -0
- data/lib/zena/use/dates.rb +87 -30
- data/lib/zena/use/display.rb +598 -0
- data/lib/zena/use/dyn_attributes.rb +4 -4
- data/lib/zena/use/error_rendering.rb +3 -1
- data/lib/zena/use/fixtures.rb +56 -22
- data/lib/zena/use/forms.rb +584 -0
- data/lib/zena/use/fulltext.rb +90 -0
- data/lib/zena/use/grid.rb +12 -7
- data/lib/zena/use/html_tags.rb +8 -459
- data/lib/zena/use/i18n.rb +172 -109
- data/lib/zena/use/image_builder.rb +1 -2
- data/lib/zena/use/ml_index.rb +56 -0
- data/lib/zena/use/nested_attributes_alias.rb +2 -2
- data/lib/zena/use/node_name.rb +94 -0
- data/lib/zena/use/query_builder.rb +355 -0
- data/lib/zena/use/query_comment.rb +63 -73
- data/lib/zena/use/query_node.rb +404 -317
- data/lib/zena/use/recursion.rb +71 -0
- data/lib/zena/use/refactor.rb +27 -40
- data/lib/zena/use/relations.rb +9 -3
- data/lib/zena/use/rendering.rb +143 -116
- data/lib/zena/use/search.rb +79 -21
- data/lib/zena/use/test_helper.rb +17 -9
- data/lib/zena/use/upload.rb +1 -1
- data/lib/zena/use/urls.rb +534 -28
- data/lib/zena/use/version_hash.rb +154 -0
- data/lib/zena/use/workflow.rb +635 -0
- data/lib/zena/use/zafu_attributes.rb +205 -0
- data/lib/zena/use/zafu_eval.rb +21 -0
- data/lib/zena/use/zafu_safe_definitions.rb +36 -0
- data/lib/zena/use/zafu_templates.rb +459 -0
- data/lib/zena/use/zazen.rb +53 -23
- data/lib/zena/view/test_case.rb +56 -7
- data/lib/zena/webdav_adapter.rb +8 -8
- data/lib/zena/zafu_compiler.rb +25 -0
- data/locale/de/LC_MESSAGES/zena.mo +0 -0
- data/locale/de/zena.mo +0 -0
- data/locale/de/zena.po +920 -781
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.mo +0 -0
- data/locale/en/zena.po +530 -405
- data/locale/fr/LC_MESSAGES/zena.mo +0 -0
- data/locale/fr/zena.mo +0 -0
- data/locale/fr/zena.po +588 -432
- data/locale/zena.pot +391 -353
- data/old_zafu/action.rb +129 -0
- data/{lib/zafu → old_zafu}/ajax.rb +0 -24
- data/{lib/zafu → old_zafu}/attributes.rb +2 -2
- data/{lib/zafu → old_zafu}/calendar.rb +1 -1
- data/{lib/zafu → old_zafu}/context.rb +4 -8
- data/{lib/zafu → old_zafu}/core/html.rb +1 -1
- data/old_zafu/core/move_to_parser.rb +74 -0
- data/old_zafu/dates.rb +20 -0
- data/{lib/zafu → old_zafu}/display.rb +33 -146
- data/{lib/zafu → old_zafu}/eval.rb +0 -0
- data/{lib/zafu → old_zafu}/experimental.rb +1 -1
- data/{lib/zafu → old_zafu}/i18n.rb +1 -1
- data/{lib/zafu → old_zafu}/meta.rb +0 -0
- data/old_zafu/query_node.rb +278 -0
- data/{lib/zafu → old_zafu}/refactor.rb +2 -12
- data/old_zafu/support/context.rb +146 -0
- data/{lib/zafu → old_zafu}/support/dom.rb +1 -43
- data/{lib/zafu → old_zafu}/support/erb.rb +0 -0
- data/{lib/zafu → old_zafu}/support/flow.rb +1 -13
- data/old_zafu/support/forms.rb +7 -0
- data/old_zafu/support/links.rb +75 -0
- data/{lib → old_zafu}/zafu_parser.rb +2 -2
- data/public/images/attach_window.png +0 -0
- data/public/images/dettach_window.png +0 -0
- data/public/images/ext/{contact.png → basecontact.png} +0 -0
- data/public/images/toggle_off.png +0 -0
- data/public/images/toggle_on.png +0 -0
- data/public/images/window/bottom_left.png +0 -0
- data/public/images/window/bottom_mid.png +0 -0
- data/public/images/window/bottom_right.png +0 -0
- data/public/images/window/center_left.png +0 -0
- data/public/images/window/center_right.png +0 -0
- data/public/images/window/close.png +0 -0
- data/public/images/window/maximize.png +0 -0
- data/public/images/window/minimize.png +0 -0
- data/public/images/window/overlay.png +0 -0
- data/public/images/window/sizer.png +0 -0
- data/public/images/window/top_left.png +0 -0
- data/public/images/window/top_mid.png +0 -0
- data/public/images/window/top_right.png +0 -0
- data/public/javascripts/builder.js +1 -3
- data/public/javascripts/controls.js +3 -5
- data/public/javascripts/dragdrop.js +5 -8
- data/public/javascripts/effects.js +6 -15
- data/public/javascripts/prototype.js +1574 -1020
- data/public/javascripts/scriptaculous.js +13 -7
- data/public/javascripts/slider.js +5 -7
- data/public/javascripts/sound.js +6 -4
- data/public/javascripts/unittest.js +69 -71
- data/public/javascripts/window.js +1843 -0
- data/public/javascripts/zena.js +216 -16
- data/public/stylesheets/admin.css +18 -13
- data/public/stylesheets/default.css +18 -17
- data/public/stylesheets/popup.css +4 -4
- data/public/stylesheets/window.css +155 -0
- data/public/stylesheets/zena.css +9 -8
- data/test/custom_queries/complex.host.yml +8 -8
- data/test/fixtures/files/Node-test.zafu +11 -11
- data/test/fixtures/files/import.tgz +0 -0
- data/test/fixtures/files/simple.zml.gz +0 -0
- data/test/fixtures/import/photos.en.zml +3 -3
- data/test/fixtures/import/photos/bird.jpg.en.zml +1 -1
- data/test/fixtures/import/photos/bird.jpg.fr.zml +1 -1
- data/test/fixtures/import/simple.zml +2 -2
- data/test/functional/application_controller_test.rb +2 -41
- data/test/functional/columns_controller_test.rb +140 -0
- data/test/functional/data_entries_controller_test.rb +1 -1
- data/test/functional/documents_controller_test.rb +88 -5
- data/test/functional/nodes_controller_commit_test.rb +71 -0
- data/test/functional/nodes_controller_test.rb +393 -93
- data/test/functional/note_controller_test.rb +5 -5
- data/test/functional/relations_controller_test.rb +1 -1
- data/test/functional/users_controller_test.rb +72 -14
- data/test/functional/versions_controller_test.rb +9 -8
- data/test/functional/virtual_classes_controller_test.rb +142 -65
- data/test/integration/multiple_hosts_test.rb +28 -20
- data/test/integration/navigation_test.rb +121 -83
- data/test/integration/query_node/basic.yml +128 -0
- data/test/integration/query_node/comments.yml +23 -0
- data/test/integration/query_node/complex.yml +111 -0
- data/test/integration/query_node/dates.yml +22 -0
- data/test/integration/query_node/errors.yml +12 -0
- data/test/integration/query_node/filters.yml +123 -0
- data/test/integration/query_node/properties.yml +41 -0
- data/test/integration/query_node/relations.yml +75 -0
- data/test/integration/query_node_test.rb +189 -0
- data/test/integration/xml_api_test.rb +166 -0
- data/test/integration/zafu_compiler/action.yml +67 -0
- data/test/integration/zafu_compiler/ajax.yml +263 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/apphelper.yml +0 -0
- data/test/integration/zafu_compiler/asset.yml +13 -0
- data/test/integration/zafu_compiler/basic.yml +518 -0
- data/test/integration/zafu_compiler/calendar.yml +35 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/complex.yml +16 -16
- data/test/integration/zafu_compiler/conditional.yml +173 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/data.yml +3 -3
- data/test/integration/zafu_compiler/dates.yml +58 -0
- data/test/integration/zafu_compiler/display.yml +273 -0
- data/test/integration/zafu_compiler/errors.yml +79 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/eval.yml +6 -2
- data/test/integration/zafu_compiler/forms.yml +130 -0
- data/test/integration/zafu_compiler/i18n.yml +107 -0
- data/test/integration/zafu_compiler/later.yml +31 -0
- data/test/integration/zafu_compiler/off/off.yml +15 -0
- data/test/integration/zafu_compiler/recursion.yml +28 -0
- data/test/integration/zafu_compiler/relations.yml +487 -0
- data/test/integration/zafu_compiler/roles.yml +28 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/rubyless.yml +10 -9
- data/test/integration/zafu_compiler/safe_definitions.yml +65 -0
- data/test/integration/zafu_compiler/search.yml +13 -0
- data/test/integration/zafu_compiler/security.yml +30 -0
- data/test/integration/zafu_compiler/site.yml +14 -0
- data/test/integration/zafu_compiler/urls.yml +189 -0
- data/test/integration/zafu_compiler/user.yml +32 -0
- data/test/integration/zafu_compiler/version.yml +47 -0
- data/test/integration/zafu_compiler/workflow.yml +36 -0
- data/test/integration/zafu_compiler/zafu_attributes.yml +169 -0
- data/test/{unit/zena/zena_tags → integration/zafu_compiler}/zazen.yml +7 -3
- data/test/{unit/zena/zena_tags_test.rb → integration/zafu_compiler_test.rb} +137 -57
- data/test/sites/complex/nodes.yml +48 -47
- data/test/sites/complex/{virtual_classes.yml → roles.yml} +2 -1
- data/test/sites/ocean/nodes.yml +7 -7
- data/test/sites/ocean/versions.yml +30 -21
- data/test/sites/zena/columns.yml +12 -0
- data/test/sites/zena/nodes.yml +33 -32
- data/test/sites/zena/{virtual_classes.yml → roles.yml} +11 -1
- data/test/sites/zena/sites.yml +4 -1
- data/test/sites/zena/users.yml +5 -4
- data/test/sites/zena/versions.yml +398 -279
- data/test/test_helper.rb +2 -1
- data/test/test_zena.rb +3 -8
- data/test/unit/after_commit_test.rb +103 -0
- data/test/unit/attachment_test.rb +266 -0
- data/test/unit/base_contact_test.rb +242 -0
- data/test/unit/cached_page_test.rb +6 -6
- data/test/unit/column_test.rb +77 -0
- data/test/unit/comment_test.rb +1 -1
- data/test/unit/data_entry_test.rb +8 -2
- data/test/unit/document_test.rb +393 -211
- data/test/unit/exif_data_test.rb +1 -1
- data/test/unit/iformat_test.rb +9 -9
- data/test/unit/image_test.rb +358 -284
- data/test/unit/multi_version_test.rb +4 -0
- data/test/unit/multiversion_test.rb +2 -1013
- data/test/unit/node_name_test.rb +137 -0
- data/test/unit/node_test.rb +374 -461
- data/test/unit/note_test.rb +23 -23
- data/test/unit/page_test.rb +23 -23
- data/test/unit/project_test.rb +2 -2
- data/test/unit/relation_proxy_test.rb +25 -6
- data/test/unit/relation_test.rb +156 -24
- data/test/unit/role_test.rb +122 -0
- data/test/unit/section_test.rb +2 -2
- data/test/unit/site_test.rb +48 -12
- data/test/unit/skin_test.rb +0 -13
- data/test/unit/template_test.rb +361 -314
- data/test/unit/text_document_test.rb +105 -33
- data/test/unit/transparent_version_test.rb +4 -0
- data/test/unit/user_test.rb +10 -10
- data/test/unit/version_test.rb +209 -301
- data/test/unit/virtual_class_test.rb +21 -29
- data/test/unit/workflow_test.rb +1075 -0
- data/test/unit/zena/acts/enrollable_test.rb +211 -0
- data/test/unit/{secure_test.rb → zena/acts/secure_test.rb} +190 -105
- data/test/unit/zena/acts/serializable_test.rb +85 -0
- data/test/unit/zena/db_test.rb +27 -14
- data/test/unit/zena/parser/zazen.yml +1 -1
- data/test/unit/zena/use/action_test.rb +109 -0
- data/test/unit/zena/use/calendar_test.rb +8 -8
- data/test/unit/zena/use/dates_test.rb +10 -0
- data/test/unit/zena/use/dates_view_methods_test.rb +8 -12
- data/test/unit/zena/use/fulltext_test.rb +82 -0
- data/test/unit/zena/use/html_tags_test.rb +225 -201
- data/test/unit/zena/use/i18n_test.rb +56 -26
- data/test/unit/zena/use/ml_index_test.rb +129 -0
- data/test/unit/zena/use/nested_attributes_alias_view_test.rb +10 -10
- data/test/unit/zena/use/query_node_test.rb +104 -0
- data/test/unit/zena/use/refactor_test.rb +4 -15
- data/test/unit/zena/use/rendering_test.rb +23 -16
- data/test/unit/zena/use/upload_test.rb +2 -2
- data/test/unit/zena/use/urls_test.rb +2 -0
- data/test/unit/zena/use/version_hash_test.rb +126 -0
- data/test/unit/zena/use/zafu_template_test.rb +135 -0
- data/test/unit/zena/use/zazen_test.rb +85 -61
- data/vendor/plugins/gettext_i18n_rails/README.markdown +26 -22
- data/vendor/plugins/gettext_i18n_rails/Rakefile +31 -5
- data/vendor/plugins/gettext_i18n_rails/VERSION +1 -0
- data/vendor/plugins/gettext_i18n_rails/gettext_i18n_rails.gemspec +64 -0
- data/vendor/plugins/gettext_i18n_rails/init.rb +7 -3
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails.rb +5 -6
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/active_record.rb +6 -2
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/backend.rb +1 -1
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/model_attributes_finder.rb +2 -2
- data/vendor/plugins/gettext_i18n_rails/{tasks → lib/tasks}/gettext_rails_i18n.rake +10 -9
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/action_controller_spec.rb +7 -3
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/active_record_spec.rb +7 -5
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/backend_spec.rb +7 -7
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails_spec.rb +4 -0
- data/vendor/plugins/gettext_i18n_rails/spec/spec_helper.rb +11 -9
- data/vendor/plugins/mysql_timezone_utc/init.rb +1 -0
- data/vendor/plugins/mysql_timezone_utc/lib/mysql_timezone_utc.rb +14 -0
- data/vendor/plugins/postgresql_timezone_utc/init.rb +1 -0
- data/vendor/plugins/postgresql_timezone_utc/lib/postgresql_timezone_utc.rb +14 -0
- data/zena.gemspec +281 -123
- metadata +354 -160
- data/app/models/contact.rb +0 -32
- data/app/models/document_version.rb +0 -13
- data/app/models/image_version.rb +0 -21
- data/app/models/text_document_version.rb +0 -29
- data/app/views/templates/defaults/+adminLayout.zafu +0 -69
- data/bricks/captcha/patch/application_controller.rb +0 -10
- data/bricks/captcha/patch/application_helper.rb +0 -32
- data/bricks/captcha/patch/site.rb +0 -2
- data/bricks/captcha/zafu/captcha.rb +0 -29
- data/bricks/tags/patch/node.rb +0 -15
- data/bricks/tags/test/zafu/tags.yml +0 -40
- data/db/schema.rb +0 -295
- data/lib/zafu/action.rb +0 -285
- data/lib/zafu/core/move_to_parser.rb +0 -167
- data/lib/zafu/dates.rb +0 -58
- data/lib/zafu/support/context.rb +0 -265
- data/lib/zafu/support/forms.rb +0 -461
- data/lib/zafu/support/links.rb +0 -306
- data/lib/zena/acts/multiversion.rb +0 -755
- data/lib/zena/fix/mysql_connection.rb +0 -17
- data/lib/zena/use/query_node_finders.rb +0 -91
- data/lib/zena/use/zafu.rb +0 -514
- data/test/helpers/query_node/basic.yml +0 -149
- data/test/helpers/query_node/comments.yml +0 -18
- data/test/helpers/query_node/complex.yml +0 -98
- data/test/helpers/query_node/filters.yml +0 -110
- data/test/helpers/query_node/relations.yml +0 -43
- data/test/helpers/query_node_test.rb +0 -116
- data/test/sites/ocean/contact_contents.yml +0 -19
- data/test/sites/ocean/template_contents.yml +0 -8
- data/test/sites/zena/contact_contents.yml +0 -55
- data/test/sites/zena/document_contents.yml +0 -76
- data/test/sites/zena/dyn_attributes.yml +0 -43
- data/test/sites/zena/template_contents.yml +0 -103
- data/test/unit/contact_content_test.rb +0 -33
- data/test/unit/contact_test.rb +0 -39
- data/test/unit/contact_version_test.rb +0 -48
- data/test/unit/document_content_test.rb +0 -110
- data/test/unit/document_version_test.rb +0 -11
- data/test/unit/dyn_attributes_test.rb +0 -229
- data/test/unit/image_content_test.rb +0 -154
- data/test/unit/image_version_test.rb +0 -18
- data/test/unit/template_content_test.rb +0 -9
- data/test/unit/text_document_version_test.rb +0 -37
- data/test/unit/zena/use/zafu_test.rb +0 -41
- data/test/unit/zena/zena_tags/ajax.yml +0 -233
- data/test/unit/zena/zena_tags/basic.yml +0 -1306
- data/test/unit/zena/zena_tags/errors.yml +0 -71
- data/test/unit/zena/zena_tags/relations.yml +0 -405
@@ -48,7 +48,7 @@
|
|
48
48
|
# If there is several log files from load balancing servers :
|
49
49
|
# Example: "/pathtotools/logresolvemerge.pl *.log |"
|
50
50
|
#
|
51
|
-
LogFile="
|
51
|
+
LogFile="/var/www/zena/<%= host %>/log/apache2.access.log"
|
52
52
|
|
53
53
|
|
54
54
|
# Enter the log file type you want to analyze.
|
@@ -150,7 +150,7 @@ LogSeparator=" "
|
|
150
150
|
# Example: "ftp.domain.com"
|
151
151
|
# Example: "domain.com"
|
152
152
|
#
|
153
|
-
SiteDomain="<%=
|
153
|
+
SiteDomain="<%= host %>"
|
154
154
|
|
155
155
|
|
156
156
|
# Enter here all other possible domain names, addresses or virtual host
|
@@ -165,7 +165,7 @@ SiteDomain="<%= config[:host] %>"
|
|
165
165
|
# Note: You can also use @/mypath/myfile if list of aliases are in a file.
|
166
166
|
# Example: "www.myserver.com localhost 127.0.0.1 REGEX[mydomain\.(net|org)$]"
|
167
167
|
#
|
168
|
-
HostAliases="localhost 127.0.0.1 <%=
|
168
|
+
HostAliases="localhost 127.0.0.1 <%= host %> stats.<%= host %>"
|
169
169
|
|
170
170
|
|
171
171
|
# If you want to have hosts reported by name instead of ip address, AWStats
|
@@ -200,7 +200,7 @@ DNSLookup=2
|
|
200
200
|
# Example: "C:/awstats_data_dir"
|
201
201
|
# Default: "." (means same directory as awstats.pl)
|
202
202
|
#
|
203
|
-
DirData="
|
203
|
+
DirData="/var/www/zena/<%= host %>/log/awstats"
|
204
204
|
|
205
205
|
|
206
206
|
# Relative or absolute web URL of your awstats cgi-bin directory.
|
data/lib/zena/deploy/httpd.rhtml
CHANGED
@@ -3,8 +3,7 @@
|
|
3
3
|
|
4
4
|
NameVirtualHost *
|
5
5
|
<% if config[:app_type] == :passenger %>
|
6
|
-
LoadModule upload_progress_module /
|
7
|
-
PassengerDefaultUser www-data
|
6
|
+
LoadModule upload_progress_module <%= config[:app_root] %>/vendor/apache2_upload_progress/mod_upload_progress.so
|
8
7
|
<% elsif config[:app_type] == :mongrel %>
|
9
8
|
<Proxy *>
|
10
9
|
Order allow,deny
|
@@ -1,19 +1,19 @@
|
|
1
|
-
# zena awstats vhost for <%=
|
1
|
+
# zena awstats vhost for <%= host %>
|
2
2
|
# automatically generated file
|
3
3
|
|
4
4
|
<VirtualHost *>
|
5
|
-
ServerName stats.<%=
|
5
|
+
ServerName stats.<%= host %>
|
6
6
|
|
7
7
|
DocumentRoot /usr/share/doc/awstats/examples
|
8
|
-
ErrorLog
|
9
|
-
CustomLog
|
8
|
+
ErrorLog /var/www/zena/<%= host %>/log/apache2.error.log
|
9
|
+
CustomLog /var/www/zena/<%= host %>/log/apache2.access.log combined
|
10
10
|
|
11
11
|
<location />
|
12
|
-
SetEnv AWSTATS_FORCE_CONFIG <%=
|
12
|
+
SetEnv AWSTATS_FORCE_CONFIG <%= host %>
|
13
13
|
|
14
14
|
AuthType Basic
|
15
|
-
AuthName "<%=
|
16
|
-
AuthUserFile
|
15
|
+
AuthName "<%= host %> stats"
|
16
|
+
AuthUserFile /var/www/zena/<%= host %>/log/.awstatspw
|
17
17
|
Require valid-user
|
18
18
|
</location>
|
19
19
|
|
data/lib/zena/deploy/vhost.rhtml
CHANGED
@@ -66,7 +66,7 @@
|
|
66
66
|
RewriteCond %{REQUEST_FILENAME} !-f
|
67
67
|
RewriteRule ^/(.*)$ balancer://<%= config[:balancer] %>%{REQUEST_URI} [P,QSA,L]
|
68
68
|
<% elsif config[:app_type] == :passenger %>
|
69
|
-
PassengerAppRoot
|
69
|
+
PassengerAppRoot <% config[:app_root] %>
|
70
70
|
|
71
71
|
<Location />
|
72
72
|
# enable tracking uploads in /
|
@@ -1,10 +1,10 @@
|
|
1
|
-
# zena apache2 vhost for <%=
|
1
|
+
# zena apache2 vhost for <%= host %>
|
2
2
|
# automatically generated file
|
3
3
|
|
4
4
|
<VirtualHost *>
|
5
|
-
ServerName www.<%=
|
5
|
+
ServerName www.<%= host %>
|
6
6
|
|
7
7
|
RewriteEngine On
|
8
|
-
RewriteCond %{HTTP_HOST} ^www\.<%=
|
9
|
-
RewriteRule ^(.*)$ http://<%=
|
8
|
+
RewriteCond %{HTTP_HOST} ^www\.<%= host %>$ [NC]
|
9
|
+
RewriteRule ^(.*)$ http://<%= host %>$1 [R=301,L]
|
10
10
|
</VirtualHost>
|
data/lib/zena/foxy_parser.rb
CHANGED
@@ -1,83 +1,6 @@
|
|
1
|
-
require '
|
1
|
+
require 'zena/loader/yaml_loader'
|
2
2
|
|
3
3
|
module Zena
|
4
|
-
# mass yaml loader for ActiveRecord (a single file can contain different classes)
|
5
|
-
module Loader
|
6
|
-
class YamlLoader < ActiveRecord::Base
|
7
|
-
class << self
|
8
|
-
def set_table(tbl)
|
9
|
-
set_table_name tbl
|
10
|
-
reset_column_information
|
11
|
-
end
|
12
|
-
|
13
|
-
def create_or_update(opts)
|
14
|
-
h = {}
|
15
|
-
opts.each_pair do |k,v|
|
16
|
-
if :type == k
|
17
|
-
h['_type_'] = v
|
18
|
-
else
|
19
|
-
h[k.to_s] = v
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
if h['id'] && obj = find_by_id(h['id'])
|
24
|
-
res = []
|
25
|
-
h.each do |k,v|
|
26
|
-
res << "`#{k}` = #{v ? v.inspect : 'NULL'}"
|
27
|
-
end
|
28
|
-
connection.execute "UPDATE #{table_name} SET #{res.join(', ')} WHERE id = #{h['id']}"
|
29
|
-
else
|
30
|
-
keys = []
|
31
|
-
values = []
|
32
|
-
h.each do |k,v|
|
33
|
-
keys << "`#{k}`"
|
34
|
-
values << (v ? v.inspect : 'NULL')
|
35
|
-
end
|
36
|
-
connection.execute "INSERT INTO #{table_name} (#{keys.join(', ')}) VALUES (#{values.join(', ')})"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def site_id=(i)
|
42
|
-
self[:site_id] = i
|
43
|
-
end
|
44
|
-
|
45
|
-
def _type_=(t)
|
46
|
-
self.type = t
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# Is this used ?
|
51
|
-
def self.load_file(filepath)
|
52
|
-
raise Exception.new("Invalid filepath for loader (#{filepath})") unless ((filepath =~ /.+\.yml$/) && File.exist?(filepath))
|
53
|
-
base_objects = {}
|
54
|
-
YAML::load_documents( File.open( filepath ) ) do |doc|
|
55
|
-
doc.each do |elem|
|
56
|
-
list = elem[1].map do |l|
|
57
|
-
hash = {}
|
58
|
-
l.each_pair do |k, v|
|
59
|
-
hash[k.to_sym] = v
|
60
|
-
end
|
61
|
-
hash
|
62
|
-
end
|
63
|
-
tbl = elem[0].to_sym
|
64
|
-
if base_objects[tbl]
|
65
|
-
base_objects[tbl] += list
|
66
|
-
else
|
67
|
-
base_objects[tbl] = list
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
base_objects.each_pair do |tbl, list|
|
73
|
-
YamlLoader.set_table(tbl.to_s)
|
74
|
-
list.each do |record|
|
75
|
-
YamlLoader.create_or_update(record)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
4
|
class FoxyParser
|
82
5
|
attr_reader :column_names, :table, :elements, :site, :name, :defaults
|
83
6
|
@@parser_for_table = {}
|
@@ -122,6 +45,32 @@ module Zena
|
|
122
45
|
def parses(table_name)
|
123
46
|
@@parser_for_table[table_name.to_s] = self
|
124
47
|
end
|
48
|
+
|
49
|
+
def dump_fixtures(index_tables)
|
50
|
+
index_tables.each do |table_name|
|
51
|
+
klass = Class.new(ActiveRecord::Base)
|
52
|
+
klass.set_table_name table_name
|
53
|
+
|
54
|
+
File.open(path_for_table(table_name), 'wb') do |file|
|
55
|
+
file.puts records_to_yaml(klass.all)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def records_to_yaml(records)
|
61
|
+
Hash[*records.map do |rec|
|
62
|
+
id = Fixtures.identify(rec.attributes.values * '_')
|
63
|
+
[id, rec.attributes]
|
64
|
+
end.flatten].to_yaml
|
65
|
+
end
|
66
|
+
|
67
|
+
def path_for_table(table)
|
68
|
+
"#{RAILS_ROOT}/test/fixtures/#{table}.yml"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def path_for_table(table)
|
73
|
+
self.class.path_for_table(table)
|
125
74
|
end
|
126
75
|
|
127
76
|
def initialize(table_name, opts={})
|
@@ -130,13 +79,11 @@ module Zena
|
|
130
79
|
@elements = {}
|
131
80
|
@options = opts
|
132
81
|
end
|
133
|
-
|
134
|
-
def sites
|
135
|
-
@sites ||= Dir["#{Zena::ROOT}/test/sites/*", "#{RAILS_ROOT}/bricks/**/sites/*"].map {|s| File.directory?(s) ? File.basename(s) : nil}.compact.uniq
|
136
|
-
end
|
137
82
|
|
138
83
|
def run
|
139
|
-
|
84
|
+
base = "#{Zena::ROOT}/test/sites"
|
85
|
+
Dir.foreach(base) do |site|
|
86
|
+
next if (site =~ /^\./) || !File.directory?(File.join(base, site))
|
140
87
|
@site = site
|
141
88
|
parse_fixtures
|
142
89
|
after_parse
|
@@ -152,9 +99,8 @@ module Zena
|
|
152
99
|
def get_content(site, table)
|
153
100
|
fixtures_paths = {'zena' => File.join("#{Zena::ROOT}/test/sites",site,"#{table}.yml")}
|
154
101
|
fixtures_bricks = ['zena']
|
155
|
-
Bricks.foreach_brick do |
|
156
|
-
brick_name =
|
157
|
-
fixtures_paths[brick_name] = File.join(brick_path,'test','sites',site,"#{table}.yml")
|
102
|
+
Bricks.foreach_brick do |brick_name|
|
103
|
+
fixtures_paths[brick_name] = File.join(Bricks.fixtures_path_for(brick_name), site, "#{table}.yml")
|
158
104
|
fixtures_bricks << brick_name
|
159
105
|
end
|
160
106
|
|
@@ -171,47 +117,33 @@ module Zena
|
|
171
117
|
end
|
172
118
|
|
173
119
|
return nil if content == []
|
174
|
-
content.join("\n") + "\n"
|
120
|
+
all_content = content.join("\n") + "\n"
|
121
|
+
|
122
|
+
::ERB.new(content.join("\n") + "\n", nil, '-').result
|
175
123
|
end
|
176
124
|
|
177
125
|
def parse_fixtures
|
178
126
|
return unless content = get_content(site, table)
|
179
127
|
|
180
|
-
#
|
181
|
-
@elements[site] = elements = YAML::load(content
|
128
|
+
# Load hash to set/get defaults and transform special values
|
129
|
+
@elements[site] = elements = YAML::load(content)
|
182
130
|
|
183
131
|
# set defaults
|
184
132
|
set_defaults
|
185
133
|
|
186
|
-
|
187
|
-
name = nil
|
188
|
-
|
134
|
+
between_obj = true
|
189
135
|
# Parse all content
|
190
136
|
content.split("\n").each do |l|
|
191
137
|
if l =~ /^([\w\.]+):/
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
end
|
202
|
-
end
|
203
|
-
definitions = []
|
204
|
-
else
|
205
|
-
definitions << l
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
if name
|
210
|
-
parse_definitions(name, definitions)
|
211
|
-
else
|
212
|
-
# purge text in between fixtures
|
213
|
-
definitions.each do |d|
|
214
|
-
out d
|
138
|
+
# new object
|
139
|
+
write_definitions($1, elements[$1])
|
140
|
+
between_obj = false
|
141
|
+
elsif l == ''
|
142
|
+
# end of object
|
143
|
+
between_obj = true
|
144
|
+
out l
|
145
|
+
elsif between_obj
|
146
|
+
out l
|
215
147
|
end
|
216
148
|
end
|
217
149
|
|
@@ -230,46 +162,39 @@ module Zena
|
|
230
162
|
|
231
163
|
@defaults['site_id'] = Zena::FoxyParser::multi_site_id(site) if column_names.include?('site_id')
|
232
164
|
|
233
|
-
elements.each do |
|
234
|
-
unless
|
235
|
-
|
165
|
+
elements.each do |name, attributes|
|
166
|
+
unless attributes
|
167
|
+
attributes = elements[name] = {}
|
236
168
|
end
|
237
|
-
|
169
|
+
attributes[:header_keys] ||= []
|
238
170
|
column_names.each do |k|
|
239
171
|
if k =~ /^(\w+)_id/
|
240
172
|
k = $1
|
241
173
|
end
|
242
|
-
if !
|
243
|
-
|
244
|
-
|
174
|
+
if !attributes.has_key?(k) && @defaults.has_key?(k)
|
175
|
+
attributes[:header_keys] << k # so we know what to write out
|
176
|
+
attributes[k] = @defaults[k]
|
245
177
|
end
|
246
178
|
end
|
247
|
-
|
248
|
-
|
249
|
-
|
179
|
+
|
180
|
+
if column_names.include?('name') && !attributes.has_key?('name')
|
181
|
+
attributes['name'] = name
|
182
|
+
attributes[:header_keys] << 'name'
|
250
183
|
end
|
251
184
|
end
|
252
185
|
end
|
253
186
|
|
254
|
-
def
|
187
|
+
def write_definitions(name, definitions)
|
255
188
|
return if name == 'DEFAULTS'
|
256
189
|
@name = name
|
190
|
+
@inserted_keys = []
|
257
191
|
|
258
|
-
header_keys = elements[name][:header_keys]
|
259
192
|
insert_headers
|
260
193
|
|
261
|
-
definitions.each do |
|
262
|
-
if
|
263
|
-
|
264
|
-
v = nil if v =~ /^\s*$/
|
265
|
-
if !header_keys.include?(k)
|
266
|
-
out_pair(k,v)
|
267
|
-
end
|
268
|
-
else
|
269
|
-
out l
|
270
|
-
end
|
194
|
+
definitions.each do |key, value|
|
195
|
+
next if key == :header_keys
|
196
|
+
out_pair(key, value)
|
271
197
|
end
|
272
|
-
|
273
198
|
end
|
274
199
|
|
275
200
|
def insert_headers
|
@@ -309,7 +234,7 @@ module Zena
|
|
309
234
|
def out(res)
|
310
235
|
unless @file
|
311
236
|
# only open the file if we have things to write in it
|
312
|
-
@file = File.open(
|
237
|
+
@file = File.open(path_for_table(table), 'wb')
|
313
238
|
@file.puts "# Fixtures generated from content of 'sites' folder by #{self.class} (rake zena:build_fixtures)"
|
314
239
|
@file.puts ""
|
315
240
|
@file.puts self.class.prelude
|
@@ -317,24 +242,42 @@ module Zena
|
|
317
242
|
@file.puts res
|
318
243
|
end
|
319
244
|
|
320
|
-
def out_pair(
|
321
|
-
return if
|
322
|
-
return if
|
323
|
-
|
245
|
+
def out_pair(key, value)
|
246
|
+
return if @inserted_keys.include?(key)
|
247
|
+
return if ignore_key?(key)
|
248
|
+
return if value.nil?
|
249
|
+
@inserted_keys << key
|
250
|
+
res = sprintf(' %-16s ', "#{key}:")
|
251
|
+
if value.kind_of?(String)
|
252
|
+
value.gsub!(%r{\[FILE:(.*?)\]}) do
|
253
|
+
File.read("#{Zena::ROOT}/#{$1}")
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
if value =~ /\n/
|
258
|
+
res += "|\n #{value.gsub("\n", "\n ")}"
|
259
|
+
elsif value.to_s =~ /[\{\[:]/
|
260
|
+
res += value.inspect.gsub('\\#{', '#{')
|
261
|
+
else
|
262
|
+
res += value.to_s
|
263
|
+
end
|
264
|
+
out res
|
324
265
|
end
|
325
266
|
|
326
267
|
def ignore_key?(k)
|
327
|
-
|
268
|
+
false
|
328
269
|
end
|
329
270
|
|
330
271
|
def insert_id(key)
|
331
272
|
return unless column_names.include?("#{key}_id")
|
332
|
-
|
273
|
+
@inserted_keys << key
|
274
|
+
out_pair("#{key}_id", FoxyParser.id(site, elements[@name][key]))
|
333
275
|
end
|
334
276
|
|
335
277
|
def insert_multi_site_id(key)
|
336
278
|
return unless column_names.include?("#{key}_id")
|
337
|
-
|
279
|
+
@inserted_keys << key
|
280
|
+
out_pair("#{key}_id", FoxyParser.multi_site_id(elements[@name][key]))
|
338
281
|
end
|
339
282
|
|
340
283
|
def id_keys
|
@@ -344,6 +287,20 @@ module Zena
|
|
344
287
|
def multi_site_id_keys
|
345
288
|
['user']
|
346
289
|
end
|
290
|
+
|
291
|
+
def make_prop(prop)
|
292
|
+
prop.each do |key, value|
|
293
|
+
if key == 'cached_role_ids'
|
294
|
+
prop[key] = value.split(',').map {|role_name| FoxyParser.id(site, role_name.strip)}
|
295
|
+
elsif value.kind_of?(String)
|
296
|
+
value.gsub!(%r{\[FILE:(.*?)\]}) do
|
297
|
+
File.read("#{Zena::ROOT}/#{$1}")
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
Node.encode_properties(Property::Properties[prop])
|
303
|
+
end
|
347
304
|
end
|
348
305
|
|
349
306
|
class FoxyUsersParser < FoxyParser
|
@@ -368,39 +325,58 @@ module Zena
|
|
368
325
|
end
|
369
326
|
|
370
327
|
class FoxyNodesParser < FoxyParser
|
371
|
-
attr_reader :
|
328
|
+
attr_reader :roles, :versions, :zip_counter
|
372
329
|
|
373
330
|
def initialize(table_name, opts = {})
|
374
331
|
super
|
375
|
-
@
|
332
|
+
@roles = opts[:roles].all_elements
|
376
333
|
@versions = opts[:versions].versions
|
377
334
|
@zip_counter = {}
|
378
335
|
@inline_versions = {} # sub file generated by 'v_...' attributes
|
379
|
-
@
|
336
|
+
@inline_templates= {}
|
380
337
|
end
|
381
338
|
|
382
339
|
private
|
383
340
|
def set_defaults
|
384
341
|
super
|
385
|
-
# set publish_from, ...
|
386
342
|
|
387
343
|
elements.each do |name, node|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
344
|
+
has_template = node['template']
|
345
|
+
|
346
|
+
if template = node.delete('template')
|
347
|
+
add_template(template, name)
|
348
|
+
end
|
349
|
+
|
350
|
+
if !node.has_key?('node_name')
|
351
|
+
node['node_name'] = name
|
352
|
+
node[:header_keys] << 'node_name'
|
353
|
+
end
|
354
|
+
|
355
|
+
node['node_name'] = node['node_name'].url_name
|
356
|
+
|
357
|
+
if node.keys.include?('title') || node.keys.detect {|k| k =~ /^v_/}
|
358
|
+
# need version defaults
|
359
|
+
@defaults.each do |key,value|
|
360
|
+
next unless key =~ /^v_/
|
361
|
+
node[key] = value
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
# FIXME: better filtering, in a hurry right now
|
366
|
+
prop_field = nil
|
367
|
+
%w{text title summary comment}.each do |k|
|
368
|
+
if value = node.delete(k)
|
369
|
+
unless prop_field
|
370
|
+
prop_field = node['v_prop'] ||= {}
|
394
371
|
end
|
395
|
-
|
372
|
+
prop_field[k] = value
|
396
373
|
end
|
397
374
|
end
|
398
375
|
|
399
|
-
node[:header_keys] +=
|
400
|
-
'rgroup_id', 'wgroup_id', 'dgroup_id', 'skin', 'fullpath', 'basepath']
|
376
|
+
node[:header_keys] += %w{type vclass_id kpath zip publish_from vhash inherit rgroup_id wgroup_id dgroup_id skin_id fullpath basepath}
|
401
377
|
|
402
378
|
klass = node['class']
|
403
|
-
if
|
379
|
+
if roles[site] && vc = roles[site][klass]
|
404
380
|
node['vclass_id'] = Zena::FoxyParser::id(site,klass)
|
405
381
|
node['type'] = eval(vc['real_class'])
|
406
382
|
node['kpath'] = vc['kpath']
|
@@ -431,24 +407,63 @@ module Zena
|
|
431
407
|
else
|
432
408
|
# build vhash
|
433
409
|
records = [
|
434
|
-
{ 'id'
|
435
|
-
'publish_from' => node['v_publish_from'],
|
436
|
-
'
|
410
|
+
{ 'id' => Zena::FoxyParser::id(site, "#{name}_#{node['v_lang'] || node['ref_lang']}"),
|
411
|
+
'publish_from' => node['v_publish_from'],
|
412
|
+
'status' => Zena::Status[node['v_status'].to_sym],
|
413
|
+
'lang' => node['v_lang'] || node['ref_lang']
|
437
414
|
}
|
438
415
|
]
|
439
416
|
end
|
440
417
|
|
441
|
-
cached = Zena::
|
418
|
+
cached = Zena::Use::VersionHash.cached_values_from_records(records)
|
419
|
+
# TODO: build index...
|
442
420
|
node['publish_from'] = cached[:publish_from]
|
443
|
-
node['vhash'] =
|
421
|
+
node['vhash'] = cached[:vhash].to_json
|
444
422
|
|
445
423
|
node['inherit'] = node['inherit'] ? 'yes' : 'no'
|
446
424
|
end
|
447
425
|
|
426
|
+
build_inherited_fields
|
448
427
|
|
428
|
+
# build fullpath
|
429
|
+
elements.each do |k, node|
|
430
|
+
make_paths(node, k)
|
431
|
+
end
|
432
|
+
end
|
449
433
|
|
450
|
-
|
434
|
+
def make_paths(node, name)
|
435
|
+
if !node['fullpath']
|
436
|
+
if node['parent'] && parent = elements[node['parent']]
|
437
|
+
parent_fullpath = make_paths(parent, node['parent'])
|
438
|
+
# Unquote content if it was an empty quoted string.
|
439
|
+
parent_fullpath = '' if parent_fullpath == "''"
|
440
|
+
node['fullpath'] = (parent_fullpath.split('/') + [node['node_name'] || name]).join('/')
|
441
|
+
klass = if roles[site] && vc = roles[site][node['class']]
|
442
|
+
vc['real_class']
|
443
|
+
else
|
444
|
+
node['class']
|
445
|
+
end
|
446
|
+
begin
|
447
|
+
eval(klass).kpath =~ /^#{Page.kpath}/
|
448
|
+
if node['custom_base']
|
449
|
+
node['basepath'] = node['fullpath']
|
450
|
+
else
|
451
|
+
node['basepath'] = parent['basepath']
|
452
|
+
end
|
453
|
+
rescue NameError
|
454
|
+
raise NameError.new("[#{site} #{table} #{name}] could not find class #{klass}.")
|
455
|
+
end
|
456
|
+
else
|
457
|
+
# If we do not quote the content, FoxyParser will insert NULL.
|
458
|
+
node['basepath'] = "''"
|
459
|
+
node['fullpath'] = "''"
|
460
|
+
end
|
461
|
+
end
|
462
|
+
node['fullpath']
|
463
|
+
end
|
451
464
|
|
465
|
+
# set project, section, read/write/publish groups
|
466
|
+
def build_inherited_fields
|
452
467
|
[['project',"nil", "parent['type'].kpath =~ /^\#{Project.kpath}/", "current['parent']"],
|
453
468
|
['section',"nil", "parent['type'].kpath =~ /^\#{Section.kpath}/", "current['parent']"],
|
454
469
|
['rgroup' ,"node['inherit'] == 'no'", "parent['inherit'] == 'no'", "parent['rgroup']"],
|
@@ -498,38 +513,6 @@ module Zena
|
|
498
513
|
end
|
499
514
|
end
|
500
515
|
end
|
501
|
-
|
502
|
-
# build fullpath
|
503
|
-
elements.each do |k, node|
|
504
|
-
make_paths(node, k)
|
505
|
-
end
|
506
|
-
end
|
507
|
-
|
508
|
-
def make_paths(node, name)
|
509
|
-
if !node['fullpath']
|
510
|
-
if node['parent'] && parent = elements[node['parent']]
|
511
|
-
node['fullpath'] = (make_paths(parent, node['parent']).split('/') + [node['name'] || name]).join('/')
|
512
|
-
klass = if virtual_classes[site] && vc = virtual_classes[site][node['class']]
|
513
|
-
vc['real_class']
|
514
|
-
else
|
515
|
-
node['class']
|
516
|
-
end
|
517
|
-
begin
|
518
|
-
eval(klass).kpath =~ /^#{Page.kpath}/
|
519
|
-
if node['custom_base']
|
520
|
-
node['basepath'] = node['fullpath']
|
521
|
-
else
|
522
|
-
node['basepath'] = parent['basepath']
|
523
|
-
end
|
524
|
-
rescue NameError
|
525
|
-
raise NameError.new("[#{site} #{table} #{name}] could not find class #{klass}.")
|
526
|
-
end
|
527
|
-
else
|
528
|
-
node['basepath'] = ""
|
529
|
-
node['fullpath'] = ""
|
530
|
-
end
|
531
|
-
end
|
532
|
-
node['fullpath']
|
533
516
|
end
|
534
517
|
|
535
518
|
def insert_headers
|
@@ -544,6 +527,7 @@ module Zena
|
|
544
527
|
@zip_counter[site] += 1
|
545
528
|
node['zip'] = @zip_counter[site]
|
546
529
|
end
|
530
|
+
|
547
531
|
super
|
548
532
|
end
|
549
533
|
|
@@ -552,120 +536,85 @@ module Zena
|
|
552
536
|
super || ['class'].include?(k)
|
553
537
|
end
|
554
538
|
|
555
|
-
def out_pair(
|
556
|
-
if
|
539
|
+
def out_pair(key, value)
|
540
|
+
if key.to_s =~ /^v_(.+)/
|
557
541
|
# add key to default version
|
558
|
-
|
559
|
-
|
560
|
-
# add key to content
|
561
|
-
content_key($1,v)
|
542
|
+
@inserted_keys << key
|
543
|
+
version_key($1, value)
|
562
544
|
else
|
563
545
|
super
|
564
546
|
end
|
565
547
|
end
|
566
548
|
|
549
|
+
def add_template(template, name)
|
550
|
+
@inline_templates[site] ||= {}
|
551
|
+
@inline_templates[site][name] = template
|
552
|
+
end
|
553
|
+
|
567
554
|
def version_key(key,value)
|
568
555
|
|
569
556
|
@inline_versions[site] ||= {}
|
570
557
|
unless @inline_versions[site][name]
|
558
|
+
# New inline version. Set defaults.
|
571
559
|
@inline_versions[site][name] = version = {}
|
572
560
|
version[:node] = node = elements[name]
|
573
|
-
version['node_id']
|
574
|
-
|
561
|
+
version['node_id'] = Zena::FoxyParser::id(site, name)
|
562
|
+
version['publish_from'] = elements[name]['publish_from']
|
563
|
+
version['status'] = Zena::Status[:pub]
|
564
|
+
version['lang'] = elements[name]['ref_lang']
|
565
|
+
version['site_id'] = Zena::FoxyParser::multi_site_id(site)
|
566
|
+
version['number'] = 1
|
567
|
+
|
568
|
+
# Use DEFAULTS
|
575
569
|
@defaults.each do |k,v|
|
576
|
-
if k
|
570
|
+
if k == 'v_status'
|
571
|
+
version['status'] = Zena::Status[v.to_sym]
|
572
|
+
elsif k =~ /^v_(.+)/
|
577
573
|
version[$1] = v
|
578
574
|
end
|
579
575
|
end
|
580
|
-
version['publish_from'] ||= elements[name]['publish_from']
|
581
|
-
version['status'] ||= Zena::Status[:pub]
|
582
|
-
version['lang'] ||= elements[name]['ref_lang']
|
583
|
-
version['site_id'] = Zena::FoxyParser::multi_site_id(site)
|
584
|
-
version['number'] ||= 1
|
585
|
-
%W{title summary text comment}.each do |txt_field|
|
586
|
-
version[txt_field] ||= ''
|
587
|
-
end
|
588
|
-
|
589
|
-
if klass = elements[name]['type']
|
590
|
-
if klass = klass.version_class.content_class
|
591
|
-
if klass == ContactContent && !node['c_first_name']
|
592
|
-
first_name, user_name = node['v_title'].split
|
593
|
-
content_key('first_name', first_name)
|
594
|
-
content_key('name', user_name) if user_name
|
595
|
-
end
|
596
|
-
end
|
597
|
-
end
|
598
|
-
|
599
576
|
end
|
577
|
+
|
600
578
|
if key == 'status'
|
601
|
-
value = Zena::Status[
|
579
|
+
value = Zena::Status[value.to_sym]
|
602
580
|
end
|
603
|
-
@inline_versions[site][name][key] = value
|
604
|
-
end
|
605
581
|
|
606
|
-
|
607
|
-
@contents[site] ||= {}
|
608
|
-
klass = elements[name]['type']
|
609
|
-
klass = klass.version_class.content_class
|
610
|
-
@contents[site][klass] ||= {}
|
611
|
-
unless @contents[site][klass][name]
|
612
|
-
@contents[site][klass][name] = content = {}
|
613
|
-
content[:node] = elements[name]
|
614
|
-
content['site_id'] = Zena::FoxyParser::multi_site_id(site)
|
615
|
-
end
|
616
|
-
@contents[site][klass][name][key] = value
|
582
|
+
@inline_versions[site][name][key] = value
|
617
583
|
end
|
618
584
|
|
619
585
|
def after_parse
|
620
586
|
super
|
621
587
|
write_versions
|
622
|
-
write_contents
|
623
588
|
end
|
624
589
|
|
625
590
|
def write_versions
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
versions
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
end
|
643
|
-
end
|
644
|
-
end
|
645
|
-
end
|
591
|
+
#
|
592
|
+
node_file = @file
|
593
|
+
File.open(path_for_table('versions'), 'ab') do |file|
|
594
|
+
@file = file
|
595
|
+
|
596
|
+
if versions = @inline_versions[site]
|
597
|
+
out "\n# ========== #{site} (generated from 'nodes.yml') ==========="
|
598
|
+
out ""
|
599
|
+
versions.each do |name, version|
|
600
|
+
node = version.delete(:node)
|
601
|
+
version['id'] = Zena::FoxyParser::id(site, "#{name}_#{version['lang']}")
|
602
|
+
version['lang'] ||= node['ref_lang']
|
603
|
+
version['user_id'] ||= Zena::FoxyParser::multi_site_id(node['user'])
|
604
|
+
if prop = version.delete('prop')
|
605
|
+
version['properties'] = make_prop(prop) unless prop.blank?
|
606
|
+
end
|
646
607
|
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
contents.each do |name, content|
|
654
|
-
file.puts ""
|
655
|
-
node = content.delete(:node)
|
656
|
-
content['id'] = Zena::FoxyParser::id(site, "#{name}_#{node['v_lang'] || node['ref_lang']}")
|
657
|
-
content['version_id'] = content['id'] if columns.include?('version_id')
|
658
|
-
content['node_id'] = node['id'] if columns.include?('node_id')
|
659
|
-
if klass.kind_of?(ContactContent)
|
660
|
-
content['address'] ||= ''
|
661
|
-
end
|
662
|
-
file.puts "#{site}_#{name}:"
|
663
|
-
content.each do |k,v|
|
664
|
-
file.puts sprintf(' %-16s %s', "#{k}:", v.to_s =~ /^\s*$/ ? v.inspect : v.to_s)
|
608
|
+
out ""
|
609
|
+
out "#{site}_#{name}:"
|
610
|
+
@inserted_keys = []
|
611
|
+
version.each do |k,v|
|
612
|
+
out_pair(k, v)
|
613
|
+
end
|
665
614
|
end
|
666
615
|
end
|
667
616
|
end
|
668
|
-
|
617
|
+
@file = node_file
|
669
618
|
end
|
670
619
|
end
|
671
620
|
|
@@ -675,41 +624,110 @@ module Zena
|
|
675
624
|
def initialize(table_name, opts = {})
|
676
625
|
super
|
677
626
|
@versions = {}
|
627
|
+
@inline_attachments = {}
|
678
628
|
end
|
679
629
|
|
680
630
|
private
|
681
631
|
def set_defaults
|
682
632
|
super
|
683
633
|
site_versions = @versions[site] = {}
|
684
|
-
raw_nodes = YAML::load(get_content(site, 'nodes')
|
634
|
+
raw_nodes = YAML::load(get_content(site, 'nodes'))
|
685
635
|
|
686
|
-
elements.each do |
|
687
|
-
|
688
|
-
v[:header_keys] << 'status'
|
689
|
-
v['status'] = Zena::Status[v['status'].to_sym]
|
636
|
+
elements.each do |name, version|
|
637
|
+
version[:header_keys] += %w{number lang status}
|
690
638
|
|
691
|
-
|
692
|
-
v['title'] ||= raw_nodes[v['node']]['name'] || v['node']
|
639
|
+
version['status'] = Zena::Status[version['status'].to_sym]
|
693
640
|
|
694
|
-
|
695
|
-
|
641
|
+
version['prop'] ||= {}
|
642
|
+
version['prop']['title'] ||= raw_nodes[version['node']]['node_name'] || version['node']
|
643
|
+
|
644
|
+
if prop = version.delete('prop')
|
645
|
+
version['properties'] = make_prop(prop) unless prop.blank?
|
646
|
+
end
|
647
|
+
|
648
|
+
if filename = version.delete('filename')
|
649
|
+
@inline_attachments[site] ||= {}
|
650
|
+
@inline_attachments[site][name] = {
|
651
|
+
'id' => FoxyParser::id(site, name),
|
652
|
+
'filename' => filename,
|
653
|
+
'user_id' => FoxyParser::id(site, version['user']),
|
654
|
+
}
|
655
|
+
version['attachment'] = name
|
656
|
+
end
|
657
|
+
|
658
|
+
node_versions = site_versions[version['node']] ||= []
|
659
|
+
node_versions << version
|
660
|
+
end
|
661
|
+
end
|
662
|
+
|
663
|
+
def after_parse
|
664
|
+
super
|
665
|
+
write_attachments
|
666
|
+
end
|
667
|
+
|
668
|
+
def write_attachments
|
669
|
+
#
|
670
|
+
node_file = @file
|
671
|
+
File.open(path_for_table('attachments'), 'ab') do |file|
|
672
|
+
@file = file
|
673
|
+
|
674
|
+
if attachments = @inline_attachments[site]
|
675
|
+
out "\n# ========== #{site} (generated from 'versions.yml') ==========="
|
676
|
+
out ""
|
677
|
+
attachments.each do |name, attachment|
|
678
|
+
out ""
|
679
|
+
out "#{site}_#{name}:"
|
680
|
+
@inserted_keys = []
|
681
|
+
attachment.each do |k,v|
|
682
|
+
out_pair(k, v)
|
683
|
+
end
|
684
|
+
end
|
685
|
+
end
|
686
|
+
end
|
687
|
+
@file = node_file
|
688
|
+
end
|
689
|
+
end
|
690
|
+
|
691
|
+
class FoxyAttachmentsParser < FoxyParser
|
692
|
+
|
693
|
+
def initialize(table, opts={})
|
694
|
+
super
|
695
|
+
end
|
696
|
+
|
697
|
+
private
|
698
|
+
def set_defaults
|
699
|
+
super
|
700
|
+
raw_versions = YAML::load(get_content(site, 'versions'))
|
701
|
+
elements.each do |k, attachment|
|
702
|
+
version = attachment.delete('version')
|
703
|
+
attachment['user'] = raw_versions[version]['user']
|
696
704
|
end
|
697
705
|
end
|
706
|
+
|
698
707
|
end
|
699
708
|
|
700
709
|
class FoxySitesParser < FoxyParser
|
701
710
|
private
|
711
|
+
def set_defaults
|
712
|
+
super
|
713
|
+
elements.each do |name, site|
|
714
|
+
if prop = site.delete('prop')
|
715
|
+
site['properties'] = make_prop(prop) unless prop.blank?
|
716
|
+
end
|
717
|
+
end
|
718
|
+
end
|
719
|
+
|
702
720
|
def multi_site_id_keys
|
703
721
|
super + ['su', 'anon']
|
704
722
|
end
|
705
723
|
end
|
706
724
|
|
707
725
|
class FoxyRelationsParser < FoxyParser
|
708
|
-
attr_reader :
|
726
|
+
attr_reader :roles
|
709
727
|
|
710
728
|
def initialize(table_name, opts={})
|
711
729
|
super
|
712
|
-
@
|
730
|
+
@roles = opts[:roles].all_elements
|
713
731
|
end
|
714
732
|
|
715
733
|
private
|
@@ -729,7 +747,7 @@ module Zena
|
|
729
747
|
end
|
730
748
|
|
731
749
|
def get_kpath(klass)
|
732
|
-
if vc =
|
750
|
+
if vc = roles[site][klass]
|
733
751
|
vc['kpath']
|
734
752
|
else
|
735
753
|
eval(klass).kpath
|
@@ -764,9 +782,39 @@ module Zena
|
|
764
782
|
end
|
765
783
|
end
|
766
784
|
|
767
|
-
class
|
768
|
-
|
785
|
+
class FoxyColumnsParser < FoxyParser
|
786
|
+
private
|
787
|
+
def set_defaults
|
788
|
+
super
|
789
|
+
elements.each do |name, col|
|
790
|
+
if !col['role']
|
791
|
+
col['role'], col['name'] = name.split('_')
|
792
|
+
col[:header_keys] << :role
|
793
|
+
col[:header_keys] << :name
|
794
|
+
end
|
795
|
+
end
|
796
|
+
end
|
797
|
+
end
|
798
|
+
|
799
|
+
class FoxyNodesRolesParser < FoxyParser
|
800
|
+
private
|
801
|
+
def set_defaults
|
802
|
+
super
|
803
|
+
elements.each do |name, col|
|
804
|
+
if !col['role']
|
805
|
+
if name =~ /^(.*)_(.*)$/
|
806
|
+
col['node'], col['role'] = $1, $2
|
807
|
+
col[:header_keys] << :role
|
808
|
+
col[:header_keys] << :node
|
809
|
+
else
|
810
|
+
puts "Missing 'role' for nodes_roles '#{name}'"
|
811
|
+
end
|
812
|
+
end
|
813
|
+
end
|
814
|
+
end
|
815
|
+
end
|
769
816
|
|
817
|
+
class FoxyGroupsUsersParser < FoxyParser
|
770
818
|
private
|
771
819
|
def set_defaults
|
772
820
|
super
|
@@ -786,7 +834,9 @@ module Zena
|
|
786
834
|
end
|
787
835
|
|
788
836
|
def run
|
789
|
-
sites
|
837
|
+
Dir.foreach("#{Zena::ROOT}/test/sites") do |site|
|
838
|
+
next if site =~ /^\./ || !File.directory?(File.join("#{Zena::ROOT}/test/sites",site))
|
839
|
+
@inserted_keys = []
|
790
840
|
out ""
|
791
841
|
out "#{site}:"
|
792
842
|
out_pair('site_id', Zena::FoxyParser::multi_site_id(site))
|