hyrax 1.0.2 → 1.0.3
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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +0 -1
- data/README.md +2 -2
- data/app/assets/javascripts/hyrax/autocomplete.es6 +1 -1
- data/app/assets/javascripts/hyrax/batch_select.js +1 -1
- data/app/assets/javascripts/hyrax/collections.js +6 -7
- data/app/authorities/qa/authorities/find_works.rb +2 -0
- data/app/controllers/concerns/hyrax/download_behavior.rb +1 -1
- data/app/controllers/concerns/hyrax/transfers_controller_behavior.rb +2 -1
- data/app/forms/hyrax/forms/batch_edit_form.rb +1 -1
- data/app/helpers/hyrax/hyrax_helper_behavior.rb +0 -12
- data/app/models/concerns/hyrax/ability.rb +32 -1
- data/app/models/concerns/hyrax/collection_behavior.rb +18 -8
- data/app/models/proxy_deposit_request.rb +1 -1
- data/app/models/sipity/entity.rb +7 -0
- data/app/presenters/hyrax/collection_presenter.rb +1 -1
- data/app/search_builders/hyrax/find_works_search_builder.rb +2 -1
- data/app/services/hyrax/microdata.rb +1 -1
- data/app/services/hyrax/persist_directly_contained_output_file_service.rb +27 -12
- data/app/services/hyrax/workflow/abstract_notification.rb +28 -0
- data/app/services/hyrax/workflow/permission_query.rb +5 -2
- data/app/views/hyrax/base/_browse_everything.html.erb +1 -1
- data/app/views/hyrax/batch_uploads/_form.html.erb +6 -1
- data/app/views/hyrax/collections/_button_for_update_collection.html.erb +4 -1
- data/app/views/hyrax/transfers/new.html.erb +5 -17
- data/config/locales/hyrax.en.yml +8 -0
- data/config/locales/hyrax.es.yml +8 -0
- data/config/locales/hyrax.zh.yml +8 -0
- data/hyrax.gemspec +14 -5
- data/lib/hyrax/version.rb +1 -1
- data/spec/abilities/ability_spec.rb +1 -0
- data/spec/controllers/hyrax/downloads_controller_spec.rb +2 -1
- data/spec/controllers/hyrax/transfers_controller_spec.rb +2 -2
- data/spec/features/ownership_transfer_spec.rb +3 -3
- data/spec/features/work_show_spec.rb +8 -1
- data/spec/forms/hyrax/forms/batch_edit_form_spec.rb +18 -14
- data/spec/models/proxy_deposit_request_spec.rb +1 -1
- data/spec/presenters/hyrax/collection_presenter_spec.rb +11 -5
- data/spec/services/hyrax/persist_directly_contained_output_file_service_spec.rb +7 -5
- data/spec/support/selectors.rb +0 -6
- data/spec/views/hyrax/base/_browse_everything.html.erb_spec.rb +1 -0
- data/spec/views/hyrax/batch_edits/edit.html.erb_spec.rb +1 -1
- data/spec/views/hyrax/batch_uploads/_form.html.erb_spec.rb +2 -0
- data/template.rb +1 -1
- metadata +38 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53d0448b486959ee94b0d0162e0c63ce940ba4e7
|
4
|
+
data.tar.gz: 24c811f8e483eb5de9a5cbb05b763cb45748e0ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e52f858b31059312c2905af9000b0035424ac47589ff0d5c40a87d6e3b92fd94c35ee9b6456bbebee70fae3804841fcc66b6a913b64e2fb8f47dfad66e1449c
|
7
|
+
data.tar.gz: 16c3b93cdbebcd3c2cbdee9527db865e88d9ad635e46d32979bb337862023a2ecf1992babe2a7ac196510e01f539c5a663706725220b6699a281c94e306e2f95
|
data/.rubocop_todo.yml
CHANGED
@@ -153,7 +153,6 @@ RSpec/AnyInstance:
|
|
153
153
|
- 'spec/controllers/hyrax/mailbox_controller_spec.rb'
|
154
154
|
- 'spec/controllers/hyrax/stats_controller_spec.rb'
|
155
155
|
- 'spec/controllers/hyrax/users_controller_spec.rb'
|
156
|
-
- 'spec/controllers/hyrax/transfers_controller_spec.rb'
|
157
156
|
- 'spec/jobs/file_set_attached_event_job_spec.rb'
|
158
157
|
- 'spec/jobs/content_update_event_job_spec.rb'
|
159
158
|
- 'spec/jobs/content_restored_version_event_job_spec.rb'
|
data/README.md
CHANGED
@@ -59,7 +59,7 @@ If you have questions or need help, please email [the Hydra community tech list]
|
|
59
59
|
# Getting started
|
60
60
|
|
61
61
|
This document contains instructions specific to setting up an app with __Hyrax
|
62
|
-
v1.0.
|
62
|
+
v1.0.3__. If you are looking for instructions on installing a different
|
63
63
|
version, be sure to select the appropriate branch or tag from the drop-down
|
64
64
|
menu above.
|
65
65
|
|
@@ -133,7 +133,7 @@ Rails requires that you have a JavaScript runtime -- for example, nodejs -- inst
|
|
133
133
|
Generate a new Rails application using the template.
|
134
134
|
|
135
135
|
```
|
136
|
-
rails new my_app -m https://raw.githubusercontent.com/samvera/hyrax/v1.0.
|
136
|
+
rails new my_app -m https://raw.githubusercontent.com/samvera/hyrax/v1.0.3/template.rb
|
137
137
|
```
|
138
138
|
|
139
139
|
Generating a new Rails application using Hyrax's template above takes cares of a number of steps for you, including:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Blacklight.onLoad(function () {
|
2
2
|
$('input.submits-batches').on('click', function() {
|
3
|
-
var form = $(this).closest("form");
|
3
|
+
var form = $(this).closest("form");
|
4
4
|
$.map( $(".batch_document_selector:checked"), function(document, i) {
|
5
5
|
var id = document.id.substring("batch_document_".length);
|
6
6
|
if (form.children("input[value='"+id+"']").length == 0)
|
@@ -1,13 +1,12 @@
|
|
1
1
|
Blacklight.onLoad(function () {
|
2
2
|
|
3
3
|
// change the action based which collection is selected
|
4
|
-
|
5
|
-
|
6
|
-
var
|
7
|
-
var
|
8
|
-
|
4
|
+
// This expects the form to have a path that includes the string 'collection_replace_id'
|
5
|
+
$('[data-behavior="updates-collection"]').on('click', function() {
|
6
|
+
var string_to_replace = "collection_replace_id"
|
7
|
+
var form = $(this).closest("form");
|
8
|
+
var collection_id = $(".collection-selector:checked")[0].value;
|
9
|
+
form[0].action = form[0].action.replace(string_to_replace, collection_id);
|
9
10
|
form.append('<input type="hidden" value="add" name="collection[members]"></input>');
|
10
|
-
|
11
11
|
});
|
12
|
-
|
13
12
|
});
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Qa::Authorities
|
2
2
|
class FindWorks < Qa::Authorities::Base
|
3
3
|
def search(_q, controller)
|
4
|
+
# The FindWorksSearchBuilder expects a current_user
|
5
|
+
return [] unless controller.current_user
|
4
6
|
repo = CatalogController.new.repository
|
5
7
|
builder = Hyrax::FindWorksSearchBuilder.new(controller)
|
6
8
|
response = repo.search(builder)
|
@@ -39,7 +39,7 @@ module Hyrax
|
|
39
39
|
# Hydra::Ability#download_permissions can't be used in this case because it assumes
|
40
40
|
# that files are in a LDP basic container, and thus, included in the asset's uri.
|
41
41
|
def authorize_download!
|
42
|
-
authorize! :
|
42
|
+
authorize! :download, params[asset_param_key]
|
43
43
|
rescue CanCan::AccessDenied
|
44
44
|
redirect_to default_image
|
45
45
|
end
|
@@ -28,7 +28,8 @@ module Hyrax
|
|
28
28
|
if @proxy_deposit_request.save
|
29
29
|
redirect_to hyrax.transfers_path, notice: "Transfer request created"
|
30
30
|
else
|
31
|
-
|
31
|
+
@work = Hyrax::WorkRelation.new.find(params[:id])
|
32
|
+
render :new
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
@@ -41,7 +41,7 @@ module Hyrax
|
|
41
41
|
permissions = []
|
42
42
|
# For each of the files in the batch, set the attributes to be the concatenation of all the attributes
|
43
43
|
batch_document_ids.each do |doc_id|
|
44
|
-
work =
|
44
|
+
work = ActiveFedora::Base.find(doc_id)
|
45
45
|
terms.each do |key|
|
46
46
|
combined_attributes[key] ||= []
|
47
47
|
combined_attributes[key] = (combined_attributes[key] + work[key].to_a).uniq
|
@@ -46,18 +46,6 @@ module Hyrax
|
|
46
46
|
user_agent.include? 'Chrome'
|
47
47
|
end
|
48
48
|
|
49
|
-
def error_messages_for(object)
|
50
|
-
return '' unless object.try(:errors) && object.errors.full_messages.any?
|
51
|
-
content_tag(:div, class: 'alert alert-block alert-error validation-errors') do
|
52
|
-
content_tag(:h4, I18n.t('hyrax.errors.header', model: object.class.model_name.human.downcase), class: 'alert-heading') +
|
53
|
-
content_tag(:ul) do
|
54
|
-
object.errors.full_messages.map do |message|
|
55
|
-
content_tag(:li, message)
|
56
|
-
end.join('').html_safe
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
49
|
# @param [ProxyDepositRequest] req
|
62
50
|
def show_transfer_request_title(req)
|
63
51
|
if req.deleted_work? || req.canceled?
|
@@ -19,6 +19,25 @@ module Hyrax
|
|
19
19
|
:trophy_abilities]
|
20
20
|
end
|
21
21
|
|
22
|
+
# Samvera doesn't use download user/groups, so make it an alias to read
|
23
|
+
# Grant all groups with read or edit access permission to download
|
24
|
+
def download_groups(id)
|
25
|
+
doc = permissions_doc(id)
|
26
|
+
return [] if doc.nil?
|
27
|
+
groups = Array(doc[self.class.read_group_field]) + Array(doc[self.class.edit_group_field])
|
28
|
+
Rails.logger.debug("[CANCAN] download_groups: #{groups.inspect}")
|
29
|
+
groups
|
30
|
+
end
|
31
|
+
|
32
|
+
# Grant all users with read or edit access permission to download
|
33
|
+
def download_users(id)
|
34
|
+
doc = permissions_doc(id)
|
35
|
+
return [] if doc.nil?
|
36
|
+
users = Array(doc[self.class.read_user_field]) + Array(doc[self.class.edit_user_field])
|
37
|
+
Rails.logger.debug("[CANCAN] download_users: #{users.inspect}")
|
38
|
+
users
|
39
|
+
end
|
40
|
+
|
22
41
|
# Returns true if can create at least one type of work
|
23
42
|
def can_create_any_work?
|
24
43
|
Hyrax.config.curation_concerns.any? do |curation_concern_type|
|
@@ -34,6 +53,18 @@ module Hyrax
|
|
34
53
|
|
35
54
|
private
|
36
55
|
|
56
|
+
# This overrides hydra-head, (and restores the method from blacklight-access-controls)
|
57
|
+
def download_permissions
|
58
|
+
can :download, String do |id|
|
59
|
+
test_download(id)
|
60
|
+
end
|
61
|
+
|
62
|
+
can :download, SolrDocument do |obj|
|
63
|
+
cache.put(obj.id, obj)
|
64
|
+
test_download(obj.id)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
37
68
|
# Add this to your ability_logic if you want all logged in users to be able
|
38
69
|
# to submit content
|
39
70
|
def everyone_can_create_curation_concerns
|
@@ -142,7 +173,7 @@ module Hyrax
|
|
142
173
|
alias_action :edit, to: :update
|
143
174
|
alias_action :show, to: :read
|
144
175
|
alias_action :discover, to: :read
|
145
|
-
|
176
|
+
can :download, String # The identifier of a work or FileSet
|
146
177
|
can :manage, curation_concerns_models
|
147
178
|
can :manage, Sipity::WorkflowResponsibility
|
148
179
|
end
|
@@ -56,30 +56,40 @@ module Hyrax
|
|
56
56
|
# @return [Fixnum] size of collection in bytes
|
57
57
|
# @raise [RuntimeError] unsaved record does not exist in solr
|
58
58
|
def bytes
|
59
|
-
return 0 if
|
59
|
+
return 0 if member_object_ids.empty?
|
60
60
|
|
61
61
|
raise "Collection must be saved to query for bytes" if new_record?
|
62
62
|
|
63
63
|
# One query per member_id because Solr is not a relational database
|
64
|
-
|
64
|
+
member_object_ids.collect { |work_id| size_for_work(work_id) }.sum
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# Use this query to get the ids of the member objects (since the containment
|
70
|
+
# association has been flipped)
|
71
|
+
def member_object_ids
|
72
|
+
return [] unless id
|
73
|
+
ActiveFedora::Base.search_with_conditions("member_of_collection_ids_ssim:#{id}").map(&:id)
|
74
|
+
end
|
75
|
+
|
76
|
+
# Calculate the size of all the files in the work
|
77
|
+
# @param work_id [String] identifer for a work
|
78
|
+
# @return [Integer] the size in bytes
|
79
|
+
def size_for_work(work_id)
|
65
80
|
argz = { fl: "id, #{file_size_field}",
|
66
81
|
fq: "{!join from=#{member_ids_field} to=id}id:#{work_id}" }
|
67
82
|
files = ::FileSet.search_with_conditions({}, argz)
|
68
83
|
files.reduce(0) { |sum, f| sum + f[file_size_field].to_i }
|
69
84
|
end
|
70
85
|
|
71
|
-
sizes.reduce(0, :+)
|
72
|
-
end
|
73
|
-
|
74
|
-
private
|
75
|
-
|
76
86
|
# Field name to look up when locating the size of each file in Solr.
|
77
87
|
# Override for your own installation if using something different
|
78
88
|
def file_size_field
|
79
89
|
Solrizer.solr_name(:file_size, Hyrax::FileSetIndexer::STORED_LONG)
|
80
90
|
end
|
81
91
|
|
82
|
-
# Solr field name
|
92
|
+
# Solr field name works use to index member ids
|
83
93
|
def member_ids_field
|
84
94
|
Solrizer.solr_name('member_ids', :symbol)
|
85
95
|
end
|
@@ -64,7 +64,7 @@ class ProxyDepositRequest < ActiveRecord::Base
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def sending_user_should_not_be_receiving_user
|
67
|
-
errors.add(:
|
67
|
+
errors.add(:transfer_to, 'specify a different user to receive the work') if receiving_user && receiving_user.user_key == sending_user.user_key
|
68
68
|
end
|
69
69
|
|
70
70
|
def should_not_be_already_part_of_a_transfer
|
data/app/models/sipity/entity.rb
CHANGED
@@ -5,6 +5,13 @@ module Sipity
|
|
5
5
|
#
|
6
6
|
# The goal is to keep this behavior separate, so that we can possibly
|
7
7
|
# extract the information.
|
8
|
+
# @example To get the Sipity::Entity for a work
|
9
|
+
# work = GenericWork.first
|
10
|
+
# work_global_id = work.to_global_id.to_s
|
11
|
+
# => "gid://whatever/GenericWork/3x816m604"
|
12
|
+
# Sipity::Entity.where(proxy_for_global_id: work_global_id).first
|
13
|
+
# => #<Sipity::Entity id: 1, proxy_for_global_id: "gid://whatever/GenericWork/3x816m604",
|
14
|
+
# workflow_id: 8, workflow_state_id: 20, created_at: "2017-07-07 13:39:42", updated_at: "2017-07-07 13:39:42">
|
8
15
|
class Entity < ActiveRecord::Base
|
9
16
|
self.table_name = 'sipity_entities'
|
10
17
|
|
@@ -8,7 +8,8 @@ class Hyrax::FindWorksSearchBuilder < Hyrax::SearchBuilder
|
|
8
8
|
# Excludes the id that is part of the params
|
9
9
|
def initialize(context)
|
10
10
|
super(context)
|
11
|
-
|
11
|
+
# Without an id this class will produce an invalid query.
|
12
|
+
@id = context.params[:id] || raise("missing required parameter: id")
|
12
13
|
@q = context.params[:q]
|
13
14
|
end
|
14
15
|
|
@@ -5,22 +5,37 @@ module Hyrax
|
|
5
5
|
# This method conforms to the signature of the .call method on Hydra::Derivatives::PersistOutputFileService
|
6
6
|
# * Persists the file within the DirectContainer specified by :container
|
7
7
|
#
|
8
|
-
# @param [String] the data to be persisted
|
9
|
-
# @param [Hash]
|
8
|
+
# @param content [String] the data to be persisted
|
9
|
+
# @param directives [Hash] directions which can be used to determine where to persist to.
|
10
10
|
# @option directives [String] url URI for the parent object.
|
11
11
|
# @option directives [String] container Name of the container association.
|
12
|
-
def self.call(
|
13
|
-
file =
|
14
|
-
|
15
|
-
|
16
|
-
uri = URI(directives.fetch(:url))
|
17
|
-
raise ArgumentError, "#{uri} is not an http(s) uri" unless uri.is_a?(URI::HTTP)
|
18
|
-
file_set = ActiveFedora::Base.find(ActiveFedora::Base.uri_to_id(uri.to_s))
|
19
|
-
remote_file = file_set.send("build_#{directives.fetch(:container)}".to_sym)
|
12
|
+
def self.call(content, directives)
|
13
|
+
file = io(content, directives)
|
14
|
+
file_set = retrieve_file_set(directives)
|
15
|
+
remote_file = retrieve_remote_file(file_set, directives)
|
20
16
|
remote_file.content = file
|
21
|
-
remote_file.mime_type =
|
22
|
-
remote_file.original_name =
|
17
|
+
remote_file.mime_type = determine_mime_type(file)
|
18
|
+
remote_file.original_name = determine_original_name(file)
|
23
19
|
file_set.save
|
24
20
|
end
|
21
|
+
|
22
|
+
# @param directives [Hash] directions which can be used to determine where to persist to.
|
23
|
+
# @option directives [String] url URI for the parent object.
|
24
|
+
def self.retrieve_file_set(directives)
|
25
|
+
uri = URI(directives.fetch(:url))
|
26
|
+
raise ArgumentError, "#{uri} is not an http(s) uri" unless uri.is_a?(URI::HTTP)
|
27
|
+
ActiveFedora::Base.find(ActiveFedora::Base.uri_to_id(uri.to_s))
|
28
|
+
end
|
29
|
+
private_class_method :retrieve_file_set
|
30
|
+
|
31
|
+
# Override this implementation if you need a remote file from a different location
|
32
|
+
# @param file_set [FileSet] the container of the remote file
|
33
|
+
# @param directives [Hash] directions which can be used to determine where to persist to
|
34
|
+
# @option directives [String] container Name of the container association.
|
35
|
+
# @return [ActiveFedora::File]
|
36
|
+
def self.retrieve_remote_file(file_set, directives)
|
37
|
+
file_set.send("build_#{directives.fetch(:container)}".to_sym)
|
38
|
+
end
|
39
|
+
private_class_method :retrieve_remote_file
|
25
40
|
end
|
26
41
|
end
|
@@ -1,5 +1,27 @@
|
|
1
1
|
module Hyrax
|
2
2
|
module Workflow
|
3
|
+
# @abstract A notification that happens when a state transition occurs. Subclass AbstractNotification to create a notification.
|
4
|
+
# @example
|
5
|
+
# module Hyrax
|
6
|
+
# module Workflow
|
7
|
+
# class LocalApprovedNotification < AbstractNotification
|
8
|
+
# private
|
9
|
+
#
|
10
|
+
# def subject
|
11
|
+
# "Deposit #{title} has been approved"
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# def message
|
15
|
+
# "#{title} (#{link_to work_id, document_path}) has been approved by #{user.display_name} #{comment}"
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# # Add the user who initiated this action to the list of users being notified
|
19
|
+
# def users_to_notify
|
20
|
+
# super << user
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
# end
|
3
25
|
class AbstractNotification
|
4
26
|
include ActionView::Helpers::UrlHelper
|
5
27
|
|
@@ -9,6 +31,12 @@ module Hyrax
|
|
9
31
|
|
10
32
|
attr_reader :work_id, :title, :comment, :user, :recipients
|
11
33
|
|
34
|
+
# @param [Sipity::Entity] entity - the Sipity::Entity that is a proxy for the relevant Hyrax work
|
35
|
+
# @param [#comment] comment - the comment associated with the action being taken, could be a Sipity::Comment, or anything that responds to a #comment method
|
36
|
+
# @param [Hyrax::User] user - the user who has performed the relevant action
|
37
|
+
# @param [Hash] recipients - a hash with keys "to" and (optionally) "cc"
|
38
|
+
# @option recipients [Array<Hyrax::User>] :to a list of users to which to send the notification
|
39
|
+
# @option recipients [Array<Hyrax::User>] :cc a list of users to which to copy on the notification
|
12
40
|
def initialize(entity, comment, user, recipients)
|
13
41
|
@work_id = entity.proxy_for_global_id.sub(/.*\//, '')
|
14
42
|
@title = entity.proxy_for.title.first
|
@@ -257,8 +257,11 @@ module Hyrax
|
|
257
257
|
.and(entity_responsibilities[:entity_id].eq(entity.id))
|
258
258
|
)
|
259
259
|
|
260
|
-
#
|
261
|
-
|
260
|
+
# Default to "integer" for adapters like Postgres and Sqlite, but cast
|
261
|
+
# to "signed" for Mysql. The type CAST causes a SQL syntax error for an
|
262
|
+
# unsupported type depending on which adapter is being used.
|
263
|
+
type = ActiveRecord::Base.connection.adapter_name.casecmp("mysql2").zero? ? "signed" : "integer"
|
264
|
+
cast = Arel::Nodes::NamedFunction.new "CAST", [agent_table[:proxy_for_id].as(type)]
|
262
265
|
|
263
266
|
sub_query_for_user = agent_table.project(cast).where(
|
264
267
|
agent_table[:id].in(workflow_agent_id_subquery)
|
@@ -3,4 +3,4 @@
|
|
3
3
|
</div>
|
4
4
|
<%= button_tag(t('hyrax.upload.browse_everything.browse_files_button'), type: 'button', class: 'btn btn-lg btn-success', id: "browse-btn",
|
5
5
|
'data-toggle' => 'browse-everything', 'data-route' => browse_everything_engine.root_path,
|
6
|
-
'data-target' => "
|
6
|
+
'data-target' => "#{f.object.persisted? ? "#edit_#{f.object.model.model_name.param_key}_#{f.object.model.id}" : "#new_#{f.object.model.model_name.param_key}"}" ) %>
|
@@ -1,4 +1,9 @@
|
|
1
|
-
<%= simple_form_for [hyrax, @form],
|
1
|
+
<%= simple_form_for [hyrax, @form],
|
2
|
+
html: {
|
3
|
+
data: { behavior: 'work-form',
|
4
|
+
'param-key' => @form.model_name.param_key },
|
5
|
+
multipart: true
|
6
|
+
} do |f| %>
|
2
7
|
<% content_for :files_tab do %>
|
3
8
|
<p class="instructions"><%= t("hyrax.batch_uploads.files.instructions") %></p>
|
4
9
|
<p class="switch-upload-type"><%= t("hyrax.batch_uploads.files.upload_type_instructions") %>
|
@@ -1,4 +1,7 @@
|
|
1
1
|
<%# button for updating a collections %>
|
2
2
|
<%# collection_id -- collection to be updated (use 'collection_replace_id' if you wish the form to be updated by a form value) %>
|
3
3
|
<%# label -- button label %>
|
4
|
-
<%= button_to label, collection_path(collection_id),
|
4
|
+
<%= button_to label, collection_path(collection_id),
|
5
|
+
method: :put,
|
6
|
+
class: "btn btn-primary submits-batches",
|
7
|
+
data: { behavior: 'updates-collection' } %>
|
@@ -1,23 +1,11 @@
|
|
1
1
|
<h1>Transfer ownership of "<%= @proxy_deposit_request.to_s %>"</h1>
|
2
2
|
<span class="sr-only">Select a user to transfer <%= @proxy_deposit_request.to_s %> to, add optional comments and then press transfer.</span>
|
3
|
-
<%=
|
4
|
-
url: hyrax.work_transfers_path(@work)
|
5
|
-
|
6
|
-
<%=
|
7
|
-
<div class="control-group">
|
8
|
-
<%= f.label :transfer_to, "User", class: 'control-label' %>
|
9
|
-
<div class="controls">
|
10
|
-
<%= f.text_field :transfer_to, "aria-hidden" => true %>
|
11
|
-
</div>
|
12
|
-
</div>
|
13
|
-
<div class="control-group">
|
14
|
-
<%= f.label :sender_comment, "Comments", class: 'control-label' %>
|
15
|
-
<div class="controls">
|
16
|
-
<%= f.text_area :sender_comment %>
|
17
|
-
</div>
|
18
|
-
</div>
|
3
|
+
<%= simple_form_for @proxy_deposit_request,
|
4
|
+
url: hyrax.work_transfers_path(@work) do |f| %>
|
5
|
+
<%= f.input :transfer_to %>
|
6
|
+
<%= f.input :sender_comment %>
|
19
7
|
|
20
8
|
<div class="form-actions">
|
21
|
-
<%= f.submit
|
9
|
+
<%= f.submit class: 'btn btn-primary', data: { confirm: t('.confirm') } %>
|
22
10
|
</div>
|
23
11
|
<% end %>
|
data/config/locales/hyrax.en.yml
CHANGED
@@ -42,6 +42,8 @@ en:
|
|
42
42
|
update: 'Save'
|
43
43
|
hyrax_permission_template_access:
|
44
44
|
create: 'Add'
|
45
|
+
proxy_deposit_request:
|
46
|
+
create: 'Transfer'
|
45
47
|
update: 'Save'
|
46
48
|
hyrax:
|
47
49
|
account_label: "User"
|
@@ -568,6 +570,9 @@ en:
|
|
568
570
|
menu: "Works"
|
569
571
|
my: "My Works"
|
570
572
|
new: "New Work"
|
573
|
+
transfers:
|
574
|
+
new:
|
575
|
+
confirm: "Are you sure you want to transfer ownership of this work to another user? Click Ok to transfer or Cancel to return to the transfer screen"
|
571
576
|
upload:
|
572
577
|
alert:
|
573
578
|
contact_href_text: "contact form"
|
@@ -728,5 +733,8 @@ en:
|
|
728
733
|
visibility_after_lease: 'then restrict it to'
|
729
734
|
visibility_during_embargo: 'Restricted to'
|
730
735
|
visibility_during_lease: 'Is available for'
|
736
|
+
proxy_deposit_request:
|
737
|
+
transfer_to: "User"
|
738
|
+
sender_comment: "Comments"
|
731
739
|
required:
|
732
740
|
html: '<span class="label label-info required-tag">required</span>'
|
data/config/locales/hyrax.es.yml
CHANGED
@@ -42,6 +42,8 @@ es:
|
|
42
42
|
update: 'Guardar'
|
43
43
|
hyrax_permission_template_access:
|
44
44
|
create: 'Agregar'
|
45
|
+
proxy_deposit_request:
|
46
|
+
create: 'Transferir'
|
45
47
|
update: 'Guardar'
|
46
48
|
hyrax:
|
47
49
|
account_label: "Usuario"
|
@@ -567,6 +569,9 @@ es:
|
|
567
569
|
menu: "Trabajos"
|
568
570
|
my: "Mis Trabajos"
|
569
571
|
new: "Nuevo"
|
572
|
+
transfers:
|
573
|
+
new:
|
574
|
+
confirm: "¿Está seguro de que desea transferir la propiedad de este trabajo a otro usuario? Haga clic en Aceptar para transferir o Cancelar para volver a la pantalla de transferencia"
|
570
575
|
upload:
|
571
576
|
alert:
|
572
577
|
contact_href_text: "formulario de contacto"
|
@@ -727,5 +732,8 @@ es:
|
|
727
732
|
visibility_after_lease: 'luego restringirlo a'
|
728
733
|
visibility_during_embargo: 'Restringido a'
|
729
734
|
visibility_during_lease: 'Está disponible para'
|
735
|
+
proxy_deposit_request:
|
736
|
+
transfer_to: "Usuario"
|
737
|
+
sender_comment: "Comentarios"
|
730
738
|
required:
|
731
739
|
html: '<span class="label label-info required-tag">obligatorio</span>'
|
data/config/locales/hyrax.zh.yml
CHANGED
@@ -53,6 +53,8 @@ zh:
|
|
53
53
|
update: '保存'
|
54
54
|
hyrax_permission_template_access:
|
55
55
|
create: '添加'
|
56
|
+
proxy_deposit_request:
|
57
|
+
create: '转让'
|
56
58
|
update: '保存'
|
57
59
|
hyrax:
|
58
60
|
account_label: "用户"
|
@@ -578,6 +580,9 @@ zh:
|
|
578
580
|
logout: "退出登录"
|
579
581
|
sr_action: "阅览"
|
580
582
|
sr_target: "个人资料"
|
583
|
+
transfers:
|
584
|
+
new:
|
585
|
+
confirm: "您确定要将此作品的所有权转让给其他使用者吗? 单击确定转移或取消返回到传输屏幕"
|
581
586
|
upload:
|
582
587
|
alert:
|
583
588
|
contact_href_text: "联系表格"
|
@@ -726,5 +731,8 @@ zh:
|
|
726
731
|
visibility_after_lease: '仅限'
|
727
732
|
visibility_during_embargo: '仅限'
|
728
733
|
visibility_during_lease: '可使用'
|
734
|
+
proxy_deposit_request:
|
735
|
+
transfer_to: "用户"
|
736
|
+
sender_comment: "注释"
|
729
737
|
required:
|
730
738
|
html: '<span class="label label-info required-tag">需要的</span>'
|
data/hyrax.gemspec
CHANGED
@@ -6,9 +6,16 @@ require 'hyrax/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.authors = ["Justin Coyne", 'Michael J. Giarlo', "Carolyn Cole", "Matt Zumwalt", 'Jeremy Friesen', 'Trey Pendragon', 'Esmé Cowles']
|
8
8
|
spec.email = ["jcoyne85@stanford.edu", 'mjgiarlo@stanford.edu', 'cam156@psu.edu', 'matt@databindery.com', "jeremy.n.friesen@gmail.com", 'tpendragon@princeton.edu', 'escowles@ticklefish.org']
|
9
|
-
spec.description = 'Hyrax is a featureful
|
10
|
-
spec.summary =
|
11
|
-
|
9
|
+
spec.description = 'Hyrax is a featureful Samvera front-end based on the latest and greatest Samvera software components.'
|
10
|
+
spec.summary = <<-EOF
|
11
|
+
Hyrax is a front-end based on the robust Samvera framework, providing a user
|
12
|
+
interface for common repository features. Hyrax offers the ability to create
|
13
|
+
repository object types on demand, to deposit content via multiple workflows,
|
14
|
+
and to describe content with flexible metadata. Numerous optional features may
|
15
|
+
be turned on in the administrative dashboard or added through plugins.
|
16
|
+
EOF
|
17
|
+
|
18
|
+
spec.homepage = "http://github.com/samvera/hyrax"
|
12
19
|
|
13
20
|
spec.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
14
21
|
spec.executables = spec.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
@@ -16,11 +23,12 @@ Gem::Specification.new do |spec|
|
|
16
23
|
spec.name = "hyrax"
|
17
24
|
spec.require_paths = ["lib"]
|
18
25
|
spec.version = Hyrax::VERSION
|
19
|
-
spec.license = '
|
26
|
+
spec.license = 'Apache-2.0'
|
20
27
|
|
21
28
|
spec.add_dependency 'hydra-head', '>= 10.4.0'
|
22
29
|
spec.add_dependency 'hydra-editor', '~> 3.2'
|
23
30
|
spec.add_dependency 'hydra-works', '~> 0.16'
|
31
|
+
spec.add_dependency 'hydra-derivatives', '~> 3.3'
|
24
32
|
spec.add_dependency 'browse-everything', '>= 0.10.5'
|
25
33
|
spec.add_dependency 'blacklight', '~> 6.9'
|
26
34
|
spec.add_dependency 'blacklight-gallery', '~> 0.7'
|
@@ -59,7 +67,8 @@ Gem::Specification.new do |spec|
|
|
59
67
|
spec.add_dependency 'active_attr', '~> 0.9'
|
60
68
|
spec.add_dependency 'redlock', '~> 0.1.2'
|
61
69
|
spec.add_dependency 'retriable', '>= 2.9', '< 4.0'
|
62
|
-
spec.add_dependency 'active-fedora', '>= 11.1
|
70
|
+
spec.add_dependency 'active-fedora', '>= 11.3.1'
|
71
|
+
spec.add_dependency 'linkeddata' # Required for getting values from geonames
|
63
72
|
|
64
73
|
spec.add_development_dependency 'engine_cart', '~> 1.0'
|
65
74
|
spec.add_development_dependency 'mida', '~> 0.3'
|
data/lib/hyrax/version.rb
CHANGED
@@ -43,6 +43,7 @@ describe 'Hyrax::Ability', type: :model do
|
|
43
43
|
it { is_expected.to be_able_to(:update, ContentBlock) }
|
44
44
|
it { is_expected.to be_able_to(:read, ContentBlock) }
|
45
45
|
it { is_expected.to be_able_to(:read, Hyrax::Statistics) }
|
46
|
+
it { is_expected.to be_able_to(:download, 'abcd123') } # an id for a work/FileSet
|
46
47
|
it { is_expected.to be_able_to(:read, :admin_dashboard) }
|
47
48
|
it { is_expected.to be_able_to(:manage, AdminSet) }
|
48
49
|
it { is_expected.to be_able_to(:create, AdminSet) }
|
@@ -31,7 +31,7 @@ describe Hyrax::DownloadsController do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'authorizes the resource using only the id' do
|
34
|
-
expect(controller).to receive(:authorize!).with(:
|
34
|
+
expect(controller).to receive(:authorize!).with(:download, file_set.id)
|
35
35
|
get :show, params: { id: file_set.to_param }
|
36
36
|
end
|
37
37
|
end
|
@@ -55,6 +55,7 @@ describe Hyrax::DownloadsController do
|
|
55
55
|
|
56
56
|
it 'sends requested file content' do
|
57
57
|
get :show, params: { id: file_set, file: 'thumbnail' }
|
58
|
+
expect(response).to be_success
|
58
59
|
expect(response.body).to eq content
|
59
60
|
expect(response.headers['Content-Length']).to eq "4218"
|
60
61
|
expect(response.headers['Accept-Ranges']).to eq "bytes"
|
@@ -71,7 +71,6 @@ describe Hyrax::TransfersController, type: :controller do
|
|
71
71
|
describe "#create" do
|
72
72
|
let(:work) { create(:work, user: user) }
|
73
73
|
it "is successful" do
|
74
|
-
allow_any_instance_of(User).to receive(:display_name).and_return("Jill Z. User")
|
75
74
|
expect do
|
76
75
|
post :create, params: {
|
77
76
|
id: work.id,
|
@@ -99,7 +98,8 @@ describe Hyrax::TransfersController, type: :controller do
|
|
99
98
|
post :create, params: { id: work.id, proxy_deposit_request: { transfer_to: 'foo' } }
|
100
99
|
end.not_to change(ProxyDepositRequest, :count)
|
101
100
|
expect(assigns[:proxy_deposit_request].errors[:transfer_to]).to eq(['must be an existing user'])
|
102
|
-
expect(
|
101
|
+
expect(assigns[:work]).to be_instance_of GenericWork
|
102
|
+
expect(response).to be_success
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
@@ -20,8 +20,8 @@ RSpec.describe 'Transferring work ownership:', type: :feature do
|
|
20
20
|
|
21
21
|
context 'To myself' do
|
22
22
|
before { transfer_ownership_of_work work, original_owner }
|
23
|
-
it '
|
24
|
-
expect(page).to have_content '
|
23
|
+
it 'displays an appropriate error message' do
|
24
|
+
expect(page).to have_content 'specify a different user to receive the work'
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -94,6 +94,6 @@ RSpec.describe 'Transferring work ownership:', type: :feature do
|
|
94
94
|
new_owner_search_field.set new_owner.user_key
|
95
95
|
new_owner_search_result.click
|
96
96
|
fill_in 'proxy_deposit_request[sender_comment]', with: 'Work transfer comments'
|
97
|
-
|
97
|
+
click_button "Transfer"
|
98
98
|
end
|
99
99
|
end
|
@@ -5,7 +5,14 @@ describe "display a work as its owner" do
|
|
5
5
|
end
|
6
6
|
|
7
7
|
context "as the work owner" do
|
8
|
-
let(:work)
|
8
|
+
let(:work) do
|
9
|
+
create(:work_with_one_file,
|
10
|
+
with_admin_set: true,
|
11
|
+
title: ["Magnificent splendor"],
|
12
|
+
source: ["The Internet"],
|
13
|
+
based_near: ["USA"],
|
14
|
+
user: user)
|
15
|
+
end
|
9
16
|
let(:user) { create(:user) }
|
10
17
|
before do
|
11
18
|
sign_in user
|
@@ -15,22 +15,26 @@ RSpec.describe Hyrax::Forms::BatchEditForm do
|
|
15
15
|
related_url: ['related_url1']
|
16
16
|
end
|
17
17
|
|
18
|
+
# Using a different work type in order to show that the form supports
|
19
|
+
# batches containing multiple types of works
|
18
20
|
let(:work2) do
|
19
|
-
create
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
21
|
+
RareBooks::Atlas.create!(
|
22
|
+
title: ["title 2"],
|
23
|
+
keyword: ["123"],
|
24
|
+
creator: ["Fred"],
|
25
|
+
publisher: ['Rand McNally'],
|
26
|
+
language: ['en'],
|
27
|
+
resource_type: ['bar'],
|
28
|
+
contributor: ['contributor2'],
|
29
|
+
description: ['description2'],
|
30
|
+
rights: ['rights2'],
|
31
|
+
subject: ['subject2'],
|
32
|
+
identifier: ['id2'],
|
33
|
+
based_near: ['based_near2'],
|
34
|
+
related_url: ['related_url2']
|
35
|
+
)
|
33
36
|
end
|
37
|
+
|
34
38
|
let(:batch) { [work1.id, work2.id] }
|
35
39
|
let(:form) { described_class.new(model, ability, batch) }
|
36
40
|
let(:ability) { Ability.new(user) }
|
@@ -124,7 +124,7 @@ describe ProxyDepositRequest, type: :model do
|
|
124
124
|
it 'raises an error' do
|
125
125
|
subject.transfer_to = sender.user_key
|
126
126
|
expect(subject).not_to be_valid
|
127
|
-
expect(subject.errors[:
|
127
|
+
expect(subject.errors[:transfer_to]).to eq(['specify a different user to receive the work'])
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
@@ -75,12 +75,12 @@ describe Hyrax::CollectionPresenter do
|
|
75
75
|
it { is_expected.to eq ['adc12v'] }
|
76
76
|
end
|
77
77
|
|
78
|
-
describe "#size" do
|
78
|
+
describe "#size", :clean_repo do
|
79
79
|
subject { presenter.size }
|
80
80
|
it { is_expected.to eq '0 Bytes' }
|
81
81
|
end
|
82
82
|
|
83
|
-
describe "#total_items" do
|
83
|
+
describe "#total_items", :clean_repo do
|
84
84
|
subject { presenter.total_items }
|
85
85
|
|
86
86
|
context "empty collection" do
|
@@ -88,13 +88,19 @@ describe Hyrax::CollectionPresenter do
|
|
88
88
|
end
|
89
89
|
|
90
90
|
context "collection with work" do
|
91
|
-
let(:work) {
|
92
|
-
|
91
|
+
let(:work) { create(:work, title: ['unimaginitive title']) }
|
92
|
+
|
93
|
+
before do
|
94
|
+
work.member_of_collections << collection
|
95
|
+
work.save!
|
96
|
+
end
|
97
|
+
|
93
98
|
it { is_expected.to eq 1 }
|
94
99
|
end
|
95
100
|
|
96
101
|
context "null members" do
|
97
|
-
let(:presenter) { described_class.new(
|
102
|
+
let(:presenter) { described_class.new(SolrDocument.new(id: '123'), nil) }
|
103
|
+
|
98
104
|
it { is_expected.to eq 0 }
|
99
105
|
end
|
100
106
|
end
|
@@ -2,17 +2,19 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
RSpec.describe Hyrax::PersistDirectlyContainedOutputFileService do
|
4
4
|
# PersistDirectlyContainedOutputFileService is used by FullTextExtract.output_file_service
|
5
|
-
let(:
|
6
|
-
let(:
|
5
|
+
let(:file_set) { FileSet.create! { |fs| fs.apply_depositor_metadata('justin') } }
|
6
|
+
let(:content) { "fake file content" }
|
7
7
|
subject(:call) do
|
8
|
-
described_class.call(
|
8
|
+
described_class.call(content,
|
9
9
|
format: 'txt',
|
10
|
-
url:
|
10
|
+
url: file_set.uri,
|
11
11
|
container: 'extracted_text')
|
12
12
|
end
|
13
|
+
let(:resource) { file_set.reload.extracted_text }
|
13
14
|
|
14
15
|
it "persists the file to the specified destination on the given object" do
|
15
16
|
expect(call).to be true
|
16
|
-
expect(
|
17
|
+
expect(resource.content).to eq("fake file content")
|
18
|
+
expect(resource.content.encoding).to eq(Encoding::UTF_8)
|
17
19
|
end
|
18
20
|
end
|
data/spec/support/selectors.rb
CHANGED
@@ -9,5 +9,6 @@ describe 'hyrax/base/_browse_everything.html.erb', type: :view do
|
|
9
9
|
render 'hyrax/base/browse_everything', f: f
|
10
10
|
page = Capybara::Node::Simple.new(rendered)
|
11
11
|
expect(page).to have_selector('div.alert-success', text: /Please note that if you upload a large number of files/i, count: 1)
|
12
|
+
expect(page).to have_selector("button[id='browse-btn'][data-target='#edit_generic_work_#{form.model.id}']")
|
12
13
|
end
|
13
14
|
end
|
@@ -4,7 +4,7 @@ describe 'hyrax/batch_edits/edit.html.erb', type: :view do
|
|
4
4
|
let(:form) { Hyrax::Forms::BatchEditForm.new(generic_work, nil, batch) }
|
5
5
|
|
6
6
|
before do
|
7
|
-
allow(
|
7
|
+
allow(ActiveFedora::Base).to receive(:find).and_return(generic_work)
|
8
8
|
|
9
9
|
# this prevents AF from hitting Fedora (permissions is a related object)
|
10
10
|
allow(generic_work).to receive(:permissions_attributes=)
|
@@ -18,6 +18,8 @@ describe 'hyrax/batch_uploads/_form.html.erb', type: :view do
|
|
18
18
|
|
19
19
|
it "draws the page" do
|
20
20
|
expect(page).to have_selector("form[action='/batch_uploads']")
|
21
|
+
expect(page).to have_selector("form[action='/batch_uploads'][data-behavior='work-form']")
|
22
|
+
expect(page).to have_selector("form[action='/batch_uploads'][data-param-key='batch_upload_item']")
|
21
23
|
# No title, because it's captured per file (e.g. Display label)
|
22
24
|
expect(page).not_to have_selector("input#generic_work_title")
|
23
25
|
expect(view.content_for(:files_tab)).to have_link("New Work", href: "/concern/generic_works/new")
|
data/template.rb
CHANGED
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: 1.0.
|
4
|
+
version: 1.0.3
|
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: 2017-
|
17
|
+
date: 2017-07-19 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: hydra-head
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0.16'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: hydra-derivatives
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.3'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.3'
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: browse-everything
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -614,14 +628,28 @@ dependencies:
|
|
614
628
|
requirements:
|
615
629
|
- - ">="
|
616
630
|
- !ruby/object:Gem::Version
|
617
|
-
version: 11.1
|
631
|
+
version: 11.3.1
|
632
|
+
type: :runtime
|
633
|
+
prerelease: false
|
634
|
+
version_requirements: !ruby/object:Gem::Requirement
|
635
|
+
requirements:
|
636
|
+
- - ">="
|
637
|
+
- !ruby/object:Gem::Version
|
638
|
+
version: 11.3.1
|
639
|
+
- !ruby/object:Gem::Dependency
|
640
|
+
name: linkeddata
|
641
|
+
requirement: !ruby/object:Gem::Requirement
|
642
|
+
requirements:
|
643
|
+
- - ">="
|
644
|
+
- !ruby/object:Gem::Version
|
645
|
+
version: '0'
|
618
646
|
type: :runtime
|
619
647
|
prerelease: false
|
620
648
|
version_requirements: !ruby/object:Gem::Requirement
|
621
649
|
requirements:
|
622
650
|
- - ">="
|
623
651
|
- !ruby/object:Gem::Version
|
624
|
-
version:
|
652
|
+
version: '0'
|
625
653
|
- !ruby/object:Gem::Dependency
|
626
654
|
name: engine_cart
|
627
655
|
requirement: !ruby/object:Gem::Requirement
|
@@ -908,8 +936,8 @@ dependencies:
|
|
908
936
|
- - ">="
|
909
937
|
- !ruby/object:Gem::Version
|
910
938
|
version: '0'
|
911
|
-
description: Hyrax is a featureful
|
912
|
-
|
939
|
+
description: Hyrax is a featureful Samvera front-end based on the latest and greatest
|
940
|
+
Samvera software components.
|
913
941
|
email:
|
914
942
|
- jcoyne85@stanford.edu
|
915
943
|
- mjgiarlo@stanford.edu
|
@@ -2543,9 +2571,9 @@ files:
|
|
2543
2571
|
- vendor/assets/javascripts/webcomponentsjs/0.5.4/CustomElements.min.js
|
2544
2572
|
- vendor/assets/stylesheets/morris.js/0.5.1/morris.css
|
2545
2573
|
- vendor/assets/stylesheets/sharing_buttons.css
|
2546
|
-
homepage: http://github.com/
|
2574
|
+
homepage: http://github.com/samvera/hyrax
|
2547
2575
|
licenses:
|
2548
|
-
-
|
2576
|
+
- Apache-2.0
|
2549
2577
|
metadata: {}
|
2550
2578
|
post_install_message:
|
2551
2579
|
rdoc_options: []
|
@@ -2563,10 +2591,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2563
2591
|
version: '0'
|
2564
2592
|
requirements: []
|
2565
2593
|
rubyforge_project:
|
2566
|
-
rubygems_version: 2.
|
2594
|
+
rubygems_version: 2.5.2
|
2567
2595
|
signing_key:
|
2568
2596
|
specification_version: 4
|
2569
|
-
summary: Hyrax is a front-end based on the robust
|
2597
|
+
summary: Hyrax is a front-end based on the robust Samvera framework, providing a user
|
2570
2598
|
interface for common repository features. Hyrax offers the ability to create repository
|
2571
2599
|
object types on demand, to deposit content via multiple workflows, and to describe
|
2572
2600
|
content with flexible metadata. Numerous optional features may be turned on in the
|