Module: Spira::Persistence
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#count ⇒ Object
The number of RDF::Statements this projection has.
- #destroy(*args) ⇒ Object
- #destroy!(*args) ⇒ Object
- #destroyed? ⇒ Boolean
-
#each ⇒ Object
Enumerate each RDF statement that makes up this projection.
-
#new_record? ⇒ Boolean
A resource is considered to be new if the repository does not have statements where subject == resource type.
- #persisted? ⇒ Boolean
-
#reload(props = {}) ⇒ Object
Reload all attributes for this instance.
- #save ⇒ Object
- #save! ⇒ Object
-
#update_attributes(properties, options = {}) ⇒ self
Update multiple attributes of this repository.
Instance Method Details
#count ⇒ Object
The number of RDF::Statements this projection has.
337 338 339 |
# File 'lib/spira/persistence.rb', line 337 def count each.count end |
#destroy(*args) ⇒ Object
293 294 295 296 297 |
# File 'lib/spira/persistence.rb', line 293 def destroy(*args) run_callbacks :destroy do destroy_model_data(*args) end end |
#destroy!(*args) ⇒ Object
299 300 301 |
# File 'lib/spira/persistence.rb', line 299 def destroy!(*args) destroy(*args) || raise(RecordNotSaved) end |
#destroyed? ⇒ Boolean
274 275 276 |
# File 'lib/spira/persistence.rb', line 274 def destroyed? @destroyed end |
#each ⇒ Object
Enumerate each RDF statement that makes up this projection. This makes each instance an RDF::Enumerable
, with all of the nifty benefits thereof. See ruby-rdf.github.io/rdf/RDF/Enumerable.html for information on arguments.
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 |
# File 'lib/spira/persistence.rb', line 310 def each if block_given? self.class.properties.each do |name, property| if value = read_attribute(name) if self.class.reflect_on_association(name) value.each do |val| node = build_rdf_value(val, property[:type]) yield RDF::Statement.new(subject, property[:predicate], node) if valid_object?(node) end else node = build_rdf_value(value, property[:type]) yield RDF::Statement.new(subject, property[:predicate], node) if valid_object?(node) end end end self.class.types.each do |t| yield RDF::Statement.new(subject, RDF.type, t) end else enum_for(:each) end end |
#new_record? ⇒ Boolean
A resource is considered to be new if the repository does not have statements where subject == resource type
270 271 272 |
# File 'lib/spira/persistence.rb', line 270 def new_record? !self.class.repository.has_subject?(subject) end |
#persisted? ⇒ Boolean
278 279 280 281 282 283 |
# File 'lib/spira/persistence.rb', line 278 def persisted? # FIXME: an object should be considered persisted # when its attributes (and their exact values) are all available in the storage. # This should check for !(changed? || new_record? || destroyed?) actually. !(new_record? || destroyed?) end |
#reload(props = {}) ⇒ Object
Reload all attributes for this instance. This resource will block if the underlying repository blocks the next time it accesses attributes.
NB: “props” argument is ignored, it is handled in Base
368 369 370 371 372 373 374 375 376 377 |
# File 'lib/spira/persistence.rb', line 368 def reload(props = {}) sts = self.class.repository.query({subject: subject}) self.class.properties.each do |name, | name = name.to_s if sts objects = sts.select { |s| s.predicate == [:predicate] } attributes[name] = retrieve_attribute(name, , objects) end end end |
#save ⇒ Object
285 286 287 |
# File 'lib/spira/persistence.rb', line 285 def save(*) create_or_update end |
#save! ⇒ Object
289 290 291 |
# File 'lib/spira/persistence.rb', line 289 def save!(*) create_or_update || raise(RecordNotSaved) end |
#update_attributes(properties, options = {}) ⇒ self
Update multiple attributes of this repository.
356 357 358 359 |
# File 'lib/spira/persistence.rb', line 356 def update_attributes(properties, = {}) assign_attributes properties save end |