curation_concerns 0.12.0.pre5 → 0.12.0.pre6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4cc5f2766beec4a47127cd43e76cd15789ea7edf
4
- data.tar.gz: 0d1eccaf7b536f7a4c7d51d575f9828e4f2f7ad6
3
+ metadata.gz: 7f36dfe3aa91727d022c395d9ecf77afab2d5843
4
+ data.tar.gz: 3d33f42c2909c683f78f23557b70a121649fdc59
5
5
  SHA512:
6
- metadata.gz: 775fd8bd118db29f56b3a12b8aee3f36e02dcb108cefcd4da104413b042c0b38fd3983102cd55b49824b26acc0c2fdd3448909edcb734cb89018f8fccf0d7d12
7
- data.tar.gz: 697fe8253127b5cfa3ab326458b944a44d09693af59710d629d1a65f59fa5ff49ae558fe5ef82848f18fc0fbc7221cdf37c60390e08f5b9c48dfd949c4e7cd4d
6
+ metadata.gz: 7f89a1474a4e438832ce73090e9ca5bdc1d88a705305b6a276d87685e21392ee8bb079034da146f9f8e7b0854d738b314a51d2cce43c433095653bf153676205
7
+ data.tar.gz: 9f726193ec1c8ac22c741a8ce7ecb4a272c1491781c5d83f2e53c129aca5b33d9618f95d0b2876dc98559a6c36b0e1c289734b6c6c0e9e9399a012486404a1f5
@@ -21,7 +21,7 @@ module CurationConcerns
21
21
  def ingest_file(file)
22
22
  working_file = copy_file_to_working_directory(file, file_set.id)
23
23
  mime_type = file.respond_to?(:content_type) ? file.content_type : nil
24
- IngestFileJob.perform_later(file_set, working_file, mime_type, user.user_key, relation)
24
+ IngestFileJob.perform_later(file_set, working_file, mime_type, user, relation)
25
25
  make_derivative(file_set, working_file)
26
26
  true
27
27
  end
@@ -4,9 +4,9 @@ class IngestFileJob < ActiveJob::Base
4
4
  # @param [FileSet] file_set
5
5
  # @param [String] filename
6
6
  # @param [String,NilClass] mime_type
7
- # @param [String] user_key
7
+ # @param [User] user
8
8
  # @param [String] relation ('original_file')
9
- def perform(file_set, filename, mime_type, user_key, relation = 'original_file')
9
+ def perform(file_set, filename, mime_type, user, relation = 'original_file')
10
10
  file = File.open(filename, "rb")
11
11
  # If mime-type is known, wrap in an IO decorator
12
12
  # Otherwise allow Hydra::Works service to determine mime_type
@@ -23,7 +23,6 @@ class IngestFileJob < ActiveJob::Base
23
23
  file_set.save!
24
24
 
25
25
  # Do post file ingest actions
26
- user = User.find_by_user_key(user_key)
27
26
  CurationConcerns::VersioningService.create(file_set.send(relation.to_sym), user)
28
27
  CurationConcerns.config.callback.run(:after_create_content, file_set, user)
29
28
  end
@@ -1,20 +1,19 @@
1
1
  class IngestLocalFileJob < ActiveJob::Base
2
2
  queue_as :ingest_local
3
3
 
4
- def perform(file_set_id, directory, filename, user_key)
5
- user = User.find_by_user_key(user_key)
6
- fail "Unable to find user for #{user_key}" unless user
7
- file_set = FileSet.find(file_set_id)
8
- file_set.label ||= filename
9
- path = File.join(directory, filename)
4
+ # @param [FileSet] file_set
5
+ # @param [String] path
6
+ # @param [User] user
7
+ def perform(file_set, path, user)
8
+ file_set.label ||= File.basename(path)
10
9
 
11
10
  actor = CurationConcerns::FileSetActor.new(file_set, user)
12
11
 
13
12
  if actor.create_content(File.open(path))
14
13
  FileUtils.rm(path)
15
- CurationConcerns.config.callback.run(:after_import_local_file_success, file_set, user, filename)
14
+ CurationConcerns.config.callback.run(:after_import_local_file_success, file_set, user, path)
16
15
  else
17
- CurationConcerns.config.callback.run(:after_import_local_file_failure, file_set, user, filename)
16
+ CurationConcerns.config.callback.run(:after_import_local_file_failure, file_set, user, path)
18
17
  end
19
18
  end
20
19
  end
@@ -29,6 +29,8 @@ module CurationConcerns
29
29
  can :manage, curation_concerns_models
30
30
  end
31
31
 
32
+ # Override this method in your ability model if you use a different group
33
+ # or other logic to designate an administrator.
32
34
  def admin?
33
35
  user_groups.include? 'admin'
34
36
  end
@@ -4,6 +4,14 @@ 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
8
+
9
+ # modify this attribute to use an alternate presenter class for the collections
10
+ self.collection_presenter_class = CollectionPresenter
11
+
12
+ # modify this attribute to use an alternate presenter class for the files
13
+ self.file_presenter_class = FileSetPresenter
14
+
7
15
  # @param [SolrDocument] solr_document
8
16
  # @param [Ability] current_ability
9
17
  def initialize(solr_document, current_ability)
@@ -43,8 +51,22 @@ module CurationConcerns
43
51
  current_ability)
44
52
  end
45
53
 
54
+ # @return [Array<CollectionPresenter>] presenters for the collections that this work is a member of
55
+ def collection_presenters
56
+ PresenterFactory.build_presenters(in_collection_ids,
57
+ collection_presenter_class,
58
+ current_ability)
59
+ end
60
+
46
61
  private
47
62
 
63
+ # @return [Array<String>] ids of the collections that this work is a member of
64
+ def in_collection_ids
65
+ ActiveFedora::SolrService.query("{!field f=ordered_targets_ssim}#{id}",
66
+ fl: 'proxy_in_ssi')
67
+ .map { |x| x.fetch('proxy_in_ssi') }
68
+ end
69
+
48
70
  # TODO: Extract this to ActiveFedora::Aggregations::ListSource
49
71
  def ordered_ids
50
72
  ActiveFedora::SolrService.query("proxy_in_ssi:#{id}",
@@ -60,10 +82,5 @@ module CurationConcerns
60
82
  fq: "{!join from=ordered_targets_ssim to=id}id:\"#{id}/list_source\"")
61
83
  .flat_map { |x| x.fetch("id", []) }
62
84
  end
63
-
64
- # Override this method if you want to use an alternate presenter class for the files
65
- def file_presenter_class
66
- FileSetPresenter
67
- end
68
85
  end
69
86
  end
@@ -6,7 +6,7 @@ module CurationConcerns::SearchFilters
6
6
  # Override Hydra::AccessControlsEnforcement (or Hydra::PolicyAwareAccessControlsEnforcement)
7
7
  # Allows admin users to see everything (don't apply any gated_discovery_filters for those users)
8
8
  def gated_discovery_filters(permission_types = discovery_permissions, ability = current_ability)
9
- return [] if ability.current_user.groups.include? 'admin'
9
+ return [] if ability.admin?
10
10
  super
11
11
  end
12
12
 
@@ -1,3 +1,3 @@
1
1
  module CurationConcerns
2
- VERSION = "0.12.0.pre5".freeze
2
+ VERSION = "0.12.0.pre6".freeze
3
3
  end
@@ -11,7 +11,7 @@ describe CurationConcerns::FileActor do
11
11
  describe '#ingest_file' do
12
12
  it 'calls ingest file job' do
13
13
  expect(CharacterizeJob).to receive(:perform_later)
14
- expect(IngestFileJob).to receive(:perform_later).with(file_set, /world\.png$/, 'image/png', user.user_key, 'remastered')
14
+ expect(IngestFileJob).to receive(:perform_later).with(file_set, /world\.png$/, 'image/png', user, 'remastered')
15
15
  actor.ingest_file(uploaded_file)
16
16
  end
17
17
  end
@@ -22,7 +22,7 @@ describe CurationConcerns::FileSetActor do
22
22
 
23
23
  before do
24
24
  expect(CharacterizeJob).to receive(:perform_later)
25
- expect(IngestFileJob).to receive(:perform_later).with(file_set, /world\.png$/, 'image/png', user.user_key, 'original_file')
25
+ expect(IngestFileJob).to receive(:perform_later).with(file_set, /world\.png$/, 'image/png', user, 'original_file')
26
26
  allow(actor).to receive(:acquire_lock_for).and_yield
27
27
  actor.create_metadata(work)
28
28
  actor.create_content(uploaded_file)
@@ -68,14 +68,14 @@ describe CurationConcerns::FileSetActor do
68
68
  describe '#create_content' do
69
69
  it 'calls ingest file job' do
70
70
  expect(CharacterizeJob).to receive(:perform_later)
71
- expect(IngestFileJob).to receive(:perform_later).with(file_set, /world\.png$/, 'image/png', user.user_key, 'original_file')
71
+ expect(IngestFileJob).to receive(:perform_later).with(file_set, /world\.png$/, 'image/png', user, 'original_file')
72
72
  actor.create_content(uploaded_file)
73
73
  end
74
74
 
75
75
  context 'when an alternative relationship is specified' do
76
76
  it 'calls ingest file job' do
77
77
  expect(CharacterizeJob).to receive(:perform_later)
78
- expect(IngestFileJob).to receive(:perform_later).with(file_set, /world\.png$/, 'image/png', user.user_key, 'remastered')
78
+ expect(IngestFileJob).to receive(:perform_later).with(file_set, /world\.png$/, 'image/png', user, 'remastered')
79
79
  actor.create_content(uploaded_file, 'remastered')
80
80
  end
81
81
  end
@@ -72,7 +72,7 @@ describe IngestFileJob do
72
72
  subject { CurationConcerns.config.callback }
73
73
  it 'runs with file_set and user arguments' do
74
74
  expect(subject).to receive(:run).with(:after_create_content, file_set, user)
75
- described_class.perform_now(file_set, filename, 'image/png', user.user_key)
75
+ described_class.perform_now(file_set, filename, 'image/png', user)
76
76
  end
77
77
  end
78
78
  end
@@ -4,7 +4,6 @@ describe IngestLocalFileJob do
4
4
  let(:user) { create(:user) }
5
5
 
6
6
  let(:file_set) { FileSet.new }
7
- let(:file_set_id) { 'abc123' }
8
7
  let(:actor) { double }
9
8
 
10
9
  let(:mock_upload_directory) { 'spec/mock_upload_directory' }
@@ -12,12 +11,11 @@ describe IngestLocalFileJob do
12
11
  before do
13
12
  Dir.mkdir mock_upload_directory unless File.exist? mock_upload_directory
14
13
  FileUtils.copy(File.expand_path('../../fixtures/world.png', __FILE__), mock_upload_directory)
15
- allow(FileSet).to receive(:find).with(file_set_id).and_return(file_set)
16
14
  allow(CurationConcerns::FileSetActor).to receive(:new).with(file_set, user).and_return(actor)
17
15
  end
18
16
 
19
17
  it 'has attached a file' do
20
18
  expect(actor).to receive(:create_content).and_return(true)
21
- described_class.perform_now(file_set_id, mock_upload_directory, 'world.png', user.user_key)
19
+ described_class.perform_now(file_set, File.join(mock_upload_directory, 'world.png'), user)
22
20
  end
23
21
  end
@@ -99,6 +99,22 @@ describe CurationConcerns::WorkShowPresenter do
99
99
  end
100
100
  end
101
101
 
102
+ describe "#collection_presenters" do
103
+ let(:collection) { create(:collection) }
104
+ let(:obj) { create(:work) }
105
+ let(:attributes) { obj.to_solr }
106
+
107
+ before do
108
+ collection.ordered_members << obj
109
+ collection.save!
110
+ obj.save!
111
+ end
112
+
113
+ it "filters out members that are not file sets" do
114
+ expect(presenter.collection_presenters.map(&:id)).to eq [collection.id]
115
+ end
116
+ end
117
+
102
118
  describe "#attribute_to_html" do
103
119
  let(:presenter) { described_class.new(solr_document, ability) }
104
120
  let(:renderer) { double('renderer') }
@@ -12,8 +12,7 @@ describe CurationConcerns::SearchBuilder do
12
12
  describe '#gated_discovery_filters' do
13
13
  before do
14
14
  allow(subject).to receive(:current_ability).and_return(ability)
15
- allow(ability).to receive(:current_user).and_return(user)
16
- allow(user).to receive(:groups).and_return(['admin'])
15
+ allow(ability).to receive(:admin?).and_return(true)
17
16
  end
18
17
 
19
18
  it 'does not filter results for admin users' do
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.12.0.pre5
4
+ version: 0.12.0.pre6
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 00:00:00.000000000 Z
13
+ date: 2016-04-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: hydra-head