dog_biscuits 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +115 -0
  3. data/.codeclimate.yml +52 -0
  4. data/.gitignore +24 -0
  5. data/.rspec +3 -0
  6. data/.rubocop.yml +45 -0
  7. data/.rubocop_todo.yml +92 -0
  8. data/.travis.yml +18 -0
  9. data/CODE_OF_CONDUCT.md +36 -0
  10. data/CONTRIBUTING.md +161 -0
  11. data/Gemfile +40 -0
  12. data/LICENSE +14 -0
  13. data/README.md +98 -0
  14. data/Rakefile +35 -0
  15. data/SUPPORT.md +5 -0
  16. data/bin/console +15 -0
  17. data/bin/setup +7 -0
  18. data/dog_biscuits.gemspec +38 -0
  19. data/lib/dog_biscuits.rb +352 -0
  20. data/lib/dog_biscuits/actors/apply_authorities.rb +32 -0
  21. data/lib/dog_biscuits/actors/singular_attributes.rb +17 -0
  22. data/lib/dog_biscuits/blacklight/commands.rb +118 -0
  23. data/lib/dog_biscuits/configuration.rb +506 -0
  24. data/lib/dog_biscuits/importers/authority.rb +65 -0
  25. data/lib/dog_biscuits/indexers/collection_indexer.rb +10 -0
  26. data/lib/dog_biscuits/indexers/concerns/indexes_common.rb +58 -0
  27. data/lib/dog_biscuits/indexers/conference_item_indexer.rb +17 -0
  28. data/lib/dog_biscuits/indexers/dataset_indexer.rb +25 -0
  29. data/lib/dog_biscuits/indexers/digital_archival_object_indexer.rb +19 -0
  30. data/lib/dog_biscuits/indexers/exam_paper_indexer.rb +10 -0
  31. data/lib/dog_biscuits/indexers/journal_article_indexer.rb +15 -0
  32. data/lib/dog_biscuits/indexers/package_indexer.rb +19 -0
  33. data/lib/dog_biscuits/indexers/published_work_indexer.rb +16 -0
  34. data/lib/dog_biscuits/indexers/thesis_indexer.rb +16 -0
  35. data/lib/dog_biscuits/models/authorities/agent.rb +78 -0
  36. data/lib/dog_biscuits/models/authorities/agents/group.rb +59 -0
  37. data/lib/dog_biscuits/models/authorities/agents/historic_person.rb +55 -0
  38. data/lib/dog_biscuits/models/authorities/agents/organisation.rb +56 -0
  39. data/lib/dog_biscuits/models/authorities/agents/person.rb +75 -0
  40. data/lib/dog_biscuits/models/authorities/concept.rb +91 -0
  41. data/lib/dog_biscuits/models/authorities/concept_scheme.rb +65 -0
  42. data/lib/dog_biscuits/models/authorities/event.rb +74 -0
  43. data/lib/dog_biscuits/models/authorities/place.rb +86 -0
  44. data/lib/dog_biscuits/models/authorities/project.rb +60 -0
  45. data/lib/dog_biscuits/models/authority.rb +42 -0
  46. data/lib/dog_biscuits/models/collections/collection.rb +32 -0
  47. data/lib/dog_biscuits/models/concerns/behaviours/pure_specific_behaviour.rb +17 -0
  48. data/lib/dog_biscuits/models/concerns/behaviours/validate_concept_related.rb +12 -0
  49. data/lib/dog_biscuits/models/concerns/behaviours/validate_concept_scheme.rb +16 -0
  50. data/lib/dog_biscuits/models/concerns/behaviours/validate_label.rb +12 -0
  51. data/lib/dog_biscuits/models/concerns/behaviours/validate_place.rb +12 -0
  52. data/lib/dog_biscuits/models/concerns/behaviours/work_behaviour.rb +21 -0
  53. data/lib/dog_biscuits/models/concerns/extended_solr_document.rb +147 -0
  54. data/lib/dog_biscuits/models/concerns/metadata_properties/archivematica/archivematica.rb +73 -0
  55. data/lib/dog_biscuits/models/concerns/metadata_properties/archives_hub/access_provided_by.rb +14 -0
  56. data/lib/dog_biscuits/models/concerns/metadata_properties/archives_hub/country_code.rb +15 -0
  57. data/lib/dog_biscuits/models/concerns/metadata_properties/archives_hub/hub_dates.rb +17 -0
  58. data/lib/dog_biscuits/models/concerns/metadata_properties/archives_hub/maintenance_agency_code.rb +15 -0
  59. data/lib/dog_biscuits/models/concerns/metadata_properties/bibframe/awarding_institution.rb +13 -0
  60. data/lib/dog_biscuits/models/concerns/metadata_properties/bibframe/edition.rb +13 -0
  61. data/lib/dog_biscuits/models/concerns/metadata_properties/bibframe/identified_by.rb +14 -0
  62. data/lib/dog_biscuits/models/concerns/metadata_properties/bibframe/part.rb +13 -0
  63. data/lib/dog_biscuits/models/concerns/metadata_properties/bibframe/part_of.rb +14 -0
  64. data/lib/dog_biscuits/models/concerns/metadata_properties/bibframe/series.rb +13 -0
  65. data/lib/dog_biscuits/models/concerns/metadata_properties/bibframe/subtitle.rb +14 -0
  66. data/lib/dog_biscuits/models/concerns/metadata_properties/bibo/presented_at.rb +13 -0
  67. data/lib/dog_biscuits/models/concerns/metadata_properties/bibo/publication_status.rb +13 -0
  68. data/lib/dog_biscuits/models/concerns/metadata_properties/datacite/resource_type_general.rb +13 -0
  69. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/abstract.rb +14 -0
  70. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/access_rights.rb +14 -0
  71. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/bibliographic_citation.rb +13 -0
  72. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/contributor.rb +14 -0
  73. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/creator.rb +14 -0
  74. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/date.rb +13 -0
  75. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/date_accepted.rb +13 -0
  76. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/date_available.rb +14 -0
  77. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/date_copyrighted.rb +14 -0
  78. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/date_created.rb +13 -0
  79. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/date_issued.rb +14 -0
  80. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/description.rb +14 -0
  81. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/extent.rb +13 -0
  82. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/format.rb +13 -0
  83. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/identifier.rb +13 -0
  84. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/language.rb +17 -0
  85. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/publisher.rb +14 -0
  86. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/resource_type.rb +13 -0
  87. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/rights.rb +17 -0
  88. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/rights_holder.rb +14 -0
  89. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/simple_versions.rb +18 -0
  90. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/source.rb +13 -0
  91. data/lib/dog_biscuits/models/concerns/metadata_properties/dc/subject.rb +13 -0
  92. data/lib/dog_biscuits/models/concerns/metadata_properties/dwc/event_date.rb +14 -0
  93. data/lib/dog_biscuits/models/concerns/metadata_properties/edm/edm_rights.rb +13 -0
  94. data/lib/dog_biscuits/models/concerns/metadata_properties/fabio/date_collected.rb +15 -0
  95. data/lib/dog_biscuits/models/concerns/metadata_properties/foaf/based_near.rb +12 -0
  96. data/lib/dog_biscuits/models/concerns/metadata_properties/foaf/foaf_name.rb +16 -0
  97. data/lib/dog_biscuits/models/concerns/metadata_properties/frapo/output_of.rb +18 -0
  98. data/lib/dog_biscuits/models/concerns/metadata_properties/geo/geo.rb +27 -0
  99. data/lib/dog_biscuits/models/concerns/metadata_properties/geonames/country_code.rb +15 -0
  100. data/lib/dog_biscuits/models/concerns/metadata_properties/geonames/place_properties.rb +66 -0
  101. data/lib/dog_biscuits/models/concerns/metadata_properties/lc_identifiers/doi.rb +13 -0
  102. data/lib/dog_biscuits/models/concerns/metadata_properties/lc_identifiers/isbn.rb +13 -0
  103. data/lib/dog_biscuits/models/concerns/metadata_properties/lc_identifiers/official_url.rb +13 -0
  104. data/lib/dog_biscuits/models/concerns/metadata_properties/lc_identifiers/orcid.rb +13 -0
  105. data/lib/dog_biscuits/models/concerns/metadata_properties/local/for_indexing.rb +14 -0
  106. data/lib/dog_biscuits/models/concerns/metadata_properties/local/former_identifier.rb +13 -0
  107. data/lib/dog_biscuits/models/concerns/metadata_properties/local/generic_authority_terms.rb +22 -0
  108. data/lib/dog_biscuits/models/concerns/metadata_properties/local/generic_qualifier.rb +16 -0
  109. data/lib/dog_biscuits/models/concerns/metadata_properties/local/last_access.rb +15 -0
  110. data/lib/dog_biscuits/models/concerns/metadata_properties/local/main_file.rb +24 -0
  111. data/lib/dog_biscuits/models/concerns/metadata_properties/local/module_code.rb +13 -0
  112. data/lib/dog_biscuits/models/concerns/metadata_properties/local/number_of_downloads.rb +14 -0
  113. data/lib/dog_biscuits/models/concerns/metadata_properties/local/packaged_by.rb +13 -0
  114. data/lib/dog_biscuits/models/concerns/metadata_properties/local/readme_file.rb +26 -0
  115. data/lib/dog_biscuits/models/concerns/metadata_properties/local/requestor_email.rb +13 -0
  116. data/lib/dog_biscuits/models/concerns/metadata_properties/mads/related_authority.rb +14 -0
  117. data/lib/dog_biscuits/models/concerns/metadata_properties/marc_relators/advisor.rb +14 -0
  118. data/lib/dog_biscuits/models/concerns/metadata_properties/marc_relators/editor.rb +14 -0
  119. data/lib/dog_biscuits/models/concerns/metadata_properties/marc_relators/funder.rb +13 -0
  120. data/lib/dog_biscuits/models/concerns/metadata_properties/marc_relators/place_of_publication.rb +13 -0
  121. data/lib/dog_biscuits/models/concerns/metadata_properties/mods/date_valid.rb +14 -0
  122. data/lib/dog_biscuits/models/concerns/metadata_properties/owl/owl_same_as.rb +13 -0
  123. data/lib/dog_biscuits/models/concerns/metadata_properties/premis/has_restriction.rb +15 -0
  124. data/lib/dog_biscuits/models/concerns/metadata_properties/property_sets/person_properties.rb +92 -0
  125. data/lib/dog_biscuits/models/concerns/metadata_properties/pure/managing_organisation.rb +14 -0
  126. data/lib/dog_biscuits/models/concerns/metadata_properties/pure/pure.rb +28 -0
  127. data/lib/dog_biscuits/models/concerns/metadata_properties/rdf/rdf_type.rb +12 -0
  128. data/lib/dog_biscuits/models/concerns/metadata_properties/rdf/rdfs_label.rb +14 -0
  129. data/lib/dog_biscuits/models/concerns/metadata_properties/rdf/related_url.rb +13 -0
  130. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/alternate_name.rb +13 -0
  131. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/content_version.rb +13 -0
  132. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/date_published.rb +13 -0
  133. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/date_updated.rb +13 -0
  134. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/department.rb +13 -0
  135. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/end_date.rb +13 -0
  136. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/issue_number.rb +13 -0
  137. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/keyword.rb +13 -0
  138. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/location.rb +13 -0
  139. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/pagination.rb +13 -0
  140. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/start_date.rb +13 -0
  141. data/lib/dog_biscuits/models/concerns/metadata_properties/schema/volume_number.rb +13 -0
  142. data/lib/dog_biscuits/models/concerns/metadata_properties/skos/skos_labels.rb +18 -0
  143. data/lib/dog_biscuits/models/concerns/metadata_properties/skos/skos_note.rb +13 -0
  144. data/lib/dog_biscuits/models/concerns/metadata_properties/skos/skos_related.rb +13 -0
  145. data/lib/dog_biscuits/models/concerns/metadata_properties/uketd/date_of_award.rb +13 -0
  146. data/lib/dog_biscuits/models/concerns/metadata_properties/uketd/qualification.rb +17 -0
  147. data/lib/dog_biscuits/models/concerns/metadata_properties/ulcc/date_submitted.rb +14 -0
  148. data/lib/dog_biscuits/models/concerns/metadata_properties/ulcc/official_url.rb +13 -0
  149. data/lib/dog_biscuits/models/concerns/metadata_properties/ulcc/refereed.rb +13 -0
  150. data/lib/dog_biscuits/models/concerns/model_property_sets/common/common_labels.rb +9 -0
  151. data/lib/dog_biscuits/models/concerns/model_property_sets/common/common_metadata.rb +64 -0
  152. data/lib/dog_biscuits/models/concerns/model_property_sets/common/common_rights.rb +10 -0
  153. data/lib/dog_biscuits/models/concerns/model_property_sets/conference_item_metadata.rb +24 -0
  154. data/lib/dog_biscuits/models/concerns/model_property_sets/dataset_metadata.rb +36 -0
  155. data/lib/dog_biscuits/models/concerns/model_property_sets/digital_archival_object_metadata.rb +13 -0
  156. data/lib/dog_biscuits/models/concerns/model_property_sets/exam_paper_metadata.rb +14 -0
  157. data/lib/dog_biscuits/models/concerns/model_property_sets/journal_article_metadata.rb +24 -0
  158. data/lib/dog_biscuits/models/concerns/model_property_sets/package_metadata.rb +13 -0
  159. data/lib/dog_biscuits/models/concerns/model_property_sets/published_work_metadata.rb +26 -0
  160. data/lib/dog_biscuits/models/concerns/model_property_sets/thesis_metadata.rb +17 -0
  161. data/lib/dog_biscuits/models/filesets/file_set.rb +30 -0
  162. data/lib/dog_biscuits/models/to_refactor_or_remove/canvas.rb +15 -0
  163. data/lib/dog_biscuits/models/to_refactor_or_remove/contained_file.rb +13 -0
  164. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_date_certainty.rb +5 -0
  165. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_editorial_note.rb +5 -0
  166. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_entry.rb +19 -0
  167. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_entry_date.rb +10 -0
  168. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_entry_type.rb +5 -0
  169. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_is_referenced_by.rb +5 -0
  170. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_language.rb +5 -0
  171. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_marginalium.rb +5 -0
  172. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_note.rb +5 -0
  173. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_person_as_written.rb +5 -0
  174. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_person_descriptor.rb +5 -0
  175. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_person_descriptor_as_written.rb +5 -0
  176. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_person_note.rb +5 -0
  177. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_person_related_person.rb +5 -0
  178. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_person_related_place.rb +5 -0
  179. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_person_role.rb +5 -0
  180. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_place_as_written.rb +5 -0
  181. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_place_note.rb +5 -0
  182. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_place_role.rb +5 -0
  183. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_place_type.rb +5 -0
  184. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_related_agent.rb +20 -0
  185. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_related_place.rb +13 -0
  186. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_section_type.rb +5 -0
  187. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_single_date.rb +10 -0
  188. data/lib/dog_biscuits/models/to_refactor_or_remove/db/db_subject.rb +5 -0
  189. data/lib/dog_biscuits/models/to_refactor_or_remove/entry.rb +59 -0
  190. data/lib/dog_biscuits/models/to_refactor_or_remove/entry/entry_date.rb +17 -0
  191. data/lib/dog_biscuits/models/to_refactor_or_remove/entry/related_agent.rb +62 -0
  192. data/lib/dog_biscuits/models/to_refactor_or_remove/entry/related_place.rb +28 -0
  193. data/lib/dog_biscuits/models/to_refactor_or_remove/entry/single_date.rb +19 -0
  194. data/lib/dog_biscuits/models/to_refactor_or_remove/folio.rb +42 -0
  195. data/lib/dog_biscuits/models/to_refactor_or_remove/image.rb +25 -0
  196. data/lib/dog_biscuits/models/to_refactor_or_remove/manifest.rb +15 -0
  197. data/lib/dog_biscuits/models/to_refactor_or_remove/register.rb +21 -0
  198. data/lib/dog_biscuits/models/work.rb +37 -0
  199. data/lib/dog_biscuits/models/works/conference_item.rb +37 -0
  200. data/lib/dog_biscuits/models/works/dataset.rb +42 -0
  201. data/lib/dog_biscuits/models/works/digital_archival_object.rb +28 -0
  202. data/lib/dog_biscuits/models/works/exam_paper.rb +33 -0
  203. data/lib/dog_biscuits/models/works/journal_article.rb +37 -0
  204. data/lib/dog_biscuits/models/works/package.rb +47 -0
  205. data/lib/dog_biscuits/models/works/published_work.rb +38 -0
  206. data/lib/dog_biscuits/models/works/thesis.rb +34 -0
  207. data/lib/dog_biscuits/property_mappings/property_mappings.rb +585 -0
  208. data/lib/dog_biscuits/railtie.rb +13 -0
  209. data/lib/dog_biscuits/services/table_based_authority_extended.rb +10 -0
  210. data/lib/dog_biscuits/services/terms.rb +57 -0
  211. data/lib/dog_biscuits/services/terms_service.rb +162 -0
  212. data/lib/dog_biscuits/solr/index_types.rb +33 -0
  213. data/lib/dog_biscuits/validators/concept_related_validator.rb +13 -0
  214. data/lib/dog_biscuits/validators/concept_scheme_member_validator.rb +10 -0
  215. data/lib/dog_biscuits/validators/label_validator.rb +55 -0
  216. data/lib/dog_biscuits/validators/place_validator.rb +10 -0
  217. data/lib/dog_biscuits/version.rb +5 -0
  218. data/lib/dog_biscuits/vocab/borthwick_registers.rb +321 -0
  219. data/lib/dog_biscuits/vocab/generic.rb +204 -0
  220. data/lib/dog_biscuits/vocab/oais_archivematica.rb +116 -0
  221. data/lib/dog_biscuits/vocab/pure_terms.rb +65 -0
  222. data/lib/dog_biscuits/vocab/uketd.rb +45 -0
  223. data/lib/dog_biscuits/vocab/ulcc_terms.rb +55 -0
  224. data/lib/generators/dog_biscuits/USAGE +50 -0
  225. data/lib/generators/dog_biscuits/authority_generator.rb +55 -0
  226. data/lib/generators/dog_biscuits/catalog_generator.rb +18 -0
  227. data/lib/generators/dog_biscuits/dates_generator.rb +98 -0
  228. data/lib/generators/dog_biscuits/generate_all_generator.rb +29 -0
  229. data/lib/generators/dog_biscuits/imagify_generator.rb +67 -0
  230. data/lib/generators/dog_biscuits/install_generator.rb +82 -0
  231. data/lib/generators/dog_biscuits/locales_generator.rb +20 -0
  232. data/lib/generators/dog_biscuits/schema_org_generator.rb +20 -0
  233. data/lib/generators/dog_biscuits/templates/_date_template.html.erb +7 -0
  234. data/lib/generators/dog_biscuits/templates/app/controllers/catalog_controller.rb +133 -0
  235. data/lib/generators/dog_biscuits/templates/app/helpers/dog_biscuits_helper.rb +43 -0
  236. data/lib/generators/dog_biscuits/templates/app/renderers/package_ids_renderer.rb +13 -0
  237. data/lib/generators/dog_biscuits/templates/app/renderers/packaged_by_ids_renderer.rb +11 -0
  238. data/lib/generators/dog_biscuits/templates/app/renderers/publication_status_renderer.rb +16 -0
  239. data/lib/generators/dog_biscuits/templates/app/services/concerns/file_authority_concern.rb +14 -0
  240. data/lib/generators/dog_biscuits/templates/app/services/concerns/local_authority_concern.rb +18 -0
  241. data/lib/generators/dog_biscuits/templates/app/services/local_form_metadata_service.rb +15 -0
  242. data/lib/generators/dog_biscuits/templates/app/views/hyrax/base/_form_metadata.html.erb +23 -0
  243. data/lib/generators/dog_biscuits/templates/app/views/records/edit_fields/_abstract.html.erb +5 -0
  244. data/lib/generators/dog_biscuits/templates/app/views/records/edit_fields/_default.html.erb +6 -0
  245. data/lib/generators/dog_biscuits/templates/app/views/records/edit_fields/_funder.html.erb +8 -0
  246. data/lib/generators/dog_biscuits/templates/app/views/records/edit_fields/_note.html.erb +5 -0
  247. data/lib/generators/dog_biscuits/templates/app/views/records/edit_fields/_part_of.html.erb +17 -0
  248. data/lib/generators/dog_biscuits/templates/app/views/records/edit_fields/_publication_status.html.erb +6 -0
  249. data/lib/generators/dog_biscuits/templates/app/views/records/edit_fields/_refereed.html.erb +5 -0
  250. data/lib/generators/dog_biscuits/templates/app/views/records/edit_fields/_resource_type_general.html.erb +2 -0
  251. data/lib/generators/dog_biscuits/templates/authority_service.rb.erb +25 -0
  252. data/lib/generators/dog_biscuits/templates/config/authorities/content_versions.yml +25 -0
  253. data/lib/generators/dog_biscuits/templates/config/authorities/publication_statuses.yml +19 -0
  254. data/lib/generators/dog_biscuits/templates/config/authorities/qualification_levels.yml +13 -0
  255. data/lib/generators/dog_biscuits/templates/config/authorities/qualification_names.yml +31 -0
  256. data/lib/generators/dog_biscuits/templates/config/authorities/resource_type_generals.yml +47 -0
  257. data/lib/generators/dog_biscuits/templates/config/dog_biscuits.yml +3 -0
  258. data/lib/generators/dog_biscuits/templates/config/initializers/catalog_search_builder_overrides.rb +18 -0
  259. data/lib/generators/dog_biscuits/templates/config/initializers/dog_biscuits.rb +144 -0
  260. data/lib/generators/dog_biscuits/templates/dog_biscuits.en.yml.erb +11 -0
  261. data/lib/generators/dog_biscuits/templates/schema_org.yml.erb +4 -0
  262. data/lib/generators/dog_biscuits/work/USAGE +35 -0
  263. data/lib/generators/dog_biscuits/work/templates/README +31 -0
  264. data/lib/generators/dog_biscuits/work/templates/_attribute_rows.html.erb +22 -0
  265. data/lib/generators/dog_biscuits/work/templates/actor.rb.erb +25 -0
  266. data/lib/generators/dog_biscuits/work/templates/form.rb.erb +18 -0
  267. data/lib/generators/dog_biscuits/work/templates/indexer.rb.erb +23 -0
  268. data/lib/generators/dog_biscuits/work/templates/model.rb.erb +16 -0
  269. data/lib/generators/dog_biscuits/work/templates/presenter.rb.erb +20 -0
  270. data/lib/generators/dog_biscuits/work/work_generator.rb +102 -0
  271. data/lib/tasks/authorities.rake +22 -0
  272. metadata +476 -0
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DogBiscuits
4
+ module Actors
5
+ module ApplyAuthorities
6
+ private
7
+
8
+ # Add new terms to table-based authorities
9
+ #
10
+ # @param env [Hyrax::Actors::Environment] the env
11
+ def apply_authorities(env)
12
+ DogBiscuits.config.authorities_add_new.each do |authority_name|
13
+ term = authority_name.to_s.singularize.to_sym
14
+ next unless env.attributes.key? term
15
+ env.attributes[term].each do |attr|
16
+ add_new(authority_name.to_s, attr)
17
+ end
18
+ end
19
+ end
20
+
21
+ # Add new term to the authority; it will be rejected if already present
22
+ #
23
+ # @param auth [String] the authority to add to
24
+ # @param label [String] the label to add
25
+ def add_new(authority_name, label)
26
+ DogBiscuits::Importers::Authority.new(authority_name).create_record(label) if Qa::Authorities::Local.subauthority_for(authority_name).search(label).empty?
27
+ rescue Qa::InvalidSubAuthority
28
+ Rails.logger.error("Invalid sub-authority: #{auth}")
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DogBiscuits
4
+ module Actors
5
+ module SingularAttributes
6
+ # Override the BaseActor #clean_attributes method to apply this to all configured singular properties
7
+ # Cast any singular values from the form to multiple values for persistence
8
+ def clean_attributes(attributes)
9
+ DogBiscuits.config.singular_properties.each do |prop|
10
+ next if attributes[prop].blank?
11
+ attributes[prop] = Array.wrap(attributes[prop]) if attributes.key? prop
12
+ end
13
+ super
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+ # From JiscRDSS/rdss-samvera
3
+ # https://github.com/JiscRDSS/rdss-samvera/blob/master/willow/app/controllers/concerns/blacklight/commands.rb
4
+ # Copyright Jisc
5
+ module DogBiscuits
6
+ module Blacklight
7
+ module Commands
8
+ extend ActiveSupport::Concern
9
+
10
+ include DogBiscuits::Solr::IndexTypes
11
+
12
+ class_methods do
13
+ private
14
+
15
+ def decode_name_and_options(name, options = {})
16
+ actual_name = name.keys.first
17
+ values = name.values.first
18
+ labelled_name = values[:name] || actual_name
19
+ index_type = values[:as] || :stored_searchable
20
+ solr_options = values[:type] && [{ type: values[:type] }] || nil
21
+ options.merge!(values[:options] || {})
22
+ [actual_name, labelled_name, index_type, solr_options, options]
23
+ end
24
+
25
+ def default_label(name)
26
+ I18n.t('dog_biscuits.labels.' + name.to_s)
27
+ end
28
+
29
+ def default_label_options(name)
30
+ { label: default_label(name) }
31
+ end
32
+
33
+ def default_index_options(name, index_type = :facetable)
34
+ { itemprop: name, link_to_search: send("#{index_type}_name", name) }
35
+ end
36
+
37
+ def index_options(name, mapping)
38
+ return {} unless mapping
39
+ opts = {}
40
+ mapping[:index]&.each do |opt|
41
+ opts[opt.keys.first] = index_option_value(name, opt.keys.first, opt[opt.keys.first])
42
+ end
43
+ opts[:itemprop] = mapping[:schema_org][:property] if mapping[:schema_org]
44
+ opts[:helper_method] = mapping[:helper_method] if mapping[:helper_method]
45
+ { options: opts }
46
+ end
47
+
48
+ def index_option_value(name, key, value)
49
+ if key == :link_to_search && value == true
50
+ index_type = :facetable
51
+ send("#{index_type}_name", name)
52
+ else
53
+ value
54
+ end
55
+ end
56
+
57
+ def send_to_configuration(config, name, config_type, default_index_type, options = {})
58
+ name, label_name, index_type, solr_options, options = if name.is_a?(Hash)
59
+ decode_name_and_options(name, options)
60
+ else
61
+ [name, name, default_index_type, nil, options]
62
+ end
63
+ begin
64
+ config.send("add_#{config_type}", send("#{index_type}_name", name, *solr_options), default_label_options(label_name).merge(options))
65
+ rescue ArgumentError
66
+ Rails.logger("solr_options are: #{solr_options.inspect}")
67
+ raise
68
+ end
69
+ end
70
+
71
+ def add_labelled_facet_field(config, name, options)
72
+ send_to_configuration(config, name, :facet_field, :facetable, options)
73
+ end
74
+
75
+ def add_labelled_index_field(config, name, options = {})
76
+ send_to_configuration(config, name, :index_field, :stored_searchable, options)
77
+ end
78
+
79
+ def add_labelled_show_field(config, name, options = {})
80
+ send_to_configuration(config, name, :show_field, :stored_searchable, options)
81
+ end
82
+
83
+ def add_solr_search_field(config, name, options = {})
84
+ name, label_name, index_type, solr_options, _options = if name.is_a?(Hash)
85
+ decode_name_and_options(name, options)
86
+ else
87
+ [name, name, :stored_searchable, options]
88
+ end
89
+ local_params_solr_name = send("#{index_type}_name", name, *solr_options)
90
+ config.add_search_field(name.to_s) do |field|
91
+ field.label = default_label(label_name)
92
+ field.solr_local_parameters = { qf: local_params_solr_name, pf: local_params_solr_name }
93
+ end
94
+ end
95
+
96
+ def add_facet_field(config, names, options = { limit: 5 })
97
+ names.each { |name| add_labelled_facet_field(config, name, options) }
98
+ end
99
+
100
+ def add_index_field(config, names)
101
+ names.each { |name| add_labelled_index_field(config, name) }
102
+ end
103
+
104
+ def add_show_field(config, names)
105
+ names.each { |name| add_labelled_show_field(config, name) }
106
+ end
107
+
108
+ def add_search_field(config, names)
109
+ names.each { |name| add_solr_search_field(config, name) }
110
+ end
111
+
112
+ def to_searchable_names_field_list(names)
113
+ names.map { |name| stored_searchable_name(name) }.join(' ')
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,506 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Metrics/MethodLength
4
+ # rubocop:disable Metrics/ClassLength
5
+
6
+ module DogBiscuits
7
+ class Configuration
8
+ include PropertyMappings
9
+
10
+ # All available properties
11
+ def all_properties
12
+ props = selected_models.map { |m| send("#{m.underscore}_properties") }.flatten
13
+ props.concat(facet_properties)
14
+ props.concat(index_properties)
15
+ props << :date_range if date_range == true
16
+ props.sort.uniq!
17
+ end
18
+
19
+ # All available models
20
+ def available_models
21
+ ['ConferenceItem', 'Dataset', 'DigitalArchivalObject', 'ExamPaper', 'JournalArticle', 'Package', 'PublishedWork', 'Thesis'].freeze
22
+ end
23
+
24
+ # Models used in the app (used by the generate_all generator)
25
+ attr_writer :selected_models
26
+ def selected_models
27
+ @selected_models ||= available_models
28
+ end
29
+
30
+ attr_writer :date_picker
31
+ def date_picker
32
+ @date_picker ||= false
33
+ end
34
+
35
+ attr_writer :date_picker_dates
36
+ def date_picker_dates
37
+ @date_picker_dates ||= date_properties
38
+ end
39
+
40
+ attr_writer :date_range
41
+ def date_range
42
+ @date_range ||= false
43
+ end
44
+
45
+ # Default required properties.
46
+ def required_properties
47
+ %i[title creator keyword rights_statement].freeze
48
+ end
49
+
50
+ # Basic Metadata properties from Hyrax
51
+ # Omitting bibliographic_citation
52
+ def base_properties
53
+ %i[title
54
+ creator
55
+ contributor
56
+ description
57
+ keyword
58
+ license
59
+ rights_statement
60
+ publisher
61
+ date_created
62
+ subject
63
+ language
64
+ identifier
65
+ based_near
66
+ related_url
67
+ resource_type
68
+ source].freeze
69
+ end
70
+
71
+ # Common properties from DogBiscuits atop those in BasicMetadata
72
+ # Also include resource_type which is part of BasicMetadata but not part of the Hyrax WorkForm
73
+ # Omitting date as this is used for faceting only
74
+ def common_properties
75
+ %i[department doi former_identifier note output_of lat long alt location managing_organisation funder].freeze
76
+ end
77
+
78
+ # Add values that aren't found in the following table-based authorities to be added on save.
79
+ # This only works in cases where the name of the authority is a pluralized form of
80
+ # the name of the property which uses it, eg. subjects/subject and languages/language
81
+ attr_writer :authorities_add_new
82
+ def authorities_add_new
83
+ @authorities_add_new ||= []
84
+ end
85
+
86
+ # All solr fields that will be treated as facets by the blacklight application
87
+ # The ordering of the field names is the order of the display
88
+ # The properties must have been indexed as facetable
89
+ # The existing fields will be replaced:
90
+ # resource_type, creator, tag, subject, language, based_near_label, publisher, file_format
91
+ attr_writer :facet_properties
92
+ def facet_properties
93
+ @facet_properties ||= %i[
94
+ human_readable_type
95
+ resource_type
96
+ creator
97
+ contributor_combined
98
+ contributor_type
99
+ publisher
100
+ department
101
+ funder
102
+ date
103
+ keyword
104
+ subject
105
+ language
106
+ based_near_label
107
+ part_of
108
+ qualification_level
109
+ qualification_name
110
+ refereed
111
+ publication_status
112
+ content_version
113
+ packaged_by_titles
114
+ ]
115
+ end
116
+
117
+ # Fields that are not included in the form or show,
118
+ # eg. those that are generated by the solr indexer for facets only
119
+ # these are already included in facet_properties
120
+ attr_writer :facet_only_properties
121
+ def facet_only_properties
122
+ @facet_only_properties ||= %i[
123
+ contributor_combined
124
+ contributor_type
125
+ date
126
+ human_readable_type
127
+ packaged_by_titles
128
+ ]
129
+ end
130
+
131
+ # *All* solr fields to be displayed in the index (search results) view
132
+ # The ordering of the field names is the order of the display
133
+ # The existing fields will be replaced so must be included here:
134
+ # title, description, tag, subject, creator, contributor, publisher, based_near_label, language,
135
+ # date_uploaded, date_modified, date_created, rights, resource_type, format, identifier, extent
136
+ # embargo_release_date, lease_expiration_date
137
+ attr_writer :index_properties
138
+ def index_properties
139
+ @index_properties ||= %i[
140
+ title
141
+ creator
142
+ publisher
143
+ contributor_combined
144
+ date
145
+ keyword
146
+ subject
147
+ resource_type
148
+ rights_statement
149
+ license
150
+ language
151
+ depositor
152
+ proxy_depositor
153
+ embargo_release_date
154
+ lease_expiration_date
155
+ ]
156
+ end
157
+
158
+ attr_writer :exclude_from_search_properties
159
+ def exclude_from_search_properties
160
+ @exclude_from_search_properties ||= %i[
161
+ last_access
162
+ number_of_downloads
163
+ aip_current_path
164
+ dip_current_path
165
+ aip_current_location
166
+ dip_current_location
167
+ aip_resource_uri
168
+ dip_resource_uri
169
+ packaged_by_ids
170
+ ]
171
+ end
172
+
173
+ # Render these properties as singular in the form
174
+ attr_writer :singular_properties
175
+ def singular_properties
176
+ @singular_properties ||= %i[
177
+ date_accepted
178
+ date_available
179
+ date_created
180
+ date_collected
181
+ date_copyrighted
182
+ date_issued
183
+ date_published
184
+ date_submitted
185
+ date_updated
186
+ date_valid
187
+ end_date
188
+ event_date
189
+ issue_number
190
+ pagination
191
+ publication_status
192
+ refereed
193
+ start_date
194
+ volume_number
195
+ aip_uuid
196
+ transfer_uuid
197
+ sip_uuid
198
+ dip_uuid
199
+ aip_status
200
+ dip_status
201
+ aip_size
202
+ dip_size
203
+ aip_current_path
204
+ dip_current_path
205
+ aip_current_location
206
+ dip_current_location
207
+ aip_resource_uri
208
+ dip_resource_uri
209
+ origin_pipeline
210
+ last_access
211
+ number_of_downloads
212
+ ]
213
+ end
214
+
215
+ # All of these are date properties
216
+ # These will be indexed into the date_picker if present
217
+ attr_writer :date_properties
218
+ def date_properties
219
+ @date_properties ||= %i[
220
+ date_accepted
221
+ date_available
222
+ date_collected
223
+ date_copyrighted
224
+ date_created
225
+ date_issued
226
+ date_published
227
+ date_submitted
228
+ date_updated
229
+ date_valid
230
+ date_of_award
231
+ end_date
232
+ event_date
233
+ start_date
234
+ ]
235
+ end
236
+
237
+ # Enable restricted properties in the form.
238
+ # If set to false, no restrictions will be applied
239
+ # Default is false
240
+ attr_writer :restricted_properties_enabled
241
+ def restricted_properties_enabled
242
+ @restricted_properties_enabled ||= false
243
+ end
244
+
245
+ # Restrict the following properties in the form to the role specified in
246
+ # restricted_role
247
+ # Restrictions apply to 'below the fold' properties only, they are not
248
+ # applied to required properties
249
+ # Restrictions apply in the form only, properties are still visible in the
250
+ # show page
251
+ # Default is none
252
+ attr_writer :restricted_properties
253
+ def restricted_properties
254
+ @restricted_properties ||= %i[last_access number_of_downloads]
255
+ end
256
+
257
+ # Role to use when restricting properties
258
+ # Default is :admin
259
+ attr_writer :restricted_role
260
+ def restricted_role
261
+ @restricted_role ||= :admin
262
+ end
263
+
264
+ # ConferenceItem
265
+
266
+ # Properties in order:
267
+ # basic metadata (as per Hyrax),
268
+ # this model (alphebetized),
269
+ # remaining common properties and resource_type (alphebeized)
270
+ attr_writer :conference_item_properties
271
+
272
+ def conference_item_properties
273
+ properties = %i[abstract
274
+ date_published
275
+ date_available
276
+ date_accepted
277
+ date_submitted
278
+ editor
279
+ event_date
280
+ isbn
281
+ official_url
282
+ pagination
283
+ place_of_publication
284
+ publication_status
285
+ presented_at
286
+ part_of
287
+ refereed]
288
+ properties = base_properties + properties + common_properties
289
+ properties.sort!
290
+ @conference_item_properties ||= properties
291
+ end
292
+
293
+ attr_writer :conference_item_properties_required
294
+
295
+ def conference_item_properties_required
296
+ @conference_item_properties_required ||= required_properties
297
+ end
298
+
299
+ # DigitalArchivalObject
300
+
301
+ attr_writer :digital_archival_object_properties
302
+
303
+ def digital_archival_object_properties
304
+ properties = %i[access_provided_by
305
+ extent
306
+ part_of
307
+ lat
308
+ long
309
+ alt
310
+ packaged_by_ids]
311
+ properties = base_properties + properties + common_properties
312
+ properties.sort!
313
+ @digital_archival_object_properties ||= properties
314
+ end
315
+
316
+ attr_writer :digital_archival_object_properties_required
317
+
318
+ def digital_archival_object_properties_required
319
+ @digital_archival_object_properties_required ||= required_properties
320
+ end
321
+
322
+ # PublishedWork
323
+
324
+ attr_writer :published_work_properties
325
+ def published_work_properties
326
+ properties = %i[abstract
327
+ date_published
328
+ date_available
329
+ date_accepted
330
+ date_submitted
331
+ edition
332
+ editor
333
+ isbn
334
+ issue_number
335
+ official_url
336
+ pagination
337
+ part
338
+ place_of_publication
339
+ publication_status
340
+ refereed
341
+ series
342
+ volume_number]
343
+ properties = base_properties + properties + common_properties
344
+ properties.sort!
345
+ @published_work_properties ||= properties
346
+ end
347
+
348
+ attr_writer :published_work_properties_required
349
+
350
+ def published_work_properties_required
351
+ @published_work_properties_required ||= required_properties
352
+ end
353
+
354
+ attr_writer :journal_article_properties
355
+
356
+ def journal_article_properties
357
+ properties = %i[abstract
358
+ date_published
359
+ date_available
360
+ date_accepted
361
+ date_submitted
362
+ issue_number
363
+ part_of
364
+ official_url
365
+ pagination
366
+ publication_status
367
+ refereed
368
+ volume_number]
369
+ properties = base_properties + properties + common_properties
370
+ properties.sort!
371
+ @journal_article_properties ||= properties
372
+ end
373
+
374
+ attr_writer :journal_article_properties_required
375
+
376
+ def journal_article_properties_required
377
+ @journal_article_properties_required ||= required_properties
378
+ end
379
+
380
+ attr_writer :thesis_properties
381
+ # omitting orcid
382
+ def thesis_properties
383
+ properties = %i[abstract
384
+ advisor
385
+ date_of_award
386
+ awarding_institution
387
+ qualification_level
388
+ qualification_name]
389
+ properties = base_properties + properties + common_properties
390
+ properties.sort!
391
+ @thesis_properties ||= properties
392
+ end
393
+
394
+ attr_writer :thesis_properties_required
395
+
396
+ def thesis_properties_required
397
+ @thesis_properties_required ||= required_properties
398
+ end
399
+
400
+ attr_writer :exam_paper_properties
401
+
402
+ def exam_paper_properties
403
+ properties = %i[module_code
404
+ qualification_level
405
+ qualification_name
406
+ date_available]
407
+ properties = base_properties + properties + common_properties
408
+ properties.sort!
409
+ @exam_paper_properties ||= properties
410
+ end
411
+
412
+ attr_writer :exam_paper_properties_required
413
+
414
+ def exam_paper_properties_required
415
+ @exam_paper_properties_required ||= required_properties
416
+ end
417
+
418
+ attr_writer :dataset_properties
419
+
420
+ # omitting pure (_uuid, _creation, _type and _link),
421
+ # requestor_email
422
+ # these are admin info, not for standard form/view
423
+ def dataset_properties
424
+ properties = %i[
425
+ abstract
426
+ content_version
427
+ date_accepted
428
+ date_available
429
+ date_collected
430
+ date_copyrighted
431
+ date_issued
432
+ date_published
433
+ date_submitted
434
+ date_updated
435
+ date_valid
436
+ dc_access_rights
437
+ dc_format
438
+ extent
439
+ has_restriction
440
+ last_access
441
+ number_of_downloads
442
+ resource_type_general
443
+ subtitle
444
+ ]
445
+ properties = base_properties + properties + common_properties
446
+ properties.sort!
447
+ @dataset_properties ||= properties
448
+ end
449
+
450
+ attr_writer :dataset_properties_required
451
+
452
+ # use datacite mandatory
453
+ # exclude doi as this may be generated later in workflow
454
+ def dataset_properties_required
455
+ @dataset_properties_required ||= %i[
456
+ creator
457
+ title
458
+ publisher
459
+ date_published
460
+ resource_type_general
461
+ resource_type
462
+ ]
463
+ end
464
+
465
+ attr_writer :package_properties
466
+
467
+ def package_properties
468
+ properties = %i[
469
+ aip_uuid
470
+ transfer_uuid
471
+ sip_uuid
472
+ dip_uuid
473
+ aip_status
474
+ dip_status
475
+ aip_size
476
+ dip_size
477
+ aip_current_path
478
+ dip_current_path
479
+ aip_current_location
480
+ dip_current_location
481
+ aip_resource_uri
482
+ dip_resource_uri
483
+ origin_pipeline
484
+ package_ids
485
+ ]
486
+ properties = base_properties + properties + common_properties
487
+ properties.sort!
488
+ @package_properties ||= properties
489
+ end
490
+
491
+ attr_writer :package_properties_required
492
+
493
+ def package_properties_required
494
+ @package_properties_required ||= required_properties
495
+ end
496
+
497
+ # attr_writer :creator_class
498
+ #
499
+ # def creator_class
500
+ # @creator_class ||= String
501
+ # end
502
+ end
503
+ end
504
+
505
+ # rubocop:enable Metrics/MethodLength
506
+ # rubocop:enable Metrics/ClassLength