dog_biscuits 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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