hyrax 3.0.0.pre.rc2 → 3.0.0.pre.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (514) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +5 -5
  3. data/.dassie/.env +4 -0
  4. data/.dassie/.gitignore +27 -0
  5. data/.dassie/Gemfile +57 -0
  6. data/.dassie/README.md +3 -0
  7. data/.dassie/Rakefile +6 -0
  8. data/.dassie/app/actors/hyrax/actors/generic_work_actor.rb +8 -0
  9. data/.dassie/app/actors/hyrax/actors/namespaced_works/nested_work_actor.rb +8 -0
  10. data/.dassie/app/assets/config/manifest.js +3 -0
  11. data/.dassie/app/assets/images/.keep +0 -0
  12. data/.dassie/app/assets/images/unauthorized.png +0 -0
  13. data/.dassie/app/assets/images/us_404.svg +91 -0
  14. data/.dassie/app/assets/javascripts/application.js +26 -0
  15. data/.dassie/app/assets/javascripts/blacklight_gallery.js +1 -0
  16. data/.dassie/app/assets/javascripts/cable.js +13 -0
  17. data/.dassie/app/assets/javascripts/channels/.keep +0 -0
  18. data/.dassie/app/assets/javascripts/openseadragon.js +2 -0
  19. data/.dassie/app/assets/stylesheets/application.css +16 -0
  20. data/.dassie/app/assets/stylesheets/hyrax.scss +17 -0
  21. data/.dassie/app/assets/stylesheets/openseadragon.css +3 -0
  22. data/.dassie/app/channels/application_cable/channel.rb +4 -0
  23. data/.dassie/app/channels/application_cable/connection.rb +4 -0
  24. data/.dassie/app/controllers/application_controller.rb +14 -0
  25. data/.dassie/app/controllers/catalog_controller.rb +300 -0
  26. data/.dassie/app/controllers/concerns/.keep +0 -0
  27. data/.dassie/app/controllers/hyrax/generic_works_controller.rb +14 -0
  28. data/.dassie/app/controllers/hyrax/monographs_controller.rb +17 -0
  29. data/.dassie/app/controllers/hyrax/namespaced_works/nested_works_controller.rb +14 -0
  30. data/.dassie/app/forms/hyrax/generic_work_form.rb +9 -0
  31. data/.dassie/app/forms/hyrax/namespaced_works/nested_work_form.rb +9 -0
  32. data/.dassie/app/forms/monograph_form.rb +20 -0
  33. data/.dassie/app/helpers/application_helper.rb +2 -0
  34. data/.dassie/app/helpers/hyrax_helper.rb +6 -0
  35. data/.dassie/app/indexers/generic_work_indexer.rb +18 -0
  36. data/.dassie/app/indexers/monograph_indexer.rb +16 -0
  37. data/.dassie/app/indexers/namespaced_works/nested_work_indexer.rb +18 -0
  38. data/.dassie/app/jobs/application_job.rb +2 -0
  39. data/.dassie/app/mailers/application_mailer.rb +4 -0
  40. data/.dassie/app/models/ability.rb +21 -0
  41. data/.dassie/app/models/application_record.rb +3 -0
  42. data/.dassie/app/models/collection.rb +8 -0
  43. data/.dassie/app/models/concerns/.keep +0 -0
  44. data/.dassie/app/models/file_set.rb +5 -0
  45. data/.dassie/app/models/generic_work.rb +14 -0
  46. data/.dassie/app/models/monograph.rb +8 -0
  47. data/.dassie/app/models/namespaced_works/nested_work.rb +16 -0
  48. data/.dassie/app/models/qa.rb +5 -0
  49. data/.dassie/app/models/qa/local_authority.rb +2 -0
  50. data/.dassie/app/models/qa/local_authority_entry.rb +3 -0
  51. data/.dassie/app/models/search_builder.rb +16 -0
  52. data/.dassie/app/models/solr_document.rb +28 -0
  53. data/.dassie/app/models/time_span.rb +22 -0
  54. data/.dassie/app/models/user.rb +26 -0
  55. data/.dassie/app/presenters/hyrax/generic_work_presenter.rb +6 -0
  56. data/.dassie/app/presenters/hyrax/namespaced_works/nested_work_presenter.rb +6 -0
  57. data/.dassie/app/views/hyrax/generic_works/_generic_work.html.erb +2 -0
  58. data/.dassie/app/views/hyrax/monographs/_monograph.html.erb +2 -0
  59. data/.dassie/app/views/hyrax/namespaced_works/nested_works/_nested_work.html.erb +2 -0
  60. data/.dassie/app/views/layouts/application.html.erb +15 -0
  61. data/.dassie/app/views/layouts/mailer.html.erb +13 -0
  62. data/.dassie/app/views/layouts/mailer.text.erb +1 -0
  63. data/.dassie/bin/bundle +3 -0
  64. data/.dassie/bin/rails +9 -0
  65. data/.dassie/bin/rake +9 -0
  66. data/.dassie/bin/setup +36 -0
  67. data/.dassie/bin/spring +17 -0
  68. data/.dassie/bin/update +31 -0
  69. data/.dassie/bin/yarn +11 -0
  70. data/.dassie/config.ru +5 -0
  71. data/.dassie/config/analytics.yml +6 -0
  72. data/.dassie/config/application.rb +22 -0
  73. data/.dassie/config/arkivo.yml +6 -0
  74. data/.dassie/config/authorities/licenses.yml +46 -0
  75. data/.dassie/config/authorities/resource_types.yml +41 -0
  76. data/.dassie/config/authorities/rights_statements.yml +37 -0
  77. data/.dassie/config/blacklight.yml +9 -0
  78. data/.dassie/config/boot.rb +4 -0
  79. data/.dassie/config/browse_everything_providers.yml +2 -0
  80. data/.dassie/config/cable.yml +10 -0
  81. data/.dassie/config/credentials.yml.enc +1 -0
  82. data/.dassie/config/environment.rb +5 -0
  83. data/.dassie/config/environments/development.rb +69 -0
  84. data/.dassie/config/environments/production.rb +94 -0
  85. data/.dassie/config/environments/test.rb +51 -0
  86. data/.dassie/config/fedora.yml +15 -0
  87. data/.dassie/config/initializers/arkivo_constraint.rb +12 -0
  88. data/.dassie/config/initializers/assets.rb +2 -0
  89. data/.dassie/config/initializers/clamav.rb +2 -0
  90. data/.dassie/config/initializers/cookies_serializer.rb +1 -0
  91. data/.dassie/config/initializers/devise.rb +13 -0
  92. data/.dassie/config/initializers/filter_parameter_logging.rb +1 -0
  93. data/.dassie/config/initializers/hydra_config.rb +6 -0
  94. data/.dassie/config/initializers/hyrax.rb +48 -0
  95. data/.dassie/config/initializers/mailboxer.rb +21 -0
  96. data/.dassie/config/initializers/mime_types.rb +4 -0
  97. data/.dassie/config/initializers/mini_magick.rb +6 -0
  98. data/.dassie/config/initializers/redis_config.rb +4 -0
  99. data/.dassie/config/initializers/riiif.rb +27 -0
  100. data/.dassie/config/initializers/simple_form.rb +28 -0
  101. data/.dassie/config/initializers/simple_form_bootstrap.rb +143 -0
  102. data/.dassie/config/initializers/wrap_parameters.rb +3 -0
  103. data/.dassie/config/locales/blacklight.en.yml +3 -0
  104. data/.dassie/config/locales/devise.en.yml +65 -0
  105. data/.dassie/config/locales/generic_work.de.yml +8 -0
  106. data/.dassie/config/locales/generic_work.en.yml +8 -0
  107. data/.dassie/config/locales/generic_work.es.yml +10 -0
  108. data/.dassie/config/locales/generic_work.fr.yml +8 -0
  109. data/.dassie/config/locales/generic_work.it.yml +8 -0
  110. data/.dassie/config/locales/generic_work.pt-BR.yml +8 -0
  111. data/.dassie/config/locales/generic_work.zh.yml +10 -0
  112. data/.dassie/config/locales/hyrax.de.yml +58 -0
  113. data/.dassie/config/locales/hyrax.en.yml +58 -0
  114. data/.dassie/config/locales/hyrax.es.yml +58 -0
  115. data/.dassie/config/locales/hyrax.fr.yml +58 -0
  116. data/.dassie/config/locales/hyrax.it.yml +58 -0
  117. data/.dassie/config/locales/hyrax.pt-BR.yml +58 -0
  118. data/.dassie/config/locales/hyrax.zh.yml +58 -0
  119. data/.dassie/config/locales/namespaced_works/nested_work.de.yml +8 -0
  120. data/.dassie/config/locales/namespaced_works/nested_work.en.yml +8 -0
  121. data/.dassie/config/locales/namespaced_works/nested_work.es.yml +10 -0
  122. data/.dassie/config/locales/namespaced_works/nested_work.fr.yml +8 -0
  123. data/.dassie/config/locales/namespaced_works/nested_work.it.yml +8 -0
  124. data/.dassie/config/locales/namespaced_works/nested_work.pt-BR.yml +8 -0
  125. data/.dassie/config/locales/namespaced_works/nested_work.zh.yml +10 -0
  126. data/.dassie/config/metadata/monograph.yaml +55 -0
  127. data/.dassie/config/metadata/sample_metadata.yaml +3 -0
  128. data/.dassie/config/puma.rb +6 -0
  129. data/.dassie/config/redis.yml +9 -0
  130. data/.dassie/config/role_map.yml +24 -0
  131. data/.dassie/config/routes.rb +35 -0
  132. data/.dassie/config/solr.yml +7 -0
  133. data/.dassie/config/spring.rb +6 -0
  134. data/.dassie/config/storage.yml +7 -0
  135. data/.dassie/config/tinymce.yml +12 -0
  136. data/.dassie/config/uv/uv-config.json +3 -0
  137. data/.dassie/config/uv/uv.html +87 -0
  138. data/.dassie/config/valkyrie_index.yml +12 -0
  139. data/.dassie/config/workflows/default_workflow.json +21 -0
  140. data/.dassie/config/workflows/mediated_deposit_workflow.json +76 -0
  141. data/.dassie/config/zotero.yml +6 -0
  142. data/.dassie/db/migrate/20200821212749_create_searches.blacklight.rb +17 -0
  143. data/.dassie/db/migrate/20200821212750_create_bookmarks.blacklight.rb +19 -0
  144. data/.dassie/db/migrate/20200821212751_add_polymorphic_type_to_bookmarks.blacklight.rb +9 -0
  145. data/.dassie/db/migrate/20200821212803_devise_create_users.rb +44 -0
  146. data/.dassie/db/migrate/20200821212806_add_devise_guests_to_users.rb +15 -0
  147. data/.dassie/db/migrate/20200821212828_create_version_committers.hyrax.rb +15 -0
  148. data/.dassie/db/migrate/20200821212829_create_checksum_audit_logs.hyrax.rb +19 -0
  149. data/.dassie/db/migrate/20200821212830_create_single_use_links.hyrax.rb +12 -0
  150. data/.dassie/db/migrate/20200821212831_add_social_to_users.hyrax.rb +13 -0
  151. data/.dassie/db/migrate/20200821212832_add_ldap_attrs_to_user.hyrax.rb +27 -0
  152. data/.dassie/db/migrate/20200821212833_add_avatars_to_users.hyrax.rb +15 -0
  153. data/.dassie/db/migrate/20200821212834_create_trophies.hyrax.rb +10 -0
  154. data/.dassie/db/migrate/20200821212835_add_linkedin_to_users.hyrax.rb +5 -0
  155. data/.dassie/db/migrate/20200821212836_create_tinymce_assets.hyrax.rb +8 -0
  156. data/.dassie/db/migrate/20200821212837_create_content_blocks.hyrax.rb +10 -0
  157. data/.dassie/db/migrate/20200821212838_create_featured_works.hyrax.rb +12 -0
  158. data/.dassie/db/migrate/20200821212839_add_external_key_to_content_blocks.hyrax.rb +6 -0
  159. data/.dassie/db/migrate/20200821212840_create_proxy_deposit_rights.hyrax.rb +10 -0
  160. data/.dassie/db/migrate/20200821212841_create_proxy_deposit_requests.hyrax.rb +15 -0
  161. data/.dassie/db/migrate/20200821212842_create_file_view_stats.hyrax.rb +12 -0
  162. data/.dassie/db/migrate/20200821212843_create_file_download_stats.hyrax.rb +12 -0
  163. data/.dassie/db/migrate/20200821212844_add_orcid_to_users.hyrax.rb +5 -0
  164. data/.dassie/db/migrate/20200821212845_create_user_stats.hyrax.rb +19 -0
  165. data/.dassie/db/migrate/20200821212846_create_work_view_stats.hyrax.rb +12 -0
  166. data/.dassie/db/migrate/20200821212847_add_works_to_user_stats.hyrax.rb +13 -0
  167. data/.dassie/db/migrate/20200821212848_change_trophy_generic_file_id_to_work_id.hyrax.rb +5 -0
  168. data/.dassie/db/migrate/20200821212849_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb +5 -0
  169. data/.dassie/db/migrate/20200821212850_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb +5 -0
  170. data/.dassie/db/migrate/20200821212851_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb +5 -0
  171. data/.dassie/db/migrate/20200821212852_create_uploaded_files.hyrax.rb +10 -0
  172. data/.dassie/db/migrate/20200821212853_create_features.hyrax.rb +10 -0
  173. data/.dassie/db/migrate/20200821212854_create_operations.hyrax.rb +23 -0
  174. data/.dassie/db/migrate/20200821212855_change_featured_work_generic_file_id_to_work_id.hyrax.rb +6 -0
  175. data/.dassie/db/migrate/20200821212856_add_arkivo_to_users.hyrax.rb +8 -0
  176. data/.dassie/db/migrate/20200821212857_create_sipity.hyrax.rb +163 -0
  177. data/.dassie/db/migrate/20200821212858_create_sipity_workflow_methods.hyrax.rb +10 -0
  178. data/.dassie/db/migrate/20200821212859_create_permission_template.hyrax.rb +11 -0
  179. data/.dassie/db/migrate/20200821212860_create_permission_template_access.hyrax.rb +11 -0
  180. data/.dassie/db/migrate/20200821212861_add_release_to_permission_templates.hyrax.rb +6 -0
  181. data/.dassie/db/migrate/20200821212862_add_permission_template_to_sipity_workflow.hyrax.rb +26 -0
  182. data/.dassie/db/migrate/20200821212863_tidy_up_because_of_bad_exception.hyrax.rb +13 -0
  183. data/.dassie/db/migrate/20200821212864_add_allows_access_grant_to_workflow.hyrax.rb +5 -0
  184. data/.dassie/db/migrate/20200821212865_change_checksum_audit_log.hyrax.rb +18 -0
  185. data/.dassie/db/migrate/20200821212866_create_job_io_wrappers.hyrax.rb +15 -0
  186. data/.dassie/db/migrate/20200821212867_create_collection_types.hyrax.rb +17 -0
  187. data/.dassie/db/migrate/20200821212868_update_collection_type_column_names.hyrax.rb +9 -0
  188. data/.dassie/db/migrate/20200821212869_update_collection_type_column_options.hyrax.rb +17 -0
  189. data/.dassie/db/migrate/20200821212870_create_collection_branding_infos.hyrax.rb +15 -0
  190. data/.dassie/db/migrate/20200821212871_create_collection_type_participants.hyrax.rb +11 -0
  191. data/.dassie/db/migrate/20200821212872_rename_admin_set_id_to_source_id.hyrax.rb +5 -0
  192. data/.dassie/db/migrate/20200821212873_add_preferred_locale_to_users.hyrax.rb +5 -0
  193. data/.dassie/db/migrate/20200821212874_add_collection_type_sharing_options.hyrax.rb +5 -0
  194. data/.dassie/db/migrate/20200821212875_add_unique_constraint_to_permission_template_accesses.hyrax.rb +8 -0
  195. data/.dassie/db/migrate/20200821212876_add_branding_to_collection_type.hyrax.rb +5 -0
  196. data/.dassie/db/migrate/20200821212877_add_badge_color_to_collection_types.hyrax.rb +5 -0
  197. data/.dassie/db/migrate/20200821212878_update_single_use_links_column_names.hyrax.rb +6 -0
  198. data/.dassie/db/migrate/20200821212879_change_sipity_entity_specific_responsibility.hyrax.rb +9 -0
  199. data/.dassie/db/migrate/20200821212880_create_mailboxer.mailboxer_engine.rb +65 -0
  200. data/.dassie/db/migrate/20200821212881_add_conversation_optout.mailboxer_engine.rb +15 -0
  201. data/.dassie/db/migrate/20200821212882_add_missing_indices.mailboxer_engine.rb +20 -0
  202. data/.dassie/db/migrate/20200821212883_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb +8 -0
  203. data/.dassie/db/migrate/20200821212884_create_qa_local_authorities.rb +10 -0
  204. data/.dassie/db/migrate/20200821212885_create_qa_local_authority_entries.rb +12 -0
  205. data/.dassie/db/migrate/20200821212902_create_minter_states.noid_rails_engine.rb +17 -0
  206. data/.dassie/db/migrate/20200821212903_rename_minter_state_random_to_rand.noid_rails_engine.rb +8 -0
  207. data/.dassie/db/schema.rb +563 -0
  208. data/.dassie/db/seeds.rb +14 -0
  209. data/.dassie/lib/assets/.keep +0 -0
  210. data/.dassie/lib/tasks/.keep +0 -0
  211. data/.dassie/log/.keep +0 -0
  212. data/.dassie/package.json +17 -0
  213. data/.dassie/public/404.html +67 -0
  214. data/.dassie/public/422.html +67 -0
  215. data/.dassie/public/500.html +66 -0
  216. data/.dassie/public/apple-touch-icon-precomposed.png +0 -0
  217. data/.dassie/public/apple-touch-icon.png +0 -0
  218. data/.dassie/public/favicon.ico +0 -0
  219. data/.dassie/public/robots.txt +1 -0
  220. data/.dassie/solr/conf/_rest_managed.json +3 -0
  221. data/.dassie/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
  222. data/.dassie/solr/conf/schema.xml +367 -0
  223. data/.dassie/solr/conf/scripts.conf +24 -0
  224. data/.dassie/solr/conf/solrconfig.xml +208 -0
  225. data/.dassie/solr/conf/stopwords.txt +58 -0
  226. data/.dassie/solr/conf/stopwords_en.txt +58 -0
  227. data/.dassie/solr/conf/xslt/example.xsl +132 -0
  228. data/.dassie/solr/conf/xslt/example_atom.xsl +67 -0
  229. data/.dassie/solr/conf/xslt/example_rss.xsl +66 -0
  230. data/.dassie/solr/conf/xslt/luke.xsl +337 -0
  231. data/.dassie/solr/sample_solr_documents.yml +2692 -0
  232. data/.dassie/storage/.keep +0 -0
  233. data/.dassie/values.stage.yaml +7 -0
  234. data/.dassie/values.yaml +15 -0
  235. data/.dassie/vendor/.keep +0 -0
  236. data/.dockerignore +11 -0
  237. data/.env +26 -0
  238. data/.github/CODE_OF_CONDUCT.md +4 -4
  239. data/.github/CONTRIBUTING.md +1 -1
  240. data/.github/SUPPORT.md +13 -1
  241. data/.gitignore +1 -1
  242. data/.regen +1 -1
  243. data/.rubocop.yml +1 -0
  244. data/.rubocop_fixme.yml +4 -0
  245. data/CODE_OF_CONDUCT.md +4 -4
  246. data/CONTAINERS.md +148 -0
  247. data/CONTRIBUTING.md +1 -1
  248. data/Dockerfile +75 -0
  249. data/Gemfile +26 -35
  250. data/README.md +61 -288
  251. data/app/actors/hyrax/actors/attach_members_actor.rb +7 -5
  252. data/app/actors/hyrax/actors/base_actor.rb +0 -1
  253. data/app/actors/hyrax/actors/create_with_files_ordered_members_actor.rb +28 -28
  254. data/app/actors/hyrax/actors/create_with_remote_files_actor.rb +2 -3
  255. data/app/actors/hyrax/actors/create_with_remote_files_ordered_members_actor.rb +23 -28
  256. data/app/actors/hyrax/actors/default_admin_set_actor.rb +20 -21
  257. data/app/actors/hyrax/actors/file_actor.rb +32 -32
  258. data/app/actors/hyrax/actors/file_set_actor.rb +4 -15
  259. data/app/actors/hyrax/actors/initialize_workflow_actor.rb +8 -0
  260. data/app/actors/hyrax/actors/transfer_request_actor.rb +5 -0
  261. data/app/assets/javascripts/hyrax.js +1 -0
  262. data/app/assets/javascripts/hyrax/skip_to_content.js +15 -0
  263. data/app/assets/stylesheets/hyrax/_usage-stats.scss +1 -1
  264. data/app/authorities/qa/authorities/collections.rb +18 -8
  265. data/app/authorities/qa/authorities/find_works.rb +20 -5
  266. data/app/controllers/concerns/hyrax/collections_controller_behavior.rb +15 -6
  267. data/app/controllers/concerns/hyrax/works_controller_behavior.rb +62 -31
  268. data/app/controllers/hyrax/dashboard/collections_controller.rb +22 -12
  269. data/app/controllers/hyrax/dashboard/works_controller.rb +3 -4
  270. data/app/controllers/hyrax/file_sets_controller.rb +19 -10
  271. data/app/controllers/hyrax/homepage_controller.rb +11 -11
  272. data/app/controllers/hyrax/my/collections_controller.rb +5 -6
  273. data/app/controllers/hyrax/my/highlights_controller.rb +2 -3
  274. data/app/controllers/hyrax/my/shares_controller.rb +2 -3
  275. data/app/controllers/hyrax/my/works_controller.rb +1 -6
  276. data/app/controllers/hyrax/my_controller.rb +10 -2
  277. data/app/controllers/hyrax/permissions_controller.rb +1 -0
  278. data/app/controllers/hyrax/single_use_links_viewer_controller.rb +11 -5
  279. data/app/controllers/hyrax/users_controller.rb +5 -10
  280. data/app/forms/hyrax/forms/failed_submission_form_wrapper.rb +136 -0
  281. data/app/forms/hyrax/forms/resource_form.rb +8 -4
  282. data/app/helpers/hyrax/collections_helper.rb +1 -1
  283. data/app/helpers/hyrax/dashboard_helper_behavior.rb +7 -2
  284. data/app/helpers/hyrax/embargo_helper.rb +5 -1
  285. data/app/helpers/hyrax/hyrax_helper_behavior.rb +10 -5
  286. data/app/helpers/hyrax/lease_helper.rb +5 -1
  287. data/app/indexers/hyrax/pcdm_collection_indexer.rb +21 -0
  288. data/app/indexers/hyrax/resource_indexer.rb +3 -1
  289. data/app/indexers/hyrax/valkyrie_collection_indexer.rb +3 -12
  290. data/app/indexers/hyrax/valkyrie_indexer.rb +45 -17
  291. data/app/indexers/hyrax/valkyrie_work_indexer.rb +16 -0
  292. data/app/jobs/attach_files_to_work_job.rb +3 -41
  293. data/app/jobs/embargo_expiry_job.rb +15 -0
  294. data/app/jobs/event_job.rb +14 -7
  295. data/app/jobs/hyrax/application_job.rb +6 -1
  296. data/app/jobs/import_url_job.rb +11 -5
  297. data/app/jobs/inherit_permissions_job.rb +6 -25
  298. data/app/jobs/lease_expiry_job.rb +15 -0
  299. data/app/models/admin_set.rb +1 -1
  300. data/app/models/concerns/hyrax/ability.rb +192 -21
  301. data/app/models/concerns/hyrax/ability/admin_set_ability.rb +0 -5
  302. data/app/models/concerns/hyrax/collection_behavior.rb +7 -13
  303. data/app/models/concerns/hyrax/permissions/writable.rb +2 -2
  304. data/app/models/concerns/hyrax/solr_document/characterization.rb +35 -2
  305. data/app/models/concerns/hyrax/solr_document_behavior.rb +37 -5
  306. data/app/models/hyrax/change_set.rb +5 -1
  307. data/app/models/hyrax/collection_type.rb +59 -22
  308. data/app/models/hyrax/event.rb +5 -7
  309. data/app/models/hyrax/file_metadata.rb +15 -4
  310. data/app/models/hyrax/pcdm_collection.rb +13 -0
  311. data/app/models/hyrax/uploaded_file.rb +9 -2
  312. data/app/models/hyrax/{active_job_proxy.rb → valkyrie_global_id_proxy.rb} +6 -5
  313. data/app/models/hyrax/virus_scanner.rb +2 -1
  314. data/app/models/hyrax/work.rb +1 -1
  315. data/app/models/sipity.rb +6 -0
  316. data/app/models/sipity/entity.rb +1 -1
  317. data/app/models/sipity/workflow.rb +23 -3
  318. data/app/presenters/hyrax/admin/repository_object_presenter.rb +7 -2
  319. data/app/presenters/hyrax/collection_presenter.rb +1 -1
  320. data/app/presenters/hyrax/file_set_presenter.rb +3 -0
  321. data/app/presenters/hyrax/iiif_manifest_presenter.rb +3 -3
  322. data/app/presenters/hyrax/permission_badge.rb +1 -1
  323. data/app/presenters/hyrax/presenter_factory.rb +0 -2
  324. data/app/presenters/hyrax/select_collection_type_presenter.rb +16 -3
  325. data/app/presenters/hyrax/select_type_presenter.rb +3 -2
  326. data/app/presenters/hyrax/stats_usage_presenter.rb +0 -1
  327. data/app/presenters/hyrax/work_show_presenter.rb +1 -1
  328. data/app/renderers/hyrax/renderers/attribute_renderer.rb +16 -6
  329. data/app/search_builders/hyrax/README.md +3 -3
  330. data/app/search_builders/hyrax/admin_admin_set_member_search_builder.rb +8 -2
  331. data/app/search_builders/hyrax/collection_member_search_builder.rb +21 -7
  332. data/app/search_builders/hyrax/dashboard/managed_search_filters.rb +1 -1
  333. data/app/search_builders/hyrax/dashboard/nested_collections_search_builder.rb +1 -1
  334. data/app/search_builders/hyrax/embargo_search_builder.rb +0 -1
  335. data/app/search_builders/hyrax/filter_by_type.rb +3 -1
  336. data/app/search_builders/hyrax/lease_search_builder.rb +0 -1
  337. data/app/search_builders/hyrax/nested_collections_parent_search_builder.rb +12 -2
  338. data/app/search_builders/hyrax/search_builder.rb +1 -4
  339. data/app/search_builders/hyrax/search_filters.rb +0 -2
  340. data/app/services/hyrax/access_control_list.rb +33 -2
  341. data/app/services/hyrax/adapters/nesting_index_adapter.rb +26 -7
  342. data/app/services/hyrax/admin_set_member_service.rb +18 -4
  343. data/{lib/hyrax/callbacks/registry.rb → app/services/hyrax/callbacks.rb} +23 -0
  344. data/app/services/hyrax/change_content_depositor_service.rb +4 -1
  345. data/app/services/hyrax/collection_member_service.rb +5 -1
  346. data/app/services/hyrax/collection_types/permissions_service.rb +0 -2
  347. data/app/services/hyrax/collections/collection_member_service.rb +44 -64
  348. data/app/services/hyrax/collections/managed_collections_service.rb +15 -2
  349. data/app/services/hyrax/collections/migration_service.rb +9 -3
  350. data/app/services/hyrax/collections/nested_collection_persistence_service.rb +1 -1
  351. data/app/services/hyrax/collections/nested_collection_query_service.rb +39 -19
  352. data/app/services/hyrax/collections/permissions_service.rb +0 -1
  353. data/app/services/hyrax/collections_service.rb +12 -12
  354. data/app/services/hyrax/custom_queries/find_collections_by_type.rb +1 -1
  355. data/app/services/hyrax/custom_queries/navigators/child_collections_navigator.rb +14 -3
  356. data/app/services/hyrax/custom_queries/navigators/child_filesets_navigator.rb +14 -3
  357. data/app/services/hyrax/custom_queries/navigators/child_works_navigator.rb +10 -3
  358. data/app/services/hyrax/custom_queries/navigators/collection_members.rb +1 -0
  359. data/app/services/hyrax/custom_queries/navigators/find_files.rb +3 -0
  360. data/app/services/hyrax/database_migrator.rb +13 -10
  361. data/app/services/hyrax/default_middleware_stack.rb +0 -6
  362. data/app/services/hyrax/ensure_well_formed_admin_set_service.rb +27 -0
  363. data/app/services/hyrax/file_set_fixity_check_service.rb +16 -17
  364. data/app/services/hyrax/file_set_type_service.rb +55 -0
  365. data/app/services/hyrax/graph_exporter.rb +64 -8
  366. data/app/services/hyrax/list_source_exporter.rb +16 -34
  367. data/app/services/hyrax/listeners.rb +22 -0
  368. data/app/services/hyrax/listeners/proxy_deposit_listener.rb +20 -0
  369. data/app/services/hyrax/listeners/workflow_listener.rb +36 -0
  370. data/app/services/hyrax/multiple_membership_checker.rb +2 -1
  371. data/app/services/hyrax/quick_classification_query.rb +2 -3
  372. data/app/services/hyrax/resource_visibility_propagator.rb +1 -1
  373. data/app/services/hyrax/search_service.rb +108 -0
  374. data/app/services/hyrax/simple_schema_loader.rb +3 -1
  375. data/app/services/hyrax/statistics/depositors/summary.rb +0 -1
  376. data/app/services/hyrax/statistics/system_stats.rb +0 -1
  377. data/app/services/hyrax/thumbnail_path_service.rb +6 -1
  378. data/app/services/hyrax/time_service.rb +10 -0
  379. data/app/services/hyrax/versioning_service.rb +4 -28
  380. data/app/services/hyrax/work_uploads_handler.rb +166 -0
  381. data/app/services/hyrax/workflow/action_taken_service.rb +14 -1
  382. data/app/services/hyrax/workflow/grant_edit_to_depositor.rb +3 -1
  383. data/app/services/hyrax/workflow/permission_generator.rb +14 -9
  384. data/app/services/hyrax/workflow/workflow_action_service.rb +1 -1
  385. data/app/services/hyrax/workflow/workflow_factory.rb +12 -10
  386. data/app/services/hyrax/working_directory.rb +0 -1
  387. data/app/services/hyrax/works/managed_works_service.rb +14 -2
  388. data/app/views/_controls.html.erb +1 -1
  389. data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
  390. data/app/views/hyrax/base/_member.html.erb +1 -1
  391. data/app/views/hyrax/base/_representative_media.html.erb +1 -1
  392. data/app/views/hyrax/base/iiif_viewers/_universal_viewer.html.erb +1 -1
  393. data/app/views/hyrax/base/show.html.erb +2 -2
  394. data/app/views/hyrax/batch_select/_add_button.html.erb +1 -1
  395. data/app/views/hyrax/collections/_default_group.html.erb +2 -0
  396. data/app/views/hyrax/collections/show.html.erb +1 -1
  397. data/app/views/hyrax/dashboard/works/_default_group.html.erb +2 -0
  398. data/app/views/hyrax/embargoes/_list_expired_active_embargoes.html.erb +1 -1
  399. data/app/views/hyrax/leases/_list_expired_active_leases.html.erb +2 -1
  400. data/app/views/hyrax/my/works/_default_group.html.erb +2 -0
  401. data/app/views/layouts/hyrax.html.erb +0 -15
  402. data/bin/db-migrate-seed.sh +9 -0
  403. data/bin/db-wait.sh +14 -0
  404. data/bin/hyrax-entrypoint.sh +15 -0
  405. data/chart/fcrepo/.gitignore +2 -0
  406. data/chart/fcrepo/.helmignore +23 -0
  407. data/chart/fcrepo/Chart.yaml +11 -0
  408. data/chart/fcrepo/README.md +50 -0
  409. data/chart/fcrepo/templates/NOTES.txt +21 -0
  410. data/chart/fcrepo/templates/_helpers.tpl +68 -0
  411. data/chart/fcrepo/templates/configmap-env.yaml +19 -0
  412. data/chart/fcrepo/templates/deployment.yaml +109 -0
  413. data/chart/fcrepo/templates/ingress.yaml +41 -0
  414. data/chart/fcrepo/templates/pvc.yaml +20 -0
  415. data/chart/fcrepo/templates/secret.yaml +12 -0
  416. data/chart/fcrepo/templates/service.yaml +15 -0
  417. data/chart/fcrepo/templates/serviceaccount.yaml +12 -0
  418. data/chart/fcrepo/templates/tests/test-connection.yaml +15 -0
  419. data/chart/fcrepo/values.yaml +79 -0
  420. data/chart/hyrax/.gitignore +2 -0
  421. data/chart/hyrax/.helmignore +23 -0
  422. data/chart/hyrax/Chart.yaml +27 -0
  423. data/chart/hyrax/README.md +69 -0
  424. data/chart/hyrax/templates/NOTES.txt +21 -0
  425. data/chart/hyrax/templates/_helpers.tpl +92 -0
  426. data/chart/hyrax/templates/configmap-env.yaml +32 -0
  427. data/chart/hyrax/templates/deployment.yaml +79 -0
  428. data/chart/hyrax/templates/fcrepo-secret.yaml +13 -0
  429. data/chart/hyrax/templates/hpa.yaml +28 -0
  430. data/chart/hyrax/templates/ingress.yaml +41 -0
  431. data/chart/hyrax/templates/secrets.yaml +12 -0
  432. data/chart/hyrax/templates/service.yaml +15 -0
  433. data/chart/hyrax/templates/serviceaccount.yaml +12 -0
  434. data/chart/hyrax/templates/tests/test-connection.yaml +15 -0
  435. data/chart/hyrax/values.yaml +97 -0
  436. data/config/initializers/indexing_adapter_initializer.rb +7 -12
  437. data/config/initializers/listeners.rb +2 -0
  438. data/config/locales/hyrax.en.yml +1 -1
  439. data/config/metadata/basic_metadata.yaml +13 -0
  440. data/db/seeds.rb +20 -0
  441. data/docker-compose.yml +132 -0
  442. data/documentation/developing-your-hyrax-based-app.md +271 -0
  443. data/documentation/legacyREADME.md +336 -0
  444. data/documentation/note-about-versions.md +15 -0
  445. data/hyrax.gemspec +7 -8
  446. data/lib/generators/hyrax/templates/config/initializers/hyrax.rb +4 -6
  447. data/lib/generators/hyrax/templates/config/locales/hyrax.es.yml +1 -1
  448. data/lib/generators/hyrax/templates/db/seeds.rb +16 -14
  449. data/lib/generators/hyrax/templates/uv.html +1 -1
  450. data/lib/generators/hyrax/work_resource/templates/controller.rb.erb +0 -5
  451. data/lib/generators/hyrax/work_resource/templates/form.rb.erb +1 -1
  452. data/lib/generators/hyrax/work_resource/templates/work.html.erb_spec.rb.erb +3 -2
  453. data/lib/hyrax.rb +17 -0
  454. data/lib/hyrax/configuration.rb +340 -200
  455. data/lib/hyrax/event_store.rb +5 -0
  456. data/lib/hyrax/form_fields.rb +1 -1
  457. data/lib/hyrax/indexer.rb +19 -3
  458. data/lib/hyrax/publisher.rb +71 -2
  459. data/lib/hyrax/resource_sync/change_list_writer.rb +1 -1
  460. data/lib/hyrax/resource_sync/resource_list_writer.rb +1 -1
  461. data/lib/hyrax/schema.rb +2 -2
  462. data/lib/hyrax/specs/capybara.rb +98 -0
  463. data/lib/hyrax/specs/clamav.rb +15 -0
  464. data/lib/hyrax/specs/disable_animations_in_test_environment.rb +53 -0
  465. data/lib/hyrax/specs/engine_routes.rb +11 -0
  466. data/lib/hyrax/specs/shared_specs/change_set.rb +11 -0
  467. data/lib/hyrax/specs/shared_specs/factories/strategies/json_strategy.rb +13 -0
  468. data/lib/hyrax/specs/shared_specs/factories/strategies/valkyrie_resource.rb +0 -11
  469. data/lib/hyrax/specs/shared_specs/hydra_works.rb +6 -0
  470. data/lib/hyrax/specs/shared_specs/indexers.rb +22 -5
  471. data/lib/hyrax/specs/shared_specs/metadata.rb +64 -0
  472. data/lib/hyrax/specs/spy_listener.rb +52 -26
  473. data/lib/hyrax/transactions/container.rb +13 -1
  474. data/lib/hyrax/transactions/steps/add_file_sets.rb +35 -0
  475. data/lib/hyrax/transactions/steps/save.rb +10 -4
  476. data/lib/hyrax/transactions/steps/save_access_control.rb +29 -0
  477. data/lib/hyrax/transactions/steps/set_default_admin_set.rb +1 -1
  478. data/lib/hyrax/transactions/update_work.rb +3 -1
  479. data/lib/hyrax/transactions/work_create.rb +3 -1
  480. data/lib/hyrax/version.rb +1 -1
  481. data/lib/tasks/collection_type_global_id.rake +22 -0
  482. data/lib/tasks/default_admin_set.rake +5 -0
  483. data/lib/wings.rb +1 -1
  484. data/lib/wings/active_fedora_converter.rb +71 -123
  485. data/lib/wings/active_fedora_converter/default_work.rb +129 -0
  486. data/lib/wings/active_fedora_converter/nested_resource.rb +25 -0
  487. data/lib/wings/attribute_transformer.rb +28 -1
  488. data/lib/wings/converter_value_mapper.rb +70 -3
  489. data/lib/wings/model_registry.rb +4 -3
  490. data/lib/wings/model_transformer.rb +25 -7
  491. data/lib/wings/orm_converter.rb +19 -23
  492. data/lib/wings/services/custom_queries/find_collections_by_type.rb +1 -1
  493. data/lib/wings/services/custom_queries/find_file_metadata.rb +65 -38
  494. data/lib/wings/services/file_converter_service.rb +6 -55
  495. data/lib/wings/services/file_metadata_builder.rb +12 -8
  496. data/lib/wings/setup.rb +56 -9
  497. data/lib/wings/transformer_value_mapper.rb +1 -0
  498. data/lib/wings/valkyrie/metadata_adapter.rb +2 -2
  499. data/lib/wings/valkyrie/persister.rb +13 -14
  500. data/lib/wings/valkyrie/storage.rb +94 -0
  501. data/tasks/benchmark.rake +56 -0
  502. data/template.rb +1 -3
  503. metadata +346 -54
  504. data/lib/hyrax/callbacks.rb +0 -27
  505. data/lib/wings/hydra/pcdm/models/concerns/collection_valkyrie_behavior.rb +0 -28
  506. data/lib/wings/hydra/pcdm/models/concerns/object_valkyrie_behavior.rb +0 -28
  507. data/lib/wings/hydra/pcdm/models/concerns/pcdm_valkyrie_behavior.rb +0 -171
  508. data/lib/wings/hydra/works/models/concerns/collection_valkyrie_behavior.rb +0 -31
  509. data/lib/wings/hydra/works/models/concerns/file_set_valkyrie_behavior.rb +0 -31
  510. data/lib/wings/hydra/works/models/concerns/work_valkyrie_behavior.rb +0 -60
  511. data/lib/wings/models/concerns/collection_behavior.rb +0 -39
  512. data/lib/wings/models/multi_checksum.rb +0 -18
  513. data/lib/wings/services/id_converter_service.rb +0 -15
  514. data/lib/wings/valkyrie/storage/active_fedora.rb +0 -27
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
- ![Logo](https://raw.githubusercontent.com/samvera/hyrax/gh-pages/assets/images/hyrax_logo_horizontal_white_background.png)
1
+ # Hyrax: A Digital Repository Framework
2
+
3
+ ![Samvera's Hyrax Logo](https://raw.githubusercontent.com/samvera/hyrax/gh-pages/assets/images/hyrax_logo_horizontal_white_background.png)
2
4
 
3
5
  Code: [![Version](https://badge.fury.io/rb/hyrax.png)](http://badge.fury.io/rb/hyrax)
4
6
  [![CircleCI](https://circleci.com/gh/samvera/hyrax.svg?style=svg)](https://circleci.com/gh/samvera/hyrax)
@@ -11,304 +13,70 @@ Docs: [![Documentation Status](https://inch-ci.org/github/samvera/hyrax.svg?bran
11
13
 
12
14
  Jump in: [![Slack Status](http://slack.samvera.org/badge.svg)](http://slack.samvera.org/)
13
15
 
14
- # Table of Contents
15
-
16
- * [What is Hyrax?](#what-is-hyrax)
17
- * [Feature Documentation](#feature-documentation)
18
- * [Help](#help)
19
- * [Getting started](#getting-started)
20
- * [Prerequisites](#prerequisites)
21
- * [Characterization](#characterization)
22
- * [Derivatives](#derivatives)
23
- * [Transcoding](#transcoding)
24
- * [Environments](#environments)
25
- * [Ruby](#ruby)
26
- * [Redis](#redis)
27
- * [Rails](#rails)
28
- * [JavaScript runtime](#javascript-runtime)
29
- * [Creating a Hyrax\-based app](#creating-a-hyrax-based-app)
30
- * [Start servers](#start-servers)
31
- * [Start background workers](#start-background-workers)
32
- * [Create default administrative set](#create-default-administrative-set)
33
- * [Generate a work type](#generate-a-work-type)
34
- * [Enable notifications](#enable-notifications)
35
- * [Managing a Hyrax\-based app](#managing-a-hyrax-based-app)
36
- * [Toggling Features](#toggling-features)
37
- * [License](#license)
38
- * [Contributing](#contributing)
39
- * [Development](#development)
40
- * [Reporting Security Issues](#reporting-security-issues)
41
- * [Workflow Relationship Diagram](#workflow-relationship-diagram)
42
- * [Release process](#release-process)
43
- * [Acknowledgments](#acknowledgments)
44
-
45
- # What is Hyrax?
46
-
47
- Hyrax is a front-end based on the robust [Samvera](http://samvera.org) framework, providing a user interface for common repository features. Hyrax offers the ability to create repository object types on demand, to deposit content via multiple configurable workflows, and to describe content with flexible metadata. Numerous optional features may be turned on in the administrative dashboard or added through plugins. It is implemented as a Rails engine, so it may be the base of, or added to, a Rails application. Hyrax is the consolidation of Sufia and the CurationConcerns gems and behaves in much the same way.
48
-
49
- # Feature Documentation
50
-
51
- * List of features: [Feature Matrix](https://github.com/samvera/hyrax/wiki/Feature-matrix)
52
- * Configuration and enabling features: [Hyrax Management Guide](https://github.com/samvera/hyrax/wiki/Hyrax-Management-Guide)
53
- * Walk-through on using features: [Hyrax Feature Guides](https://samvera.github.io/intro-to.html)
54
- * For general information about Hyrax: [Hyrax Site](https://hyrax.samvera.org/)
55
-
56
- # Help
57
-
58
- The Samvera community is here to help. Please see our [support guide](./.github/SUPPORT.md).
59
-
60
- # Getting started
61
-
62
- This document contains instructions specific to setting up an app with __Hyrax
63
- v3.0.0-rc2__. If you are looking for instructions on installing a different
64
- version, be sure to select the appropriate branch or tag from the drop-down
65
- menu above.
66
-
67
- ## Prerequisites
68
-
69
- Prerequisites are required for both creating a Hyrax\-based app and contributing new features to Hyrax. After installing the prerequisites...
70
-
71
- * If you would like to create a new application using Hyrax follow the instructions for [Creating a Hyrax\-based app](#creating-a-hyrax-based-app).
72
- * If you would like to create new features for Hyrax follow the instructions for [Contributing](#contributing) and [Development](#development).
73
-
74
- Hyrax requires the following software to work:
75
-
76
- 1. [Solr](http://lucene.apache.org/solr/) version >= 5.x (tested up to 7.0.0)
77
- 1. [Fedora Commons](http://www.fedora-commons.org/) digital repository version >= 4.5.1 (tested up to 4.7.5)
78
- 1. A SQL RDBMS (MySQL, PostgreSQL), though **note** that SQLite will be used by default if you're looking to get up and running quickly
79
- 1. [Redis](http://redis.io/), a key-value store
80
- 1. [ImageMagick](http://www.imagemagick.org/) with JPEG-2000 support
81
- 1. [FITS](#characterization) version 1.0.x (1.0.5 is known to be good, 1.1.0 is known to be bad: https://github.com/harvard-lts/fits/issues/140)
82
- 1. [LibreOffice](#derivatives)
83
- 1. [ffmpeg](#transcoding)
84
-
85
- **NOTE: The [Hyrax Development Guide](https://github.com/samvera/hyrax/wiki/Hyrax-Development-Guide) has instructions for installing Solr and Fedora in a development environment.**
86
-
87
- ### Characterization
88
-
89
- FITS can be installed on OSX using Homebrew by running the command: `brew install fits`
90
-
91
- **OR**
92
-
93
- 1. Go to http://projects.iq.harvard.edu/fits/downloads and download a copy of FITS (see above to pick a known working version) & unpack it somewhere on your machine.
94
- 1. Mark fits.sh as executable: `chmod a+x fits.sh`
95
- 1. Run `fits.sh -h` from the command line and see a help message to ensure FITS is properly installed
96
- 1. Give your Hyrax app access to FITS by:
97
- 1. Adding the full fits.sh path to your PATH (e.g., in your .bash\_profile), **OR**
98
- 1. Changing `config/initializers/hyrax.rb` to point to your FITS location: `config.fits_path = "/<your full path>/fits.sh"`
99
-
100
- ### Derivatives
101
-
102
- Install [LibreOffice](https://www.libreoffice.org/). If `which soffice` returns a path, you're done. Otherwise, add the full path to soffice to your PATH (in your `.bash_profile`, for instance). On OSX, soffice is **inside** LibreOffice.app. Your path may look like "/path/to/LibreOffice.app/Contents/MacOS/"
103
-
104
- You may also require [ghostscript](http://www.ghostscript.com/) if it does not come with your compiled version LibreOffice. `brew install ghostscript` should resolve the dependency on an OSX-based machine with Homebrew installed.
105
-
106
- **NOTE**: Derivatives are served from the filesystem in Hyrax.
107
-
108
- ### Transcoding
109
-
110
- Hyrax includes support for transcoding audio and video files with ffmpeg > 1.0 installed.
111
-
112
- On OSX, you can use Homebrew to install ffmpeg:
113
-
114
- `brew install libvpx ffmpeg`
115
-
116
- Otherwise, to compile ffmpeg yourself, see the [ffmpeg compilation guide](https://trac.ffmpeg.org/wiki/CompilationGuide).
117
-
118
- Once ffmpeg has been installed, enable transcoding by setting `config.enable_ffmpeg = true` in `config/initializers/hyrax.rb`. You may also configure the location of ffmpeg using `config.ffmpeg_path`.
119
-
120
- ## Environments
121
-
122
- Note here that the following commands assume you're setting up Hyrax in a development environment (using the Rails built-in development environment). If you're setting up a production or production-like environment, you may wish to tell Rails that by prepending `RAILS_ENV=production` to the commands that follow, e.g., `rails`, `rake`, `bundle`, and so on.
123
-
124
- ## Ruby
125
-
126
- First, you'll need a working Ruby installation. You can install this via your operating system's package manager -- you are likely to get farther with OSX, Linux, or UNIX than Windows but your mileage may vary -- but we recommend using a Ruby version manager such as [RVM](https://rvm.io/) or [rbenv](https://github.com/sstephenson/rbenv).
127
-
128
- Hyrax supports Ruby 2.5, 2.6, and 2.7. When starting a new project, we recommend using the latest Ruby 2.7 version.
129
-
130
- ## Redis
131
-
132
- [Redis](http://redis.io/) is a key-value store that Hyrax uses to provide activity streams on repository objects and users, and to prevent race conditions as a global mutex when modifying order-persisting objects.
133
-
134
- Starting up Redis will depend on your operating system, and may in fact already be started on your system. You may want to consult the [Redis documentation](http://redis.io/documentation) for help doing this.
135
-
136
- ## Rails
137
-
138
- Hyrax requires Rails 5. We recommend the latest Rails 5.2 release.
139
-
140
- ```
141
- # If you don't already have Rails at your disposal...
142
- gem install rails -v 5.2.3
143
- ```
144
-
145
- ### JavaScript runtime
146
-
147
- Rails requires that you have a JavaScript runtime installed (e.g. nodejs or rubyracer). Either install nodejs or uncomment the `rubyracer` line in your Gemfile and run `bundle install` before running Hyrax's install generator.
148
-
149
- NOTE: nodejs is preinstalled on most Mac computers and doesn't require a gem. To test if nodejs is already installed, execute `node -v` in the terminal and the version of nodejs will be displayed if it is installed.
16
+ ## Table of Contents
150
17
 
151
- # Creating a Hyrax-based app
18
+ * [What is Hyrax?](#what-is-hyrax)
19
+ * [Feature Documentation](#feature-documentation)
20
+ * [Help](#help)
21
+ * [Working with Hyrax](#working-with-hyrax)
22
+ * [Developing the Hyrax Engine](#developing-the-hyrax-engine)
23
+ * [Contributing](#contributing)
24
+ * [Release process](#release-process)
25
+ * [Developing your Hyrax\-based Application](#developing-your-hyrax-based-application)
26
+ * [Deploying your Hyrax\-based Application to production](#deploying-your-hyrax-based-application-to-production)
27
+ * [Acknowledgments](#acknowledgments)
28
+ * [License](#license)
152
29
 
153
- NOTE: The steps need to be done in order to create a new Hyrax based app.
30
+ <aside>Table of contents created by <a href="https://github.com/ekalinin/github-markdown-toc.go">gh-md-toc</a></aside>
154
31
 
155
- Generate a new Rails application using the template.
32
+ ## What is Hyrax?
156
33
 
157
- ```
158
- rails _5.2.4.3_ new my_app -m https://raw.githubusercontent.com/samvera/hyrax/v3.0.0-rc2/template.rb
159
- ```
34
+ Hyrax is a [Ruby on Rails Engine](https://guides.rubyonrails.org/engines.html) built by the [Samvera community](https://samvera.org). Hyrax provides a foundation for creating many different digital repository applications.
160
35
 
161
- Generating a new Rails application using Hyrax's template above takes cares of a number of steps for you, including:
36
+ _**Note:** As a Rails Engine, Hyrax is not a web application. To build your digital repository using Hyrax you must mount the Hyrax engine within a Rails application. We call an application that mounts Hyrax a "Hyrax-based application" (or sometimes a "Hyrax Application")._
162
37
 
163
- * Adding Hyrax (and any of its dependencies) to your application `Gemfile`, to declare that Hyrax is a dependency of your application
164
- * Running `bundle install`, to install Hyrax and its dependencies
165
- * Running Hyrax's install generator, to add a number of files that Hyrax requires within your Rails app, including e.g. database migrations
166
- * Loading all of Hyrax's database migrations into your application's database
167
- * Loading Hyrax's default workflows into your application's database
168
- * Create default collection types (e.g. Admin Set, User Collection)
38
+ Hyrax offers the ability to:
169
39
 
170
- ## Start servers
40
+ * Create repository object types on demand
41
+ * Deposit content via multiple configurable workflows
42
+ * Describe content with flexible metadata
43
+ * Enable/disable optional features via an administrative dashboard
44
+ * And more (https://hyrax.samvera.org/about/)
171
45
 
172
- To test-drive your new Hyrax application in development mode, spin up the servers that Hyrax needs (Solr, Fedora, and Rails):
46
+ ## Feature Documentation
173
47
 
174
- ```
175
- bin/rails hydra:server
176
- ```
177
-
178
- And now you should be able to browse to [localhost:3000](http://localhost:3000/) and see the application.
179
-
180
- Notes:
181
- * This web server is purely for development purposes. You will want to use a more fully featured [web server](https://github.com/samvera/hyrax/wiki/Hyrax-Management-Guide#web-server) for production-like environments.
182
- * You have the option to start each of these services individually. More information on [solr_wrapper](https://github.com/cbeer/solr_wrapper) and [fcrepo_wrapper](https://github.com/cbeer/fcrepo_wrapper) will help you set this up. Start rails with `rails s`.
183
-
184
- ## Start background workers
185
-
186
- Many of the services performed by Hyrax are resource intensive, and therefore are well suited to running as background jobs that can be managed and executed by a message queuing system. Examples include:
187
-
188
- * File ingest
189
- * Derivative generation
190
- * Characterization
191
- * Fixity
192
- * Solr indexing
193
-
194
- Hyrax implements these jobs using the Rails [ActiveJob](http://edgeguides.rubyonrails.org/active_job_basics.html) framework, allowing you to choose the message queue system of your choice.
195
-
196
- For initial development, it is recommended that you change the default ActiveJob adapter from `:async` to `:inline`. This adapter will execute jobs immediately (in the foreground) as they are received. This can be accomplished by adding the following to your `config/environments/development.rb`
197
-
198
- ```
199
- class Application < Rails::Application
200
- # ...
201
- config.active_job.queue_adapter = :inline
202
- # ...
203
- end
204
- ```
205
-
206
- For testing, it is recommended that you use the [built-in `:test` adapter](http://api.rubyonrails.org/classes/ActiveJob/QueueAdapters/TestAdapter.html) which stores enqueued and performed jobs, running only those configured to run during test setup. To do this, add the following to `config/environments/test.rb`:
207
-
208
- ```ruby
209
- Rails.application.configure do
210
- # ...
211
- config.active_job.queue_adapter = :test
212
- # ...
213
- end
214
- ```
215
-
216
- **For production applications** you will want to use a more robust message queue system such as [Sidekiq](http://sidekiq.org/). The Hyrax Development Guide has a detailed walkthrough of [installing and configuring Sidekiq](https://github.com/samvera/hyrax/wiki/Using-Sidekiq-with-Hyrax).
217
-
218
- ## Create default administrative set
219
-
220
- **After** Fedora and Solr are running, create the default administrative set -- into which all works will be deposited unless assigned to other administrative sets -- by running the following command:
221
-
222
- ```
223
- bin/rails hyrax:default_admin_set:create
224
- ```
225
-
226
- This command also makes sure that Hyrax's built-in workflows are loaded for your application and available for the default administrative set.
227
-
228
- **NOTE**: You will want to run this command the first time this code is deployed to a new environment as well.
229
-
230
- ## Generate a work type
231
-
232
- Using Hyrax requires generating at least one type of repository object, or "work type." Hyrax allows you to generate the work types required in your application by using a Rails generator-based tool. You may generate one or more of these work types.
233
-
234
- Pass a (CamelCased) model name to Hyrax's work generator to get started, e.g.:
235
-
236
- ```
237
- rails generate hyrax:work Work
238
- ```
239
-
240
- or
241
-
242
- ```
243
- rails generate hyrax:work MovingImage
244
- ```
245
-
246
- If your applications requires your work type to be namespaced, namespaces can be included in the by adding a slash to the model name which creates a new class called `MovingImage` within the `My` namespace:
247
-
248
- ```
249
- rails generate hyrax:work My/MovingImage
250
- ```
251
-
252
- You may wish to [customize your work type](https://github.com/samvera/hyrax/wiki/Customizing-your-work-types) now that it's been generated.
253
-
254
- ## Enable notifications
255
-
256
- Hyrax 2 uses a WebSocket-based user notifications system, which requires Redis. To enable user notifications, make sure that you have configured ActionCable to use Redis as the adapter in your application's `config/cable.yml`. E.g., for the `development` Rails environment:
257
-
258
- ```yaml
259
- development:
260
- adapter: redis
261
- url: redis://localhost:6379
262
- ```
263
-
264
- Using Rails up to version 5.1.4, ActionCable will not work with the 4.x series of the `redis` gem, so you will also need to pin your application to a 3.x release by adding this to your `Gemfile`:
265
-
266
- ```ruby
267
- gem 'redis', '~> 3.0'
268
- ```
269
-
270
- And then run `bundle update redis`.
271
-
272
- Note that the Hyrax Management Guide contains additional information on [how to configure ActionCable in production environments](https://github.com/samvera/hyrax/wiki/Hyrax-Management-Guide#notifications).
273
-
274
- # Managing a Hyrax-based app
48
+ * List of features: [Feature Matrix](https://github.com/samvera/hyrax/wiki/Feature-matrix)
49
+ * Configuration and enabling features: [Hyrax Management Guide](https://github.com/samvera/hyrax/wiki/Hyrax-Management-Guide)
50
+ * Walk-through on using features: [Hyrax Feature Guides](https://samvera.github.io/intro-to.html)
51
+ * [Entity Relationship Diagram](./artifacts/entity-relationship-diagram.pdf)
52
+ * For general information about Hyrax: [Hyrax Site](https://hyrax.samvera.org/)
53
+ * A note about [versions of Hyrax](./documentation/note-about-versions.md)
275
54
 
276
- The [Hyrax Management Guide](https://github.com/samvera/hyrax/wiki/Hyrax-Management-Guide) provides tips for how to manage, customize, and enhance your Hyrax application, including guidance specific to:
55
+ ## Help
277
56
 
278
- * Production implementations
279
- * Configuration of background workers
280
- * Integration with e.g., Dropbox, Google Analytics, and Zotero
281
- * Audiovisual transcoding with `ffmpeg`
282
- * Setting up administrative users
283
- * Metadata customization
284
- * Virus checking
285
- * Workflows
57
+ The Samvera community is here to help. Please see our [support guide](./.github/SUPPORT.md).
286
58
 
287
- ## Toggling Features
59
+ ## Working with Hyrax
288
60
 
289
- Some features in Hyrax can be flipped on and off from either the Administrative
290
- Dashboard or via a YAML configuration file at `config/features.yml`. An example
291
- of the YAML file is below:
61
+ There are two primary Hyrax development concerns:
292
62
 
293
- ```yaml
294
- assign_admin_set:
295
- enabled: "false"
296
- proxy_deposit:
297
- enabled: "false"
298
- ```
63
+ 1. Developing the Hyrax engine
64
+ 2. Developing your Hyrax-based Application
299
65
 
300
- If both options exist, whichever option is set from the Administrative Dashboard
301
- will take precedence.
66
+ ### Developing the Hyrax Engine
302
67
 
303
- # License
68
+ This is where you work on the code-base that will be used by yours and other Hyrax-based applications. We recommend using [Docker and Hyrax's engine development containers](./CONTAINERS.md).
304
69
 
305
- Hyrax is available under [the Apache 2.0 license](LICENSE.md).
70
+ <aside>
71
+ <p><em><strong>Note:</em></strong> This is not the only path for Hyrax-engine development. In the past, <a href="./documentation/legacyREADME.md">we documented extensive steps</a> to install the various dependencies for Hyrax-engine development. There is also a <a href="https://github.com/samvera/hyrax/wiki/Hyrax-Development-Guide#quick-start-for-hyrax-development">Quick Start for Hyrax engine development</a> that outlines steps for working on the Hyrax engine.</p>
72
+ <p>By moving to Docker, we are encoding the documentation steps for standing up a Hyrax-engine development environment.</p>
73
+ </aside>
306
74
 
307
- # Contributing
75
+ #### Contributing
308
76
 
309
77
  We'd love to accept your contributions. Please see our guide to [contributing to Hyrax](./.github/CONTRIBUTING.md).
310
78
 
311
- If you'd like to help the development effort and you're not sure where to get started, you can always grab a ticket in the "Ready" column from our [Waffle board](https://waffle.io/samvera/hyrax). There are other ways to help, too.
79
+ Here are possible ways to help:
312
80
 
313
81
  * The Hyrax user interface is translated into a number of languages, and many of these translations come from Google Translate. If you are a native or fluent speaker of a non-English language, your help improving these translations are most welcome. (Hyrax currently supports English, Spanish, Chinese, Italian, German, French, and Portuguese.)
314
82
  * Do you see English in the application where you would expect to see one of the languages above? If so, [file an issue](https://github.com/samvera/hyrax/issues/new) and suggest a translation, please.
@@ -316,25 +84,30 @@ If you'd like to help the development effort and you're not sure where to get st
316
84
  * Help us improve [Hyrax's test coverage](https://coveralls.io/r/samvera/hyrax) or [documentation coverage](https://inch-ci.org/github/samvera/hyrax).
317
85
  * Refactor away [code smells](https://codeclimate.com/github/samvera/hyrax).
318
86
 
319
- # Development
87
+ #### Release process
320
88
 
321
- The [Hyrax Development Guide](https://github.com/samvera/hyrax/wiki/Hyrax-Development-Guide) is for people who want to modify Hyrax itself, not an application that uses Hyrax. See especially the [Quick Start](https://github.com/samvera/hyrax/wiki/Hyrax-Development-Guide#quick-start-for-hyrax-development) guide and instructions for running the [Hyrax test suite](https://github.com/samvera/hyrax/wiki/Hyrax-Development-Guide#run-the-test-suite).
89
+ See the [release management process](https://github.com/samvera/hyrax/wiki/Release-management-process).
322
90
 
323
- ## Reporting Security Issues
91
+ ### Developing your Hyrax-based Application
324
92
 
325
- To report a security vulnerability, email [samvera-steering@googlegroups.com](mailto:samvera-steering@googlegroups.com) and the Steering Group will coordinate the community response. In your message, please document to the best of your ability cases (relevant software versions, conditions, etc.) where the vulnerability is applicable, the potential negative effects, and any known workarounds or fixes to mitigate the risk. Steering will communicate this to the Partners and the rest of the community in a timely fashion.
93
+ For those familiar with Rails, this is where you create your own application (via `rails new`) and add Hyrax as a gem to your `Gemfile`. Your Hyrax-based application is the place for you to create features specific to your Hyrax-based application.
326
94
 
327
- ## Workflow Relationship Diagram
95
+ For more information, see [our documentation on developing your Hyrax-based application](./documentation/developing-your-hyrax-based-app.md).
328
96
 
329
- * [Entity Relationship Diagram](./artifacts/entity-relationship-diagram.pdf)
97
+ ### Deploying your Hyrax-based Application to production
330
98
 
331
- # Release process
99
+ Steps to deploy a Hyrax-based application to production will vary depending on your particular ecosystem but here are some methods and things to consider:
332
100
 
333
- See the [release management process](https://github.com/samvera/hyrax/wiki/Release-management-process).
101
+ * [Samvera Community Knowledge Base: Running in Production](https://samvera.github.io/service-stack.html)
102
+ * [Helm Chart](./CONTAINERS.md#deploying-to-production) (for cloud-based Kubernetes-style deployments)
334
103
 
335
- # Acknowledgments
104
+ ## Acknowledgments
336
105
 
337
106
  This software has been developed by and is brought to you by the Samvera community. Learn more at the
338
107
  [Samvera website](http://samvera.org/).
339
108
 
340
- ![Samvera Logo](https://wiki.duraspace.org/download/thumbnails/87459292/samvera-fall-font2-200w.png?version=1&modificationDate=1498550535816&api=v2)
109
+ ![Samvera Logo](https://wiki.lyrasis.org/download/thumbnails/87459292/samvera-fall-font2-200w.png?version=1&modificationDate=1498550535816&api=v2)
110
+
111
+ ## License
112
+
113
+ Hyrax is available under [the Apache 2.0 license](LICENSE).
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  module Hyrax
3
3
  module Actors
4
+ ##
4
5
  # Attach or remove child works to/from this work. This decodes parameters
5
6
  # that follow the rails nested parameters conventions:
6
7
  # e.g.
@@ -9,12 +10,12 @@ module Hyrax
9
10
  # '1' => { 'id' => '99981228', '_destroy' => 'true' }
10
11
  # }
11
12
  #
12
- # The goal of this actor is to mutate the ordered_members with as few writes
13
- # as possible, because changing ordered_members is slow. This class only
13
+ # The goal of this actor is to mutate the +#ordered_members+ with as few writes
14
+ # as possible, because changing +#ordered_members+ is slow. This class only
14
15
  # writes changes, not the full ordered list.
15
16
  #
16
- # The `env` for this actor may contain a `Valkyrie::Resource` or an
17
- # `ActiveFedora::Base` model, as required by the
17
+ # The +env+ for this actor may contain a +Valkyrie::Resource+ or an
18
+ # +ActiveFedora::Base+ model, as required by the caller.
18
19
  class AttachMembersActor < Hyrax::Actors::AbstractActor
19
20
  # @param [Hyrax::Actors::Environment] env
20
21
  # @return [Boolean] true if update was successful
@@ -27,7 +28,8 @@ module Hyrax
27
28
  private
28
29
 
29
30
  # Attaches any unattached members. Deletes those that are marked _delete
30
- # @param [Hash<Hash>] a collection of members
31
+ # @param [Hyrax::Actors::Environment] env
32
+ # @param [Hash<Hash>] attributes_collection a collection of members
31
33
  #
32
34
  # rubocop:disable Metrics/CyclomaticComplexity
33
35
  # Complexity in this method is incleased by dual AF/Valkyrie support
@@ -92,7 +92,6 @@ module Hyrax
92
92
 
93
93
  # Cast any singular values from the form to multiple values for persistence
94
94
  # also remove any blank assertions
95
- # TODO this method could move to the work form.
96
95
  def clean_attributes(attributes)
97
96
  attributes[:license] = Array(attributes[:license]) if attributes.key? :license
98
97
  attributes[:rights_statement] = Array(attributes[:rights_statement]) if attributes.key? :rights_statement
@@ -1,44 +1,44 @@
1
1
  # frozen_string_literal: true
2
2
  module Hyrax
3
3
  module Actors
4
- # When adding member FileSets to a Work, Hyrax saves
5
- # and reloads the work for each new member FileSet.
6
- # This can significantly slow down ingest for Works
7
- # with many member FileSets. The saving and reloading
8
- # happens in FileSetActor#attach_to_work.
9
- #
10
- # This is a 'swappable' alternative approach. It will
11
- # be of most value to Hyrax applications dealing with
12
- # works with many filesets. Anecdotally, a work with
13
- # 600 filesets can be processed in ~15 mins versus
14
- # > 3 hours with the standard approach.
15
- #
16
- # The tradeoff is that the ordered members are now added in a
17
- # single step after the creation of all the FileSets, thus
18
- # introducing a slight risk of orphan filesets if the upload
19
- # fails before the addition of the ordered members. This
20
- # has not been observed in practice.
4
+ ##
5
+ # When adding member {FileSetBehavior}s to a {WorkBehavior}, {Hyrax} saves
6
+ # and reloads the work for each new member FileSet. This can significantly
7
+ # slow down ingest for Works with many member FileSets. The saving and
8
+ # reloading happens in {FileSetActor#attach_to_work}.
9
+ #
10
+ # This is a 'swappable' alternative approach. It will be of most value to
11
+ # Hyrax applications dealing with works with many filesets. Anecdotally, a
12
+ # 600 FileSet work can be processed in ~15 mins versus >3 hours with the
13
+ # standard approach.
14
+ #
15
+ # The tradeoff is that the ordered members are now added in a single step
16
+ # after the creation of all the FileSets, thus introducing a slight risk of
17
+ # orphan filesets if the upload fails before the addition of the ordered members.
18
+ # This has not been observed in practice.
21
19
  #
22
20
  # Swapping out the actors can be achieved thus:
23
21
  #
24
- # In `config/initializers/hyrax.rb`:
25
- # ```
26
- # Hyrax::CurationConcern.actor_factory.swap(Hyrax::Actors::CreateWithFilesActor,
27
- # Hyrax::Actors::CreateWithFilesOrderedMembersActor)
28
- # ```
29
- # Alternatively, in `config/application.rb`:
30
- # ```
31
- # config.to_prepare
22
+ # In +config/initializers/hyrax.rb+:
23
+ #
32
24
  # Hyrax::CurationConcern.actor_factory.swap(Hyrax::Actors::CreateWithFilesActor,
33
25
  # Hyrax::Actors::CreateWithFilesOrderedMembersActor)
34
- # end
35
- # ```
26
+ #
27
+ # Alternatively, in +config/application.rb+:
28
+ #
29
+ # config.to_prepare
30
+ # Hyrax::CurationConcern.actor_factory.swap(Hyrax::Actors::CreateWithFilesActor,
31
+ # Hyrax::Actors::CreateWithFilesOrderedMembersActor)
32
+ # end
33
+ #
36
34
  # Creates a work and attaches files to the work
37
35
  class CreateWithFilesOrderedMembersActor < CreateWithFilesActor
38
36
  # @return [TrueClass]
39
37
  def attach_files(files, curation_concern, attributes)
40
38
  return true if files.blank?
41
- AttachFilesToWorkWithOrderedMembersJob.perform_later(curation_concern, files, attributes.to_h.symbolize_keys)
39
+
40
+ AttachFilesToWorkWithOrderedMembersJob
41
+ .perform_later(curation_concern, files, attributes.to_h.symbolize_keys)
42
42
  true
43
43
  end
44
44
  end