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,40 +1,22 @@
1
1
  module CurationConcerns
2
2
  class CollectionPresenter
3
- include Hydra::Presenter
4
- include ActionView::Helpers::NumberHelper
3
+ include ModelProxy
4
+ include PresentsAttributes
5
+ attr_accessor :solr_document, :current_ability
5
6
 
6
- self.model_class = ::Collection
7
- # Terms is the list of fields displayed by app/views/collections/_show_descriptions.html.erb
8
- self.terms = [:title, :total_items, :size, :resource_type, :description, :creator, :contributor,
9
- :tag, :rights, :publisher, :date_created, :subject, :language, :identifier,
10
- :based_near, :related_url]
11
-
12
- # Depositor and permissions are not displayed in app/views/collections/_show_descriptions.html.erb
13
- # so don't include them in `terms'.
14
- # delegate :depositor, :permissions, to: :model
15
-
16
- def terms_with_values
17
- terms.select { |t| self[t].present? }
18
- end
19
-
20
- def [](key)
21
- case key
22
- when :size
23
- size
24
- when :total_items
25
- total_items
26
- else
27
- super
28
- end
7
+ # @param [SolrDocument] solr_document
8
+ # @param [Ability] current_ability
9
+ def initialize(solr_document, current_ability)
10
+ @solr_document = solr_document
11
+ @current_ability = current_ability
29
12
  end
30
13
 
31
- def size
32
- number_to_human_size(model.bytes)
33
- end
34
-
35
- def total_items
36
- model.members.count
37
- end
14
+ # CurationConcern methods
15
+ delegate :stringify_keys, :human_readable_type, :collection?, :representative_id,
16
+ to: :solr_document
38
17
 
18
+ # Metadata Methods
19
+ delegate :title, :description, :creator, :contributor, :subject, :publisher, :language,
20
+ :embargo_release_date, :lease_expiration_date, :rights, to: :solr_document
39
21
  end
40
22
  end
@@ -0,0 +1,26 @@
1
+ module CurationConcerns
2
+ # Presents embargoed objects
3
+ class EmbargoPresenter
4
+ include ModelProxy
5
+ attr_accessor :solr_document
6
+
7
+ delegate :human_readable_type, :visibility, :to_s, to: :solr_document
8
+
9
+ # @param [SolrDocument] solr_document
10
+ def initialize(solr_document)
11
+ @solr_document = solr_document
12
+ end
13
+
14
+ def embargo_release_date
15
+ Date.parse(solr_document.embargo_release_date).to_formatted_s(:rfc822)
16
+ end
17
+
18
+ def visibility_after_embargo
19
+ solr_document.fetch('visibility_after_embargo_ssim', []).first
20
+ end
21
+
22
+ def embargo_history
23
+ solr_document['embargo_history_ssim']
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ module CurationConcerns
2
+ class FileSetPresenter
3
+ include ModelProxy
4
+ include PresentsAttributes
5
+ attr_accessor :solr_document, :current_ability
6
+
7
+ # @param [SolrDocument] solr_document
8
+ # @param [Ability] current_ability
9
+ def initialize(solr_document, current_ability)
10
+ @solr_document = solr_document
11
+ @current_ability = current_ability
12
+ end
13
+
14
+ # CurationConcern methods
15
+ delegate :stringify_keys, :human_readable_type, :collection?, :image?, :video?,
16
+ :audio?, :pdf?, :office_document?, :representative_id, :to_s, to: :solr_document
17
+
18
+ # Methods used by blacklight helpers
19
+ delegate :has?, :first, :fetch, to: :solr_document
20
+
21
+ # Metadata Methods
22
+ delegate :title, :description, :creator, :contributor, :subject, :publisher,
23
+ :language, :date_uploaded, :rights,
24
+ :embargo_release_date, :lease_expiration_date, to: :solr_document
25
+
26
+ def page_title
27
+ Array(solr_document['label_tesim']).first
28
+ end
29
+
30
+ def link_name
31
+ current_ability.can?(:read, id) ? Array(solr_document['label_tesim']).first : 'File'
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,30 @@
1
+ module CurationConcerns
2
+ # Presents leased objects
3
+ class LeasePresenter
4
+ include ModelProxy
5
+ attr_accessor :solr_document
6
+
7
+ delegate :human_readable_type, :visibility, :to_s, to: :solr_document
8
+
9
+ # @param [SolrDocument] solr_document
10
+ def initialize(solr_document)
11
+ @solr_document = solr_document
12
+ end
13
+
14
+ def lease_expiration_date
15
+ if solr_document.lease_expiration_date
16
+ Date.parse(solr_document.lease_expiration_date).to_formatted_s(:rfc822)
17
+ else
18
+ solr_document.keys
19
+ end
20
+ end
21
+
22
+ def visibility_after_lease
23
+ solr_document.fetch('visibility_after_lease_ssim', []).first
24
+ end
25
+
26
+ def lease_history
27
+ solr_document['lease_history_ssim']
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,27 @@
1
+ module CurationConcerns
2
+ # Provide the ActiveModel methods so that this object routes the same as the
3
+ # object represented by the solr document.
4
+ module ModelProxy
5
+ delegate :to_param, :to_key, :id, to: :solr_document
6
+
7
+ delegate :model_name, to: :_delegated_to
8
+
9
+ def to_partial_path
10
+ _delegated_to._to_partial_path
11
+ end
12
+
13
+ def persisted?
14
+ true
15
+ end
16
+
17
+ def to_model
18
+ self
19
+ end
20
+
21
+ private
22
+
23
+ def _delegated_to
24
+ @_delegated_to ||= solr_document.fetch(Solrizer.solr_name('has_model', :symbol)).first.constantize
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,61 @@
1
+ module CurationConcerns
2
+ class PermissionBadge
3
+ include ActionView::Helpers::TagHelper
4
+
5
+ def initialize(solr_document)
6
+ @solr_document = solr_document
7
+ end
8
+
9
+ # Draws a span tag with styles for a bootstrap label
10
+ def render
11
+ content_tag(:span, link_title, title: link_title, class: "label #{dom_label_class}")
12
+ end
13
+
14
+ private
15
+
16
+ def dom_label_class
17
+ if open_access_with_embargo?
18
+ 'label-warning'
19
+ elsif open_access?
20
+ 'label-success'
21
+ elsif registered?
22
+ 'label-info'
23
+ else
24
+ 'label-danger'
25
+ end
26
+ end
27
+
28
+ def link_title
29
+ if open_access_with_embargo?
30
+ 'Open Access with Embargo'
31
+ elsif open_access?
32
+ 'Open Access'
33
+ elsif registered?
34
+ I18n.translate('curation_concerns.institution_name')
35
+ else
36
+ 'Private'
37
+ end
38
+ end
39
+
40
+ def open_access_with_embargo?
41
+ if @open_access_with_embargo.nil?
42
+ @open_access_with_embargo = open_access? && embargo?
43
+ end
44
+ @open_access_with_embargo
45
+ end
46
+
47
+ def open_access?
48
+ @open_access = @solr_document.visibility == Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC if @open_access.nil?
49
+ @open_access
50
+ end
51
+
52
+ def registered?
53
+ @registered = @solr_document.visibility == Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED if @registered.nil?
54
+ @registered
55
+ end
56
+
57
+ def embargo?
58
+ @solr_document.embargo_release_date.present?
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,45 @@
1
+ module CurationConcerns
2
+ class PresenterFactory
3
+ class << self
4
+ # @param [Array] ids the list of ids to load
5
+ # @param [Class] klass the class of presenter to make
6
+ # @return [Array] presenters for the generic files in order of the ids
7
+ def build_presenters(ids, klass, ability)
8
+ new(ids, klass, ability).build
9
+ end
10
+ end
11
+
12
+ attr_reader :ids, :klass, :ability
13
+
14
+ def initialize(ids, klass, ability)
15
+ @ids = ids
16
+ @klass = klass
17
+ @ability = ability
18
+ end
19
+
20
+ def build
21
+ return [] if ids.blank?
22
+ docs = load_docs
23
+ ids.map do |id|
24
+ solr_doc = docs.find { |doc| doc.id == id }
25
+ klass.new(solr_doc, ability) if solr_doc
26
+ end.compact
27
+ end
28
+
29
+ private
30
+
31
+ # @return [Array<SolrDocument>] a list of solr documents in no particular order
32
+ def load_docs
33
+ query("{!terms f=id}#{ids.join(',')}", rows: 1000)
34
+ .map { |res| SolrDocument.new(res) }
35
+ end
36
+
37
+ # Query solr using POST so that the query doesn't get too large for a URI
38
+ def query(query, args = {})
39
+ args.merge!(q: query, qt: 'standard')
40
+ conn = ActiveFedora::SolrService.instance.conn
41
+ result = conn.post('select', data: args)
42
+ result.fetch('response').fetch('docs')
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,25 @@
1
+ module CurationConcerns
2
+ module PresentsAttributes
3
+ ##
4
+ # Present the attribute as an HTML table row.
5
+ #
6
+ # @param [Hash] options
7
+ # @option options [true, false] :catalog_search_link return a link to a catalog search for that text if true
8
+ # @option options [String] :search_field If the method_name of the attribute is different than
9
+ # how the attribute name should appear on the search URL,
10
+ # you can explicitly set the URL's search field name
11
+ # @option options [String] :label The default label for the field if no translation is found
12
+ def attribute_to_html(field, options = {})
13
+ return unless respond_to?(field)
14
+ AttributeRenderer.new(field, send(field), options).render
15
+ end
16
+
17
+ def permission_badge
18
+ permission_badge_class.new(solr_document).render
19
+ end
20
+
21
+ def permission_badge_class
22
+ PermissionBadge
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ module CurationConcerns
2
+ class VersionListPresenter
3
+ def initialize(version_list)
4
+ @raw_list = version_list
5
+ end
6
+
7
+ delegate :each, to: :wrapped_list
8
+
9
+ private
10
+
11
+ def wrapped_list
12
+ @wrapped_list ||=
13
+ @raw_list.map { |v| CurationConcerns::VersionPresenter.new(v) } # wrap each item in a presenter
14
+ .sort { |a, b| b.version.created <=> a.version.created } # sort list of versions based on creation date
15
+ .tap { |l| l.first.try(:current!) } # set the first version to the current version
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ module CurationConcerns
2
+ class VersionPresenter
3
+ attr_reader :version, :current
4
+
5
+ def initialize(version)
6
+ @version = version
7
+ @current = false
8
+ end
9
+
10
+ delegate :label, :uri, to: :version
11
+ alias_method :current?, :current
12
+
13
+ def current!
14
+ @current = true
15
+ end
16
+
17
+ def created
18
+ @created ||= version.created.to_time.to_formatted_s(:long_ordinal)
19
+ @created
20
+ end
21
+
22
+ def committer
23
+ vc = VersionCommitter.where(version_id: @version.uri)
24
+ vc.empty? ? nil : vc.first.committer_login
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ module CurationConcerns
2
+ class WorkShowPresenter
3
+ include ModelProxy
4
+ include PresentsAttributes
5
+ attr_accessor :solr_document, :current_ability
6
+
7
+ # @param [SolrDocument] solr_document
8
+ # @param [Ability] current_ability
9
+ def initialize(solr_document, current_ability)
10
+ @solr_document = solr_document
11
+ @current_ability = current_ability
12
+ end
13
+
14
+ def page_title
15
+ solr_document.title
16
+ end
17
+
18
+ # CurationConcern methods
19
+ delegate :stringify_keys, :human_readable_type, :collection?, :representative_id, :to_s,
20
+ to: :solr_document
21
+
22
+ # Metadata Methods
23
+ delegate :title, :description, :creator, :contributor, :subject, :publisher, :language,
24
+ :embargo_release_date, :lease_expiration_date, :rights, to: :solr_document
25
+
26
+ def file_presenters
27
+ @file_sets ||= begin
28
+ ids = solr_document.fetch('file_set_ids_ssim', [])
29
+ PresenterFactory.build_presenters(ids, FileSetPresenter, current_ability)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,75 @@
1
+ module CurationConcerns
2
+ class AttributeRenderer
3
+ include ActionView::Helpers::UrlHelper
4
+ include ActionView::Helpers::TranslationHelper
5
+ attr_reader :field, :values, :options
6
+
7
+ # @param [Symbol] field
8
+ # @param [Array] values
9
+ # @param [Hash] options
10
+ def initialize(field, values, options = {})
11
+ @field = field
12
+ @values = values
13
+ @options = options
14
+ end
15
+
16
+ # Draw the table row for the attribute
17
+ def render
18
+ markup = ''
19
+
20
+ return markup if !values.present? && !options[:include_empty]
21
+ markup << %(<tr><th>#{label}</th>\n<td><ul class='tabular'>)
22
+ Array(values).each do |value|
23
+ markup << %(<li class="attribute #{field}">#{attribute_value_to_html(value)}</li>\n)
24
+ end
25
+ markup << %(</ul></td></tr>)
26
+ markup.html_safe
27
+ end
28
+
29
+ private
30
+
31
+ def label
32
+ translate(
33
+ :"blacklight.search.fields.show.#{field}",
34
+ default: [:"blacklight.search.fields.#{field}", options.fetch(:label, field.to_s.humanize)])
35
+ end
36
+
37
+ def attribute_value_to_html(value)
38
+ if field == :rights
39
+ rights_attribute_to_html(value)
40
+ else
41
+ li_value(value)
42
+ end
43
+ end
44
+
45
+ def search_field
46
+ options.fetch(:search_field, field)
47
+ end
48
+
49
+ def li_value(value)
50
+ link_to_if(options[:catalog_search_link], ERB::Util.h(value),
51
+ search_path(value))
52
+ end
53
+
54
+ def search_path(value)
55
+ Rails.application.routes.url_helpers.catalog_index_path(
56
+ search_field: search_field, q: ERB::Util.h(value))
57
+ end
58
+
59
+ ##
60
+ # Special treatment for license/rights. A URL from the Sufia gem's config/sufia.rb is stored in the descMetadata of the
61
+ # curation_concern. If that URL is valid in form, then it is used as a link. If it is not valid, it is used as plain text.
62
+ def rights_attribute_to_html(value)
63
+ begin
64
+ parsed_uri = URI.parse(value)
65
+ rescue
66
+ nil
67
+ end
68
+ if parsed_uri.nil?
69
+ ERB::Util.h(value)
70
+ else
71
+ %(<a href=#{ERB::Util.h(value)} target="_blank">#{RightsService.label(value)}</a>)
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,10 @@
1
+ module CurationConcerns
2
+ class DeactivatedEmbargoSearchBuilder < EmbargoSearchBuilder
3
+ self.default_processor_chain += [:with_deactivated_embargos]
4
+
5
+ def with_deactivated_embargos(solr_params)
6
+ solr_params[:fq] ||= []
7
+ solr_params[:fq] = 'embargo_history_ssim:*'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module CurationConcerns
2
+ class DeactivatedLeaseSearchBuilder < LeaseSearchBuilder
3
+ self.default_processor_chain += [:with_deactivated_leases]
4
+
5
+ def with_deactivated_leases(solr_params)
6
+ solr_params[:fq] ||= []
7
+ solr_params[:fq] = 'lease_history_ssim:*'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ module CurationConcerns
2
+ # Finds embargoed objects
3
+ class EmbargoSearchBuilder < Blacklight::SearchBuilder
4
+ self.default_processor_chain = [:with_pagination, :with_sorting, :only_active_embargoes]
5
+ def initialize(scope)
6
+ super(true, scope)
7
+ end
8
+
9
+ # TODO: add more complex pagination
10
+ def with_pagination(solr_params)
11
+ solr_params[:rows] = 1000
12
+ end
13
+
14
+ def with_sorting(solr_params)
15
+ solr_params[:sort] = 'embargo_release_date_dtsi desc'
16
+ end
17
+
18
+ def only_active_embargoes(solr_params)
19
+ solr_params[:fq] ||= []
20
+ solr_params[:fq] = 'embargo_release_date_dtsi:*'
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ module CurationConcerns
2
+ # Finds embargoed objects with release dates in the past
3
+ class ExpiredEmbargoSearchBuilder < EmbargoSearchBuilder
4
+ self.default_processor_chain += [:only_expired_embargoes]
5
+
6
+ def only_expired_embargoes(solr_params)
7
+ solr_params[:fq] ||= []
8
+ solr_params[:fq] = 'embargo_release_date_dtsi:[* TO NOW]'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module CurationConcerns
2
+ # Finds embargoed objects with release dates in the past
3
+ class ExpiredLeaseSearchBuilder < LeaseSearchBuilder
4
+ self.default_processor_chain += [:only_expired_leases]
5
+
6
+ def only_expired_leases(solr_params)
7
+ solr_params[:fq] ||= []
8
+ solr_params[:fq] = 'lease_expiration_date_dtsi:[* TO NOW]'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,23 @@
1
+ module CurationConcerns
2
+ # Finds objects under lease
3
+ class LeaseSearchBuilder < Blacklight::SearchBuilder
4
+ self.default_processor_chain = [:with_pagination, :with_sorting, :only_active_leases]
5
+ def initialize(scope)
6
+ super(true, scope)
7
+ end
8
+
9
+ # TODO: add more complex pagination
10
+ def with_pagination(solr_params)
11
+ solr_params[:rows] = 1000
12
+ end
13
+
14
+ def with_sorting(solr_params)
15
+ solr_params[:sort] = 'lease_expiration_date_dtsi desc'
16
+ end
17
+
18
+ def only_active_leases(solr_params)
19
+ solr_params[:fq] ||= []
20
+ solr_params[:fq] = 'lease_expiration_date_dtsi:*'
21
+ end
22
+ end
23
+ end
@@ -1,18 +1,13 @@
1
1
  class CurationConcerns::SearchBuilder < Hydra::SearchBuilder
2
- include BlacklightAdvancedSearch::AdvancedSearchBuilder
2
+ include BlacklightAdvancedSearch::AdvancedSearchBuilder
3
3
  include Hydra::Collections::SearchBehaviors
4
4
 
5
- def only_generic_files_and_curation_concerns(solr_parameters)
6
- solr_parameters[:fq] ||= []
7
- types_to_include = CurationConcerns.configuration.registered_curation_concern_types.dup
8
- types_to_include << "Collection"
9
- formatted_type_names = types_to_include.map{|class_name| "\"#{class_name}\""}.join(" ")
10
-
11
- solr_parameters[:fq] << "#{Solrizer.solr_name("has_model", :symbol)}:(#{formatted_type_names})"
5
+ def only_file_sets(solr_parameters)
6
+ solr_parameters[:fq] << ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: FileSet.to_class_uri)
7
+ end
12
8
 
13
- # CurationConcerns.configuration.registered_curation_concern_types.each do |curation_concern_class_name|
14
- # solr_parameters[:fq] << "#{Solrizer.solr_name("has_model", :symbol)}:(\"GenericFile\" \"Collection\")"
15
- # end
9
+ def find_one(solr_parameters)
10
+ solr_parameters[:fq] << "_query_:\"{!raw f=id}#{blacklight_params.fetch(:id)}\""
16
11
  end
17
12
 
18
13
  # Override Hydra::AccessControlsEnforcement (or Hydra::PolicyAwareAccessControlsEnforcement)
@@ -24,11 +19,10 @@ class CurationConcerns::SearchBuilder < Hydra::SearchBuilder
24
19
 
25
20
  # show only files with edit permissions in lib/hydra/access_controls_enforcement.rb apply_gated_discovery
26
21
  def discovery_permissions
27
- return ["edit"] if blacklight_params[:works] == 'mine'
22
+ return ['edit'] if blacklight_params[:works] == 'mine'
28
23
  super
29
24
  end
30
25
 
31
-
32
26
  # This is included as part of blacklight search solr params logic
33
27
  def filter_models(solr_parameters)
34
28
  solr_parameters[:fq] ||= []
@@ -36,14 +30,14 @@ class CurationConcerns::SearchBuilder < Hydra::SearchBuilder
36
30
  end
37
31
 
38
32
  def work_clauses
39
- return [] if blacklight_params.has_key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Collection')
40
- CurationConcerns.configuration.registered_curation_concern_types.map(&:constantize).map do |klass|
33
+ return [] if blacklight_params.key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Collection')
34
+ CurationConcerns.config.registered_curation_concern_types.map(&:constantize).map do |klass|
41
35
  ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: klass.to_class_uri)
42
36
  end
43
37
  end
44
38
 
45
39
  def collection_clauses
46
- return [] if blacklight_params.has_key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Work')
40
+ return [] if blacklight_params.key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Work')
47
41
  [ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: ::Collection.to_class_uri)]
48
42
  end
49
43
  end
@@ -1,14 +1,9 @@
1
1
  module CurationConcerns
2
2
  module CurationConcern
3
-
4
3
  def self.actor(curation_concern, *args)
5
4
  actor_identifier = curation_concern.class.to_s.split('::').last
6
5
  klass = "CurationConcerns::#{actor_identifier}Actor".constantize
7
6
  klass.new(curation_concern, *args)
8
7
  end
9
-
10
- def self.attach_file_to_generic_file(generic_file, user, file_to_attach)
11
- CurationConcerns::GenericFileActor.new(generic_file, user).create_content(file_to_attach)
12
- end
13
8
  end
14
9
  end