curation_concerns 0.4.0 → 0.5.0

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 (31) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/VERSION +1 -1
  4. data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +7 -0
  5. data/app/renderers/curation_concerns/attribute_renderer.rb +4 -2
  6. data/app/views/collections/_form_to_add_member.html.erb +1 -1
  7. data/app/views/curation_concerns/base/_show_actions.html.erb +4 -0
  8. data/lib/curation_concerns/engine.rb +6 -0
  9. data/lib/curation_concerns/version.rb +1 -1
  10. data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +1 -0
  11. data/spec/indexers/collection_indexer_spec.rb +6 -5
  12. data/spec/jobs/import_url_job_spec.rb +0 -3
  13. data/spec/models/generic_work_spec.rb +10 -0
  14. data/spec/renderers/curation_concerns/attribute_renderer_spec.rb +17 -2
  15. data/spec/services/thumbnail_path_service_spec.rb +3 -3
  16. data/spec/test_app_templates/Gemfile.extra +5 -0
  17. data/spec/views/curation_concerns/base/_show_actions.html.erb_spec.rb +18 -0
  18. metadata +7 -23
  19. data/app/controllers/concerns/curation_concerns/upload_sets_controller_behavior.rb +0 -50
  20. data/app/controllers/upload_sets_controller.rb +0 -3
  21. data/app/forms/curation_concerns/upload_set_form.rb +0 -43
  22. data/app/views/upload_sets/_base_metadata.html.erb +0 -12
  23. data/app/views/upload_sets/_edit.js.erb +0 -15
  24. data/app/views/upload_sets/_metadata.html.erb +0 -40
  25. data/app/views/upload_sets/_more_metadata.html.erb +0 -7
  26. data/app/views/upload_sets/edit.html.erb +0 -26
  27. data/spec/controllers/upload_sets_controller_spec.rb +0 -69
  28. data/spec/forms/upload_set_form_spec.rb +0 -55
  29. data/spec/jobs/upload_set_update_job_spec.rb +0 -43
  30. data/spec/models/upload_set_spec.rb +0 -37
  31. data/spec/views/upload_sets/_metadata.html.erb_spec.rb +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 489a8d74c2cc2694cae734316ac806ccb728ba35
4
- data.tar.gz: dc4312a11afa53f206991fe1777d9f5ea416e08c
3
+ metadata.gz: a85c8841cf6394c4589e461e3b59671377f44678
4
+ data.tar.gz: 575d68375d4f97744189ac4ab8183648b5483735
5
5
  SHA512:
6
- metadata.gz: bbadbe42f6cb6b7153ad122fdd935ca085f7bfc9bae9fca0d5a0fc6390926063b8ac6f34693187a052c6ae56e7f9184942b6fa332a0e584e40e2eddd9de585a0
7
- data.tar.gz: 8b029a62c46cdf9748048bed0b3d5f6eb1945f346ea165555253257f8dc87b9a4cb7235d00cbe0087667a53220f352ca1a473acf661152ca0676fb39f3f15568
6
+ metadata.gz: 0e737b868fcec75f9ed65e2c4361a786b28fdf4516062c04293c47b35c91f954797e5f68a3b0a2fa64ba1ecbf742f7987b3dd1dff3f6fc2e546fb53a4ed7740d
7
+ data.tar.gz: 29ed236e0bebabe08927012b07c83b960b3522285571fd4e42b06d2151f8de98c3e3ada3e61b58a51b2256e7d36fdf4db19fb7075c3c1e6dc13a0075ac2d06b7
data/Gemfile CHANGED
@@ -1,6 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'hydra-works', github: 'projecthydra-labs/hydra-works'
4
3
  # Specify your gem's dependencies in curation_concerns.gemspec
5
4
  gemspec
6
5
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
@@ -61,6 +61,7 @@ module CurationConcerns
61
61
  authorize! :show, @file_set
62
62
  render :show, status: :ok
63
63
  end
64
+ additional_response_formats(wants)
64
65
  end
65
66
  end
66
67
 
@@ -140,6 +141,12 @@ module CurationConcerns
140
141
  @groups = current_user.groups
141
142
  end
142
143
 
144
+ # Override this method to add additional response
145
+ # formats to your local app
146
+ def additional_response_formats(_)
147
+ # nop
148
+ end
149
+
143
150
  def file_set_params
144
151
  params.require(:file_set).permit(
145
152
  :visibility_during_embargo, :embargo_release_date, :visibility_after_embargo, :visibility_during_lease, :lease_expiration_date, :visibility_after_lease, :visibility, title: [])
@@ -26,7 +26,7 @@ module CurationConcerns
26
26
  markup << %(<tr><th>#{label}</th>\n<td><ul class='tabular'>)
27
27
  attributes = microdata_object_attributes(field).merge(class: "attribute #{field}")
28
28
  Array(values).each do |value|
29
- markup << "<li#{html_attributes(attributes)}>#{attribute_value_to_html(value)}</li>"
29
+ markup << "<li#{html_attributes(attributes)}>#{attribute_value_to_html(value.to_s)}</li>"
30
30
  end
31
31
  markup << %(</ul></td></tr>)
32
32
  markup.html_safe
@@ -43,8 +43,10 @@ module CurationConcerns
43
43
  def attribute_value_to_html(value)
44
44
  if field == :rights
45
45
  rights_attribute_to_html(value)
46
- else
46
+ elsif microdata_value_attributes(field).present?
47
47
  "<span#{html_attributes(microdata_value_attributes(field))}>#{li_value(value)}</span>"
48
+ else
49
+ li_value(value)
48
50
  end
49
51
  end
50
52
 
@@ -16,6 +16,6 @@
16
16
  </fieldset>
17
17
  <div class="form-actions with-side-padding with-footroom">
18
18
  <%= submit_tag "Add to collection", class: 'btn btn-primary' %>
19
- <%= link_to 'Cancel', root_path, class: 'btn btn-default', data: { dismiss: 'modal' } %>
19
+ <%= link_to 'Cancel', main_app.root_path, class: 'btn btn-default', data: { dismiss: 'modal' } %>
20
20
  </div>
21
21
  <% end %>
@@ -5,5 +5,9 @@
5
5
  <%= link_to "Attach a File", main_app.new_curation_concerns_file_set_path(@presenter), class: 'btn btn-default' %>
6
6
  <%= link_to "Delete This #{@presenter.human_readable_type}", [main_app, @presenter], class: 'btn btn-danger pull-right', data: { confirm: "Delete this #{@presenter.human_readable_type}?" }, method: :delete %>
7
7
  <% end %>
8
+ <% if collector %>
9
+ <%= render 'collections/add_to_collection_modal', collectible: @presenter %>
10
+ <%= link_to_select_collection @presenter, class: 'btn btn-primary' %>
11
+ <% end %>
8
12
  </div>
9
13
  <% end %>
@@ -23,5 +23,11 @@ module CurationConcerns
23
23
  initializer 'curation_concerns.initialize' do
24
24
  require 'curation_concerns/rails/routes'
25
25
  end
26
+
27
+ initializer 'curation_concerns.assets.precompile' do |app|
28
+ app.config.assets.paths << config.root.join('app', 'assets', 'images')
29
+
30
+ app.config.assets.precompile += %w(*.png *.gif)
31
+ end
26
32
  end
27
33
  end
@@ -1,3 +1,3 @@
1
1
  module CurationConcerns
2
- VERSION = "0.3.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -222,6 +222,7 @@ describe CurationConcerns::FileSetsController do
222
222
  end
223
223
 
224
224
  it 'allows access to public files' do
225
+ expect(controller).to receive(:additional_response_formats).with(ActionController::MimeResponds::Collector)
225
226
  get :show, id: public_file_set
226
227
  expect(response).to be_success
227
228
  end
@@ -4,16 +4,17 @@ describe CurationConcerns::CollectionIndexer do
4
4
  let(:indexer) { described_class.new(collection) }
5
5
  let(:collection) { build(:collection) }
6
6
 
7
- before { allow(collection).to receive(:bytes).and_return(1000) }
8
7
  describe "#generate_solr_document" do
8
+ before do
9
+ allow(collection).to receive(:bytes).and_return(1000)
10
+ allow(CurationConcerns::ThumbnailPathService).to receive(:call).and_return("/downloads/1234?file=thumbnail")
11
+ end
9
12
  subject { indexer.generate_solr_document }
10
13
 
11
- it "has generic type" do
14
+ it "has required fields" do
12
15
  expect(subject.fetch('generic_type_sim')).to eq ["Collection"]
13
- end
14
-
15
- it "has bytes" do
16
16
  expect(subject.fetch('bytes_is')).to eq(1000)
17
+ expect(subject.fetch('thumbnail_path_ss')).to eq "/downloads/1234?file=thumbnail"
17
18
  end
18
19
  end
19
20
  end
@@ -41,9 +41,6 @@ describe ImportUrlJob do
41
41
  let(:title) { { file_set.id => ['File One'] } }
42
42
  let(:metadata) { {} }
43
43
  let(:visibility) { nil }
44
-
45
- let(:upload_set) { UploadSet.create }
46
- let(:upload_set_job) { UploadSetUpdateJob.perform_now(user.user_key, upload_set.id, title, metadata, visibility) }
47
44
  let(:file_set_id) { file_set.id }
48
45
 
49
46
  before do
@@ -46,4 +46,14 @@ describe GenericWork do
46
46
  subject { work.to_partial_path }
47
47
  it { is_expected.to eq 'generic_works/generic_work' }
48
48
  end
49
+
50
+ describe "#destroy" do
51
+ let!(:work) { create(:work_with_files) }
52
+ it "doesn't save the work after removing each individual file" do
53
+ expect_any_instance_of(described_class).not_to receive(:save!)
54
+ expect {
55
+ work.destroy
56
+ }.to change { FileSet.count }.by(-2)
57
+ end
58
+ end
49
59
  end
@@ -12,22 +12,37 @@ describe CurationConcerns::AttributeRenderer do
12
12
  I18n.load_path -= Dir[File.join(yml_path)]
13
13
  I18n.reload!
14
14
  end
15
+
15
16
  describe "#attribute_to_html" do
16
17
  subject { Nokogiri::HTML(renderer.render) }
17
18
  let(:expected) { Nokogiri::HTML(tr_content) }
19
+
18
20
  context 'without microdata enabled' do
19
21
  before do
20
22
  CurationConcerns.config.display_microdata = false
21
23
  end
22
24
  let(:tr_content) {
23
25
  "<tr><th>Name</th>\n" \
24
- "<td><ul class='tabular'><li class=\"attribute name\"><span>Bob</span></li>\n" \
25
- "<li class=\"attribute name\"><span>Jessica</span></li>\n" \
26
+ "<td><ul class='tabular'><li class=\"attribute name\">Bob</li>\n" \
27
+ "<li class=\"attribute name\">Jessica</li>\n" \
26
28
  "</ul></td></tr>"
27
29
  }
28
30
  it { expect(renderer).not_to be_microdata(field) }
29
31
  it { expect(subject).to be_equivalent_to(expected) }
30
32
  end
33
+
34
+ context 'with an integer attribute' do
35
+ let(:field) { :height }
36
+ let(:renderer) { described_class.new(field, [567]) }
37
+ let(:tr_content) do
38
+ "<tr><th>Height</th>\n" \
39
+ "<td><ul class='tabular'><li class=\"attribute height\">567</li>\n" \
40
+ "</ul></td></tr>"
41
+ end
42
+
43
+ it { expect(subject).to be_equivalent_to(expected) }
44
+ end
45
+
31
46
  context 'with microdata enabled' do
32
47
  before do
33
48
  CurationConcerns.config.display_microdata = true
@@ -15,11 +15,11 @@ describe CurationConcerns::ThumbnailPathService do
15
15
 
16
16
  context "that is an audio" do
17
17
  let(:mime_type) { 'audio/x-wav' }
18
- it { is_expected.to eq '/assets/audio.png' }
18
+ it { is_expected.to match %r{/assets/audio-.+.png} }
19
19
  end
20
20
 
21
21
  context "that has no thumbnail" do
22
- it { is_expected.to eq '/assets/default.png' }
22
+ it { is_expected.to match %r{/assets/default-.+.png} }
23
23
  end
24
24
  end
25
25
 
@@ -37,7 +37,7 @@ describe CurationConcerns::ThumbnailPathService do
37
37
 
38
38
  context "that doesn't have a representative" do
39
39
  let(:object) { FileSet.new }
40
- it { is_expected.to eq '/assets/default.png' }
40
+ it { is_expected.to match %r{/assets/default-.+.png} }
41
41
  end
42
42
  end
43
43
  end
@@ -2,3 +2,8 @@
2
2
  # gem 'hydra-works', github: 'projecthydra-labs/hydra-works', branch: 'master'
3
3
  # gem 'hydra-pcdm', github: 'projecthydra-labs/hydra-pcdm', branch: 'master'
4
4
  # gem 'activefedora-aggregation', github: 'projecthydra-labs/activefedora-aggregation', branch: 'master'
5
+
6
+ group :development do
7
+ gem 'better_errors'
8
+ gem 'binding_of_caller'
9
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'curation_concerns/base/show_actions' do
4
+ let(:model) { double('model', persisted?: true, to_param: '123', model_name: GenericWork.model_name) }
5
+ let(:presenter) { double("presenter", human_readable_type: 'Image', id: '123', to_model: model) }
6
+ before do
7
+ assign(:presenter, presenter)
8
+ render 'curation_concerns/base/show_actions.html.erb', collector: collector, editor: editor
9
+ end
10
+
11
+ context "as a collector" do
12
+ let(:editor) { true }
13
+ let(:collector) { true }
14
+ it "shows the add to collection link" do
15
+ expect(rendered).to have_link 'Add to a Collection'
16
+ end
17
+ end
18
+ end
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.4.0
4
+ version: 0.5.0
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: 2015-12-11 00:00:00.000000000 Z
13
+ date: 2016-01-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: hydra-head
@@ -74,14 +74,14 @@ dependencies:
74
74
  requirements:
75
75
  - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: 0.4.0
77
+ version: 0.5.0
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 0.4.0
84
+ version: 0.5.0
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: hydra-editor
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -399,7 +399,6 @@ files:
399
399
  - app/controllers/concerns/curation_concerns/single_use_links_controller_behavior.rb
400
400
  - app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb
401
401
  - app/controllers/concerns/curation_concerns/themed_layout_controller.rb
402
- - app/controllers/concerns/curation_concerns/upload_sets_controller_behavior.rb
403
402
  - app/controllers/concerns/curation_concerns/welcome_controller_behavior.rb
404
403
  - app/controllers/curation_concerns/application_controller.rb
405
404
  - app/controllers/curation_concerns/classify_concerns_controller.rb
@@ -410,12 +409,10 @@ files:
410
409
  - app/controllers/downloads_controller.rb
411
410
  - app/controllers/embargoes_controller.rb
412
411
  - app/controllers/leases_controller.rb
413
- - app/controllers/upload_sets_controller.rb
414
412
  - app/controllers/welcome_controller.rb
415
413
  - app/forms/curation_concerns/forms/collection_edit_form.rb
416
414
  - app/forms/curation_concerns/forms/file_set_edit_form.rb
417
415
  - app/forms/curation_concerns/forms/work_form.rb
418
- - app/forms/curation_concerns/upload_set_form.rb
419
416
  - app/helpers/curation_concerns/ability_helper.rb
420
417
  - app/helpers/curation_concerns/catalog_helper.rb
421
418
  - app/helpers/curation_concerns/collections_helper.rb
@@ -584,11 +581,6 @@ files:
584
581
  - app/views/shared/_site_actions.html.erb
585
582
  - app/views/shared/_site_search.html.erb
586
583
  - app/views/shared/_title_bar.html.erb
587
- - app/views/upload_sets/_base_metadata.html.erb
588
- - app/views/upload_sets/_edit.js.erb
589
- - app/views/upload_sets/_metadata.html.erb
590
- - app/views/upload_sets/_more_metadata.html.erb
591
- - app/views/upload_sets/edit.html.erb
592
584
  - app/views/welcome/index.html.erb
593
585
  - config/initializers/simple_form.rb
594
586
  - config/jetty.yml
@@ -644,7 +636,6 @@ files:
644
636
  - spec/controllers/downloads_controller_spec.rb
645
637
  - spec/controllers/embargoes_controller_spec.rb
646
638
  - spec/controllers/leases_controller_spec.rb
647
- - spec/controllers/upload_sets_controller_spec.rb
648
639
  - spec/controllers/welcome_controller_spec.rb
649
640
  - spec/factories/collections.rb
650
641
  - spec/factories/create_curation_concern.rb
@@ -661,7 +652,6 @@ files:
661
652
  - spec/features/work_generator_spec.rb
662
653
  - spec/forms/collection_edit_form_spec.rb
663
654
  - spec/forms/file_set_edit_form_spec.rb
664
- - spec/forms/upload_set_form_spec.rb
665
655
  - spec/forms/work_form_spec.rb
666
656
  - spec/helpers/catalog_helper_spec.rb
667
657
  - spec/helpers/configuration_helper_spec.rb
@@ -685,7 +675,6 @@ files:
685
675
  - spec/jobs/import_url_job_spec.rb
686
676
  - spec/jobs/ingest_file_job_spec.rb
687
677
  - spec/jobs/ingest_local_file_job_spec.rb
688
- - spec/jobs/upload_set_update_job_spec.rb
689
678
  - spec/jobs/visibility_copy_job_spec.rb
690
679
  - spec/lib/curation_concerns/callbacks/registry_spec.rb
691
680
  - spec/lib/curation_concerns/callbacks_spec.rb
@@ -706,7 +695,6 @@ files:
706
695
  - spec/models/quick_classification_query_spec.rb
707
696
  - spec/models/single_use_link_spec.rb
708
697
  - spec/models/solr_document_spec.rb
709
- - spec/models/upload_set_spec.rb
710
698
  - spec/models/user_spec.rb
711
699
  - spec/presenters/curation_concerns/collection_presenter_spec.rb
712
700
  - spec/presenters/curation_concerns/file_set_presenter_spec.rb
@@ -754,6 +742,7 @@ files:
754
742
  - spec/views/collections/_sort_and_per_page.html.erb_spec.rb
755
743
  - spec/views/curation_concerns/base/_attributes.html.erb_spec.rb
756
744
  - spec/views/curation_concerns/base/_form_permission.html.erb_spec.rb
745
+ - spec/views/curation_concerns/base/_show_actions.html.erb_spec.rb
757
746
  - spec/views/curation_concerns/base/show.html.erb_spec.rb
758
747
  - spec/views/curation_concerns/base/show.json.jbuilder_spec.rb
759
748
  - spec/views/curation_concerns/file_sets/_file_set.html.erb_spec.rb
@@ -767,7 +756,6 @@ files:
767
756
  - spec/views/shared/_my_actions.html.erb_spec.rb
768
757
  - spec/views/single_use_links/new_download.html.erb_spec.rb
769
758
  - spec/views/single_use_links_viewer/show.html.erb_spec.rb
770
- - spec/views/upload_sets/_metadata.html.erb_spec.rb
771
759
  - tasks/jetty.rake
772
760
  - tasks/release.rake
773
761
  - vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png
@@ -798,7 +786,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
798
786
  version: '0'
799
787
  requirements: []
800
788
  rubyforge_project:
801
- rubygems_version: 2.5.0
789
+ rubygems_version: 2.4.5.1
802
790
  signing_key:
803
791
  specification_version: 4
804
792
  summary: A Rails Engine that allows an application to CRUD CurationConcern objects
@@ -826,7 +814,6 @@ test_files:
826
814
  - spec/controllers/downloads_controller_spec.rb
827
815
  - spec/controllers/embargoes_controller_spec.rb
828
816
  - spec/controllers/leases_controller_spec.rb
829
- - spec/controllers/upload_sets_controller_spec.rb
830
817
  - spec/controllers/welcome_controller_spec.rb
831
818
  - spec/factories/collections.rb
832
819
  - spec/factories/create_curation_concern.rb
@@ -843,7 +830,6 @@ test_files:
843
830
  - spec/features/work_generator_spec.rb
844
831
  - spec/forms/collection_edit_form_spec.rb
845
832
  - spec/forms/file_set_edit_form_spec.rb
846
- - spec/forms/upload_set_form_spec.rb
847
833
  - spec/forms/work_form_spec.rb
848
834
  - spec/helpers/catalog_helper_spec.rb
849
835
  - spec/helpers/configuration_helper_spec.rb
@@ -867,7 +853,6 @@ test_files:
867
853
  - spec/jobs/import_url_job_spec.rb
868
854
  - spec/jobs/ingest_file_job_spec.rb
869
855
  - spec/jobs/ingest_local_file_job_spec.rb
870
- - spec/jobs/upload_set_update_job_spec.rb
871
856
  - spec/jobs/visibility_copy_job_spec.rb
872
857
  - spec/lib/curation_concerns/callbacks/registry_spec.rb
873
858
  - spec/lib/curation_concerns/callbacks_spec.rb
@@ -888,7 +873,6 @@ test_files:
888
873
  - spec/models/quick_classification_query_spec.rb
889
874
  - spec/models/single_use_link_spec.rb
890
875
  - spec/models/solr_document_spec.rb
891
- - spec/models/upload_set_spec.rb
892
876
  - spec/models/user_spec.rb
893
877
  - spec/presenters/curation_concerns/collection_presenter_spec.rb
894
878
  - spec/presenters/curation_concerns/file_set_presenter_spec.rb
@@ -936,6 +920,7 @@ test_files:
936
920
  - spec/views/collections/_sort_and_per_page.html.erb_spec.rb
937
921
  - spec/views/curation_concerns/base/_attributes.html.erb_spec.rb
938
922
  - spec/views/curation_concerns/base/_form_permission.html.erb_spec.rb
923
+ - spec/views/curation_concerns/base/_show_actions.html.erb_spec.rb
939
924
  - spec/views/curation_concerns/base/show.html.erb_spec.rb
940
925
  - spec/views/curation_concerns/base/show.json.jbuilder_spec.rb
941
926
  - spec/views/curation_concerns/file_sets/_file_set.html.erb_spec.rb
@@ -949,4 +934,3 @@ test_files:
949
934
  - spec/views/shared/_my_actions.html.erb_spec.rb
950
935
  - spec/views/single_use_links/new_download.html.erb_spec.rb
951
936
  - spec/views/single_use_links_viewer/show.html.erb_spec.rb
952
- - spec/views/upload_sets/_metadata.html.erb_spec.rb
@@ -1,50 +0,0 @@
1
- module CurationConcerns
2
- module UploadSetsControllerBehavior
3
- extend ActiveSupport::Concern
4
- include Hydra::Controller::ControllerBehavior
5
-
6
- included do
7
- include CurationConcerns::ThemedLayoutController
8
- with_themed_layout '1_column'
9
-
10
- class_attribute :edit_form_class
11
- self.edit_form_class = CurationConcerns::UploadSetForm
12
- end
13
-
14
- def edit
15
- # TODO: redlock this line so that two processes don't attempt to create at the same time.
16
- @upload_set = UploadSet.find_or_create(params[:id])
17
- @form = edit_form
18
- end
19
-
20
- def update
21
- authenticate_user!
22
- @upload_set = UploadSet.find(params[:id])
23
- @upload_set.status = ["processing"]
24
- @upload_set.save
25
- create_update_job
26
- flash[:notice] = 'Your files are being processed by ' + t('curation_concerns.product_name') + ' in the background. The metadata and access controls you specified are being applied. Files will be marked <span class="label label-danger" title="Private">Private</span> until this process is complete (shouldn\'t take too long, hang in there!). You may need to refresh your dashboard to see these updates.'
27
-
28
- redirect_after_update
29
- end
30
-
31
- protected
32
-
33
- # Override this method if you want to go elsewhere
34
- def redirect_after_update
35
- redirect_to main_app.curation_concerns_generic_works_path
36
- end
37
-
38
- def edit_form
39
- edit_form_class.new(@upload_set, current_ability)
40
- end
41
-
42
- def create_update_job
43
- UploadSetUpdateJob.perform_later(current_user.user_key,
44
- params[:id],
45
- params[:title],
46
- edit_form_class.model_attributes(params[:upload_set]),
47
- params[:visibility])
48
- end
49
- end
50
- end
@@ -1,3 +0,0 @@
1
- class UploadSetsController < ApplicationController
2
- include CurationConcerns::UploadSetsControllerBehavior
3
- end
@@ -1,43 +0,0 @@
1
- module CurationConcerns
2
- class UploadSetForm
3
- include HydraEditor::Form
4
-
5
- self.terms = CurationConcerns::GenericWorkForm.terms
6
-
7
- delegate :creator, :human_readable_type, :open_access?, :authenticated_only_access?,
8
- :open_access_with_embargo_release_date?, :private_access?,
9
- :embargo_release_date, :lease_expiration_date, :member_ids, to: :exemplar_work
10
-
11
- def initialize(upload_set, current_ability)
12
- @current_ability = current_ability
13
- super(upload_set)
14
- # TODO: instead of using GenericWorkForm, this should be an UploadSetForm
15
- # work = ::GenericWork.new(creator: [creator_display], title: titles)
16
- end
17
-
18
- def exemplar_work
19
- @exemplar_work ||= GenericWork.new(creator: [creator_display])
20
- end
21
-
22
- # @return [Array] a list of the first titles for each of the works.
23
- def works
24
- @works ||= model.works.sort { |w1, w2| w1.title.first.downcase <=> w2.title.first.downcase }
25
- end
26
-
27
- def self.model_attributes(attrs)
28
- CurationConcerns::GenericWorkForm.model_attributes(attrs)
29
- end
30
-
31
- def self.multiple?(attrs)
32
- CurationConcerns::GenericWorkForm.multiple?(attrs)
33
- end
34
-
35
- private
36
-
37
- # Override this method if you want the creator to display something other than
38
- # the user_key, e.g. "current_user.name"
39
- def creator_display
40
- @current_ability.current_user.user_key
41
- end
42
- end
43
- end
@@ -1,12 +0,0 @@
1
- <%#= f.input :resource_type, as: :select_with_help, collection: CurationConcerns.config.resource_types,
2
- input_html: { class: 'form-control', multiple: true } %>
3
-
4
- <%= f.input :tag, as: :multi_value_with_help %>
5
-
6
- <%= f.input :creator, as: :multi_value_with_help %>
7
-
8
- <%= f.input :rights, as: :select_with_modal_help, collection: RightsService.select_options,
9
- input_html: { class: 'form-control', multiple: true } %>
10
-
11
- <%= render "curation_concerns/file_sets/rights_modal" %>
12
-
@@ -1,15 +0,0 @@
1
- if (navigator.userAgent.match("MSIE"))
2
- $("#new_file_set").validate();
3
-
4
- $('#permissions_display').show();
5
-
6
- confirmation_needed = true;
7
- window.onbeforeunload = confirmExit;
8
-
9
- function confirmExit(){
10
- if(confirmation_needed){
11
- // if you return a string it will be displayed in between "don't navigate away"
12
- // and "click Ok to navigate away or cancel to stay put" in the confirm dialog
13
- return "Your metadata has not been saved.";
14
- }
15
- }
@@ -1,40 +0,0 @@
1
- <h2>Individual Titles </h2>
2
- <div id="" class="well">
3
- <div class="row">
4
- <div class="col-sm-8">
5
- <h3>Applies to individual files uploaded</h3>
6
- <%= content_tag :p, t('curation_concerns.upload_set.help.title'), class: "help-block" %>
7
- <% f.object.works.each_with_index do |work, index| %>
8
- <div class="form-group">
9
- <%= f.input_label :title, as: :multi_value_with_help, label: "Title #{index + 1}" %>
10
- <div id="additional_title_clone">
11
- <%= f.text_field :title, name: "title[#{work.id}][]", value: work.title, class: 'form-control', required: true %>
12
- </div>
13
- </div>
14
- <% end %>
15
- </div>
16
-
17
- <div class="col-sm-4">
18
- <!-- put metadata about file being edited here -->
19
- </div>
20
- </div>
21
- </div>
22
-
23
- <%= hidden_field_tag(:extra_description_count, "1") %>
24
- <div id="descriptions_display">
25
- <h2>Bulk Descriptions</h2>
26
- <div class="well">
27
- <div class="row">
28
- <div class="col-sm-6">
29
- <h3>Applies to all files just uploaded</h3>
30
- <%= render 'base_metadata', f: f %>
31
-
32
- <button id="show_addl_descriptions" class="btn btn-default" aria-label="reveal additional metadata description fields">Show Additional Fields</button>
33
- <!-- hidden on initial load -->
34
-
35
- <%= render 'more_metadata', f: f %>
36
-
37
- </div> <!-- /col-sm-8 -->
38
- </div> <!-- /row -->
39
- </div><!-- /well -->
40
- </div> <!-- /row -->
@@ -1,7 +0,0 @@
1
- <div id="more_descriptions">
2
- <button id="hide_addl_descriptions" class="btn btn-default" aria-label="hide additional metadata description fields">Hide Additional Fields</button>
3
- <% (f.object.terms - [:title, :creator, :rights, :tag, :resource_type]).each do |term| %>
4
- <%# <%= f.input term, as: :multi_value_with_help, input_html: { required: false} %>
5
- <%= render_edit_field_partial(term, f: f) %>
6
- <% end %>
7
- </div> <!-- /more_descriptions -->
@@ -1,26 +0,0 @@
1
- <%= javascript_tag do %>
2
- <%= render partial: "edit", formats: [:js] %>
3
- <% end %>
4
-
5
- <h1>Apply Metadata</h1>
6
- <p>
7
- The information you provide for Title will be applied to the corresponding file only; however all other
8
- information you provide will be applied <em>to the entire set of files that were uploaded together</em> you have just
9
- deposited into <%= t('curation_concerns.product_name') %>. You may edit individual files from
10
- <%= link_to "<i class='glyphicon glyphicon-dashboard'></i> #{t('curation_concerns.bread_crumb.works_list')}".html_safe, main_app.curation_concerns_generic_works_path %>
11
- once this step is finished. <span class="required"><abbr title="required">*</abbr></span> indicates required fields.
12
- </p>
13
- <%= simple_form_for [main_app, @form], html: { multipart: true }, builder: CurationConcerns::FormBuilder do |f| %>
14
-
15
- <%= render 'metadata', f: f %>
16
-
17
- <%#= render 'file_sets/permission_form', f: f, upload_set: @upload_set %>
18
-
19
- <div id="permissions_submit">
20
- <%= button_tag type: 'submit', class: 'btn btn-primary btn-lg',
21
- onclick: "confirmation_needed = false;", id: "upload_submit", name: "update_permission" do %>
22
- <i class="glyphicon glyphicon-floppy-disk"></i> Save
23
- <% end %>
24
- </div>
25
-
26
- <% end %>
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe UploadSetsController do
4
- let(:user) { create(:user) }
5
- let(:other_user) { create(:user) }
6
- before do
7
- sign_in user
8
- allow_any_instance_of(User).to receive(:groups).and_return([])
9
- end
10
- describe "#update" do
11
- let(:upload_set_update_message) { double('upload_set update message') }
12
- let(:upload_set) { UploadSet.create }
13
- context "when successful" do
14
- it "enqueues a upload_set job and redirects to generic_works list with a flash message" do
15
- expect(UploadSetUpdateJob).to receive(:perform_later).with(user.user_key, upload_set.id, { '1' => 'foo' },
16
- { tag: [] }, 'open').once
17
- post :update, id: upload_set.id, title: { '1' => 'foo' }, visibility: 'open', upload_set: { tag: [""] }
18
- expect(response).to redirect_to routes.url_helpers.curation_concerns_generic_works_path
19
- expect(flash[:notice]).to include("Your files are being processed")
20
- end
21
- end
22
-
23
- describe "when user has edit permissions on a file" do
24
- # TODO: all these tests could move to upload_set_update_job_spec.rb
25
- let!(:work) { create(:generic_work, user: user, upload_set: upload_set) }
26
-
27
- it "they can set public read access" do
28
- post :update, id: upload_set, visibility: "open", upload_set: { tag: [""] }
29
- expect(work.reload.read_groups).to eq ['public']
30
- end
31
-
32
- it "they can set metadata like title" do
33
- post :update, id: upload_set, upload_set: { tag: ["footag", "bartag"] }, title: { work.id => ["New Title"] }
34
- work.reload
35
- expect(work.title).to eq ["New Title"]
36
- # TODO: is order important?
37
- expect(work.tag).to include("footag", "bartag")
38
- end
39
-
40
- it "they cannot set any tags" do
41
- post :update, id: upload_set, upload_set: { tag: [""] }
42
- expect(work.reload.tag).to be_empty
43
- end
44
- end
45
-
46
- describe "when user does not have edit permissions on a file" do
47
- # TODO: all these tests could move to upload_set_update_job_spec.rb
48
- let!(:work) { create(:generic_work, title: ['Original Title'], upload_set: upload_set) }
49
-
50
- it "they cannot modify the object" do
51
- post :update, id: upload_set, upload_set: { "tag" => [""] },
52
- title: { work.id => "Title Won't Change" }
53
- work.reload
54
- expect(work.title).to eq ["Original Title"]
55
- end
56
- end
57
- end
58
-
59
- describe "#edit" do
60
- let(:us1) { UploadSet.create }
61
-
62
- it "sets up attributes for the form" do
63
- get :edit, id: us1
64
- expect(assigns[:form]).to be_kind_of CurationConcerns::UploadSetForm
65
- expect(assigns[:form].model).to eq us1
66
- expect(response).to be_success
67
- end
68
- end
69
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CurationConcerns::UploadSetForm do
4
- let(:form) { described_class.new(upload_set, ability) }
5
- let(:user) { build(:user) }
6
- let(:ability) { Ability.new(user) }
7
- let(:upload_set) { UploadSet.create }
8
- let!(:work1) { create(:work, upload_set: upload_set) }
9
- let!(:work2) { create(:work, upload_set: upload_set) }
10
-
11
- describe "#to_param" do
12
- subject { form.to_param }
13
- it { is_expected.to eq upload_set.id }
14
- end
15
-
16
- describe "#terms" do
17
- subject { form.terms }
18
- it { is_expected.to eq [:title,
19
- :creator,
20
- :contributor,
21
- :description,
22
- :tag,
23
- :rights,
24
- :publisher,
25
- :date_created,
26
- :subject,
27
- :language,
28
- :identifier,
29
- :based_near,
30
- :related_url,
31
- :representative_id,
32
- :thumbnail_id,
33
- :files,
34
- :visibility_during_embargo,
35
- :embargo_release_date,
36
- :visibility_after_embargo,
37
- :visibility_during_lease,
38
- :lease_expiration_date,
39
- :visibility_after_lease,
40
- :visibility] }
41
- end
42
-
43
- describe "works" do
44
- let!(:work1) { create(:work_with_one_file, upload_set: upload_set, title: ['B title']) }
45
- let!(:work2) { create(:work_with_one_file, upload_set: upload_set, title: ['A title']) }
46
- subject { form.works }
47
- it { is_expected.to eq [work2, work1] }
48
- end
49
-
50
- describe "creator" do
51
- let(:user) { build(:user, email: 'bob@example.com') }
52
- subject { form.creator }
53
- it { is_expected.to eq ['bob@example.com'] }
54
- end
55
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe UploadSetUpdateJob do
4
- let(:user) { create(:user) }
5
- let(:upload_set) { UploadSet.create }
6
-
7
- let(:work) { create(:work, user: user, upload_set: upload_set) }
8
- let(:work2) { create(:work, user: user, upload_set: upload_set) }
9
-
10
- before do
11
- allow(CurationConcerns.config.callback).to receive(:run)
12
- allow(CurationConcerns.config.callback).to receive(:set?)
13
- .with(:after_upload_set_update_success)
14
- .and_return(true)
15
- allow(CurationConcerns.config.callback).to receive(:set?)
16
- .with(:after_upload_set_update_failure)
17
- .and_return(true)
18
- end
19
-
20
- describe "#perform" do
21
- let(:title) { { work.id => ['File One'], work2.id => ['File Two'] } }
22
- let(:metadata) { { tag: [''] } }
23
- let(:visibility) { nil }
24
-
25
- subject { described_class.perform_now(user.user_key, upload_set.id, title, metadata, visibility) }
26
-
27
- it "updates work metadata" do
28
- expect(CurationConcerns.config.callback).to receive(:run).with(:after_upload_set_update_success, user, upload_set)
29
- subject
30
- expect(work.reload.title).to eq ['File One']
31
- expect(work2.reload.title).to eq ['File Two']
32
- end
33
-
34
- context "when user does not have permission to edit all of the works" do
35
- it "sends the failure message" do
36
- expect_any_instance_of(User).to receive(:can?).with(:edit, work).and_return(true)
37
- expect_any_instance_of(User).to receive(:can?).with(:edit, work2).and_return(false)
38
- expect(CurationConcerns.config.callback).to receive(:run).with(:after_upload_set_update_failure, user, upload_set)
39
- subject
40
- end
41
- end
42
- end
43
- end
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe UploadSet do
4
- let(:user) { create(:user) }
5
- let(:upload_set) { described_class.create(title: ["test collection"]) }
6
- subject { upload_set }
7
-
8
- it "has dc metadata" do
9
- expect(subject.title).to eq ["test collection"]
10
- end
11
-
12
- it "responds to #works" do
13
- expect(subject).to respond_to(:works)
14
- end
15
-
16
- it "supports to_solr" do
17
- expect(subject.to_solr).to_not be_nil
18
- expect(subject.to_solr["upload_set__title_t"]).to be_nil
19
- end
20
-
21
- describe "find_or_create" do
22
- describe "when the object exists" do
23
- let!(:upload_set) { described_class.create(title: ["test collection"]) }
24
- it "finds upload_set instead of creating" do
25
- expect(described_class).to_not receive(:create)
26
- described_class.find_or_create(subject.id)
27
- end
28
- end
29
- describe "when the object does not exist" do
30
- it "creates a new Batch" do
31
- expect { described_class.find("upload_set-123") }.to raise_error(ActiveFedora::ObjectNotFoundError)
32
- expect(described_class).to receive(:create).once.and_return("the upload_set")
33
- expect(described_class.find_or_create("upload_set-123")).to eq "the upload_set"
34
- end
35
- end
36
- end
37
- end
@@ -1,28 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'upload_sets/_metadata.html.erb' do
4
- let(:user) { build(:user) }
5
- let(:ability) { Ability.new(user) }
6
- let(:upload_set) { UploadSet.create }
7
- let(:form) { CurationConcerns::UploadSetForm.new(upload_set, ability) }
8
- let(:work1) { build(:work, id: 'work1', title: ['First work']) }
9
- let(:work2) { build(:work, id: 'work2', title: ['Second work']) }
10
-
11
- let(:f) do
12
- allow(upload_set).to receive(:works).and_return([work1, work2])
13
- view.simple_form_for(form, url: '/update', builder: CurationConcerns::FormBuilder) do |fs_form|
14
- return fs_form
15
- end
16
- end
17
-
18
- before do
19
- allow(view).to receive(:f).and_return(f)
20
- render
21
- end
22
-
23
- it "draws the form" do
24
- expect(rendered).to have_text 'Applies to all files just uploaded'
25
- expect(rendered).to have_css 'input[name="title[work1][]"][value="First work"]'
26
- expect(rendered).to have_css 'input[name="title[work2][]"][value="Second work"]'
27
- end
28
- end