bulkrax 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +205 -0
  3. data/README.md +202 -0
  4. data/Rakefile +42 -0
  5. data/app/assets/config/bulkrax_manifest.js +2 -0
  6. data/app/assets/javascripts/bulkrax/application.js +14 -0
  7. data/app/assets/javascripts/bulkrax/bulkrax.js +11 -0
  8. data/app/assets/javascripts/bulkrax/entries.js +15 -0
  9. data/app/assets/javascripts/bulkrax/exporters.js +60 -0
  10. data/app/assets/javascripts/bulkrax/importers.js.erb +166 -0
  11. data/app/assets/stylesheets/bulkrax/accordion.scss +40 -0
  12. data/app/assets/stylesheets/bulkrax/application.css +15 -0
  13. data/app/assets/stylesheets/bulkrax/coderay.scss +264 -0
  14. data/app/assets/stylesheets/bulkrax/import_export.scss +37 -0
  15. data/app/controllers/bulkrax/application_controller.rb +8 -0
  16. data/app/controllers/bulkrax/entries_controller.rb +44 -0
  17. data/app/controllers/bulkrax/exporters_controller.rb +125 -0
  18. data/app/controllers/bulkrax/importers_controller.rb +315 -0
  19. data/app/controllers/concerns/bulkrax/api.rb +29 -0
  20. data/app/factories/bulkrax/object_factory.rb +230 -0
  21. data/app/helpers/bulkrax/application_helper.rb +15 -0
  22. data/app/helpers/bulkrax/exporters_helper.rb +6 -0
  23. data/app/helpers/bulkrax/importers_helper.rb +13 -0
  24. data/app/helpers/bulkrax/validation_helper.rb +153 -0
  25. data/app/jobs/bulkrax/application_job.rb +6 -0
  26. data/app/jobs/bulkrax/child_relationships_job.rb +128 -0
  27. data/app/jobs/bulkrax/delete_work_job.rb +16 -0
  28. data/app/jobs/bulkrax/download_cloud_file_job.rb +18 -0
  29. data/app/jobs/bulkrax/export_work_job.rb +37 -0
  30. data/app/jobs/bulkrax/exporter_job.rb +14 -0
  31. data/app/jobs/bulkrax/import_work_collection_job.rb +41 -0
  32. data/app/jobs/bulkrax/import_work_job.rb +32 -0
  33. data/app/jobs/bulkrax/importer_job.rb +26 -0
  34. data/app/mailers/bulkrax/application_mailer.rb +8 -0
  35. data/app/matchers/bulkrax/application_matcher.rb +113 -0
  36. data/app/matchers/bulkrax/bagit_matcher.rb +6 -0
  37. data/app/matchers/bulkrax/csv_matcher.rb +6 -0
  38. data/app/matchers/bulkrax/oai_matcher.rb +6 -0
  39. data/app/models/bulkrax/application_record.rb +7 -0
  40. data/app/models/bulkrax/csv_collection_entry.rb +19 -0
  41. data/app/models/bulkrax/csv_entry.rb +163 -0
  42. data/app/models/bulkrax/entry.rb +104 -0
  43. data/app/models/bulkrax/exporter.rb +122 -0
  44. data/app/models/bulkrax/exporter_run.rb +7 -0
  45. data/app/models/bulkrax/import_failed.rb +13 -0
  46. data/app/models/bulkrax/importer.rb +155 -0
  47. data/app/models/bulkrax/importer_run.rb +8 -0
  48. data/app/models/bulkrax/oai_dc_entry.rb +6 -0
  49. data/app/models/bulkrax/oai_entry.rb +74 -0
  50. data/app/models/bulkrax/oai_qualified_dc_entry.rb +6 -0
  51. data/app/models/bulkrax/oai_set_entry.rb +19 -0
  52. data/app/models/bulkrax/rdf_collection_entry.rb +19 -0
  53. data/app/models/bulkrax/rdf_entry.rb +90 -0
  54. data/app/models/bulkrax/status.rb +25 -0
  55. data/app/models/bulkrax/xml_entry.rb +73 -0
  56. data/app/models/concerns/bulkrax/download_behavior.rb +61 -0
  57. data/app/models/concerns/bulkrax/errored_entries.rb +45 -0
  58. data/app/models/concerns/bulkrax/export_behavior.rb +58 -0
  59. data/app/models/concerns/bulkrax/file_factory.rb +140 -0
  60. data/app/models/concerns/bulkrax/has_local_processing.rb +7 -0
  61. data/app/models/concerns/bulkrax/has_matchers.rb +155 -0
  62. data/app/models/concerns/bulkrax/import_behavior.rb +90 -0
  63. data/app/models/concerns/bulkrax/importer_exporter_behavior.rb +34 -0
  64. data/app/models/concerns/bulkrax/status_info.rb +56 -0
  65. data/app/parsers/bulkrax/application_parser.rb +299 -0
  66. data/app/parsers/bulkrax/bagit_parser.rb +157 -0
  67. data/app/parsers/bulkrax/csv_parser.rb +266 -0
  68. data/app/parsers/bulkrax/oai_dc_parser.rb +130 -0
  69. data/app/parsers/bulkrax/oai_qualified_dc_parser.rb +9 -0
  70. data/app/parsers/bulkrax/xml_parser.rb +103 -0
  71. data/app/views/bulkrax/entries/_parsed_metadata.html.erb +19 -0
  72. data/app/views/bulkrax/entries/_raw_metadata.html.erb +19 -0
  73. data/app/views/bulkrax/entries/show.html.erb +63 -0
  74. data/app/views/bulkrax/exporters/_form.html.erb +120 -0
  75. data/app/views/bulkrax/exporters/edit.html.erb +23 -0
  76. data/app/views/bulkrax/exporters/index.html.erb +67 -0
  77. data/app/views/bulkrax/exporters/new.html.erb +23 -0
  78. data/app/views/bulkrax/exporters/show.html.erb +124 -0
  79. data/app/views/bulkrax/importers/_bagit_fields.html.erb +54 -0
  80. data/app/views/bulkrax/importers/_browse_everything.html.erb +12 -0
  81. data/app/views/bulkrax/importers/_csv_fields.html.erb +39 -0
  82. data/app/views/bulkrax/importers/_edit_form_buttons.html.erb +16 -0
  83. data/app/views/bulkrax/importers/_form.html.erb +35 -0
  84. data/app/views/bulkrax/importers/_oai_fields.html.erb +42 -0
  85. data/app/views/bulkrax/importers/_xml_fields.html.erb +60 -0
  86. data/app/views/bulkrax/importers/edit.html.erb +20 -0
  87. data/app/views/bulkrax/importers/index.html.erb +77 -0
  88. data/app/views/bulkrax/importers/new.html.erb +25 -0
  89. data/app/views/bulkrax/importers/show.html.erb +175 -0
  90. data/app/views/bulkrax/importers/upload_corrected_entries.html.erb +37 -0
  91. data/app/views/bulkrax/shared/_bulkrax_errors.html.erb +52 -0
  92. data/app/views/bulkrax/shared/_bulkrax_field_mapping.html.erb +39 -0
  93. data/app/views/hyrax/dashboard/sidebar/_bulkrax_sidebar_additions.html.erb +6 -0
  94. data/app/views/hyrax/dashboard/sidebar/_repository_content.html.erb +19 -0
  95. data/app/views/layouts/bulkrax/application.html.erb +14 -0
  96. data/config/locales/bulkrax.en.yml +36 -0
  97. data/config/routes.rb +18 -0
  98. data/db/migrate/20181011230201_create_bulkrax_importers.rb +18 -0
  99. data/db/migrate/20181011230228_create_bulkrax_importer_runs.rb +16 -0
  100. data/db/migrate/20190325183136_create_bulkrax_entries.rb +16 -0
  101. data/db/migrate/20190601221109_add_status_to_entry.rb +9 -0
  102. data/db/migrate/20190715161939_add_collections_to_importer_runs.rb +6 -0
  103. data/db/migrate/20190715162044_change_collection_ids_on_entries.rb +5 -0
  104. data/db/migrate/20190729124607_create_bulkrax_exporters.rb +19 -0
  105. data/db/migrate/20190729134158_create_bulkrax_exporter_runs.rb +14 -0
  106. data/db/migrate/20190731114016_change_importer_and_exporter_to_polymorphic.rb +12 -0
  107. data/db/migrate/20191203225129_add_total_collection_records_to_importer_runs.rb +5 -0
  108. data/db/migrate/20191204191623_add_children_to_importer_runs.rb +6 -0
  109. data/db/migrate/20191204223857_change_total_records_to_total_work_entries.rb +6 -0
  110. data/db/migrate/20191212155530_change_entry_last_error.rb +19 -0
  111. data/db/migrate/20200108194557_add_validate_only_to_bulkrax_importers.rb +5 -0
  112. data/db/migrate/20200301232856_add_status_to_importers.rb +9 -0
  113. data/db/migrate/20200312190638_remove_foreign_key_from_bulkrax_entries.rb +5 -0
  114. data/db/migrate/20200326235838_add_status_to_exporters.rb +7 -0
  115. data/db/migrate/20200601204556_add_invalid_record_to_importer_run.rb +5 -0
  116. data/db/migrate/20200818055819_create_bulkrax_statuses.rb +18 -0
  117. data/db/migrate/20200819054016_move_to_statuses.rb +30 -0
  118. data/db/migrate/20201106014204_add_date_filter_and_status_to_bulkrax_exporters.rb +7 -0
  119. data/db/migrate/20201117220007_add_workflow_status_to_bulkrax_exporter.rb +5 -0
  120. data/db/migrate/20210806044408_remove_unused_last_error.rb +7 -0
  121. data/db/migrate/20210806065737_increase_text_sizes.rb +12 -0
  122. data/lib/bulkrax.rb +161 -0
  123. data/lib/bulkrax/engine.rb +37 -0
  124. data/lib/bulkrax/version.rb +5 -0
  125. data/lib/generators/bulkrax/install_generator.rb +80 -0
  126. data/lib/generators/bulkrax/templates/README +3 -0
  127. data/lib/generators/bulkrax/templates/app/assets/images/bulkrax/removed.png +0 -0
  128. data/lib/generators/bulkrax/templates/app/models/concerns/bulkrax/has_local_processing.rb +8 -0
  129. data/lib/generators/bulkrax/templates/bin/importer +140 -0
  130. data/lib/generators/bulkrax/templates/config/bulkrax_api.yml +84 -0
  131. data/lib/generators/bulkrax/templates/config/initializers/bulkrax.rb +72 -0
  132. data/lib/tasks/bulkrax_tasks.rake +6 -0
  133. metadata +388 -0
@@ -0,0 +1,16 @@
1
+ class CreateBulkraxImporterRuns < ActiveRecord::Migration[5.1]
2
+ def change
3
+ unless table_exists?(:bulkrax_importer_runs)
4
+ create_table :bulkrax_importer_runs do |t|
5
+ t.references :importer, foreign_key: {to_table: :bulkrax_importers}
6
+ t.integer :total_records, default: 0
7
+ t.integer :enqueued_records, default: 0
8
+ t.integer :processed_records, default: 0
9
+ t.integer :deleted_records, default: 0
10
+ t.integer :failed_records, default: 0
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ class CreateBulkraxEntries < ActiveRecord::Migration[5.1]
2
+ def change
3
+ unless table_exists?(:bulkrax_entries)
4
+ create_table :bulkrax_entries do |t|
5
+ t.string :identifier
6
+ t.string :collection_id
7
+ t.string :type
8
+ t.references :importer, foreign_key: {to_table: :bulkrax_importers}
9
+ t.text :raw_metadata
10
+ t.text :parsed_metadata
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ class AddStatusToEntry < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_entries, :last_error, :text unless column_exists?(:bulkrax_entries, :last_error)
4
+ add_column :bulkrax_entries, :last_error_at, :datetime unless column_exists?(:bulkrax_entries, :last_error_at)
5
+
6
+ add_column :bulkrax_entries, :last_succeeded_at, :datetime unless column_exists?(:bulkrax_entries, :last_succeeded_at)
7
+
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class AddCollectionsToImporterRuns < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_importer_runs, :processed_collections, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :processed_collections)
4
+ add_column :bulkrax_importer_runs, :failed_collections, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :failed_collections)
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class ChangeCollectionIdsOnEntries < ActiveRecord::Migration[5.1]
2
+ def change
3
+ rename_column :bulkrax_entries, :collection_id, :collection_ids if column_exists?(:bulkrax_entries, :collection_id)
4
+ end
5
+ end
@@ -0,0 +1,19 @@
1
+ class CreateBulkraxExporters < ActiveRecord::Migration[5.1]
2
+ def change
3
+ unless table_exists?(:bulkrax_exporters)
4
+ create_table :bulkrax_exporters do |t|
5
+ t.string :name
6
+ t.references :user, foreign_key: false
7
+ t.string :parser_klass
8
+ t.integer :limit
9
+ t.text :parser_fields
10
+ t.text :field_mapping
11
+ t.string :export_source
12
+ t.string :export_from
13
+ t.string :export_type
14
+
15
+ t.timestamps
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ class CreateBulkraxExporterRuns < ActiveRecord::Migration[5.1]
2
+ def change
3
+ unless table_exists?(:bulkrax_exporter_runs)
4
+ create_table :bulkrax_exporter_runs do |t|
5
+ t.references :exporter, foreign_key: { to_table: :bulkrax_exporters }
6
+ t.integer :total_records, default: 0
7
+ t.integer :enqueued_records, default: 0
8
+ t.integer :processed_records, default: 0
9
+ t.integer :deleted_records, default: 0
10
+ t.integer :failed_records, default: 0
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module Bulkrax
2
+ class Entry < ApplicationRecord
3
+ belongs_to :importer
4
+ end
5
+ end
6
+
7
+ class ChangeImporterAndExporterToPolymorphic < ActiveRecord::Migration[5.1]
8
+ def change
9
+ rename_column :bulkrax_entries, :importer_id, :importerexporter_id if column_exists?(:bulkrax_entries, :importer_id)
10
+ add_column :bulkrax_entries, :importerexporter_type, :string, after: :id, default: 'Bulkrax::Importer' unless column_exists?(:bulkrax_entries, :importerexporter_type)
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ class AddTotalCollectionRecordsToImporterRuns < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_importer_runs, :total_collection_entries, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :total_collection_entries)
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddChildrenToImporterRuns < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_importer_runs, :processed_children, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :processed_children)
4
+ add_column :bulkrax_importer_runs, :failed_children, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :failed_children)
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class ChangeTotalRecordsToTotalWorkEntries < ActiveRecord::Migration[5.1]
2
+ def change
3
+ rename_column :bulkrax_importer_runs, :total_records, :total_work_entries if column_exists?(:bulkrax_importer_runs, :total_records)
4
+ rename_column :bulkrax_exporter_runs, :total_records, :total_work_entries if column_exists?(:bulkrax_exporter_runs, :total_records)
5
+ end
6
+ end
@@ -0,0 +1,19 @@
1
+ class ChangeEntryLastError < ActiveRecord::Migration[5.1]
2
+
3
+ def up
4
+ # Use raw query to change text to JSON as last_error field is now serialized
5
+ results = ActiveRecord::Base.connection.execute("SELECT id, last_error from bulkrax_entries WHERE last_error IS NOT null AND last_error LIKE '%\n\n%'")
6
+ results.each do | error |
7
+ old_errors = error['last_error'].gsub("'","''").split("\n\n")
8
+ new_error = {
9
+ 'error_class' => 'unknown',
10
+ 'error_message' => old_errors.first,
11
+ 'error_trace' => old_errors.last
12
+ }
13
+ ActiveRecord::Base.connection.execute("UPDATE bulkrax_entries SET last_error = '#{new_error.to_json}' WHERE id = '#{error['id']}'")
14
+ end
15
+ end
16
+
17
+ def down; end
18
+
19
+ end
@@ -0,0 +1,5 @@
1
+ class AddValidateOnlyToBulkraxImporters < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_importers, :validate_only, :boolean unless column_exists?(:bulkrax_importers, :validate_only)
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class AddStatusToImporters < ActiveRecord::Migration[5.1]
2
+ def change
3
+ if table_exists?(:bulkrax_importers)
4
+ add_column :bulkrax_importers, :last_error, :text unless column_exists?(:bulkrax_importers, :last_error)
5
+ add_column :bulkrax_importers, :last_error_at, :datetime unless column_exists?(:bulkrax_importers, :last_error_at)
6
+ add_column :bulkrax_importers, :last_succeeded_at, :datetime unless column_exists?(:bulkrax_importers, :last_succeeded_at)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class RemoveForeignKeyFromBulkraxEntries < ActiveRecord::Migration[5.1]
2
+ def change
3
+ remove_foreign_key :bulkrax_entries, :bulkrax_importers if foreign_key_exists?(:bulkrax_entries, :bulkrax_importers)
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class AddStatusToExporters < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_exporters, :last_error, :text unless column_exists?(:bulkrax_exporters, :last_error)
4
+ add_column :bulkrax_exporters, :last_error_at, :datetime unless column_exists?(:bulkrax_exporters, :last_error_at)
5
+ add_column :bulkrax_exporters, :last_succeeded_at, :datetime unless column_exists?(:bulkrax_exporters, :last_succeeded_at)
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class AddInvalidRecordToImporterRun < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_importer_runs, :invalid_records, :text unless column_exists?(:bulkrax_importer_runs, :invalid_records)
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ class CreateBulkraxStatuses < ActiveRecord::Migration[5.1]
2
+ def change
3
+ unless table_exists?(:bulkrax_statuses)
4
+ create_table :bulkrax_statuses do |t|
5
+ t.string :status_message
6
+ t.string :error_class
7
+ t.string :error_message
8
+ t.text :error_backtrace
9
+ t.integer :statusable_id
10
+ t.string :statusable_type
11
+ t.integer :runnable_id
12
+ t.string :runnable_type
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,30 @@
1
+ class MoveToStatuses < ActiveRecord::Migration[5.1]
2
+ def change
3
+ Bulkrax::Importer.find_each do |i|
4
+ add_status(i)
5
+ end
6
+
7
+ Bulkrax::Exporter.find_each do |i|
8
+ add_status(i)
9
+ end
10
+
11
+ Bulkrax::Entry.find_each do |i|
12
+ add_status(i)
13
+ end
14
+ end
15
+
16
+ def add_status(i)
17
+ return if i.statuses.present?
18
+ if i.last_error
19
+ i.statuses.create(
20
+ status_message: 'Failed',
21
+ runnable: i.last_run,
22
+ error_class: i.last_error['error_class'],
23
+ error_message: i.last_error['error_message'],
24
+ error_backtrace: i.last_error['error_trace']
25
+ )
26
+ else
27
+ i.statuses.create(status_message: 'Complete', runnable: i.last_run)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,7 @@
1
+ class AddDateFilterAndStatusToBulkraxExporters < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_exporters, :start_date, :date unless column_exists?(:bulkrax_exporters, :start_date)
4
+ add_column :bulkrax_exporters, :finish_date, :date unless column_exists?(:bulkrax_exporters, :finish_date)
5
+ add_column :bulkrax_exporters, :work_visibility, :string unless column_exists?(:bulkrax_exporters, :work_visibility)
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class AddWorkflowStatusToBulkraxExporter < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_exporters, :workflow_status, :string unless column_exists?(:bulkrax_exporters, :workflow_status)
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class RemoveUnusedLastError < ActiveRecord::Migration[5.1]
2
+ def change
3
+ remove_column :bulkrax_entries, :last_error
4
+ remove_column :bulkrax_exporters, :last_error
5
+ remove_column :bulkrax_importers, :last_error
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ class IncreaseTextSizes < ActiveRecord::Migration[5.1]
2
+ def change
3
+ change_column :bulkrax_entries, :raw_metadata, :text, limit: 16777215
4
+ change_column :bulkrax_entries, :parsed_metadata, :text, limit: 16777215
5
+ change_column :bulkrax_exporters, :parser_fields, :text, limit: 16777215
6
+ change_column :bulkrax_exporters, :field_mapping, :text, limit: 16777215
7
+ change_column :bulkrax_importers, :parser_fields, :text, limit: 16777215
8
+ change_column :bulkrax_importers, :field_mapping, :text, limit: 16777215
9
+ change_column :bulkrax_importer_runs, :invalid_records, :text, limit: 16777215
10
+ change_column :bulkrax_statuses, :error_backtrace, :text, limit: 16777215
11
+ end
12
+ end
data/lib/bulkrax.rb ADDED
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bulkrax/engine"
4
+ require 'active_support/all'
5
+
6
+ module Bulkrax
7
+ class << self
8
+ mattr_accessor :parsers,
9
+ :default_work_type,
10
+ :default_field_mapping,
11
+ :collection_field_mapping,
12
+ :fill_in_blank_source_identifiers,
13
+ :parent_child_field_mapping,
14
+ :reserved_properties,
15
+ :field_mappings,
16
+ :import_path,
17
+ :export_path,
18
+ :removed_image_path,
19
+ :server_name,
20
+ :api_definition,
21
+ :removed_image_path
22
+
23
+ self.parsers = [
24
+ { name: "OAI - Dublin Core", class_name: "Bulkrax::OaiDcParser", partial: "oai_fields" },
25
+ { name: "OAI - Qualified Dublin Core", class_name: "Bulkrax::OaiQualifiedDcParser", partial: "oai_fields" },
26
+ { name: "CSV - Comma Separated Values", class_name: "Bulkrax::CsvParser", partial: "csv_fields" },
27
+ { name: "Bagit", class_name: "Bulkrax::BagitParser", partial: "bagit_fields" },
28
+ { name: "XML", class_name: "Bulkrax::XmlParser", partial: "xml_fields" }
29
+ ]
30
+
31
+ self.import_path = 'tmp/imports'
32
+ self.export_path = 'tmp/exports'
33
+ self.removed_image_path = Bulkrax::Engine.root.join('spec', 'fixtures', 'removed.png').to_s
34
+ self.server_name = 'bulkrax@example.com'
35
+
36
+ # @todo, merge parent_child_field_mapping and collection_field_mapping into field_mappings,
37
+ # or make them settable per import some other way.
38
+
39
+ # Field_mapping for establishing a parent-child relationship (FROM parent TO child)
40
+ # This can be a Collection to Work, or Work to Work relationship
41
+ # This value IS NOT used for OAI, so setting the OAI Entries here will have no effect
42
+ # The mapping is supplied per Entry, provide the full class name as a string, eg. 'Bulkrax::CsvEntry'
43
+ # Example:
44
+ # {
45
+ # 'Bulkrax::RdfEntry' => 'http://opaquenamespace.org/ns/contents',
46
+ # 'Bulkrax::CsvEntry' => 'children'
47
+ # }
48
+ # By default no parent-child relationships are added
49
+ self.parent_child_field_mapping = {}
50
+
51
+ # Field_mapping for establishing a collection relationship (FROM work TO collection)
52
+ # This value IS NOT used for OAI, so setting the OAI Entries here will have no effect
53
+ # The mapping is supplied per Entry, provide the full class name as a string, eg. 'Bulkrax::CsvEntry'
54
+ # The default value for CSV is collection
55
+ self.collection_field_mapping = {}
56
+
57
+ # Hash of Generic field_mappings for use in the view
58
+ # There must be one field_mappings hash per view parial
59
+ # Based on Hyrax CoreMetadata && BasicMetadata
60
+ # Override at application level to change
61
+ self.field_mappings = {
62
+ "Bulkrax::OaiDcParser" => {
63
+ "contributor" => { from: ["contributor"] },
64
+ # no appropriate mapping for coverage (based_near needs id)
65
+ # ""=>{:from=>["coverage"]},
66
+ "creator" => { from: ["creator"] },
67
+ "date_created" => { from: ["date"] },
68
+ "description" => { from: ["description"] },
69
+ # no appropriate mapping for format
70
+ # ""=>{:from=>["format"]},
71
+ "identifier" => { from: ["identifier"] },
72
+ "language" => { from: ["language"], parsed: true },
73
+ "publisher" => { from: ["publisher"] },
74
+ "related_url" => { from: ["relation"] },
75
+ "rights_statement" => { from: ["rights"] },
76
+ "source" => { from: ["source"] },
77
+ "subject" => { from: ["subject"], parsed: true },
78
+ "title" => { from: ["title"] },
79
+ "resource_type" => { from: ["type"], parsed: true },
80
+ "remote_files" => { from: ["thumbnail_url"], parsed: true }
81
+ },
82
+ "Bulkrax::OaiQualifiedDcParser" => {
83
+ "abstract" => { from: ["abstract"] },
84
+ "alternative_title" => { from: ["alternative"] },
85
+ "bibliographic_citation" => { from: ["bibliographicCitation"] },
86
+ "contributor" => { from: ["contributor"] },
87
+ "creator" => { from: ["creator"] },
88
+ "date_created" => { from: ["created"] },
89
+ "description" => { from: ["description"] },
90
+ "language" => { from: ["language"] },
91
+ "license" => { from: ["license"] },
92
+ "publisher" => { from: ["publisher"] },
93
+ "related_url" => { from: ["relation"] },
94
+ "rights_holder" => { from: ["rightsHolder"] },
95
+ "rights_statement" => { from: ["rights"] },
96
+ "source" => { from: ["source"] },
97
+ "subject" => { from: ["subject"], parsed: true },
98
+ "title" => { from: ["title"] },
99
+ "resource_type" => { from: ["type"], parsed: true },
100
+ "remote_files" => { from: ["thumbnail_url"], parsed: true }
101
+ },
102
+ # When empty, a default_field_mapping will be generated
103
+ "Bulkrax::CsvParser" => {},
104
+ 'Bulkrax::BagitParser' => {},
105
+ 'Bulkrax::XmlParser' => {}
106
+ }
107
+
108
+ # Lambda to set the default field mapping
109
+ self.default_field_mapping = lambda do |field|
110
+ return if field.blank?
111
+ {
112
+ field.to_s =>
113
+ {
114
+ from: [field.to_s],
115
+ split: false,
116
+ parsed: Bulkrax::ApplicationMatcher.method_defined?("parse_#{field}"),
117
+ if: nil,
118
+ excluded: false
119
+ }
120
+ }
121
+ end
122
+
123
+ # Properties that should not be used in imports. They are reserved for use by Hyrax.
124
+ self.reserved_properties = %w[
125
+ create_date
126
+ modified_date
127
+ date_modified
128
+ date_uploaded
129
+ depositor
130
+ arkivo_checksum
131
+ has_model
132
+ head
133
+ label
134
+ import_url
135
+ on_behalf_of
136
+ proxy_depositor
137
+ owner
138
+ state
139
+ tail
140
+ original_url
141
+ relative_path
142
+ ]
143
+ end
144
+
145
+ def self.api_definition
146
+ @api_definition ||= ActiveSupport::HashWithIndifferentAccess.new(
147
+ YAML.safe_load(
148
+ ERB.new(
149
+ File.read(Rails.root.join('config', 'bulkrax_api.yml'))
150
+ ).result
151
+ )
152
+ )
153
+ end
154
+
155
+ self.removed_image_path = 'app/assets/images/bulkrax/removed.png'
156
+
157
+ # this function maps the vars from your app into your engine
158
+ def self.setup
159
+ yield self
160
+ end
161
+ end