-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into mark_during_bulk
- Loading branch information
Showing
8 changed files
with
149 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Based on https://github.com/samvera/hyrax/issues/4581#issuecomment-843085122 | ||
|
||
# Monkey-patch to short circuit ActiveModel::Dirty which attempts to load the whole master files ordered list when calling nodes_will_change! | ||
# This leads to a stack level too deep exception when attempting to delete a master file from a media object on the manage files step. | ||
# See https://github.com/samvera/active_fedora/pull/1312/commits/7c8bbbefdacefd655a2ca653f5950c991e1dc999#diff-28356c4daa0d55cbaf97e4269869f510R100-R103 | ||
ActiveFedora::Aggregation::ListSource.class_eval do | ||
def attribute_will_change!(attr) | ||
return super unless attr == 'nodes' | ||
attributes_changed_by_setter[:nodes] = true | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# frozen_string_literal: true | ||
|
||
# OVERRIDE: class ActiveFedora::SolrService from Fedora 12.1.1 | ||
module ActiveFedora | ||
module SolrServiceDecorator | ||
# Get the count of records that match the query | ||
# @param [String] query a solr query | ||
# @param [Hash] args arguments to pass through to `args' param of SolrService.query | ||
# (note that :rows will be overwritten to 0) | ||
# @return [Integer] number of records matching | ||
# | ||
# OVERRIDE: use `post` rather than `get` to handle larger query sizes | ||
def count(query, args = {}) | ||
args = args.merge(rows: 0) | ||
SolrService.post(query, args)['response']['numFound'].to_i | ||
end | ||
end | ||
end | ||
|
||
ActiveFedora::SolrService.singleton_class.send(:prepend, ActiveFedora::SolrServiceDecorator) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# frozen_string_literal: true | ||
|
||
namespace :db do | ||
desc 'Also create shared_extensions Schema' | ||
task extensions: :environment do | ||
# Create Schema | ||
ActiveRecord::Base.connection.execute 'CREATE SCHEMA IF NOT EXISTS shared_extensions;' | ||
# Enable Hstore | ||
ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS HSTORE SCHEMA shared_extensions;' | ||
# Enable UUID-OSSP | ||
ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA shared_extensions;' | ||
ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS "pgcrypto" SCHEMA shared_extensions;' | ||
# Grant usage to public | ||
ActiveRecord::Base.connection.execute 'GRANT usage ON SCHEMA shared_extensions to public;' | ||
end | ||
end | ||
|
||
Rake::Task["db:create"].enhance do | ||
Rake::Task["db:extensions"].invoke | ||
end | ||
|
||
Rake::Task["db:test:purge"].enhance do | ||
Rake::Task["db:extensions"].invoke | ||
end |
42 changes: 42 additions & 0 deletions
42
lib/wings/services/custom_queries/find_ids_by_model_decorator.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# frozen_string_literal: true | ||
|
||
# OVERRIDE Hyrax 3.5 to use post instead of get for Solr requests | ||
|
||
module Wings | ||
module CustomQueries | ||
## | ||
# @see https://github.com/samvera/valkyrie/wiki/Queries#custom-queries | ||
# @see Hyrax::CustomQueries::FindIdsByModel | ||
module FindIdsByModelDecorator | ||
## | ||
# @note uses solr to do the lookup | ||
# | ||
# @param model [Class] | ||
# @param ids [Enumerable<#to_s>, Symbol] | ||
# | ||
# @return [Enumerable<Valkyrie::ID>] | ||
def find_ids_by_model(model:, ids: :all) | ||
return enum_for(:find_ids_by_model, model: model, ids: ids) unless block_given? | ||
model_name = ModelRegistry.lookup(model).model_name | ||
|
||
solr_query = "_query_:\"{!raw f=has_model_ssim}#{model_name}\"" | ||
solr_response = ActiveFedora::SolrService.post(solr_query, fl: 'id', rows: @query_rows)['response'] | ||
|
||
loop do | ||
response_docs = solr_response['docs'] | ||
response_docs.select! { |doc| ids.include?(doc['id']) } unless ids == :all | ||
|
||
response_docs.each { |doc| yield doc['id'] } | ||
|
||
break if (solr_response['start'] + solr_response['docs'].count) >= solr_response['numFound'] | ||
solr_response = ActiveFedora::SolrService.post(solr_query, | ||
fl: 'id', | ||
rows: @query_rows, | ||
start: solr_response['start'] + @query_rows)['response'] | ||
end | ||
end | ||
end | ||
end | ||
end | ||
|
||
Wings::CustomQueries::FindIdsByModel.prepend Wings::CustomQueries::FindIdsByModelDecorator |