hyrax 4.0.0 → 5.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +124 -232
- data/.dassie/.env +8 -2
- data/.dassie/Gemfile +27 -42
- data/.dassie/Gemfile.dassie +2 -0
- data/.dassie/app/assets/config/manifest.js +2 -0
- data/.dassie/app/assets/stylesheets/hyrax.scss +1 -0
- data/.dassie/config/environments/test.rb +1 -0
- data/.dassie/config/initializers/hyrax.rb +3 -1
- data/.dassie/config/initializers/riiif.rb +11 -7
- data/.dassie/config/metadata/collection_resource.yaml +3 -0
- data/.dassie/config/metadata/monograph.yaml +8 -0
- data/.dassie/config/metadata/sample_metadata.yaml +1 -0
- data/.dassie/config/redis.yml +2 -0
- data/.dassie/db/migrate/20230725222727_create_hyrax_counter_metrics.hyrax.rb +14 -0
- data/.dassie/db/migrate/20230803165135_change_work_id_to_string.rb +5 -0
- data/.dassie/db/migrate/20230808102105_add_indices_to_hyrax_counter_metrics.hyrax.rb +8 -0
- data/.dassie/db/migrate/20230821153635_add_fields_to_counter_metric.rb +8 -0
- data/.dassie/db/schema.rb +22 -3
- data/.dockerignore +7 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +10 -7
- data/.github/release.yml +5 -2
- data/.gitignore +1 -1
- data/.koppie/.env +13 -4
- data/.koppie/Gemfile +10 -12
- data/.koppie/Gemfile.koppie +2 -0
- data/.koppie/Rakefile +0 -2
- data/.koppie/app/models/ability.rb +1 -5
- data/.koppie/app/models/user.rb +0 -2
- data/.koppie/config/application.rb +2 -1
- data/.koppie/config/arkivo.yml +6 -0
- data/.koppie/config/blacklight.yml +2 -2
- data/.koppie/config/environments/test.rb +1 -0
- data/.koppie/config/features.yml +2 -0
- data/.koppie/config/initializers/1_valkyrie.rb +29 -6
- data/.koppie/config/initializers/arkivo_constraint.rb +12 -0
- data/.koppie/config/initializers/hyrax.rb +10 -4
- data/.koppie/config/initializers/riiif.rb +11 -7
- data/.koppie/config/metadata/collection_resource.yaml +49 -0
- data/.koppie/config/metadata/generic_work.yaml +2 -0
- data/.koppie/config/metadata/monograph.yaml +10 -0
- data/.koppie/config/role_map.yml +3 -25
- data/.koppie/config/routes.rb +1 -2
- data/.koppie/config/solr.yml +1 -1
- data/.koppie/config/valkyrie_index.yml +4 -10
- data/.koppie/config/zotero.yml +6 -0
- data/.koppie/db/migrate/20230725222727_create_hyrax_counter_metrics.hyrax.rb +14 -0
- data/.koppie/db/migrate/20230803165135_change_work_id_to_string.rb +5 -0
- data/.koppie/db/schema.rb +12 -1
- data/.koppie/yarn.lock +23 -23
- data/.regen +1 -1
- data/CONTAINERS.md +1 -3
- data/Dockerfile +17 -13
- data/Gemfile +4 -21
- data/Gemfile.dassie +2 -0
- data/Gemfile.koppie +2 -0
- data/README.md +0 -1
- data/Rakefile +0 -11
- data/app/actors/hyrax/actors/base_actor.rb +4 -3
- data/app/actors/hyrax/actors/embargo_actor.rb +3 -3
- data/app/actors/hyrax/actors/lease_actor.rb +5 -2
- data/app/assets/javascripts/hyrax/batch_select_all.js +1 -1
- data/app/assets/javascripts/hyrax/file_manager/member.es6 +1 -1
- data/app/assets/javascripts/hyrax/file_manager/sorting.es6 +3 -2
- data/app/assets/stylesheets/hyrax/_file-listing.scss +0 -2
- data/app/assets/stylesheets/hyrax/_work-show.scss +19 -3
- data/app/assets/stylesheets/hyrax/sidebar.scss +23 -0
- data/app/controllers/concerns/hyrax/embargoes_controller_behavior.rb +8 -2
- data/app/controllers/concerns/hyrax/leases_controller_behavior.rb +7 -1
- data/app/controllers/concerns/hyrax/valkyrie_downloads_controller_behavior.rb +79 -0
- data/app/controllers/concerns/hyrax/works_controller_behavior.rb +64 -14
- data/app/controllers/hyrax/admin/workflows_controller.rb +48 -3
- data/app/controllers/hyrax/api/items_controller.rb +2 -3
- data/app/controllers/hyrax/batch_edits_controller.rb +39 -10
- data/app/controllers/hyrax/batch_uploads_controller.rb +5 -1
- data/app/controllers/hyrax/dashboard/collections_controller.rb +4 -1
- data/app/controllers/hyrax/downloads_controller.rb +8 -1
- data/app/controllers/hyrax/file_sets_controller.rb +50 -6
- data/app/controllers/hyrax/my/collections_controller.rb +2 -0
- data/app/controllers/hyrax/single_use_links_viewer_controller.rb +16 -2
- data/app/forms/concerns/hyrax/basic_metadata_form_fields_behavior.rb +38 -0
- data/app/forms/hyrax/forms/collection_form.rb +0 -15
- data/app/forms/hyrax/forms/dashboard/nest_collection_form.rb +0 -34
- data/app/forms/hyrax/forms/file_set_edit_form.rb +1 -1
- data/app/forms/hyrax/forms/file_set_form.rb +2 -2
- data/app/forms/hyrax/forms/pcdm_object_form.rb +21 -0
- data/app/forms/hyrax/forms/permission_template_form.rb +2 -7
- data/app/forms/hyrax/forms/resource_batch_edit_form.rb +118 -0
- data/app/forms/hyrax/forms/resource_form.rb +21 -34
- data/app/forms/hyrax/forms/work_embargo_form.rb +1 -0
- data/app/forms/hyrax/forms/work_form.rb +1 -1
- data/app/forms/hyrax/forms/work_lease_form.rb +1 -0
- data/app/helpers/hyrax/dashboard_helper_behavior.rb +30 -9
- data/app/helpers/hyrax/membership_helper.rb +13 -1
- data/app/helpers/hyrax/work_form_helper.rb +0 -107
- data/app/indexers/hyrax/file_set_indexer.rb +6 -0
- data/app/indexers/hyrax/location_indexer.rb +29 -0
- data/app/indexers/hyrax/valkyrie_file_set_indexer.rb +36 -5
- data/app/indexers/hyrax/valkyrie_work_indexer.rb +9 -2
- data/app/inputs/controlled_vocabulary_input.rb +1 -1
- data/app/jobs/characterize_job.rb +1 -1
- data/app/jobs/create_work_job.rb +36 -4
- data/app/jobs/valkyrie_characterization_job.rb +9 -0
- data/app/jobs/valkyrie_create_derivatives_job.rb +8 -7
- data/app/jobs/valkyrie_ingest_job.rb +1 -4
- data/app/models/admin_set.rb +1 -31
- data/app/models/collection_branding_info.rb +2 -9
- data/app/models/concerns/hyrax/ability.rb +2 -1
- data/app/models/concerns/hyrax/collection_behavior.rb +4 -12
- data/app/models/concerns/hyrax/file_set/derivatives.rb +3 -2
- data/app/models/concerns/hyrax/riiif_file.rb +30 -0
- data/app/models/concerns/hyrax/solr_document_behavior.rb +20 -3
- data/app/models/hyrax/collection_type.rb +5 -14
- data/app/models/hyrax/counter_metric.rb +7 -0
- data/app/models/hyrax/file_metadata.rb +9 -9
- data/app/models/hyrax/file_set.rb +76 -15
- data/app/models/hyrax/orcid_validator.rb +0 -6
- data/app/models/hyrax/resource.rb +30 -2
- data/app/models/hyrax/work.rb +2 -5
- data/app/presenters/hyrax/collection_presenter.rb +0 -17
- data/app/presenters/hyrax/embargo_presenter.rb +4 -0
- data/app/presenters/hyrax/file_set_presenter.rb +6 -0
- data/app/presenters/hyrax/iiif_manifest_presenter.rb +3 -7
- data/app/presenters/hyrax/pcdm_member_presenter_factory.rb +6 -4
- data/app/presenters/hyrax/presenter_renderer.rb +0 -7
- data/app/presenters/hyrax/version_list_presenter.rb +19 -10
- data/app/presenters/hyrax/version_presenter.rb +19 -4
- data/app/presenters/hyrax/work_show_presenter.rb +6 -11
- data/app/search_builders/hyrax/file_set_search_builder.rb +1 -1
- data/app/search_builders/hyrax/valkyrie_abstract_type_relation.rb +37 -0
- data/app/search_builders/hyrax/valkyrie_work_relation.rb +9 -0
- data/app/services/hyrax/admin_set_create_service.rb +0 -17
- data/app/services/hyrax/characterization/valkyrie_characterization_service.rb +16 -9
- data/app/services/hyrax/collections/collection_member_service.rb +1 -1
- data/app/services/hyrax/custom_queries/find_by_date_range.rb +55 -0
- data/app/services/hyrax/custom_queries/find_count_by.rb +62 -0
- data/app/services/hyrax/custom_queries/find_file_metadata.rb +1 -1
- data/app/services/hyrax/custom_queries/find_models_by_access.rb +59 -0
- data/app/services/hyrax/derivative_bucketed_storage.rb +25 -0
- data/app/services/hyrax/derivative_path.rb +14 -4
- data/app/services/hyrax/embargo_manager.rb +106 -13
- data/app/services/hyrax/embargo_service.rb +12 -10
- data/app/services/hyrax/file_set_derivatives_service.rb +14 -13
- data/app/services/hyrax/fixity_check_failure_service.rb +1 -1
- data/app/services/hyrax/identifier/dispatcher.rb +9 -2
- data/app/services/hyrax/lease_manager.rb +88 -8
- data/app/services/hyrax/listeners/file_metadata_listener.rb +16 -8
- data/app/services/hyrax/listeners/member_cleanup_listener.rb +2 -28
- data/app/services/hyrax/listeners/metadata_index_listener.rb +11 -0
- data/app/services/hyrax/listeners/workflow_listener.rb +8 -11
- data/app/services/hyrax/lock_manager.rb +1 -2
- data/app/services/hyrax/persist_directly_contained_output_file_service.rb +24 -2
- data/app/services/hyrax/riiif_file_resolver.rb +50 -0
- data/app/services/hyrax/simple_schema_loader.rb +31 -0
- data/app/services/hyrax/solr_query_service.rb +7 -6
- data/app/services/hyrax/statistics/depositors/summary.rb +1 -1
- data/app/services/hyrax/statistics/over_time.rb +1 -1
- data/app/services/hyrax/statistics/users/over_time.rb +3 -1
- data/app/services/hyrax/statistics/valkyrie_query_service.rb +49 -0
- data/app/services/hyrax/statistics/works/count.rb +1 -1
- data/app/services/hyrax/thumbnail_path_service.rb +5 -0
- data/app/services/hyrax/valkyrie_persist_derivatives.rb +16 -11
- data/app/services/hyrax/valkyrie_upload.rb +16 -28
- data/app/services/hyrax/versioning_service.rb +30 -15
- data/app/services/hyrax/visibility_intention.rb +1 -4
- data/app/services/hyrax/visibility_propagator.rb +1 -1
- data/app/services/hyrax/work_uploads_handler.rb +1 -1
- data/app/services/hyrax/workflow/actionable_objects.rb +28 -3
- data/app/services/hyrax/workflow/grant_edit_to_depositor.rb +1 -1
- data/app/services/hyrax/workflow/grant_read_to_depositor.rb +1 -1
- data/app/services/hyrax/workflow/permission_query.rb +23 -2
- data/app/validators/hyrax/collection_membership_validator.rb +1 -1
- data/app/views/catalog/_search_form.html.erb +1 -1
- data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
- data/app/views/hyrax/admin/workflows/_tabs.html.erb +9 -0
- data/app/views/hyrax/admin/workflows/index.html.erb +53 -76
- data/app/views/hyrax/base/_file_manager_members.html.erb +2 -2
- data/app/views/hyrax/base/_file_manager_resource_form.html.erb +1 -1
- data/app/views/hyrax/base/_form.html.erb +0 -10
- data/app/views/hyrax/base/_form_permission_embargo.html.erb +1 -1
- data/app/views/hyrax/base/_form_permission_lease.html.erb +1 -1
- data/app/views/hyrax/base/_form_visibility_component.html.erb +4 -4
- data/app/views/hyrax/base/_items.html.erb +1 -1
- data/app/views/hyrax/base/_show_actions.html.erb +1 -1
- data/app/views/hyrax/base/_workflow_actions.html.erb +25 -23
- data/app/views/hyrax/base/file_manager.html.erb +1 -1
- data/app/views/hyrax/base/show.json.jbuilder +4 -3
- data/app/views/hyrax/collections/_show_document_list_row.html.erb +1 -1
- data/app/views/hyrax/dashboard/collections/_list_collections.html.erb +1 -1
- data/app/views/hyrax/dashboard/collections/_show_document_list_row.html.erb +1 -1
- data/app/views/hyrax/dashboard/collections/_sort_and_per_page.html.erb +3 -3
- data/app/views/hyrax/file_sets/_versioning.html.erb +5 -5
- data/app/views/hyrax/file_sets/media_display/_audio.html.erb +4 -4
- data/app/views/hyrax/file_sets/media_display/_default.html.erb +1 -1
- data/app/views/hyrax/file_sets/media_display/_video.html.erb +2 -2
- data/app/views/hyrax/file_sets/show.html.erb +5 -3
- data/app/views/hyrax/homepage/_explore_collections.html.erb +1 -1
- data/app/views/hyrax/my/_search_form.html.erb +1 -1
- data/app/views/hyrax/notifications/_notifications.html.erb +1 -1
- data/app/views/hyrax/users/_vitals.html.erb +1 -1
- data/bin/dev-entrypoint.sh +13 -0
- data/chart/hyrax/Chart.yaml +18 -14
- data/chart/hyrax/README.md +34 -21
- data/chart/hyrax/templates/_helpers.tpl +34 -1
- data/chart/hyrax/templates/configmap-env.yaml +12 -2
- data/chart/hyrax/templates/secrets.yaml +1 -1
- data/chart/hyrax/values.yaml +39 -14
- data/config/initializers/file_length_patch.rb +10 -0
- data/config/initializers/listeners.rb +4 -10
- data/config/initializers/storage_adapter_initializer.rb +1 -1
- data/config/locales/hyrax.en.yml +8 -0
- data/config/metadata/basic_metadata.yaml +52 -0
- data/config/metadata/core_metadata.yaml +4 -0
- data/config/metadata/file_set_metadata.yaml +20 -1
- data/config/metadata/hyrax_internal_metadata.yaml +57 -0
- data/docker-compose-koppie.yml +36 -22
- data/docker-compose-sirenia.yml +202 -0
- data/docker-compose.yml +42 -26
- data/documentation/developing-your-hyrax-based-app.md +6 -14
- data/documentation/legacyREADME.md +3 -1
- data/hyrax.gemspec +12 -13
- data/karma.conf.js +9 -10
- data/lib/generators/hyrax/collection_resource/templates/collection_metadata.yaml +2 -0
- data/lib/generators/hyrax/templates/config/initializers/hyrax.rb +1 -1
- data/lib/generators/hyrax/templates/config/initializers/riiif.rb +11 -7
- data/lib/generators/hyrax/templates/db/migrate/20230725222727_create_hyrax_counter_metrics.rb.erb +14 -0
- data/lib/generators/hyrax/templates/db/migrate/20230803165135_change_work_id_to_string.rb.erb +5 -0
- data/lib/generators/hyrax/templates/db/migrate/20230808102105_add_indices_to_hyrax_counter_metrics.rb.erb +8 -0
- data/lib/generators/hyrax/templates/db/migrate/20230821153635_add_fields_to_counter_metric.rb.erb +8 -0
- data/lib/generators/hyrax/templates/db/seeds.rb +1 -1
- data/lib/generators/hyrax/work_resource/templates/form.rb.erb +1 -1
- data/lib/generators/hyrax/work_resource/templates/metadata.yaml +2 -0
- data/lib/hyrax/active_fedora_dummy_model.rb +6 -1
- data/lib/hyrax/configuration.rb +147 -43
- data/lib/hyrax/controlled_vocabularies/location.rb +7 -1
- data/lib/hyrax/engine.rb +2 -1
- data/lib/hyrax/form_fields.rb +6 -0
- data/lib/hyrax/publisher.rb +23 -3
- data/lib/hyrax/redis_event_store.rb +7 -8
- data/lib/hyrax/resource_name.rb +4 -0
- data/lib/hyrax/specs/capybara.rb +25 -37
- data/lib/hyrax/specs/shared_specs/hydra_works.rb +34 -7
- data/lib/hyrax/specs/shared_specs/indexers.rb +24 -6
- data/lib/hyrax/transactions/collection_destroy.rb +3 -2
- data/lib/hyrax/transactions/container.rb +47 -0
- data/lib/hyrax/transactions/file_metadata_destroy.rb +20 -0
- data/lib/hyrax/transactions/file_set_destroy.rb +3 -1
- data/lib/hyrax/transactions/file_set_update.rb +21 -0
- data/lib/hyrax/transactions/steps/add_file_sets.rb +6 -0
- data/lib/hyrax/transactions/steps/add_to_parent.rb +1 -1
- data/lib/hyrax/transactions/steps/apply_permission_template.rb +40 -0
- data/lib/hyrax/transactions/steps/delete_all_file_metadata.rb +46 -0
- data/lib/hyrax/transactions/steps/delete_all_file_sets.rb +46 -0
- data/lib/hyrax/transactions/steps/file_metadata_delete.rb +40 -0
- data/lib/hyrax/transactions/steps/remove_from_membership.rb +45 -0
- data/lib/hyrax/transactions/steps/save.rb +21 -0
- data/lib/hyrax/transactions/work_create.rb +1 -0
- data/lib/hyrax/transactions/work_destroy.rb +3 -2
- data/lib/hyrax/version.rb +1 -1
- data/lib/hyrax.rb +1 -0
- data/lib/tasks/collection_type_global_id.rake +9 -4
- data/lib/tasks/embargo_lease.rake +1 -0
- data/lib/valkyrie/indexing/solr/indexing_adapter.rb +2 -0
- data/lib/wings/active_fedora_converter/default_work.rb +7 -2
- data/lib/wings/active_fedora_converter/file_metadata_node.rb +1 -1
- data/lib/wings/active_fedora_converter.rb +53 -11
- data/lib/wings/attribute_transformer.rb +24 -17
- data/lib/wings/model_transformer.rb +23 -12
- data/lib/wings/orm_converter.rb +23 -18
- data/lib/wings/setup.rb +23 -3
- data/lib/wings/valkyrie/persister.rb +4 -2
- data/lib/wings/valkyrie/storage.rb +8 -90
- data/lib/wings.rb +5 -0
- data/package.json +3 -1
- data/tasks/hyrax_dev.rake +2 -33
- data/template.rb +1 -1
- metadata +104 -81
- data/.engine_cart.yml +0 -3
- data/app/forms/hyrax/forms/file_manager_form.rb +0 -35
- data/app/services/hyrax/collections/migration_service.rb +0 -113
- data/app/views/hyrax/base/_form_collections_error.html.erb +0 -1
- data/app/views/hyrax/base/_form_in_works_error.html.erb +0 -3
- data/app/views/hyrax/base/_form_ordered_members_error.html.erb +0 -3
- data/app/views/hyrax/base/_form_visibility_error.html.erb +0 -19
- data/app/views/hyrax/users/_user_util_links_extra.html.erb +0 -0
- data/lib/hyrax/specs/shared_specs/valkyrie_storage_versions.rb +0 -9
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'dry/container'
|
4
|
+
|
3
5
|
module Hyrax
|
4
6
|
module Transactions
|
5
7
|
##
|
@@ -23,7 +25,9 @@ module Hyrax
|
|
23
25
|
require 'hyrax/transactions/collection_create'
|
24
26
|
require 'hyrax/transactions/collection_destroy'
|
25
27
|
require 'hyrax/transactions/collection_update'
|
28
|
+
require 'hyrax/transactions/file_metadata_destroy'
|
26
29
|
require 'hyrax/transactions/file_set_destroy'
|
30
|
+
require 'hyrax/transactions/file_set_update'
|
27
31
|
require 'hyrax/transactions/work_create'
|
28
32
|
require 'hyrax/transactions/work_destroy'
|
29
33
|
require 'hyrax/transactions/work_update'
|
@@ -31,13 +35,18 @@ module Hyrax
|
|
31
35
|
require 'hyrax/transactions/steps/add_to_collections'
|
32
36
|
require 'hyrax/transactions/steps/add_to_parent'
|
33
37
|
require 'hyrax/transactions/steps/apply_collection_type_permissions'
|
38
|
+
require 'hyrax/transactions/steps/apply_permission_template'
|
34
39
|
require 'hyrax/transactions/steps/change_depositor'
|
35
40
|
require 'hyrax/transactions/steps/check_for_empty_admin_set'
|
36
41
|
require 'hyrax/transactions/steps/delete_access_control'
|
42
|
+
require 'hyrax/transactions/steps/delete_all_file_metadata'
|
43
|
+
require 'hyrax/transactions/steps/delete_all_file_sets'
|
37
44
|
require 'hyrax/transactions/steps/delete_resource'
|
38
45
|
require 'hyrax/transactions/steps/ensure_admin_set'
|
46
|
+
require 'hyrax/transactions/steps/file_metadata_delete'
|
39
47
|
require 'hyrax/transactions/steps/set_collection_type_gid'
|
40
48
|
require 'hyrax/transactions/steps/remove_file_set_from_work'
|
49
|
+
require 'hyrax/transactions/steps/remove_from_membership'
|
41
50
|
require 'hyrax/transactions/steps/save'
|
42
51
|
require 'hyrax/transactions/steps/save_access_control'
|
43
52
|
require 'hyrax/transactions/steps/save_collection_banner'
|
@@ -111,6 +120,10 @@ module Hyrax
|
|
111
120
|
CollectionUpdate.new
|
112
121
|
end
|
113
122
|
|
123
|
+
ops.register 'update_file_set' do
|
124
|
+
FileSetUpdate.new
|
125
|
+
end
|
126
|
+
|
114
127
|
ops.register 'update_work' do
|
115
128
|
WorkUpdate.new
|
116
129
|
end
|
@@ -120,11 +133,25 @@ module Hyrax
|
|
120
133
|
end
|
121
134
|
end
|
122
135
|
|
136
|
+
namespace "file_metadata" do |ops| # Hyrax::FileMetadata
|
137
|
+
ops.register 'destroy' do
|
138
|
+
FileMetadataDestroy.new
|
139
|
+
end
|
140
|
+
|
141
|
+
ops.register 'delete' do
|
142
|
+
Steps::FileMetadataDelete.new
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
123
146
|
namespace 'file_set' do |ops| # Hyrax::FileSet resource
|
124
147
|
ops.register 'delete' do
|
125
148
|
Steps::DeleteResource.new
|
126
149
|
end
|
127
150
|
|
151
|
+
ops.register 'delete_all_file_metadata' do
|
152
|
+
Steps::DeleteAllFileMetadata.new
|
153
|
+
end
|
154
|
+
|
128
155
|
ops.register 'destroy' do
|
129
156
|
FileSetDestroy.new
|
130
157
|
end
|
@@ -132,6 +159,14 @@ module Hyrax
|
|
132
159
|
ops.register 'remove_from_work' do
|
133
160
|
Steps::RemoveFileSetFromWork.new
|
134
161
|
end
|
162
|
+
|
163
|
+
ops.register 'delete_acl' do
|
164
|
+
Steps::DeleteAccessControl.new
|
165
|
+
end
|
166
|
+
|
167
|
+
ops.register 'save_acl' do
|
168
|
+
Steps::SaveAccessControl.new
|
169
|
+
end
|
135
170
|
end
|
136
171
|
|
137
172
|
namespace 'admin_set_resource' do |ops| # Hyrax::AdministrativeSet resource
|
@@ -181,6 +216,10 @@ module Hyrax
|
|
181
216
|
Steps::DeleteAccessControl.new
|
182
217
|
end
|
183
218
|
|
219
|
+
ops.register 'remove_from_membership' do
|
220
|
+
Steps::RemoveFromMembership.new
|
221
|
+
end
|
222
|
+
|
184
223
|
ops.register 'save_acl' do
|
185
224
|
Steps::SaveAccessControl.new
|
186
225
|
end
|
@@ -203,6 +242,10 @@ module Hyrax
|
|
203
242
|
Steps::AddToParent.new
|
204
243
|
end
|
205
244
|
|
245
|
+
ops.register 'apply_permission_template' do
|
246
|
+
Steps::ApplyPermissionTemplate.new
|
247
|
+
end
|
248
|
+
|
206
249
|
ops.register 'change_depositor' do
|
207
250
|
Steps::ChangeDepositor.new
|
208
251
|
end
|
@@ -211,6 +254,10 @@ module Hyrax
|
|
211
254
|
Steps::DeleteResource.new
|
212
255
|
end
|
213
256
|
|
257
|
+
ops.register 'delete_all_file_sets' do
|
258
|
+
Steps::DeleteAllFileSets.new
|
259
|
+
end
|
260
|
+
|
214
261
|
ops.register 'destroy' do
|
215
262
|
WorkDestroy.new
|
216
263
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'hyrax/transactions/transaction'
|
3
|
+
|
4
|
+
module Hyrax
|
5
|
+
module Transactions
|
6
|
+
##
|
7
|
+
# destroys a FileSet resource.
|
8
|
+
#
|
9
|
+
# @since 3.1.0
|
10
|
+
class FileMetadataDestroy < Transaction
|
11
|
+
DEFAULT_STEPS = ['file_metadata.delete'].freeze
|
12
|
+
|
13
|
+
##
|
14
|
+
# @see Hyrax::Transactions::Transaction
|
15
|
+
def initialize(container: Container, steps: DEFAULT_STEPS)
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -8,7 +8,9 @@ module Hyrax
|
|
8
8
|
#
|
9
9
|
# @since 3.1.0
|
10
10
|
class FileSetDestroy < Transaction
|
11
|
-
DEFAULT_STEPS = ['file_set.
|
11
|
+
DEFAULT_STEPS = ['file_set.delete_all_file_metadata',
|
12
|
+
'file_set.remove_from_work',
|
13
|
+
'file_set.delete_acl',
|
12
14
|
'file_set.delete'].freeze
|
13
15
|
|
14
16
|
##
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'hyrax/transactions/transaction'
|
3
|
+
|
4
|
+
module Hyrax
|
5
|
+
module Transactions
|
6
|
+
##
|
7
|
+
# Updates a {Hyrax::FileSet} from a ChangeSet
|
8
|
+
#
|
9
|
+
# @since 3.4.0
|
10
|
+
class FileSetUpdate < Transaction
|
11
|
+
DEFAULT_STEPS = ['change_set.apply',
|
12
|
+
'file_set.save_acl'].freeze
|
13
|
+
|
14
|
+
##
|
15
|
+
# @see Hyrax::Transactions::Transaction
|
16
|
+
def initialize(container: Container, steps: DEFAULT_STEPS)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -25,6 +25,12 @@ module Hyrax
|
|
25
25
|
# @return [Dry::Monads::Result]
|
26
26
|
def call(obj, uploaded_files: [], file_set_params: [])
|
27
27
|
if @handler.new(work: obj).add(files: uploaded_files, file_set_params: file_set_params).attach
|
28
|
+
file_sets = obj.member_ids.map do |member|
|
29
|
+
Hyrax.query_service.find_by(id: member) if Hyrax.query_service.find_by(id: member).is_a? Hyrax::FileSet
|
30
|
+
end
|
31
|
+
|
32
|
+
Hyrax::LeaseManager.create_or_update_lease_on_members(file_sets, obj) if obj.lease
|
33
|
+
Hyrax::EmbargoManager.create_or_update_embargo_on_members(file_sets, obj) if obj.embargo
|
28
34
|
Success(obj)
|
29
35
|
else
|
30
36
|
Failure[:failed_to_attach_file_sets, uploaded_files]
|
@@ -20,7 +20,7 @@ module Hyrax
|
|
20
20
|
return Success(obj) if parent_id.blank?
|
21
21
|
|
22
22
|
parent = Hyrax.query_service.find_by(id: parent_id)
|
23
|
-
parent.member_ids
|
23
|
+
parent.member_ids += [obj.id]
|
24
24
|
Hyrax.persister.save(resource: parent)
|
25
25
|
|
26
26
|
user ||= ::User.find_by_user_key(obj.depositor)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Hyrax
|
3
|
+
module Transactions
|
4
|
+
module Steps
|
5
|
+
##
|
6
|
+
# A `dry-transcation` step that applies a permission template
|
7
|
+
# to a saved object.
|
8
|
+
#
|
9
|
+
# @note by design, this step should succeed even if for some reason a
|
10
|
+
# permission template could not be applied. it's better to complete the
|
11
|
+
# rest of the creation process with missing ACL grants than to crash and
|
12
|
+
# miss other crucial steps.
|
13
|
+
#
|
14
|
+
# @since 4.1.0
|
15
|
+
class ApplyPermissionTemplate
|
16
|
+
include Dry::Monads[:result]
|
17
|
+
|
18
|
+
##
|
19
|
+
# @param [Hyrax::Work] object
|
20
|
+
#
|
21
|
+
# @return [Dry::Monads::Result]
|
22
|
+
def call(object)
|
23
|
+
template = Hyrax::PermissionTemplate.find_by(source_id: object&.admin_set_id)
|
24
|
+
|
25
|
+
if template.blank?
|
26
|
+
Hyrax.logger.info("At create time, #{object} doesn't have a " \
|
27
|
+
"PermissionTemplate, which it should have via " \
|
28
|
+
"AdministrativeSet #{object&.admin_set_id}). " \
|
29
|
+
"Continuing to create this object anyway.")
|
30
|
+
|
31
|
+
return Success(object)
|
32
|
+
end
|
33
|
+
|
34
|
+
Hyrax::PermissionTemplateApplicator.apply(template).to(model: object) &&
|
35
|
+
Success(object)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'dry/monads'
|
3
|
+
|
4
|
+
module Hyrax
|
5
|
+
module Transactions
|
6
|
+
module Steps
|
7
|
+
##
|
8
|
+
# Deletes a resource from the persister, returning a `Dry::Monads::Result`
|
9
|
+
# (`Success`|`Failure`).
|
10
|
+
#
|
11
|
+
# @see https://dry-rb.org/gems/dry-monads/1.0/result/
|
12
|
+
class DeleteAllFileMetadata
|
13
|
+
include Dry::Monads[:result]
|
14
|
+
|
15
|
+
##
|
16
|
+
# @params [#save] persister
|
17
|
+
def initialize(property: :file_ids, query_service: Hyrax.query_service, persister: Hyrax.persister, publisher: Hyrax.publisher)
|
18
|
+
@property = property
|
19
|
+
@persister = persister
|
20
|
+
@query_service = query_service
|
21
|
+
@publisher = publisher
|
22
|
+
end
|
23
|
+
|
24
|
+
##
|
25
|
+
# @param [Valkyrie::Resource] resource
|
26
|
+
# @param [::User] the user resposible for the delete action
|
27
|
+
#
|
28
|
+
# @return [Dry::Monads::Result]
|
29
|
+
def call(resource)
|
30
|
+
return Failure(:resource_not_persisted) unless resource.persisted?
|
31
|
+
|
32
|
+
resource[@property].each do |file_id|
|
33
|
+
return Failure[:failed_to_delete_file_metadata, file_id] unless
|
34
|
+
Hyrax::Transactions::Container['file_metadata.destroy']
|
35
|
+
.call(@query_service.custom_queries.find_file_metadata_by(id: file_id))
|
36
|
+
.success?
|
37
|
+
rescue ::Ldp::Gone
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
Success(resource)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'dry/monads'
|
3
|
+
|
4
|
+
module Hyrax
|
5
|
+
module Transactions
|
6
|
+
module Steps
|
7
|
+
##
|
8
|
+
# Deletes a resource's member FileSets from the persister, returning a `Dry::Monads::Result`
|
9
|
+
# (`Success`|`Failure`).
|
10
|
+
#
|
11
|
+
# @see https://dry-rb.org/gems/dry-monads/1.0/result/
|
12
|
+
class DeleteAllFileSets
|
13
|
+
include Dry::Monads[:result]
|
14
|
+
|
15
|
+
##
|
16
|
+
# @params [#save] persister
|
17
|
+
def initialize(query_service: Hyrax.query_service, persister: Hyrax.persister, publisher: Hyrax.publisher)
|
18
|
+
@persister = persister
|
19
|
+
@query_service = query_service
|
20
|
+
@publisher = publisher
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# @param [Valkyrie::Resource] resource
|
25
|
+
# @param [::User] the user resposible for the delete action
|
26
|
+
#
|
27
|
+
# @return [Dry::Monads::Result]
|
28
|
+
def call(resource, user: nil)
|
29
|
+
return Failure(:resource_not_persisted) unless resource.persisted?
|
30
|
+
|
31
|
+
@query_service.custom_queries.find_child_file_sets(resource: resource).each do |file_set|
|
32
|
+
return Failure[:failed_to_delete_file_set, file_set] unless
|
33
|
+
Hyrax::Transactions::Container['file_set.destroy']
|
34
|
+
.with_step_args('file_set.remove_from_work' => { user: user },
|
35
|
+
'file_set.delete' => { user: user })
|
36
|
+
.call(file_set).success?
|
37
|
+
rescue ::Ldp::Gone
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
Success(resource)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'dry/monads'
|
3
|
+
|
4
|
+
module Hyrax
|
5
|
+
module Transactions
|
6
|
+
module Steps
|
7
|
+
##
|
8
|
+
# Deletes a resource from the persister, returning a `Dry::Monads::Result`
|
9
|
+
# (`Success`|`Failure`).
|
10
|
+
#
|
11
|
+
# @see https://dry-rb.org/gems/dry-monads/1.0/result/
|
12
|
+
class FileMetadataDelete
|
13
|
+
include Dry::Monads[:result]
|
14
|
+
|
15
|
+
##
|
16
|
+
# @params [#save] persister
|
17
|
+
def initialize(persister: Hyrax.persister, storage_adapter: Hyrax.storage_adapter, publisher: Hyrax.publisher)
|
18
|
+
@persister = persister
|
19
|
+
@publisher = publisher
|
20
|
+
@storage_adapter = storage_adapter
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# @param [Hyrax::FileMetadata] FileMetadata resource
|
25
|
+
# @param [::User] the user resposible for the delete action
|
26
|
+
#
|
27
|
+
# @return [Dry::Monads::Result]
|
28
|
+
def call(resource)
|
29
|
+
return Failure(:resource_not_persisted) unless resource.persisted?
|
30
|
+
|
31
|
+
@persister.delete(resource: resource)
|
32
|
+
@publisher.publish('file.metadata.deleted', metadata: resource)
|
33
|
+
Valkyrie::StorageAdapter.delete(id: resource.file_identifier) if resource.file_identifier.present?
|
34
|
+
|
35
|
+
Success(resource)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'dry/monads'
|
3
|
+
|
4
|
+
module Hyrax
|
5
|
+
module Transactions
|
6
|
+
module Steps
|
7
|
+
##
|
8
|
+
# Removes a collection from its members, returning a `Dry::Monads::Result`
|
9
|
+
# (`Success`|`Failure`).
|
10
|
+
#
|
11
|
+
# @see https://dry-rb.org/gems/dry-monads/1.0/result/
|
12
|
+
class RemoveFromMembership
|
13
|
+
include Dry::Monads[:result]
|
14
|
+
|
15
|
+
##
|
16
|
+
# @params [#save] persister
|
17
|
+
def initialize(query_service: Hyrax.custom_queries, persister: Hyrax.persister, publisher: Hyrax.publisher)
|
18
|
+
@persister = persister
|
19
|
+
@query_service = query_service
|
20
|
+
@publisher = publisher
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# @param [Valkyrie::Resource] resource
|
25
|
+
# @param [::User] the user resposible for the delete action
|
26
|
+
#
|
27
|
+
# @return [Dry::Monads::Result]
|
28
|
+
def call(collection, user: nil)
|
29
|
+
return Failure(:resource_not_persisted) unless collection.persisted?
|
30
|
+
return Failure(:user_not_present) if user.blank?
|
31
|
+
|
32
|
+
@query_service.find_members_of(collection: collection).each do |member|
|
33
|
+
member.member_of_collection_ids -= [collection.id]
|
34
|
+
@persister.save(resource: member)
|
35
|
+
@publisher.publish('collection.membership.updated', collection: collection, user: user)
|
36
|
+
rescue StandardError
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
Success(collection)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -29,10 +29,15 @@ module Hyrax
|
|
29
29
|
# @return [Dry::Monads::Result] `Success(work)` if the change_set is
|
30
30
|
# applied and the resource is saved;
|
31
31
|
# `Failure([#to_s, change_set.resource])`, otherwise.
|
32
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
32
33
|
def call(change_set, user: nil)
|
33
34
|
begin
|
35
|
+
valid_future_date?(change_set.lease, 'lease_expiration_date') if change_set.respond_to?(:lease) && change_set.lease
|
36
|
+
valid_future_date?(change_set.embargo, 'embargo_release_date') if change_set.respond_to?(:embargo) && change_set.embargo
|
34
37
|
new_collections = changed_collection_membership(change_set)
|
38
|
+
|
35
39
|
unsaved = change_set.sync
|
40
|
+
save_lease_or_embargo(unsaved)
|
36
41
|
saved = @persister.save(resource: unsaved)
|
37
42
|
rescue StandardError => err
|
38
43
|
return Failure(["Failed save on #{change_set}\n\t#{err.message}", change_set.resource])
|
@@ -48,9 +53,25 @@ module Hyrax
|
|
48
53
|
publish_changes(resource: saved, user: user, new: unsaved.new_record, new_collections: new_collections)
|
49
54
|
Success(saved)
|
50
55
|
end
|
56
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
51
57
|
|
52
58
|
private
|
53
59
|
|
60
|
+
def valid_future_date?(item, attribute)
|
61
|
+
raise StandardError, "#{item.model} must use a future date" if item.fields[attribute] < Time.zone.now
|
62
|
+
end
|
63
|
+
|
64
|
+
def save_lease_or_embargo(unsaved)
|
65
|
+
if unsaved.embargo.present?
|
66
|
+
unsaved.embargo.embargo_release_date = unsaved.embargo.embargo_release_date&.to_datetime
|
67
|
+
unsaved.embargo = @persister.save(resource: unsaved.embargo)
|
68
|
+
end
|
69
|
+
return if unsaved.lease.blank?
|
70
|
+
|
71
|
+
unsaved.lease.lease_expiration_date = unsaved.lease.lease_expiration_date&.to_datetime
|
72
|
+
unsaved.lease = @persister.save(resource: unsaved.lease)
|
73
|
+
end
|
74
|
+
|
54
75
|
##
|
55
76
|
# @param [Hyrax::ChangeSet] change_set
|
56
77
|
#
|
@@ -8,8 +8,9 @@ module Hyrax
|
|
8
8
|
#
|
9
9
|
# @since 3.0.0
|
10
10
|
class WorkDestroy < Transaction
|
11
|
-
DEFAULT_STEPS = ['work_resource.
|
12
|
-
'work_resource.delete_acl'
|
11
|
+
DEFAULT_STEPS = ['work_resource.delete_all_file_sets',
|
12
|
+
'work_resource.delete_acl',
|
13
|
+
'work_resource.delete'].freeze
|
13
14
|
|
14
15
|
##
|
15
16
|
# @see Hyrax::Transactions::Transaction
|
data/lib/hyrax/version.rb
CHANGED
data/lib/hyrax.rb
CHANGED
@@ -20,6 +20,7 @@ require 'hyrax/version'
|
|
20
20
|
require 'hyrax/inflections'
|
21
21
|
require 'hyrax/name'
|
22
22
|
require 'hyrax/valkyrie_can_can_adapter'
|
23
|
+
require 'retriable'
|
23
24
|
require 'valkyrie/indexing_adapter'
|
24
25
|
require 'valkyrie/indexing/solr/indexing_adapter'
|
25
26
|
require 'valkyrie/indexing/null_indexing_adapter'
|
@@ -7,13 +7,18 @@ namespace :hyrax do
|
|
7
7
|
|
8
8
|
count = 0
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
Hyrax.query_service.find_all_of_model(model: Hyrax::PcdmCollection).each do |collection|
|
11
|
+
type = Hyrax::CollectionType.find_by_gid(collection.collection_type_gid)
|
12
|
+
next if collection.collection_type_gid == type.to_global_id.to_s
|
12
13
|
|
13
|
-
|
14
|
+
# Awful hack to allow converted AF collections to force update collection_type_gid
|
15
|
+
Thread.current[:force_collection_type_gid] = true
|
16
|
+
collection.collection_type_gid = type.to_global_id
|
14
17
|
|
15
|
-
|
18
|
+
Hyrax.persister.save(resource: collection) &&
|
16
19
|
count += 1
|
20
|
+
ensure
|
21
|
+
Thread.current[:force_collection_type_gid] = false
|
17
22
|
end
|
18
23
|
|
19
24
|
puts "Updated #{count} collections."
|
@@ -8,6 +8,7 @@ namespace :hyrax do
|
|
8
8
|
|
9
9
|
Hyrax.query_service.find_many_by_ids(ids: ids).each do |resource|
|
10
10
|
Hyrax::EmbargoManager.release_embargo_for(resource: resource) &&
|
11
|
+
Hyrax.persister.save(resource: resource.embargo) &&
|
11
12
|
Hyrax::AccessControlList(resource).save
|
12
13
|
end
|
13
14
|
end
|
@@ -81,6 +81,8 @@ module Valkyrie
|
|
81
81
|
# if any configuration is missing, derive it from Blacklight
|
82
82
|
config = blacklight_based_config.with_indifferent_access.merge(config)
|
83
83
|
|
84
|
+
return config['url'] if config['url'].present?
|
85
|
+
|
84
86
|
"http://#{config['host']}:#{config['port']}/solr/#{config['core']}"
|
85
87
|
end
|
86
88
|
|
@@ -27,7 +27,7 @@ module Wings
|
|
27
27
|
#
|
28
28
|
# @return [void] apply the property
|
29
29
|
def apply(klass)
|
30
|
-
return if klass.properties.keys.include?(name) ||
|
30
|
+
return if klass.properties.keys.include?(name.to_s) ||
|
31
31
|
klass.protected_property_name?(name)
|
32
32
|
klass.send(definition_method, name, options)
|
33
33
|
end
|
@@ -98,6 +98,7 @@ module Wings
|
|
98
98
|
include Hyrax::Noid
|
99
99
|
include Hyrax::Permissions
|
100
100
|
include Hydra::AccessControls::Embargoable
|
101
|
+
include Hyrax::CoreMetadata
|
101
102
|
property :nested_resource, predicate: ::RDF::URI("http://example.com/nested_resource"), class_name: "Wings::ActiveFedoraConverter::NestedResource"
|
102
103
|
|
103
104
|
validates :lease_expiration_date, 'hydra/future_date': true, on: :create
|
@@ -118,7 +119,7 @@ module Wings
|
|
118
119
|
end
|
119
120
|
|
120
121
|
def to_rdf_representation
|
121
|
-
"Wings(#{valkyrie_class})"
|
122
|
+
"Wings(#{valkyrie_class})" unless valkyrie_class&.to_s&.include?('Wings(')
|
122
123
|
end
|
123
124
|
alias inspect to_rdf_representation
|
124
125
|
alias to_s inspect
|
@@ -136,6 +137,10 @@ module Wings
|
|
136
137
|
false
|
137
138
|
end
|
138
139
|
|
140
|
+
def file_sets
|
141
|
+
members.select(&:file_set?)
|
142
|
+
end
|
143
|
+
|
139
144
|
def indexing_service
|
140
145
|
Hyrax::ValkyrieIndexer.for(resource: valkyrie_resource)
|
141
146
|
end
|