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,31 +0,0 @@
1
- module CurationConcerns
2
- class QuickClassificationQuery
3
-
4
- def self.each_for_context(*args, &block)
5
- new(*args).all.each(&block)
6
- end
7
-
8
- attr_reader :user
9
-
10
- def initialize(user, options = {})
11
- @user = user
12
- @concern_name_normalizer = options.fetch(:concern_name_normalizer, ClassifyConcern.method(:to_class))
13
- @registered_curation_concern_names = options.fetch(:registered_curation_concern_names, CurationConcerns.configuration.registered_curation_concern_types)
14
- end
15
-
16
- def all
17
- ActiveFedora::Base.logger.debug "User is #{user}"
18
- ActiveFedora::Base.logger.debug "try is #{normalized_curation_concern_names.first}"
19
- ActiveFedora::Base.logger.debug "can is #{user.can?(:create, normalized_curation_concern_names.first)}"
20
- normalized_curation_concern_names.select {|klass| user.can?(:create, klass)}
21
- end
22
-
23
- private
24
-
25
- attr_reader :concern_name_normalizer, :registered_curation_concern_names
26
-
27
- def normalized_curation_concern_names
28
- registered_curation_concern_names.collect{|name| concern_name_normalizer.call(name) }
29
- end
30
- end
31
- end
@@ -1,148 +0,0 @@
1
- class FitsDatastream < ActiveFedora::OmDatastream
2
- include OM::XML::Document
3
-
4
- set_terminology do |t|
5
- t.root(path: "fits",
6
- xmlns: "http://hul.harvard.edu/ois/xml/ns/fits/fits_output",
7
- schema: "http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd")
8
- t.identification {
9
- t.identity {
10
- t.format_label(path: {attribute: "format"})
11
- t.mime_type(path: {attribute: "mimetype"})
12
- }
13
- }
14
- t.fileinfo {
15
- t.file_size(path: "size")
16
- t.last_modified(path: "lastmodified")
17
- t.filename(path: "filename")
18
- t.original_checksum(path: "md5checksum")
19
- t.rights_basis(path: "rightsBasis")
20
- t.copyright_basis(path: "copyrightBasis")
21
- t.copyright_note(path: "copyrightNote")
22
- }
23
- t.filestatus {
24
- t.well_formed(path: "well-formed")
25
- t.valid(path: "valid")
26
- t.status_message(path: "message")
27
- }
28
- t.metadata {
29
- t.document {
30
- t.file_title(path: "title")
31
- t.file_author(path: "author")
32
- t.file_language(path: "language")
33
- t.page_count(path: "pageCount")
34
- t.word_count(path: "wordCount")
35
- t.character_count(path: "characterCount")
36
- t.paragraph_count(path: "paragraphCount")
37
- t.line_count(path: "lineCount")
38
- t.table_count(path: "tableCount")
39
- t.graphics_count(path: "graphicsCount")
40
- }
41
- t.image {
42
- t.byte_order(path: "byteOrder")
43
- t.compression(path: "compressionScheme")
44
- t.width(path: "imageWidth")
45
- t.height(path: "imageHeight")
46
- t.color_space(path: "colorSpace")
47
- t.profile_name(path: "iccProfileName")
48
- t.profile_version(path: "iccProfileVersion")
49
- t.orientation(path: "orientation")
50
- t.color_map(path: "colorMap")
51
- t.image_producer(path: "imageProducer")
52
- t.capture_device(path: "captureDevice")
53
- t.scanning_software(path: "scanningSoftwareName")
54
- t.exif_version(path: "exifVersion")
55
- t.gps_timestamp(path: "gpsTimeStamp")
56
- t.latitude(path: "gpsDestLatitude")
57
- t.longitude(path: "gpsDestLongitude")
58
- }
59
- t.text {
60
- t.character_set(path: "charset")
61
- t.markup_basis(path: "markupBasis")
62
- t.markup_language(path: "markupLanguage")
63
- }
64
- t.audio {
65
- t.duration(path: "duration")
66
- t.bit_depth(path: "bitDepth")
67
- t.sample_rate(path: "sampleRate")
68
- t.channels(path: "channels")
69
- t.data_format(path: "dataFormatType")
70
- t.offset(path: "offset")
71
- }
72
- t.video {
73
- t.width(path: "imageWidth")
74
- t.height(path: "imageHeight")
75
- t.duration(path: "duration")
76
- t.sample_rate(path: "sampleRate")
77
- t.frame_rate(path: "frameRate")
78
- }
79
- }
80
- t.format_label(proxy: [:identification, :identity, :format_label])
81
- t.mime_type(proxy: [:identification, :identity, :mime_type])
82
- t.file_size(proxy: [:fileinfo, :file_size])
83
- t.last_modified(proxy: [:fileinfo, :last_modified])
84
- t.filename(proxy: [:fileinfo, :filename])
85
- t.original_checksum(proxy: [:fileinfo, :original_checksum])
86
- t.rights_basis(proxy: [:fileinfo, :rights_basis])
87
- t.copyright_basis(proxy: [:fileinfo, :copyright_basis])
88
- t.copyright_note(proxy: [:fileinfo, :copyright_note])
89
- t.well_formed(proxy: [:filestatus, :well_formed])
90
- t.valid(proxy: [:filestatus, :valid])
91
- t.status_message(proxy: [:filestatus, :status_message])
92
- t.file_title(proxy: [:metadata, :document, :file_title])
93
- t.file_author(proxy: [:metadata, :document, :file_author])
94
- t.page_count(proxy: [:metadata, :document, :page_count])
95
- t.file_language(proxy: [:metadata, :document, :file_language])
96
- t.word_count(proxy: [:metadata, :document, :word_count])
97
- t.character_count(proxy: [:metadata, :document, :character_count])
98
- t.paragraph_count(proxy: [:metadata, :document, :paragraph_count])
99
- t.line_count(proxy: [:metadata, :document, :line_count])
100
- t.table_count(proxy: [:metadata, :document, :table_count])
101
- t.graphics_count(proxy: [:metadata, :document, :graphics_count])
102
- t.byte_order(proxy: [:metadata, :image, :byte_order])
103
- t.compression(proxy: [:metadata, :image, :compression])
104
- t.width(proxy: [:metadata, :image, :width])
105
- t.video_width( proxy: [:metadata, :video, :width])
106
- t.height(proxy: [:metadata, :image, :height])
107
- t.video_height(proxy: [:metadata, :video, :height])
108
- t.color_space(proxy: [:metadata, :image, :color_space])
109
- t.profile_name(proxy: [:metadata, :image, :profile_name])
110
- t.profile_version(proxy: [:metadata, :image, :profile_version])
111
- t.orientation(proxy: [:metadata, :image, :orientation])
112
- t.color_map(proxy: [:metadata, :image, :color_map])
113
- t.image_producer(proxy: [:metadata, :image, :image_producer])
114
- t.capture_device(proxy: [:metadata, :image, :capture_device])
115
- t.scanning_software(proxy: [:metadata, :image, :scanning_software])
116
- t.exif_version(proxy: [:metadata, :image, :exif_version])
117
- t.gps_timestamp(proxy: [:metadata, :image, :gps_timestamp])
118
- t.latitude(proxy: [:metadata, :image, :latitude])
119
- t.longitude(proxy: [:metadata, :image, :longitude])
120
- t.character_set(proxy: [:metadata, :text, :character_set])
121
- t.markup_basis(proxy: [:metadata, :text, :markup_basis])
122
- t.markup_language(proxy: [:metadata, :text, :markup_language])
123
- t.duration(proxy: [:metadata, :audio, :duration])
124
- t.video_duration(proxy: [:metadata, :video, :duration])
125
- t.bit_depth(proxy: [:metadata, :audio, :bit_depth])
126
- t.sample_rate(proxy: [:metadata, :audio, :sample_rate])
127
- t.video_sample_rate(proxy: [:metadata, :video, :sample_rate])
128
- t.channels(proxy: [:metadata, :audio, :channels])
129
- t.data_format(proxy: [:metadata, :audio, :data_format])
130
- t.offset(proxy: [:metadata, :audio, :offset])
131
- t.frame_rate(proxy: [:metadata, :video, :frame_rate])
132
- end
133
-
134
- def self.xml_template
135
- builder = Nokogiri::XML::Builder.new do |xml|
136
- xml.fits(xmlns: 'http://hul.harvard.edu/ois/xml/ns/fits/fits_output',
137
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
138
- 'xsi:schemaLocation' =>
139
- "http://hul.harvard.edu/ois/xml/ns/fits/fits_output
140
- http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd",
141
- version: "0.6.0",
142
- timestamp: "1/25/12 11:04 AM") {
143
- xml.identification { xml.identity(toolname: 'FITS') }
144
- }
145
- end
146
- builder.doc
147
- end
148
- end
@@ -1,2 +0,0 @@
1
- class VersionCommitter < ActiveRecord::Base
2
- end
@@ -1,71 +0,0 @@
1
- module CurationConcerns
2
- # Run FITS to gather technical metadata about the content and the full text.
3
- # Store this extracted metadata in the characterization datastream.
4
- class CharacterizationService
5
- include Hydra::Derivatives::ExtractMetadata
6
-
7
- delegate :mime_type, :uri, to: :@generic_file
8
- attr_reader :generic_file
9
-
10
- def self.run(generic_file)
11
- new(generic_file).characterize
12
- end
13
-
14
- def initialize(generic_file)
15
- @generic_file = generic_file
16
- end
17
-
18
- ## Extract the metadata from the content datastream and record it in the characterization datastream
19
- def characterize
20
- store_metadata(extract_metadata)
21
- store_fulltext(extract_fulltext)
22
- generic_file.filename = [generic_file.original_file.original_name]
23
- end
24
-
25
- protected
26
-
27
- def store_fulltext(extracted_text)
28
- if extracted_text.present?
29
- extracted_text_file = generic_file.build_extracted_text
30
- extracted_text_file.content = extracted_text
31
- end
32
- end
33
-
34
- def extract_fulltext
35
- FullTextExtractionService.run(generic_file)
36
- end
37
-
38
- def store_metadata(metadata)
39
- generic_file.characterization.ng_xml = metadata if metadata.present?
40
- append_metadata
41
- end
42
-
43
- def extract_metadata
44
- return unless generic_file.original_file.has_content?
45
- Hydra::FileCharacterization.characterize(generic_file.original_file.content, filename_for_characterization.join, :fits) do |config|
46
- config[:fits] = Hydra::Derivatives.fits_path
47
- end
48
- end
49
-
50
- # Populate GenericFile's properties with fields from FITS (e.g. Author from pdfs)
51
- def append_metadata
52
- terms = generic_file.characterization_terms
53
- CurationConcerns.config.fits_to_desc_mapping.each_pair do |k, v|
54
- if terms.has_key?(k)
55
- # coerce to array to remove a conditional
56
- terms[k] = [terms[k]] unless terms[k].is_a? Array
57
- terms[k].each do |term_value|
58
- proxy_term = generic_file.send(v)
59
- if proxy_term.kind_of?(Array)
60
- proxy_term << term_value unless proxy_term.include?(term_value)
61
- else
62
- # these are single-valued terms which cannot be appended to
63
- generic_file.send("#{v}=", term_value)
64
- end
65
- end
66
- end
67
- end
68
- end
69
-
70
- end
71
- end
@@ -1,38 +0,0 @@
1
- module CurationConcerns
2
- # Extract the full text from the content using Solr's extract handler
3
- class FullTextExtractionService
4
- def self.run(generic_file)
5
- new(generic_file).extract
6
- end
7
-
8
- delegate :original_file, :logger, :mime_type, :id, to: :@generic_file
9
-
10
- def initialize(generic_file)
11
- @generic_file = generic_file
12
- end
13
-
14
- def extract
15
- uri = URI("#{connection_url}/update/extract?extractOnly=true&wt=json&extractFormat=text")
16
- req = Net::HTTP.new(uri.host, uri.port)
17
- resp = req.post(uri.to_s, original_file.content, {
18
- 'Content-type' => "#{mime_type};charset=utf-8",
19
- 'Content-Length' => original_file.content.size.to_s
20
- })
21
- raise "URL '#{uri}' returned code #{resp.code}" unless resp.code == "200"
22
- original_file.content.rewind if original_file.content.respond_to?(:rewind)
23
- JSON.parse(resp.body)[''].rstrip
24
- rescue => e
25
- logger.error("Error extracting content from #{id}: #{e.inspect}")
26
- return nil
27
- end
28
-
29
- def connection_url
30
- case
31
- when Blacklight.connection_config[:url] then Blacklight.connection_config[:url]
32
- when Blacklight.connection_config["url"] then Blacklight.connection_config["url"]
33
- when Blacklight.connection_config[:fulltext] then Blacklight.connection_config[:fulltext]["url"]
34
- else Blacklight.connection_config[:default]["url"]
35
- end
36
- end
37
- end
38
- end
@@ -1,85 +0,0 @@
1
- module CurationConcerns
2
- class GenericFileAuditService
3
- attr_reader :generic_file
4
- def initialize(file)
5
- @generic_file = file
6
- end
7
-
8
- NO_RUNS = 999
9
-
10
- # provides a human readable version of the audit status
11
- def human_readable_audit_status(stat)
12
- case stat
13
- when 0
14
- 'failing'
15
- when 1
16
- 'passing'
17
- else
18
- stat
19
- end
20
- end
21
-
22
- # Audits each version of each file if it hasn't been audited recently
23
- # Returns the set of most recent audit status for each version of the content file
24
- # @param [Hash] log container for messages, mapping file ids to status
25
- def audit(log={})
26
- generic_file.files.each { |f| log[f.id] = audit_file(f) }
27
- log
28
- end
29
-
30
- private
31
-
32
- # Retrieve or generate the audit check for a file (all versions are checked for versioned files)
33
- # @param [ActiveFedora::File] file to audit
34
- # @param [Array] log container for messages
35
- def audit_file(file, log=[])
36
- versions = file.has_versions? ? file.versions.all : file
37
- versions.each { |v| log << audit_file_version(file.id, v.uri) }
38
- log
39
- end
40
-
41
- # Retrieve or generate the audit check for a file and provide a human-readable status message.
42
- # @param [ActiveFedora::File] file to audit
43
- def audit_stat(file)
44
- audit_results = audit_file(file).collect { |result| result["pass"] }
45
- # check how many non runs we had
46
- non_runs = audit_results.reduce(0) { |sum, value| value == NO_RUNS ? sum += 1 : sum }
47
- if non_runs == 0
48
- audit_results.reduce(true) { |sum, value| sum && value }
49
- elsif non_runs < audit_results.length
50
- result = audit_results.reduce(true) { |sum, value| value == NO_RUNS ? sum : sum && value }
51
- "Some audits have not been run, but the ones run were #{human_readable_audit_status(result)}."
52
- else
53
- 'Audits have not yet been run on this file.'
54
- end
55
- end
56
-
57
- # Retrieve or generate the audit check for a specific version of a file
58
- # @param [String] file_id used to find the file within its parent object (usually "original_file")
59
- # @param [String] version_uri the version to be audited (or the file uri for non-versioned files)
60
- def audit_file_version(file_id, version_uri)
61
- latest_audit = ChecksumAuditLog.logs_for(generic_file.id, file_id).first
62
- return latest_audit unless needs_audit?(latest_audit)
63
- CurationConcerns.queue.push(AuditJob.new(generic_file.id, file_id, version_uri))
64
- latest_audit || ChecksumAuditLog.new(pass: NO_RUNS, generic_file_id: generic_file.id, file_id: file_id, version: version_uri)
65
- end
66
-
67
- # Check if time since the last audit is greater than the maximum days allowed between audits
68
- # @param [ChecksumAuditLog] latest_audit the most recent audit event
69
- def needs_audit?(latest_audit)
70
- return true unless latest_audit
71
- unless latest_audit.updated_at
72
- logger.warn "***AUDIT*** problem with audit log! Latest Audit is not nil, but updated_at is not set #{latest_audit}"
73
- return true
74
- end
75
- days_since_last_audit(latest_audit) >= CurationConcerns.config.max_days_between_audits
76
- end
77
-
78
- # Return the number of days since the latest audit event
79
- # @param [ChecksumAuditLog] latest_audit the most recent audit event
80
- def days_since_last_audit(latest_audit)
81
- (DateTime.now - latest_audit.updated_at.to_date).to_i
82
- end
83
-
84
- end
85
- end
@@ -1,14 +0,0 @@
1
- module CurationConcerns
2
- class GenericFileIndexingService < ActiveFedora::IndexingService
3
- def generate_solr_document
4
- super.tap do |solr_doc|
5
- solr_doc[Solrizer.solr_name('label')] = object.label
6
- solr_doc[Solrizer.solr_name('file_format')] = object.file_format
7
- solr_doc[Solrizer.solr_name('file_format', :facetable)] = object.file_format
8
- solr_doc[Solrizer.solr_name(:file_size, :symbol)] = object.file_size[0]
9
- solr_doc['all_text_timv'] = object.full_text.content
10
- solr_doc[Solrizer.solr_name('generic_work_ids', :symbol)] = object.generic_work_ids unless object.generic_work_ids.empty?
11
- end
12
- end
13
- end
14
- end
@@ -1,16 +0,0 @@
1
- module CurationConcerns
2
- class GenericWorkIndexingService < ActiveFedora::IndexingService
3
-
4
- def generate_solr_document
5
- super.tap do |solr_doc|
6
- # We know that all the members of GenericWorks are GenericFiles so we can use
7
- # member_ids which requires fewer Fedora API calls than generic_file_ids.
8
- # generic_file_ids requires loading all the members from Fedora but member_ids
9
- # looks just at solr
10
- solr_doc[Solrizer.solr_name('generic_file_ids', :symbol)] = object.member_ids
11
- Solrizer.set_field(solr_doc, 'generic_type', 'Work', :facetable)
12
- end
13
- end
14
-
15
- end
16
- end
@@ -1,23 +0,0 @@
1
- require 'active_fedora/noid'
2
-
3
- module CurationConcerns
4
- module Noid
5
- extend ActiveSupport::Concern
6
-
7
- ## This overrides the default behavior, which is to ask Fedora for an id
8
- # @see ActiveFedora::Persistence.assign_id
9
- def assign_id
10
- service.mint if CurationConcerns.config.enable_noids
11
- end
12
-
13
- def to_param
14
- id
15
- end
16
-
17
- private
18
-
19
- def service
20
- @service ||= ActiveFedora::Noid::Service.new
21
- end
22
- end
23
- end
@@ -1,9 +0,0 @@
1
- module CurationConcerns
2
- class RepositoryAuditService
3
- def self.audit_everything
4
- ::GenericFile.find_each do |gf|
5
- gf.audit
6
- end
7
- end
8
- end
9
- end
@@ -1,27 +0,0 @@
1
- module CurationConcerns
2
- class VersioningService
3
- # Make a version and record the version committer
4
- # @param [ActiveFedora::File] content
5
- # @param [User] user
6
- def self.create(content, user=nil)
7
- content.create_version
8
- record_committer(content, user) if user
9
- end
10
-
11
- # @param [ActiveFedora::File] file
12
- def self.latest_version_of(file)
13
- file.versions.last
14
- end
15
-
16
- protected
17
-
18
- # Record the version committer of the last version
19
- # @param [ActiveFedora::File] content
20
- # @param [User] user
21
- def self.record_committer(content, user)
22
- version = latest_version_of(content)
23
- return if version.nil?
24
- VersionCommitter.create(version_id: version.uri, committer_login: user.user_key)
25
- end
26
- end
27
- end
@@ -1,6 +0,0 @@
1
- en:
2
- curation_concerns:
3
- product_name: "CurationConcerns"
4
- product_twitter_handle: "@HydraSphere"
5
- institution_name: "Institution Name"
6
- institution_name_full: "The Institution Name"
@@ -1,34 +0,0 @@
1
- # coding: utf-8
2
- version = File.read(File.expand_path("../../VERSION", __FILE__)).strip
3
-
4
- lib = File.expand_path('../lib', __FILE__)
5
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = "curation_concerns-models"
9
- spec.version = version
10
- spec.authors = ["Justin Coyne"]
11
- spec.email = ["justin@curationexperts.com"]
12
- spec.summary = %q{Simple institutional repository models for Hydra}
13
- spec.description = %q{An extensible repository data-model with works and and many attached files}
14
- spec.homepage = ""
15
- spec.license = "APACHE2"
16
-
17
- spec.files = `git ls-files -z`.split("\x0")
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
- spec.require_paths = ["lib"]
21
-
22
- spec.add_dependency 'active_attr'
23
- spec.add_dependency 'nest', '~> 1.1'
24
- spec.add_dependency 'hydra-collections', '~> 6.0.0.alpha'
25
- spec.add_dependency 'hydra-head', '~> 9.2.2'
26
- spec.add_dependency 'hydra-works', '~> 0.1'
27
- spec.add_dependency 'active-fedora', '~> 9.3.0'
28
- spec.add_dependency 'active_fedora-noid', '~> 1.0.2'
29
- spec.add_dependency 'resque', '~> 1.23'
30
- spec.add_dependency 'resque-pool', '~> 0.3'
31
-
32
- spec.add_development_dependency 'bundler', '~> 1.6'
33
- spec.add_development_dependency 'rake'
34
- end
@@ -1,66 +0,0 @@
1
- module CurationConcerns
2
- module Messages
3
- extend ActiveSupport::Concern
4
-
5
- # Borrowed from AbstractController so we can render html content tags
6
- attr_accessor :output_buffer
7
- include ActionView::Helpers::TagHelper
8
- include ActionView::Helpers::UrlHelper
9
-
10
- def success_subject
11
- I18n.t("curation_concerns.messages.success.subject")
12
- end
13
-
14
- def failure_subject
15
- I18n.t("curation_concerns.messages.failure.subject")
16
- end
17
-
18
- def single_success id, file
19
- content_tag :span, id: "ss-"+id do
20
- [link_to_file(file), I18n.t("curation_concerns.messages.success.single")].join(" ").html_safe
21
- end
22
- end
23
-
24
- def multiple_success id, files
25
- content_tag :span, id: "ss-"+id do
26
- [success_link(files), I18n.t("curation_concerns.messages.success.multiple.tag")].join(" ").html_safe
27
- end
28
- end
29
-
30
- def single_failure id, file
31
- content_tag :span, id: "ss-"+id do
32
- [link_to_file(file), I18n.t("curation_concerns.messages.failure.single")].join(" ").html_safe
33
- end
34
- end
35
-
36
- def multiple_failure id, files
37
- content_tag :span, id: "ss-"+id do
38
- [failure_link(files), I18n.t("curation_concerns.messages.failure.multiple.tag")].join(" ").html_safe
39
- end
40
- end
41
-
42
- # Double-quotes are replaced with single ones so this list can be included in a data block. Ex:
43
- # <a href="#" data-content="<a href='#'>embedded link</a>" rel="popover">Click me</a>
44
- def file_list files
45
- files.map { |gf| link_to_file(gf) }.join(', ').gsub(/"/, "'")
46
- end
47
-
48
- def link_to_file file
49
- link_to(file.to_s, Rails.application.class.routes.url_helpers.curation_concerns_generic_file_path(file))
50
- end
51
-
52
- private
53
-
54
- def success_link files
55
- link_to I18n.t("curation_concerns.messages.success.multiple.link"), "#",
56
- rel: "popover",
57
- data: { content: file_list(files).html_safe, title: I18n.t("curation_concerns.messages.success.title") }
58
- end
59
-
60
- def failure_link files
61
- link_to I18n.t("curation_concerns.messages.failure.multiple.link"), "#",
62
- rel: "popover",
63
- data: { content: file_list(files).html_safe, title: I18n.t("curation_concerns.messages.failure.title") }
64
- end
65
- end
66
- end
@@ -1,61 +0,0 @@
1
- module CurationConcerns
2
- module Models
3
-
4
- def self.config(&block)
5
- @@config ||= Engine::Configuration.new
6
- yield @@config if block
7
- return @@config
8
- end
9
-
10
-
11
- class Engine < ::Rails::Engine
12
-
13
- require 'curation_concerns/models/resque'
14
-
15
- # Set some configuration defaults
16
- config.persistent_hostpath = "http://localhost/files/"
17
- config.enable_ffmpeg = false
18
- config.ffmpeg_path = 'ffmpeg'
19
- config.fits_message_length = 5
20
- config.temp_file_base = nil
21
- config.enable_noids = true
22
- config.noid_template = '.reeddeeddk'
23
- config.minter_statefile = '/tmp/minter-state'
24
- config.redis_namespace = "curation_concerns"
25
- config.fits_path = "fits.sh"
26
- config.enable_local_ingest = nil
27
- config.queue = CurationConcerns::Resque::Queue
28
-
29
- # Defaulting analytic start date to whenever the file was uploaded by leaving it blank
30
- config.analytic_start_date = nil
31
-
32
- config.autoload_paths += %W(
33
- #{config.root}/app/actors/concerns
34
- #{config.root}/lib/curation_concerns
35
- #{config.root}/app/models/datastreams
36
- )
37
-
38
- initializer 'requires' do
39
- require 'active_fedora/noid'
40
- require 'curation_concerns/noid'
41
- require 'curation_concerns/permissions'
42
- end
43
-
44
- initializer 'configure' do
45
- CurationConcerns.config.tap do |c|
46
- Hydra::Derivatives.ffmpeg_path = c.ffmpeg_path
47
- Hydra::Derivatives.temp_file_base = c.temp_file_base
48
- Hydra::Derivatives.fits_path = c.fits_path
49
- Hydra::Derivatives.enable_ffmpeg = c.enable_ffmpeg
50
-
51
- ActiveFedora::Base.translate_uri_to_id = ActiveFedora::Noid.config.translate_uri_to_id
52
- ActiveFedora::Base.translate_id_to_uri = ActiveFedora::Noid.config.translate_id_to_uri
53
- ActiveFedora::Noid.config.template = c.noid_template
54
- ActiveFedora::Noid.config.statefile = c.minter_statefile
55
- end
56
- end
57
-
58
- end
59
-
60
- end
61
- end