curation_concerns 0.14.0.pre1 → 0.14.0.pre2
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/app/actors/curation_concerns/base_actor.rb +7 -2
- data/app/assets/stylesheets/curation_concerns/_positioning.scss +0 -1
- data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +1 -0
- data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +1 -0
- data/app/jobs/ingest_file_job.rb +1 -1
- data/app/presenters/curation_concerns/work_show_presenter.rb +25 -11
- data/curation_concerns.gemspec +1 -1
- data/lib/curation_concerns/configuration.rb +5 -4
- data/lib/curation_concerns/version.rb +1 -1
- data/lib/generators/curation_concerns/install_generator.rb +5 -0
- data/spec/actors/curation_concerns/work_actor_spec.rb +22 -2
- data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +1 -0
- data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +6 -0
- data/spec/controllers/selects_collections_controller_spec.rb +6 -19
- data/spec/factories/generic_works.rb +7 -0
- data/spec/jobs/ingest_file_job_spec.rb +2 -2
- data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +10 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57de72e25be5af57715ccfdb367577a5ebd9b98b
|
4
|
+
data.tar.gz: 278a1dcc3a79d15ba8472222b04877c7c804aa5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03414390a8504f7001eaeea69c5929a41c27d3db1c191ea19266bd056a8e8666931c7e0a897e0a3a6f6519325a1aaae9c9ca33a4423f50af7bfe185c76a64e3a
|
7
|
+
data.tar.gz: 3d0b2327008ca3ce0b866d5faa07b8ddbde751e072f68b2126c6b222ef74e89f5fb03e7bb44d6b1cb4c4cae18519fbd45be2bfdc408216089c52c6354ce0e48b
|
@@ -11,17 +11,22 @@ module CurationConcerns
|
|
11
11
|
@cloud_resources = attributes.delete(:cloud_resources.to_s)
|
12
12
|
apply_creation_data_to_curation_concern
|
13
13
|
apply_save_data_to_curation_concern(attributes)
|
14
|
-
next_actor.create(attributes) && save
|
14
|
+
next_actor.create(attributes) && save && run_callbacks(:after_create_concern)
|
15
15
|
end
|
16
16
|
|
17
17
|
def update(attributes)
|
18
18
|
apply_update_data_to_curation_concern
|
19
19
|
apply_save_data_to_curation_concern(attributes)
|
20
|
-
next_actor.update(attributes) && save
|
20
|
+
next_actor.update(attributes) && save && run_callbacks(:after_update_metadata)
|
21
21
|
end
|
22
22
|
|
23
23
|
protected
|
24
24
|
|
25
|
+
def run_callbacks(hook)
|
26
|
+
CurationConcerns.config.callback.run(hook, curation_concern, user)
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
25
30
|
def apply_creation_data_to_curation_concern
|
26
31
|
apply_depositor_metadata
|
27
32
|
apply_deposit_date
|
@@ -92,6 +92,7 @@ module CurationConcerns
|
|
92
92
|
respond_to do |wants|
|
93
93
|
wants.html do
|
94
94
|
initialize_edit_form
|
95
|
+
flash[:error] = "There was a problem processing your request."
|
95
96
|
render 'edit', status: :unprocessable_entity
|
96
97
|
end
|
97
98
|
wants.json { render_json_response(response_type: :unprocessable_entity, options: { errors: @file_set.errors }) }
|
data/app/jobs/ingest_file_job.rb
CHANGED
@@ -24,6 +24,6 @@ class IngestFileJob < ActiveJob::Base
|
|
24
24
|
|
25
25
|
# Do post file ingest actions
|
26
26
|
CurationConcerns::VersioningService.create(file_set.send(relation.to_sym), user)
|
27
|
-
CurationConcerns.config.callback.run(:
|
27
|
+
CurationConcerns.config.callback.run(:after_create_fileset, file_set, user)
|
28
28
|
end
|
29
29
|
end
|
@@ -4,7 +4,7 @@ module CurationConcerns
|
|
4
4
|
include PresentsAttributes
|
5
5
|
attr_accessor :solr_document, :current_ability
|
6
6
|
|
7
|
-
class_attribute :collection_presenter_class, :file_presenter_class
|
7
|
+
class_attribute :collection_presenter_class, :file_presenter_class, :work_presenter_class
|
8
8
|
|
9
9
|
# modify this attribute to use an alternate presenter class for the collections
|
10
10
|
self.collection_presenter_class = CollectionPresenter
|
@@ -12,6 +12,9 @@ module CurationConcerns
|
|
12
12
|
# modify this attribute to use an alternate presenter class for the files
|
13
13
|
self.file_presenter_class = FileSetPresenter
|
14
14
|
|
15
|
+
# modify this attribute to use an alternate presenter class for the child works
|
16
|
+
self.work_presenter_class = self
|
17
|
+
|
15
18
|
# @param [SolrDocument] solr_document
|
16
19
|
# @param [Ability] current_ability
|
17
20
|
def initialize(solr_document, current_ability)
|
@@ -37,6 +40,11 @@ module CurationConcerns
|
|
37
40
|
@file_set_presenters ||= member_presenters(ordered_ids & file_set_ids)
|
38
41
|
end
|
39
42
|
|
43
|
+
# @return [Array<WorkShowPresenter>] presenters for the ordered_members that are not FileSets
|
44
|
+
def work_presenters
|
45
|
+
@work_presenters ||= member_presenters(ordered_ids - file_set_ids, work_presenter_class)
|
46
|
+
end
|
47
|
+
|
40
48
|
# @deprecated
|
41
49
|
# @return [Array<FileSetPresenter>] presenters for the orderd_members that are FileSets
|
42
50
|
def file_presenters
|
@@ -44,10 +52,12 @@ module CurationConcerns
|
|
44
52
|
member_presenters
|
45
53
|
end
|
46
54
|
|
47
|
-
# @
|
48
|
-
|
55
|
+
# @param [Array<String>] ids a list of ids to build presenters for
|
56
|
+
# @param [Class] presenter_class the type of presenter to build
|
57
|
+
# @return [Array<presenter_class>] presenters for the ordered_members (not filtered by class)
|
58
|
+
def member_presenters(ids = ordered_ids, presenter_class = file_presenter_class)
|
49
59
|
PresenterFactory.build_presenters(ids,
|
50
|
-
|
60
|
+
presenter_class,
|
51
61
|
current_ability)
|
52
62
|
end
|
53
63
|
|
@@ -69,18 +79,22 @@ module CurationConcerns
|
|
69
79
|
|
70
80
|
# TODO: Extract this to ActiveFedora::Aggregations::ListSource
|
71
81
|
def ordered_ids
|
72
|
-
|
73
|
-
|
74
|
-
|
82
|
+
@ordered_ids ||= begin
|
83
|
+
ActiveFedora::SolrService.query("proxy_in_ssi:#{id}",
|
84
|
+
fl: "ordered_targets_ssim")
|
85
|
+
.flat_map { |x| x.fetch("ordered_targets_ssim", []) }
|
86
|
+
end
|
75
87
|
end
|
76
88
|
|
77
89
|
# These are the file sets that belong to this work, but not necessarily
|
78
90
|
# in order.
|
79
91
|
def file_set_ids
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
92
|
+
@file_set_ids ||= begin
|
93
|
+
ActiveFedora::SolrService.query("{!field f=has_model_ssim}FileSet",
|
94
|
+
fl: ActiveFedora.id_field,
|
95
|
+
fq: "{!join from=ordered_targets_ssim to=id}id:\"#{id}/list_source\"")
|
96
|
+
.flat_map { |x| x.fetch(ActiveFedora.id_field, []) }
|
97
|
+
end
|
84
98
|
end
|
85
99
|
end
|
86
100
|
end
|
data/curation_concerns.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency "breadcrumbs_on_rails", "~> 2.3"
|
24
24
|
spec.add_dependency "jquery-ui-rails"
|
25
25
|
spec.add_dependency "simple_form", '~> 3.1'
|
26
|
-
spec.add_dependency 'hydra-editor', '~>
|
26
|
+
spec.add_dependency 'hydra-editor', '~> 2.0'
|
27
27
|
spec.add_dependency 'blacklight_advanced_search', '~> 6.0'
|
28
28
|
spec.add_dependency 'rails_autolink'
|
29
29
|
spec.add_dependency 'sprockets-es6'
|
@@ -132,11 +132,12 @@ module CurationConcerns
|
|
132
132
|
@lock_retry_delay ||= 200 # milliseconds
|
133
133
|
end
|
134
134
|
|
135
|
-
callback.enable :
|
136
|
-
:
|
137
|
-
:after_import_local_file_success,
|
135
|
+
callback.enable :after_create_concern, :after_create_fileset,
|
136
|
+
:after_update_content, :after_revert_content,
|
137
|
+
:after_update_metadata, :after_import_local_file_success,
|
138
138
|
:after_import_local_file_failure, :after_audit_failure,
|
139
|
-
:after_destroy, :after_import_url_success,
|
139
|
+
:after_destroy, :after_import_url_success,
|
140
|
+
:after_import_url_failure
|
140
141
|
|
141
142
|
# Registers the given curation concern model in the configuration
|
142
143
|
# @param [Array<Symbol>,Symbol] curation_concern_types
|
@@ -17,6 +17,7 @@ module CurationConcerns
|
|
17
17
|
7. Adds CurationConcerns::SolrDocumentBehavior to app/models/solr_document.rb
|
18
18
|
8. Adds config/authorities/rights.yml to the application
|
19
19
|
9. Adds config/authorities/resource_types.yml to the application
|
20
|
+
10. Runs simple_form:install --bootstrap
|
20
21
|
'
|
21
22
|
|
22
23
|
def run_required_generators
|
@@ -99,5 +100,9 @@ module CurationConcerns
|
|
99
100
|
def resource_types_config
|
100
101
|
copy_file "config/authorities/resource_types.yml", "config/authorities/resource_types.yml"
|
101
102
|
end
|
103
|
+
|
104
|
+
def simple_form_bootstrap
|
105
|
+
generate 'simple_form:install --bootstrap'
|
106
|
+
end
|
102
107
|
end
|
103
108
|
end
|
@@ -7,12 +7,13 @@ describe CurationConcerns::GenericWorkActor do
|
|
7
7
|
let(:user) { create(:user) }
|
8
8
|
let(:file) { curation_concerns_fixture_file_upload('files/image.png', 'image/png') }
|
9
9
|
|
10
|
-
|
10
|
+
# stub out redis connection
|
11
|
+
let(:redlock_client_stub) do
|
11
12
|
client = double('redlock client')
|
12
13
|
allow(client).to receive(:lock).and_yield(true)
|
13
14
|
allow(Redlock::Client).to receive(:new).and_return(client)
|
14
15
|
client
|
15
|
-
|
16
|
+
end
|
16
17
|
|
17
18
|
subject do
|
18
19
|
CurationConcerns::CurationConcern.actor(curation_concern, user)
|
@@ -32,6 +33,17 @@ describe CurationConcerns::GenericWorkActor do
|
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
36
|
+
context 'success' do
|
37
|
+
before { redlock_client_stub }
|
38
|
+
|
39
|
+
it "invokes the after_create_concern callback" do
|
40
|
+
allow(CharacterizeJob).to receive(:perform_later).and_return(true)
|
41
|
+
expect(CurationConcerns.config.callback).to receive(:run)
|
42
|
+
.with(:after_create_concern, curation_concern, user)
|
43
|
+
subject.create(title: ['Foo Bar'])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
35
47
|
context 'valid attributes' do
|
36
48
|
let(:visibility) { Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED }
|
37
49
|
|
@@ -151,6 +163,14 @@ describe CurationConcerns::GenericWorkActor do
|
|
151
163
|
end
|
152
164
|
end
|
153
165
|
|
166
|
+
context 'success' do
|
167
|
+
it "invokes the after_update_metadata callback" do
|
168
|
+
expect(CurationConcerns.config.callback).to receive(:run)
|
169
|
+
.with(:after_update_metadata, curation_concern, user)
|
170
|
+
subject.update(title: ['Other Title'])
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
154
174
|
context 'adding to collections' do
|
155
175
|
let!(:collection1) { create(:collection, user: user) }
|
156
176
|
let!(:collection2) { create(:collection, user: user) }
|
@@ -135,6 +135,7 @@ describe CurationConcerns::FileSetsController do
|
|
135
135
|
expect(response).to render_template('edit')
|
136
136
|
expect(assigns[:groups]).to be_kind_of Array
|
137
137
|
expect(assigns[:file_set]).to eq file_set
|
138
|
+
expect(flash[:error]).to eq "There was a problem processing your request."
|
138
139
|
end
|
139
140
|
|
140
141
|
context 'updating visibility' do
|
@@ -215,6 +215,12 @@ describe CurationConcerns::GenericWorksController do
|
|
215
215
|
expect(GenericWork).not_to exist(work_to_be_deleted.id)
|
216
216
|
end
|
217
217
|
|
218
|
+
it "invokes the after_destroy callback" do
|
219
|
+
expect(CurationConcerns.config.callback).to receive(:run)
|
220
|
+
.with(:after_destroy, work_to_be_deleted.id, user)
|
221
|
+
delete :destroy, id: work_to_be_deleted
|
222
|
+
end
|
223
|
+
|
218
224
|
context 'someone elses public work' do
|
219
225
|
let(:work_to_be_deleted) { create(:private_generic_work) }
|
220
226
|
it 'shows unauthorized message' do
|
@@ -21,21 +21,6 @@ describe SelectsCollectionsController, type: :controller do
|
|
21
21
|
let!(:collection2) { FactoryGirl.create(:collection, read_users: [user.user_key]) }
|
22
22
|
let!(:collection3) { FactoryGirl.create(:collection, edit_users: [user.user_key]) }
|
23
23
|
let!(:collection4) { FactoryGirl.create(:collection) }
|
24
|
-
# # collection = Collection.new title:"Test Public"
|
25
|
-
# # collection.apply_depositor_metadata(@user.user_key)
|
26
|
-
# # collection.read_groups = ["public"]
|
27
|
-
# # collection.save
|
28
|
-
# collection2 = Collection.new title:"Test Read"
|
29
|
-
# collection2.apply_depositor_metadata('abc123@test.com')
|
30
|
-
# collection2.read_users = [@user.user_key]
|
31
|
-
# collection2.save
|
32
|
-
# collection3 = Collection.new title:"Test Edit"
|
33
|
-
# collection3.apply_depositor_metadata('abc123@test.com')
|
34
|
-
# collection3.edit_users = [@user.user_key]
|
35
|
-
# collection3.save
|
36
|
-
# collection4 = Collection.new title:"Test No Access"
|
37
|
-
# collection4.apply_depositor_metadata('abc123@test.com')
|
38
|
-
# collection4.save
|
39
24
|
|
40
25
|
describe "Public Access" do
|
41
26
|
it "only returns public collections" do
|
@@ -59,8 +44,9 @@ describe SelectsCollectionsController, type: :controller do
|
|
59
44
|
|
60
45
|
describe "Read Access" do
|
61
46
|
describe "not signed in" do
|
62
|
-
it "
|
63
|
-
expect
|
47
|
+
it "redirects the user to sign in" do
|
48
|
+
expect(subject).to receive(:authenticate_user!)
|
49
|
+
subject.find_collections_with_read_access
|
64
50
|
end
|
65
51
|
end
|
66
52
|
describe "signed in" do
|
@@ -75,8 +61,9 @@ describe SelectsCollectionsController, type: :controller do
|
|
75
61
|
|
76
62
|
describe "Edit Access" do
|
77
63
|
describe "not signed in" do
|
78
|
-
it "
|
79
|
-
expect
|
64
|
+
it "redirects the user to sign in" do
|
65
|
+
expect(subject).to receive(:authenticate_user!)
|
66
|
+
subject.find_collections_with_edit_access
|
80
67
|
end
|
81
68
|
end
|
82
69
|
|
@@ -23,6 +23,13 @@ FactoryGirl.define do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
factory :work_with_file_and_work do
|
27
|
+
before(:create) do |work, evaluator|
|
28
|
+
work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user)
|
29
|
+
work.ordered_members << FactoryGirl.create(:generic_work, user: evaluator.user)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
26
33
|
factory :work_with_files do
|
27
34
|
before(:create) { |work, evaluator| 2.times { work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user) } }
|
28
35
|
end
|
@@ -68,10 +68,10 @@ describe IngestFileJob do
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
describe "the
|
71
|
+
describe "the after_create_fileset callback" do
|
72
72
|
subject { CurationConcerns.config.callback }
|
73
73
|
it 'runs with file_set and user arguments' do
|
74
|
-
expect(subject).to receive(:run).with(:
|
74
|
+
expect(subject).to receive(:run).with(:after_create_fileset, file_set, user)
|
75
75
|
described_class.perform_now(file_set, filename, 'image/png', user)
|
76
76
|
end
|
77
77
|
end
|
@@ -61,6 +61,16 @@ describe CurationConcerns::WorkShowPresenter do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
+
describe "#work_presenters" do
|
65
|
+
let(:obj) { create(:work_with_file_and_work) }
|
66
|
+
let(:attributes) { obj.to_solr }
|
67
|
+
|
68
|
+
it "filters out members that are file sets" do
|
69
|
+
expect(presenter.work_presenters.size).to eq 1
|
70
|
+
expect(presenter.work_presenters.first).to be_instance_of(described_class)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
64
74
|
describe "#file_set_presenters" do
|
65
75
|
let(:obj) { create(:work_with_ordered_files) }
|
66
76
|
let(:attributes) { obj.to_solr }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curation_concerns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.0.
|
4
|
+
version: 0.14.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-04-
|
13
|
+
date: 2016-04-28 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hydra-head
|
@@ -88,14 +88,14 @@ dependencies:
|
|
88
88
|
requirements:
|
89
89
|
- - "~>"
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: '
|
91
|
+
version: '2.0'
|
92
92
|
type: :runtime
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: '
|
98
|
+
version: '2.0'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: blacklight_advanced_search
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|