Skip to content

Commit

Permalink
Adds SampleData for testing fix scripts on demo
Browse files Browse the repository at this point in the history
  • Loading branch information
afred committed Nov 5, 2024
1 parent 752e40f commit 5574158
Showing 1 changed file with 87 additions and 0 deletions.
87 changes: 87 additions & 0 deletions lib/fix/sample_data.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# first shell into a running container with bash, then run pry.
# load the app
require_relative '../../config/environment'

# Set some variables
class SampleData
attr_reader :asset_sample_size, :log

def initialize(asset_sample_size: 100)
@asset_sample_size = asset_sample_size
@log = Logger.new(STDOUT)
end

def solr
@solr ||= Blacklight.default_index.connection
end

def a_docs
@a_docs ||= solr.get('select', params: {q: 'has_model_ssim:Asset', rows: asset_sample_size, start: rand_start})['response']['docs']
end

def rand_start
@rand_start ||= rand(0..(total_assets - asset_sample_size - 1))
end

def total_assets
solr.get('select', params: {q: 'has_model_ssim:Asset', rows: 0})['response']['numFound']
end

def ars(refresh: false)
# Rest instance variables if refresh is true
@ars = @ars_with_pids = @ars_with_pis_in_fedora = nil if refresh
@ars ||= a_docs.map{|doc| AssetResource.find(doc['id'])}
end

def ars_with_pis(media_type: nil)
@ars_with_pis ||= ars.select{ |ar| ar.physical_instantiation_resources.present? }
if media_type
filter(ars: @ars_with_pis, media_type: media_type)
else
@ars_with_pis
end
end

def ars_with_pis_in_fedora(media_type: nil)
@ars_with_pis_in_fedora ||= ars_with_pis.select do |ar|
ar.physical_instantiation_resources.any? do |pi|
begin
pi = PhysicalInstantiation.find(pi.id)
rescue ActiveFedora::ObjectNotFoundError, Ldp::Gone => e
log.error("Error: #{e.message}")
false
end
end
end

if media_type
filter(ars: @ars_with_pis_in_fedora, media_type: media_type)
else
@ars_with_pis_in_fedora
end
end

def save_assets_to_pg
ars.each do |ar|
Hyrax.persister.save(resource: ar)
end
ars(refresh: true)
end

# Class method for filtering a set of AssetResources
def self.filter(ars: [], media_type: nil)
filtered = ars
if media_type
filtered = filtered.select do |ar|
ar.physical_instantiation_resources.any? do |pi|
pi.media_type.to_s.strip.downcase == media_type.to_s.strip.downcase
end
end
end
filtered
end

# Delegated instance method
def filter(*args, **kwargs); self.class.filter(*args, **kwargs); end

end

0 comments on commit 5574158

Please sign in to comment.