Class: Hyrax::Resource
- Inherits:
-
Valkyrie::Resource
- Object
- Valkyrie::Resource
- Hyrax::Resource
show all
- Includes:
- Naming, WithEvents
- Defined in:
- app/models/hyrax/resource.rb
Overview
Note:
Hyrax permissions are managed via [Access Control List](en.wikipedia.org/wiki/Access-control_list) style permissions. Legacy Hyrax models powered by ActiveFedora linked the ACLs from the repository object itself (as an acl:accessControl link to a container). Valkyrie models jettison that approach in favor of relying on links back from the permissions using access_to. As was the case in the past implementation, we include an object to represent the access list itself (Hyrax::AccessControl). This object’s #access_to is the way Hyrax discovers list entries–it MUST match between the AccessControl and its individual Permissions.
The effect of this change is that our AccessControl objects are detached from Hyrax::Resource they can (and usually should) be edited and persisted independently from the resource itself.
Some utilitiy methods are provided for ergonomics in transitioning from ActiveFedora: the #visibility accessor, and the ‘#*_users` and `#*_group` accessors. The main purpose of these is to provide a cached ACL attached to a given Resource instance. However, these will likely be deprecated in the future, and it’s advisable to avoid them in favor of Hyrax::AccessControlList, Hyrax::PermissionManager and/or Hyrax::VisibilityWriter (which provide their underlying implementations).
The base Valkyrie model for Hyrax.
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from WithEvents
#event_class, #events, #log_event, #stream
Class Method Details
.collection? ⇒ Boolean
55
56
57
|
# File 'app/models/hyrax/resource.rb', line 55
def collection?
pcdm_collection?
end
|
.file? ⇒ Boolean
61
62
63
|
# File 'app/models/hyrax/resource.rb', line 61
def file?
false
end
|
.file_set? ⇒ Boolean
67
68
69
|
# File 'app/models/hyrax/resource.rb', line 67
def file_set?
false
end
|
.human_readable_type ⇒ String
Returns a human readable name for the model.
49
50
51
|
# File 'app/models/hyrax/resource.rb', line 49
def human_readable_type
I18n.translate("hyrax.models.#{model_name.i18n_key}", default: model_name.human)
end
|
.pcdm_collection? ⇒ Boolean
73
74
75
|
# File 'app/models/hyrax/resource.rb', line 73
def pcdm_collection?
false
end
|
.pcdm_object? ⇒ Boolean
79
80
81
|
# File 'app/models/hyrax/resource.rb', line 79
def pcdm_object?
false
end
|
.to_rdf_representation ⇒ String
93
94
95
|
# File 'app/models/hyrax/resource.rb', line 93
def to_rdf_representation
name
end
|
.work? ⇒ Boolean
Works are PCDM Objects which are not File Sets.
87
88
89
|
# File 'app/models/hyrax/resource.rb', line 87
def work?
pcdm_object? && !file_set?
end
|
Instance Method Details
#==(other) ⇒ Object
157
158
159
|
# File 'app/models/hyrax/resource.rb', line 157
def ==(other)
attributes.except(:created_at, :updated_at) == other.attributes.except(:created_at, :updated_at) if other.respond_to?(:attributes)
end
|
#collection? ⇒ Boolean
110
111
112
|
# File 'app/models/hyrax/resource.rb', line 110
def collection?
self.class.collection?
end
|
#embargo ⇒ Object
180
181
182
183
|
# File 'app/models/hyrax/resource.rb', line 180
def embargo
return @embargo if @embargo
@embargo = Hyrax.query_service.find_by(id: embargo_id) if embargo_id.present?
end
|
#embargo=(value) ⇒ Object
173
174
175
176
177
178
|
# File 'app/models/hyrax/resource.rb', line 173
def embargo=(value)
raise TypeError "can't convert #{value.class} into Hyrax::Embargo" unless value.is_a? Hyrax::Embargo
@embargo = value
self.embargo_id = @embargo.id
end
|
#file? ⇒ Boolean
116
117
118
|
# File 'app/models/hyrax/resource.rb', line 116
def file?
self.class.file?
end
|
#file_set? ⇒ Boolean
122
123
124
|
# File 'app/models/hyrax/resource.rb', line 122
def file_set?
self.class.file_set?
end
|
#lease ⇒ Object
192
193
194
195
|
# File 'app/models/hyrax/resource.rb', line 192
def lease
return @lease if @lease
@lease = Hyrax.query_service.find_by(id: lease_id) if lease_id.present?
end
|
#lease=(value) ⇒ Object
185
186
187
188
189
190
|
# File 'app/models/hyrax/resource.rb', line 185
def lease=(value)
raise TypeError "can't convert #{value.class} into Hyrax::Lease" unless value.is_a? Hyrax::Lease
@lease = value
self.lease_id = @lease.id
end
|
#pcdm_collection? ⇒ Boolean
128
129
130
|
# File 'app/models/hyrax/resource.rb', line 128
def pcdm_collection?
self.class.pcdm_collection?
end
|
#pcdm_object? ⇒ Boolean
134
135
136
|
# File 'app/models/hyrax/resource.rb', line 134
def pcdm_object?
self.class.pcdm_object?
end
|
#permission_manager ⇒ Object
161
162
163
|
# File 'app/models/hyrax/resource.rb', line 161
def permission_manager
@permission_manager ||= Hyrax::PermissionManager.new(resource: self)
end
|
#to_rdf_representation ⇒ String
140
141
142
|
# File 'app/models/hyrax/resource.rb', line 140
def to_rdf_representation
self.class.to_rdf_representation
end
|
#visibility ⇒ Object
169
170
171
|
# File 'app/models/hyrax/resource.rb', line 169
def visibility
visibility_reader.read
end
|
#visibility=(value) ⇒ Object
165
166
167
|
# File 'app/models/hyrax/resource.rb', line 165
def visibility=(value)
visibility_writer.assign_access_for(visibility: value)
end
|
#wings? ⇒ Boolean
Its nice to know if a record is still in AF or not
153
154
155
|
# File 'app/models/hyrax/resource.rb', line 153
def wings?
respond_to?(:head) && respond_to?(:tail)
end
|
#work? ⇒ Boolean
Works are PCDM Objects which are not File Sets.
148
149
150
|
# File 'app/models/hyrax/resource.rb', line 148
def work?
self.class.work?
end
|