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.
Files changed (376) hide show
  1. data/Gemfile +69 -0
  2. data/Gemfile.lock +134 -0
  3. data/LICENSE +13 -0
  4. data/README.md +68 -0
  5. data/Rakefile +23 -0
  6. data/app/controllers/application_controller.rb +125 -0
  7. data/app/controllers/collections/hierarchical_controller.rb +44 -0
  8. data/app/controllers/collections_controller.rb +124 -0
  9. data/app/controllers/concepts/alphabetical_controller.rb +39 -0
  10. data/app/controllers/concepts/hierarchical_controller.rb +74 -0
  11. data/app/controllers/concepts/untranslated_controller.rb +38 -0
  12. data/app/controllers/concepts/versions_controller.rb +119 -0
  13. data/app/controllers/concepts_controller.rb +174 -0
  14. data/app/controllers/dashboard_controller.rb +43 -0
  15. data/app/controllers/pages_controller.rb +22 -0
  16. data/app/controllers/rdf_controller.rb +43 -0
  17. data/app/controllers/search_results_controller.rb +101 -0
  18. data/app/controllers/triple_store_syncs_controller.rb +45 -0
  19. data/app/controllers/user_sessions_controller.rb +48 -0
  20. data/app/controllers/users_controller.rb +81 -0
  21. data/app/helpers/application_helper.rb +60 -0
  22. data/app/helpers/concepts_helper.rb +86 -0
  23. data/app/helpers/dashboard_helper.rb +46 -0
  24. data/app/helpers/rdf_helper.rb +63 -0
  25. data/app/helpers/search_results_helper.rb +32 -0
  26. data/app/models/collection/base.rb +161 -0
  27. data/app/models/collection/member/base.rb +23 -0
  28. data/app/models/collection/member/collection.rb +33 -0
  29. data/app/models/collection/member/concept.rb +33 -0
  30. data/app/models/collection/unordered.rb +18 -0
  31. data/app/models/concept/base.rb +418 -0
  32. data/app/models/concept/relation/base.rb +95 -0
  33. data/app/models/concept/relation/reverse_relation_extension.rb +49 -0
  34. data/app/models/concept/relation/skos/base.rb +37 -0
  35. data/app/models/concept/relation/skos/broader/base.rb +41 -0
  36. data/app/models/concept/relation/skos/broader/mono.rb +28 -0
  37. data/app/models/concept/relation/skos/broader/poly.rb +23 -0
  38. data/app/models/concept/relation/skos/narrower/base.rb +37 -0
  39. data/app/models/concept/relation/skos/related.rb +21 -0
  40. data/app/models/concept/skos/base.rb +28 -0
  41. data/app/models/label/base.rb +98 -0
  42. data/app/models/label/skos/base.rb +27 -0
  43. data/app/models/labeling/base.rb +81 -0
  44. data/app/models/labeling/skos/alt_label.rb +21 -0
  45. data/app/models/labeling/skos/base.rb +99 -0
  46. data/app/models/labeling/skos/hidden_label.rb +25 -0
  47. data/app/models/labeling/skos/pref_label.rb +30 -0
  48. data/app/models/match/base.rb +57 -0
  49. data/app/models/match/skos/base.rb +23 -0
  50. data/app/models/match/skos/broad_match.rb +21 -0
  51. data/app/models/match/skos/close_match.rb +21 -0
  52. data/app/models/match/skos/exact_match.rb +21 -0
  53. data/app/models/match/skos/mapping_relation.rb +21 -0
  54. data/app/models/match/skos/narrow_match.rb +21 -0
  55. data/app/models/match/skos/related_match.rb +21 -0
  56. data/app/models/note/annotated/base.rb +29 -0
  57. data/app/models/note/base.rb +127 -0
  58. data/app/models/note/skos/base.rb +52 -0
  59. data/app/models/note/skos/change_note.rb +38 -0
  60. data/app/models/note/skos/definition.rb +33 -0
  61. data/app/models/note/skos/editorial_note.rb +21 -0
  62. data/app/models/note/skos/example.rb +21 -0
  63. data/app/models/note/skos/history_note.rb +21 -0
  64. data/app/models/note/skos/scope_note.rb +21 -0
  65. data/app/models/origin_mapping.rb +58 -0
  66. data/app/models/rdf_store.rb +96 -0
  67. data/app/models/search_extension.rb +58 -0
  68. data/app/models/user.rb +49 -0
  69. data/app/models/user_session.rb +23 -0
  70. data/app/views/collections/_collection.html.erb +10 -0
  71. data/app/views/collections/_form.html.erb +47 -0
  72. data/app/views/collections/edit.html.erb +11 -0
  73. data/app/views/collections/index.html.erb +12 -0
  74. data/app/views/collections/new.html.erb +7 -0
  75. data/app/views/collections/show.html.erb +53 -0
  76. data/app/views/collections/show.iqrdf +22 -0
  77. data/app/views/concepts/_base_data.html.erb +72 -0
  78. data/app/views/concepts/_close_match.html.erb +16 -0
  79. data/app/views/concepts/_show_head.html.erb +23 -0
  80. data/app/views/concepts/_visualization.html.erb +9 -0
  81. data/app/views/concepts/alphabetical/_pref_labeling.html.erb +6 -0
  82. data/app/views/concepts/alphabetical/index.html.erb +17 -0
  83. data/app/views/concepts/edit.html.erb +32 -0
  84. data/app/views/concepts/hierarchical/_treeview.html.erb +20 -0
  85. data/app/views/concepts/hierarchical/index.html.erb +5 -0
  86. data/app/views/concepts/index.iqrdf +24 -0
  87. data/app/views/concepts/new.html.erb +3 -0
  88. data/app/views/concepts/show_published.html.erb +16 -0
  89. data/app/views/concepts/show_unpublished.html.erb +43 -0
  90. data/app/views/concepts/untranslated/index.html.erb +23 -0
  91. data/app/views/dashboard/index.html.erb +47 -0
  92. data/app/views/errors/access_denied.html.erb +3 -0
  93. data/app/views/errors/multiple_choices.html.erb +11 -0
  94. data/app/views/errors/not_found.html.erb +8 -0
  95. data/app/views/kaminari/_page.html.erb +6 -0
  96. data/app/views/kaminari/_paginator.html.erb +15 -0
  97. data/app/views/layouts/_controls.html.erb +37 -0
  98. data/app/views/layouts/_header.html.erb +1 -0
  99. data/app/views/layouts/_navigation.html.erb +27 -0
  100. data/app/views/layouts/_sections.html.erb +8 -0
  101. data/app/views/layouts/application.html.erb +83 -0
  102. data/app/views/pages/about.html.erb +77 -0
  103. data/app/views/partials/_rdf_logo.html.erb +4 -0
  104. data/app/views/partials/collection/_member.html.erb +14 -0
  105. data/app/views/partials/collection_label/_search_result.html.erb +5 -0
  106. data/app/views/partials/concept/_edit_link_base.html.erb +4 -0
  107. data/app/views/partials/concept/_inline_base.html.erb +4 -0
  108. data/app/views/partials/concept/_new_link_base.html.erb +4 -0
  109. data/app/views/partials/concept/relation/_base.html.erb +8 -0
  110. data/app/views/partials/concept/relation/_edit_base.html.erb +15 -0
  111. data/app/views/partials/concept/relation/skos/_narrower.html.erb +12 -0
  112. data/app/views/partials/concept/relation/skos/broader/_mono.html.erb +28 -0
  113. data/app/views/partials/concept/relation/skos/broader/_poly.html.erb +14 -0
  114. data/app/views/partials/labeling/skos/_base.html.erb +17 -0
  115. data/app/views/partials/labeling/skos/_edit_base.html.erb +7 -0
  116. data/app/views/partials/labeling/skos/_search_result.html.erb +12 -0
  117. data/app/views/partials/match/_base.html.erb +13 -0
  118. data/app/views/partials/match/_edit_base.html.erb +6 -0
  119. data/app/views/partials/note/_base.html.erb +15 -0
  120. data/app/views/partials/note/_edit_base.html.erb +28 -0
  121. data/app/views/partials/note/_note.html.erb +14 -0
  122. data/app/views/partials/note/_search_result.html.erb +8 -0
  123. data/app/views/partials/note/skos/_edit_change_note.html.erb +47 -0
  124. data/app/views/partials/note/skos/definition/_search_result.html.erb +8 -0
  125. data/app/views/rdf/show_concept.iqrdf +5 -0
  126. data/app/views/search_results/_head_contents.html.erb +4 -0
  127. data/app/views/search_results/_rdf_links.html.erb +4 -0
  128. data/app/views/search_results/index.html.erb +92 -0
  129. data/app/views/search_results/index.iqrdf +33 -0
  130. data/app/views/triple_store_syncs/new.html.erb +7 -0
  131. data/app/views/user_sessions/new.html.erb +11 -0
  132. data/app/views/users/_form.html.erb +45 -0
  133. data/app/views/users/_user_preference.html.erb +12 -0
  134. data/app/views/users/edit.html.erb +14 -0
  135. data/app/views/users/index.html.erb +29 -0
  136. data/app/views/users/new.html.erb +13 -0
  137. data/config/application.rb +82 -0
  138. data/config/boot.rb +29 -0
  139. data/config/database.template.yml +43 -0
  140. data/config/database.yml +40 -0
  141. data/config/deploy/common.rb +79 -0
  142. data/config/deploy/ec2.rb +43 -0
  143. data/config/deploy/history.rb +29 -0
  144. data/config/deploy/innoq.rb +37 -0
  145. data/config/deploy.rb +72 -0
  146. data/config/engine.rb +25 -0
  147. data/config/environment.rb +21 -0
  148. data/config/environments/development.rb +74 -0
  149. data/config/environments/production.rb +65 -0
  150. data/config/environments/production.template.rb +65 -0
  151. data/config/environments/production_internal.rb +65 -0
  152. data/config/environments/test.rb +51 -0
  153. data/config/initializers/action_view.rb +23 -0
  154. data/config/initializers/active_record.rb +18 -0
  155. data/config/initializers/backtrace_silencers.rb +23 -0
  156. data/config/initializers/inflections.rb +26 -0
  157. data/config/initializers/iqvoc.rb +50 -0
  158. data/config/initializers/jdbc.rb +23 -0
  159. data/config/initializers/kaminari_config.rb +8 -0
  160. data/config/initializers/language.rb +6 -0
  161. data/config/initializers/mime_types.rb +24 -0
  162. data/config/initializers/secret_token.rb +29 -0
  163. data/config/initializers/secret_token.rb.template +29 -0
  164. data/config/initializers/session_store.rb +24 -0
  165. data/config/locales/activerecord.de.yml +135 -0
  166. data/config/locales/activerecord.en.yml +135 -0
  167. data/config/locales/authlogic.de.yml +38 -0
  168. data/config/locales/authlogic.en.yml +38 -0
  169. data/config/locales/de.yml +326 -0
  170. data/config/locales/defaults.de.yml +153 -0
  171. data/config/locales/en.yml +332 -0
  172. data/config/routes.rb +53 -0
  173. data/config/warble.rb +158 -0
  174. data/db/iqvoc_test.sqlite3 +0 -0
  175. data/db/migrate/20100927101502_create_schema.rb +174 -0
  176. data/db/migrate/20101125141218_add_collection_tables.rb +32 -0
  177. data/db/migrate/20101129161528_add_type_to_collections.rb +24 -0
  178. data/db/migrate/20101202094602_add_origin_to_collections.rb +25 -0
  179. data/db/migrate/20101202135420_rename_collection_contents_to_collection_members.rb +25 -0
  180. data/db/migrate/20101208103531_add_type_to_collection_contents.rb +27 -0
  181. data/db/migrate/20101210153916_add_indexes_to_collections.rb +25 -0
  182. data/db/migrate/20110204121244_create_collection_labels.rb +32 -0
  183. data/db/migrate/20110208084250_change_origin_lengths.rb +27 -0
  184. data/db/migrate/20110328124300_discard_collection_specifics.rb +27 -0
  185. data/db/migrate/20110408120357_remove_classifications_and_classifiers.rb +32 -0
  186. data/db/migrate/20110408120740_remove_xl_specfic_stuff.rb +39 -0
  187. data/db/migrate/20110420133640_change_value_in_notes.rb +8 -0
  188. data/db/migrate/20110427120534_add_published_at_to_labels.rb +9 -0
  189. data/db/migrate/20110510162719_use_mono_hierarchy_instead_of_poly_hierarchy.rb +13 -0
  190. data/db/migrate/20110512132624_extend_notes_value_field_length.rb +8 -0
  191. data/db/migrate/20110525103100_separate_note_annotation_predicates.rb +38 -0
  192. data/db/migrate/20110615134040_change_umt_note_annotations_to_dct.rb +9 -0
  193. data/db/schema.rb +127 -0
  194. data/db/seeds.rb +37 -0
  195. data/iqvoc.gemspec +27 -0
  196. data/lib/engine_tasks/assets.rake +49 -0
  197. data/lib/engine_tasks/db.rake +18 -0
  198. data/lib/engine_tasks/release.rake +118 -0
  199. data/lib/iqvoc/ability.rb +44 -0
  200. data/lib/iqvoc/data_helper.rb +27 -0
  201. data/lib/iqvoc/deep_cloning.rb +92 -0
  202. data/lib/iqvoc/rdf_helper.rb +67 -0
  203. data/lib/iqvoc/skos_importer.rb +144 -0
  204. data/lib/iqvoc/version.rb +19 -0
  205. data/lib/iqvoc/versioning.rb +151 -0
  206. data/lib/iqvoc.rb +228 -0
  207. data/lib/maker.rb +144 -0
  208. data/lib/ojdbc14.jar +0 -0
  209. data/lib/string.rb +23 -0
  210. data/lib/tasks/importer.rake +16 -0
  211. data/lib/tasks/jdbc.rake +24 -0
  212. data/public/404.html +26 -0
  213. data/public/422.html +26 -0
  214. data/public/500.html +26 -0
  215. data/public/favicon.ico +0 -0
  216. data/public/images/iqvoc/add.png +0 -0
  217. data/public/images/iqvoc/arrow_down.gif +0 -0
  218. data/public/images/iqvoc/arrow_up.gif +0 -0
  219. data/public/images/iqvoc/footer.png +0 -0
  220. data/public/images/iqvoc/go_there.png +0 -0
  221. data/public/images/iqvoc/header.png +0 -0
  222. data/public/images/iqvoc/header_long.png +0 -0
  223. data/public/images/iqvoc/iqvoc.png +0 -0
  224. data/public/images/iqvoc/note_add.png +0 -0
  225. data/public/images/iqvoc/note_delete.png +0 -0
  226. data/public/images/iqvoc/note_edit.png +0 -0
  227. data/public/images/iqvoc/ok.png +0 -0
  228. data/public/images/iqvoc/rails.png +0 -0
  229. data/public/images/iqvoc/rdf_flyer.gif +0 -0
  230. data/public/images/iqvoc/red_arrow.png +0 -0
  231. data/public/images/iqvoc/remove.png +0 -0
  232. data/public/images/iqvoc/shadow.png +0 -0
  233. data/public/images/iqvoc/spinner.gif +0 -0
  234. data/public/images/iqvoc/tokenizer_delete.png +0 -0
  235. data/public/images/iqvoc/tokenizer_pencile.png +0 -0
  236. data/public/images/iqvoc/tokenizer_show.png +0 -0
  237. data/public/images/iqvoc/unfinished.png +0 -0
  238. data/public/javascripts/iqvoc/application.js +123 -0
  239. data/public/javascripts/iqvoc/entityselect.js +121 -0
  240. data/public/javascripts/iqvoc/excanvas.js +35 -0
  241. data/public/javascripts/iqvoc/iqvoc.js +118 -0
  242. data/public/javascripts/iqvoc/jit_rgraph.js +153 -0
  243. data/public/javascripts/iqvoc/jquery-1.6.2.min.js +18 -0
  244. data/public/javascripts/iqvoc/jquery-treeview/changelog.txt +29 -0
  245. data/public/javascripts/iqvoc/jquery-treeview/demo/async.html +44 -0
  246. data/public/javascripts/iqvoc/jquery-treeview/demo/bg.gif +0 -0
  247. data/public/javascripts/iqvoc/jquery-treeview/demo/demo.js +43 -0
  248. data/public/javascripts/iqvoc/jquery-treeview/demo/images.html +56 -0
  249. data/public/javascripts/iqvoc/jquery-treeview/demo/index.html +340 -0
  250. data/public/javascripts/iqvoc/jquery-treeview/demo/large.html +559 -0
  251. data/public/javascripts/iqvoc/jquery-treeview/demo/prerendered.html +621 -0
  252. data/public/javascripts/iqvoc/jquery-treeview/demo/screen.css +24 -0
  253. data/public/javascripts/iqvoc/jquery-treeview/demo/simple.html +82 -0
  254. data/public/javascripts/iqvoc/jquery-treeview/demo/source.php +87 -0
  255. data/public/javascripts/iqvoc/jquery-treeview/demo/source.phps +87 -0
  256. data/public/javascripts/iqvoc/jquery-treeview/images/ajax-loader.gif +0 -0
  257. data/public/javascripts/iqvoc/jquery-treeview/images/file.gif +0 -0
  258. data/public/javascripts/iqvoc/jquery-treeview/images/folder-closed.gif +0 -0
  259. data/public/javascripts/iqvoc/jquery-treeview/images/folder.gif +0 -0
  260. data/public/javascripts/iqvoc/jquery-treeview/images/minus.gif +0 -0
  261. data/public/javascripts/iqvoc/jquery-treeview/images/plus.gif +0 -0
  262. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-black-line.gif +0 -0
  263. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-black.gif +0 -0
  264. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-default-line.gif +0 -0
  265. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-default.gif +0 -0
  266. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-famfamfam-line.gif +0 -0
  267. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-famfamfam.gif +0 -0
  268. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-gray-line.gif +0 -0
  269. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-gray.gif +0 -0
  270. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-red-line.gif +0 -0
  271. data/public/javascripts/iqvoc/jquery-treeview/images/treeview-red.gif +0 -0
  272. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.async.js +82 -0
  273. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.css +75 -0
  274. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.js +251 -0
  275. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.min.js +15 -0
  276. data/public/javascripts/iqvoc/jquery-treeview/jquery.treeview.pack.js +16 -0
  277. data/public/javascripts/iqvoc/jquery-treeview/lib/jquery.cookie.js +92 -0
  278. data/public/javascripts/iqvoc/jquery-treeview/lib/jquery.js +3363 -0
  279. data/public/javascripts/iqvoc/jquery-treeview/todo +8 -0
  280. data/public/javascripts/iqvoc/jquery-ui-1.8.13.custom.js +3229 -0
  281. data/public/javascripts/iqvoc/jquery-ui-1.8.13.custom.min.js +163 -0
  282. data/public/javascripts/iqvoc/jquery-ui.datepicker-de.js +22 -0
  283. data/public/javascripts/iqvoc/json2.js +480 -0
  284. data/public/javascripts/iqvoc/langselect.js +73 -0
  285. data/public/javascripts/iqvoc/rails.js +132 -0
  286. data/public/javascripts/iqvoc/storage.js +122 -0
  287. data/public/javascripts/iqvoc/visualization.js +321 -0
  288. data/public/robots.txt +5 -0
  289. data/public/stylesheets/iqvoc/blueprint/ie.css +35 -0
  290. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/cross.png +0 -0
  291. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/key.png +0 -0
  292. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/icons/tick.png +0 -0
  293. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/readme.txt +32 -0
  294. data/public/stylesheets/iqvoc/blueprint/plugins/buttons/screen.css +97 -0
  295. data/public/stylesheets/iqvoc/blueprint/plugins/fancy-type/readme.txt +14 -0
  296. data/public/stylesheets/iqvoc/blueprint/plugins/fancy-type/screen.css +71 -0
  297. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/doc.png +0 -0
  298. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/email.png +0 -0
  299. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/external.png +0 -0
  300. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/feed.png +0 -0
  301. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/im.png +0 -0
  302. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  303. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/visited.png +0 -0
  304. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/icons/xls.png +0 -0
  305. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/readme.txt +18 -0
  306. data/public/stylesheets/iqvoc/blueprint/plugins/link-icons/screen.css +40 -0
  307. data/public/stylesheets/iqvoc/blueprint/plugins/rtl/readme.txt +10 -0
  308. data/public/stylesheets/iqvoc/blueprint/plugins/rtl/screen.css +110 -0
  309. data/public/stylesheets/iqvoc/blueprint/print.css +29 -0
  310. data/public/stylesheets/iqvoc/blueprint/screen.css +258 -0
  311. data/public/stylesheets/iqvoc/blueprint/src/forms.css +65 -0
  312. data/public/stylesheets/iqvoc/blueprint/src/grid.css +280 -0
  313. data/public/stylesheets/iqvoc/blueprint/src/grid.png +0 -0
  314. data/public/stylesheets/iqvoc/blueprint/src/ie.css +76 -0
  315. data/public/stylesheets/iqvoc/blueprint/src/print.css +85 -0
  316. data/public/stylesheets/iqvoc/blueprint/src/reset.css +45 -0
  317. data/public/stylesheets/iqvoc/blueprint/src/typography.css +106 -0
  318. data/public/stylesheets/iqvoc/forms.css +71 -0
  319. data/public/stylesheets/iqvoc/images/back.png +0 -0
  320. data/public/stylesheets/iqvoc/images/branch.png +0 -0
  321. data/public/stylesheets/iqvoc/images/categ.png +0 -0
  322. data/public/stylesheets/iqvoc/images/categ_open.png +0 -0
  323. data/public/stylesheets/iqvoc/images/go_there.png +0 -0
  324. data/public/stylesheets/iqvoc/images/iqvoc.png +0 -0
  325. data/public/stylesheets/iqvoc/images/leaf_end.png +0 -0
  326. data/public/stylesheets/iqvoc/images/leaf_end_filled.png +0 -0
  327. data/public/stylesheets/iqvoc/images/leaf_mid.png +0 -0
  328. data/public/stylesheets/iqvoc/images/leaf_mid_filled.png +0 -0
  329. data/public/stylesheets/iqvoc/images/leaf_nothing.png +0 -0
  330. data/public/stylesheets/iqvoc/images/leaf_only.png +0 -0
  331. data/public/stylesheets/iqvoc/images/leaf_only_filled.png +0 -0
  332. data/public/stylesheets/iqvoc/images/leaf_top.png +0 -0
  333. data/public/stylesheets/iqvoc/images/leaf_top_filled.png +0 -0
  334. data/public/stylesheets/iqvoc/images/nothing.png +0 -0
  335. data/public/stylesheets/iqvoc/images/top_01.png +0 -0
  336. data/public/stylesheets/iqvoc/images/trunk.png +0 -0
  337. data/public/stylesheets/iqvoc/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  338. data/public/stylesheets/iqvoc/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  339. data/public/stylesheets/iqvoc/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  340. data/public/stylesheets/iqvoc/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  341. data/public/stylesheets/iqvoc/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  342. data/public/stylesheets/iqvoc/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  343. data/public/stylesheets/iqvoc/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  344. data/public/stylesheets/iqvoc/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  345. data/public/stylesheets/iqvoc/images/ui-icons_217bc0_256x240.png +0 -0
  346. data/public/stylesheets/iqvoc/images/ui-icons_2e83ff_256x240.png +0 -0
  347. data/public/stylesheets/iqvoc/images/ui-icons_469bdd_256x240.png +0 -0
  348. data/public/stylesheets/iqvoc/images/ui-icons_6da8d5_256x240.png +0 -0
  349. data/public/stylesheets/iqvoc/images/ui-icons_cd0a0a_256x240.png +0 -0
  350. data/public/stylesheets/iqvoc/images/ui-icons_d8e7f3_256x240.png +0 -0
  351. data/public/stylesheets/iqvoc/images/ui-icons_f9bd01_256x240.png +0 -0
  352. data/public/stylesheets/iqvoc/iqvoc.css +477 -0
  353. data/public/stylesheets/iqvoc/jquery-ui-1.8.13.custom.css +415 -0
  354. data/public/stylesheets/iqvoc/widgets.css +81 -0
  355. data/test/factories.rb +74 -0
  356. data/test/integration/alphabetical_test.rb +53 -0
  357. data/test/integration/authentication_test.rb +41 -0
  358. data/test/integration/browse_concepts_and_labels_test.rb +61 -0
  359. data/test/integration/browse_static_pages_test.rb +29 -0
  360. data/test/integration/client_augmentation_test.rb +42 -0
  361. data/test/integration/client_edit_concept_test.rb +72 -0
  362. data/test/integration/collection_circularity_test.rb +110 -0
  363. data/test/integration/concept_test.rb +61 -0
  364. data/test/integration/edit_concepts_test.rb +40 -0
  365. data/test/integration/note_annotations_test.rb +86 -0
  366. data/test/integration/search_test.rb +205 -0
  367. data/test/integration/tree_test.rb +31 -0
  368. data/test/integration/untranslated_test.rb +60 -0
  369. data/test/integration_test_helper.rb +45 -0
  370. data/test/performance/browsing_test.rb +25 -0
  371. data/test/test_helper.rb +29 -0
  372. data/test/unit/concept_test.rb +93 -0
  373. data/test/unit/note_test.rb +32 -0
  374. data/test/unit/origin_mapping_test.rb +70 -0
  375. data/test/unit/skos_import_test.rb +100 -0
  376. metadata +522 -0
@@ -0,0 +1,67 @@
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
+ # TODO: The whole class should move to umt because it highly proprietary
19
+ # (and also has the wrong name because it only deals with "turtle").
20
+ # TODO: The term "Helper" is misleading.
21
+ class RdfHelper
22
+
23
+ LITERAL_REGEXP = /"(.*)"@([a-zA-Z]{2})/
24
+
25
+ NSMAP = {
26
+ 'rdf' => "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
27
+ 'skos' => "http://www.w3.org/2004/02/skos/core#",
28
+ 'owl' => "http://www.w3.org/2002/07/owl#",
29
+ 'rdfs' => "http://www.w3.org/2000/01/rdf-schema#" }
30
+
31
+ def self.extract_id(uri)
32
+ uri =~ /([^\/]+)\/{0,1}$/
33
+ $1
34
+ end
35
+
36
+ def self.is_literal_form?(str)
37
+ str.match LITERAL_REGEXP
38
+ end
39
+
40
+ def self.quote_turtle_literal(val)
41
+ if val.to_s.match(/^<.*>$/)
42
+ val
43
+ else
44
+ "\"#{val}\""
45
+ end
46
+ end
47
+
48
+ def self.split_literal(str)
49
+ elements = str.scan(LITERAL_REGEXP).first
50
+ @split_literal = {
51
+ :value => elements[0].gsub(/\\"/, '"'),
52
+ :language => elements[1]
53
+ }
54
+ RAILS_DEFAULT_LOGGER.debug "@split_literal => #{@split_literal}"
55
+ @split_literal
56
+ end
57
+
58
+ def self.to_xml_attribute_array
59
+ res = {}
60
+ NSMAP.each do |k,v|
61
+ res["xmlns:#{k}"] = v
62
+ end
63
+ res
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,144 @@
1
+ module Iqvoc
2
+ class SkosImporter
3
+
4
+ FIRST_LEVEL_OBJECT_CLASSES = [Iqvoc::Concept.base_class]
5
+ SECOND_LEVEL_OBJECT_CLASSES = Iqvoc::Concept.labeling_classes.keys +
6
+ Iqvoc::Concept.note_classes +
7
+ Iqvoc::Concept.relation_classes +
8
+ Iqvoc::Concept.match_classes
9
+
10
+ def initialize(file, default_namespace_url)
11
+ unless file.is_a?(File) || file.is_a?(Array)
12
+ raise "Iqvoc::SkosImporter#import: Parameter 'file' should be a File or an Array."
13
+ end
14
+
15
+ # Some general Namespaces to support in any case
16
+ @prefixes = {
17
+ "http://www.w3.org/2004/02/skos/core#" => "skos:",
18
+ "http://www.w3.org/2008/05/skos#" => "skos:",
19
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#" => "rdf:",
20
+ default_namespace_url => ":"
21
+ }
22
+ # Add the namespaces specified in the Iqvoc config
23
+ Iqvoc.rdf_namespaces.each do |pref, uri|
24
+ @prefixes[uri] = "#{pref.to_s}:"
25
+ end
26
+
27
+ @seen_first_level_objects = {}
28
+
29
+ @existing_origins = {} # To prevent the creation of first level objects we already have
30
+ FIRST_LEVEL_OBJECT_CLASSES.each do |klass|
31
+ klass.select("origin").all.each do |thing|
32
+ @existing_origins[thing.origin] = klass
33
+ end
34
+ end
35
+
36
+ import(file)
37
+ end
38
+
39
+ private
40
+
41
+ def import(file)
42
+ types = {} # type identifier ("namespace:SomeClass") to Iqvoc class assignment hash
43
+ FIRST_LEVEL_OBJECT_CLASSES.each do |klass|
44
+ types["#{klass.rdf_namespace}:#{klass.rdf_class}"] = klass
45
+ end
46
+ file.each do |line|
47
+ import_first_level_objects(types, *extract_triple(line))
48
+ end
49
+ new_subjects = @seen_first_level_objects.dup # Remember the objects seen yet, because they are the ones to be published later
50
+
51
+ file.rewind if file.is_a?(IO)
52
+ types = {}
53
+ SECOND_LEVEL_OBJECT_CLASSES.each do |klass|
54
+ types["#{klass.rdf_namespace}:#{klass.rdf_predicate}"] = klass
55
+ end
56
+ file.each do |line|
57
+ import_second_level_objects(types, *extract_triple(line))
58
+ end
59
+
60
+ new_subjects.each do |id, subject|
61
+ if subject.valid_with_full_validation?
62
+ subject.publish
63
+ subject.save!
64
+ else
65
+ Rails.logger.warn "WARNING: Subject not valid: '#{subject.origin}'. Won't be published automatically.."
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ def import_first_level_objects(types, subject, predicate, object)
72
+ if (predicate == "rdf:type" && types[object] && subject =~ /^:(.+)$/)
73
+ # We've found a subject definition with a class we know and which is in our responsibility (":")
74
+ origin = $1
75
+
76
+ if (@existing_origins[origin])
77
+ if (types[object] == @existing_origins[origin])
78
+ Rails.logger.info "Iqvoc::SkosImporter: Subject with origin '#{origin}' already exists. Skipping duplicate creation (should be no problem)."
79
+ else
80
+ Rails.logger.warn "Iqvoc::SkosImporter: Subject with origin '#{origin} already exists but has another class (#{@existing_origins[origin]}) then the one I wanted to create (#{types[object]}). You seem to have a problem with your configuration!"
81
+ end
82
+ else
83
+ @seen_first_level_objects[origin] = types[object].create!(:origin => origin)
84
+ end
85
+ end
86
+ end
87
+
88
+ def import_second_level_objects(types, subject, predicate, object)
89
+ return unless (subject =~ /^:(.*)$/ && types[predicate]) # We're not responsible for this
90
+
91
+ # Load the subject and replace the string by the respective data object
92
+ subject_origin = $1
93
+ subject = load_first_level_object(subject_origin)
94
+ unless subject
95
+ Rails.logger.warn "Iqvoc::SkosImporter: Couldn't find Subject with origin '#{subject_origin}. Skipping entry '#{subject} #{predicate} #{object}.'"
96
+ return
97
+ end
98
+
99
+ # Load the data object for the object string if this is representing a thing in our domain
100
+ if (object =~ /^:(.*)$/ && types[predicate])
101
+ object_origin = $1
102
+ object = load_first_level_object(object_origin)
103
+ unless object
104
+ Rails.logger.warn "Iqvoc::SkosImporter: Couldn't find Object with origin '#{object_origin}. Skipping entry ':#{subject_origin} #{predicate} #{object}.'"
105
+ return
106
+ end
107
+ end
108
+
109
+ types[predicate].build_from_rdf(subject, predicate, object)
110
+ end
111
+
112
+ def load_first_level_object(origin)
113
+ unless @seen_first_level_objects[origin]
114
+ FIRST_LEVEL_OBJECT_CLASSES.each do |klass|
115
+ @seen_first_level_objects[origin] = klass.by_origin(origin).last
116
+ break if @seen_first_level_objects[origin]
117
+ end
118
+ end
119
+ @seen_first_level_objects[origin]
120
+ end
121
+
122
+ def extract_triple(line)
123
+ raise "'#{line}' doesn't look like valid ntriples data." unless line =~ /^(.*)\.\w*$/
124
+ line = $1.squish
125
+
126
+ triple = line.split(' ', 3) # The first one are uris the last can be a literal too
127
+
128
+ triple.each do |e| # Do some fun with the uris and literals
129
+ @prefixes.keys.each do |uri_prefix| # Use prefixes instead of full uris
130
+ e.gsub! /<#{uri_prefix}([^>]*)>/ do |matches|
131
+ @prefixes[uri_prefix] + $1.gsub(".", "_")
132
+ end
133
+ end
134
+ e.squish!
135
+ e.gsub!(/^:(.*)$/) do
136
+ ":#{OriginMapping.merge($1)}" # Force correct origins in the default namespace
137
+ end
138
+ end
139
+
140
+ triple
141
+ end
142
+
143
+ end
144
+ end
@@ -0,0 +1,19 @@
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
+ VERSION = "3.2.3"
19
+ end
@@ -0,0 +1,151 @@
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 Versioning
19
+
20
+ extend ActiveSupport::Concern
21
+
22
+ included do
23
+
24
+ # ********* Relations
25
+
26
+ belongs_to :published_version, :foreign_key => 'published_version_id', :class_name => name
27
+
28
+ belongs_to :locking_user, :foreign_key => 'locked_by', :class_name => 'User'
29
+
30
+ # ********* Scopes
31
+
32
+ scope :by_origin, lambda { |origin|
33
+ where(:origin => origin)
34
+ }
35
+
36
+ scope :published, lambda {
37
+ where(arel_table[:published_at].not_eq(nil))
38
+ }
39
+ scope :unpublished, lambda {
40
+ where(:published_at => nil)
41
+ }
42
+ # The following scope returns all objects which should be selectable by the editor
43
+ scope :editor_selectable, lambda {
44
+ where(
45
+ arel_table[:published_at].not_eq(nil).or( # == published (is there a way to OR comibne two scopes? [published OROPERATOR where(...)])
46
+ arel_table[:published_at].eq(nil).and(arel_table[:published_version_id].eq(nil)) # this are all unpublished with no published version
47
+ )
48
+ )
49
+ }
50
+
51
+ scope :in_edit_mode, lambda {
52
+ where(arel_table[:locked_by].not_eq(nil))
53
+ }
54
+
55
+ scope :unpublished_or_follow_up, lambda {
56
+ where(
57
+ arel_table[:published_at].eq(nil).or(
58
+ arel_table[:follow_up].not_eq(nil)
59
+ )
60
+ )
61
+ }
62
+
63
+ scope :unsynced, where(:rdf_updated_at => nil)
64
+
65
+ end
66
+
67
+ # ********* Methods
68
+
69
+ def branch(user)
70
+ new_version = self.clone(:include => self.class.includes_to_deep_cloning)
71
+ new_version.lock_by_user(user.id)
72
+ new_version.increment!(:rev)
73
+ new_version.published_version_id = self.id
74
+ new_version.unpublish
75
+ new_version.send(:"#{Iqvoc.change_note_class_name.to_relation_name}").build(
76
+ :language => I18n.locale.to_s,
77
+ :annotations_attributes => [
78
+ { :namespace => "dct", :predicate => "creator", :value => user.name },
79
+ { :namespace => "dct", :predicate => "modified", :value => DateTime.now.to_s }
80
+ ])
81
+ new_version
82
+ end
83
+
84
+ def publish
85
+ write_attribute(:published_at, Time.now)
86
+ write_attribute(:to_review, nil)
87
+ write_attribute(:published_version_id, nil)
88
+ end
89
+
90
+ def unpublish
91
+ write_attribute(:published_at, nil)
92
+ end
93
+
94
+ def published?
95
+ read_attribute(:published_at).present?
96
+ end
97
+
98
+ # Editor selectable if published or no published version exists (before
99
+ # first publication)
100
+ def editor_selectable?
101
+ published? || read_attribute(:published_version_id).blank?
102
+ end
103
+
104
+ def lock_by_user(user_id)
105
+ write_attribute(:locked_by, user_id)
106
+ end
107
+
108
+ def locked?
109
+ locked_by?
110
+ end
111
+
112
+ def state
113
+ if published?
114
+ I18n.t("txt.common.state.published")
115
+ elsif !published? && in_review?
116
+ I18n.t("txt.common.state.in_review")
117
+ elsif !published? && !in_review?
118
+ I18n.t("txt.common.state.checked_out")
119
+ end
120
+ end
121
+
122
+ def unlock
123
+ write_attribute(:locked_by, nil)
124
+ end
125
+
126
+ def in_review?
127
+ read_attribute(:to_review).present?
128
+ end
129
+
130
+ def to_review
131
+ write_attribute(:to_review, true)
132
+ end
133
+
134
+ module ClassMethods
135
+
136
+ def include_to_deep_cloning(*association_names)
137
+ (@@include_to_deep_cloning ||= {})[self] ||= []
138
+ association_names.each do |association_name|
139
+ @@include_to_deep_cloning[self] << association_name
140
+ end
141
+ end
142
+
143
+ def includes_to_deep_cloning
144
+ (@@include_to_deep_cloning ||= {})[self] ||= []
145
+ (@@include_to_deep_cloning.keys & self.ancestors).map{|c| @@include_to_deep_cloning[c]}.flatten.compact
146
+ end
147
+
148
+ end
149
+
150
+ end
151
+ end
data/lib/iqvoc.rb ADDED
@@ -0,0 +1,228 @@
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
+ require 'string'
18
+
19
+ module Iqvoc
20
+
21
+ unless Iqvoc.const_defined?(:Application)
22
+ require File.join(File.dirname(__FILE__), '../config/engine')
23
+ end
24
+
25
+ mattr_accessor :title,
26
+ :searchable_class_names,
27
+ :unlimited_search_results,
28
+ :available_languages,
29
+ :default_rdf_namespace_helper_methods,
30
+ :rdf_namespaces,
31
+ :change_note_class_name,
32
+ :additional_js_files,
33
+ :additional_css_files,
34
+ :first_level_class_configuration_modules,
35
+ :ability_class_name
36
+
37
+ self.title = "iQvoc"
38
+
39
+ self.searchable_class_names = [
40
+ 'Labeling::SKOS::Base',
41
+ 'Labeling::SKOS::PrefLabel',
42
+ 'Note::Base'
43
+ ]
44
+ self.unlimited_search_results = false
45
+
46
+ self.available_languages = [:en, :de]
47
+
48
+ self.default_rdf_namespace_helper_methods = [:iqvoc_default_rdf_namespaces]
49
+
50
+ self.rdf_namespaces = {
51
+ :rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
52
+ :rdfs => "http://www.w3.org/2000/01/rdf-schema#",
53
+ :owl => "http://www.w3.org/2002/07/owl#",
54
+ :skos => "http://www.w3.org/2004/02/skos/core#",
55
+ :dct => "http://purl.org/dc/terms/"
56
+ }
57
+
58
+ # The class to use for automatic generation of change notes on every save
59
+ self.change_note_class_name = 'Note::SKOS::ChangeNote'
60
+
61
+ # Use these config hooks in your engine to inject your custom js and css includes.
62
+ self.additional_js_files = []
63
+ self.additional_css_files = []
64
+
65
+ self.first_level_class_configuration_modules = [] # Will be set in the modules
66
+
67
+ self.ability_class_name = 'Iqvoc::Ability'
68
+
69
+ def self.change_note_class
70
+ change_note_class_name.constantize
71
+ end
72
+
73
+ def self.searchable_classes
74
+ searchable_class_names.map(&:constantize)
75
+ end
76
+
77
+ def self.first_level_classes
78
+ self.first_level_class_configuration_modules.map { |mod| mod.send(:base_class) }
79
+ end
80
+
81
+ def self.ability_class
82
+ ability_class_name.constantize
83
+ end
84
+
85
+ # ************** Concept specific settings **************
86
+
87
+ module Concept
88
+
89
+ Iqvoc.first_level_class_configuration_modules << self
90
+
91
+ mattr_accessor :base_class_name,
92
+ :broader_relation_class_name, :further_relation_class_names,
93
+ :pref_labeling_class_name, :pref_labeling_languages, :further_labeling_class_names,
94
+ :match_class_names,
95
+ :note_class_names,
96
+ :additional_association_class_names,
97
+ :view_sections,
98
+ :include_module_names
99
+
100
+ self.base_class_name = 'Concept::SKOS::Base'
101
+
102
+ self.broader_relation_class_name = 'Concept::Relation::SKOS::Broader::Mono'
103
+ self.further_relation_class_names = [ 'Concept::Relation::SKOS::Related' ]
104
+
105
+ self.pref_labeling_class_name = 'Labeling::SKOS::PrefLabel'
106
+ self.pref_labeling_languages = [:en, :de]
107
+ self.further_labeling_class_names = { 'Labeling::SKOS::AltLabel' => [:de, :en] }
108
+
109
+ self.note_class_names = [
110
+ Iqvoc.change_note_class_name,
111
+ 'Note::SKOS::Definition',
112
+ 'Note::SKOS::EditorialNote',
113
+ 'Note::SKOS::Example',
114
+ 'Note::SKOS::HistoryNote',
115
+ 'Note::SKOS::ScopeNote'
116
+ ]
117
+
118
+ self.match_class_names = [
119
+ 'Match::SKOS::CloseMatch',
120
+ 'Match::SKOS::ExactMatch',
121
+ 'Match::SKOS::RelatedMatch',
122
+ 'Match::SKOS::BroadMatch',
123
+ 'Match::SKOS::NarrowMatch',
124
+ ]
125
+
126
+ self.additional_association_class_names = {}
127
+
128
+ self.view_sections = ["main", "labels", "relations", "notes", "matches"]
129
+
130
+ self.include_module_names = []
131
+
132
+ # Do not use the following method in models. This will probably cause a
133
+ # loading loop (something like "expected file xyz to load ...")
134
+ def self.base_class
135
+ base_class_name.constantize
136
+ end
137
+
138
+ def self.pref_labeling_class
139
+ pref_labeling_class_name.constantize
140
+ end
141
+
142
+ def self.labeling_class_names
143
+ { pref_labeling_class_name => pref_labeling_languages }.merge(further_labeling_class_names)
144
+ end
145
+
146
+ def self.labeling_classes
147
+ { pref_labeling_class => pref_labeling_languages }.merge(further_labeling_classes)
148
+ end
149
+
150
+ def self.broader_relation_class
151
+ broader_relation_class_name.constantize
152
+ end
153
+
154
+ def self.further_labeling_classes
155
+ further_labeling_class_names.keys.each_with_object({}) do |class_name, hash|
156
+ hash[class_name.constantize] = further_labeling_class_names[class_name]
157
+ end
158
+ end
159
+
160
+ def self.relation_class_names
161
+ further_relation_class_names + [broader_relation_class_name, broader_relation_class.narrower_class.name]
162
+ end
163
+
164
+ def self.relation_classes
165
+ relation_class_names.map(&:constantize)
166
+ end
167
+
168
+ def self.further_relation_classes
169
+ further_relation_class_names.map(&:constantize)
170
+ end
171
+
172
+ def self.note_classes
173
+ note_class_names.map(&:constantize)
174
+ end
175
+
176
+ def self.match_classes
177
+ match_class_names.map(&:constantize)
178
+ end
179
+
180
+ def self.additional_association_classes
181
+ additional_association_class_names.keys.each_with_object({}) do |class_name, hash|
182
+ hash[class_name.constantize] = additional_association_class_names[class_name]
183
+ end
184
+ end
185
+
186
+ def self.supports_multi_language_pref_labelings?
187
+ pref_labeling_languages.size > 1
188
+ end
189
+
190
+ def self.include_modules
191
+ include_module_names.map(&:constantize)
192
+ end
193
+
194
+ end
195
+
196
+ # ************** Collection specific settings **************
197
+
198
+ module Collection
199
+
200
+ mattr_accessor :base_class_name
201
+
202
+ self.base_class_name = 'Collection::Unordered'
203
+
204
+ def self.base_class
205
+ base_class_name.constantize
206
+ end
207
+ end
208
+
209
+ # ************** Label specific settings **************
210
+
211
+ module Label
212
+
213
+ mattr_accessor :base_class_name
214
+
215
+ self.base_class_name = 'Label::SKOS::Base'
216
+
217
+ # Do not use the following method in models. This will probably cause a
218
+ # loading loop (something like "expected file xyz to load ...")
219
+ def self.base_class
220
+ base_class_name.constantize
221
+ end
222
+
223
+ end
224
+
225
+ end
226
+
227
+ # FIXME: For yet unknown reasons, the load hook gets to run 2 times
228
+ ActiveSupport.run_load_hooks(:after_iqvoc_config, Iqvoc)