curation_concerns 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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