Class: ActiveFedora::RDFDatastream
Constant Summary
AttributeMethods::AttrNames
Instance Attribute Summary
#mime_type
Class Method Summary
collapse
Instance Method Summary
collapse
#primary_solr_name, #to_solr
Methods inherited from File
#==, #attribute_will_change!, #changed?, #check_fixity, #checksum, #datastream_will_change!, #described_by, #exists!, #frozen?, #initialize, #inspect, #ldp_connection, #ldp_source, #metadata, #new_record?, #readonly?, #refresh, #reload, #remote_content, #serialize!, #to_solr
Methods included from Querying
#default_sort_params, extended
#id, #id=, #pid, #uri
#[], #[]=, #attribute_names, #attributes
#create_version, #has_versions?, #model_type, #restore_version, #versions
#delete, #destroy, #destroyed?, #eradicate, #new_record?, #persisted?, #save, #save!, #update
#headers, #stream
#create_date, #digest, #dirty_size, #empty?, #has_content?, #original_name, #original_name=, #persisted_size, #size
Class Method Details
.add_attribute_indexing_config(name, &block) ⇒ Object
22
23
24
25
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 22
def add_attribute_indexing_config(name, &block)
Deprecation.warn(RDFDatastream, "Adding indexing to datastreams is deprecated")
index_config[name] ||= ActiveFedora::Indexing::Map::IndexObject.new(name, &block)
end
|
.parent_uri(ds) ⇒ Object
Trim the last segment off the URI to get the parents uri
28
29
30
31
32
33
34
35
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 28
def parent_uri(ds)
m = /^(.*)\/[^\/]*$/.match(ds.uri)
if m
m[1]
else
::RDF::URI.new(nil)
end
end
|
.property(name, *args, &block) ⇒ Object
17
18
19
20
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 17
def property(name, *args, &block)
super
add_attribute_indexing_config(name, &block) if block_given?
end
|
.rdf_subject(&block) ⇒ Object
11
12
13
14
15
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 11
def rdf_subject(&block)
return @subject_block = block if block_given?
@subject_block ||= ->(ds) { parent_uri(ds) }
end
|
.resource_class(klass = nil) ⇒ Class
ActiveTriples::Resource and include ActiveFedora::RDF::Persistence.
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 42
def resource_class(klass = nil)
if klass
raise ArgumentError, "#{self} already has a resource_class #{@resource_class}, cannot redefine it to #{klass}" if @resource_class && klass != @resource_class
raise ArgumentError, "#{klass} must be a subclass of ActiveTriples::Resource" unless klass < ActiveTriples::Resource
end
@resource_class ||= begin
klass = Class.new(klass || ActiveTriples::Resource)
klass.send(:include, RDF::Persistence)
klass
end
end
|
Instance Method Details
#content ⇒ Object
71
72
73
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 71
def content
serialize
end
|
#content=(new_content) ⇒ Object
75
76
77
78
79
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 75
def content=(new_content)
resource.clear!
resource << deserialize(new_content)
content
end
|
#content_changed? ⇒ Boolean
86
87
88
89
90
91
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 86
def content_changed?
return false unless instance_variable_defined? :@resource
return true if empty_or_blank_subject? @content = serialize
super
end
|
#deserialize(data = nil) ⇒ Object
153
154
155
156
157
158
159
160
161
162
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 153
def deserialize(data = nil)
return ::RDF::Graph.new if new_record? && data.nil?
data ||= remote_content
return ::RDF::Graph.new if data.nil?
data.force_encoding('utf-8')
::RDF::Graph.new << ::RDF::Reader.for(serialization_format).new(data)
end
|
#empty_or_blank_subject? ⇒ Boolean
93
94
95
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 93
def empty_or_blank_subject?
resource.rdf_subject.node? || resource.rdf_subject.value.blank?
end
|
#freeze ⇒ Object
97
98
99
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 97
def freeze
@resource.freeze
end
|
67
68
69
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 67
def metadata?
true
end
|
#parent_uri ⇒ Object
63
64
65
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 63
def parent_uri
self.class.parent_uri(self)
end
|
#refresh_attributes ⇒ Object
127
128
129
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 127
def refresh_attributes
@resource = nil
end
|
#resource ⇒ Object
Also known as:
graph
The resource is the RdfResource object that stores the graph for the datastream and is the central point for its relationship to other nodes.
set_value, get_value, and property accessors are delegated to this object.
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 107
def resource
@resource ||= begin
klass = self.class.resource_class
klass.properties.merge(self.class.properties).each do |_prop, config|
klass.property(config.term,
predicate: config.predicate,
class_name: config.class_name)
end
klass.accepts_nested_attributes_for(*nested_attributes_options.keys) unless nested_attributes_options.blank?
uri_stub = self.class.rdf_subject.call(self)
r = klass.new(uri_stub)
r.datastream = self
r << deserialize
r
end
end
|
164
165
166
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 164
def serialization_format
raise "you must override the `serialization_format' method in a subclass"
end
|
#serialize ⇒ Object
148
149
150
151
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 148
def serialize
resource.set_subject!(parent_uri) if parent_uri && rdf_subject.node?
resource.dump serialization_format
end
|
#term_values(*values) ⇒ Object
This method allows for delegation. This patches the fact that there’s no consistent API for allowing delegation - we’re matching the OmDatastream implementation as our “consistency” point. @TODO: We may need to enable deep RDF delegation at one point.
136
137
138
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 136
def term_values(*values)
send(values.first)
end
|
#update_indexed_attributes(hash) ⇒ Object
140
141
142
143
144
145
146
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 140
def update_indexed_attributes(hash)
hash.each do |fields, value|
fields.each do |field|
send("#{field}=", value)
end
end
end
|
#uri=(uri) ⇒ Object
81
82
83
84
|
# File 'lib/active_fedora/rdf/rdf_datastream.rb', line 81
def uri=(uri)
super
resource.set_subject!(parent_uri) if empty_or_blank_subject?
end
|