hyrax 5.2.0 → 5.3.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 (527) hide show
  1. checksums.yaml +4 -4
  2. data/.dassie/.env +5 -1
  3. data/.dassie/Gemfile +4 -2
  4. data/.dassie/app/assets/images/bulkrax/removed.png +0 -0
  5. data/.dassie/app/assets/javascripts/application.js +2 -0
  6. data/.dassie/app/assets/stylesheets/application.css +1 -0
  7. data/.dassie/app/controllers/catalog_controller.rb +1 -0
  8. data/.dassie/app/forms/admin_set_resource_form.rb +6 -0
  9. data/.dassie/app/forms/collection_resource_form.rb +5 -2
  10. data/.dassie/app/forms/generic_work_resource_form.rb +5 -2
  11. data/.dassie/app/forms/monograph_form.rb +5 -3
  12. data/.dassie/app/indexers/admin_set_resource_indexer.rb +5 -0
  13. data/.dassie/app/indexers/collection_resource_indexer.rb +3 -3
  14. data/.dassie/app/indexers/generic_work_resource_indexer.rb +6 -3
  15. data/.dassie/app/indexers/monograph_indexer.rb +6 -2
  16. data/.dassie/app/models/ability.rb +8 -0
  17. data/.dassie/app/models/collection_resource.rb +4 -2
  18. data/.dassie/app/models/concerns/bulkrax/has_local_processing.rb +8 -0
  19. data/.dassie/app/models/generic_work_resource.rb +5 -2
  20. data/.dassie/app/models/monograph.rb +5 -2
  21. data/.dassie/app/views/blacklight_dynamic_sitemap/sitemap/show.xml.builder +22 -0
  22. data/.dassie/bin/importer +142 -0
  23. data/.dassie/bin/web +4 -0
  24. data/.dassie/config/browse_everything_providers.yml +1 -1
  25. data/.dassie/config/bulkrax_api.yml +86 -0
  26. data/.dassie/config/initializers/bulkrax.rb +92 -0
  27. data/.dassie/config/initializers/clamav.rb +2 -0
  28. data/.dassie/config/initializers/hyrax.rb +7 -1
  29. data/.dassie/config/initializers/riiif.rb +4 -80
  30. data/.dassie/config/initializers/wings.rb +1 -1
  31. data/.dassie/config/metadata_profiles/m3_profile.yaml +929 -0
  32. data/.dassie/config/puma.rb +4 -2
  33. data/.dassie/config/routes.rb +7 -0
  34. data/.dassie/config/sidekiq.yml +17 -0
  35. data/.dassie/config/uv/uv.html +63 -81
  36. data/.dassie/db/migrate/20240606205215_create_hyrax_flexible_schemas.rb +9 -0
  37. data/.dassie/db/migrate/20240606205216_add_contexts_to_hyrax_flexible_schemas.rb +5 -0
  38. data/.dassie/db/migrate/20250826142438_create_bulkrax_importers.bulkrax.rb +19 -0
  39. data/.dassie/db/migrate/20250826142439_create_bulkrax_importer_runs.bulkrax.rb +17 -0
  40. data/.dassie/db/migrate/20250826142440_create_bulkrax_entries.bulkrax.rb +17 -0
  41. data/.dassie/db/migrate/20250826142441_add_status_to_entry.bulkrax.rb +10 -0
  42. data/.dassie/db/migrate/20250826142442_add_collections_to_importer_runs.bulkrax.rb +7 -0
  43. data/.dassie/db/migrate/20250826142443_change_collection_ids_on_entries.bulkrax.rb +6 -0
  44. data/.dassie/db/migrate/20250826142444_create_bulkrax_exporters.bulkrax.rb +20 -0
  45. data/.dassie/db/migrate/20250826142445_create_bulkrax_exporter_runs.bulkrax.rb +15 -0
  46. data/.dassie/db/migrate/20250826142446_change_importer_and_exporter_to_polymorphic.bulkrax.rb +19 -0
  47. data/.dassie/db/migrate/20250826142447_add_total_collection_records_to_importer_runs.bulkrax.rb +6 -0
  48. data/.dassie/db/migrate/20250826142448_add_children_to_importer_runs.bulkrax.rb +7 -0
  49. data/.dassie/db/migrate/20250826142449_change_total_records_to_total_work_entries.bulkrax.rb +7 -0
  50. data/.dassie/db/migrate/20250826142450_change_entry_last_error.bulkrax.rb +20 -0
  51. data/.dassie/db/migrate/20250826142451_add_validate_only_to_bulkrax_importers.bulkrax.rb +6 -0
  52. data/.dassie/db/migrate/20250826142452_add_status_to_importers.bulkrax.rb +10 -0
  53. data/.dassie/db/migrate/20250826142453_remove_foreign_key_from_bulkrax_entries.bulkrax.rb +6 -0
  54. data/.dassie/db/migrate/20250826142454_add_status_to_exporters.bulkrax.rb +8 -0
  55. data/.dassie/db/migrate/20250826142455_add_invalid_record_to_importer_run.bulkrax.rb +6 -0
  56. data/.dassie/db/migrate/20250826142456_create_bulkrax_statuses.bulkrax.rb +19 -0
  57. data/.dassie/db/migrate/20250826142457_move_to_statuses.bulkrax.rb +31 -0
  58. data/.dassie/db/migrate/20250826142458_add_date_filter_and_status_to_bulkrax_exporters.bulkrax.rb +8 -0
  59. data/.dassie/db/migrate/20250826142459_add_workflow_status_to_bulkrax_exporter.bulkrax.rb +6 -0
  60. data/.dassie/db/migrate/20250826142460_remove_unused_last_error.bulkrax.rb +8 -0
  61. data/.dassie/db/migrate/20250826142461_increase_text_sizes.bulkrax.rb +13 -0
  62. data/.dassie/db/migrate/20250826142462_change_bulkrax_statuses_error_message_column_type_to_text.bulkrax.rb +6 -0
  63. data/.dassie/db/migrate/20250826142463_rename_children_counters_to_relationships.bulkrax.rb +7 -0
  64. data/.dassie/db/migrate/20250826142464_add_file_set_counters_to_importer_runs.bulkrax.rb +8 -0
  65. data/.dassie/db/migrate/20250826142465_add_import_attempts_to_entries.bulkrax.rb +6 -0
  66. data/.dassie/db/migrate/20250826142466_add_work_counters_to_importer_runs.bulkrax.rb +7 -0
  67. data/.dassie/db/migrate/20250826142467_create_bulkrax_pending_relationships.bulkrax.rb +14 -0
  68. data/.dassie/db/migrate/20250826142468_add_order_to_bulkrax_pending_relationships.bulkrax.rb +6 -0
  69. data/.dassie/db/migrate/20250826142469_add_include_thumbnails_to_bulkrax_exporters.bulkrax.rb +6 -0
  70. data/.dassie/db/migrate/20250826142470_add_generated_metadata_to_bulkrax_exporters.bulkrax.rb +6 -0
  71. data/.dassie/db/migrate/20250826142471_rename_bulkrax_importer_run_to_importer_run.bulkrax.rb +18 -0
  72. data/.dassie/db/migrate/20250826142472_add_indices_to_bulkrax.bulkrax.rb +26 -0
  73. data/.dassie/db/migrate/20250826142473_denormalize_status_message.bulkrax.rb +8 -0
  74. data/.dassie/db/migrate/20250826142474_update_identifier_index.bulkrax.rb +7 -0
  75. data/.dassie/db/migrate/20250826142475_add_index_to_metadata_bulkrax_identifier.bulkrax.rb +19 -0
  76. data/.dassie/db/migrate/20250826142476_add_file_name_to_uploaded_files.bulkrax.rb +6 -0
  77. data/.dassie/db/migrate/20250826142477_add_error_tracking_to_pending_relationships.bulkrax.rb +6 -0
  78. data/.dassie/db/migrate/20250826142478_add_last_imported_at_to_bulkrax_importers.bulkrax.rb +6 -0
  79. data/.dassie/db/migrate/20250826142479_add_next_import_at_to_bulkrax_importers.bulkrax.rb +6 -0
  80. data/.dassie/db/migrate/20250826142480_entry_error_denormalization.bulkrax.rb +8 -0
  81. data/.dassie/db/migrate/20250826142481_faster_first_entry.bulkrax.rb +8 -0
  82. data/.dassie/db/migrate/20260430000001_create_hyrax_redirect_paths.hyrax.rb +13 -0
  83. data/.dassie/db/migrate/20260521003627_add_additional_redirect_info.hyrax.rb +32 -0
  84. data/.dassie/db/schema.rb +154 -1
  85. data/.dassie/package.json +1 -1
  86. data/.dassie/rspec_split_configuration.json +835 -0
  87. data/.dassie/solr/conf/solrconfig.xml +21 -5
  88. data/.github/{ISSUE_TEMPLATE.md → ISSUE_TEMPLATE/issue_template.md} +5 -0
  89. data/.github/workflows/lint-build-test.yml +5 -1
  90. data/.github/workflows/release-charts.yml +48 -0
  91. data/.gitignore +6 -0
  92. data/.koppie/.env +5 -1
  93. data/.koppie/Gemfile +3 -1
  94. data/.koppie/app/assets/images/bulkrax/removed.png +0 -0
  95. data/.koppie/app/assets/javascripts/application.js +2 -0
  96. data/.koppie/app/assets/stylesheets/application.css +1 -0
  97. data/.koppie/app/controllers/catalog_controller.rb +1 -1
  98. data/.koppie/app/forms/collection_resource_form.rb +5 -2
  99. data/.koppie/app/forms/file_set_form.rb +5 -0
  100. data/.koppie/app/forms/generic_work_form.rb +5 -3
  101. data/.koppie/app/forms/monograph_form.rb +5 -3
  102. data/.koppie/app/indexers/collection_resource_indexer.rb +5 -2
  103. data/.koppie/app/indexers/file_set_indexer.rb +7 -0
  104. data/.koppie/app/indexers/generic_work_indexer.rb +6 -3
  105. data/.koppie/app/indexers/monograph_indexer.rb +6 -2
  106. data/.koppie/app/models/ability.rb +8 -0
  107. data/.koppie/app/models/collection_resource.rb +4 -2
  108. data/.koppie/app/models/concerns/bulkrax/has_local_processing.rb +8 -0
  109. data/.koppie/app/models/generic_work.rb +5 -2
  110. data/.koppie/app/models/monograph.rb +5 -2
  111. data/.koppie/app/views/blacklight_dynamic_sitemap/sitemap/show.xml.builder +22 -0
  112. data/.koppie/bin/importer +142 -0
  113. data/.koppie/bin/web +4 -0
  114. data/.koppie/config/browse_everything_providers.yml +2 -0
  115. data/.koppie/config/bulkrax_api.yml +86 -0
  116. data/.koppie/config/initializers/bulkrax.rb +92 -0
  117. data/.koppie/config/initializers/clamav.rb +2 -0
  118. data/.koppie/config/initializers/hyrax.rb +11 -3
  119. data/.koppie/config/initializers/riiif.rb +4 -82
  120. data/.koppie/config/metadata_profiles/m3_profile.yaml +930 -0
  121. data/.koppie/config/routes.rb +7 -0
  122. data/.koppie/config/sidekiq.yml +2 -0
  123. data/.koppie/config/uv/uv.html +63 -81
  124. data/.koppie/db/migrate/20240606205215_create_hyrax_flexible_schemas.rb +9 -0
  125. data/.koppie/db/migrate/20240606205216_add_contexts_to_hyrax_flexible_schemas.rb +5 -0
  126. data/.koppie/db/migrate/20250826142438_create_bulkrax_importers.bulkrax.rb +19 -0
  127. data/.koppie/db/migrate/20250826142439_create_bulkrax_importer_runs.bulkrax.rb +17 -0
  128. data/.koppie/db/migrate/20250826142440_create_bulkrax_entries.bulkrax.rb +17 -0
  129. data/.koppie/db/migrate/20250826142441_add_status_to_entry.bulkrax.rb +10 -0
  130. data/.koppie/db/migrate/20250826142442_add_collections_to_importer_runs.bulkrax.rb +7 -0
  131. data/.koppie/db/migrate/20250826142443_change_collection_ids_on_entries.bulkrax.rb +6 -0
  132. data/.koppie/db/migrate/20250826142444_create_bulkrax_exporters.bulkrax.rb +20 -0
  133. data/.koppie/db/migrate/20250826142445_create_bulkrax_exporter_runs.bulkrax.rb +15 -0
  134. data/.koppie/db/migrate/20250826142446_change_importer_and_exporter_to_polymorphic.bulkrax.rb +19 -0
  135. data/.koppie/db/migrate/20250826142447_add_total_collection_records_to_importer_runs.bulkrax.rb +6 -0
  136. data/.koppie/db/migrate/20250826142448_add_children_to_importer_runs.bulkrax.rb +7 -0
  137. data/.koppie/db/migrate/20250826142449_change_total_records_to_total_work_entries.bulkrax.rb +7 -0
  138. data/.koppie/db/migrate/20250826142450_change_entry_last_error.bulkrax.rb +20 -0
  139. data/.koppie/db/migrate/20250826142451_add_validate_only_to_bulkrax_importers.bulkrax.rb +6 -0
  140. data/.koppie/db/migrate/20250826142452_add_status_to_importers.bulkrax.rb +10 -0
  141. data/.koppie/db/migrate/20250826142453_remove_foreign_key_from_bulkrax_entries.bulkrax.rb +6 -0
  142. data/.koppie/db/migrate/20250826142454_add_status_to_exporters.bulkrax.rb +8 -0
  143. data/.koppie/db/migrate/20250826142455_add_invalid_record_to_importer_run.bulkrax.rb +6 -0
  144. data/.koppie/db/migrate/20250826142456_create_bulkrax_statuses.bulkrax.rb +19 -0
  145. data/.koppie/db/migrate/20250826142457_move_to_statuses.bulkrax.rb +31 -0
  146. data/.koppie/db/migrate/20250826142458_add_date_filter_and_status_to_bulkrax_exporters.bulkrax.rb +8 -0
  147. data/.koppie/db/migrate/20250826142459_add_workflow_status_to_bulkrax_exporter.bulkrax.rb +6 -0
  148. data/.koppie/db/migrate/20250826142460_remove_unused_last_error.bulkrax.rb +8 -0
  149. data/.koppie/db/migrate/20250826142461_increase_text_sizes.bulkrax.rb +13 -0
  150. data/.koppie/db/migrate/20250826142462_change_bulkrax_statuses_error_message_column_type_to_text.bulkrax.rb +6 -0
  151. data/.koppie/db/migrate/20250826142463_rename_children_counters_to_relationships.bulkrax.rb +7 -0
  152. data/.koppie/db/migrate/20250826142464_add_file_set_counters_to_importer_runs.bulkrax.rb +8 -0
  153. data/.koppie/db/migrate/20250826142465_add_import_attempts_to_entries.bulkrax.rb +6 -0
  154. data/.koppie/db/migrate/20250826142466_add_work_counters_to_importer_runs.bulkrax.rb +7 -0
  155. data/.koppie/db/migrate/20250826142467_create_bulkrax_pending_relationships.bulkrax.rb +14 -0
  156. data/.koppie/db/migrate/20250826142468_add_order_to_bulkrax_pending_relationships.bulkrax.rb +6 -0
  157. data/.koppie/db/migrate/20250826142469_add_include_thumbnails_to_bulkrax_exporters.bulkrax.rb +6 -0
  158. data/.koppie/db/migrate/20250826142470_add_generated_metadata_to_bulkrax_exporters.bulkrax.rb +6 -0
  159. data/.koppie/db/migrate/20250826142471_rename_bulkrax_importer_run_to_importer_run.bulkrax.rb +18 -0
  160. data/.koppie/db/migrate/20250826142472_add_indices_to_bulkrax.bulkrax.rb +26 -0
  161. data/.koppie/db/migrate/20250826142473_denormalize_status_message.bulkrax.rb +8 -0
  162. data/.koppie/db/migrate/20250826142474_update_identifier_index.bulkrax.rb +7 -0
  163. data/.koppie/db/migrate/20250826142475_add_index_to_metadata_bulkrax_identifier.bulkrax.rb +19 -0
  164. data/.koppie/db/migrate/20250826142476_add_file_name_to_uploaded_files.bulkrax.rb +6 -0
  165. data/.koppie/db/migrate/20250826142477_add_error_tracking_to_pending_relationships.bulkrax.rb +6 -0
  166. data/.koppie/db/migrate/20250826142478_add_last_imported_at_to_bulkrax_importers.bulkrax.rb +6 -0
  167. data/.koppie/db/migrate/20250826142479_add_next_import_at_to_bulkrax_importers.bulkrax.rb +6 -0
  168. data/.koppie/db/migrate/20250826142480_entry_error_denormalization.bulkrax.rb +8 -0
  169. data/.koppie/db/migrate/20250826142481_faster_first_entry.bulkrax.rb +8 -0
  170. data/.koppie/db/migrate/20260430000001_create_hyrax_redirect_paths.hyrax.rb +13 -0
  171. data/.koppie/db/migrate/20260521003627_add_additional_redirect_info.hyrax.rb +32 -0
  172. data/.koppie/db/schema.rb +154 -1
  173. data/.koppie/package.json +1 -1
  174. data/.koppie/rspec_split_configuration.json +835 -0
  175. data/.koppie/solr/conf/solrconfig.xml +0 -5
  176. data/.koppie/yarn.lock +5587 -752
  177. data/.rubocop.yml +1 -0
  178. data/CONTAINERS.md +2 -0
  179. data/Dockerfile +9 -22
  180. data/Gemfile +0 -1
  181. data/Gemfile.allinson +2 -0
  182. data/README.md +1 -2
  183. data/app/actors/hyrax/actors/file_actor.rb +2 -0
  184. data/app/actors/hyrax/actors/file_set_actor.rb +1 -1
  185. data/app/assets/javascripts/hyrax/app.js.erb +143 -10
  186. data/app/assets/javascripts/hyrax/collection_select.js +68 -0
  187. data/app/assets/javascripts/hyrax/copy_permalink_button.js +28 -0
  188. data/app/assets/javascripts/hyrax/redirects.js +45 -0
  189. data/app/assets/javascripts/hyrax/relationships/control.es6 +21 -1
  190. data/app/assets/javascripts/hyrax/select_work_type.es6 +7 -2
  191. data/app/assets/javascripts/hyrax.js +3 -1
  192. data/app/assets/stylesheets/hyrax/_file-show.scss +1 -0
  193. data/app/assets/stylesheets/hyrax/_viewer.scss +8 -0
  194. data/app/assets/stylesheets/hyrax/dashboard.scss +22 -1
  195. data/app/assets/stylesheets/hyrax/sidebar.scss +98 -3
  196. data/app/authorities/qa/authorities/collections.rb +9 -9
  197. data/app/controllers/concerns/hyrax/analytics_error_handling.rb +97 -0
  198. data/app/controllers/concerns/hyrax/collections_controller_behavior.rb +3 -1
  199. data/app/controllers/concerns/hyrax/ensure_migrated_behavior.rb +50 -0
  200. data/app/controllers/concerns/hyrax/flexible_catalog_behavior.rb +206 -0
  201. data/app/controllers/concerns/hyrax/flexible_schema_behavior.rb +17 -0
  202. data/app/controllers/concerns/hyrax/redirect_to_display_url.rb +54 -0
  203. data/app/controllers/concerns/hyrax/works_controller_behavior.rb +52 -10
  204. data/app/controllers/hyrax/admin/admin_sets_controller.rb +21 -13
  205. data/app/controllers/hyrax/admin/analytics/collection_reports_controller.rb +2 -0
  206. data/app/controllers/hyrax/admin/analytics/work_reports_controller.rb +1 -0
  207. data/app/controllers/hyrax/admin/metadata_profiles_controller.rb +66 -0
  208. data/app/controllers/hyrax/batch_uploads_controller.rb +2 -0
  209. data/app/controllers/hyrax/dashboard/collections_controller.rb +27 -6
  210. data/app/controllers/hyrax/dashboard/nest_collections_controller.rb +2 -1
  211. data/app/controllers/hyrax/dashboard_controller.rb +2 -1
  212. data/app/controllers/hyrax/file_sets_controller.rb +19 -1
  213. data/app/controllers/hyrax/homepage_controller.rb +7 -0
  214. data/app/controllers/hyrax/my/works_controller.rb +2 -21
  215. data/app/controllers/hyrax/permissions_controller.rb +4 -2
  216. data/app/controllers/hyrax/redirects_controller.rb +56 -0
  217. data/app/controllers/hyrax/single_use_links_viewer_controller.rb +2 -1
  218. data/app/controllers/hyrax/transcripts_controller.rb +31 -0
  219. data/app/controllers/hyrax/uploads_controller.rb +18 -9
  220. data/app/forms/concerns/hyrax/based_near_field_behavior.rb +77 -0
  221. data/app/forms/concerns/hyrax/flexible_form_behavior.rb +37 -0
  222. data/app/forms/concerns/hyrax/redirects_field_behavior.rb +95 -0
  223. data/app/forms/concerns/hyrax/transcripts_behavior.rb +40 -0
  224. data/app/forms/hyrax/forms/admin_set_form.rb +1 -1
  225. data/app/forms/hyrax/forms/administrative_set_form.rb +3 -0
  226. data/app/forms/hyrax/forms/batch_edit_form.rb +1 -3
  227. data/app/forms/hyrax/forms/batch_upload_form.rb +14 -0
  228. data/app/forms/hyrax/forms/file_set_edit_form.rb +1 -1
  229. data/app/forms/hyrax/forms/file_set_form.rb +6 -7
  230. data/app/forms/hyrax/forms/pcdm_collection_form.rb +17 -5
  231. data/app/forms/hyrax/forms/pcdm_object_form.rb +11 -3
  232. data/app/forms/hyrax/forms/resource_batch_edit_form.rb +8 -22
  233. data/app/forms/hyrax/forms/resource_form.rb +110 -10
  234. data/app/forms/hyrax/forms.rb +1 -0
  235. data/app/helpers/hyrax/attributes_helper.rb +109 -0
  236. data/app/helpers/hyrax/blacklight_override.rb +26 -0
  237. data/app/helpers/hyrax/collections_helper.rb +2 -0
  238. data/app/helpers/hyrax/file_set_form_helper.rb +24 -0
  239. data/app/helpers/hyrax/hyrax_helper_behavior.rb +51 -2
  240. data/app/helpers/hyrax/iiif_helper.rb +11 -1
  241. data/app/helpers/hyrax/permalink_helper.rb +37 -0
  242. data/app/helpers/hyrax/redirects_tab_helper.rb +29 -0
  243. data/app/helpers/hyrax/work_form_helper.rb +9 -5
  244. data/app/helpers/hyrax/works_helper.rb +14 -0
  245. data/app/indexers/concerns/hyrax/workflow_indexer.rb +30 -0
  246. data/app/indexers/hyrax/file_set_indexer.rb +1 -0
  247. data/app/indexers/hyrax/indexers/administrative_set_indexer.rb +2 -1
  248. data/app/indexers/hyrax/indexers/file_set_indexer.rb +6 -2
  249. data/app/indexers/hyrax/indexers/pcdm_collection_indexer.rb +11 -1
  250. data/app/indexers/hyrax/indexers/pcdm_object_indexer.rb +25 -4
  251. data/app/indexers/hyrax/indexers/redirects_indexer.rb +29 -0
  252. data/app/indexers/hyrax/indexers/resource_indexer.rb +4 -0
  253. data/app/indexers/hyrax/indexers.rb +2 -0
  254. data/app/inputs/controlled_vocabulary_input.rb +7 -1
  255. data/app/jobs/content_deposit_error_event_job.rb +14 -0
  256. data/app/jobs/create_work_job.rb +2 -0
  257. data/app/jobs/migrate_files_to_valkyrie_job.rb +7 -1
  258. data/app/models/batch_upload_item.rb +4 -0
  259. data/app/models/concerns/hyrax/ability/flexible_metadata_ability.rb +10 -0
  260. data/app/models/concerns/hyrax/ability.rb +3 -1
  261. data/app/models/concerns/hyrax/collection_behavior.rb +4 -0
  262. data/app/models/concerns/hyrax/file_set/transcripts.rb +16 -0
  263. data/app/models/concerns/hyrax/file_set_behavior.rb +9 -0
  264. data/app/models/concerns/hyrax/flexibility.rb +107 -0
  265. data/app/models/concerns/hyrax/redirects_normalization.rb +38 -0
  266. data/app/models/concerns/hyrax/solr_document/characterization.rb +1 -1
  267. data/app/models/concerns/hyrax/solr_document/metadata.rb +9 -0
  268. data/app/models/concerns/hyrax/solr_document/ordered_members.rb +4 -0
  269. data/app/models/concerns/hyrax/solr_document_behavior.rb +28 -6
  270. data/app/models/concerns/hyrax/suppressible.rb +1 -1
  271. data/app/models/concerns/hyrax/valkyrie_lazy_migration.rb +1 -1
  272. data/app/models/concerns/hyrax/with_embargoes_and_leases.rb +30 -0
  273. data/app/models/concerns/hyrax/work_behavior.rb +8 -0
  274. data/app/models/hyrax/administrative_set.rb +1 -1
  275. data/app/models/hyrax/change_set.rb +3 -1
  276. data/app/models/hyrax/embargo.rb +3 -1
  277. data/app/models/hyrax/file_set.rb +4 -2
  278. data/app/models/hyrax/flexible_schema.rb +219 -0
  279. data/app/models/hyrax/lease.rb +3 -1
  280. data/app/models/hyrax/pcdm_collection.rb +4 -1
  281. data/app/models/hyrax/redirect.rb +64 -0
  282. data/app/models/hyrax/redirect_path.rb +14 -0
  283. data/app/models/hyrax/resource.rb +22 -25
  284. data/app/models/hyrax/riiif/file.rb +43 -0
  285. data/app/models/hyrax/riiif/file_resolver.rb +65 -0
  286. data/app/models/hyrax/uploaded_file.rb +9 -0
  287. data/app/models/hyrax/virus_scanner.rb +16 -3
  288. data/app/models/hyrax/work.rb +4 -1
  289. data/app/models/job_io_wrapper.rb +12 -3
  290. data/app/models/user_mailbox.rb +3 -1
  291. data/app/presenters/hyrax/admin_set_presenter.rb +11 -0
  292. data/app/presenters/hyrax/annotates_content.rb +35 -0
  293. data/app/presenters/hyrax/collection_presenter.rb +5 -1
  294. data/app/presenters/hyrax/displays_content.rb +133 -0
  295. data/app/presenters/hyrax/displays_image.rb +11 -4
  296. data/app/presenters/hyrax/displays_transcripts.rb +59 -0
  297. data/app/presenters/hyrax/file_set_presenter.rb +8 -18
  298. data/app/presenters/hyrax/google_scholar_presenter.rb +39 -0
  299. data/app/presenters/hyrax/iiif_manifest_presenter.rb +22 -4
  300. data/app/presenters/hyrax/missing_method_behavior.rb +15 -0
  301. data/app/presenters/hyrax/pcdm_member_presenter_factory.rb +2 -4
  302. data/app/presenters/hyrax/work_show_presenter.rb +56 -14
  303. data/app/renderers/hyrax/renderers/attribute_renderer.rb +6 -2
  304. data/app/renderers/hyrax/renderers/license_attribute_renderer.rb +10 -10
  305. data/app/renderers/hyrax/renderers/redirects_label_attribute_renderer.rb +25 -0
  306. data/app/renderers/hyrax/renderers/rights_statement_attribute_renderer.rb +10 -11
  307. data/app/search_builders/hyrax/dashboard/nested_collections_search_builder.rb +1 -5
  308. data/app/search_builders/hyrax/filter_by_type.rb +1 -1
  309. data/app/services/hyrax/action/create_valkyrie_work.rb +3 -2
  310. data/app/services/hyrax/authority_rendering_helper.rb +28 -0
  311. data/app/services/hyrax/authority_service.rb +107 -0
  312. data/app/services/hyrax/callbacks.rb +2 -2
  313. data/app/services/hyrax/collections/nested_collection_query_service.rb +9 -3
  314. data/app/services/hyrax/collections_service.rb +17 -0
  315. data/app/services/hyrax/custom_queries/find_by_property_value.rb +89 -0
  316. data/app/services/hyrax/edit_permissions_service.rb +4 -4
  317. data/app/services/hyrax/file_set_type_service.rb +12 -4
  318. data/app/services/hyrax/flexible_schema_validator_service.rb +153 -0
  319. data/app/services/hyrax/flexible_schema_validators/class_validator.rb +123 -0
  320. data/app/services/hyrax/flexible_schema_validators/core_metadata_validator.rb +211 -0
  321. data/app/services/hyrax/flexible_schema_validators/existing_records_validator.rb +83 -0
  322. data/app/services/hyrax/flexible_schema_validators/redirects_validator.rb +116 -0
  323. data/app/services/hyrax/flexible_schema_validators/schema_validator.rb +34 -0
  324. data/app/services/hyrax/flexible_schema_validators/sort_properties_validator.rb +54 -0
  325. data/app/services/hyrax/license_service.rb +1 -1
  326. data/app/services/hyrax/listeners/metadata_index_listener.rb +11 -0
  327. data/app/services/hyrax/m3_profile_editor.rb +32 -0
  328. data/app/services/hyrax/m3_schema_loader.rb +119 -0
  329. data/app/services/hyrax/manifest_builder_service.rb +18 -24
  330. data/app/services/hyrax/permalink_path.rb +25 -0
  331. data/app/services/hyrax/qa_select_service.rb +9 -5
  332. data/app/services/hyrax/redirect_path_normalizer.rb +58 -0
  333. data/app/services/hyrax/redirects_lookup.rb +59 -0
  334. data/app/services/hyrax/resource_permissions_visibility_propagator.rb +54 -0
  335. data/app/services/hyrax/resource_types_service.rb +3 -20
  336. data/app/services/hyrax/rights_statement_service.rb +1 -1
  337. data/app/services/hyrax/schema_loader.rb +205 -0
  338. data/app/services/hyrax/search_service.rb +1 -1
  339. data/app/services/hyrax/simple_schema_loader.rb +28 -127
  340. data/app/services/hyrax/solr_service.rb +39 -2
  341. data/app/services/hyrax/tolerant_select_service.rb +5 -3
  342. data/app/services/hyrax/valkyrie_upload.rb +2 -2
  343. data/app/services/hyrax/visibility_propagator.rb +4 -1
  344. data/app/services/hyrax/work_uploads_handler.rb +17 -9
  345. data/app/services/hyrax/workflow/workflow_factory.rb +5 -4
  346. data/app/services/migrate_resource_service.rb +7 -1
  347. data/app/uploaders/hyrax/uploaded_file_uploader.rb +2 -2
  348. data/app/utils/hyrax/data_destroyers/collection_branding_destroyer.rb +1 -1
  349. data/app/utils/hyrax/required_data_seeder.rb +1 -0
  350. data/app/utils/hyrax/required_data_seeders/collection_type_seeder.rb +1 -1
  351. data/app/utils/hyrax/required_data_seeders/flexible_profile_seeder.rb +28 -0
  352. data/app/validators/hyrax/controlled_vocabulary_validator.rb +64 -0
  353. data/app/validators/hyrax/redirect_validator.rb +128 -0
  354. data/app/views/catalog/_thumbnail_list_default.html.erb +2 -2
  355. data/app/views/collections/edit_fields/_schema_version.html.erb +1 -0
  356. data/app/views/hyrax/admin/admin_sets/_form_metadata.html.erb +24 -2
  357. data/app/views/hyrax/admin/admin_sets/_show_document_list_row.html.erb +1 -1
  358. data/app/views/hyrax/admin/admin_sets/show.html.erb +1 -1
  359. data/app/views/hyrax/admin/analytics/_analytics_error.html.erb +42 -0
  360. data/app/views/hyrax/admin/analytics/collection_reports/index.html.erb +11 -9
  361. data/app/views/hyrax/admin/analytics/work_reports/index.html.erb +60 -57
  362. data/app/views/hyrax/admin/features/index.html.erb +1 -1
  363. data/app/views/hyrax/admin/metadata_profiles/_import_modal.html.erb +20 -0
  364. data/app/views/hyrax/admin/metadata_profiles/index.html.erb +54 -0
  365. data/app/views/hyrax/base/_attribute_rows.html.erb +4 -21
  366. data/app/views/hyrax/base/_citations.html.erb +1 -0
  367. data/app/views/hyrax/base/_currently_shared.html.erb +2 -1
  368. data/app/views/hyrax/base/_file_manager_thumbnail.html.erb +1 -1
  369. data/app/views/hyrax/base/_form_member_of_collections.html.erb +6 -6
  370. data/app/views/hyrax/base/_form_redirects.html.erb +125 -0
  371. data/app/views/hyrax/base/_form_share.html.erb +7 -2
  372. data/app/views/hyrax/base/_member.html.erb +1 -1
  373. data/app/views/hyrax/base/_social_media.html.erb +1 -1
  374. data/app/views/hyrax/base/iiif_viewers/_universal_viewer.html.erb +1 -1
  375. data/app/views/hyrax/base/show.html.erb +3 -0
  376. data/app/views/hyrax/collections/_default_group.html.erb +3 -0
  377. data/app/views/hyrax/collections/_list_collections.html.erb +3 -0
  378. data/app/views/hyrax/collections/_list_works.html.erb +1 -1
  379. data/app/views/hyrax/collections/_show_document_list_row.html.erb +1 -1
  380. data/app/views/hyrax/collections/show.html.erb +4 -0
  381. data/app/views/hyrax/dashboard/_sidebar.html.erb +4 -2
  382. data/app/views/hyrax/dashboard/collections/_button_for_update_collection.html.erb +2 -1
  383. data/app/views/hyrax/dashboard/collections/_default_group.html.erb +3 -0
  384. data/app/views/hyrax/dashboard/collections/_form.html.erb +17 -0
  385. data/app/views/hyrax/dashboard/collections/_form_for_select_collection.html.erb +7 -10
  386. data/app/views/hyrax/dashboard/collections/_list_collections.html.erb +3 -0
  387. data/app/views/hyrax/dashboard/collections/_list_works.html.erb +1 -1
  388. data/app/views/hyrax/dashboard/collections/_show_document_list_row.html.erb +1 -1
  389. data/app/views/hyrax/dashboard/profiles/_edit_primary.html.erb +1 -8
  390. data/app/views/hyrax/dashboard/profiles/_trophy_edit.html.erb +1 -1
  391. data/app/views/hyrax/dashboard/profiles/show.html.erb +5 -5
  392. data/app/views/hyrax/dashboard/sidebar/_metadata.html.erb +11 -0
  393. data/app/views/hyrax/dashboard/sidebar/_repository_content.html.erb +1 -0
  394. data/app/views/hyrax/dashboard/works/_default_group.html.erb +3 -0
  395. data/app/views/hyrax/dashboard/works/_list_works.html.erb +4 -2
  396. data/app/views/hyrax/file_sets/_form.html.erb +16 -3
  397. data/app/views/hyrax/file_sets/_metadata.html.erb +35 -0
  398. data/app/views/hyrax/file_sets/_valkyrie_form.html.erb +37 -0
  399. data/app/views/hyrax/file_sets/edit.html.erb +14 -8
  400. data/app/views/hyrax/file_sets/media_display/_audio.html.erb +4 -0
  401. data/app/views/hyrax/file_sets/media_display/_image.html.erb +2 -2
  402. data/app/views/hyrax/file_sets/media_display/_video.html.erb +4 -0
  403. data/app/views/hyrax/homepage/_explore_collections.html.erb +1 -1
  404. data/app/views/hyrax/homepage/_featured_fields.html.erb +1 -1
  405. data/app/views/hyrax/homepage/_recent_document.html.erb +1 -1
  406. data/app/views/hyrax/homepage/robots.text.erb +17 -0
  407. data/app/views/hyrax/my/collections/_default_group.html.erb +3 -0
  408. data/app/views/hyrax/my/collections/_list_collections.html.erb +3 -0
  409. data/app/views/hyrax/my/collections/_modal_add_subcollection.html.erb +2 -2
  410. data/app/views/hyrax/my/collections/_modal_add_to_collection.html.erb +2 -2
  411. data/app/views/hyrax/my/works/_default_group.html.erb +3 -0
  412. data/app/views/hyrax/my/works/_list_works.html.erb +5 -2
  413. data/app/views/hyrax/shared/_copy_permalink.html.erb +10 -0
  414. data/app/views/hyrax/users/_user_info.html.erb +1 -6
  415. data/app/views/layouts/_head_tag_content.html.erb +2 -0
  416. data/app/views/layouts/hyrax/dashboard.html.erb +2 -1
  417. data/app/views/records/edit_fields/_contexts.html.erb +1 -0
  418. data/app/views/records/edit_fields/_license.html.erb +17 -5
  419. data/app/views/records/edit_fields/_resource_type.html.erb +16 -2
  420. data/app/views/records/edit_fields/_rights_statement.html.erb +17 -5
  421. data/app/views/records/edit_fields/_schema_version.html.erb +1 -0
  422. data/app/views/records/edit_fields/_transcript_ids.html.erb +18 -0
  423. data/app/views/records/show_fields/_rights.html.erb +1 -1
  424. data/app/views/shared/_citations.html.erb +46 -31
  425. data/app/views/shared/_schema_version.html.erb +38 -0
  426. data/bin/dev-entrypoint.sh +14 -4
  427. data/chart/hyrax/Chart.yaml +4 -4
  428. data/chart/hyrax/templates/ingress.yaml +3 -0
  429. data/chart/hyrax/values.yaml +10 -8
  430. data/config/features.rb +27 -0
  431. data/config/initializers/blacklight_dynamic_sitemap.rb +43 -0
  432. data/config/initializers/deprecation_patch.rb +27 -0
  433. data/config/initializers/hydra_works.rb +3 -0
  434. data/config/initializers/i18n_extensions.rb +197 -0
  435. data/config/initializers/storage_adapter_initializer.rb +15 -9
  436. data/config/locales/hyrax.de.yml +172 -54
  437. data/config/locales/hyrax.en.yml +183 -66
  438. data/config/locales/hyrax.es.yml +174 -49
  439. data/config/locales/hyrax.fr.yml +169 -45
  440. data/config/locales/hyrax.it.yml +172 -48
  441. data/config/locales/hyrax.pt-BR.yml +172 -54
  442. data/config/locales/hyrax.zh.yml +145 -21
  443. data/config/metadata/basic_metadata.yaml +66 -0
  444. data/config/metadata/batch_edit_metadata.yaml +119 -0
  445. data/config/metadata/file_set_metadata.yaml +19 -0
  446. data/config/metadata/redirects.yaml +15 -0
  447. data/config/metadata_profiles/m3_json_schema.json +487 -0
  448. data/config/metadata_profiles/m3_profile.yaml +954 -0
  449. data/config/routes.rb +9 -0
  450. data/docker-compose-allinson.yml +176 -0
  451. data/docker-compose-dassie.yml +14 -6
  452. data/docker-compose-koppie.yml +18 -10
  453. data/docker-compose-sirenia.yml +20 -10
  454. data/documentation/copy_permalink.md +29 -0
  455. data/documentation/developing-your-hyrax-based-app.md +2 -2
  456. data/documentation/file-ingest-characterization.md +763 -0
  457. data/documentation/flexible_metadata.md +113 -0
  458. data/documentation/forms/field_behaviors.md +297 -0
  459. data/documentation/redirects.md +428 -0
  460. data/hyrax.gemspec +7 -2
  461. data/lib/freyja/metadata_adapter.rb +1 -1
  462. data/lib/freyja/persister.rb +25 -1
  463. data/lib/generators/hyrax/collection_resource/collection_resource_generator.rb +2 -2
  464. data/lib/generators/hyrax/collection_resource/templates/collection.rb.erb +5 -1
  465. data/lib/generators/hyrax/collection_resource/templates/collection_form.rb.erb +5 -1
  466. data/lib/generators/hyrax/collection_resource/templates/collection_indexer.rb.erb +6 -1
  467. data/lib/generators/hyrax/iiif_viewer/USAGE +22 -0
  468. data/lib/generators/hyrax/iiif_viewer/iiif_viewer_generator.rb +49 -0
  469. data/lib/generators/hyrax/iiif_viewer/templates/_clover.html.erb +7 -0
  470. data/lib/generators/hyrax/iiif_viewer/templates/clover/clover.css +3328 -0
  471. data/lib/generators/hyrax/iiif_viewer/templates/clover/clover.html +16 -0
  472. data/lib/generators/hyrax/iiif_viewer/templates/clover/clover.js +237 -0
  473. data/lib/generators/hyrax/install_generator.rb +25 -1
  474. data/lib/generators/hyrax/riiif_generator.rb +1 -1
  475. data/lib/generators/hyrax/templates/app/views/blacklight_dynamic_sitemap/sitemap/show.xml.builder +22 -0
  476. data/lib/generators/hyrax/templates/config/clamav.rb +2 -0
  477. data/lib/generators/hyrax/templates/config/initializers/riiif.rb +4 -80
  478. data/lib/generators/hyrax/templates/db/migrate/20240606205215_create_hyrax_flexible_schemas.rb.erb +9 -0
  479. data/lib/generators/hyrax/templates/db/migrate/20240606205216_add_contexts_to_hyrax_flexible_schemas.rb.erb +5 -0
  480. data/lib/generators/hyrax/templates/db/migrate/20260430000001_create_hyrax_redirect_paths.rb.erb +22 -0
  481. data/lib/generators/hyrax/templates/db/migrate/20260521003627_add_additional_redirect_info.rb.erb +39 -0
  482. data/lib/generators/hyrax/templates/package.json +1 -1
  483. data/lib/generators/hyrax/templates/uv.html +60 -82
  484. data/lib/generators/hyrax/work/templates/indexer.rb.erb +1 -1
  485. data/lib/generators/hyrax/work/templates/model.rb.erb +5 -1
  486. data/lib/generators/hyrax/work_resource/templates/form.rb.erb +5 -2
  487. data/lib/generators/hyrax/work_resource/templates/indexer.rb.erb +6 -2
  488. data/lib/generators/hyrax/work_resource/templates/work.rb.erb +5 -2
  489. data/lib/generators/hyrax/work_resource/work_resource_generator.rb +1 -0
  490. data/lib/hyrax/active_fedora_dummy_model.rb +6 -0
  491. data/lib/hyrax/configuration.rb +197 -3
  492. data/lib/hyrax/deprecation.rb +31 -0
  493. data/lib/hyrax/engine.rb +2 -0
  494. data/lib/hyrax/form_fields.rb +17 -5
  495. data/lib/hyrax/indexer.rb +31 -2
  496. data/lib/hyrax/resource_sync/resource_list_writer.rb +3 -0
  497. data/lib/hyrax/schema.rb +15 -4
  498. data/lib/hyrax/specs/shared_specs/factories/administrative_sets.rb +12 -0
  499. data/lib/hyrax/specs/shared_specs/factories/hyrax_embargo.rb +1 -1
  500. data/lib/hyrax/specs/shared_specs/factories/hyrax_file_set.rb +13 -0
  501. data/lib/hyrax/specs/shared_specs/factories/hyrax_lease.rb +5 -1
  502. data/lib/hyrax/specs/shared_specs/factories/hyrax_work.rb +14 -0
  503. data/lib/hyrax/specs/shared_specs/simple_work.rb +41 -0
  504. data/lib/hyrax/specs/shared_specs.rb +1 -0
  505. data/lib/hyrax/transactions/collection_create.rb +2 -1
  506. data/lib/hyrax/transactions/collection_destroy.rb +1 -0
  507. data/lib/hyrax/transactions/collection_update.rb +2 -1
  508. data/lib/hyrax/transactions/container.rb +28 -0
  509. data/lib/hyrax/transactions/steps/apply_permission_template_on_update.rb +65 -0
  510. data/lib/hyrax/transactions/steps/apply_workflow_on_admin_set_change.rb +97 -0
  511. data/lib/hyrax/transactions/steps/ensure_admin_set.rb +1 -1
  512. data/lib/hyrax/transactions/steps/remove_redirect_paths.rb +35 -0
  513. data/lib/hyrax/transactions/steps/save.rb +10 -0
  514. data/lib/hyrax/transactions/steps/set_default_admin_set.rb +1 -1
  515. data/lib/hyrax/transactions/steps/sync_redirect_paths.rb +141 -0
  516. data/lib/hyrax/transactions/work_create.rb +2 -1
  517. data/lib/hyrax/transactions/work_destroy.rb +1 -0
  518. data/lib/hyrax/transactions/work_update.rb +4 -1
  519. data/lib/hyrax/version.rb +1 -1
  520. data/lib/hyrax.rb +61 -0
  521. data/lib/tasks/m3_profile_cleanup.rake +35 -0
  522. data/template.rb +4 -1
  523. metadata +313 -19
  524. data/.dassie/public/robots.txt +0 -1
  525. data/.koppie/public/robots.txt +0 -1
  526. data/app/forms/concerns/hyrax/basic_metadata_form_fields_behavior.rb +0 -39
  527. data/app/views/catalog/_thumbnail_list_collection.html.erb +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e0fb614fbcdcb0a429b210b32a8784d0d173f3fe226cce143be9905031b6d75
4
- data.tar.gz: 87d6ed549b2e8fb4295feb681ea5696f9ad25f511e2da655f0957b195688a751
3
+ metadata.gz: dd19d0f5cbbbc68640039124372f6ad8c15ccfd58345cc05288621654fe0891f
4
+ data.tar.gz: c9ac807d0227d58633da1e3caa44cda797f292186a7df5ad8c53652e73aafe99
5
5
  SHA512:
6
- metadata.gz: 44689f87eaf8cdf5089f6fef0eb9f84a8b3a38c5e92dd91984465bb7a4c7ca4a740fb6aecef0f97bab5d207db4a42be8db4ca086e09320dbb28110dc279eaf5a
7
- data.tar.gz: abaab63cb2a1647f9b72c9e2bf8222dc76a9d48d3e58123636481b285fec9e67b4164b5bcabe68e03cb90fe26a64595d77218d7e21248ced8bba363c9fe1505a
6
+ metadata.gz: f6301bf5d853f80e62ef7c1374a1d597faed956c87ffd96fa30b16bbdf97a6768cb2e6bc6a5e3e18b058fcd67a1f51e0cb35815eb2f9fd0a44622b816e13bce0
7
+ data.tar.gz: a0ec7ed740da16262a6d0dce60deb326aea15eaf827cbc008ff615a0b5ff7f217edd557f01b611006f9cf545c419111cba7d9769425cb519978ea1a7c9593e40
data/.dassie/.env CHANGED
@@ -1,5 +1,6 @@
1
1
  ANALYTICS_START_DATE=2021-08-21
2
2
  APP_NAME=dassie
3
+ BROWSE_EVERYTHING_FS_PROVIDER_PATH=/app/samvera/hyrax-engine/spec/fixtures
3
4
  BUNDLE_GEMFILE=Gemfile.dassie
4
5
  BUNDLE_PATH=/app/bundle
5
6
  CH12N_TOOL=fits_servlet
@@ -17,6 +18,7 @@ FITS_SERVLET_URL=http://fits:8080/fits
17
18
  HUB_URL=http://chrome:4444
18
19
  HYRAX_ANALYTICS=false
19
20
  HYRAX_ANALYTICS_PROVIDER=google
21
+ HYRAX_CLAMAV=false
20
22
  HYRAX_DERIVATIVES_PATH=/app/samvera/hyrax-webapp/derivatives/
21
23
  HYRAX_ENGINE_PATH=/app/samvera/hyrax-engine
22
24
  HYRAX_UPLOAD_PATH=/app/samvera/hyrax-webapp/uploads/
@@ -34,10 +36,12 @@ REDIS_PROVIDER=SIDEKIQ_REDIS_URL
34
36
  SEED_DASSIE=true
35
37
  SIDEKIQ_REDIS_URL=redis://:sidekickin@redis:6379/0
36
38
  SOLR_HOST=solr
39
+ SOLR_MODULES=analysis-extras,extraction
37
40
  SOLR_PORT=8983
38
41
  SOLR_TEST_URL=http://solr:8983/solr/hyrax_test
39
42
  SOLR_URL=http://solr:8983/solr/hyrax
40
- TB_RSPEC_OPTIONS=--force-color --format RspecJunitFormatter --out rspec.xml
43
+ RSPEC_SPLIT_CONFIGURATION_PATH=/app/samvera/hyrax-engine/.dassie/rspec_split_configuration.json
44
+ TB_RSPEC_OPTIONS=--force-color --order defined --format RspecJunitFormatter --out rspec.xml
41
45
  TB_RSPEC_FORMATTER=progress
42
46
  VALKYRIE_FCREPO_URL=http://fedoraAdmin:fedoraAdmin@fedora6:8080/fcrepo/rest
43
47
  VALKYRIE_ID_TYPE=string
data/.dassie/Gemfile CHANGED
@@ -10,6 +10,8 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
10
10
 
11
11
  gem 'bootsnap', '>= 1.1.0', require: false
12
12
  gem 'bootstrap', '~> 4.0'
13
+ gem 'bulkrax', github: 'samvera/bulkrax', branch: 'grounded'
14
+ gem 'clamby', '~> 1.6', require: ENV['HYRAX_CLAMAV'] == 'true'
13
15
  gem 'coffee-rails', '~> 4.2'
14
16
  gem 'dalli'
15
17
  gem 'devise'
@@ -24,7 +26,7 @@ if RUBY_PLATFORM =~ /musl/
24
26
  # # Disabled due to dependency mismatches in Alpine packages (grpc 1.62.1 needs protobuf ~> 3.25)
25
27
  # path '/usr/lib/ruby/gems/3.3.0' do
26
28
  gem 'google-protobuf', force_ruby_platform: true
27
- gem 'grpc', force_ruby_platform: true
29
+ gem 'grpc', '~> 1.74', force_ruby_platform: true
28
30
  # end
29
31
  end
30
32
 
@@ -37,7 +39,7 @@ gem 'pg', '~> 1.3'
37
39
  gem 'puma'
38
40
  gem 'rack-mini-profiler', require: ['prepend_net_http_patch']
39
41
  gem 'rails', '6.1.7.10'
40
- gem 'riiif', '~> 2.1'
42
+ gem 'riiif', '~> 2.8'
41
43
  gem 'rsolr', '>= 1.0', '< 3'
42
44
  gem 'sass-rails', '~> 6.0'
43
45
  gem 'sidekiq', '~> 7.0'
@@ -16,6 +16,7 @@
16
16
  //
17
17
  // Required by Blacklight
18
18
  //= require jquery3
19
+ //= require jquery-ui
19
20
  //= require rails-ujs
20
21
  //= require popper
21
22
  //= require twitter/typeahead
@@ -25,6 +26,7 @@
25
26
  //= require blacklight/blacklight
26
27
  //= require blacklight_gallery
27
28
 
29
+ //= require bulkrax/application
28
30
  //= require_tree .
29
31
  //= require hyrax
30
32
 
@@ -12,5 +12,6 @@
12
12
  *
13
13
  *= require_tree .
14
14
  *= require dataTables.bootstrap4
15
+ *= require 'bulkrax/application'
15
16
  *= require_self
16
17
  */
@@ -2,6 +2,7 @@
2
2
  class CatalogController < ApplicationController
3
3
  include Hydra::Catalog
4
4
  include Hydra::Controller::ControllerBehavior
5
+ include Hyrax::FlexibleCatalogBehavior if Hyrax.config.flexible?
5
6
 
6
7
  # This filter applies the hydra access controls
7
8
  before_action :enforce_show_permissions, only: :show
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AdminSetResourceForm < Hyrax::Forms::AdministrativeSetForm
4
+ include Hyrax::FormFields(:basic_metadata) if Hyrax.config.admin_set_include_metadata?
5
+ check_if_flexible(AdminSetResource)
6
+ end
@@ -3,6 +3,9 @@
3
3
  # Generated via
4
4
  # `rails generate hyrax:collection_resource CollectionResource`
5
5
  class CollectionResourceForm < Hyrax::Forms::PcdmCollectionForm
6
- include Hyrax::FormFields(:basic_metadata)
7
- include Hyrax::FormFields(:collection_resource)
6
+ if Hyrax.config.collection_include_metadata?
7
+ include Hyrax::FormFields(:basic_metadata)
8
+ include Hyrax::FormFields(:collection_resource)
9
+ end
10
+ check_if_flexible(CollectionResource)
8
11
  end
@@ -6,8 +6,11 @@
6
6
  # @see https://github.com/samvera/hyrax/wiki/Hyrax-Valkyrie-Usage-Guide#forms
7
7
  # @see https://github.com/samvera/valkyrie/wiki/ChangeSets-and-Dirty-Tracking
8
8
  class GenericWorkResourceForm < Hyrax::Forms::ResourceForm(GenericWorkResource)
9
- include Hyrax::FormFields(:basic_metadata)
10
- include Hyrax::FormFields(:generic_work_resource)
9
+ if Hyrax.config.work_include_metadata?
10
+ include Hyrax::FormFields(:basic_metadata)
11
+ include Hyrax::FormFields(:generic_work_resource)
12
+ end
13
+ check_if_flexible(GenericWorkResource)
11
14
 
12
15
  # Define custom form fields using the Valkyrie::ChangeSet interface
13
16
  #
@@ -6,9 +6,11 @@
6
6
  # @see https://github.com/samvera/hyrax/wiki/Hyrax-Valkyrie-Usage-Guide#forms
7
7
  # @see https://github.com/samvera/valkyrie/wiki/ChangeSets-and-Dirty-Tracking
8
8
  class MonographForm < Hyrax::Forms::ResourceForm(Monograph)
9
- include Hyrax::FormFields(:basic_metadata)
10
- include Hyrax::FormFields(:monograph)
11
-
9
+ if Hyrax.config.work_include_metadata?
10
+ include Hyrax::FormFields(:basic_metadata)
11
+ include Hyrax::FormFields(:monograph)
12
+ end
13
+ check_if_flexible(Monograph)
12
14
  # Define custom form fields using the Valkyrie::ChangeSet interface
13
15
  #
14
16
  # property :my_custom_form_field
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AdminSetResourceIndexer < Hyrax::Indexers::AdministrativeSetIndexer
4
+ check_if_flexible(AdminSetResource)
5
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Generated via
4
4
  # `rails generate hyrax:collection_resource CollectionResource`
5
- class CollectionResourceIndexer < Hyrax::PcdmCollectionIndexer
6
- include Hyrax::Indexer(:basic_metadata)
7
- include Hyrax::Indexer(:collection_resource)
5
+ class CollectionResourceIndexer < Hyrax::Indexers::PcdmCollectionIndexer
6
+ include Hyrax::Indexer(:basic_metadata) if Hyrax.config.collection_include_metadata?
7
+ check_if_flexible(CollectionResource)
8
8
  end
@@ -3,9 +3,12 @@
3
3
  # Generated via
4
4
  # `rails generate hyrax:work_resource GenericWorkResource`
5
5
  class GenericWorkResourceIndexer < Hyrax::ValkyrieWorkIndexer
6
- include Hyrax::Indexer(:basic_metadata)
7
- include Hyrax::Indexer(:generic_work_resource)
8
-
6
+ if Hyrax.config.work_include_metadata?
7
+ include Hyrax::Indexer(:core_metadata)
8
+ include Hyrax::Indexer(:basic_metadata)
9
+ include Hyrax::Indexer(:generic_work_resource)
10
+ end
11
+ check_if_flexible(GenericWorkResource)
9
12
  # Uncomment this block if you want to add custom indexing behavior:
10
13
  # def to_solr
11
14
  # super.tap do |index_document|
@@ -3,8 +3,12 @@
3
3
  # Generated via
4
4
  # `rails generate hyrax:work_resource Monograph`
5
5
  class MonographIndexer < Hyrax::ValkyrieWorkIndexer
6
- include Hyrax::Indexer(:basic_metadata)
7
- include Hyrax::Indexer(:monograph)
6
+ if Hyrax.config.work_include_metadata?
7
+ include Hyrax::Indexer(:core_metadata)
8
+ include Hyrax::Indexer(:basic_metadata)
9
+ include Hyrax::Indexer(:monograph)
10
+ end
11
+ check_if_flexible(Monograph)
8
12
 
9
13
  # Uncomment this block if you want to add custom indexing behavior:
10
14
  # def to_solr
@@ -22,4 +22,12 @@ class Ability
22
22
  can [:create, :show, :add_user, :remove_user, :index, :edit, :update, :destroy], Role
23
23
  end
24
24
  end
25
+
26
+ def can_import_works?
27
+ can_create_any_work?
28
+ end
29
+
30
+ def can_export_works?
31
+ can_create_any_work?
32
+ end
25
33
  end
@@ -30,8 +30,10 @@ class CollectionResource < Hyrax::PcdmCollection
30
30
  # * add Valkyrie attributes to this class
31
31
  # * update form and indexer to process the attributes
32
32
  #
33
- include Hyrax::Schema(:basic_metadata)
34
- include Hyrax::Schema(:collection_resource)
33
+ if Hyrax.config.collection_include_metadata?
34
+ include Hyrax::Schema(:basic_metadata)
35
+ include Hyrax::Schema(:collection_resource)
36
+ end
35
37
 
36
38
  Hyrax::ValkyrieLazyMigration.migrating(self, from: ::Collection) if Hyrax.config.valkyrie_transition?
37
39
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bulkrax::HasLocalProcessing
4
+ # This method is called during build_metadata
5
+ # add any special processing here, for example to reset a metadata property
6
+ # to add a custom property from outside of the import data
7
+ def add_local; end
8
+ end
@@ -3,8 +3,11 @@
3
3
  # Generated via
4
4
  # `rails generate hyrax:work_resource GenericWorkResource`
5
5
  class GenericWorkResource < Hyrax::Work
6
- include Hyrax::Schema(:basic_metadata)
7
- include Hyrax::Schema(:generic_work_resource)
6
+ if Hyrax.config.work_include_metadata?
7
+ include Hyrax::Schema(:core_metadata)
8
+ include Hyrax::Schema(:basic_metadata)
9
+ include Hyrax::Schema(:generic_work_resource)
10
+ end
8
11
 
9
12
  Hyrax::ValkyrieLazyMigration.migrating(self, from: GenericWork) if Hyrax.config.valkyrie_transition?
10
13
  end
@@ -3,6 +3,9 @@
3
3
  # Generated via
4
4
  # `rails generate hyrax:work_resource Monograph`
5
5
  class Monograph < Hyrax::Work
6
- include Hyrax::Schema(:basic_metadata)
7
- include Hyrax::Schema(:monograph)
6
+ if Hyrax.config.work_include_metadata?
7
+ include Hyrax::Schema(:core_metadata)
8
+ include Hyrax::Schema(:basic_metadata)
9
+ include Hyrax::Schema(:monograph)
10
+ end
8
11
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ xml.instruct! :xml, version: '1.0', encoding: 'UTF-8'
4
+ xml.urlset(
5
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
6
+ 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
7
+ 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9'
8
+ ) do
9
+ config = BlacklightDynamicSitemap::Engine.config
10
+ @sitemap_entries.each do |doc|
11
+ solr_doc = SolrDocument.new(doc)
12
+
13
+ xml.url do
14
+ # Use Hyrax's routing logic: collections go through hyrax engine, works through main_app
15
+ url_parts = solr_doc.collection? ? [hyrax, solr_doc] : [main_app, solr_doc]
16
+ xml.loc(polymorphic_url(url_parts))
17
+
18
+ last_modified = doc[config.last_modified_field]
19
+ xml.lastmod(config.format_last_modified&.call(last_modified) || last_modified)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../config/environment'
5
+
6
+ require 'slop'
7
+
8
+ def main(opts = {})
9
+ check_required_params
10
+
11
+ update = opts[:importer_id].present?
12
+ port = opts[:port].presence
13
+ url = build_url(opts.delete(:importer_id), opts.delete(:url), port)
14
+
15
+ headers = { 'Content-Type' => 'application/json' }
16
+ headers['Authorization'] = "Token: #{opts.delete(:auth_token)}"
17
+ params = build_params(opts)
18
+
19
+ Rails.logger.info("POST to #{url} - PARAMS #{params}")
20
+
21
+ conn = Faraday.new(
22
+ url: url,
23
+ headers: headers
24
+ )
25
+
26
+ response = if update
27
+ conn.put do |request|
28
+ request.body = params.to_json
29
+ end
30
+ else
31
+ conn.post do |request|
32
+ request.body = params.to_json
33
+ end
34
+ end
35
+
36
+ puts "#{response.status} - #{response.body.truncate(200)}"
37
+ end
38
+
39
+ def check_required_params
40
+ if opts[:importer_id].blank? && invalid?(opts)
41
+ puts 'Missing required parameters'
42
+ help
43
+ end
44
+
45
+ if opts[:auth_token].blank? # rubocop:disable Style/GuardClause
46
+ puts 'Missing Authentication Token --auth_token'
47
+ exit
48
+ end
49
+ end
50
+
51
+ def invalid?(opts)
52
+ required_params.each do |p|
53
+ return true if opts[p.to_sym].blank?
54
+ end
55
+ return false
56
+ end
57
+
58
+ def required_params
59
+ Bulkrax.api_definition['bulkrax']['importer'].map { |key, value| key if value['required'] == true }.compact
60
+ end
61
+
62
+ def build_params(opts = {})
63
+ params = {}
64
+ params[:commit] = opts.delete(:commit)
65
+ parser_fields = {
66
+ metadata_file_name: opts.delete(:metadata_file_name),
67
+ metadata_format: opts.delete(:metadata_format),
68
+ rights_statement: opts.delete(:rights_statement),
69
+ override_rights_statement: opts.delete(:override_rights_statement),
70
+ import_file_path: opts.delete(:import_file_path),
71
+ metadata_prefix: opts.delete(:metadata_prefix),
72
+ set: opts.delete(:set),
73
+ collection_name: opts.delete(:collection_name)
74
+ }.compact
75
+ params[:importer] = opts.compact
76
+ params[:importer][:user_id] = opts.delete(:user_id)
77
+ params[:importer][:admin_set_id] = opts.delete(:admin_set_id)
78
+ params[:importer][:parser_fields] = parser_fields || {}
79
+ return params.compact
80
+ end
81
+
82
+ def build_url(importer_id, url, port = nil)
83
+ if url.nil?
84
+ protocol = Rails.application.config.force_ssl ? 'https://' : 'http://'
85
+ host = Rails.application.config.action_mailer.default_url_options[:host]
86
+ url = "#{protocol}#{host}"
87
+ url = "#{url}:#{port}" if port
88
+ end
89
+ path = Bulkrax::Engine.routes.url_helpers.polymorphic_path(Bulkrax::Importer)
90
+ url = File.join(url, path)
91
+ url = File.join(url, importer_id) if importer_id
92
+ return url
93
+ end
94
+
95
+ def version
96
+ puts "Bulkrax #{Bulkrax::VERSION}"
97
+ puts "Slop #{Slop::VERSION}"
98
+ end
99
+
100
+ # Format the help for the CLI
101
+ def help
102
+ puts 'CREATE:'
103
+ puts ' bin/importer --name "My Import" --parser_klass Bulkrax::CsvParser --commit "Create and Import" --import_file_path /data/tmp/import.csv --auth_token 12345'
104
+ puts 'UPDATE:'
105
+ puts ' bin/importer --importer_id 1 --commit "Update and Re-Import (update metadata only)" --import_file_path /data/tmp/import.csv --auth_token 12345'
106
+ puts 'PARAMETERS:'
107
+ Bulkrax.api_definition['bulkrax']['importer'].each_pair do |key, value|
108
+ next if key == 'parser_fields'
109
+ puts " --#{key}"
110
+ value.each_pair do |k, v|
111
+ next if k == 'contained_in'
112
+ puts " #{k}: #{v}"
113
+ end
114
+ end
115
+ puts ' --url'
116
+ puts " Repository URL"
117
+ exit
118
+ end
119
+
120
+ # Setup the options
121
+ options = Slop.parse do |o|
122
+ o.on '--version', 'Print the version' do
123
+ version
124
+ exit
125
+ end
126
+
127
+ o.on '--help', 'Print help' do
128
+ help
129
+ exit
130
+ end
131
+
132
+ Bulkrax.api_definition['bulkrax']['importer'].each_pair do |key, value|
133
+ if value['required'].blank?
134
+ o.string "--#{key}", value['definition'], default: nil
135
+ else
136
+ o.string "--#{key}", value['definition']
137
+ end
138
+ end
139
+ o.string '--url', 'Repository URL'
140
+ end
141
+
142
+ main(options.to_hash)
data/.dassie/bin/web ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ exec "./bin/rails s -b 0.0.0.0"
@@ -1,2 +1,2 @@
1
1
  file_system:
2
- home: <%= ENV.fetch('BROWSE_EVERYTHING_FS_PROVIDER_PATH', Rails.root) =>
2
+ home: <%= ENV.fetch('BROWSE_EVERYTHING_FS_PROVIDER_PATH', Rails.root.join('test_files')) %>
@@ -0,0 +1,86 @@
1
+ bulkrax:
2
+ importer:
3
+ importer_id:
4
+ definition: 'The ID of the Importer. Used for Update only. CLI only.'
5
+ name:
6
+ definition: 'Name for the Importer'
7
+ required: true
8
+ admin_set_id:
9
+ definition: 'AdminSet ID. If not supplied the default AdminSet is used.'
10
+ parser_fields:
11
+ definition: 'Contains additional information which varies depending on the parser. Some is required.'
12
+ type: container
13
+ rights_statement:
14
+ definition: 'Supply a URI from the application rights statements'
15
+ valid_values: <%= Hyrax.config.rights_statement_service_class.new.select_active_options.map(&:last) %>
16
+ contained_in: parser_fields
17
+ override_rights_statement:
18
+ definition: 'Override any existing rights statements: 1 for yes | 0 for no'
19
+ valid_values:
20
+ - 0
21
+ - 1
22
+ contained_in: parser_fields
23
+ import_file_path:
24
+ definition: 'Path to the import file - required for CSV and BagIt only'
25
+ required:
26
+ - 'Bulkrax::BagitParser'
27
+ - 'Bulkrax::CsvParser'
28
+ contained_in: parser_fields
29
+ selected_files:
30
+ definition: 'Used by browse everything to retrieve files from cloud URLs'
31
+ metadata_file_name:
32
+ definition: 'Filename used for metadata files - required for BagIt only'
33
+ required:
34
+ - 'Bulkrax::BagitParser'
35
+ contained_in: parser_fields
36
+ metadata_format:
37
+ definition: 'RDF or CSV - required for BagIt only'
38
+ required:
39
+ - 'Bulkrax::BagitParser'
40
+ valid_values:
41
+ - 'Bulkrax::RdfEntry'
42
+ - 'Bulkrax::CsvEntry'
43
+ contained_in: parser_fields
44
+ set:
45
+ definition: 'The OAI setSpec - required for OAI only'
46
+ required:
47
+ - 'Bulkrax::OaiParser'
48
+ contained_in: parser_fields
49
+ collection_name:
50
+ definition: 'The OAI setName - required for required for OAI only'
51
+ required:
52
+ - 'Bulkrax::OaiParser'
53
+ contained_in: parser_fields
54
+ parser_klass:
55
+ definition: 'Parser name eg. Bulkrax::CsvParser'
56
+ required: true
57
+ valid_values: <%= Bulkrax.parsers.map {|p|p[:class_name]} %>
58
+ limit:
59
+ definition: 'Number of records to import; blank for all'
60
+ frequency:
61
+ definition: ISO 8601 Durations <%= Bulkrax::Importer.frequency_enums.map(&:first).join('; ') %>
62
+ valid_values: <%= Bulkrax::Importer.frequency_enums.map(&:last) %>
63
+ field_mapping:
64
+ definition: 'See bulkrax/lib/bulkrax.rb for further information'
65
+ user_id:
66
+ definition: 'ID of the User creating the Importer. If not supplied, the batch_user will be used.'
67
+ base_url:
68
+ definition: 'Base URL for the Endpoint - required for OAI Only'
69
+ required:
70
+ - 'Bulkrax::OaiParser'
71
+ commit:
72
+ definition: 'Commit Message, Bulkrax uses commit messages to decide what action to take.'
73
+ required: true
74
+ valid_values:
75
+ - "Create"
76
+ - "Create and Import"
77
+ - "Update Importer"
78
+ - "Update and Re-Import (update metadata and replace files)"
79
+ - "Update and Harvest Updated Items', 'Update and Re-Harvest All Items"
80
+ - "Update and Re-Import (update metadata only)"
81
+ - "Update and Import (importer has not yet been run)"
82
+ auth_token:
83
+ definition: 'Authentication token. Required for JSON requests only.'
84
+ required: true
85
+ port:
86
+ definition: 'Port to use in http request. Defaults to 80. May need to set to 3000 when running in the development environment'
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+ Rails.application.reloader.to_prepare do
3
+ Bulkrax.setup do |config|
4
+ # Add local parsers
5
+ # config.parsers += [
6
+ # { name: 'MODS - My Local MODS parser', class_name: 'Bulkrax::ModsXmlParser', partial: 'mods_fields' },
7
+ # ]
8
+
9
+ # WorkType to use as the default if none is specified in the import
10
+ # Default is the first returned by Hyrax.config.curation_concerns, stringified
11
+ # config.default_work_type = "MyWork"
12
+
13
+ # Factory Class to use when generating and saving objects
14
+ config.object_factory = Hyrax.config.valkyrie_transition? ? Bulkrax::ValkyrieObjectFactory : Bulkrax::ObjectFactory
15
+ # Use this for a Postgres-backed Valkyrized Hyrax
16
+ # config.object_factory = Bulkrax::ValkyrieObjectFactory
17
+
18
+ config.collection_model_class = Hyrax.config.collection_class
19
+ config.file_model_class = Hyrax.config.file_set_class
20
+
21
+ # Path to store pending imports
22
+ config.import_path = Hyrax.config.upload_path.call.join('imports').to_s
23
+
24
+ # Path to store exports before download
25
+ config.export_path = Hyrax.config.upload_path.call.join('exports').to_s
26
+
27
+ # Server name for oai request header
28
+ # config.server_name = 'my_server@name.com'
29
+
30
+ # NOTE: Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.
31
+ # Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.
32
+ # Field_mapping for establishing a collection relationship (FROM work TO collection)
33
+ # This value IS NOT used for OAI, so setting the OAI parser here will have no effect
34
+ # The mapping is supplied per Entry, provide the full class name as a string, eg. 'Bulkrax::CsvEntry'
35
+ # The default value for CSV is collection
36
+ # Add/replace parsers, for example:
37
+ # config.collection_field_mapping['Bulkrax::RdfEntry'] = 'http://opaquenamespace.org/ns/set'
38
+
39
+ # Field mappings
40
+ # Create a completely new set of mappings by replacing the whole set as follows
41
+ # config.field_mappings = {
42
+ # "Bulkrax::OaiDcParser" => { **individual field mappings go here*** }
43
+ # }
44
+
45
+ # Add to, or change existing mappings as follows
46
+ # e.g. to exclude date
47
+ # config.field_mappings["Bulkrax::OaiDcParser"]["date"] = { from: ["date"], excluded: true }
48
+ #
49
+ # e.g. to import parent-child relationships
50
+ # config.field_mappings['Bulkrax::CsvParser']['parents'] = { from: ['parents'], related_parents_field_mapping: true }
51
+ # config.field_mappings['Bulkrax::CsvParser']['children'] = { from: ['children'], related_children_field_mapping: true }
52
+ # (For more info on importing relationships, see Bulkrax Wiki: https://github.com/samvera-labs/bulkrax/wiki/Configuring-Bulkrax#parent-child-relationship-field-mappings)
53
+ #
54
+ # # e.g. to add the required source_identifier field
55
+ # # config.field_mappings["Bulkrax::CsvParser"]["source_id"] = { from: ["old_source_id"], source_identifier: true, search_field: 'source_id_sim' }
56
+ # If you want Bulkrax to fill in source_identifiers for you, see below
57
+
58
+ # To duplicate a set of mappings from one parser to another
59
+ # config.field_mappings["Bulkrax::OaiOmekaParser"] = {}
60
+ # config.field_mappings["Bulkrax::OaiDcParser"].each {|key,value| config.field_mappings["Bulkrax::OaiOmekaParser"][key] = value }
61
+
62
+ # Should Bulkrax make up source identifiers for you? This allow round tripping
63
+ # and download errored entries to still work, but does mean if you upload the
64
+ # same source record in two different files you WILL get duplicates.
65
+ # It is given two aruguments, self at the time of call and the index of the reocrd
66
+ # config.fill_in_blank_source_identifiers = ->(parser, index) { "b-#{parser.importer.id}-#{index}"}
67
+ # or use a uuid
68
+ # config.fill_in_blank_source_identifiers = ->(parser, index) { SecureRandom.uuid }
69
+
70
+ # Properties that should not be used in imports/exports. They are reserved for use by Hyrax.
71
+ # config.reserved_properties += ['my_field']
72
+
73
+ # List of Questioning Authority properties that are controlled via YAML files in
74
+ # the config/authorities/ directory. For example, the :rights_statement property
75
+ # is controlled by the active terms in config/authorities/rights_statements.yml
76
+ # Defaults: 'rights_statement' and 'license'
77
+ # config.qa_controlled_properties += ['my_field']
78
+
79
+ # Specify the delimiter regular expression for splitting an attribute's values into a multi-value array.
80
+ # config.multi_value_element_split_on = /\s*[:;|]\s*/.freeze
81
+
82
+ # Specify the delimiter for joining an attribute's multi-value array into a string. Note: the
83
+ # specific delimeter should likely be present in the multi_value_element_split_on expression.
84
+ # config.multi_value_element_join_on = ' | '
85
+ end
86
+
87
+ # Sidebar for hyrax 3+ support
88
+ # rubocop:disable Style/IfUnlessModifier
89
+ if Object.const_defined?(:Hyrax) && ::Hyrax::DashboardController&.respond_to?(:sidebar_partials)
90
+ Hyrax::DashboardController.sidebar_partials[:repository_content] << "hyrax/dashboard/sidebar/bulkrax_sidebar_additions"
91
+ end
92
+ end
@@ -1,2 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  ClamAV.instance.loaddb if defined? ClamAV
3
+
4
+ Clamby.configure(daemonize: true, fdpass: true) if defined? Clamby