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
@@ -0,0 +1,8 @@
1
+ module CurationConcerns
2
+ module WelcomeControllerBehavior
3
+ extend ActiveSupport::Concern
4
+
5
+ def index
6
+ end
7
+ end
8
+ end
@@ -4,10 +4,11 @@ module CurationConcerns
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- prepend_before_filter :normalize_identifier, except: [:index, :create, :new]
7
+ prepend_before_action :normalize_identifier, except: [:index, :create, :new]
8
8
  end
9
9
 
10
10
  protected
11
+
11
12
  def normalize_identifier
12
13
  params[:id] = CurationConcerns::Noid.namespaceize(params[:id])
13
14
  end
@@ -2,33 +2,33 @@ module CurationConcerns
2
2
  class ClassifyConcernsController < ApplicationController
3
3
  include CurationConcerns::ThemedLayoutController
4
4
  with_themed_layout '1_column'
5
- respond_to :html
6
- before_filter :authenticate_user!
5
+ before_action :authenticate_user!
7
6
  load_and_authorize_resource
8
7
 
9
- add_breadcrumb 'Submit a work', lambda {|controller| controller.request.path }
8
+ add_breadcrumb 'Submit a work', ->(controller) { controller.request.path }
10
9
 
11
- def classify_concern
12
- @classify_concern
13
- end
10
+ attr_reader :classify_concern
14
11
  helper_method :classify_concern
15
12
 
16
13
  def new
17
- respond_with(classify_concern)
18
14
  end
19
15
 
20
16
  def create
21
17
  classify_concern.attributes = params[:classify_concern]
22
18
  if classify_concern.valid?
23
- respond_with(classify_concern) do |wants|
19
+ respond_to do |wants|
24
20
  wants.html do
25
21
  redirect_to new_polymorphic_path(
26
22
  [:curation_concerns, classify_concern.curation_concern_class]
27
23
  )
28
24
  end
25
+ wants.json { render_json_response(response_type: :created, options: { location: polymorphic_path([main_app, :curation_concerns, curation_concern]) }) }
29
26
  end
30
27
  else
31
- respond_with(classify_concern)
28
+ respond_to do |wants|
29
+ wants.html { render 'new', status: :unprocessable_entity }
30
+ wants.json { render_json_response(response_type: :unprocessable_entity, message: curation_concern.errors.messages) }
31
+ end
32
32
  end
33
33
  end
34
34
  end
@@ -0,0 +1,5 @@
1
+ module CurationConcerns
2
+ class FileSetsController < ApplicationController
3
+ include CurationConcerns::FileSetsControllerBehavior
4
+ end
5
+ end
@@ -7,13 +7,12 @@ class CurationConcerns::PermissionsController < ApplicationController
7
7
  end
8
8
 
9
9
  def copy
10
- CurationConcerns.queue.push(VisibilityCopyWorker.new(curation_concern.id))
10
+ VisibilityCopyJob.perform_later(curation_concern.id)
11
11
  flash_message = 'Updating file permissions. This may take a few minutes. You may want to refresh your browser or return to this record later to see the updated file permissions.'
12
12
  redirect_to polymorphic_path([main_app, :curation_concerns, curation_concern]), notice: flash_message
13
13
  end
14
14
 
15
15
  def curation_concern
16
- @curation_concern ||= self.curation_concern_type.find(params[:id], cast: true)
16
+ @curation_concern ||= curation_concern_type.find(params[:id], cast: true)
17
17
  end
18
-
19
18
  end
@@ -0,0 +1,5 @@
1
+ module CurationConcerns
2
+ class SingleUseLinksController < ApplicationController
3
+ include CurationConcerns::SingleUseLinksControllerBehavior
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ module CurationConcerns
2
+ class SingleUseLinksViewerController < ApplicationController
3
+ include CurationConcerns::SingleUseLinksViewerControllerBehavior
4
+
5
+ class Ability
6
+ include CanCan::Ability
7
+
8
+ attr_reader :single_use_link
9
+
10
+ def initialize(user, single_use_link)
11
+ @user = user || ::User.new
12
+
13
+ @single_use_link = single_use_link
14
+
15
+ can :read, [ActiveFedora::Base, SolrDocument] do |obj|
16
+ single_use_link.valid? && single_use_link.itemId == obj.id && single_use_link.destroy!
17
+ end if single_use_link
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,4 +1,3 @@
1
1
  class DownloadsController < ApplicationController
2
2
  include CurationConcerns::DownloadBehavior
3
-
4
3
  end
@@ -1,5 +1,3 @@
1
1
  class EmbargoesController < ApplicationController
2
- include CurationConcerns::ManagesEmbargoes
3
2
  include CurationConcerns::EmbargoesControllerBehavior
4
- include Hydra::Collections::AcceptsBatches
5
3
  end
@@ -1,5 +1,3 @@
1
1
  class LeasesController < ApplicationController
2
- include CurationConcerns::ManagesEmbargoes
3
2
  include CurationConcerns::LeasesControllerBehavior
4
- include Hydra::Collections::AcceptsBatches
5
3
  end
@@ -2,7 +2,7 @@ class RegistrationsController < Devise::RegistrationsController
2
2
  include CurationConcerns::ThemedLayoutController
3
3
  with_themed_layout '1_column'
4
4
 
5
- protected
5
+ # protected
6
6
 
7
7
  # def after_update_path_for(resource)
8
8
  # resource.update_column(:user_does_not_require_profile_update, true)
@@ -16,5 +16,4 @@ class RegistrationsController < Devise::RegistrationsController
16
16
  # def sign_up(resource_name, resource)
17
17
  # sign_in(resource_name, resource.user)
18
18
  # end
19
-
20
19
  end
@@ -0,0 +1,3 @@
1
+ class UploadSetsController < ApplicationController
2
+ include CurationConcerns::UploadSetsControllerBehavior
3
+ end
@@ -0,0 +1,3 @@
1
+ class WelcomeController < ApplicationController
2
+ include CurationConcerns::WelcomeControllerBehavior
3
+ end
@@ -4,14 +4,30 @@ module CurationConcerns
4
4
  include HydraEditor::Form
5
5
  self.model_class = ::Collection
6
6
  self.terms = [:resource_type, :title, :creator, :contributor, :description, :tag, :rights,
7
- :publisher, :date_created, :subject, :language, :identifier, :based_near, :related_url]
7
+ :publisher, :date_created, :subject, :language, :identifier, :based_near,
8
+ :related_url, :visibility]
8
9
 
9
10
  # Test to see if the given field is required
10
11
  # @param [Symbol] key a field
11
12
  # @return [Boolean] is it required or not
12
13
  def required?(key)
13
- model_class.validators_on(key).any?{|v| v.kind_of? ActiveModel::Validations::PresenceValidator}
14
+ model_class.validators_on(key).any? { |v| v.is_a? ActiveModel::Validations::PresenceValidator }
14
15
  end
16
+
17
+ # @return [Hash] All generic files in the collection, file.to_s is the key, file.id is the value
18
+ def select_files
19
+ Hash[all_files]
20
+ end
21
+
22
+ private
23
+
24
+ def all_files
25
+ member_presenters.flat_map(&:file_presenters).map { |x| [x.to_s, x.id] }
26
+ end
27
+
28
+ def member_presenters
29
+ PresenterFactory.build_presenters(model.member_ids, WorkShowPresenter, nil)
30
+ end
15
31
  end
16
32
  end
17
33
  end
@@ -0,0 +1,15 @@
1
+ module CurationConcerns::Forms
2
+ class FileSetEditForm
3
+ include HydraEditor::Form
4
+ self.required_fields = [:title, :creator, :tag, :rights]
5
+
6
+ self.model_class = ::FileSet
7
+
8
+ self.terms = [:resource_type, :title, :creator, :contributor, :description,
9
+ :tag, :rights, :publisher, :date_created, :subject, :language,
10
+ :identifier, :based_near, :related_url,
11
+ :visibility_during_embargo, :visibility_after_embargo, :embargo_release_date,
12
+ :visibility_during_lease, :visibility_after_lease, :lease_expiration_date,
13
+ :visibility]
14
+ end
15
+ end
@@ -0,0 +1,57 @@
1
+ module CurationConcerns
2
+ module Forms
3
+ class WorkForm
4
+ include HydraEditor::Form
5
+ attr_accessor :current_ability
6
+
7
+ self.terms = [:title, :creator, :contributor, :description,
8
+ :subject, :publisher, :source, :language,
9
+ :representative_id, :thumbnail_id, :rights, :files,
10
+ :visibility_during_embargo, :embargo_release_date, :visibility_after_embargo,
11
+ :visibility_during_lease, :lease_expiration_date, :visibility_after_lease,
12
+ :visibility]
13
+
14
+ # @param [ActiveFedora::Base,#member_ids] model
15
+ # @param [Ability] current_ability
16
+ def initialize(model, current_ability)
17
+ @model = model
18
+ @current_ability = current_ability
19
+ end
20
+
21
+ # The possible values for the representative_id dropdown
22
+ # @return [Hash] All file sets in the collection, file.to_s is the key, file.id is the value
23
+ def select_files
24
+ Hash[file_presenters.map { |file| [file.to_s, file.id] }]
25
+ end
26
+
27
+ class << self
28
+ # This determines whether the allowed parameters are single or multiple.
29
+ # By default it delegates to the model, but we need to override for
30
+ # 'rights' which only has a single value on the form.
31
+ def multiple?(term)
32
+ case term.to_s
33
+ when 'rights'
34
+ false
35
+ else
36
+ super
37
+ end
38
+ end
39
+
40
+ # Overriden to cast 'rights' to an array
41
+ def sanitize_params(form_params)
42
+ super.tap do |params|
43
+ params['rights'] = Array(params['rights']) if params.key?('rights')
44
+ end
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ # @return [Array<FileSetPresenter>] presenters for the file sets in order of the ids
51
+ def file_presenters
52
+ @file_sets ||=
53
+ PresenterFactory.build_presenters(model.member_ids, FileSetPresenter, current_ability)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -3,43 +3,43 @@ module CurationConcerns
3
3
  # Returns true if can create at least one type of work
4
4
  def can_ever_create_works?
5
5
  can = false
6
- CurationConcerns.configuration.curation_concerns.each do |curation_concern_type|
6
+ CurationConcerns.config.curation_concerns.each do |curation_concern_type|
7
7
  break if can
8
- can = can?(:create,curation_concern_type)
8
+ can = can?(:create, curation_concern_type)
9
9
  end
10
- return can
10
+ can
11
11
  end
12
12
 
13
13
  def visibility_options(variant)
14
14
  options = [
15
- ['Open Access',Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC],
16
- [t('curation_concerns.institution_name'),Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED],
17
- ['Private',Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE]
15
+ ['Open Access', Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC],
16
+ [t('curation_concerns.institution_name'), Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED],
17
+ ['Private', Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE]
18
18
  ]
19
19
  case variant
20
- when :restrict
21
- options.delete_at(0)
22
- options.reverse!
23
- when :loosen
24
- options.delete_at(2)
20
+ when :restrict
21
+ options.delete_at(0)
22
+ options.reverse!
23
+ when :loosen
24
+ options.delete_at(2)
25
25
  end
26
- return options
26
+ options
27
27
  end
28
28
 
29
29
  def visibility_badge(value)
30
30
  case value
31
- when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
32
- content_tag :span, "Open Access", class:"label label-success"
33
- when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
34
- content_tag :span, t('sufia.institution_name'), class:"label label-info"
35
- when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
36
- content_tag :span, "Private", class:"label label-danger"
37
- when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_EMBARGO
38
- content_tag :span, "Embargo", class:"label label-warning"
39
- when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_LEASE
40
- content_tag :span, "Lease", class:"label label-warning"
41
- else
42
- content_tag :span, value, class:"label label-info"
31
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
32
+ content_tag :span, "Open Access", class: "label label-success"
33
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
34
+ content_tag :span, t('curation_concerns.institution_name'), class: "label label-info"
35
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
36
+ content_tag :span, "Private", class: "label label-danger"
37
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_EMBARGO
38
+ content_tag :span, "Embargo", class: "label label-warning"
39
+ when Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_LEASE
40
+ content_tag :span, "Lease", class: "label label-warning"
41
+ else
42
+ content_tag :span, value, class: "label label-info"
43
43
  end
44
44
  end
45
45
  end
@@ -1,9 +1,10 @@
1
1
  module CurationConcerns::CatalogHelper
2
- def type_tab(label, key=label)
2
+ def type_tab(label, key = label)
3
3
  if params[:f] && params[:f][type_field] == [key]
4
- content_tag(:li, link_to(label, "#"), class: "active")
4
+ content_tag(:li, link_to(label, '#'), class: 'active')
5
5
  else
6
- facet_solr_field = facet_configuration_for_field(type_field)
6
+ # TODO: Unused variable. Not sure why this is here.
7
+ # facet_solr_field = facet_configuration_for_field(type_field)
7
8
  path = search_action_path(add_facet_params_and_redirect(type_field, key))
8
9
  # local_params = params.dup
9
10
  # local_facet_params = local_params[:f] || {}.with_indifferent_access
@@ -16,23 +17,23 @@ module CurationConcerns::CatalogHelper
16
17
 
17
18
  def all_type_tab(label = t('curation_concerns.catalog.index.type_tabs.all'))
18
19
  if params[:f] && params[:f][type_field]
19
- facet_solr_field = facet_configuration_for_field(type_field)
20
+ # TODO: Unused variable. Not sure why this is here.
21
+ # facet_solr_field = facet_configuration_for_field(type_field)
20
22
  new_params = remove_facet_params(type_field, params[:f][type_field].first)
21
23
 
22
24
  # Delete any request params from facet-specific action, needed
23
25
  # to redir to index action properly.
24
- new_params.except! *Blacklight::Solr::FacetPaginator.request_keys.values
26
+ new_params.except!(*Blacklight::Solr::FacetPaginator.request_keys.values)
25
27
  path = search_action_path(new_params)
26
28
  content_tag(:li, link_to(label, path))
27
29
  else
28
- content_tag(:li, link_to(label, '#'), class: "active")
30
+ content_tag(:li, link_to(label, '#'), class: 'active')
29
31
  end
30
32
  end
31
33
 
32
34
  private
33
35
 
34
36
  def type_field
35
- Solrizer.solr_name("generic_type", :facetable)
37
+ Solrizer.solr_name('generic_type', :facetable)
36
38
  end
37
-
38
39
  end
@@ -7,18 +7,19 @@ module CurationConcerns::CollectionsHelper
7
7
  "#{collectible.to_param.gsub(/:/, '-')}-modal"
8
8
  end
9
9
 
10
- def link_to_select_collection(collectible, opts={})
10
+ def link_to_select_collection(collectible, opts = {})
11
11
  html_class = opts[:class]
12
- link_to '#', data: { toggle: "modal", target: '#' + collection_modal_id(collectible) },
13
- class: "add-to-collection #{html_class}", title: "Add #{collectible.human_readable_type} to Collection" do
12
+ link_to '#', data: { toggle: 'modal', target: '#' + collection_modal_id(collectible) },
13
+ class: "add-to-collection #{html_class}", title: "Add #{collectible.human_readable_type} to Collection" do
14
14
  icon('plus-sign') + ' Add to a Collection'
15
15
  end
16
16
  end
17
17
 
18
18
  # override hydra-collections
19
19
  def link_to_remove_from_collection(document, label = 'Remove From Collection')
20
- link_to collections.collection_path(@collection.id, collection: { members: 'remove'},
21
- batch_document_ids: [ document.id ]), method: :put do
20
+ collection_id = @collection ? @collection.id : @presenter.id
21
+ link_to collections.collection_path(collection_id, collection: { members: 'remove' },
22
+ batch_document_ids: [document.id]), method: :put do
22
23
  icon('minus-sign') + ' ' + label
23
24
  end
24
25
  end
@@ -32,16 +33,16 @@ module CurationConcerns::CollectionsHelper
32
33
  end
33
34
 
34
35
  private
36
+
35
37
  # return a list of collections for the current user with the exception of the passed in collection
36
38
  def available_collections(exclude_item)
37
39
  if exclude_item
38
- collection_options.reject {|n| n.last == exclude_item.id}
40
+ collection_options.reject { |n| n.last == exclude_item.id }
39
41
  else
40
42
  collection_options
41
43
  end
42
44
  end
43
45
 
44
-
45
46
  def collection_options
46
47
  @collection_options ||= current_users_collections
47
48
  end
@@ -53,11 +54,7 @@ module CurationConcerns::CollectionsHelper
53
54
  current_user.collections.map { |c| [c.title.join(', '), c.id] }
54
55
  else
55
56
  query = ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: Collection.to_class_uri)
56
- ActiveFedora::SolrService.query(query, fl: 'title_tesim id',
57
- rows: 1000).map do |r|
58
- [r['title_tesim'].join(', '), r['id']]
59
- end.sort { |a, b| a.first <=> b.first }
57
+ ActiveFedora::SolrService.query(query, fl: 'title_tesim id', rows: 1000).map { |r| [r['title_tesim'].join(', '), r['id']] }.sort { |a, b| a.first <=> b.first }
60
58
  end
61
59
  end
62
-
63
60
  end
@@ -1,6 +1,5 @@
1
1
  module CurationConcerns
2
2
  module EmbargoHelper
3
-
4
3
  def assets_with_expired_embargoes
5
4
  @assets_with_expired_embargoes ||= EmbargoService.assets_with_expired_embargoes
6
5
  end
@@ -12,6 +11,5 @@ module CurationConcerns
12
11
  def assets_with_deactivated_embargoes
13
12
  @assets_with_deactivated_embargoes ||= EmbargoService.assets_with_deactivated_embargoes
14
13
  end
15
-
16
14
  end
17
15
  end
@@ -0,0 +1,31 @@
1
+ module CurationConcerns::FileSetHelper
2
+ def parent_path(parent)
3
+ if parent.is_a?(Collection)
4
+ main_app.collection_path(parent)
5
+ else
6
+ polymorphic_path([main_app, :curation_concerns, parent])
7
+ end
8
+ end
9
+
10
+ def media_display(file_set, locals = {})
11
+ render media_display_partial(file_set),
12
+ locals.merge(file_set: file_set)
13
+ end
14
+
15
+ def media_display_partial(file_set)
16
+ 'curation_concerns/file_sets/media_display/' +
17
+ if file_set.image?
18
+ 'image'
19
+ elsif file_set.video?
20
+ 'video'
21
+ elsif file_set.audio?
22
+ 'audio'
23
+ elsif file_set.pdf?
24
+ 'pdf'
25
+ elsif file_set.office_document?
26
+ 'office_document'
27
+ else
28
+ 'default'
29
+ end
30
+ end
31
+ end
@@ -1,6 +1,5 @@
1
1
  module CurationConcerns
2
2
  module LeaseHelper
3
-
4
3
  def assets_with_expired_leases
5
4
  @assets_with_expired_leases ||= LeaseService.assets_with_expired_leases
6
5
  end
@@ -12,7 +11,5 @@ module CurationConcerns
12
11
  def assets_with_deactivated_leases
13
12
  @assets_with_deactivated_leases ||= LeaseService.assets_with_deactivated_leases
14
13
  end
15
-
16
14
  end
17
15
  end
18
-
@@ -1,11 +1,9 @@
1
1
  module CurationConcerns::MainAppHelpers
2
2
  include CurationConcerns::TitleHelper
3
- include CurationConcerns::AttributeHelper
4
- include CurationConcerns::GenericFileHelper
3
+ include CurationConcerns::FileSetHelper
5
4
  include CurationConcerns::SearchPathsHelper
6
5
  include CurationConcerns::RenderConstraintsHelper
7
6
  include CurationConcerns::AbilityHelper
8
- include CurationConcerns::ThumbnailHelper
9
7
  include CurationConcerns::UrlHelper
10
8
  include CurationConcerns::EmbargoHelper
11
9
  include CurationConcerns::LeaseHelper
@@ -4,17 +4,17 @@ module CurationConcerns
4
4
  # This is because unlike Blacklight, there is no way to change the search_field in the curation_concerns UI
5
5
  ##
6
6
  # Render the query constraints
7
- #
7
+ #
8
8
  # @param [Hash] query parameters
9
9
  # @return [String]
10
10
  def render_constraints_query(localized_params = params)
11
11
  # So simple don't need a view template, we can just do it here.
12
- return "".html_safe if localized_params[:q].blank?
12
+ return ''.html_safe if localized_params[:q].blank?
13
13
 
14
14
  render_constraint_element(constraint_query_label(localized_params),
15
- localized_params[:q],
16
- classes: ["query"],
17
- remove: url_for(localized_params.except(:search_field).merge(q: nil, action: 'index')))
15
+ localized_params[:q],
16
+ classes: ['query'],
17
+ remove: url_for(localized_params.except(:search_field).merge(q: nil, action: 'index')))
18
18
  end
19
19
 
20
20
  ##
@@ -1,13 +1,11 @@
1
1
  module CurationConcerns::SearchPathsHelper
2
-
3
- def search_path_for_my_works(opts={})
4
- params_for_my_works = {:'f[generic_type_sim][]'=>'Work', works: 'mine'}
2
+ def search_path_for_my_works(opts = {})
3
+ params_for_my_works = { 'f[generic_type_sim][]' => 'Work', works: 'mine' }
5
4
  main_app.catalog_index_path(params_for_my_works.merge(opts))
6
5
  end
7
6
 
8
- def search_path_for_my_collections(opts={})
9
- params_for_my_collections = {:'f[generic_type_sim][]'=>'Collection', works: 'mine'}
7
+ def search_path_for_my_collections(opts = {})
8
+ params_for_my_collections = { 'f[generic_type_sim][]' => 'Collection', works: 'mine' }
10
9
  main_app.catalog_index_path(params_for_my_collections.merge(opts))
11
10
  end
12
-
13
- end
11
+ end
@@ -1,12 +1,11 @@
1
1
  module CurationConcerns::TitleHelper
2
-
3
2
  def construct_page_title(*elements)
4
- (elements.flatten.compact + [application_name]).join(" // ")
3
+ (elements.flatten.compact + [application_name]).join(' // ')
5
4
  end
6
5
 
7
6
  def curation_concern_page_title(curation_concern)
8
7
  if curation_concern.persisted?
9
- construct_page_title(curation_concern.title, "#{curation_concern.human_readable_type} [#{curation_concern.to_param}]")
8
+ construct_page_title(curation_concern.to_s, "#{curation_concern.human_readable_type} [#{curation_concern.to_param}]")
10
9
  else
11
10
  construct_page_title("New #{curation_concern.human_readable_type}")
12
11
  end
@@ -14,10 +13,7 @@ module CurationConcerns::TitleHelper
14
13
 
15
14
  def default_page_title
16
15
  text = controller_name.singularize.titleize
17
- if action_name
18
- text = "#{action_name.titleize} " + text
19
- end
16
+ text = "#{action_name.titleize} " + text if action_name
20
17
  construct_page_title(text)
21
18
  end
22
-
23
19
  end
@@ -1,9 +1,8 @@
1
1
  module CurationConcerns
2
2
  module UrlHelper
3
-
4
3
  # override Blacklight so we can use our 'curation_concern' namespace
5
4
  # We may also pass in a ActiveFedora document instead of a SolrDocument
6
- def url_for_document doc, options = {}
5
+ def url_for_document(doc, _options = {})
7
6
  if doc.collection?
8
7
  doc
9
8
  else
@@ -15,15 +14,14 @@ module CurationConcerns
15
14
  main_app.track_solr_document_path(*args)
16
15
  end
17
16
 
18
- def track_generic_file_path(*args)
17
+ def track_file_set_path(*args)
19
18
  main_app.track_solr_document_path(*args)
20
19
  end
21
20
 
22
21
  # generated new GenericWork models get registered as curation concerns and need a
23
22
  # track_model_path to render Blacklight-related views
24
- CurationConcerns.configuration.registered_curation_concern_types.each do |concern|
25
- define_method("track_#{concern.underscore}_path") {|*args| main_app.track_solr_document_path(*args)}
23
+ CurationConcerns.config.registered_curation_concern_types.each do |concern|
24
+ define_method("track_#{concern.underscore}_path") { |*args| main_app.track_solr_document_path(*args) }
26
25
  end
27
-
28
26
  end
29
27
  end
@@ -0,0 +1,8 @@
1
+ class MultifileInput < SimpleForm::Inputs::CollectionInput
2
+ def input(wrapper_options = nil)
3
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
4
+
5
+ merged_input_options.merge!(name: "#{@builder.object_name}[#{attribute_name}][]")
6
+ @builder.file_field(attribute_name, merged_input_options)
7
+ end
8
+ end
@@ -0,0 +1,22 @@
1
+ class VisibilityCopyJob < ActiveFedoraIdBasedJob
2
+ queue_as :permissions
3
+
4
+ def perform(id)
5
+ @id = id
6
+ work = object
7
+ work.file_sets.each do |file|
8
+ file.visibility = work.visibility # visibility must come first, because it can clear an embargo/lease
9
+ if work.lease
10
+ file.build_lease unless file.lease
11
+ file.lease.attributes = work.lease.attributes.except('id')
12
+ file.lease.save
13
+ end
14
+ if work.embargo
15
+ file.build_embargo unless file.embargo
16
+ file.embargo.attributes = work.embargo.attributes.except('id')
17
+ file.embargo.save
18
+ end
19
+ file.save!
20
+ end
21
+ end
22
+ end