hyrax 5.0.0.rc1 → 5.0.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +11 -4
  3. data/.dassie/.env +5 -1
  4. data/.dassie/Gemfile +27 -42
  5. data/.dassie/Gemfile.dassie +2 -0
  6. data/.dassie/app/assets/config/manifest.js +2 -0
  7. data/.dassie/app/assets/stylesheets/hyrax.scss +1 -0
  8. data/.dassie/config/initializers/riiif.rb +5 -11
  9. data/.dassie/config/metadata/collection_resource.yaml +3 -0
  10. data/.dassie/config/metadata/monograph.yaml +8 -0
  11. data/.dassie/config/metadata/sample_metadata.yaml +1 -0
  12. data/.dassie/config/redis.yml +2 -0
  13. data/.dassie/db/migrate/20230725222727_create_hyrax_counter_metrics.hyrax.rb +14 -0
  14. data/.dassie/db/migrate/20230803165135_change_work_id_to_string.rb +5 -0
  15. data/.dassie/db/migrate/20230808102105_add_indices_to_hyrax_counter_metrics.hyrax.rb +8 -0
  16. data/.dassie/db/migrate/20230821153635_add_fields_to_counter_metric.rb +8 -0
  17. data/.dassie/db/schema.rb +20 -1
  18. data/.dockerignore +2 -1
  19. data/.gitignore +1 -1
  20. data/.koppie/.env +10 -4
  21. data/.koppie/Gemfile +10 -12
  22. data/.koppie/Gemfile.koppie +2 -0
  23. data/.koppie/Rakefile +0 -2
  24. data/.koppie/app/forms/collection_resource_form.rb +0 -1
  25. data/.koppie/app/indexers/collection_resource_indexer.rb +0 -1
  26. data/.koppie/app/models/ability.rb +1 -5
  27. data/.koppie/app/models/collection_resource.rb +0 -1
  28. data/.koppie/app/models/user.rb +0 -2
  29. data/.koppie/config/application.rb +2 -1
  30. data/.koppie/config/arkivo.yml +6 -0
  31. data/.koppie/config/blacklight.yml +2 -2
  32. data/.koppie/config/features.yml +2 -0
  33. data/.koppie/config/initializers/1_valkyrie.rb +29 -6
  34. data/.koppie/config/initializers/arkivo_constraint.rb +12 -0
  35. data/.koppie/config/initializers/hyrax.rb +2 -2
  36. data/.koppie/config/initializers/riiif.rb +6 -11
  37. data/.koppie/config/metadata/collection_resource.yaml +177 -1
  38. data/.koppie/config/metadata/generic_work.yaml +2 -0
  39. data/.koppie/config/metadata/monograph.yaml +10 -0
  40. data/.koppie/config/role_map.yml +3 -25
  41. data/.koppie/config/routes.rb +1 -2
  42. data/.koppie/config/solr.yml +1 -1
  43. data/.koppie/config/valkyrie_index.yml +4 -10
  44. data/.koppie/config/zotero.yml +6 -0
  45. data/.koppie/db/migrate/20230725222727_create_hyrax_counter_metrics.hyrax.rb +14 -0
  46. data/.koppie/db/migrate/20230803165135_change_work_id_to_string.rb +5 -0
  47. data/.koppie/db/schema.rb +12 -1
  48. data/CONTAINERS.md +1 -3
  49. data/Dockerfile +11 -2
  50. data/Gemfile +4 -21
  51. data/Gemfile.dassie +2 -0
  52. data/Gemfile.koppie +2 -0
  53. data/README.md +0 -1
  54. data/Rakefile +0 -11
  55. data/app/actors/hyrax/actors/embargo_actor.rb +3 -6
  56. data/app/assets/javascripts/hyrax/batch_select_all.js +1 -1
  57. data/app/assets/javascripts/hyrax/file_manager/member.es6 +1 -1
  58. data/app/assets/stylesheets/hyrax/_file-listing.scss +0 -2
  59. data/app/assets/stylesheets/hyrax/_work-show.scss +19 -3
  60. data/app/assets/stylesheets/hyrax/sidebar.scss +23 -0
  61. data/app/controllers/concerns/hyrax/embargoes_controller_behavior.rb +7 -1
  62. data/app/controllers/concerns/hyrax/leases_controller_behavior.rb +7 -1
  63. data/app/controllers/concerns/hyrax/valkyrie_downloads_controller_behavior.rb +14 -9
  64. data/app/controllers/concerns/hyrax/works_controller_behavior.rb +50 -9
  65. data/app/controllers/hyrax/api/items_controller.rb +2 -3
  66. data/app/controllers/hyrax/batch_edits_controller.rb +6 -6
  67. data/app/controllers/hyrax/batch_uploads_controller.rb +5 -1
  68. data/app/controllers/hyrax/dashboard/collections_controller.rb +4 -1
  69. data/app/controllers/hyrax/file_sets_controller.rb +49 -6
  70. data/app/controllers/hyrax/my/collections_controller.rb +2 -0
  71. data/app/controllers/hyrax/single_use_links_viewer_controller.rb +16 -2
  72. data/app/forms/concerns/hyrax/basic_metadata_form_fields_behavior.rb +38 -0
  73. data/app/forms/hyrax/forms/collection_form.rb +0 -15
  74. data/app/forms/hyrax/forms/dashboard/nest_collection_form.rb +0 -34
  75. data/app/forms/hyrax/forms/file_set_form.rb +2 -2
  76. data/app/forms/hyrax/forms/pcdm_object_form.rb +21 -0
  77. data/app/forms/hyrax/forms/permission_template_form.rb +0 -7
  78. data/app/forms/hyrax/forms/resource_batch_edit_form.rb +49 -21
  79. data/app/forms/hyrax/forms/resource_form.rb +21 -34
  80. data/app/helpers/hyrax/dashboard_helper_behavior.rb +13 -0
  81. data/app/indexers/hyrax/location_indexer.rb +29 -0
  82. data/app/indexers/hyrax/pcdm_collection_indexer.rb +0 -8
  83. data/app/indexers/hyrax/valkyrie_file_set_indexer.rb +1 -6
  84. data/app/indexers/hyrax/valkyrie_work_indexer.rb +1 -0
  85. data/app/inputs/controlled_vocabulary_input.rb +1 -1
  86. data/app/jobs/characterize_job.rb +1 -1
  87. data/app/jobs/create_work_job.rb +36 -4
  88. data/app/jobs/valkyrie_characterization_job.rb +9 -0
  89. data/app/jobs/valkyrie_ingest_job.rb +1 -3
  90. data/app/models/collection_branding_info.rb +2 -9
  91. data/app/models/concerns/hyrax/ability.rb +2 -1
  92. data/app/models/concerns/hyrax/collection_behavior.rb +4 -12
  93. data/app/models/concerns/hyrax/riiif_file.rb +30 -0
  94. data/app/models/concerns/hyrax/solr_document_behavior.rb +19 -2
  95. data/app/models/hyrax/counter_metric.rb +7 -0
  96. data/app/models/hyrax/file_metadata.rb +3 -2
  97. data/app/models/hyrax/file_set.rb +75 -22
  98. data/app/models/hyrax/orcid_validator.rb +0 -6
  99. data/app/models/hyrax/work.rb +2 -5
  100. data/app/presenters/hyrax/collection_presenter.rb +0 -17
  101. data/app/presenters/hyrax/embargo_presenter.rb +4 -0
  102. data/app/presenters/hyrax/pcdm_member_presenter_factory.rb +6 -4
  103. data/app/presenters/hyrax/version_list_presenter.rb +19 -10
  104. data/app/presenters/hyrax/version_presenter.rb +19 -4
  105. data/app/services/hyrax/admin_set_create_service.rb +0 -17
  106. data/app/services/hyrax/characterization/valkyrie_characterization_service.rb +5 -0
  107. data/app/services/hyrax/collections/collection_member_service.rb +1 -1
  108. data/app/services/hyrax/embargo_manager.rb +45 -18
  109. data/app/services/hyrax/embargo_service.rb +12 -10
  110. data/app/services/hyrax/file_set_derivatives_service.rb +11 -11
  111. data/app/services/hyrax/fixity_check_failure_service.rb +1 -1
  112. data/app/services/hyrax/identifier/dispatcher.rb +9 -2
  113. data/app/services/hyrax/listeners/file_metadata_listener.rb +14 -6
  114. data/app/services/hyrax/listeners/member_cleanup_listener.rb +2 -28
  115. data/app/services/hyrax/listeners/metadata_index_listener.rb +11 -0
  116. data/app/services/hyrax/lock_manager.rb +1 -2
  117. data/app/services/hyrax/riiif_file_resolver.rb +50 -0
  118. data/app/services/hyrax/simple_schema_loader.rb +31 -0
  119. data/app/services/hyrax/valkyrie_persist_derivatives.rb +1 -1
  120. data/app/services/hyrax/valkyrie_upload.rb +12 -26
  121. data/app/services/hyrax/versioning_service.rb +29 -15
  122. data/app/services/hyrax/work_uploads_handler.rb +1 -1
  123. data/app/validators/hyrax/collection_membership_validator.rb +1 -1
  124. data/app/views/catalog/_search_form.html.erb +1 -1
  125. data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
  126. data/app/views/hyrax/base/_file_manager_resource_form.html.erb +1 -1
  127. data/app/views/hyrax/base/_form_visibility_component.html.erb +4 -4
  128. data/app/views/hyrax/base/_show_actions.html.erb +1 -1
  129. data/app/views/hyrax/base/_workflow_actions.html.erb +25 -23
  130. data/app/views/hyrax/base/show.json.jbuilder +2 -1
  131. data/app/views/hyrax/collections/_show_document_list_row.html.erb +1 -1
  132. data/app/views/hyrax/dashboard/collections/_list_collections.html.erb +1 -1
  133. data/app/views/hyrax/dashboard/collections/_show_document_list_row.html.erb +1 -1
  134. data/app/views/hyrax/dashboard/collections/_sort_and_per_page.html.erb +3 -3
  135. data/app/views/hyrax/file_sets/_versioning.html.erb +5 -5
  136. data/app/views/hyrax/file_sets/media_display/_audio.html.erb +4 -4
  137. data/app/views/hyrax/file_sets/media_display/_default.html.erb +1 -1
  138. data/app/views/hyrax/file_sets/media_display/_video.html.erb +2 -2
  139. data/app/views/hyrax/my/_search_form.html.erb +1 -1
  140. data/app/views/hyrax/notifications/_notifications.html.erb +1 -1
  141. data/app/views/hyrax/users/_vitals.html.erb +1 -1
  142. data/bin/dev-entrypoint.sh +13 -0
  143. data/chart/hyrax/Chart.yaml +3 -3
  144. data/chart/hyrax/templates/_helpers.tpl +8 -0
  145. data/chart/hyrax/templates/configmap-env.yaml +1 -1
  146. data/chart/hyrax/values.yaml +3 -0
  147. data/config/initializers/file_length_patch.rb +10 -0
  148. data/config/metadata/basic_metadata.yaml +52 -0
  149. data/config/metadata/core_metadata.yaml +4 -0
  150. data/config/metadata/file_set_metadata.yaml +19 -0
  151. data/config/metadata/hyrax_internal_metadata.yaml +57 -0
  152. data/docker-compose-koppie.yml +23 -22
  153. data/docker-compose-sirenia.yml +202 -0
  154. data/docker-compose.yml +27 -24
  155. data/documentation/developing-your-hyrax-based-app.md +2 -2
  156. data/hyrax.gemspec +10 -11
  157. data/karma.conf.js +1 -1
  158. data/lib/generators/hyrax/collection_resource/templates/collection_metadata.yaml +2 -0
  159. data/lib/generators/hyrax/templates/config/initializers/riiif.rb +13 -19
  160. data/lib/generators/hyrax/templates/db/migrate/20230725222727_create_hyrax_counter_metrics.rb.erb +14 -0
  161. data/lib/generators/hyrax/templates/db/migrate/20230803165135_change_work_id_to_string.rb.erb +5 -0
  162. data/lib/generators/hyrax/templates/db/migrate/20230808102105_add_indices_to_hyrax_counter_metrics.rb.erb +8 -0
  163. data/lib/generators/hyrax/templates/db/migrate/20230821153635_add_fields_to_counter_metric.rb.erb +8 -0
  164. data/lib/generators/hyrax/templates/db/seeds.rb +1 -1
  165. data/lib/generators/hyrax/work_resource/templates/form.rb.erb +1 -1
  166. data/lib/generators/hyrax/work_resource/templates/metadata.yaml +2 -0
  167. data/lib/hyrax/configuration.rb +147 -49
  168. data/lib/hyrax/controlled_vocabularies/location.rb +7 -1
  169. data/lib/hyrax/engine.rb +0 -1
  170. data/lib/hyrax/form_fields.rb +6 -0
  171. data/lib/hyrax/publisher.rb +4 -0
  172. data/lib/hyrax/redis_event_store.rb +7 -8
  173. data/lib/hyrax/resource_name.rb +4 -0
  174. data/lib/hyrax/specs/capybara.rb +25 -42
  175. data/lib/hyrax/specs/shared_specs/hydra_works.rb +34 -7
  176. data/lib/hyrax/specs/shared_specs/indexers.rb +24 -6
  177. data/lib/hyrax/transactions/collection_destroy.rb +3 -2
  178. data/lib/hyrax/transactions/container.rb +42 -0
  179. data/lib/hyrax/transactions/file_metadata_destroy.rb +20 -0
  180. data/lib/hyrax/transactions/file_set_destroy.rb +3 -1
  181. data/lib/hyrax/transactions/file_set_update.rb +21 -0
  182. data/lib/hyrax/transactions/steps/add_to_parent.rb +1 -1
  183. data/lib/hyrax/transactions/steps/delete_all_file_metadata.rb +46 -0
  184. data/lib/hyrax/transactions/steps/delete_all_file_sets.rb +46 -0
  185. data/lib/hyrax/transactions/steps/file_metadata_delete.rb +40 -0
  186. data/lib/hyrax/transactions/steps/remove_from_membership.rb +45 -0
  187. data/lib/hyrax/transactions/work_destroy.rb +3 -2
  188. data/lib/hyrax/version.rb +1 -1
  189. data/lib/tasks/collection_type_global_id.rake +9 -4
  190. data/lib/tasks/embargo_lease.rake +1 -0
  191. data/lib/valkyrie/indexing/solr/indexing_adapter.rb +2 -0
  192. data/lib/wings/active_fedora_converter.rb +6 -0
  193. data/lib/wings/attribute_transformer.rb +24 -17
  194. data/lib/wings/model_transformer.rb +0 -8
  195. data/lib/wings/orm_converter.rb +23 -18
  196. data/lib/wings/setup.rb +2 -2
  197. data/lib/wings/valkyrie/storage.rb +8 -90
  198. data/lib/wings.rb +5 -0
  199. data/tasks/hyrax_dev.rake +2 -33
  200. data/template.rb +1 -1
  201. metadata +90 -72
  202. data/.engine_cart.yml +0 -3
  203. data/app/views/hyrax/users/_user_util_links_extra.html.erb +0 -0
  204. data/lib/hyrax/specs/shared_specs/valkyrie_storage_versions.rb +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 136cdda4fa63bf4027c7df373f2bf769221e5d0f9a16811ff75e3a2e7e791f9c
4
- data.tar.gz: dc26381d252dc0d89c3ffce60341c906249b57107a812a219b4c6b81801a2035
3
+ metadata.gz: 951cca50f478f6a77b0b4dfd7f7127de250891ae5f26af3d0aad431e84987506
4
+ data.tar.gz: 4748c1f1c6a6a744e9ddbf364de06d028548f3699aa5a25c33104259672b412d
5
5
  SHA512:
6
- metadata.gz: 64629a2c0467415e4d8a5339f15932bcec06bc191cf269733be1f223a2a62129f3e997813cc7ed1572cb7824d31254a538e76510230554dc55d07c3fd701b0f0
7
- data.tar.gz: 50df342a224686ca14a60886b14b3154bc0de8e78c73d99099377c81d63be0a33ee4a00f635a65917e462df2a5192e516740231b446671f3b72bdb379975d8e8
6
+ metadata.gz: e24d5fd70134e1c27b39cd266a51b18838fc8b29d815b91d9df80e96c53f5348ba0b87647cf15894886de61ac4c7e49afbb4ecb9b9708b38f74959d74b339480
7
+ data.tar.gz: 745e7abf8b5f773864867f91b75f74a1768c97dddd7de35085b65d7dae48513bc2b06dd233365de9445940ebc3af9ad01bd53276e6b58bd4fcffc217e63aaa94
data/.circleci/config.yml CHANGED
@@ -91,7 +91,7 @@ jobs:
91
91
  --build-arg "EXTRA_APK_PACKAGES=git bash" \
92
92
  --build-arg "APP_PATH=.<< parameters.hyrax_app >>" \
93
93
  --build-arg "RUBY_VERSION=<< parameters.ruby_version >>" \
94
- --context "git://github.com/samvera/hyrax#refs/heads/${CIRCLE_BRANCH}#${CIRCLE_SHA1}" \
94
+ --context "git://github.com/$(echo $CIRCLE_REPOSITORY_URL | sed -E 's/.+:(.+)\.git/\1/')#refs/heads/${CIRCLE_BRANCH}#${CIRCLE_SHA1}" \
95
95
  --target "hyrax-engine-dev" \
96
96
  --destination "ghcr.io/samvera/hyrax/<< parameters.hyrax_app >>-dev:${CIRCLE_SHA1}"
97
97
 
@@ -122,9 +122,6 @@ jobs:
122
122
  VALKYRIE_SOLR_CORE: valkyrie-test
123
123
  VALKYRIE_SOLR_PORT: 8985
124
124
  steps:
125
- - run:
126
- name: yarn
127
- command: cd /app/samvera/hyrax-engine && yarn
128
125
  - run:
129
126
  name: Create solr core
130
127
  command: |
@@ -137,10 +134,20 @@ jobs:
137
134
  - ruby/rspec-test:
138
135
  app-dir: /app/samvera/hyrax-engine
139
136
 
137
+ rubocop:
138
+ working_directory: ~/hyrax
139
+ docker:
140
+ - image: cimg/ruby:3.2.2
141
+ steps:
142
+ - checkout
143
+ - run: bundle install
144
+ - ruby/rubocop-check
145
+
140
146
  workflows:
141
147
  version: 2
142
148
  dassie:
143
149
  jobs:
150
+ - rubocop
144
151
  - kaniko-build:
145
152
  name: "dassie-build"
146
153
  ruby_version: "3.2.2"
data/.dassie/.env CHANGED
@@ -1,4 +1,7 @@
1
1
  ANALYTICS_START_DATE=2021-08-21
2
+ BUNDLE_GEMFILE=Gemfile.dassie
3
+ BUNDLE_PATH=/app/bundle
4
+ CH12N_TOOL=fits_servlet
2
5
  CHROME_HEADLESS_MODE=false
3
6
  DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL=true
4
7
  DATABASE_TEST_URL=postgresql://hyrax_user:hyrax_password@postgres/hyrax_test?pool=5
@@ -24,9 +27,10 @@ RACK_ENV=development
24
27
  RAILS_ENV=development
25
28
  RAILS_ROOT=.dassie
26
29
  REDIS_HOST=redis
30
+ REDIS_PASSWORD=sidekickin
27
31
  REDIS_PROVIDER=SIDEKIQ_REDIS_URL
28
32
  SEED_DASSIE=true
29
- SIDEKIQ_REDIS_URL=redis://redis:6379/0
33
+ SIDEKIQ_REDIS_URL=redis://:sidekickin@redis:6379/0
30
34
  SOLR_HOST=solr
31
35
  SOLR_PORT=8983
32
36
  SOLR_TEST_URL=http://solr:8983/solr/hyrax_test
data/.dassie/Gemfile CHANGED
@@ -8,35 +8,31 @@ else
8
8
  end
9
9
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
10
10
 
11
- # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
12
- gem 'rails', '~> 6.0'
13
- # Use postgresql as the database for Active Record
14
- gem 'pg', '>= 0.18', '< 2.0'
15
- # Use Puma as the app server
16
- gem 'puma', '~> 4.3.8'
17
- # Use SCSS for stylesheets
18
- gem 'sass-rails', '~> 6.0'
19
- # Use Uglifier as compressor for JavaScript assets
20
- gem 'uglifier', '>= 1.3.0'
21
-
22
- gem 'dalli' # mem_cache_store support
23
-
24
- # Use CoffeeScript for .coffee assets and views
11
+ gem 'bootsnap', '>= 1.1.0', require: false
12
+ gem 'bootstrap', '~> 4.0'
25
13
  gem 'coffee-rails', '~> 4.2'
26
- # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
27
- gem 'turbolinks', '~> 5'
28
- # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
14
+ gem 'dalli'
15
+ gem 'devise'
16
+ gem 'devise-guests', '~> 0.8'
17
+ gemspec name: 'hyrax', path: ENV.fetch('HYRAX_ENGINE_PATH', '..')
29
18
  gem 'jbuilder', '~> 2.5'
30
-
31
- # Reduces boot times through caching; required in config/boot.rb
32
- gem 'bootsnap', '>= 1.1.0', require: false
33
-
34
- group :development, :test do
35
- # Call 'byebug' anywhere in the code to stop execution and get a debugger console
36
- gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
37
- end
19
+ gem 'jquery-rails'
20
+ gem 'pg', '~> 1.3'
21
+ gem 'puma'
22
+ gem 'rails', '~> 6.1'
23
+ gem 'riiif', '~> 2.1'
24
+ gem 'rsolr', '>= 1.0', '< 3'
25
+ gem 'sass-rails', '~> 6.0'
26
+ gem 'sidekiq', '~> 6.4'
27
+ gem 'turbolinks', '~> 5'
28
+ gem 'twitter-typeahead-rails', '0.11.1.pre.corejavascript'
29
+ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
30
+ gem 'uglifier', '>= 1.3.0'
38
31
 
39
32
  group :development do
33
+ gem 'better_errors' # add command line in browser when errors
34
+ gem 'binding_of_caller' # deeper stack trace used by better errors
35
+
40
36
  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
41
37
  gem 'web-console', '>= 3.3.0'
42
38
  gem 'listen', '>= 3.0.5', '< 3.2'
@@ -45,20 +41,9 @@ group :development do
45
41
  gem 'spring-watcher-listen', '~> 2.0.0'
46
42
  end
47
43
 
48
- # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
49
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
50
-
51
- gemspec name: 'hyrax', path: ENV.fetch('HYRAX_ENGINE_PATH', '..')
52
-
53
- gem 'bootstrap', '~> 4.0'
54
- gem 'devise'
55
- gem 'devise-guests', '~> 0.6'
56
- gem 'jquery-rails'
57
- gem 'pry-byebug'
58
- gem 'pry-doc'
59
- gem 'pry-rails'
60
- gem 'pry-rescue'
61
- gem 'riiif', '~> 2.1'
62
- gem 'rsolr', '>= 1.0', '< 3'
63
- gem 'sidekiq', '~> 6.0'
64
- gem 'twitter-typeahead-rails', '0.11.1.pre.corejavascript'
44
+ group :development, :test do
45
+ gem 'debug', '>= 1.0.0'
46
+ gem 'pry-doc'
47
+ gem 'pry-rails'
48
+ gem 'pry-rescue'
49
+ end
@@ -0,0 +1,2 @@
1
+ # Use dedicated lock files for dassie/koppie to avoid gem mismatches
2
+ eval_gemfile 'Gemfile'
@@ -1,3 +1,5 @@
1
1
  //= link_tree ../images
2
2
  //= link_directory ../javascripts .js
3
3
  //= link_directory ../stylesheets .css
4
+
5
+ //= link openseadragon-assets
@@ -6,6 +6,7 @@
6
6
 
7
7
  @import "bootstrap-default-overrides";
8
8
  @import 'bootstrap';
9
+ @import 'blacklight/blacklight';
9
10
  @import "font-awesome";
10
11
  @import "blacklight_gallery/gallery";
11
12
  @import "blacklight_gallery/masonry";
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
- ActiveSupport::Reloader.to_prepare do
3
- Riiif::Image.file_resolver = Riiif::HttpFileResolver.new
2
+ Rails.application.reloader.to_prepare do
4
3
  Riiif::Image.info_service = lambda do |id, _file|
5
4
  # id will look like a path to a pcdm:file
6
5
  # (e.g. rv042t299%2Ffiles%2F6d71677a-4f80-42f1-ae58-ed1063fd79c7)
7
6
  # but we just want the id for the FileSet it's attached to.
8
7
 
9
- # Capture everything before the first slash
10
8
  fs_id = id.sub(/\A([^\/]*)\/.*/, '\1')
11
9
  resp = Hyrax::SolrService.get("id:#{fs_id}")
12
10
  doc = resp['response']['docs'].first
@@ -15,14 +13,10 @@ ActiveSupport::Reloader.to_prepare do
15
13
  end
16
14
 
17
15
  if Hyrax.config.use_valkyrie?
18
- # Use Valkyrie adapter to make sure file is available locally. Riiif will just open it then
19
- # id comes in with the format "FILE_SET_ID/files/FILE_ID"
20
- Riiif::Image.file_resolver.id_to_uri = lambda do |id|
21
- file_metadata = Hyrax.query_service.find_by(id: id.split('/').last)
22
- file = Hyrax.storage_adapter.find_by(id: file_metadata.file_identifier)
23
- file.disk_path.to_s
24
- end
16
+ Riiif::Image.file_resolver = Hyrax::RiiifFileResolver.new
25
17
  else
18
+ Riiif::Image.file_resolver = Riiif::HttpFileResolver.new
19
+
26
20
  Riiif::Image.file_resolver.id_to_uri = lambda do |id|
27
21
  Hyrax::Base.id_to_uri(CGI.unescape(id)).tap do |url|
28
22
  Rails.logger.info "Riiif resolved #{id} to #{url}"
@@ -35,5 +29,5 @@ ActiveSupport::Reloader.to_prepare do
35
29
  Riiif.not_found_image = Rails.root.join('app', 'assets', 'images', 'us_404.svg')
36
30
  Riiif.unauthorized_image = Rails.root.join('app', 'assets', 'images', 'us_404.svg')
37
31
 
38
- Riiif::Engine.config.cache_duration = 365.days
32
+ Riiif::Engine.config.cache_duration = 1.day
39
33
  end
@@ -13,11 +13,14 @@ attributes:
13
13
  form:
14
14
  primary: true
15
15
  multiple: true
16
+ predicate: http://hyrax-example.com/target_audience
16
17
  department:
17
18
  type: string
18
19
  form:
19
20
  primary: true
21
+ predicate: http://hyrax-example.com/department
20
22
  course:
21
23
  type: string
22
24
  form:
23
25
  primary: false
26
+ predicate: http://hyrax-example.com/course
@@ -23,6 +23,7 @@
23
23
  attributes:
24
24
  monograph_title:
25
25
  type: string
26
+ predicate: http://hyrax-example.com/monograph_title
26
27
  record_info:
27
28
  type: string
28
29
  form:
@@ -30,26 +31,33 @@ attributes:
30
31
  primary: true
31
32
  index_keys:
32
33
  - "record_info_tesim"
34
+ predicate: http://hyrax-example.com/record_info
33
35
  place_of_publication:
34
36
  type: string
35
37
  form:
36
38
  required: false
37
39
  primary: true
40
+ predicate: http://hyrax-example.com/place_of_publication
38
41
  genre:
39
42
  type: string
40
43
  form:
41
44
  primary: true
45
+ predicate: http://hyrax-example.com/genre
42
46
  series_title:
43
47
  type: string
44
48
  form:
45
49
  primary: false
50
+ predicate: http://hyrax-example.com/series_title
46
51
  target_audience:
47
52
  type: string
48
53
  form:
49
54
  multiple: true
55
+ predicate: http://hyrax-example.com/target_audience
50
56
  table_of_contents:
51
57
  type: string
52
58
  form:
53
59
  multiple: false
60
+ predicate: http://hyrax-example.com/table_of_contents
54
61
  date_of_issuance:
55
62
  type: string
63
+ predicate: http://hyrax-example.com/date_of_issuance
@@ -1,3 +1,4 @@
1
1
  attributes:
2
2
  sample_attribute:
3
3
  type: string
4
+ predicate: http://hyrax-example.com/sample_attribute
@@ -1,9 +1,11 @@
1
1
  development:
2
2
  host: <%= ENV.fetch('REDIS_HOST', 'localhost') %>
3
3
  port: <%= ENV.fetch('REDIS_PORT', 6379) %>
4
+ password: <%= ENV['REDIS_PASSWORD'] %>
4
5
  test:
5
6
  host: <%= ENV.fetch('REDIS_HOST', 'localhost') %>
6
7
  port: <%= ENV.fetch('REDIS_PORT', 6379) %>
8
+ password: <%= ENV['REDIS_PASSWORD'] %>
7
9
  production:
8
10
  host: <%= ENV.fetch('REDIS_HOST', 'localhost') %>
9
11
  port: <%= ENV.fetch('REDIS_PORT', 6379) %>
@@ -0,0 +1,14 @@
1
+ class CreateHyraxCounterMetrics < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :hyrax_counter_metrics do |t|
4
+ t.string :worktype
5
+ t.string :resource_type
6
+ t.integer :work_id
7
+ t.date :date
8
+ t.integer :total_item_investigations
9
+ t.integer :total_item_requests
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ class ChangeWorkIdToString < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_column :hyrax_counter_metrics, :work_id, :string
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ class AddIndicesToHyraxCounterMetrics < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_index :hyrax_counter_metrics, :worktype
4
+ add_index :hyrax_counter_metrics, :resource_type
5
+ add_index :hyrax_counter_metrics, :work_id
6
+ add_index :hyrax_counter_metrics, :date
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ class AddFieldsToCounterMetric < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :hyrax_counter_metrics, :title, :string
4
+ add_column :hyrax_counter_metrics, :year_of_publication, :integer, index: true
5
+ add_column :hyrax_counter_metrics, :publisher, :string, index: true
6
+ add_column :hyrax_counter_metrics, :author, :string, index: true
7
+ end
8
+ end
data/.dassie/db/schema.rb CHANGED
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 2021_11_30_181150) do
13
+ ActiveRecord::Schema.define(version: 2023_08_21_153635) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -140,6 +140,25 @@ ActiveRecord::Schema.define(version: 2021_11_30_181150) do
140
140
  t.index ["machine_id"], name: "index_hyrax_collection_types_on_machine_id", unique: true
141
141
  end
142
142
 
143
+ create_table "hyrax_counter_metrics", force: :cascade do |t|
144
+ t.string "worktype"
145
+ t.string "resource_type"
146
+ t.string "work_id"
147
+ t.date "date"
148
+ t.integer "total_item_investigations"
149
+ t.integer "total_item_requests"
150
+ t.datetime "created_at", null: false
151
+ t.datetime "updated_at", null: false
152
+ t.string "title"
153
+ t.integer "year_of_publication"
154
+ t.string "publisher"
155
+ t.string "author"
156
+ t.index ["date"], name: "index_hyrax_counter_metrics_on_date"
157
+ t.index ["resource_type"], name: "index_hyrax_counter_metrics_on_resource_type"
158
+ t.index ["work_id"], name: "index_hyrax_counter_metrics_on_work_id"
159
+ t.index ["worktype"], name: "index_hyrax_counter_metrics_on_worktype"
160
+ end
161
+
143
162
  create_table "hyrax_default_administrative_set", force: :cascade do |t|
144
163
  t.string "default_admin_set_id", null: false
145
164
  t.datetime "created_at", null: false
data/.dockerignore CHANGED
@@ -16,6 +16,7 @@ chart/*
16
16
 
17
17
  Gemfile.lock
18
18
  .dassie/Gemfile.lock
19
+ .koppie/Gemfile.lock
19
20
 
20
21
  node_modules/*
21
- yarn.lock
22
+ yarn.lock
data/.gitignore CHANGED
@@ -4,7 +4,7 @@
4
4
  ruby-version
5
5
  ruby-gemset
6
6
  .rvmrc
7
- Gemfile.lock
7
+ Gemfile*.lock
8
8
 
9
9
  # don't push around data files (for dev envs only)
10
10
  fcrepo4-data
data/.koppie/.env CHANGED
@@ -1,3 +1,7 @@
1
+ APP_NAME=koppie
2
+ BUNDLE_GEMFILE=Gemfile.koppie
3
+ BUNDLE_PATH=/app/bundle
4
+ CH12N_TOOL=fits_servlet
1
5
  CHROME_HEADLESS_MODE=false
2
6
  DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL=true
3
7
  DATABASE_TEST_URL=postgresql://hyrax_user:hyrax_password@postgres/hyrax_test?pool=5
@@ -7,6 +11,7 @@ DB_NAME=koppie
7
11
  DB_PASSWORD=hyrax_password
8
12
  DB_PORT=5432
9
13
  DB_USERNAME=hyrax_user
14
+ FCREPO_URL=http://fedoraAdmin:fedoraAdmin@fcrepo:8080/fcrepo/rest
10
15
  FITS_SERVLET_URL=http://fits:8080/fits
11
16
  HUB_URL=http://chrome:4444/wd/hub
12
17
  HYRAX_DERIVATIVES_PATH=/app/samvera/hyrax-webapp/derivatives/
@@ -16,6 +21,7 @@ HYRAX_VALKYRIE=true
16
21
  IN_DOCKER=true
17
22
  KARMA_BROWSER=remote-chromium
18
23
  KARMA_HOSTNAME=app
24
+ MEMCACHED_HOST=memcached
19
25
  METADATA_DATABASE_NAME=koppie_metadata_development
20
26
  POSTGRES_DB=koppie
21
27
  POSTGRES_HOST_AUTH_METHOD=trust
@@ -28,7 +34,7 @@ RAILS_LOG_TO_STDOUT=true
28
34
  RAILS_QUEUE=sidekiq
29
35
  REDIS_HOST=redis
30
36
  REDIS_PASSWORD=sidekickin
31
- REDIS_URL=redis://noop:sidekickin@redis:6379
37
+ REDIS_URL=redis://:sidekickin@redis:6379
32
38
  SEED_KOPPIE=true
33
39
  SKIP_SELENIUM=
34
40
  SOLR_COLLECTION_NAME=koppie
@@ -37,6 +43,6 @@ SOLR_CORES=koppie
37
43
  SOLR_HOST=solr
38
44
  SOLR_PORT=8983
39
45
  SOLR_URL=http://solr:8983/solr/koppie
40
- VALKYRIE_SOLR_CORE=koppie
41
- VALKYRIE_SOLR_HOST=solr
42
- VALKYRIE_SOLR_PORT=8983
46
+ SOLR_TEST_URL=http://solr:8983/solr/koppie_test
47
+ VALKYRIE_METADATA_ADAPTER=pg_metadata
48
+ VALKYRIE_STORAGE_ADAPTER=versioned_disk_storage
data/.koppie/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+ # Attempts to determine if a global gem source has ready been added by another Gemfile
1
3
  if @sources.global_rubygems_source == Bundler::SourceList.new.global_rubygems_source
2
4
  Bundler.ui.info '[Koppie] Adding global rubygems source.'
3
5
  source 'https://rubygems.org'
@@ -10,15 +12,14 @@ gem 'bootsnap', '>= 1.1.0', require: false
10
12
  gem 'bootstrap', '~> 4.0'
11
13
  gem 'coffee-rails', '~> 4.2'
12
14
  gem 'dalli'
13
- gem 'devise', '4.8.0'
14
- gem 'devise-guests', '0.8.1'
15
- gem 'hydra-role-management'
15
+ gem 'devise'
16
+ gem 'devise-guests', '~> 0.8'
16
17
  gemspec name: 'hyrax', path: ENV.fetch('HYRAX_ENGINE_PATH', '..')
17
18
  gem 'jbuilder', '~> 2.5'
18
19
  gem 'jquery-rails'
19
20
  gem 'pg', '~> 1.3'
20
- gem 'puma', '~> 5.5.2'
21
- gem 'rails', '~> 6.0'
21
+ gem 'puma'
22
+ gem 'rails', '~> 6.1'
22
23
  gem 'riiif', '~> 2.1'
23
24
  gem 'rsolr', '>= 1.0', '< 3'
24
25
  gem 'sass-rails', '~> 6.0'
@@ -41,11 +42,8 @@ group :development do
41
42
  end
42
43
 
43
44
  group :development, :test do
44
- gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
45
- gem "pry-byebug"
46
- gem "pry-doc"
47
- gem "pry-rails"
48
- gem "pry-rescue"
49
- gem 'rspec-rails'
50
- gem 'solr_wrapper', '>= 0.3'
45
+ gem 'debug', '>= 1.0.0'
46
+ gem 'pry-doc'
47
+ gem 'pry-rails'
48
+ gem 'pry-rescue'
51
49
  end
@@ -0,0 +1,2 @@
1
+ # Use dedicated lock files for dassie/koppie to avoid gem mismatches
2
+ eval_gemfile 'Gemfile'
data/.koppie/Rakefile CHANGED
@@ -4,5 +4,3 @@
4
4
  require_relative 'config/application'
5
5
 
6
6
  Rails.application.load_tasks
7
-
8
- require 'solr_wrapper/rake_task' unless Rails.env.production?
@@ -3,6 +3,5 @@
3
3
  # Generated via
4
4
  # `rails generate hyrax:collection_resource CollectionResource`
5
5
  class CollectionResourceForm < Hyrax::Forms::PcdmCollectionForm
6
- include Hyrax::FormFields(:basic_metadata)
7
6
  include Hyrax::FormFields(:collection_resource)
8
7
  end
@@ -3,6 +3,5 @@
3
3
  # Generated via
4
4
  # `rails generate hyrax:collection_resource CollectionResource`
5
5
  class CollectionResourceIndexer < Hyrax::PcdmCollectionIndexer
6
- include Hyrax::Indexer(:basic_metadata)
7
6
  include Hyrax::Indexer(:collection_resource)
8
7
  end
@@ -1,15 +1,11 @@
1
1
  class Ability
2
2
  include Hydra::Ability
3
-
3
+
4
4
  include Hyrax::Ability
5
5
  self.ability_logic += [:everyone_can_create_curation_concerns]
6
6
 
7
7
  # Define any customized permissions here.
8
8
  def custom_permissions
9
- if current_user.admin?
10
- can [:create, :show, :add_user, :remove_user, :index, :edit, :update, :destroy], Role
11
- end
12
-
13
9
  # Limits deleting objects to a the admin user
14
10
  #
15
11
  # if current_user.admin?
@@ -27,6 +27,5 @@ class CollectionResource < Hyrax::PcdmCollection
27
27
  # * add Valkyrie attributes to this class
28
28
  # * update form and indexer to process the attributes
29
29
  #
30
- include Hyrax::Schema(:basic_metadata)
31
30
  include Hyrax::Schema(:collection_resource)
32
31
  end
@@ -1,8 +1,6 @@
1
1
  class User < ApplicationRecord
2
2
  # Connects this user object to Hydra behaviors.
3
3
  include Hydra::User
4
- # Connects this user object to Role-management behaviors.
5
- include Hydra::RoleManagement::UserRoles
6
4
 
7
5
  # Connects this user object to Hyrax behaviors.
8
6
  include Hyrax::User
@@ -6,7 +6,7 @@ require 'rails/all'
6
6
  # you've limited to :test, :development, or :production.
7
7
  Bundler.require(*Rails.groups)
8
8
 
9
- module NuraxPg
9
+ module Koppie
10
10
  class Application < Rails::Application
11
11
  # Initialize configuration defaults for originally generated Rails version.
12
12
  config.load_defaults 6.0
@@ -15,6 +15,7 @@ module NuraxPg
15
15
  # Application configuration can go into files in config/initializers
16
16
  # -- all .rb files in that directory are automatically loaded after loading
17
17
  # the framework and any gems in your application.
18
+ config.session_store :cookie_store, key: "_#{ENV.fetch('APP_NAME', 'koppie')}_session"
18
19
 
19
20
  # use SideKiq by default
20
21
  config.active_job.queue_adapter = :sidekiq
@@ -0,0 +1,6 @@
1
+ development:
2
+ url: http://localhost:8888/
3
+ test:
4
+ url: http://localhost:8888/
5
+ production:
6
+ url: http://production.host/
@@ -1,9 +1,9 @@
1
1
  development:
2
2
  adapter: solr
3
- url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/nurax-pg-blacklight-dev" %>
3
+ url: <%= ENV['SOLR_DEVELOPMENT_URL'] || ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/nurax-pg-blacklight-dev" %>
4
4
  test: &test
5
5
  adapter: solr
6
- url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:#{ENV.fetch('SOLR_TEST_PORT', 8985)}/solr/nurax-pg-test" %>
6
+ url: <%= ENV['SOLR_TEST_URL'] || ENV['SOLR_URL'] || "http://127.0.0.1:#{ENV.fetch('SOLR_TEST_PORT', 8985)}/solr/nurax-pg-test" %>
7
7
  production:
8
8
  adapter: solr
9
9
  url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/nurax-pg" %>
@@ -0,0 +1,2 @@
1
+ batch_upload:
2
+ enabled: "true"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ require 'faraday/multipart'
2
3
 
3
4
  # require "shrine/storage/s3"
4
5
  # require "valkyrie/storage/shrine"
@@ -24,9 +25,20 @@
24
25
  # :nurax_pg_metadata_adapter)
25
26
  Valkyrie::MetadataAdapter.register(
26
27
  Valkyrie::Persistence::Postgres::MetadataAdapter.new,
27
- :nurax_pg_metadata_adapter
28
+ :pg_metadata
28
29
  )
29
- Valkyrie.config.metadata_adapter = :nurax_pg_metadata_adapter
30
+
31
+ Valkyrie::MetadataAdapter.register(
32
+ Valkyrie::Persistence::Fedora::MetadataAdapter.new(
33
+ connection: ::Ldp::Client.new(Hyrax.config.fedora_connection_builder.call(
34
+ ENV.fetch('FCREPO_URL') { "http://localhost:8080/fcrepo/rest" })),
35
+ base_path: Rails.env,
36
+ schema: Valkyrie::Persistence::Fedora::PermissiveSchema.new(Hyrax::SimpleSchemaLoader.new.permissive_schema_for_valkrie_adapter),
37
+ fedora_version: 6
38
+ ), :fedora_metadata
39
+ )
40
+
41
+ Valkyrie.config.metadata_adapter = ENV.fetch('VALKYRIE_METADATA_ADAPTER') { :pg_metadata }.to_sym
30
42
 
31
43
  # shrine_s3_options = {
32
44
  # bucket: ENV.fetch("REPOSITORY_S3_BUCKET") { "nurax_pg#{Rails.env}" },
@@ -46,11 +58,22 @@ Valkyrie.config.metadata_adapter = :nurax_pg_metadata_adapter
46
58
  # )
47
59
  #
48
60
  # Valkyrie.config.storage_adapter = :repository_s3
61
+
49
62
  Valkyrie::StorageAdapter.register(
50
- Valkyrie::Storage::Disk.new(base_path: Rails.root.join("storage", "files"),
51
- file_mover: FileUtils.method(:cp)),
52
- :disk
63
+ Valkyrie::Storage::Fedora.new(
64
+ connection: ::Ldp::Client.new(Hyrax.config.fedora_connection_builder.call(
65
+ ENV.fetch('FCREPO_URL') { "http://localhost:8080/fcrepo/rest" })),
66
+ base_path: Rails.env,
67
+ fedora_version: 6
68
+ ), :fedora_storage
53
69
  )
54
- Valkyrie.config.storage_adapter = :disk
70
+
71
+ Valkyrie::StorageAdapter.register(
72
+ Valkyrie::Storage::VersionedDisk.new(base_path: Rails.root.join("storage", "files"),
73
+ file_mover: FileUtils.method(:cp)),
74
+ :versioned_disk_storage
75
+ )
76
+
77
+ Valkyrie.config.storage_adapter = ENV.fetch('VALKYRIE_STORAGE_ADAPTER') { :versioned_disk_storage }.to_sym
55
78
 
56
79
  Valkyrie.config.indexing_adapter = :solr_index
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ module Hyrax
3
+ class ArkivoConstraint
4
+ def self.matches?(_request)
5
+ # Add your own logic here to authorize trusted connections to
6
+ # the API e.g., if your installation of Arkivo runs on a host
7
+ # with the 10.0.0.3 IP address, you could use:
8
+ # request.remote_ip == '10.0.0.3'
9
+ true
10
+ end
11
+ end
12
+ end