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,61 @@
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 'test_helper'
18
+ require 'integration_test_helper'
19
+
20
+ class BrowseConceptsAndLabelsTest < ActionDispatch::IntegrationTest
21
+
22
+ setup do
23
+ @concepts = [
24
+ [:en, "Tree"],
25
+ [:en, "Forest"],
26
+ [:de, "Baum"],
27
+ [:de, "Forst"]
28
+ ].map { |lang, text|
29
+ FactoryGirl.create(:concept, :pref_labelings => [Factory(:pref_labeling, :target => Factory(:pref_label, :language => lang, :value => text))])
30
+ }
31
+ end
32
+
33
+ test "Selecting a concept in alphabetical view" do
34
+ letter = "T" # => Only the "Tree" should show up in the english version
35
+ visit alphabetical_concepts_path(:lang => 'en', :letter => letter, :format => :html)
36
+ assert page.has_link?(@concepts[0].pref_label.to_s),
37
+ "Concept '#{@concepts[0].pref_label}' not found on alphabetical concepts list (letter: #{letter})"
38
+ assert !page.has_content?(@concepts[1].pref_label.to_s),
39
+ "Found concept '#{@concepts[1].pref_label}' on alphabetical concepts list (letter: #{letter})"
40
+ click_link_or_button(@concepts[0].pref_label.to_s)
41
+ assert_equal concept_path(@concepts[0], :lang => 'en', :format => :html), URI.parse(current_url).path
42
+
43
+ letter = "F" # => Only the "Forest" should show up in the english version
44
+ visit alphabetical_concepts_path(:lang => 'en', :letter => letter, :format => :html)
45
+ assert page.has_link?("Forest")
46
+ assert !page.has_link?("Forst")
47
+ assert !page.has_link?("Tree")
48
+ assert !page.has_link?("Baum")
49
+ end
50
+
51
+ test "Showing a concept page" do
52
+ visit concept_url(@concepts[1], :lang => 'en')
53
+ assert page.has_content?("#{@concepts[1].pref_label}"),
54
+ "'Preferred label: #{@concepts[1].pref_label}' missing in concepts#show"
55
+ assert page.has_link?('Turtle'), "RDF link missing in concepts#show"
56
+ click_link_or_button('Turtle')
57
+ assert page.has_content?(":#{@concepts[1].origin} a skos:Concept"),
58
+ "'#{@concepts[1].origin} a skos:Concept' missing in turtle view"
59
+ end
60
+
61
+ end
@@ -0,0 +1,29 @@
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 'test_helper'
18
+ require 'integration_test_helper'
19
+
20
+ class BrowseStaticPagesTest < ActionDispatch::IntegrationTest
21
+
22
+ test "Show static pages" do
23
+ visit dashboard_url(:lang => 'de', :format => 'html')
24
+ assert page.has_link?("Über"), "Link 'Über' is missing"
25
+ click_link_or_button("Über")
26
+ assert_equal about_url(:lang => 'de', :format => 'html'), current_url
27
+ end
28
+
29
+ end
@@ -0,0 +1,42 @@
1
+ require 'integration_test_helper'
2
+ require 'database_cleaner'
3
+
4
+ DatabaseCleaner.strategy = :truncation
5
+
6
+ class ClientAugmentationTest < ActionDispatch::IntegrationTest
7
+
8
+ self.use_transactional_fixtures = false
9
+
10
+ setup do
11
+ @concept = FactoryGirl.create(:concept, :published_at => nil)
12
+ FactoryGirl.create(:concept, :published_at => nil)
13
+
14
+ Capybara.current_driver = Capybara.javascript_driver
15
+ DatabaseCleaner.start
16
+ end
17
+
18
+ teardown do
19
+ DatabaseCleaner.clean
20
+ Capybara.use_default_driver
21
+ end
22
+
23
+ test "dashboard concept overview" do
24
+ login("administrator")
25
+ visit dashboard_path(:lang => :de)
26
+
27
+ table = page.find("#content table")
28
+
29
+ assert table.has_css?("tr", :count => 3)
30
+ assert table.has_css?("tr.highlightable", :count => 2)
31
+ assert table.has_no_css?("tr.hover")
32
+
33
+ concept_row = table.all("tr")[1]
34
+
35
+ # click row to visit concept page
36
+ concept_row.click
37
+ uri = URI.parse(current_url)
38
+ uri = "%s?%s" % [uri.path, uri.query]
39
+ assert_equal concept_path(@concept, :published => 0, :lang => 'de', :format => 'html'), uri
40
+ end
41
+
42
+ end
@@ -0,0 +1,72 @@
1
+ require 'integration_test_helper'
2
+ require 'database_cleaner'
3
+
4
+ DatabaseCleaner.strategy = :truncation
5
+
6
+ class ClientEditConceptsTest < ActionDispatch::IntegrationTest
7
+
8
+ self.use_transactional_fixtures = false
9
+
10
+ setup do
11
+ @concept = FactoryGirl.create(:concept)
12
+
13
+ Capybara.current_driver = Capybara.javascript_driver
14
+ DatabaseCleaner.start
15
+ end
16
+
17
+ teardown do
18
+ DatabaseCleaner.clean
19
+ Capybara.use_default_driver
20
+ end
21
+
22
+ test "dynamic addition of notes" do
23
+ login("administrator")
24
+
25
+ # concept edit view
26
+ visit concept_path(@concept, :lang => "de", :format => "html")
27
+ click_link_or_button("Neue Version erstellen")
28
+ assert page.has_css?("#concept_edit")
29
+
30
+ section = page.find("#label_note_skos_definitions_data")
31
+ assert page.has_css?(".note_relation", :count => Iqvoc::Concept.note_class_names.length)
32
+ assert page.has_css?("#label_note_skos_definitions_data", :count => 1)
33
+ assert section.has_css?("li", :count => 1)
34
+
35
+ # unhide default note input
36
+ section.find("input[type=button]").click
37
+ assert section.has_css?("li", :count => 1)
38
+
39
+ # add another note input
40
+ section.find("input[type=button]").click
41
+ assert section.has_css?("li", :count => 2)
42
+
43
+ # add some note text
44
+ section.fill_in "concept_note_skos_definitions_attributes_0_value",
45
+ :with => "lorem ipsum\ndolor sit amet"
46
+ section.fill_in "concept_note_skos_definitions_attributes_1_value",
47
+ :with => "consectetur adipisicing elit"
48
+
49
+ assert section.all("textarea")[0].value == "lorem ipsum\ndolor sit amet"
50
+ assert section.all("textarea")[1].value == "consectetur adipisicing elit"
51
+
52
+ # save concept
53
+ page.click_link_or_button("Speichern")
54
+ assert page.has_content?("Konzept wurde erfolgreich aktualisiert.")
55
+ # return to edit mode
56
+ page.click_link_or_button("Bearbeitung fortsetzen")
57
+ assert page.has_css?("#concept_edit")
58
+
59
+ section = page.find("#label_note_skos_definitions_data")
60
+
61
+ assert section.has_css?("li", :count => 2)
62
+ assert section.has_css?("[type=checkbox]", :count => 2)
63
+ assert section.has_no_css?("li.deleted")
64
+
65
+ # mark note for deletion
66
+ checkbox_id = "concept_note_skos_definitions_attributes_1__destroy"
67
+ section.check(checkbox_id)
68
+ section.find("##{checkbox_id}").trigger("change") # apparently `check` doesn't do this automatically
69
+ assert section.has_css?("li.deleted", :count => 1)
70
+ end
71
+
72
+ end
@@ -0,0 +1,110 @@
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 'integration_test_helper'
18
+
19
+ class CollectionCircularityTest < ActionDispatch::IntegrationTest
20
+
21
+ setup do
22
+ @coll1 = FactoryGirl.create(:collection)
23
+ @coll2 = FactoryGirl.create(:collection)
24
+ @coll3 = FactoryGirl.create(:collection)
25
+ @concept1 = FactoryGirl.create(:concept)
26
+ @concept2 = FactoryGirl.create(:concept)
27
+ @concept3 = FactoryGirl.create(:concept)
28
+ end
29
+
30
+ test "inline assignments are persisted" do
31
+ login("administrator")
32
+
33
+ delimiter = "," # without space
34
+
35
+ visit edit_collection_path(@coll1, :lang => "en", :format => "html")
36
+ fill_in "concept_inline_member_collection_origins",
37
+ :with => [@coll2.origin, @coll3.origin].join(delimiter)
38
+ fill_in "concept_inline_member_concept_origins",
39
+ :with => [@concept1.origin, @concept2.origin, @concept3.origin].join(delimiter)
40
+ click_button "Save"
41
+
42
+ assert page.has_no_css?(".flash_error")
43
+ assert page.has_content?(I18n.t("txt.controllers.collections.save.success"))
44
+ assert page.has_link?(@coll2.pref_label.to_s)
45
+ assert page.has_link?(@coll3.pref_label.to_s)
46
+ assert page.has_link?(@concept1.pref_label.to_s)
47
+ assert page.has_link?(@concept2.pref_label.to_s)
48
+ assert page.has_link?(@concept3.pref_label.to_s)
49
+
50
+ click_link_or_button "Edit"
51
+ fill_in "concept_inline_member_collection_origins", :with => ""
52
+ fill_in "concept_inline_member_concept_origins", :with => ""
53
+ click_button "Save"
54
+
55
+ assert page.has_no_css?(".flash_error")
56
+ assert page.has_content?(I18n.t("txt.controllers.collections.save.success"))
57
+ assert page.has_no_link?(@coll2.pref_label.to_s)
58
+ assert page.has_no_link?(@coll3.pref_label.to_s)
59
+ assert page.has_no_link?(@concept1.pref_label.to_s)
60
+ assert page.has_no_link?(@concept2.pref_label.to_s)
61
+ assert page.has_no_link?(@concept3.pref_label.to_s)
62
+
63
+ delimiter = ", " # with space
64
+
65
+ click_link_or_button "Edit"
66
+ fill_in "concept_inline_member_collection_origins",
67
+ :with => [@coll2.origin, @coll3.origin].join(delimiter)
68
+ fill_in "concept_inline_member_concept_origins",
69
+ :with => [@concept1.origin, @concept2.origin, @concept3.origin].join(delimiter)
70
+ click_button "Save"
71
+
72
+ assert page.has_no_css?(".flash_error")
73
+ assert page.has_content?(I18n.t("txt.controllers.collections.save.success"))
74
+ assert page.has_link?(@coll2.pref_label.to_s)
75
+ assert page.has_link?(@coll3.pref_label.to_s)
76
+ assert page.has_link?(@concept1.pref_label.to_s)
77
+ assert page.has_link?(@concept2.pref_label.to_s)
78
+ assert page.has_link?(@concept3.pref_label.to_s)
79
+ end
80
+
81
+ test "circular sub-collection references are rejected during update" do
82
+ login("administrator")
83
+
84
+ # add coll2 as subcollection of coll1
85
+ visit edit_collection_path(@coll1, :lang => "de", :format => "html")
86
+ fill_in "concept_inline_member_collection_origins",
87
+ :with => "%s," % @coll2.origin
88
+ click_button "Speichern"
89
+
90
+ assert page.has_no_css?(".flash_error")
91
+ assert page.has_content?(I18n.t("txt.controllers.collections.save.success"))
92
+ assert page.has_link?(@coll2.pref_label.to_s,
93
+ :href => collection_path(@coll2, :lang => "de", :format => "html"))
94
+
95
+ # add coll1 as subcollection of coll2
96
+ visit edit_collection_path(@coll2, :lang => "de", :format => "html")
97
+ fill_in "concept_inline_member_collection_origins",
98
+ :with => "%s," % @coll1.origin
99
+ click_button "Speichern"
100
+
101
+ assert page.has_css?(".flash_error")
102
+ assert page.has_css?("#concept_edit")
103
+ assert page.source.include?( # XXX: page.has_content? didn't work
104
+ I18n.t("txt.controllers.collections.circular_error") % @coll1.pref_label)
105
+
106
+ # ensure coll1 is not a subcollection of coll2
107
+ visit collection_path(@coll2, :lang => "de", :format => "html")
108
+ assert page.has_no_css?(".relation ul.treeview li") # XXX: too unspecific
109
+ end
110
+ end
@@ -0,0 +1,61 @@
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 'test_helper'
18
+ require 'integration_test_helper'
19
+
20
+ class ConceptTest < ActionDispatch::IntegrationTest
21
+
22
+ setup do
23
+ @concept1 = FactoryGirl.create(:concept, :narrower_relations => [])
24
+ @concept2 = FactoryGirl.create(:concept, :narrower_relations => [])
25
+ @concept3 = FactoryGirl.create(:concept, :narrower_relations => [])
26
+ end
27
+
28
+ test "showing published concept" do
29
+ visit "/en/concepts/#{@concept1.origin}.html"
30
+ assert page.has_content?("#{@concept1.origin}")
31
+ assert page.has_content?("#{@concept1.pref_label}")
32
+ end
33
+
34
+ test "persisting inline relations" do
35
+ login "administrator"
36
+
37
+ visit new_concept_path(:lang => "en", :format => "html", :published => 0)
38
+ fill_in "concept_relation_skos_relateds",
39
+ :with => "#{@concept1.origin},#{@concept2.origin},"
40
+ click_button "Save"
41
+
42
+ assert page.has_content? I18n.t("txt.controllers.versioned_concept.success")
43
+ assert page.has_css?("#concept_relation_skos_relateds a", :count => 2)
44
+
45
+ click_link_or_button I18n.t("txt.views.versioning.to_edit_mode")
46
+ fill_in "concept_relation_skos_relateds", :with => ""
47
+ click_button "Save"
48
+
49
+ assert page.has_content? I18n.t("txt.controllers.versioned_concept.update_success")
50
+ assert page.has_no_css?("#concept_relation_skos_relateds a")
51
+
52
+ click_link_or_button I18n.t("txt.views.versioning.edit_mode")
53
+ fill_in "concept_relation_skos_relateds",
54
+ :with => "#{@concept1.origin}, #{@concept2.origin}, #{@concept3.origin}"
55
+ click_button "Save"
56
+
57
+ assert page.has_content? I18n.t("txt.controllers.versioned_concept.update_success")
58
+ assert page.has_css?("#concept_relation_skos_relateds a", :count => 3)
59
+ end
60
+
61
+ end
@@ -0,0 +1,40 @@
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 'test_helper'
18
+ require 'integration_test_helper'
19
+
20
+ class EditConceptsTest < ActionDispatch::IntegrationTest
21
+
22
+ setup do
23
+ @concept = Factory(:concept)
24
+ end
25
+
26
+ test "Create a new concept version" do
27
+ login('administrator')
28
+ visit concept_path(@concept, :lang => 'de', :format => 'html')
29
+ assert page.has_button?("Neue Version erstellen"), "Button 'Neue Version erstellen' is missing on concepts#show"
30
+ click_link_or_button("Neue Version erstellen")
31
+ assert_equal edit_concept_url(@concept, :published => 0, :lang => 'de', :format => 'html'), current_url
32
+
33
+ visit concept_path(@concept, :lang => 'de', :format => 'html')
34
+ assert !page.has_button?("Neue Version erstellen"), "Button 'Neue Version erstellen' although there already is a new version"
35
+ assert page.has_link?("Vorschau der Version in Bearbeitung"), "Link 'Vorschau der Version in Bearbeitung' is missing"
36
+ click_link("Vorschau der Version in Bearbeitung")
37
+ assert_equal concept_url(@concept, :published => 0, :lang => 'de', :format => 'html'), current_url
38
+ end
39
+
40
+ end
@@ -0,0 +1,86 @@
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 'test_helper'
18
+ require 'integration_test_helper'
19
+
20
+ class NoteAnnotationsTest < ActionDispatch::IntegrationTest
21
+
22
+ test "creating and retrieving change notes" do
23
+ login "administrator"
24
+
25
+ visit new_concept_path(:lang => "en", :format => "html", :published => 0)
26
+ fill_in "concept_labelings_by_text_labeling_skos_pref_labels_en",
27
+ :with => "Foo"
28
+ fill_in "concept_note_skos_change_notes_attributes_0_value",
29
+ :with => "lorem ipsum"
30
+ click_button "Save"
31
+
32
+ assert page.has_content? I18n.t("txt.controllers.versioned_concept.success")
33
+ assert page.has_css?("dl.note_annotations", :count => 1)
34
+
35
+ click_link_or_button I18n.t("txt.views.versioning.publishing")
36
+ assert page.has_content? I18n.t("txt.controllers.versioning.published")
37
+ assert page.has_css?("dl.note_annotations", :count => 1)
38
+
39
+ click_link_or_button I18n.t("txt.views.versioning.versioning_mode")
40
+ fill_in "concept_note_skos_change_notes_attributes_1_value",
41
+ :with => "dolor sit amet"
42
+ click_button "Save"
43
+
44
+ assert page.has_css?("dl.note_annotations", :count => 2)
45
+
46
+ click_link_or_button I18n.t("txt.views.versioning.publishing")
47
+ assert page.has_content? I18n.t("txt.controllers.versioning.published")
48
+ assert page.has_css?("dl.note_annotations", :count => 2)
49
+
50
+ # TTL & RDF/XML
51
+
52
+ ttl_uri = page.all("#abstract_uri a")[-2][:href]
53
+ xml_uri = page.all("#abstract_uri a")[-1][:href]
54
+
55
+ visit ttl_uri
56
+ ttl = page.source.
57
+ gsub(/^ *| *$/, ""). # ignore indentation
58
+ gsub(/\d/, "#") # neutralize timestamps
59
+ assert ttl.include?("skos:changeNote [\n" +
60
+ "rdfs:comment \"lorem ipsum\"@en\n" +
61
+ "]")
62
+ assert ttl.include?("skos:changeNote [\n" +
63
+ "rdfs:comment \"dolor sit amet\"@en;\n" +
64
+ "dct:creator \"Test User\";\n" +
65
+ "dct:modified \"####-##-##T##:##:##+##:##\"\n" +
66
+ "]")
67
+
68
+ visit xml_uri
69
+ xml = page.source.
70
+ gsub(/^ *| *$/, ""). # ignore indentation
71
+ gsub(/\d/, "#") # neutralize timestamps
72
+ assert xml.include?("<skos:changeNote>\n" +
73
+ "<rdf:Description>\n" +
74
+ "<rdfs:comment xml:lang=\"en\">lorem ipsum</rdfs:comment>\n" +
75
+ "</rdf:Description>\n" +
76
+ "</skos:changeNote>")
77
+ assert xml.include?("<skos:changeNote>\n" +
78
+ "<rdf:Description>\n" +
79
+ "<rdfs:comment xml:lang=\"en\">dolor sit amet</rdfs:comment>\n" +
80
+ "<dct:creator>Test User</dct:creator>\n" +
81
+ "<dct:modified>####-##-##T##:##:##+##:##</dct:modified>\n" +
82
+ "</rdf:Description>\n" +
83
+ "</skos:changeNote>\n")
84
+ end
85
+
86
+ end