hyrax 4.0.0.rc1 → 4.0.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +61 -0
- data/.dassie/Gemfile +1 -1
- data/.dassie/config/initializers/redis_config.rb +8 -1
- data/.github/CONTRIBUTING.md +39 -27
- data/.koppie/config/initializers/redis_config.rb +8 -1
- data/.regen +1 -1
- data/CONTAINERS.md +4 -4
- data/Dockerfile +1 -1
- data/README.md +2 -2
- data/app/actors/hyrax/actors/create_with_files_actor.rb +1 -1
- data/app/builders/hyrax/bootstrap_breadcrumbs_builder.rb +1 -1
- data/app/controllers/concerns/hyrax/controller.rb +2 -1
- data/app/controllers/hyrax/admin/strategies_controller.rb +2 -2
- data/app/forms/hyrax/forms/administrative_set_form.rb +1 -1
- data/app/forms/hyrax/forms/pcdm_collection_form.rb +2 -2
- data/app/forms/hyrax/forms/pcdm_object_form.rb +1 -1
- data/app/forms/hyrax/forms/permission.rb +2 -2
- data/app/forms/hyrax/forms/resource_form.rb +10 -10
- data/app/forms/hyrax/forms/work_embargo_form.rb +3 -3
- data/app/forms/hyrax/forms/work_lease_form.rb +3 -3
- data/app/helpers/hyrax/content_block_helper_behavior.rb +1 -1
- data/app/helpers/hyrax/iiif_helper.rb +1 -1
- data/app/models/collection_branding_info.rb +7 -13
- data/app/models/hyrax/permission_template.rb +1 -1
- data/app/presenters/hyrax/iiif_manifest_presenter.rb +1 -1
- data/app/presenters/hyrax/presenter_factory.rb +2 -2
- data/app/services/hyrax/custom_queries/navigators/find_files.rb +1 -4
- data/app/services/hyrax/lock_manager.rb +36 -6
- data/app/services/hyrax/solr_service.rb +2 -2
- data/app/services/hyrax/visibility_reader.rb +1 -1
- data/app/services/hyrax/visibility_writer.rb +1 -1
- data/app/services/hyrax/workflow/permission_query.rb +5 -5
- data/app/validators/hyrax/collection_membership_validator.rb +2 -2
- data/app/views/layouts/hyrax/dashboard.html.erb +1 -1
- data/app/views/layouts/hyrax.html.erb +1 -1
- data/config/initializers/kaminari_engine_patch.rb +16 -0
- data/docker-compose-koppie.yml +0 -1
- data/docker-compose.yml +0 -1
- data/documentation/legacyREADME.md +3 -3
- data/hyrax.gemspec +4 -6
- data/lib/generators/hyrax/templates/config/initializers/redis_config.rb +8 -1
- data/lib/hyrax/configuration.rb +18 -1
- data/lib/hyrax/controlled_vocabularies/resource_label_caching.rb +1 -1
- data/lib/hyrax/engine.rb +2 -0
- data/lib/hyrax/redis_event_store.rb +21 -13
- data/lib/hyrax/transactions/transaction.rb +3 -2
- data/lib/hyrax/version.rb +1 -1
- data/lib/hyrax.rb +0 -1
- data/lib/wings/valkyrie/storage.rb +4 -1
- data/template.rb +1 -1
- metadata +24 -43
@@ -4,24 +4,54 @@ module Hyrax
|
|
4
4
|
class LockManager
|
5
5
|
class UnableToAcquireLockError < StandardError; end
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
##
|
9
8
|
# @param [Fixnum] time_to_live How long to hold the lock in milliseconds
|
10
9
|
# @param [Fixnum] retry_count How many times to retry to acquire the lock before raising UnableToAcquireLockError
|
11
10
|
# @param [Fixnum] retry_delay Maximum wait time in milliseconds before retrying. Wait time is a random value between 0 and retry_delay.
|
12
11
|
def initialize(time_to_live, retry_count, retry_delay)
|
13
12
|
@ttl = time_to_live
|
14
|
-
@
|
13
|
+
@retry_count = retry_count
|
14
|
+
@retry_delay = retry_delay
|
15
15
|
end
|
16
16
|
|
17
|
+
##
|
17
18
|
# Blocks until lock is acquired or timeout.
|
18
19
|
def lock(key)
|
19
20
|
returned_from_block = nil
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
|
22
|
+
pool.then do |conn|
|
23
|
+
client(conn).lock(key, @ttl) do |locked|
|
24
|
+
raise UnableToAcquireLockError unless locked
|
25
|
+
returned_from_block = yield
|
26
|
+
end
|
23
27
|
end
|
28
|
+
|
24
29
|
returned_from_block
|
30
|
+
rescue ConnectionPool::TimeoutError => err
|
31
|
+
Hyrax.logger.error(err.message)
|
32
|
+
raise(ConnectionPool::TimeoutError,
|
33
|
+
"Failed to aquire a lock from Redlock due to a Redis connection " /
|
34
|
+
"timeout: #{err}. If you are using Redis via `ConnectionPool` " /
|
35
|
+
"you may wish to increase the pool size.")
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
##
|
41
|
+
# @api_private
|
42
|
+
def client(conn)
|
43
|
+
Redlock::Client.new([conn], retry_count: @retry_count, retry_delay: @retry_delay)
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# @api private
|
48
|
+
#
|
49
|
+
# @note support both a ConnectionPool and a raw Redis client for now.
|
50
|
+
# we should drop support for `Redis.current` in 5.0.0.
|
51
|
+
# `#then` supports both options. for a ConnectionPool it will block
|
52
|
+
# until a connection is available.
|
53
|
+
def pool
|
54
|
+
Hyrax.config.redis_connection || Redis.current
|
25
55
|
end
|
26
56
|
end
|
27
57
|
end
|
@@ -128,8 +128,8 @@ module Hyrax
|
|
128
128
|
|
129
129
|
# Wraps ActiveFedora::Base#search_by_id(id, opts)
|
130
130
|
# @return [Array<SolrHit>] the response docs wrapped in SolrHit objects
|
131
|
-
def search_by_id(id, opts
|
132
|
-
result = Hyrax::SolrService.query("id:#{id}", opts.merge(rows: 1))
|
131
|
+
def search_by_id(id, **opts)
|
132
|
+
result = Hyrax::SolrService.query("id:#{id}", **opts.merge(rows: 1))
|
133
133
|
|
134
134
|
raise Hyrax::ObjectNotFoundError, "Object '#{id}' not found in solr" if result.empty?
|
135
135
|
result.first
|
@@ -55,7 +55,7 @@ module Hyrax
|
|
55
55
|
workflow_actions_scope.arel_table[:id].in(
|
56
56
|
workflow_state_actions_scope.arel_table.project(
|
57
57
|
workflow_state_actions_scope.arel_table[:workflow_action_id]
|
58
|
-
).where(workflow_state_actions_scope.arel.constraints.reduce)
|
58
|
+
).where(workflow_state_actions_scope.arel.constraints.reduce(:+))
|
59
59
|
)
|
60
60
|
)
|
61
61
|
end
|
@@ -307,7 +307,7 @@ module Hyrax
|
|
307
307
|
|
308
308
|
entity_specific_scope = scope_processing_workflow_roles_for_user_and_entity_specific(user: user, entity: entity)
|
309
309
|
Sipity::WorkflowRole.where(
|
310
|
-
workflow_scope.arel.constraints.reduce.or(entity_specific_scope.arel.constraints.reduce)
|
310
|
+
workflow_scope.arel.constraints.reduce(:+).or(entity_specific_scope.arel.constraints.reduce(:+))
|
311
311
|
)
|
312
312
|
end
|
313
313
|
|
@@ -358,7 +358,7 @@ module Hyrax
|
|
358
358
|
agent_scope.arel_table.project(
|
359
359
|
agent_scope.arel_table[:id]
|
360
360
|
).where(
|
361
|
-
agent_scope.arel.constraints.reduce.and(entity_responsibilities[:entity_id].eq(entity.id))
|
361
|
+
agent_scope.arel.constraints.reduce(:+).and(entity_responsibilities[:entity_id].eq(entity.id))
|
362
362
|
)
|
363
363
|
)
|
364
364
|
)
|
@@ -399,7 +399,7 @@ module Hyrax
|
|
399
399
|
).where(
|
400
400
|
permissions.arel_table[:workflow_role_id].in(
|
401
401
|
role_scope.arel_table.project(role_scope.arel_table[:id]).where(
|
402
|
-
role_scope.arel.constraints.reduce
|
402
|
+
role_scope.arel.constraints.reduce(:+)
|
403
403
|
)
|
404
404
|
)
|
405
405
|
)
|
@@ -441,7 +441,7 @@ module Hyrax
|
|
441
441
|
# @return [ActiveRecord::Relation<Sipity::WorkflowAction>]
|
442
442
|
def scope_workflow_actions_available_for_current_state(entity:)
|
443
443
|
workflow_actions_for_current_state = scope_workflow_actions_for_current_state(entity: entity)
|
444
|
-
Sipity::WorkflowAction.where(workflow_actions_for_current_state.arel.constraints.reduce)
|
444
|
+
Sipity::WorkflowAction.where(workflow_actions_for_current_state.arel.constraints.reduce(:+))
|
445
445
|
end
|
446
446
|
end
|
447
447
|
end
|
@@ -5,8 +5,8 @@ module Hyrax
|
|
5
5
|
class CollectionMembershipValidator < ActiveModel::Validator
|
6
6
|
##
|
7
7
|
# @param multiple_membership_checker
|
8
|
-
def initialize(
|
9
|
-
@multiple_membership_checker = multiple_membership_checker
|
8
|
+
def initialize(options = {})
|
9
|
+
@multiple_membership_checker = options[:multiple_membership_checker] || Hyrax::MultipleMembershipChecker
|
10
10
|
super(options)
|
11
11
|
end
|
12
12
|
|
@@ -16,7 +16,7 @@
|
|
16
16
|
<%= render 'hyrax/dashboard/sidebar' %>
|
17
17
|
</div>
|
18
18
|
<div class="main-content maximized<%= " admin-stats" if request.fullpath.include? '/admin/stats' %>">
|
19
|
-
<%= render_breadcrumbs builder: Hyrax
|
19
|
+
<%= render_breadcrumbs builder: Hyrax.config.breadcrumb_builder %>
|
20
20
|
<%= render '/flash_msg' %>
|
21
21
|
<% if content_for?(:page_header) %>
|
22
22
|
<div class="row">
|
@@ -15,7 +15,7 @@
|
|
15
15
|
<div id="content-wrapper" class="container" role="main">
|
16
16
|
<%= content_for(:container_header) %>
|
17
17
|
<%= render '/flash_msg' %>
|
18
|
-
<%= render_breadcrumbs builder: Hyrax
|
18
|
+
<%= render_breadcrumbs builder: Hyrax.config.breadcrumb_builder %>
|
19
19
|
<% if content_for?(:page_header) %>
|
20
20
|
<div class="row">
|
21
21
|
<div class="col-12 main-header">
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Add support for engine routes to kaminari
|
4
|
+
Rails.application.config.to_prepare do
|
5
|
+
Kaminari::Helpers::Tag.class_eval do
|
6
|
+
def page_url_for(page)
|
7
|
+
params = params_for(page)
|
8
|
+
params[:only_path] = true
|
9
|
+
if @options[:route_set]
|
10
|
+
@options[:route_set].url_for params
|
11
|
+
else
|
12
|
+
@template.url_for params
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/docker-compose-koppie.yml
CHANGED
data/docker-compose.yml
CHANGED
@@ -50,7 +50,7 @@ The Samvera community is here to help. Please see our [support guide](../.github
|
|
50
50
|
# Getting started
|
51
51
|
|
52
52
|
This document contains instructions specific to setting up an app with __Hyrax
|
53
|
-
v4.0.0.
|
53
|
+
v4.0.0.rc3__. If you are looking for instructions on installing a different
|
54
54
|
version, be sure to select the appropriate branch or tag from the drop-down
|
55
55
|
menu above.
|
56
56
|
|
@@ -129,7 +129,7 @@ Note here that the following commands assume you're setting up Hyrax in a develo
|
|
129
129
|
|
130
130
|
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).
|
131
131
|
|
132
|
-
Hyrax supports Ruby 2.
|
132
|
+
Hyrax supports Ruby 2.7, 3.0, 3.1 and 3.2. When starting a new project, we recommend using the latest Ruby 3.2 version.
|
133
133
|
|
134
134
|
## Redis
|
135
135
|
|
@@ -159,7 +159,7 @@ NOTE: The steps need to be done in order to create a new Hyrax based app.
|
|
159
159
|
Generate a new Rails application using the template.
|
160
160
|
|
161
161
|
```
|
162
|
-
rails _6.1.7.3_ new my_app -m https://raw.githubusercontent.com/samvera/hyrax/hyrax-v4.0.0.
|
162
|
+
rails _6.1.7.3_ new my_app -m https://raw.githubusercontent.com/samvera/hyrax/hyrax-v4.0.0.rc3/template.rb
|
163
163
|
```
|
164
164
|
|
165
165
|
Generating a new Rails application using Hyrax's template above takes cares of a number of steps for you, including:
|
data/hyrax.gemspec
CHANGED
@@ -32,7 +32,7 @@ SUMMARY
|
|
32
32
|
# http://guides.rubyonrails.org/maintenance_policy.html
|
33
33
|
spec.add_dependency 'rails', '~> 6.0'
|
34
34
|
|
35
|
-
spec.add_dependency 'active-fedora', '~>
|
35
|
+
spec.add_dependency 'active-fedora', '~> 14.0'
|
36
36
|
spec.add_dependency 'almond-rails', '~> 0.1'
|
37
37
|
spec.add_dependency 'awesome_nested_set', '~> 3.1'
|
38
38
|
spec.add_dependency 'blacklight', '~> 7.29'
|
@@ -41,6 +41,7 @@ SUMMARY
|
|
41
41
|
spec.add_dependency 'browse-everything', '>= 0.16', '< 2.0'
|
42
42
|
spec.add_dependency 'carrierwave', '~> 1.0'
|
43
43
|
spec.add_dependency 'clipboard-rails', '~> 1.5'
|
44
|
+
spec.add_dependency 'connection_pool', '~> 2.4'
|
44
45
|
spec.add_dependency 'draper', '~> 4.0'
|
45
46
|
spec.add_dependency 'dry-events', '~> 0.2.0'
|
46
47
|
spec.add_dependency 'dry-equalizer', '~> 0.2'
|
@@ -53,18 +54,16 @@ SUMMARY
|
|
53
54
|
spec.add_dependency 'font-awesome-rails', '~> 4.2'
|
54
55
|
spec.add_dependency 'hydra-derivatives', '~> 3.3'
|
55
56
|
spec.add_dependency 'hydra-editor', '~> 6.0'
|
56
|
-
spec.add_dependency 'hydra-file_characterization', '~> 1.1
|
57
|
+
spec.add_dependency 'hydra-file_characterization', '~> 1.1'
|
57
58
|
spec.add_dependency 'hydra-head', '~> 12.0'
|
58
59
|
spec.add_dependency 'hydra-works', '>= 0.16'
|
59
60
|
spec.add_dependency 'iiif_manifest', '>= 0.3', '< 2.0'
|
60
61
|
spec.add_dependency 'json-schema' # for Arkivo
|
61
|
-
# Pin more tightly because 0.x gems are potentially unstable
|
62
|
-
spec.add_dependency 'kaminari_route_prefix', '~> 0.1.1'
|
63
62
|
spec.add_dependency 'legato', '~> 0.3'
|
64
63
|
spec.add_dependency 'linkeddata' # Required for getting values from geonames
|
65
64
|
spec.add_dependency 'mailboxer', '~> 0.12'
|
66
65
|
spec.add_dependency 'nest', '~> 3.1'
|
67
|
-
spec.add_dependency 'noid-rails', '~> 3.0
|
66
|
+
spec.add_dependency 'noid-rails', '~> 3.0'
|
68
67
|
spec.add_dependency 'oauth'
|
69
68
|
spec.add_dependency 'oauth2', '~> 1.2'
|
70
69
|
spec.add_dependency 'openseadragon'
|
@@ -79,7 +78,6 @@ SUMMARY
|
|
79
78
|
spec.add_dependency 'reform', '~> 2.3'
|
80
79
|
spec.add_dependency 'reform-rails', '~> 0.2.0'
|
81
80
|
spec.add_dependency 'retriable', '>= 2.9', '< 4.0'
|
82
|
-
spec.add_dependency 'samvera-nesting_indexer', '~> 2.0'
|
83
81
|
spec.add_dependency 'signet'
|
84
82
|
spec.add_dependency 'tinymce-rails', '~> 5.10'
|
85
83
|
spec.add_dependency 'valkyrie', '~> 3.0.1'
|
@@ -1,4 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'redis'
|
3
|
+
require 'connection_pool'
|
3
4
|
config = YAML.safe_load(ERB.new(IO.read(Rails.root.join('config', 'redis.yml'))).result)[Rails.env].with_indifferent_access
|
4
|
-
|
5
|
+
config[:thread_safe] = true
|
6
|
+
|
7
|
+
size = ENV.fetch("HYRAX_REDIS_POOL_SIZE", 5)
|
8
|
+
timeout = ENV.fetch("HYRAX_REDIS_TIMEOUT", 5)
|
9
|
+
|
10
|
+
Hyrax.config.redis_connection =
|
11
|
+
ConnectionPool::Wrapper.new(size: size, timeout: timeout) { Redis.new(config) }
|
data/lib/hyrax/configuration.rb
CHANGED
@@ -393,6 +393,11 @@ module Hyrax
|
|
393
393
|
@banner_image ||= 'https://user-images.githubusercontent.com/101482/29949206-ffa60d2c-8e67-11e7-988d-4910b8787d56.jpg'
|
394
394
|
end
|
395
395
|
|
396
|
+
attr_writer :breadcrumb_builder
|
397
|
+
def breadcrumb_builder
|
398
|
+
@breadcrumb_builder ||= Hyrax::BootstrapBreadcrumbsBuilder
|
399
|
+
end
|
400
|
+
|
396
401
|
##
|
397
402
|
# @return [Boolean]
|
398
403
|
def disable_wings
|
@@ -611,9 +616,10 @@ module Hyrax
|
|
611
616
|
@persistent_hostpath ||= "http://localhost/files/"
|
612
617
|
end
|
613
618
|
|
619
|
+
attr_accessor :redis_connection
|
614
620
|
attr_writer :redis_namespace
|
615
621
|
def redis_namespace
|
616
|
-
@redis_namespace ||= "hyrax"
|
622
|
+
@redis_namespace ||= ENV.fetch("HYRAX_REDIS_NAMESPACE", "hyrax")
|
617
623
|
end
|
618
624
|
|
619
625
|
attr_writer :libreoffice_path
|
@@ -880,6 +886,17 @@ module Hyrax
|
|
880
886
|
@derivative_services ||= [Hyrax::FileSetDerivativesService]
|
881
887
|
end
|
882
888
|
|
889
|
+
attr_writer :visibility_map
|
890
|
+
# A mapping from visibility string values to permissions; the default and
|
891
|
+
# reference implementation is provided by {Hyrax::VisibilityMap}.
|
892
|
+
#
|
893
|
+
# @return [Hyrax::VisibilityMap]
|
894
|
+
# @see Hyrax::VisibilityReader
|
895
|
+
# @see Hyrax::VisibilityWriter
|
896
|
+
def visibility_map
|
897
|
+
@visibility_map ||= Hyrax::VisibilityMap.instance
|
898
|
+
end
|
899
|
+
|
883
900
|
private
|
884
901
|
|
885
902
|
# @param [Symbol, #to_s] model_name - symbol representing the model
|
data/lib/hyrax/engine.rb
CHANGED
@@ -107,6 +107,8 @@ module Hyrax
|
|
107
107
|
|
108
108
|
ActiveFedora::Base.translate_uri_to_id = c.translate_uri_to_id
|
109
109
|
ActiveFedora::Base.translate_id_to_uri = c.translate_id_to_uri
|
110
|
+
ActiveFedora::File.translate_uri_to_id = c.translate_uri_to_id
|
111
|
+
ActiveFedora::File.translate_id_to_uri = c.translate_id_to_uri
|
110
112
|
|
111
113
|
::Noid::Rails.config.template = c.noid_template
|
112
114
|
::Noid::Rails.config.minter_class = c.noid_minter_class
|
@@ -7,9 +7,11 @@ module Hyrax
|
|
7
7
|
class << self
|
8
8
|
# @return [Fixnum, nil] the id of the event, or `nil` on failure(?!)
|
9
9
|
def create(action, timestamp)
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
instance.then do |redis|
|
11
|
+
event_id = redis.incr("events:latest_id")
|
12
|
+
redis.hmset("events:#{event_id}", "action", action, "timestamp", timestamp)
|
13
|
+
event_id
|
14
|
+
end
|
13
15
|
rescue Redis::CommandError => e
|
14
16
|
logger.error("unable to create event: #{e}")
|
15
17
|
nil
|
@@ -23,12 +25,16 @@ module Hyrax
|
|
23
25
|
#
|
24
26
|
# @return [Redis]
|
25
27
|
def instance
|
26
|
-
|
27
|
-
|
28
|
+
connection = Hyrax.config.redis_connection || Redis.current
|
29
|
+
|
30
|
+
if connection.is_a? Redis::Namespace
|
31
|
+
connection.namespace = namespace
|
32
|
+
connection
|
33
|
+
elsif connection == Redis.current
|
34
|
+
Redis.current = Redis::Namespace.new(namespace, redis: connection)
|
28
35
|
else
|
29
|
-
|
36
|
+
connection
|
30
37
|
end
|
31
|
-
Redis.current
|
32
38
|
end
|
33
39
|
|
34
40
|
##
|
@@ -44,11 +50,13 @@ module Hyrax
|
|
44
50
|
#
|
45
51
|
# @return [Enumerable<Hash<Symbol, String>>]
|
46
52
|
def fetch(size)
|
47
|
-
RedisEventStore.instance.
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
53
|
+
Hyrax::RedisEventStore.instance.then do |redis|
|
54
|
+
redis.lrange(@key, 0, size).map do |event_id|
|
55
|
+
{
|
56
|
+
action: redis.hget("events:#{event_id}", "action"),
|
57
|
+
timestamp: redis.hget("events:#{event_id}", "timestamp")
|
58
|
+
}
|
59
|
+
end
|
52
60
|
end
|
53
61
|
rescue Redis::CommandError, Redis::CannotConnectError
|
54
62
|
RedisEventStore.logger.error("unable to fetch event: #{@key}")
|
@@ -62,7 +70,7 @@ module Hyrax
|
|
62
70
|
#
|
63
71
|
# @return [Integer, nil] the value successfully pushed; or `nil` on failure(!?)
|
64
72
|
def push(value)
|
65
|
-
RedisEventStore.instance.lpush(@key, value)
|
73
|
+
Hyrax::RedisEventStore.instance.then { |r| r.lpush(@key, value) }
|
66
74
|
rescue Redis::CommandError, Redis::CannotConnectError
|
67
75
|
RedisEventStore.logger.error("unable to push event: #{@key}")
|
68
76
|
nil
|
@@ -95,7 +95,8 @@ module Hyrax
|
|
95
95
|
def call(value)
|
96
96
|
Success(
|
97
97
|
steps.inject(value) do |val, step_name|
|
98
|
-
|
98
|
+
args = step_arguments_for(step_name)
|
99
|
+
yield container[step_name].call(val, *args[0..-2], **Hash(args[-1]))
|
99
100
|
end
|
100
101
|
)
|
101
102
|
end
|
@@ -119,7 +120,7 @@ module Hyrax
|
|
119
120
|
# tx = Hyrax::Transactions::Transaction.new(steps: [:first_step, :second_step])
|
120
121
|
# result = tx.with_step_args(second_step: {named_parameter: :param_value}).call(:value)
|
121
122
|
#
|
122
|
-
def with_step_args(args)
|
123
|
+
def with_step_args(**args)
|
123
124
|
raise(ArgumentError, key_err_msg(args.keys)) if
|
124
125
|
args.keys.any? { |key| !step?(key) }
|
125
126
|
|
data/lib/hyrax/version.rb
CHANGED
data/lib/hyrax.rb
CHANGED
@@ -20,7 +20,6 @@ require 'hyrax/version'
|
|
20
20
|
require 'hyrax/inflections'
|
21
21
|
require 'hyrax/name'
|
22
22
|
require 'hyrax/valkyrie_can_can_adapter'
|
23
|
-
require 'kaminari_route_prefix'
|
24
23
|
require 'valkyrie/indexing_adapter'
|
25
24
|
require 'valkyrie/indexing/solr/indexing_adapter'
|
26
25
|
require 'valkyrie/indexing/null_indexing_adapter'
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'faraday/multipart'
|
4
|
+
|
3
5
|
module Wings
|
4
6
|
module Valkyrie
|
5
7
|
##
|
@@ -67,8 +69,9 @@ module Wings
|
|
67
69
|
|
68
70
|
reader = RDF::Reader.for(content_type: response.headers['content-type'])
|
69
71
|
version_graph = RDF::Graph.new << reader.new(response.body)
|
72
|
+
query = { predicate: RDF::Vocab::Fcrepo4.hasVersion }
|
70
73
|
|
71
|
-
version_graph.query(
|
74
|
+
version_graph.query(query).objects.map do |uri|
|
72
75
|
timestamp =
|
73
76
|
version_graph.query([uri, RDF::Vocab::Fcrepo4.created, :created])
|
74
77
|
.first_object
|
data/template.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
# Hack for https://github.com/rails/rails/issues/35153
|
3
3
|
gsub_file 'Gemfile', /^gem ["']sqlite3["']$/, 'gem "sqlite3", "~> 1.3.0"'
|
4
|
-
gem 'hyrax', '4.0.0.
|
4
|
+
gem 'hyrax', '4.0.0.rc3'
|
5
5
|
run 'bundle install'
|
6
6
|
generate 'hyrax:install', '-f'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyrax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2023-
|
17
|
+
date: 2023-05-15 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: rails
|
@@ -36,20 +36,14 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 13.1.2
|
39
|
+
version: '14.0'
|
43
40
|
type: :runtime
|
44
41
|
prerelease: false
|
45
42
|
version_requirements: !ruby/object:Gem::Requirement
|
46
43
|
requirements:
|
47
44
|
- - "~>"
|
48
45
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 13.1.2
|
46
|
+
version: '14.0'
|
53
47
|
- !ruby/object:Gem::Dependency
|
54
48
|
name: almond-rails
|
55
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,6 +162,20 @@ dependencies:
|
|
168
162
|
- - "~>"
|
169
163
|
- !ruby/object:Gem::Version
|
170
164
|
version: '1.5'
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: connection_pool
|
167
|
+
requirement: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - "~>"
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '2.4'
|
172
|
+
type: :runtime
|
173
|
+
prerelease: false
|
174
|
+
version_requirements: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - "~>"
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '2.4'
|
171
179
|
- !ruby/object:Gem::Dependency
|
172
180
|
name: draper
|
173
181
|
requirement: !ruby/object:Gem::Requirement
|
@@ -328,14 +336,14 @@ dependencies:
|
|
328
336
|
requirements:
|
329
337
|
- - "~>"
|
330
338
|
- !ruby/object:Gem::Version
|
331
|
-
version: 1.1
|
339
|
+
version: '1.1'
|
332
340
|
type: :runtime
|
333
341
|
prerelease: false
|
334
342
|
version_requirements: !ruby/object:Gem::Requirement
|
335
343
|
requirements:
|
336
344
|
- - "~>"
|
337
345
|
- !ruby/object:Gem::Version
|
338
|
-
version: 1.1
|
346
|
+
version: '1.1'
|
339
347
|
- !ruby/object:Gem::Dependency
|
340
348
|
name: hydra-head
|
341
349
|
requirement: !ruby/object:Gem::Requirement
|
@@ -398,20 +406,6 @@ dependencies:
|
|
398
406
|
- - ">="
|
399
407
|
- !ruby/object:Gem::Version
|
400
408
|
version: '0'
|
401
|
-
- !ruby/object:Gem::Dependency
|
402
|
-
name: kaminari_route_prefix
|
403
|
-
requirement: !ruby/object:Gem::Requirement
|
404
|
-
requirements:
|
405
|
-
- - "~>"
|
406
|
-
- !ruby/object:Gem::Version
|
407
|
-
version: 0.1.1
|
408
|
-
type: :runtime
|
409
|
-
prerelease: false
|
410
|
-
version_requirements: !ruby/object:Gem::Requirement
|
411
|
-
requirements:
|
412
|
-
- - "~>"
|
413
|
-
- !ruby/object:Gem::Version
|
414
|
-
version: 0.1.1
|
415
409
|
- !ruby/object:Gem::Dependency
|
416
410
|
name: legato
|
417
411
|
requirement: !ruby/object:Gem::Requirement
|
@@ -474,14 +468,14 @@ dependencies:
|
|
474
468
|
requirements:
|
475
469
|
- - "~>"
|
476
470
|
- !ruby/object:Gem::Version
|
477
|
-
version: 3.0
|
471
|
+
version: '3.0'
|
478
472
|
type: :runtime
|
479
473
|
prerelease: false
|
480
474
|
version_requirements: !ruby/object:Gem::Requirement
|
481
475
|
requirements:
|
482
476
|
- - "~>"
|
483
477
|
- !ruby/object:Gem::Version
|
484
|
-
version: 3.0
|
478
|
+
version: '3.0'
|
485
479
|
- !ruby/object:Gem::Dependency
|
486
480
|
name: oauth
|
487
481
|
requirement: !ruby/object:Gem::Requirement
|
@@ -696,20 +690,6 @@ dependencies:
|
|
696
690
|
- - "<"
|
697
691
|
- !ruby/object:Gem::Version
|
698
692
|
version: '4.0'
|
699
|
-
- !ruby/object:Gem::Dependency
|
700
|
-
name: samvera-nesting_indexer
|
701
|
-
requirement: !ruby/object:Gem::Requirement
|
702
|
-
requirements:
|
703
|
-
- - "~>"
|
704
|
-
- !ruby/object:Gem::Version
|
705
|
-
version: '2.0'
|
706
|
-
type: :runtime
|
707
|
-
prerelease: false
|
708
|
-
version_requirements: !ruby/object:Gem::Requirement
|
709
|
-
requirements:
|
710
|
-
- - "~>"
|
711
|
-
- !ruby/object:Gem::Version
|
712
|
-
version: '2.0'
|
713
693
|
- !ruby/object:Gem::Dependency
|
714
694
|
name: signet
|
715
695
|
requirement: !ruby/object:Gem::Requirement
|
@@ -2962,6 +2942,7 @@ files:
|
|
2962
2942
|
- config/i18n-tasks.yml
|
2963
2943
|
- config/initializers/1_healthz.rb
|
2964
2944
|
- config/initializers/indexing_adapter_initializer.rb
|
2945
|
+
- config/initializers/kaminari_engine_patch.rb
|
2965
2946
|
- config/initializers/listeners.rb
|
2966
2947
|
- config/initializers/reform_rails_6_1_monkey_patch.rb
|
2967
2948
|
- config/initializers/simple_form.rb
|
@@ -3329,7 +3310,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
3329
3310
|
- !ruby/object:Gem::Version
|
3330
3311
|
version: 1.3.1
|
3331
3312
|
requirements: []
|
3332
|
-
rubygems_version: 3.4.
|
3313
|
+
rubygems_version: 3.4.12
|
3333
3314
|
signing_key:
|
3334
3315
|
specification_version: 4
|
3335
3316
|
summary: Hyrax is a front-end based on the robust Samvera framework, providing a user
|