sufia 3.3.0 → 3.4.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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -2
  3. data/History.md +20 -0
  4. data/README.md +9 -5
  5. data/Releasing_sufia.md +4 -1
  6. data/SUFIA_VERSION +1 -1
  7. data/UpgradeGuide.md +3 -0
  8. data/{lib → app/controllers/concerns}/sufia/dashboard_controller_behavior.rb +1 -15
  9. data/app/views/catalog/_facet_layout.html.erb +1 -1
  10. data/app/views/dashboard/_facet_layout.html.erb +1 -1
  11. data/app/views/dashboard/_index_partials/_list_files.html.erb +1 -17
  12. data/app/views/generic_files/_permission_form.html.erb +3 -3
  13. data/app/views/users/index.html.erb +3 -3
  14. data/lib/sufia/version.rb +1 -1
  15. data/lib/sufia.rb +1 -3
  16. data/spec/controllers/batch_edits_controller_spec.rb +2 -2
  17. data/spec/controllers/downloads_controller_spec.rb +4 -4
  18. data/spec/controllers/generic_files_controller_spec.rb +12 -24
  19. data/spec/controllers/single_use_links_viewer_controller_spec.rb +1 -1
  20. data/spec/features/single_use_links_spec.rb +1 -1
  21. data/spec/features/users_spec.rb +6 -0
  22. data/spec/fixtures/image.jpg +0 -0
  23. data/spec/fixtures/png_fits.xml +29 -0
  24. data/spec/models/file_content_datastream_spec.rb +3 -13
  25. data/spec/models/generic_file/visibility_spec.rb +2 -2
  26. data/spec/models/generic_file_spec.rb +6 -1
  27. data/spec/spec_helper.rb +10 -4
  28. data/sufia-models/app/models/batch.rb +2 -6
  29. data/sufia-models/lib/sufia/models/engine.rb +2 -1
  30. data/sufia-models/lib/sufia/models/generic_file/characterization.rb +4 -4
  31. data/sufia-models/lib/sufia/models/generic_file/metadata.rb +22 -0
  32. data/sufia-models/lib/sufia/models/generic_file/mime_types.rb +23 -0
  33. data/sufia-models/lib/sufia/models/generic_file/permissions.rb +9 -4
  34. data/sufia-models/lib/sufia/models/generic_file/trophies.rb +15 -0
  35. data/sufia-models/lib/sufia/models/generic_file/versions.rb +16 -0
  36. data/sufia-models/lib/sufia/models/generic_file.rb +6 -52
  37. data/sufia-models/lib/sufia/models/noid.rb +1 -1
  38. data/sufia-models/lib/sufia/models/version.rb +1 -1
  39. data/sufia-models/lib/sufia/models.rb +0 -6
  40. data/sufia-models/sufia-models.gemspec +9 -5
  41. data/sufia.gemspec +1 -2
  42. data/tasks/release.rake +2 -0
  43. data/tasks/sufia-dev.rake +1 -1
  44. metadata +26 -47
  45. data/lib/generators/sufia/templates/migrations/acts_as_follower_migration.rb +0 -17
  46. data/lib/generators/sufia/templates/migrations/add_avatars_to_users.rb +0 -9
  47. data/lib/generators/sufia/templates/migrations/add_groups_to_users.rb +0 -11
  48. data/lib/generators/sufia/templates/migrations/add_ldap_attrs_to_user.rb +0 -27
  49. data/lib/generators/sufia/templates/migrations/add_social_to_users.rb +0 -13
  50. data/lib/generators/sufia/templates/migrations/create_checksum_audit_logs.rb +0 -20
  51. data/lib/generators/sufia/templates/migrations/create_local_authorities.rb +0 -50
  52. data/lib/generators/sufia/templates/migrations/create_single_use_links.rb +0 -12
  53. data/lib/generators/sufia/templates/migrations/create_trophies.rb +0 -10
  54. data/lib/generators/sufia/templates/migrations/create_version_committers.rb +0 -15
  55. data/spec/models/access_right_spec.rb +0 -57
  56. data/sufia-models/app/models/concerns/sufia/models/access_right.rb +0 -79
  57. data/sufia-models/app/models/concerns/sufia/models/with_access_right.rb +0 -33
  58. data/sufia-models/lib/sufia/models/generic_file/visibility.rb +0 -65
  59. /data/{lib → app/controllers/concerns}/sufia/contact_form_controller_behavior.rb +0 -0
  60. /data/sufia-models/{lib/sufia/models → app/models/concerns/sufia}/user.rb +0 -0
@@ -1,12 +0,0 @@
1
- class CreateSingleUseLinks < ActiveRecord::Migration
2
- def change
3
- create_table :single_use_links do |t|
4
- t.string :downloadKey
5
- t.string :path
6
- t.string :itemId
7
- t.datetime :expires
8
-
9
- t.timestamps
10
- end
11
- end
12
- end
@@ -1,10 +0,0 @@
1
- class CreateTrophies < ActiveRecord::Migration
2
- def change
3
- create_table :trophies do |t|
4
- t.integer :user_id
5
- t.string :generic_file_id
6
-
7
- t.timestamps
8
- end
9
- end
10
- end
@@ -1,15 +0,0 @@
1
- class CreateVersionCommitters < ActiveRecord::Migration
2
- def self.up
3
- create_table :version_committers do |t|
4
- t.string :obj_id
5
- t.string :datastream_id
6
- t.string :version_id
7
- t.string :committer_login
8
- t.timestamps
9
- end
10
- end
11
-
12
- def self.down
13
- drop_table :version_committers
14
- end
15
- end
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sufia::Models::AccessRight do
4
- [
5
- [false, Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC, nil, nil, true, false, false, false],
6
- [false, Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED, nil, nil, true, false, false, false],
7
- [false, nil, nil, nil, true, false, false, false],
8
- [false, nil, nil, 2.days.from_now, false, false, false, true],
9
- [false, nil, nil, 2.days.ago, false, false, false, true],
10
- [false, nil, Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, nil, true, false, false, false],
11
- [false, nil, Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED, nil, false, true, false, false],
12
- [false, nil, Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, nil, false, false, true, false],
13
- [false, nil, Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_EMBARGO, nil, false, false, false, true],
14
- [true, Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC, nil, nil, true, false, false, false],
15
- [true, Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC, nil, 2.days.from_now, false, false, false, true],
16
- [true, Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC, nil, 2.days.ago, false, false, false, true],
17
- [true, Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED, nil, nil, false, true, false, false],
18
- [true, nil, nil, nil, false, false, true, false],
19
- [true, nil, Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, nil, true, false, false, false],
20
- [true, nil, Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED, nil, false, true, false, false],
21
- [true, nil, Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, nil, false, false, true, false],
22
- [true, nil, Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_EMBARGO, nil, false, false, false, true],
23
- ].each do |given_persisted, givin_permission, given_visibility, given_embargo_release_date, expected_open_access, expected_authentication_only, expected_private, expected_open_access_with_embargo_release_date|
24
- spec_text = <<-TEXT
25
-
26
- GIVEN: {
27
- persisted: #{given_persisted.inspect},
28
- permission: #{givin_permission.inspect},
29
- visibility: #{given_visibility.inspect},
30
- embargo_release_date: #{given_embargo_release_date}
31
- },
32
- EXPECTED: {
33
- open_access: #{expected_open_access.inspect},
34
- restricted: #{expected_authentication_only.inspect},
35
- private: #{expected_private.inspect},
36
- open_access_with_embargo_release_date: #{expected_open_access_with_embargo_release_date}
37
- },
38
- TEXT
39
-
40
- it spec_text do
41
- permissions = [{access: :edit, name: givin_permission}]
42
- permissionable = double(
43
- 'permissionable',
44
- permissions: permissions,
45
- visibility: given_visibility,
46
- persisted?: given_persisted,
47
- embargo_release_date: given_embargo_release_date
48
- )
49
- access_right = Sufia::Models::AccessRight.new(permissionable)
50
-
51
- expect(access_right.open_access?).to eq(expected_open_access)
52
- expect(access_right.authenticated_only?).to eq(expected_authentication_only)
53
- expect(access_right.private?).to eq(expected_private)
54
- expect(access_right.open_access_with_embargo_release_date?).to eq(expected_open_access_with_embargo_release_date)
55
- end
56
- end
57
- end
@@ -1,79 +0,0 @@
1
- module Sufia
2
- module Models
3
- class AccessRight
4
- PERMISSION_TEXT_VALUE_PUBLIC = 'public'.freeze
5
- PERMISSION_TEXT_VALUE_AUTHENTICATED = 'registered'.freeze
6
- VISIBILITY_TEXT_VALUE_PUBLIC = 'open'.freeze
7
- VISIBILITY_TEXT_VALUE_EMBARGO = 'open_with_embargo_release_date'.freeze
8
- VISIBILITY_TEXT_VALUE_AUTHENTICATED = 'psu'.freeze
9
- VISIBILITY_TEXT_VALUE_PRIVATE = 'restricted'.freeze
10
-
11
- # @param permissionable [#visibility, #permissions]
12
- # @example
13
- # file = GenericFile.find('sufia:1234')
14
- # access = Sufia::AccessRight.new(file)
15
- def initialize(permissionable)
16
- @permissionable = permissionable
17
- end
18
-
19
- attr_reader :permissionable
20
- delegate :persisted?, :permissions, :visibility, to: :permissionable
21
- protected :persisted?, :permissions, :visibility
22
-
23
-
24
- def open_access?
25
- return true if has_visibility_text_for?(VISIBILITY_TEXT_VALUE_PUBLIC)
26
- # We don't want to know if its under embargo, simply does it have a date.
27
- # In this way, we can properly inform the label input
28
- persisted_open_access_permission? && !permissionable.embargo_release_date.present?
29
- end
30
-
31
- def open_access_with_embargo_release_date?
32
- return false unless permissionable_is_embargoable?
33
- return true if has_visibility_text_for?(VISIBILITY_TEXT_VALUE_EMBARGO)
34
- # We don't want to know if its under embargo, simply does it have a date.
35
- # In this way, we can properly inform the label input
36
- persisted_open_access_permission? && permissionable.embargo_release_date.present?
37
- end
38
-
39
- def authenticated_only?
40
- return false if open_access?
41
- has_permission_text_for?(PERMISSION_TEXT_VALUE_AUTHENTICATED) ||
42
- has_visibility_text_for?(VISIBILITY_TEXT_VALUE_AUTHENTICATED)
43
- end
44
-
45
- def private?
46
- return false if open_access?
47
- return false if authenticated_only?
48
- return false if open_access_with_embargo_release_date?
49
- true
50
- end
51
-
52
- private
53
-
54
- def persisted_open_access_permission?
55
- if persisted?
56
- has_permission_text_for?(PERMISSION_TEXT_VALUE_PUBLIC)
57
- else
58
- visibility.to_s == ''
59
- end
60
- end
61
-
62
- def on_or_after_any_embargo_release_date?
63
- return true unless permissionable.embargo_release_date
64
- permissionable.embargo_release_date.to_date < Date.today
65
- end
66
-
67
- def permissionable_is_embargoable?
68
- permissionable.respond_to?(:embargo_release_date)
69
- end
70
-
71
- def has_visibility_text_for?(text)
72
- visibility == text
73
- end
74
- def has_permission_text_for?(text)
75
- !!permissions.detect { |perm| perm[:name] == text }
76
- end
77
- end
78
- end
79
- end
@@ -1,33 +0,0 @@
1
- module Sufia
2
- module Models
3
- module WithAccessRight
4
- extend ActiveSupport::Concern
5
-
6
- def under_embargo?
7
- @under_embargo ||= rightsMetadata.under_embargo?
8
- end
9
-
10
- def open_access?
11
- access_rights.open_access?
12
- end
13
-
14
- def open_access_with_embargo_release_date?
15
- access_rights.open_access_with_embargo_release_date?
16
- end
17
-
18
- def authenticated_only_access?
19
- access_rights.authenticated_only?
20
- end
21
-
22
- def private_access?
23
- access_rights.private?
24
- end
25
-
26
- def access_rights
27
- @access_rights ||= AccessRight.new(self)
28
- end
29
- protected :access_rights
30
-
31
- end
32
- end
33
- end
@@ -1,65 +0,0 @@
1
- module Sufia
2
- module GenericFile
3
- module Visibility
4
- extend ActiveSupport::Concern
5
- extend Deprecation
6
-
7
- def visibility=(value)
8
- return if value.nil?
9
- # only set explicit permissions
10
- case value
11
- when Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
12
- public_visibility!
13
- when Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
14
- registered_visibility!
15
- when Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
16
- private_visibility!
17
- else
18
- raise ArgumentError, "Invalid visibility: #{value.inspect}"
19
- end
20
- end
21
-
22
- def visibility
23
- if read_groups.include? Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC
24
- Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
25
- elsif read_groups.include? Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED
26
- Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
27
- else
28
- Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
29
- end
30
- end
31
-
32
- def set_visibility(visibility)
33
- Deprecation.warn Visibility, "set_visibility is deprecated, use visibility= instead. set_visibility will be removed in sufia 3.0", caller
34
- self.visibility= visibility
35
- end
36
-
37
- def visibility_changed?
38
- @visibility_will_change
39
- end
40
-
41
- private
42
- def visibility_will_change!
43
- @visibility_will_change = true
44
- end
45
-
46
- def public_visibility!
47
- visibility_will_change! unless visibility == Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
48
- self.datastreams["rightsMetadata"].permissions({:group=>Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC}, "read")
49
- end
50
-
51
- def registered_visibility!
52
- visibility_will_change! unless visibility == Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
53
- self.datastreams["rightsMetadata"].permissions({:group=>Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED}, "read")
54
- self.datastreams["rightsMetadata"].permissions({:group=>Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC}, "none")
55
- end
56
-
57
- def private_visibility!
58
- visibility_will_change! unless visibility == Sufia::Models::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
59
- self.datastreams["rightsMetadata"].permissions({:group=>Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED}, "none")
60
- self.datastreams["rightsMetadata"].permissions({:group=>Sufia::Models::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC}, "none")
61
- end
62
-
63
- end
64
- end
65
- end