iqvoc 3.2.3
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/Gemfile +69 -0
- data/Gemfile.lock +134 -0
- data/LICENSE +13 -0
- data/README.md +68 -0
- data/Rakefile +23 -0
- data/app/controllers/application_controller.rb +125 -0
- data/app/controllers/collections/hierarchical_controller.rb +44 -0
- data/app/controllers/collections_controller.rb +124 -0
- data/app/controllers/concepts/alphabetical_controller.rb +39 -0
- data/app/controllers/concepts/hierarchical_controller.rb +74 -0
- data/app/controllers/concepts/untranslated_controller.rb +38 -0
- data/app/controllers/concepts/versions_controller.rb +119 -0
- data/app/controllers/concepts_controller.rb +174 -0
- data/app/controllers/dashboard_controller.rb +43 -0
- data/app/controllers/pages_controller.rb +22 -0
- data/app/controllers/rdf_controller.rb +43 -0
- data/app/controllers/search_results_controller.rb +101 -0
- data/app/controllers/triple_store_syncs_controller.rb +45 -0
- data/app/controllers/user_sessions_controller.rb +48 -0
- data/app/controllers/users_controller.rb +81 -0
- data/app/helpers/application_helper.rb +60 -0
- data/app/helpers/concepts_helper.rb +86 -0
- data/app/helpers/dashboard_helper.rb +46 -0
- data/app/helpers/rdf_helper.rb +63 -0
- data/app/helpers/search_results_helper.rb +32 -0
- data/app/models/collection/base.rb +161 -0
- data/app/models/collection/member/base.rb +23 -0
- data/app/models/collection/member/collection.rb +33 -0
- data/app/models/collection/member/concept.rb +33 -0
- data/app/models/collection/unordered.rb +18 -0
- data/app/models/concept/base.rb +418 -0
- data/app/models/concept/relation/base.rb +95 -0
- data/app/models/concept/relation/reverse_relation_extension.rb +49 -0
- data/app/models/concept/relation/skos/base.rb +37 -0
- data/app/models/concept/relation/skos/broader/base.rb +41 -0
- data/app/models/concept/relation/skos/broader/mono.rb +28 -0
- data/app/models/concept/relation/skos/broader/poly.rb +23 -0
- data/app/models/concept/relation/skos/narrower/base.rb +37 -0
- data/app/models/concept/relation/skos/related.rb +21 -0
- data/app/models/concept/skos/base.rb +28 -0
- data/app/models/label/base.rb +98 -0
- data/app/models/label/skos/base.rb +27 -0
- data/app/models/labeling/base.rb +81 -0
- data/app/models/labeling/skos/alt_label.rb +21 -0
- data/app/models/labeling/skos/base.rb +99 -0
- data/app/models/labeling/skos/hidden_label.rb +25 -0
- data/app/models/labeling/skos/pref_label.rb +30 -0
- data/app/models/match/base.rb +57 -0
- data/app/models/match/skos/base.rb +23 -0
- data/app/models/match/skos/broad_match.rb +21 -0
- data/app/models/match/skos/close_match.rb +21 -0
- data/app/models/match/skos/exact_match.rb +21 -0
- data/app/models/match/skos/mapping_relation.rb +21 -0
- data/app/models/match/skos/narrow_match.rb +21 -0
- data/app/models/match/skos/related_match.rb +21 -0
- data/app/models/note/annotated/base.rb +29 -0
- data/app/models/note/base.rb +127 -0
- data/app/models/note/skos/base.rb +52 -0
- data/app/models/note/skos/change_note.rb +38 -0
- data/app/models/note/skos/definition.rb +33 -0
- data/app/models/note/skos/editorial_note.rb +21 -0
- data/app/models/note/skos/example.rb +21 -0
- data/app/models/note/skos/history_note.rb +21 -0
- data/app/models/note/skos/scope_note.rb +21 -0
- data/app/models/origin_mapping.rb +58 -0
- data/app/models/rdf_store.rb +96 -0
- data/app/models/search_extension.rb +58 -0
- data/app/models/user.rb +49 -0
- data/app/models/user_session.rb +23 -0
- data/app/views/collections/_collection.html.erb +10 -0
- data/app/views/collections/_form.html.erb +47 -0
- data/app/views/collections/edit.html.erb +11 -0
- data/app/views/collections/index.html.erb +12 -0
- data/app/views/collections/new.html.erb +7 -0
- data/app/views/collections/show.html.erb +53 -0
- data/app/views/collections/show.iqrdf +22 -0
- data/app/views/concepts/_base_data.html.erb +72 -0
- data/app/views/concepts/_close_match.html.erb +16 -0
- data/app/views/concepts/_show_head.html.erb +23 -0
- data/app/views/concepts/_visualization.html.erb +9 -0
- data/app/views/concepts/alphabetical/_pref_labeling.html.erb +6 -0
- data/app/views/concepts/alphabetical/index.html.erb +17 -0
- data/app/views/concepts/edit.html.erb +32 -0
- data/app/views/concepts/hierarchical/_treeview.html.erb +20 -0
- data/app/views/concepts/hierarchical/index.html.erb +5 -0
- data/app/views/concepts/index.iqrdf +24 -0
- data/app/views/concepts/new.html.erb +3 -0
- data/app/views/concepts/show_published.html.erb +16 -0
- data/app/views/concepts/show_unpublished.html.erb +43 -0
- data/app/views/concepts/untranslated/index.html.erb +23 -0
- data/app/views/dashboard/index.html.erb +47 -0
- data/app/views/errors/access_denied.html.erb +3 -0
- data/app/views/errors/multiple_choices.html.erb +11 -0
- data/app/views/errors/not_found.html.erb +8 -0
- data/app/views/kaminari/_page.html.erb +6 -0
- data/app/views/kaminari/_paginator.html.erb +15 -0
- data/app/views/layouts/_controls.html.erb +37 -0
- data/app/views/layouts/_header.html.erb +1 -0
- data/app/views/layouts/_navigation.html.erb +27 -0
- data/app/views/layouts/_sections.html.erb +8 -0
- data/app/views/layouts/application.html.erb +83 -0
- data/app/views/pages/about.html.erb +77 -0
- data/app/views/partials/_rdf_logo.html.erb +4 -0
- data/app/views/partials/collection/_member.html.erb +14 -0
- data/app/views/partials/collection_label/_search_result.html.erb +5 -0
- data/app/views/partials/concept/_edit_link_base.html.erb +4 -0
- data/app/views/partials/concept/_inline_base.html.erb +4 -0
- data/app/views/partials/concept/_new_link_base.html.erb +4 -0
- data/app/views/partials/concept/relation/_base.html.erb +8 -0
- data/app/views/partials/concept/relation/_edit_base.html.erb +15 -0
- data/app/views/partials/concept/relation/skos/_narrower.html.erb +12 -0
- data/app/views/partials/concept/relation/skos/broader/_mono.html.erb +28 -0
- data/app/views/partials/concept/relation/skos/broader/_poly.html.erb +14 -0
- data/app/views/partials/labeling/skos/_base.html.erb +17 -0
- data/app/views/partials/labeling/skos/_edit_base.html.erb +7 -0
- data/app/views/partials/labeling/skos/_search_result.html.erb +12 -0
- data/app/views/partials/match/_base.html.erb +13 -0
- data/app/views/partials/match/_edit_base.html.erb +6 -0
- data/app/views/partials/note/_base.html.erb +15 -0
- data/app/views/partials/note/_edit_base.html.erb +28 -0
- data/app/views/partials/note/_note.html.erb +14 -0
- data/app/views/partials/note/_search_result.html.erb +8 -0
- data/app/views/partials/note/skos/_edit_change_note.html.erb +47 -0
- data/app/views/partials/note/skos/definition/_search_result.html.erb +8 -0
- data/app/views/rdf/show_concept.iqrdf +5 -0
- data/app/views/search_results/_head_contents.html.erb +4 -0
- data/app/views/search_results/_rdf_links.html.erb +4 -0
- data/app/views/search_results/index.html.erb +92 -0
- data/app/views/search_results/index.iqrdf +33 -0
- data/app/views/triple_store_syncs/new.html.erb +7 -0
- data/app/views/user_sessions/new.html.erb +11 -0
- data/app/views/users/_form.html.erb +45 -0
- data/app/views/users/_user_preference.html.erb +12 -0
- data/app/views/users/edit.html.erb +14 -0
- data/app/views/users/index.html.erb +29 -0
- data/app/views/users/new.html.erb +13 -0
- data/config/application.rb +82 -0
- data/config/boot.rb +29 -0
- data/config/database.template.yml +43 -0
- data/config/database.yml +40 -0
- data/config/deploy/common.rb +79 -0
- data/config/deploy/ec2.rb +43 -0
- data/config/deploy/history.rb +29 -0
- data/config/deploy/innoq.rb +37 -0
- data/config/deploy.rb +72 -0
- data/config/engine.rb +25 -0
- data/config/environment.rb +21 -0
- data/config/environments/development.rb +74 -0
- data/config/environments/production.rb +65 -0
- data/config/environments/production.template.rb +65 -0
- data/config/environments/production_internal.rb +65 -0
- data/config/environments/test.rb +51 -0
- data/config/initializers/action_view.rb +23 -0
- data/config/initializers/active_record.rb +18 -0
- data/config/initializers/backtrace_silencers.rb +23 -0
- data/config/initializers/inflections.rb +26 -0
- data/config/initializers/iqvoc.rb +50 -0
- data/config/initializers/jdbc.rb +23 -0
- data/config/initializers/kaminari_config.rb +8 -0
- data/config/initializers/language.rb +6 -0
- data/config/initializers/mime_types.rb +24 -0
- data/config/initializers/secret_token.rb +29 -0
- data/config/initializers/secret_token.rb.template +29 -0
- data/config/initializers/session_store.rb +24 -0
- data/config/locales/activerecord.de.yml +135 -0
- data/config/locales/activerecord.en.yml +135 -0
- data/config/locales/authlogic.de.yml +38 -0
- data/config/locales/authlogic.en.yml +38 -0
- data/config/locales/de.yml +326 -0
- data/config/locales/defaults.de.yml +153 -0
- data/config/locales/en.yml +332 -0
- data/config/routes.rb +53 -0
- data/config/warble.rb +158 -0
- data/db/iqvoc_test.sqlite3 +0 -0
- data/db/migrate/20100927101502_create_schema.rb +174 -0
- data/db/migrate/20101125141218_add_collection_tables.rb +32 -0
- data/db/migrate/20101129161528_add_type_to_collections.rb +24 -0
- data/db/migrate/20101202094602_add_origin_to_collections.rb +25 -0
- data/db/migrate/20101202135420_rename_collection_contents_to_collection_members.rb +25 -0
- data/db/migrate/20101208103531_add_type_to_collection_contents.rb +27 -0
- data/db/migrate/20101210153916_add_indexes_to_collections.rb +25 -0
- data/db/migrate/20110204121244_create_collection_labels.rb +32 -0
- data/db/migrate/20110208084250_change_origin_lengths.rb +27 -0
- data/db/migrate/20110328124300_discard_collection_specifics.rb +27 -0
- data/db/migrate/20110408120357_remove_classifications_and_classifiers.rb +32 -0
- data/db/migrate/20110408120740_remove_xl_specfic_stuff.rb +39 -0
- data/db/migrate/20110420133640_change_value_in_notes.rb +8 -0
- data/db/migrate/20110427120534_add_published_at_to_labels.rb +9 -0
- data/db/migrate/20110510162719_use_mono_hierarchy_instead_of_poly_hierarchy.rb +13 -0
- data/db/migrate/20110512132624_extend_notes_value_field_length.rb +8 -0
- data/db/migrate/20110525103100_separate_note_annotation_predicates.rb +38 -0
- data/db/migrate/20110615134040_change_umt_note_annotations_to_dct.rb +9 -0
- data/db/schema.rb +127 -0
- data/db/seeds.rb +37 -0
- data/iqvoc.gemspec +27 -0
- data/lib/engine_tasks/assets.rake +49 -0
- data/lib/engine_tasks/db.rake +18 -0
- data/lib/engine_tasks/release.rake +118 -0
- data/lib/iqvoc/ability.rb +44 -0
- data/lib/iqvoc/data_helper.rb +27 -0
- data/lib/iqvoc/deep_cloning.rb +92 -0
- data/lib/iqvoc/rdf_helper.rb +67 -0
- data/lib/iqvoc/skos_importer.rb +144 -0
- data/lib/iqvoc/version.rb +19 -0
- data/lib/iqvoc/versioning.rb +151 -0
- data/lib/iqvoc.rb +228 -0
- data/lib/maker.rb +144 -0
- data/lib/ojdbc14.jar +0 -0
- data/lib/string.rb +23 -0
- data/lib/tasks/importer.rake +16 -0
- data/lib/tasks/jdbc.rake +24 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/images/iqvoc/add.png +0 -0
- data/public/images/iqvoc/arrow_down.gif +0 -0
- data/public/images/iqvoc/arrow_up.gif +0 -0
- data/public/images/iqvoc/footer.png +0 -0
- data/public/images/iqvoc/go_there.png +0 -0
- data/public/images/iqvoc/header.png +0 -0
- data/public/images/iqvoc/header_long.png +0 -0
- data/public/images/iqvoc/iqvoc.png +0 -0
- data/public/images/iqvoc/note_add.png +0 -0
- data/public/images/iqvoc/note_delete.png +0 -0
- data/public/images/iqvoc/note_edit.png +0 -0
- data/public/images/iqvoc/ok.png +0 -0
- data/public/images/iqvoc/rails.png +0 -0
- data/public/images/iqvoc/rdf_flyer.gif +0 -0
- data/public/images/iqvoc/red_arrow.png +0 -0
- data/public/images/iqvoc/remove.png +0 -0
- data/public/images/iqvoc/shadow.png +0 -0
- data/public/images/iqvoc/spinner.gif +0 -0
- data/public/images/iqvoc/tokenizer_delete.png +0 -0
- data/public/images/iqvoc/tokenizer_pencile.png +0 -0
- data/public/images/iqvoc/tokenizer_show.png +0 -0
- data/public/images/iqvoc/unfinished.png +0 -0
- data/public/javascripts/iqvoc/application.js +123 -0
- data/public/javascripts/iqvoc/entityselect.js +121 -0
- data/public/javascripts/iqvoc/excanvas.js +35 -0
- data/public/javascripts/iqvoc/iqvoc.js +118 -0
- data/public/javascripts/iqvoc/jit_rgraph.js +153 -0
- data/public/javascripts/iqvoc/jquery-1.6.2.min.js +18 -0
- data/public/javascripts/iqvoc/jquery-treeview/changelog.txt +29 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/async.html +44 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/bg.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/demo.js +43 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/images.html +56 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/index.html +340 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/large.html +559 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/prerendered.html +621 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/screen.css +24 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/simple.html +82 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/source.php +87 -0
- data/public/javascripts/iqvoc/jquery-treeview/demo/source.phps +87 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/ajax-loader.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/file.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/folder-closed.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/folder.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/minus.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/plus.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-black-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-black.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-default-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-default.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-famfamfam-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-famfamfam.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-gray-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-gray.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-red-line.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/images/treeview-red.gif +0 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.async.js +82 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.css +75 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.js +251 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.min.js +15 -0
- data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.pack.js +16 -0
- data/public/javascripts/iqvoc/jquery-treeview/lib/jquery.cookie.js +92 -0
- data/public/javascripts/iqvoc/jquery-treeview/lib/jquery.js +3363 -0
- data/public/javascripts/iqvoc/jquery-treeview/todo +8 -0
- data/public/javascripts/iqvoc/jquery-ui-1.8.13.custom.js +3229 -0
- data/public/javascripts/iqvoc/jquery-ui-1.8.13.custom.min.js +163 -0
- data/public/javascripts/iqvoc/jquery-ui.datepicker-de.js +22 -0
- data/public/javascripts/iqvoc/json2.js +480 -0
- data/public/javascripts/iqvoc/langselect.js +73 -0
- data/public/javascripts/iqvoc/rails.js +132 -0
- data/public/javascripts/iqvoc/storage.js +122 -0
- data/public/javascripts/iqvoc/visualization.js +321 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/iqvoc/blueprint/ie.css +35 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/cross.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/key.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/tick.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/readme.txt +32 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/buttons/screen.css +97 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/fancy-type/readme.txt +14 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/fancy-type/screen.css +71 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/doc.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/email.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/external.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/feed.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/im.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/pdf.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/visited.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/xls.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/readme.txt +18 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/screen.css +40 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/rtl/readme.txt +10 -0
- data/public/stylesheets/iqvoc/blueprint/plugins/rtl/screen.css +110 -0
- data/public/stylesheets/iqvoc/blueprint/print.css +29 -0
- data/public/stylesheets/iqvoc/blueprint/screen.css +258 -0
- data/public/stylesheets/iqvoc/blueprint/src/forms.css +65 -0
- data/public/stylesheets/iqvoc/blueprint/src/grid.css +280 -0
- data/public/stylesheets/iqvoc/blueprint/src/grid.png +0 -0
- data/public/stylesheets/iqvoc/blueprint/src/ie.css +76 -0
- data/public/stylesheets/iqvoc/blueprint/src/print.css +85 -0
- data/public/stylesheets/iqvoc/blueprint/src/reset.css +45 -0
- data/public/stylesheets/iqvoc/blueprint/src/typography.css +106 -0
- data/public/stylesheets/iqvoc/forms.css +71 -0
- data/public/stylesheets/iqvoc/images/back.png +0 -0
- data/public/stylesheets/iqvoc/images/branch.png +0 -0
- data/public/stylesheets/iqvoc/images/categ.png +0 -0
- data/public/stylesheets/iqvoc/images/categ_open.png +0 -0
- data/public/stylesheets/iqvoc/images/go_there.png +0 -0
- data/public/stylesheets/iqvoc/images/iqvoc.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_end.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_end_filled.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_mid.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_mid_filled.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_nothing.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_only.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_only_filled.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_top.png +0 -0
- data/public/stylesheets/iqvoc/images/leaf_top_filled.png +0 -0
- data/public/stylesheets/iqvoc/images/nothing.png +0 -0
- data/public/stylesheets/iqvoc/images/top_01.png +0 -0
- data/public/stylesheets/iqvoc/images/trunk.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_217bc0_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_469bdd_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_6da8d5_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_d8e7f3_256x240.png +0 -0
- data/public/stylesheets/iqvoc/images/ui-icons_f9bd01_256x240.png +0 -0
- data/public/stylesheets/iqvoc/iqvoc.css +477 -0
- data/public/stylesheets/iqvoc/jquery-ui-1.8.13.custom.css +415 -0
- data/public/stylesheets/iqvoc/widgets.css +81 -0
- data/test/factories.rb +74 -0
- data/test/integration/alphabetical_test.rb +53 -0
- data/test/integration/authentication_test.rb +41 -0
- data/test/integration/browse_concepts_and_labels_test.rb +61 -0
- data/test/integration/browse_static_pages_test.rb +29 -0
- data/test/integration/client_augmentation_test.rb +42 -0
- data/test/integration/client_edit_concept_test.rb +72 -0
- data/test/integration/collection_circularity_test.rb +110 -0
- data/test/integration/concept_test.rb +61 -0
- data/test/integration/edit_concepts_test.rb +40 -0
- data/test/integration/note_annotations_test.rb +86 -0
- data/test/integration/search_test.rb +205 -0
- data/test/integration/tree_test.rb +31 -0
- data/test/integration/untranslated_test.rb +60 -0
- data/test/integration_test_helper.rb +45 -0
- data/test/performance/browsing_test.rb +25 -0
- data/test/test_helper.rb +29 -0
- data/test/unit/concept_test.rb +93 -0
- data/test/unit/note_test.rb +32 -0
- data/test/unit/origin_mapping_test.rb +70 -0
- data/test/unit/skos_import_test.rb +100 -0
- metadata +522 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
class UseMonoHierarchyInsteadOfPolyHierarchy < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
ActiveRecord::Base.transaction do
|
4
|
+
Concept::Relation::Base.update_all("type = 'Concept::Relation::SKOS::Broader::Mono'", :type => 'Concept::Relation::SKOS::Broader::Poly')
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.down
|
9
|
+
ActiveRecord::Base.transaction do
|
10
|
+
Concept::Relation::Base.update_all("type = 'Concept::Relation::SKOS::Broader::Poly'", :type => 'Concept::Relation::SKOS::Broader::Mono')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class SeparateNoteAnnotationPredicates < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
rename_column :note_annotations, :identifier, :predicate
|
4
|
+
add_column :note_annotations, :namespace, :string, :limit => 50
|
5
|
+
|
6
|
+
total = Note::Annotated::Base.count
|
7
|
+
i = 0
|
8
|
+
|
9
|
+
puts "starting #{total} note annotation conversions..."
|
10
|
+
reset = "\r" + "\e[0K" # adapted from http://snippets.dzone.com/posts/show/3760
|
11
|
+
|
12
|
+
Note::Annotated::Base.find_each do |annotation|
|
13
|
+
print "#{reset}#{i += 1} / #{total}"
|
14
|
+
|
15
|
+
old_identifier = annotation.predicate
|
16
|
+
namespace, predicate = old_identifier.split(":", 2)
|
17
|
+
annotation.predicate = predicate
|
18
|
+
annotation.namespace = namespace
|
19
|
+
annotation.save!
|
20
|
+
|
21
|
+
$stdout.flush
|
22
|
+
end
|
23
|
+
|
24
|
+
print "#{reset}"
|
25
|
+
$stdout.flush
|
26
|
+
puts "note annotation conversion complete"
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.down
|
30
|
+
Note::Annotated::Base.find_each do |annotation|
|
31
|
+
identifier = [annotation.namespace, annotation.predicate].join(":")
|
32
|
+
annotation.predicate = identifier
|
33
|
+
annotation.save!
|
34
|
+
end
|
35
|
+
rename_column :note_annotations, :predicate, :identifier
|
36
|
+
remove_column :note_annotations, :namespace
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class ChangeUmtNoteAnnotationsToDct < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
Note::Annotated::Base.update_all({:namespace => "dct", :predicate => "creator"}, {:namespace => "umt", :predicate => "editor"})
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.down
|
7
|
+
Note::Annotated::Base.update_all({:namespace => "umt", :predicate => "editor"}, {:namespace => "dct", :predicate => "creator"})
|
8
|
+
end
|
9
|
+
end
|
data/db/schema.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
# This file is auto-generated from the current state of the database. Instead
|
2
|
+
# of editing this file, please use the migrations feature of Active Record to
|
3
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
4
|
+
#
|
5
|
+
# Note that this schema.rb definition is the authoritative source for your
|
6
|
+
# database schema. If you need to create the application database on another
|
7
|
+
# system, you should be using db:schema:load, not running all the migrations
|
8
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
9
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
10
|
+
#
|
11
|
+
# It's strongly recommended to check this file into your version control system.
|
12
|
+
|
13
|
+
ActiveRecord::Schema.define(:version => 20110615134040) do
|
14
|
+
|
15
|
+
create_table "collection_members", :force => true do |t|
|
16
|
+
t.integer "collection_id"
|
17
|
+
t.integer "target_id"
|
18
|
+
t.string "type"
|
19
|
+
end
|
20
|
+
|
21
|
+
add_index "collection_members", ["collection_id", "target_id", "type"], :name => "ix_collections_fk_type"
|
22
|
+
|
23
|
+
create_table "concept_relations", :force => true do |t|
|
24
|
+
t.string "type"
|
25
|
+
t.integer "owner_id"
|
26
|
+
t.integer "target_id"
|
27
|
+
t.datetime "created_at"
|
28
|
+
t.datetime "updated_at"
|
29
|
+
end
|
30
|
+
|
31
|
+
add_index "concept_relations", ["owner_id", "target_id"], :name => "ix_concept_relations_fk"
|
32
|
+
|
33
|
+
create_table "concepts", :force => true do |t|
|
34
|
+
t.string "type"
|
35
|
+
t.string "origin", :limit => 4000
|
36
|
+
t.integer "rev", :default => 1
|
37
|
+
t.date "published_at"
|
38
|
+
t.integer "published_version_id"
|
39
|
+
t.integer "locked_by"
|
40
|
+
t.date "expired_at"
|
41
|
+
t.date "follow_up"
|
42
|
+
t.boolean "to_review"
|
43
|
+
t.date "rdf_updated_at"
|
44
|
+
t.datetime "created_at"
|
45
|
+
t.datetime "updated_at"
|
46
|
+
end
|
47
|
+
|
48
|
+
add_index "concepts", ["origin"], :name => "ix_concepts_on_origin", :length => {"origin"=>255}
|
49
|
+
add_index "concepts", ["published_version_id"], :name => "ix_concepts_publ_version_id"
|
50
|
+
|
51
|
+
create_table "labelings", :force => true do |t|
|
52
|
+
t.string "type"
|
53
|
+
t.integer "owner_id"
|
54
|
+
t.integer "target_id"
|
55
|
+
t.datetime "created_at"
|
56
|
+
t.datetime "updated_at"
|
57
|
+
end
|
58
|
+
|
59
|
+
add_index "labelings", ["owner_id", "target_id", "type"], :name => "ix_labelings_fk_type"
|
60
|
+
add_index "labelings", ["type"], :name => "ix_labelings_on_type"
|
61
|
+
|
62
|
+
create_table "labels", :force => true do |t|
|
63
|
+
t.string "type"
|
64
|
+
t.string "origin", :limit => 4000
|
65
|
+
t.string "language"
|
66
|
+
t.string "value", :limit => 1024
|
67
|
+
t.datetime "created_at"
|
68
|
+
t.datetime "updated_at"
|
69
|
+
t.date "published_at"
|
70
|
+
end
|
71
|
+
|
72
|
+
add_index "labels", ["language"], :name => "ix_labels_on_language"
|
73
|
+
add_index "labels", ["origin"], :name => "ix_labels_on_origin", :length => {"origin"=>255}
|
74
|
+
add_index "labels", ["value"], :name => "ix_labels_on_value", :length => {"value"=>255}
|
75
|
+
|
76
|
+
create_table "matches", :force => true do |t|
|
77
|
+
t.integer "concept_id"
|
78
|
+
t.string "type"
|
79
|
+
t.string "value"
|
80
|
+
t.datetime "created_at"
|
81
|
+
t.datetime "updated_at"
|
82
|
+
end
|
83
|
+
|
84
|
+
add_index "matches", ["concept_id", "type"], :name => "ix_matches_fk_type"
|
85
|
+
add_index "matches", ["type"], :name => "ix_matches_on_type"
|
86
|
+
|
87
|
+
create_table "note_annotations", :force => true do |t|
|
88
|
+
t.integer "note_id"
|
89
|
+
t.string "predicate", :limit => 50
|
90
|
+
t.string "value", :limit => 1024
|
91
|
+
t.datetime "created_at"
|
92
|
+
t.datetime "updated_at"
|
93
|
+
t.string "namespace", :limit => 50
|
94
|
+
end
|
95
|
+
|
96
|
+
add_index "note_annotations", ["note_id"], :name => "ix_note_annotations_fk"
|
97
|
+
|
98
|
+
create_table "notes", :force => true do |t|
|
99
|
+
t.string "language", :limit => 2
|
100
|
+
t.string "value", :limit => 4000
|
101
|
+
t.string "type", :limit => 50
|
102
|
+
t.datetime "created_at"
|
103
|
+
t.datetime "updated_at"
|
104
|
+
t.integer "owner_id"
|
105
|
+
t.string "owner_type", :null => false
|
106
|
+
end
|
107
|
+
|
108
|
+
add_index "notes", ["language"], :name => "ix_notes_on_language"
|
109
|
+
add_index "notes", ["owner_id", "owner_type", "type"], :name => "ix_notes_fk_type"
|
110
|
+
add_index "notes", ["type"], :name => "ix_notes_on_type"
|
111
|
+
|
112
|
+
create_table "users", :force => true do |t|
|
113
|
+
t.string "forename"
|
114
|
+
t.string "surname"
|
115
|
+
t.string "email"
|
116
|
+
t.string "crypted_password"
|
117
|
+
t.boolean "active"
|
118
|
+
t.datetime "created_at"
|
119
|
+
t.datetime "updated_at"
|
120
|
+
t.string "password_salt"
|
121
|
+
t.string "persistence_token"
|
122
|
+
t.string "perishable_token"
|
123
|
+
t.string "role"
|
124
|
+
t.string "telephone_number"
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
data/db/seeds.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
if User.where(:email => 'admin@iqvoc').none?
|
18
|
+
User.create!(
|
19
|
+
:forename => 'Admin',
|
20
|
+
:surname => 'Istrator',
|
21
|
+
:email => 'admin@iqvoc',
|
22
|
+
:password => 'admin',
|
23
|
+
:password_confirmation => 'admin',
|
24
|
+
:active => true,
|
25
|
+
:role => "administrator")
|
26
|
+
end
|
27
|
+
|
28
|
+
if User.where(:email => 'demo@iqvoc').none?
|
29
|
+
User.create!(
|
30
|
+
:forename => 'Demo',
|
31
|
+
:surname => 'User',
|
32
|
+
:email => 'demo@iqvoc',
|
33
|
+
:password => 'cooluri',
|
34
|
+
:password_confirmation => 'cooluri',
|
35
|
+
:active => true,
|
36
|
+
:role => "reader")
|
37
|
+
end
|
data/iqvoc.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require 'iqvoc/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "iqvoc"
|
7
|
+
s.version = Iqvoc::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Robert Glaser", "Till Schulte-Coerne", "Frederik Dohr"]
|
10
|
+
s.email = ["robert.glaser@innoq.com", "till.schulte-coerne@innoq.com"]
|
11
|
+
s.homepage = "http://innoq.com"
|
12
|
+
s.summary = "iQvoc"
|
13
|
+
s.description = "iQvoc - a SKOS(-XL) vocabulary management system built on the Semantic Web"
|
14
|
+
|
15
|
+
s.add_dependency 'rails', '~> 3.0.9'
|
16
|
+
s.add_dependency 'bundler'
|
17
|
+
s.add_dependency 'kaminari'
|
18
|
+
s.add_dependency 'authlogic'
|
19
|
+
s.add_dependency 'cancan'
|
20
|
+
s.add_dependency 'iq_rdf', '~> 0.0.14'
|
21
|
+
s.add_dependency 'json'
|
22
|
+
|
23
|
+
s.files = %w(LICENSE README.md Gemfile Gemfile.lock Rakefile iqvoc.gemspec) + Dir.glob("{app,config,db,public,lib,test}/**/*")
|
24
|
+
s.test_files = Dir.glob("{test}/**/*")
|
25
|
+
s.executables = Dir.glob("{bin}/**/*")
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
namespace :iqvoc do
|
4
|
+
namespace :assets do
|
5
|
+
|
6
|
+
def Iqvoc.for_static_folders
|
7
|
+
engine_public_dir = Iqvoc::Engine.find_root_with_flag("public").join('public')
|
8
|
+
app_public_dir = Rails.public_path
|
9
|
+
|
10
|
+
if File.directory?(app_public_dir)
|
11
|
+
%w(stylesheets javascripts images fonts).each do |specific_dir|
|
12
|
+
source_common_dir = File.join(engine_public_dir, specific_dir, "iqvoc")
|
13
|
+
if File.exist?(source_common_dir)
|
14
|
+
target_common_dir = File.join(app_public_dir, specific_dir, "iqvoc")
|
15
|
+
FileUtils.mkdir_p(File.join(app_public_dir, specific_dir))
|
16
|
+
|
17
|
+
yield(source_common_dir, target_common_dir)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "Create symlinks to public stylesheets, javascripts, fonts and images folders in engine"
|
24
|
+
task :link do
|
25
|
+
Iqvoc.for_static_folders do |source_common_dir, target_common_dir|
|
26
|
+
File.unlink(target_common_dir) if File.symlink?(target_common_dir) && ENV['force'] == "true"
|
27
|
+
if !File.exists?(target_common_dir)
|
28
|
+
puts "Linking #{source_common_dir} -> #{target_common_dir}"
|
29
|
+
File.symlink(source_common_dir, target_common_dir)
|
30
|
+
else
|
31
|
+
puts "Symlink #{target_common_dir} already exists!"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Copy public stylesheets, javascripts, fonts and images folders in engine to the public directory of this application"
|
37
|
+
task :copy do
|
38
|
+
Iqvoc.for_static_folders do |source_common_dir, target_common_dir|
|
39
|
+
if !File.exists?(File.join(target_common_dir, "engine"))
|
40
|
+
puts "Copying #{source_common_dir} -> #{target_common_dir}"
|
41
|
+
FileUtils.cp_r(source_common_dir, target_common_dir)
|
42
|
+
else
|
43
|
+
puts "Directory #{File.join(target_common_dir, "vendor")} already exists!"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
namespace :iqvoc do
|
2
|
+
namespace :db do
|
3
|
+
|
4
|
+
desc "Migrate the database through scripts in db/migrate and update db/schema.rb by invoking db:schema:dump. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
|
5
|
+
task :migrate => :environment do
|
6
|
+
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
|
7
|
+
ActiveRecord::Migrator.migrate(Iqvoc::Engine.find_root_with_flag("db").join('db/migrate'), ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
8
|
+
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Load seeds (task is idempotent)"
|
12
|
+
task :seed => :environment do
|
13
|
+
Iqvoc::Engine.load_seed
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
namespace :iqvoc do
|
18
|
+
namespace :release do
|
19
|
+
|
20
|
+
desc "Build a production ready release to tmp/release (or to RELEASE_PATH). Use the parameter RUBY_CMD to speficy weather to use ruby or jruby to bundle the release."
|
21
|
+
task :build => :environment do
|
22
|
+
ENV['RELEASE_PATH'] ||= Rails.root.join('tmp/release')
|
23
|
+
ENV['RUBY_CMD'] ||= RUBY_PLATFORM == 'java' ? "jruby" : "ruby"
|
24
|
+
|
25
|
+
Rake::Task["iqvoc:release:initialize"].invoke
|
26
|
+
Rake::Task["iqvoc:release:bundle"].invoke
|
27
|
+
Rake::Task["iqvoc:release:iqvoc_assets"].invoke
|
28
|
+
Rake::Task["iqvoc:release:finalize"].invoke
|
29
|
+
puts "Release complete: #{ENV['RELEASE_PATH']}"
|
30
|
+
end
|
31
|
+
|
32
|
+
task :initialize do
|
33
|
+
path = File.expand_path(ENV['RELEASE_PATH'] || raise("You have to specify RELEASE_PATH"))
|
34
|
+
|
35
|
+
FileUtils.rm_rf(path) if File.directory?(path)
|
36
|
+
FileUtils.mkdir path
|
37
|
+
|
38
|
+
git_remotes = `git remote show origin`
|
39
|
+
raise "Couldn't read Fetch URL from #{git_remotes}" unless git_remotes.match(/Fetch URL: (.+)$/)
|
40
|
+
fetch_url = $1
|
41
|
+
|
42
|
+
git_remote_branches = `git branch -r`
|
43
|
+
raise "Couldn't read remote branches from #{git_remote_branches}" unless git_remote_branches.match(/origin\/.+/)
|
44
|
+
git_remote_branches.match(/(origin\/.+)\n/m)
|
45
|
+
branches = $1.squish.gsub("origin/", "").split(" ")
|
46
|
+
|
47
|
+
git_heroku_remote = `git remote -v`.split(/\n/).select{|s| s =~ /^heroku/}.map{|s| s.squish.split(" ").second}.first
|
48
|
+
puts "Found heroku remote '#{git_heroku_remote}'" if git_heroku_remote
|
49
|
+
|
50
|
+
branch = nil
|
51
|
+
while true
|
52
|
+
STDOUT.print "Enter branch name [master]: "
|
53
|
+
branch = (STDIN.gets.presence || 'master').gsub(/\n/, "")
|
54
|
+
break if branches.include?(branch)
|
55
|
+
puts "Branch must be one of #{branches.inspect}"
|
56
|
+
end
|
57
|
+
|
58
|
+
`git clone -b #{branch} #{fetch_url} #{path}`
|
59
|
+
|
60
|
+
FileUtils.cd(path) do
|
61
|
+
|
62
|
+
# Defuse the git repository
|
63
|
+
`git remote rm origin` # Nobody should push this back into our holy repository
|
64
|
+
`git remote add heroku #{git_heroku_remote}` if git_heroku_remote
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
task :bundle do
|
71
|
+
path = File.expand_path(ENV['RELEASE_PATH'] || raise("You have to specify RELEASE_PATH"))
|
72
|
+
gemfile = File.join(path, "Gemfile")
|
73
|
+
ruby_cmd = ENV['RUBY_CMD'].presence || raise("You have to specify RUBY_CMD")
|
74
|
+
|
75
|
+
Bundler.with_clean_env do
|
76
|
+
FileUtils.cd(path) do
|
77
|
+
|
78
|
+
if (File.exist?('Gemfile.production'))
|
79
|
+
FileUtils.cp('Gemfile.production', 'Gemfile')
|
80
|
+
|
81
|
+
FileUtils.rm('Gemfile.lock') if File.exist?('Gemfile.lock')
|
82
|
+
|
83
|
+
# We'll have to "rebundle" the Gemfile.lock
|
84
|
+
puts "Gemfile was replaced by Gemfile.production. Rebundling Gemfile.lock..."
|
85
|
+
puts `#{ruby_cmd} -S bundle install --path=vendor/bundle --gemfile=#{gemfile} --without=development:test`
|
86
|
+
end
|
87
|
+
|
88
|
+
puts `#{ruby_cmd} -S bundle install --deployment --gemfile=#{gemfile}`
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
task :iqvoc_assets do
|
94
|
+
path = File.expand_path(ENV['RELEASE_PATH'] || raise("You have to specify RELEASE_PATH"))
|
95
|
+
gemfile = File.join(path, "Gemfile")
|
96
|
+
ruby_cmd = ENV['RUBY_CMD'].presence || raise("You have to specify RUBY_CMD")
|
97
|
+
|
98
|
+
Bundler.with_clean_env do
|
99
|
+
FileUtils.cd(path) do
|
100
|
+
|
101
|
+
puts `export BUNDLE_GEMFILE='#{gemfile}' && #{ruby_cmd} -S bundle exec rake iqvoc:assets:copy`
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
task :finalize do
|
108
|
+
path = File.expand_path(ENV['RELEASE_PATH'] || raise("You have to specify RELEASE_PATH"))
|
109
|
+
|
110
|
+
FileUtils.cd(path) do
|
111
|
+
`git add *`
|
112
|
+
`git commit -m 'iqvoc:release:build: Packed release'`
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Iqvoc
|
2
|
+
class Ability
|
3
|
+
include CanCan::Ability
|
4
|
+
|
5
|
+
@@if_published = lambda { |o| o.published? }
|
6
|
+
|
7
|
+
def initialize(user = nil)
|
8
|
+
|
9
|
+
can :read, ::Collection::Base
|
10
|
+
|
11
|
+
can :read, [::Concept::Base, ::Label::Base], &@@if_published
|
12
|
+
|
13
|
+
if user # Every logged in user ...
|
14
|
+
can :use, :dashboard
|
15
|
+
|
16
|
+
if user.owns_role?(:editor) || user.owns_role?(:publisher) || user.owns_role?(:administrator) # Editors and above ...
|
17
|
+
can :manage, ::Collection::Base
|
18
|
+
|
19
|
+
can :read, [::Concept::Base, ::Label::Base]
|
20
|
+
can :create, [::Concept::Base, ::Label::Base]
|
21
|
+
can [:update, :destroy, :unlock], [::Concept::Base, ::Label::Base], :locked_by => user.id, :published_at => nil
|
22
|
+
can :lock, [::Concept::Base, ::Label::Base], :locked_by => nil, :published_at => nil
|
23
|
+
can [:check_consistency, :send_to_review], [::Concept::Base, ::Label::Base], :published_at => nil
|
24
|
+
can :branch, [::Concept::Base, ::Label::Base], &@@if_published
|
25
|
+
end
|
26
|
+
|
27
|
+
if user.owns_role?(:publisher) || user.owns_role?(:administrator) # Publishers and above ...
|
28
|
+
can :merge, [::Concept::Base, ::Label::Base], :published_at => nil
|
29
|
+
end
|
30
|
+
|
31
|
+
if user.owns_role?(:administrator) # Admins ...
|
32
|
+
can [:update, :destroy, :unlock], [::Concept::Base, ::Label::Base], :published_at => nil # Mustn't be locked by myself
|
33
|
+
|
34
|
+
can :manage, User
|
35
|
+
|
36
|
+
can :full_export, ::Concept::Base
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
module Iqvoc
|
18
|
+
class InlineDataHelper # TODO: Module should have the same name as the file! "Helper" has an other meaning in Rails. I would suggest "InlineData".
|
19
|
+
|
20
|
+
# TODO: Non class constants should be written UPPER_CASE
|
21
|
+
|
22
|
+
# delimiters for strings representing a list of values
|
23
|
+
Joiner = ", "
|
24
|
+
Splitter = /[,\n] */
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2011 innoQ Deutschland GmbH
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
module Iqvoc
|
18
|
+
module DeepCloning
|
19
|
+
|
20
|
+
def self.included(base) #:nodoc:
|
21
|
+
base.alias_method_chain :clone, :deep_cloning
|
22
|
+
end
|
23
|
+
|
24
|
+
# clones an ActiveRecord model.
|
25
|
+
# if passed the :include option, it will deep clone the given associations
|
26
|
+
# if passed the :except option, it won't clone the given attributes
|
27
|
+
#
|
28
|
+
# === Usage:
|
29
|
+
#
|
30
|
+
# ==== Cloning a model without an attribute
|
31
|
+
# pirate.clone :except => :name
|
32
|
+
#
|
33
|
+
# ==== Cloning a model without multiple attributes
|
34
|
+
# pirate.clone :except => [:name, :nick_name]
|
35
|
+
# ==== Cloning one single association
|
36
|
+
# pirate.clone :include => :mateys
|
37
|
+
#
|
38
|
+
# ==== Cloning multiple associations
|
39
|
+
# pirate.clone :include => [:mateys, :treasures]
|
40
|
+
#
|
41
|
+
# ==== Cloning really deep
|
42
|
+
# pirate.clone :include => {:treasures => :gold_pieces}
|
43
|
+
#
|
44
|
+
# ==== Cloning really deep with multiple associations
|
45
|
+
# pirate.clone :include => [:mateys, {:treasures => :gold_pieces}]
|
46
|
+
#
|
47
|
+
# ==== Cloning multiple associations - but only the join table entries without cloning the associated objects themselves
|
48
|
+
# pirate.clone :include_association => [:matey_ids, :treasure_ids]
|
49
|
+
#
|
50
|
+
def clone_with_deep_cloning options = {}
|
51
|
+
kopy = clone_without_deep_cloning
|
52
|
+
|
53
|
+
if options[:except]
|
54
|
+
Array(options[:except]).each do |attribute|
|
55
|
+
kopy.write_attribute(attribute, attributes_from_column_definition[attribute.to_s])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
if options[:include_association]
|
60
|
+
Array(options[:include_association]).each do |association_attribute|
|
61
|
+
kopy.send("#{association_attribute}=", self.send("#{association_attribute}"))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
if options[:include]
|
66
|
+
Array(options[:include]).each do |association, deep_associations|
|
67
|
+
if (association.kind_of? Hash)
|
68
|
+
deep_associations = association[association.keys.first]
|
69
|
+
association = association.keys.first
|
70
|
+
end
|
71
|
+
opts = deep_associations.blank? ? {} : {:include => deep_associations}
|
72
|
+
association_reflection = self.class.reflect_on_association(association)
|
73
|
+
cloned_object = case association_reflection.macro
|
74
|
+
when :belongs_to, :has_one
|
75
|
+
self.send(association) && self.send(association).clone(opts)
|
76
|
+
when :has_many, :has_and_belongs_to_many
|
77
|
+
fk = association_reflection.options[:foreign_key]# || self.class.to_s.underscore
|
78
|
+
self.send(association).collect do |obj|
|
79
|
+
cloned_obj = obj.clone(opts)
|
80
|
+
cloned_obj.send("#{fk}=", kopy) unless fk.blank?
|
81
|
+
cloned_obj
|
82
|
+
end
|
83
|
+
end
|
84
|
+
kopy.send("#{association}=", cloned_object)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
return kopy
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|