curation_concerns 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -9
  3. data/.rspec +1 -1
  4. data/.rubocop.yml +185 -0
  5. data/.travis.yml +0 -10
  6. data/CONTRIBUTING.md +117 -0
  7. data/Gemfile +5 -2
  8. data/README.md +18 -11
  9. data/Rakefile +23 -11
  10. data/VERSION +1 -1
  11. data/app/assets/images/audio.png +0 -0
  12. data/app/assets/images/loading.gif +0 -0
  13. data/app/assets/images/progressbar.gif +0 -0
  14. data/app/assets/javascripts/curation_concerns/application.js +2 -8
  15. data/app/assets/javascripts/curation_concerns/curation_concerns.js +1 -15
  16. data/app/assets/javascripts/curation_concerns/facet_mine.js +4 -10
  17. data/app/assets/javascripts/curation_concerns/fileupload.js +6 -0
  18. data/app/assets/javascripts/curation_concerns/uploader.js +183 -0
  19. data/app/assets/stylesheets/curation_concerns/_curation_concerns.scss +3 -0
  20. data/app/assets/stylesheets/curation_concerns/_positioning.scss +6 -0
  21. data/app/assets/stylesheets/curation_concerns/fileupload/jquery.fileupload-ui.scss +86 -0
  22. data/app/assets/stylesheets/curation_concerns/fileupload/thumbnail-scaling.css +3 -0
  23. data/app/assets/stylesheets/curation_concerns/fileupload.scss +48 -0
  24. data/app/assets/stylesheets/curation_concerns/modules/attributes.scss +10 -0
  25. data/app/assets/stylesheets/curation_concerns/modules/embargoes.scss +1 -1
  26. data/app/assets/stylesheets/curation_concerns/modules/forms.scss +0 -10
  27. data/app/assets/stylesheets/curation_concerns/modules/search_results.scss +7 -8
  28. data/app/controllers/concerns/curation_concerns/api.rb +77 -0
  29. data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +30 -12
  30. data/app/controllers/concerns/curation_concerns/catalog_controller.rb +9 -276
  31. data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +51 -40
  32. data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +60 -30
  33. data/app/controllers/concerns/curation_concerns/download_behavior.rb +51 -37
  34. data/app/controllers/concerns/curation_concerns/embargoes_controller_behavior.rb +29 -29
  35. data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +198 -0
  36. data/app/controllers/concerns/curation_concerns/leases_controller_behavior.rb +27 -20
  37. data/app/controllers/concerns/curation_concerns/manages_embargoes.rb +2 -7
  38. data/app/controllers/concerns/curation_concerns/parent_container.rb +20 -4
  39. data/app/controllers/concerns/curation_concerns/single_use_links_controller_behavior.rb +48 -0
  40. data/app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb +75 -0
  41. data/app/controllers/concerns/curation_concerns/themed_layout_controller.rb +0 -1
  42. data/app/controllers/concerns/curation_concerns/upload_sets_controller_behavior.rb +38 -0
  43. data/app/controllers/concerns/curation_concerns/welcome_controller_behavior.rb +8 -0
  44. data/app/controllers/concerns/curation_concerns/without_namespace.rb +2 -1
  45. data/app/controllers/curation_concerns/classify_concerns_controller.rb +9 -9
  46. data/app/controllers/curation_concerns/file_sets_controller.rb +5 -0
  47. data/app/controllers/curation_concerns/permissions_controller.rb +2 -3
  48. data/app/controllers/curation_concerns/single_use_links_controller.rb +5 -0
  49. data/app/controllers/curation_concerns/single_use_links_viewer_controller.rb +21 -0
  50. data/app/controllers/downloads_controller.rb +0 -1
  51. data/app/controllers/embargoes_controller.rb +0 -2
  52. data/app/controllers/leases_controller.rb +0 -2
  53. data/app/controllers/registrations_controller.rb +1 -2
  54. data/app/controllers/upload_sets_controller.rb +3 -0
  55. data/app/controllers/welcome_controller.rb +3 -0
  56. data/app/forms/curation_concerns/forms/collection_edit_form.rb +18 -2
  57. data/app/forms/curation_concerns/forms/file_set_edit_form.rb +15 -0
  58. data/app/forms/curation_concerns/forms/work_form.rb +57 -0
  59. data/app/helpers/curation_concerns/ability_helper.rb +24 -24
  60. data/app/helpers/curation_concerns/catalog_helper.rb +9 -8
  61. data/app/helpers/curation_concerns/collections_helper.rb +9 -12
  62. data/app/helpers/curation_concerns/embargo_helper.rb +0 -2
  63. data/app/helpers/curation_concerns/file_set_helper.rb +31 -0
  64. data/app/helpers/curation_concerns/lease_helper.rb +0 -3
  65. data/app/helpers/curation_concerns/main_app_helpers.rb +1 -3
  66. data/app/helpers/curation_concerns/render_constraints_helper.rb +5 -5
  67. data/app/helpers/curation_concerns/search_paths_helper.rb +5 -7
  68. data/app/helpers/curation_concerns/title_helper.rb +3 -7
  69. data/app/helpers/curation_concerns/url_helper.rb +4 -6
  70. data/app/inputs/multifile_input.rb +8 -0
  71. data/app/jobs/visibility_copy_job.rb +22 -0
  72. data/app/presenters/curation_concerns/collection_presenter.rb +14 -32
  73. data/app/presenters/curation_concerns/embargo_presenter.rb +26 -0
  74. data/app/presenters/curation_concerns/file_set_presenter.rb +34 -0
  75. data/app/presenters/curation_concerns/lease_presenter.rb +30 -0
  76. data/app/presenters/curation_concerns/model_proxy.rb +27 -0
  77. data/app/presenters/curation_concerns/permission_badge.rb +61 -0
  78. data/app/presenters/curation_concerns/presenter_factory.rb +45 -0
  79. data/app/presenters/curation_concerns/presents_attributes.rb +25 -0
  80. data/app/presenters/curation_concerns/version_list_presenter.rb +18 -0
  81. data/app/presenters/curation_concerns/version_presenter.rb +27 -0
  82. data/app/presenters/curation_concerns/work_show_presenter.rb +33 -0
  83. data/app/renderers/curation_concerns/attribute_renderer.rb +75 -0
  84. data/app/search_builders/curation_concerns/deactivated_embargo_search_builder.rb +10 -0
  85. data/app/search_builders/curation_concerns/deactivated_lease_search_builder.rb +10 -0
  86. data/app/search_builders/curation_concerns/embargo_search_builder.rb +23 -0
  87. data/app/search_builders/curation_concerns/expired_embargo_search_builder.rb +11 -0
  88. data/app/search_builders/curation_concerns/expired_lease_search_builder.rb +11 -0
  89. data/app/search_builders/curation_concerns/lease_search_builder.rb +23 -0
  90. data/app/search_builders/curation_concerns/search_builder.rb +10 -16
  91. data/app/services/curation_concerns/curation_concern.rb +0 -5
  92. data/app/services/curation_concerns/embargo_service.rb +26 -4
  93. data/app/services/curation_concerns/lease_service.rb +14 -5
  94. data/app/services/curation_concerns/parent_service.rb +19 -0
  95. data/app/services/curation_concerns/restriction_service.rb +24 -0
  96. data/app/services/rights_service.rb +14 -0
  97. data/app/views/catalog/_action_menu_partials/_collection.html.erb +1 -1
  98. data/app/views/catalog/_action_menu_partials/_default.html.erb +5 -3
  99. data/app/views/catalog/_document_list.html.erb +1 -1
  100. data/app/views/catalog/index.html.erb +1 -35
  101. data/app/views/collections/_edit_descriptions.html.erb +3 -4
  102. data/app/views/collections/_form.html.erb +1 -1
  103. data/app/views/collections/_form_permission.html.erb +1 -1
  104. data/app/views/collections/_search_form.html.erb +10 -0
  105. data/app/views/collections/_show_actions.html.erb +3 -3
  106. data/app/views/collections/_sort_and_per_page.html.erb +2 -2
  107. data/app/views/collections/show.html.erb +6 -6
  108. data/app/views/curation_concerns/base/_attribute_rows.html.erb +7 -0
  109. data/app/views/curation_concerns/base/_attributes.html.erb +6 -13
  110. data/app/views/curation_concerns/base/_form.html.erb +4 -5
  111. data/app/views/curation_concerns/base/_form_descriptive_fields.erb +2 -4
  112. data/app/views/curation_concerns/base/_form_files_and_links.html.erb +3 -5
  113. data/app/views/curation_concerns/base/_form_permission.html.erb +13 -26
  114. data/app/views/curation_concerns/base/_form_permission_note.html.erb +15 -0
  115. data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +2 -2
  116. data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +2 -2
  117. data/app/views/curation_concerns/base/_form_representative_image.html.erb +16 -4
  118. data/app/views/curation_concerns/base/_form_rights.html.erb +17 -0
  119. data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +4 -9
  120. data/app/views/curation_concerns/base/_related_files.html.erb +4 -4
  121. data/app/views/curation_concerns/base/_representative_media.html.erb +2 -4
  122. data/app/views/curation_concerns/base/_versioning.html.erb +23 -0
  123. data/app/views/curation_concerns/base/show.html.erb +13 -10
  124. data/app/views/curation_concerns/base/show.json.jbuilder +1 -0
  125. data/app/views/curation_concerns/base/versions.html.erb +6 -0
  126. data/app/views/curation_concerns/file_sets/_actions.html.erb +16 -0
  127. data/app/views/curation_concerns/file_sets/_file_set.html.erb +12 -0
  128. data/app/views/curation_concerns/{generic_files → file_sets}/_form.html.erb +7 -7
  129. data/app/views/curation_concerns/file_sets/_multiple_upload.html.erb +3 -0
  130. data/app/views/curation_concerns/{generic_files → file_sets}/edit.html.erb +0 -0
  131. data/app/views/curation_concerns/file_sets/jq_upload.json.jbuilder +8 -0
  132. data/app/views/curation_concerns/file_sets/media_display/_audio.html.erb +6 -0
  133. data/app/views/curation_concerns/file_sets/media_display/_default.html.erb +4 -0
  134. data/app/views/curation_concerns/file_sets/media_display/_image.html.erb +8 -0
  135. data/app/views/curation_concerns/file_sets/media_display/_office_document.html.erb +7 -0
  136. data/app/views/curation_concerns/file_sets/media_display/_pdf.html.erb +7 -0
  137. data/app/views/curation_concerns/file_sets/media_display/_video.html.erb +6 -0
  138. data/app/views/curation_concerns/file_sets/show.html.erb +15 -0
  139. data/app/views/curation_concerns/file_sets/show.json.jbuilder +1 -0
  140. data/app/views/curation_concerns/file_sets/upload/_alerts.html.erb +19 -0
  141. data/app/views/curation_concerns/file_sets/upload/_form.html.erb +6 -0
  142. data/app/views/curation_concerns/file_sets/upload/_form_fields.html.erb +45 -0
  143. data/app/views/curation_concerns/file_sets/upload/_script_templates.html.erb +61 -0
  144. data/app/views/curation_concerns/single_use_links/new_download.html.erb +5 -0
  145. data/app/views/curation_concerns/single_use_links/new_show.html.erb +5 -0
  146. data/app/views/curation_concerns/single_use_links_viewer/show.html.erb +10 -0
  147. data/app/views/error/single_use_error.html.erb +19 -0
  148. data/app/views/layouts/error.html.erb +33 -0
  149. data/app/views/leases/_list_expired_active_leases.html.erb +6 -1
  150. data/app/views/records/_rights_modal.html.erb +1 -0
  151. data/app/views/records/edit_fields/_default.html.erb +5 -0
  152. data/app/views/records/show_fields/_default.html.erb +6 -0
  153. data/app/views/shared/_add_content.html.erb +2 -14
  154. data/app/views/shared/_add_works.html.erb +14 -0
  155. data/app/views/shared/_my_actions.html.erb +9 -1
  156. data/app/views/shared/_site_actions.html.erb +1 -1
  157. data/app/views/shared/_site_search.html.erb +7 -7
  158. data/app/views/upload_sets/_edit.js.erb +15 -0
  159. data/app/views/upload_sets/_metadata.html.erb +50 -0
  160. data/app/views/upload_sets/_more_metadata.html.erb +7 -0
  161. data/app/views/upload_sets/edit.html.erb +26 -0
  162. data/app/views/{catalog/_home_text.html.erb → welcome/index.html.erb} +1 -0
  163. data/config/initializers/simple_form.rb +14 -0
  164. data/config/jetty.yml +5 -0
  165. data/config/locales/curation_concerns.en.yml +25 -4
  166. data/config/routes.rb +5 -0
  167. data/curation_concerns.gemspec +4 -6
  168. data/lib/curation_concerns/callbacks/registry.rb +48 -0
  169. data/lib/curation_concerns/callbacks.rb +26 -0
  170. data/lib/curation_concerns/controller_resource.rb +4 -4
  171. data/lib/curation_concerns/engine.rb +4 -2
  172. data/lib/curation_concerns/rails/routes.rb +23 -19
  173. data/lib/curation_concerns/single_use_error.rb +3 -0
  174. data/lib/curation_concerns/spec_support.rb +0 -2
  175. data/lib/curation_concerns/version.rb +1 -1
  176. data/lib/curation_concerns.rb +1 -2
  177. data/lib/generators/curation_concerns/install_generator.rb +34 -30
  178. data/lib/generators/curation_concerns/templates/catalog_controller.rb +236 -0
  179. data/lib/generators/curation_concerns/templates/config/authorities/rights.yml +19 -0
  180. data/lib/generators/curation_concerns/templates/{curation_concerns.css.scss → curation_concerns.scss} +0 -0
  181. data/lib/generators/curation_concerns/work/templates/actor_spec.rb.erb +1 -1
  182. data/lib/generators/curation_concerns/work/templates/controller_spec.rb.erb +1 -1
  183. data/lib/generators/curation_concerns/work/templates/form.rb.erb +8 -0
  184. data/lib/generators/curation_concerns/work/templates/form_spec.rb.erb +10 -0
  185. data/lib/generators/curation_concerns/work/templates/model.rb.erb +2 -2
  186. data/lib/generators/curation_concerns/work/templates/model_spec.rb.erb +1 -1
  187. data/lib/generators/curation_concerns/work/work_generator.rb +31 -26
  188. data/spec/abilities/collection_abilities_spec.rb +13 -13
  189. data/spec/abilities/embargo_and_lease_ability_spec.rb +23 -0
  190. data/spec/abilities/file_set_abilities_spec.rb +67 -0
  191. data/spec/abilities/generic_work_abilities_spec.rb +12 -12
  192. data/spec/actors/curation_concerns/embargo_actor_spec.rb +38 -0
  193. data/spec/actors/curation_concerns/file_set_actor_spec.rb +180 -0
  194. data/spec/actors/curation_concerns/lease_actor_spec.rb +39 -0
  195. data/spec/actors/curation_concerns/manages_embargoes_actor_spec.rb +44 -38
  196. data/spec/actors/curation_concerns/work_actor_spec.rb +121 -63
  197. data/spec/controllers/catalog_controller_spec.rb +30 -32
  198. data/spec/controllers/curation_concerns/classify_concerns_controller_spec.rb +2 -3
  199. data/spec/controllers/curation_concerns/collections_controller_spec.rb +93 -76
  200. data/spec/controllers/curation_concerns/file_sets_controller_json_spec.rb +106 -0
  201. data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +237 -0
  202. data/spec/controllers/curation_concerns/generic_works_controller_json_spec.rb +85 -0
  203. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +84 -72
  204. data/spec/controllers/curation_concerns/permissions_controller_spec.rb +8 -11
  205. data/spec/controllers/curation_concerns/single_use_links_controller_spec.rb +79 -0
  206. data/spec/controllers/curation_concerns/single_use_links_viewer_controller_spec.rb +74 -0
  207. data/spec/controllers/downloads_controller_spec.rb +49 -24
  208. data/spec/controllers/embargoes_controller_spec.rb +42 -51
  209. data/spec/controllers/leases_controller_spec.rb +53 -42
  210. data/spec/controllers/upload_sets_controller_spec.rb +76 -0
  211. data/spec/controllers/welcome_controller_spec.rb +12 -0
  212. data/spec/factories/collections.rb +5 -1
  213. data/spec/factories/{generic_files.rb → file_sets.rb} +6 -6
  214. data/spec/factories/generic_works.rb +5 -6
  215. data/spec/factories/users.rb +2 -4
  216. data/spec/features/add_file_spec.rb +11 -12
  217. data/spec/features/catalog_search_spec.rb +43 -0
  218. data/spec/features/collection_spec.rb +61 -46
  219. data/spec/features/create_work_spec.rb +26 -19
  220. data/spec/features/embargo_spec.rb +13 -12
  221. data/spec/features/lease_spec.rb +15 -16
  222. data/spec/features/update_file_spec.rb +11 -13
  223. data/spec/features/work_generator_spec.rb +34 -26
  224. data/spec/{helpers/curation_concerns/.keep → fixtures/empty_file.txt} +0 -0
  225. data/spec/fixtures/test.pdf +0 -0
  226. data/spec/forms/collection_edit_form_spec.rb +53 -9
  227. data/spec/forms/file_set_edit_form_spec.rb +53 -0
  228. data/spec/forms/work_form_spec.rb +54 -0
  229. data/spec/helpers/catalog_helper_spec.rb +9 -10
  230. data/spec/helpers/configuration_helper_spec.rb +1 -2
  231. data/spec/helpers/curation_concerns/collections_helper_spec.rb +8 -9
  232. data/spec/helpers/curation_concerns/file_set_helper_spec.rb +61 -0
  233. data/spec/helpers/render_constraints_helper_spec.rb +4 -4
  234. data/spec/helpers/url_helper_spec.rb +8 -7
  235. data/spec/indexers/collection_indexer_spec.rb +14 -0
  236. data/spec/indexers/file_set_indexing_service_spec.rb +69 -0
  237. data/spec/indexers/generic_work_indexing_service_spec.rb +22 -0
  238. data/spec/inputs/multifile_input_spec.rb +32 -0
  239. data/spec/jobs/active_fedora_id_based_job_spec.rb +10 -8
  240. data/spec/jobs/audit_job_spec.rb +28 -20
  241. data/spec/jobs/characterize_job_spec.rb +10 -15
  242. data/spec/jobs/create_derivatives_job_spec.rb +11 -9
  243. data/spec/jobs/import_url_job_spec.rb +14 -21
  244. data/spec/jobs/ingest_file_job_spec.rb +45 -0
  245. data/spec/jobs/ingest_local_file_job_spec.rb +13 -15
  246. data/spec/jobs/upload_set_update_job_spec.rb +30 -0
  247. data/spec/jobs/visibility_copy_job_spec.rb +61 -0
  248. data/spec/lib/curation_concerns/callbacks/registry_spec.rb +54 -0
  249. data/spec/lib/curation_concerns/callbacks_spec.rb +27 -0
  250. data/spec/lib/curation_concerns/messages_spec.rb +29 -30
  251. data/spec/lib/curation_concerns/readable_permissions_spec.rb +18 -20
  252. data/spec/lib/curation_concerns/writable_permissions_spec.rb +2 -4
  253. data/spec/matchers/metadata_field_matchers.rb +1 -1
  254. data/spec/matchers/response_matchers.rb +2 -2
  255. data/spec/matchers.rb +3 -2
  256. data/spec/models/checksum_audit_log_spec.rb +37 -32
  257. data/spec/models/curation_concerns/collection_behavior_spec.rb +50 -37
  258. data/spec/models/curation_concerns/file_set/derivatives_spec.rb +84 -0
  259. data/spec/models/curation_concerns/work_behavior_spec.rb +53 -0
  260. data/spec/models/file_set_spec.rb +601 -0
  261. data/spec/models/generic_work_spec.rb +15 -14
  262. data/spec/models/single_use_link_spec.rb +69 -0
  263. data/spec/models/solr_document_spec.rb +67 -0
  264. data/spec/models/upload_set_spec.rb +39 -0
  265. data/spec/models/user_spec.rb +7 -8
  266. data/spec/presenters/curation_concerns/collection_presenter_spec.rb +8 -24
  267. data/spec/presenters/curation_concerns/file_set_presenter_spec.rb +59 -0
  268. data/spec/presenters/curation_concerns/permission_badge_spec.rb +29 -0
  269. data/spec/presenters/curation_concerns/presenter_factory_spec.rb +29 -0
  270. data/spec/presenters/curation_concerns/version_list_presenter_spec.rb +32 -0
  271. data/spec/presenters/curation_concerns/version_presenter_spec.rb +51 -0
  272. data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +35 -0
  273. data/spec/presenters/embargo_presenter_spec.rb +48 -0
  274. data/spec/presenters/lease_presenter_spec.rb +48 -0
  275. data/spec/renderers/curation_concerns/attribute_renderer_spec.rb +14 -0
  276. data/spec/routing/curation_concerns/routes_spec.rb +38 -12
  277. data/spec/routing/route_spec.rb +38 -39
  278. data/spec/search_builders/curation_concerns/embargo_search_builder_spec.rb +17 -0
  279. data/spec/search_builders/curation_concerns/lease_search_builder_spec.rb +17 -0
  280. data/spec/search_builders/curation_concerns/search_builder_spec.rb +60 -0
  281. data/spec/services/derivative_path_spec.rb +16 -0
  282. data/spec/services/embargo_service_spec.rb +15 -14
  283. data/spec/services/file_set_audit_service_spec.rb +71 -0
  284. data/spec/services/lease_service_spec.rb +13 -13
  285. data/spec/services/lock_manager_spec.rb +12 -0
  286. data/spec/services/parent_service_spec.rb +13 -0
  287. data/spec/services/persist_derivatives_spec.rb +24 -0
  288. data/spec/services/persist_directly_contained_output_file_service_spec.rb +14 -0
  289. data/spec/services/repository_audit_service_spec.rb +8 -7
  290. data/spec/services/rights_service_spec.rb +17 -0
  291. data/spec/services/thumbnail_path_service_spec.rb +43 -0
  292. data/spec/services/versioning_service_spec.rb +8 -9
  293. data/spec/spec_helper.rb +21 -13
  294. data/spec/support/curation_concerns/factory_helpers.rb +1 -0
  295. data/spec/support/features/fixture_file_upload.rb +3 -1
  296. data/spec/support/features/session_helpers.rb +3 -4
  297. data/spec/support/features.rb +1 -4
  298. data/spec/support/input_support.rb +11 -0
  299. data/spec/support/matchers/api_responses.rb +22 -0
  300. data/spec/support/shared/shared_examples_has_dc_metadata.rb +0 -2
  301. data/spec/support/shared/shared_examples_is_embargoable.rb +1 -3
  302. data/spec/support/shared/shared_examples_with_access_rights.rb +13 -16
  303. data/spec/tasks/rake_spec.rb +9 -11
  304. data/spec/test_app_templates/Gemfile.extra +4 -1
  305. data/spec/test_app_templates/lib/generators/test_app_generator.rb +3 -35
  306. data/spec/views/catalog/index.html.erb_spec.rb +7 -10
  307. data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +9 -6
  308. data/spec/views/curation_concerns/base/_form_permission.html.erb_spec.rb +13 -0
  309. data/spec/views/curation_concerns/base/show.html.erb_spec.rb +35 -15
  310. data/spec/views/curation_concerns/base/show.json.jbuilder_spec.rb +21 -0
  311. data/spec/views/curation_concerns/file_sets/_file_set.html.erb_spec.rb +37 -0
  312. data/spec/views/curation_concerns/file_sets/show.json.jbuilder_spec.rb +21 -0
  313. data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +6 -6
  314. data/spec/views/error/single_use_error.html.erb_spec.rb +8 -0
  315. data/spec/views/layouts/error.html.erb_spec.rb +8 -0
  316. data/spec/views/shared/_add_content.html.erb_spec.rb +33 -20
  317. data/spec/views/shared/_my_actions.html.erb_spec.rb +18 -6
  318. data/spec/views/single_use_links/new_download.html.erb_spec.rb +29 -0
  319. data/spec/views/single_use_links_viewer/show.html.erb_spec.rb +32 -0
  320. data/tasks/jetty.rake +1 -1
  321. data/vendor/assets/javascrips/fileupload/jquery.fileupload-process.js +175 -0
  322. data/vendor/assets/javascrips/fileupload/jquery.fileupload-ui.js +710 -0
  323. data/vendor/assets/javascrips/fileupload/jquery.fileupload-validate.js +122 -0
  324. data/vendor/assets/javascrips/fileupload/jquery.fileupload.js +1477 -0
  325. data/vendor/assets/javascrips/fileupload/locale.js +27 -0
  326. data/vendor/assets/javascrips/fileupload/tmpl.js +87 -0
  327. metadata +242 -213
  328. data/app/assets/javascripts/curation_concerns/help_modal.js +0 -36
  329. data/app/assets/javascripts/curation_concerns/link_groups.js.coffee +0 -123
  330. data/app/assets/javascripts/curation_concerns/link_users.js.coffee +0 -126
  331. data/app/assets/javascripts/curation_concerns/proxy_rights.js.coffee +0 -95
  332. data/app/assets/javascripts/curation_concerns/proxy_submission.js +0 -23
  333. data/app/assets/javascripts/curation_concerns/select_works.js.coffee +0 -20
  334. data/app/controllers/catalog_controller.rb +0 -3
  335. data/app/controllers/concerns/curation_concerns/generic_files_controller_behavior.rb +0 -149
  336. data/app/controllers/curation_concerns/generic_files_controller.rb +0 -13
  337. data/app/datastreams/curation_concerns/generic_work_rdf_properties.rb +0 -57
  338. data/app/datastreams/generic_work_metadata.rb +0 -3
  339. data/app/forms/curation_concerns/forms/generic_file_edit_form.rb +0 -15
  340. data/app/forms/curation_concerns/forms/generic_work_edit_form.rb +0 -9
  341. data/app/helpers/curation_concerns/attribute_helper.rb +0 -67
  342. data/app/helpers/curation_concerns/generic_file_helper.rb +0 -19
  343. data/app/helpers/curation_concerns/thumbnail_helper.rb +0 -11
  344. data/app/presenters/curation_concerns/generic_file_presenter.rb +0 -14
  345. data/app/presenters/curation_concerns/generic_work_presenter.rb +0 -13
  346. data/app/views/catalog/_index_default.html.erb +0 -17
  347. data/app/views/collections/_form_representative_image.html.erb +0 -13
  348. data/app/views/collections/_identifier_and_action.html.erb +0 -15
  349. data/app/views/curation_concerns/base/_form_content_license.html.erb +0 -16
  350. data/app/views/curation_concerns/base/_form_editors.html.erb +0 -15
  351. data/app/views/curation_concerns/generic_files/_actions.html.erb +0 -16
  352. data/app/views/curation_concerns/generic_files/_generic_file.html.erb +0 -12
  353. data/app/views/curation_concerns/generic_files/_media_display.html.erb +0 -19
  354. data/app/views/curation_concerns/generic_files/jq_upload.json.jbuilder +0 -8
  355. data/app/views/curation_concerns/generic_files/show.html.erb +0 -15
  356. data/app/workers/visibility_copy_worker.rb +0 -30
  357. data/curation_concerns-models/.gitignore +0 -17
  358. data/curation_concerns-models/Gemfile +0 -4
  359. data/curation_concerns-models/LICENSE.md +0 -177
  360. data/curation_concerns-models/README.md +0 -42
  361. data/curation_concerns-models/Rakefile +0 -1
  362. data/curation_concerns-models/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +0 -99
  363. data/curation_concerns-models/app/actors/curation_concerns/base_actor.rb +0 -90
  364. data/curation_concerns-models/app/actors/curation_concerns/generic_file_actor.rb +0 -150
  365. data/curation_concerns-models/app/actors/curation_concerns/work_actor_behavior.rb +0 -88
  366. data/curation_concerns-models/app/jobs/active_fedora_id_based_job.rb +0 -22
  367. data/curation_concerns-models/app/jobs/active_fedora_pid_based_job.rb +0 -6
  368. data/curation_concerns-models/app/jobs/audit_job.rb +0 -58
  369. data/curation_concerns-models/app/jobs/characterize_job.rb +0 -11
  370. data/curation_concerns-models/app/jobs/copy_permissions_job.rb +0 -24
  371. data/curation_concerns-models/app/jobs/create_derivatives_job.rb +0 -15
  372. data/curation_concerns-models/app/jobs/import_url_job.rb +0 -56
  373. data/curation_concerns-models/app/jobs/ingest_local_file_job.rb +0 -48
  374. data/curation_concerns-models/app/jobs/resolrize_job.rb +0 -9
  375. data/curation_concerns-models/app/models/checksum_audit_log.rb +0 -21
  376. data/curation_concerns-models/app/models/concerns/curation_concerns/ability.rb +0 -34
  377. data/curation_concerns-models/app/models/concerns/curation_concerns/basic_metadata.rb +0 -87
  378. data/curation_concerns-models/app/models/concerns/curation_concerns/collection_behavior.rb +0 -47
  379. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/belongs_to_works.rb +0 -53
  380. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/characterization.rb +0 -89
  381. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/content.rb +0 -8
  382. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/export.rb +0 -343
  383. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/full_text_indexing.rb +0 -12
  384. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/indexing.rb +0 -14
  385. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/versions.rb +0 -16
  386. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file.rb +0 -5
  387. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file_behavior.rb +0 -44
  388. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_work_behavior.rb +0 -38
  389. data/curation_concerns-models/app/models/concerns/curation_concerns/has_representative.rb +0 -14
  390. data/curation_concerns-models/app/models/concerns/curation_concerns/human_readable_type.rb +0 -23
  391. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/readable.rb +0 -19
  392. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/writable.rb +0 -75
  393. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions.rb +0 -7
  394. data/curation_concerns-models/app/models/concerns/curation_concerns/serializers.rb +0 -15
  395. data/curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb +0 -135
  396. data/curation_concerns-models/app/models/concerns/curation_concerns/user.rb +0 -65
  397. data/curation_concerns-models/app/models/concerns/curation_concerns/with_basic_metadata.rb +0 -98
  398. data/curation_concerns-models/app/models/concerns/curation_concerns/with_generic_files.rb +0 -29
  399. data/curation_concerns-models/app/models/curation_concerns/classify_concern.rb +0 -47
  400. data/curation_concerns-models/app/models/curation_concerns/quick_classification_query.rb +0 -31
  401. data/curation_concerns-models/app/models/datastreams/fits_datastream.rb +0 -148
  402. data/curation_concerns-models/app/models/version_committer.rb +0 -2
  403. data/curation_concerns-models/app/services/curation_concerns/characterization_service.rb +0 -71
  404. data/curation_concerns-models/app/services/curation_concerns/full_text_extraction_service.rb +0 -38
  405. data/curation_concerns-models/app/services/curation_concerns/generic_file_audit_service.rb +0 -85
  406. data/curation_concerns-models/app/services/curation_concerns/generic_file_indexing_service.rb +0 -14
  407. data/curation_concerns-models/app/services/curation_concerns/generic_work_indexing_service.rb +0 -16
  408. data/curation_concerns-models/app/services/curation_concerns/noid.rb +0 -23
  409. data/curation_concerns-models/app/services/curation_concerns/repository_audit_service.rb +0 -9
  410. data/curation_concerns-models/app/services/curation_concerns/versioning_service.rb +0 -27
  411. data/curation_concerns-models/config/locales/curation_concerns.en.yml +0 -6
  412. data/curation_concerns-models/curation_concerns-models.gemspec +0 -34
  413. data/curation_concerns-models/lib/curation_concerns/messages.rb +0 -66
  414. data/curation_concerns-models/lib/curation_concerns/models/engine.rb +0 -61
  415. data/curation_concerns-models/lib/curation_concerns/models/resque.rb +0 -36
  416. data/curation_concerns-models/lib/curation_concerns/models/utils.rb +0 -22
  417. data/curation_concerns-models/lib/curation_concerns/models/version.rb +0 -5
  418. data/curation_concerns-models/lib/curation_concerns/models.rb +0 -32
  419. data/curation_concerns-models/lib/generators/curation_concerns/models/abstract_migration_generator.rb +0 -30
  420. data/curation_concerns-models/lib/generators/curation_concerns/models/clamav_generator.rb +0 -19
  421. data/curation_concerns-models/lib/generators/curation_concerns/models/fulltext_generator.rb +0 -28
  422. data/curation_concerns-models/lib/generators/curation_concerns/models/install_generator.rb +0 -70
  423. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/collection.rb +0 -4
  424. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +0 -4
  425. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/clamav.rb +0 -1
  426. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +0 -123
  427. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/mime_types.rb +0 -6
  428. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis.yml +0 -9
  429. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis_config.rb +0 -32
  430. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque-pool.yml +0 -1
  431. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +0 -10
  432. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_config.rb +0 -5
  433. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +0 -19
  434. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_version_committers.rb +0 -15
  435. data/curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake +0 -75
  436. data/curation_concerns-models/lib/tasks/migrate.rake +0 -13
  437. data/curation_concerns-models/lib/tasks/resque.rake +0 -13
  438. data/curation_concerns-models/lib/tasks/solr_reindex.rake +0 -8
  439. data/lib/curation_concerns/configuration.rb +0 -74
  440. data/lib/generators/curation_concerns/templates/curation_concerns_config.rb +0 -2
  441. data/solr_conf/conf/solrconfig.xml +0 -223
  442. data/spec/abilities/generic_file_abilities_spec.rb +0 -62
  443. data/spec/actors/curation_concerns/generic_file_actor_spec.rb +0 -116
  444. data/spec/controllers/curation_concerns/generic_files_controller_spec.rb +0 -251
  445. data/spec/forms/generic_file_edit_form_spec.rb +0 -33
  446. data/spec/helpers/thumbnail_helper_spec.rb +0 -21
  447. data/spec/jobs/copy_permissions_job_spec.rb +0 -49
  448. data/spec/jobs/curation_concerns_resque_queue_spec.rb +0 -49
  449. data/spec/models/curation_concerns/generic_file/derivatives_spec.rb +0 -88
  450. data/spec/models/curation_concerns/generic_work_behavior_spec.rb +0 -35
  451. data/spec/models/fits_datastream_spec.rb +0 -127
  452. data/spec/models/generic_file_spec.rb +0 -619
  453. data/spec/presenters/curation_concerns/generic_file_presenter_spec.rb +0 -16
  454. data/spec/services/characterization_service_spec.rb +0 -30
  455. data/spec/services/full_text_extraction_service_spec.rb +0 -5
  456. data/spec/services/generic_file_audit_service_spec.rb +0 -71
  457. data/spec/services/generic_file_indexing_service_spec.rb +0 -57
  458. data/spec/services/generic_work_indexing_service_spec.rb +0 -18
  459. data/spec/workers/visibility_copy_worker_spec.rb +0 -70
  460. data/vendor/assets/javascripts/handlebars.js +0 -2278
  461. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +0 -602
  462. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +0 -356
  463. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +0 -50
  464. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +0 -1276
  465. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +0 -610
  466. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +0 -498
  467. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +0 -528
  468. data/vendor/assets/javascripts/jquery.tokeninput.js +0 -1061
  469. data/vendor/assets/stylesheets/jquery-ui-lightness.css +0 -474
  470. data/vendor/assets/stylesheets/token-input-facebook.css +0 -122
  471. data/vendor/assets/stylesheets/token-input-mac.css +0 -204
  472. data/vendor/assets/stylesheets/token-input.css +0 -127
@@ -1,21 +0,0 @@
1
- class ChecksumAuditLog < ActiveRecord::Base
2
-
3
- def self.get_audit_log(id, path, version_uri)
4
- ChecksumAuditLog.find_or_create_by(generic_file_id: id, file_id: path, version: version_uri)
5
- end
6
-
7
- # Check to see if there are previous passing logs that we can delete
8
- # we want to keep the first passing event after a failure, the most current passing event,
9
- # and all failures so that this table doesn't grow too large
10
- # Simple way (a little naieve): if the last 2 were passing, delete the first one
11
- def self.prune_history(id, path)
12
- list = logs_for(id, path).limit(2)
13
- if list.size > 1 && (list[0].pass == 1) && (list[1].pass == 1)
14
- list[0].destroy
15
- end
16
- end
17
-
18
- def self.logs_for(id, path)
19
- ChecksumAuditLog.where(generic_file_id: id, file_id: path).order('created_at desc, id desc')
20
- end
21
- end
@@ -1,34 +0,0 @@
1
- module CurationConcerns
2
- module Ability
3
- extend ActiveSupport::Concern
4
- included do
5
- self.ability_logic += [:curation_concerns_permissions]
6
- end
7
-
8
- def curation_concerns_permissions
9
-
10
- unless current_user.new_record?
11
- can :create, CurationConcerns::ClassifyConcern
12
- # TODO: Shouldn't this be in `everyone_can_create_curation_concerns` ?
13
- can :create, ::GenericFile
14
- end
15
-
16
- if user_groups.include? 'admin'
17
- can [:create, :discover, :show, :read, :edit, :update, :destroy], :all
18
- end
19
-
20
- can :collect, :all
21
-
22
- end
23
-
24
- # Add this to your ability_logic if you want all logged in users to be able
25
- # to submit content
26
- def everyone_can_create_curation_concerns
27
- unless current_user.new_record?
28
- can :create, [ CurationConcerns.configuration.curation_concerns ]
29
- can :create, ::Collection
30
- end
31
- end
32
-
33
- end
34
- end
@@ -1,87 +0,0 @@
1
- module CurationConcerns
2
- module BasicMetadata
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
-
7
- property :label, predicate: ActiveFedora::RDF::Fcrepo::Model.downloadFilename, multiple: false
8
-
9
- property :depositor, predicate: ::RDF::URI.new("http://id.loc.gov/vocabulary/relators/dpt"), multiple: false do |index|
10
- index.as :symbol, :stored_searchable
11
- end
12
-
13
- property :relative_path, predicate: ::RDF::URI.new('http://scholarsphere.psu.edu/ns#relativePath'), multiple: false
14
-
15
- property :import_url, predicate: ::RDF::URI.new('http://scholarsphere.psu.edu/ns#importUrl'), multiple: false do |index|
16
- index.as :symbol
17
- end
18
-
19
- property :part_of, predicate: ::RDF::DC.isPartOf
20
- property :resource_type, predicate: ::RDF::DC.type do |index|
21
- index.as :stored_searchable, :facetable
22
- end
23
- property :title, predicate: ::RDF::DC.title do |index|
24
- index.as :stored_searchable, :facetable
25
- end
26
- property :creator, predicate: ::RDF::DC.creator do |index|
27
- index.as :stored_searchable, :facetable
28
- end
29
- property :contributor, predicate: ::RDF::DC.contributor do |index|
30
- index.as :stored_searchable, :facetable
31
- end
32
- property :description, predicate: ::RDF::DC.description do |index|
33
- index.type :text
34
- index.as :stored_searchable
35
- end
36
- property :tag, predicate: ::RDF::DC.relation do |index|
37
- index.as :stored_searchable, :facetable
38
- end
39
- property :rights, predicate: ::RDF::DC.rights do |index|
40
- index.as :stored_searchable
41
- end
42
- property :publisher, predicate: ::RDF::DC.publisher do |index|
43
- index.as :stored_searchable, :facetable
44
- end
45
- property :date_created, predicate: ::RDF::DC.created do |index|
46
- index.as :stored_searchable
47
- end
48
-
49
- # We reserve date_uploaded for the original creation date of the record.
50
- # For example, when migrating data from a fedora3 repo to fedora4,
51
- # fedora's system created date will reflect the date when the record
52
- # was created in fedora4, but the date_uploaded will preserve the
53
- # original creation date from the old repository.
54
- property :date_uploaded, predicate: ::RDF::DC.dateSubmitted, multiple: false do |index|
55
- index.type :date
56
- index.as :stored_sortable
57
- end
58
-
59
- property :date_modified, predicate: ::RDF::DC.modified, multiple: false do |index|
60
- index.type :date
61
- index.as :stored_sortable
62
- end
63
- property :subject, predicate: ::RDF::DC.subject do |index|
64
- index.as :stored_searchable, :facetable
65
- end
66
- property :language, predicate: ::RDF::DC.language do |index|
67
- index.as :stored_searchable, :facetable
68
- end
69
- property :identifier, predicate: ::RDF::DC.identifier do |index|
70
- index.as :stored_searchable
71
- end
72
- property :based_near, predicate: ::RDF::FOAF.based_near do |index|
73
- index.as :stored_searchable, :facetable
74
- end
75
- property :related_url, predicate: ::RDF::RDFS.seeAlso do |index|
76
- index.as :stored_searchable
77
- end
78
- property :bibliographic_citation, predicate: ::RDF::DC.bibliographicCitation do |index|
79
- index.as :stored_searchable
80
- end
81
- property :source, predicate: ::RDF::DC.source do |index|
82
- index.as :stored_searchable
83
- end
84
- end
85
-
86
- end
87
- end
@@ -1,47 +0,0 @@
1
- module CurationConcerns
2
- module CollectionBehavior
3
- extend ActiveSupport::Concern
4
-
5
- include Hydra::AccessControls::WithAccessRight
6
- include Hydra::Collection
7
- include CurationConcerns::Noid
8
- include CurationConcerns::HumanReadableType
9
- include CurationConcerns::HasRepresentative
10
- include CurationConcerns::Permissions
11
-
12
- included do
13
- validates :title, presence: true
14
- end
15
-
16
- def add_member(collectible)
17
- if can_add_to_members?(collectible)
18
- self.members << collectible
19
- save
20
- end
21
- end
22
-
23
- def to_s
24
- title.present? ? title : "No Title"
25
- end
26
-
27
- def bytes
28
- members.reduce(0) { |sum, gf| sum + gf.content.size.to_i }
29
- end
30
-
31
- def to_solr(solr_doc={})
32
- super(solr_doc).tap do |solr_doc|
33
- Solrizer.set_field(solr_doc, 'generic_type', human_readable_type, :facetable)
34
- end
35
- end
36
-
37
- def can_be_member_of_collection?(collection)
38
- collection == self ? false : true
39
- end
40
-
41
- private
42
-
43
- def can_add_to_members?(collectible)
44
- collectible.try(:can_be_member_of_collection?, self)
45
- end
46
- end
47
- end
@@ -1,53 +0,0 @@
1
- module CurationConcerns
2
- module GenericFile
3
- module BelongsToWorks
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- before_destroy :remove_representative_relationship
8
- end
9
-
10
- def generic_works
11
- self.parent_objects # parent_objects is provided by Hydra::PCDM::ObjectBehavior
12
- end
13
-
14
- def generic_work_ids
15
- generic_works.map { |work| work.id }
16
- end
17
-
18
- # Returns the first parent object
19
- # This is a hack to handle things like GenericFiles inheriting access controls from their parent. (see CurationConcerns::ParentContainer in app/controllers/concerns/curation_concers/parent_container.rb)
20
- def parent
21
- self.parent_objects.first
22
- end
23
-
24
- # Returns the id of first parent object
25
- # This is a hack to handle things like GenericFiles inheriting access controls from their parent. (see CurationConcerns::ParentContainer in app/controllers/concerns/curation_concers/parent_container.rb)
26
- def parent_id
27
- parent.id
28
- end
29
-
30
- # Files with sibling relationships
31
- # Returns all GenericFiles aggregated by any of the GenericWorks that aggregate the current object
32
- def related_files
33
- generic_works = self.generic_works
34
- return [] if generic_works.empty?
35
- generic_works.flat_map {|work| work.generic_files.select {|generic_file| generic_file.id != self.id } }
36
- end
37
-
38
- # If any parent works are pointing at this object as their representative, remove that pointer.
39
- def remove_representative_relationship
40
- generic_works = self.generic_works
41
- return if generic_works.empty?
42
- generic_works.each do |work|
43
- if work.representative == self.id
44
- work.representative = nil
45
- work.save
46
- end
47
- end
48
- end
49
-
50
- end
51
- end
52
- end
53
-
@@ -1,89 +0,0 @@
1
- module CurationConcerns
2
- module GenericFile
3
- module Characterization
4
- extend ActiveSupport::Concern
5
- included do
6
- contains "characterization", class_name: 'FitsDatastream'
7
- property :mime_type, delegate_to: 'characterization', multiple: false do |index|
8
- index.as :stored_searchable
9
- end
10
- property :format_label, delegate_to: 'characterization'
11
- property :file_size, delegate_to: 'characterization'
12
- property :last_modified, delegate_to: 'characterization'
13
- property :filename, delegate_to: 'characterization'
14
- property :original_checksum, delegate_to: 'characterization'
15
- property :rights_basis, delegate_to: 'characterization'
16
- property :copyright_basis, delegate_to: 'characterization'
17
- property :copyright_note, delegate_to: 'characterization'
18
- property :well_formed, delegate_to: 'characterization'
19
- property :valid, delegate_to: 'characterization'
20
- property :status_message, delegate_to: 'characterization'
21
- property :file_title, delegate_to: 'characterization'
22
- property :file_author, delegate_to: 'characterization'
23
- property :page_count, delegate_to: 'characterization'
24
- property :file_language, delegate_to: 'characterization'
25
- property :word_count, delegate_to: 'characterization'
26
- property :character_count, delegate_to: 'characterization'
27
- property :paragraph_count, delegate_to: 'characterization'
28
- property :line_count, delegate_to: 'characterization'
29
- property :table_count, delegate_to: 'characterization'
30
- property :graphics_count, delegate_to: 'characterization'
31
- property :byte_order, delegate_to: 'characterization'
32
- property :compression, delegate_to: 'characterization'
33
- property :color_space, delegate_to: 'characterization'
34
- property :profile_name, delegate_to: 'characterization'
35
- property :profile_version, delegate_to: 'characterization'
36
- property :orientation, delegate_to: 'characterization'
37
- property :color_map, delegate_to: 'characterization'
38
- property :image_producer, delegate_to: 'characterization'
39
- property :capture_device, delegate_to: 'characterization'
40
- property :scanning_software, delegate_to: 'characterization'
41
- property :exif_version, delegate_to: 'characterization'
42
- property :gps_timestamp, delegate_to: 'characterization'
43
- property :latitude, delegate_to: 'characterization'
44
- property :longitude, delegate_to: 'characterization'
45
- property :character_set, delegate_to: 'characterization'
46
- property :markup_basis, delegate_to: 'characterization'
47
- property :markup_language, delegate_to: 'characterization'
48
- property :bit_depth, delegate_to: 'characterization'
49
- property :channels, delegate_to: 'characterization'
50
- property :data_format, delegate_to: 'characterization'
51
- property :offset, delegate_to: 'characterization'
52
- property :frame_rate, delegate_to: 'characterization'
53
-
54
- end
55
-
56
- def width
57
- characterization.width.blank? ? characterization.video_width : characterization.width
58
- end
59
-
60
- def height
61
- characterization.height.blank? ? characterization.video_height : characterization.height
62
- end
63
-
64
- def duration
65
- characterization.duration.blank? ? characterization.video_duration : characterization.duration
66
- end
67
-
68
- def sample_rate
69
- characterization.sample_rate.blank? ? characterization.video_sample_rate : characterization.sample_rate
70
- end
71
-
72
- def characterization_terms
73
- h = {}
74
- self.characterization.class.terminology.terms.each_pair do |k, v|
75
- next unless v.respond_to? :proxied_term
76
- term = v.proxied_term
77
- begin
78
- value = self.send(term.name)
79
- h[term.name] = value unless value.empty?
80
- rescue NoMethodError
81
- next
82
- end
83
- end
84
- h
85
- end
86
-
87
- end
88
- end
89
- end
@@ -1,8 +0,0 @@
1
- module CurationConcerns
2
- module GenericFile
3
- module Content
4
- extend ActiveSupport::Concern
5
-
6
- end
7
- end
8
- end
@@ -1,343 +0,0 @@
1
- module CurationConcerns
2
- module GenericFile
3
- module Export
4
- # MIME: 'application/x-endnote-refer'
5
- def export_as_endnote
6
- end_note_format = {
7
- '%T' => [:title, lambda { |x| x.first }],
8
- '%Q' => [:title, lambda { |x| x.drop(1) }],
9
- '%A' => [:creator],
10
- '%C' => [:publication_place],
11
- '%D' => [:date_created],
12
- '%8' => [:date_uploaded],
13
- '%E' => [:contributor],
14
- '%I' => [:publisher],
15
- '%J' => [:series_title],
16
- '%@' => [:isbn],
17
- '%U' => [:related_url],
18
- '%7' => [:edition_statement],
19
- '%R' => [:persistent_url],
20
- '%X' => [:description],
21
- '%G' => [:language],
22
- '%[' => [:date_modified],
23
- '%9' => [:resource_type],
24
- '%~' => I18n.t('curation_concerns.product_name'),
25
- '%W' => I18n.t('curation_concerns.institution_name')
26
- }
27
- text = []
28
- text << "%0 GenericFile"
29
- end_note_format.each do |endnote_key, mapping|
30
- if mapping.is_a? String
31
- values = [mapping]
32
- else
33
- values = self.send(mapping[0]) if self.respond_to? mapping[0]
34
- values = mapping[1].call(values) if mapping.length == 2
35
- values = Array(values)
36
- end
37
- next if values.empty? or values.first.nil?
38
- spaced_values = values.join("; ")
39
- text << "#{endnote_key} #{spaced_values}"
40
- end
41
- return text.join("\n")
42
- end
43
-
44
- def persistent_url
45
- "#{CurationConcerns.config.persistent_hostpath}#{id}"
46
- end
47
-
48
- # MIME type: 'application/x-openurl-ctx-kev'
49
- def export_as_openurl_ctx_kev
50
- export_text = []
51
- export_text << "url_ver=Z39.88-2004&ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fblacklight.rubyforge.org%3Agenerator"
52
- field_map = {
53
- title: 'title',
54
- creator: 'creator',
55
- subject: 'subject',
56
- description: 'description',
57
- publisher: 'publisher',
58
- contributor: 'contributor',
59
- date_created: 'date',
60
- resource_type: 'format',
61
- identifier: 'identifier',
62
- language: 'language',
63
- tag: 'relation',
64
- based_near: 'coverage',
65
- rights: 'rights'
66
- }
67
- field_map.each do |element, kev|
68
- values = self.send(element)
69
- next if values.empty? or values.first.nil?
70
- values.each do |value|
71
- export_text << "rft.#{kev}=#{CGI::escape(value.to_s)}"
72
- end
73
- end
74
- export_text.join('&') unless export_text.blank?
75
- end
76
-
77
- def export_as_apa_citation
78
- text = ''
79
- authors_list = []
80
- authors_list_final = []
81
-
82
- #setup formatted author list
83
- authors = get_author_list
84
- authors.each do |author|
85
- next if author.blank?
86
- authors_list.push(abbreviate_name(author))
87
- end
88
- authors_list.each do |author|
89
- if author == authors_list.first #first
90
- authors_list_final.push(author.strip)
91
- elsif author == authors_list.last #last
92
- authors_list_final.push(", &amp; " + author.strip)
93
- else #all others
94
- authors_list_final.push(", " + author.strip)
95
- end
96
- end
97
- text << authors_list_final.join
98
- unless text.blank?
99
- if text[-1,1] != "."
100
- text << ". "
101
- else
102
- text << " "
103
- end
104
- end
105
- # Get Pub Date
106
- text << "(" + setup_pub_date + "). " unless setup_pub_date.nil?
107
-
108
- # setup title info
109
- title_info = setup_title_info
110
- text << "<i>" + title_info + "</i> " unless title_info.nil?
111
-
112
- # Publisher info
113
- text << setup_pub_info unless setup_pub_info.nil?
114
- unless text.blank?
115
- if text[-1,1] != "."
116
- text += "."
117
- end
118
- end
119
- text.html_safe
120
- end
121
-
122
- def export_as_mla_citation
123
- text = ''
124
- authors_final = []
125
-
126
- #setup formatted author list
127
- authors = get_author_list
128
-
129
- if authors.length < 4
130
- authors.each do |author|
131
- if author == authors.first #first
132
- authors_final.push(author)
133
- elsif author == authors.last #last
134
- authors_final.push(", and " + name_reverse(author) + ".")
135
- else #all others
136
- authors_final.push(", " + name_reverse(author))
137
- end
138
- end
139
- text << authors_final.join
140
- unless text.blank?
141
- if text[-1,1] != "."
142
- text << ". "
143
- else
144
- text << " "
145
- end
146
- end
147
- else
148
- text << authors.first + ", et al. "
149
- end
150
- # setup title
151
- title_info = setup_title_info
152
- text << "<i>" + mla_citation_title(title_info) + "</i> " unless title.blank?
153
-
154
- # Publication
155
- text << setup_pub_info + ", " unless setup_pub_info.nil?
156
-
157
- # Get Pub Date
158
- text << setup_pub_date unless setup_pub_date.nil?
159
- if text[-1,1] != "."
160
- text << "." unless text.blank?
161
- end
162
- text.html_safe
163
- end
164
-
165
- def export_as_chicago_citation
166
- author_text = ""
167
- authors = get_all_authors
168
- unless authors.blank?
169
- if authors.length > 10
170
- authors.each_with_index do |author, index|
171
- if index < 7
172
- if index == 0
173
- author_text << "#{author}"
174
- if author.ends_with?(",")
175
- author_text << " "
176
- else
177
- author_text << ", "
178
- end
179
- else
180
- author_text << "#{name_reverse(author)}, "
181
- end
182
- end
183
- end
184
- author_text << " et al."
185
- elsif authors.length > 1
186
- authors.each_with_index do |author,index|
187
- if index == 0
188
- author_text << "#{author}"
189
- if author.ends_with?(",")
190
- author_text << " "
191
- else
192
- author_text << ", "
193
- end
194
- elsif index + 1 == authors.length
195
- author_text << "and #{name_reverse(author)}."
196
- else
197
- author_text << "#{name_reverse(author)}, "
198
- end
199
- end
200
- else
201
- author_text << authors.first
202
- end
203
- end
204
- title_info = ""
205
- title_info << citation_title(clean_end_punctuation(CGI::escapeHTML(title.first)).strip) unless title.blank?
206
-
207
- pub_info = ""
208
- place = self.based_near.first
209
- publisher = self.publisher.first
210
- unless place.blank?
211
- place = CGI::escapeHTML(place)
212
- pub_info << place
213
- pub_info << ": " unless publisher.blank?
214
- end
215
- unless publisher.blank?
216
- publisher = CGI::escapeHTML(publisher)
217
- pub_info << publisher
218
- pub_info << ", " unless setup_pub_date.nil?
219
- end
220
- unless setup_pub_date.nil?
221
- pub_info << setup_pub_date
222
- end
223
-
224
- citation = ""
225
- citation << "#{author_text} " unless author_text.blank?
226
- citation << "<i>#{title_info}.</i> " unless title_info.blank?
227
- citation << "#{pub_info}." unless pub_info.blank?
228
- citation.html_safe
229
- end
230
-
231
- private
232
-
233
- def setup_pub_date
234
- first_date = self.date_created.first
235
- unless first_date.blank?
236
- first_date = CGI::escapeHTML(first_date)
237
- date_value = first_date.gsub(/[^0-9|n\.d\.]/, "")[0,4]
238
- return nil if date_value.nil?
239
- end
240
- clean_end_punctuation(date_value) if date_value
241
- end
242
-
243
- def setup_pub_info
244
- text = ''
245
- place = self.based_near.first
246
- publisher = self.publisher.first
247
- unless place.blank?
248
- place = CGI::escapeHTML(place)
249
- text << place
250
- text << ": " unless publisher.blank?
251
- end
252
- unless publisher.blank?
253
- publisher = CGI::escapeHTML(publisher)
254
- text << publisher
255
- end
256
- return nil if text.strip.blank?
257
- clean_end_punctuation(text.strip)
258
- end
259
-
260
- def mla_citation_title(text)
261
- no_upcase = ["a","an","and","but","by","for","it","of","the","to","with"]
262
- new_text = []
263
- word_parts = text.split(" ")
264
- word_parts.each do |w|
265
- if !no_upcase.include? w
266
- new_text.push(w.capitalize)
267
- else
268
- new_text.push(w)
269
- end
270
- end
271
- new_text.join(" ")
272
- end
273
-
274
- def citation_title(title_text)
275
- prepositions = ["a","about","across","an","and","before","but","by","for","it","of","the","to","with","without"]
276
- new_text = []
277
- title_text.split(" ").each_with_index do |word,index|
278
- if (index == 0 and word != word.upcase) or (word.length > 1 and word != word.upcase and !prepositions.include?(word))
279
- # the split("-") will handle the capitalization of hyphenated words
280
- new_text << word.split("-").map!{|w| w.capitalize }.join("-")
281
- else
282
- new_text << word
283
- end
284
- end
285
- new_text.join(" ")
286
- end
287
-
288
- def setup_title_info
289
- text = ''
290
- title = self.title.first
291
- unless title.blank?
292
- title = CGI::escapeHTML(title)
293
- title_info = clean_end_punctuation(title.strip)
294
- text << title_info
295
- end
296
-
297
- return nil if text.strip.blank?
298
- clean_end_punctuation(text.strip) + "."
299
- end
300
-
301
- def clean_end_punctuation(text)
302
- if [".",",",":",";","/"].include? text[-1,1]
303
- return text[0,text.length-1]
304
- end
305
- text
306
- end
307
-
308
- def get_author_list
309
- self.creator.map { |author| clean_end_punctuation(CGI::escapeHTML(author)) }.uniq
310
- end
311
-
312
- def get_all_authors
313
- authors = self.creator
314
- return authors.empty? ? nil : authors.map { |author| CGI::escapeHTML(author) }
315
- end
316
-
317
- def abbreviate_name(name)
318
- abbreviated_name = ''
319
- name = name.join('') if name.is_a? Array
320
- # make sure we handle "Cher" correctly
321
- return name if !name.include?(' ') and !name.include?(',')
322
- surnames_first = name.include?(',')
323
- delimiter = surnames_first ? ', ' : ' '
324
- name_segments = name.split(delimiter)
325
- given_names = surnames_first ? name_segments.last.split(' ') : name_segments.first.split(' ')
326
- surnames = surnames_first ? name_segments.first.split(' ') : name_segments.last.split(' ')
327
- abbreviated_name << surnames.join(' ')
328
- abbreviated_name << ', '
329
- abbreviated_name << given_names.map { |n| "#{n[0]}." }.join if given_names.is_a? Array
330
- abbreviated_name << "#{given_names[0]}." if given_names.is_a? String
331
- abbreviated_name
332
- end
333
-
334
- def name_reverse(name)
335
- name = clean_end_punctuation(name)
336
- return name unless name =~ /,/
337
- temp_name = name.split(", ")
338
- return temp_name.last + " " + temp_name.first
339
- end
340
-
341
- end
342
- end
343
- end