curation_concerns 0.12.0.pre5 → 0.12.0.pre6

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 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