lib/tasks/bulkrax_tasks.rake in bulkrax-5.3.1 vs lib/tasks/bulkrax_tasks.rake in bulkrax-5.4.0

- old
+ new

@@ -1,7 +1,109 @@ # frozen_string_literal: true namespace :bulkrax do + # Usage example: rails bulkrax:generate_test_csvs['5','100','GenericWork'] + desc 'Generate CSVs with fake data for testing purposes' + task :generate_test_csvs, [:num_of_csvs, :csv_rows, :record_type] => :environment do |_t, args| + # NOTE: If this line throws an error, run `gem install faker` inside your Docker container + require 'faker' + require 'csv' + + FileUtils.mkdir_p(Rails.root.join('tmp', 'imports')) + + IGNORED_PROPERTIES = %w[ + admin_set_id + alternate_ids + arkivo_checksum + created_at + date_modified + date_uploaded + depositor + embargo + has_model + head + internal_resource + label + lease + member_ids + member_of_collection_ids + modified_date + new_record + on_behalf_of + owner + proxy_depositor + rendering_ids + representative_id + state + tail + thumbnail_id + updated_at + ].freeze + + BULKRAX_PROPERTIES = %w[ + source_identifier + model + ].freeze + + num_of_csvs = args.num_of_csvs.presence&.to_i || 5 + csv_rows = args.csv_rows.presence&.to_i || 100 + record_type = args.record_type.presence&.constantize || GenericWork + + csv_header = if Hyrax.config.try(:use_valkyrie?) + record_type.schema.map { |k| k.name.to_s } + else + record_type.properties.keys + end + + csv_header -= IGNORED_PROPERTIES + csv_header.unshift(*BULKRAX_PROPERTIES) + + num_of_csvs.times do |i| + CSV.open(Rails.root.join('tmp', 'imports', "importer_#{i}.csv"), 'wb') do |csv| + csv << csv_header + csv_rows.times do |_index| + row = [] + csv_header.each do |prop_name| + row << case prop_name + when 'id', 'source_identifier' + Faker::Number.number(digits: 4) + when 'model' + record_type.to_s + when 'rights_statement' + 'http://rightsstatements.org/vocab/CNE/1.0/' + when 'license' + 'https://creativecommons.org/licenses/by-nc/4.0/' + when 'based_near' + # FIXME: Set a proper :based_near value + nil + else + Faker::Lorem.sentence + end + end + csv << row + end + end + end + + num_of_csvs.times do |i| + Bulkrax::Importer.create( + name: "Generated CSV #{i}", + admin_set_id: 'admin_set/default', + user_id: User.find_by(email: 'admin@example.com').id, + frequency: 'PT0S', + parser_klass: 'Bulkrax::CsvParser', + parser_fields: { + 'visibility' => 'open', + 'rights_statement' => '', + 'override_rights_statement' => '0', + 'file_style' => 'Specify a Path on the Server', + 'import_file_path' => "tmp/imports/importer_#{i}.csv", + 'update_files' => false + } + ) + end + end + desc "Remove old exported zips and create new ones with the new file structure" task rerun_all_exporters: :environment do # delete the existing folders and zip files Dir["tmp/exports/**"].each { |file| FileUtils.rm_rf(file) }