CHANGELOG.md
# Changelog for Spira <https://github.com/rdf-ruby/spira>
## [Unreleased]
### Changed
* Spira#using_repository now returns the given repository
## 0.3.0
* General updates to bring up to date.
## 0.0.12
* Implemented #validate, #validate! (refactored from #save!)
* Force to_a on query results when constructing to force the promise-like
semantics of SPARQL::Client
## 0.0.11
* Bumped the version dependency on rdf-isomorphic to 0.3.0
* Added support for before_create, after_create, before_save, after_save,
after_update, before_destroy and after_destroy hooks.
* Switch RDF.rb dependency to >= instead of ~>
## 0.0.10
* Use RDF::URI.intern on URIs generated via base URIs
* Added a Spira::Types::Native, which will return the RDF::Value for a given
predicate directly without any serialization or dserialization.
## 0.0.9
* Fix a bug with Spira::Types::Any that prevented blank node objects
* Added Spira::Resource#copy, #copy!, #copy_resource!, and #rename!
* Fix a bug with fragment RDF::URI arguments that prevented correct URI
construction
* Added Spira::Resource.project(subject, attributes, &block), which creates a
new instance without attempting to perform any base_uri logic on the given
subject. This provides a supported API entry point for implementors to
create their own domain-specific URI construction.
* Updating a value to nil will now remove it from the repository on #save!
* Tweaks to dirty tracking to correctly catch both changed and updated values.
All tests pass for the first time with this change.
* Change gemspec name to work with bundler
## 0.0.8
* Remove type checking for repository addition. More power in return for
slightly more difficult error messages.
* Repositories added via klass, \*arg are now only instantiated on first use
instead of immediately.
* RDF::URI#as, RDF::Node#as, Resource.for, and Resource#new can now all accept
a block, which yields the new instance and saves it after the block.
* Clarify error message when default repository is not setup
* Added a weak-reference identity map for each instance. Any circular references in
relations will now return the original object instead of querying for a new
one.
* Use a weak-reference identity map when iterating by class.
* When serializing/unserializing, duck typing (:serialize, :unserialize) is now
permitted.
## 0.0.7
* Added Resource.\[\], an alias for Resource.for
* Resource.each now correctly raises an exception when a repository isn't found
## 0.0.6
* Added #exists?, which returns a boolean if an instance exists in
the backing store.
* Added #data, which returns an enumerator of all RDF data for a subject, not
just model data.
* #save! and #update! now return self for chaining
* Implemented #update and #update!, which allow setting multiple properties
at once
* Existing values not matching a model's defined type will now be deleted on
#save!
* Saving resources will now only update dirty fields
* Saving resources now removes all existing triples for a given predicate
if the field was updated instead of only removing one.
* Implemented and documented #destroy!, #destroy!(:subject),
#destroy!(:object), and #destroy!(:completely). Removed #destroy_resource!
* has_many collections are now Sets and not Arrays, more accurately reflecting
RDF semantics.
* The Any (default) property type will now work fine with URIs
* Added ResourceDeclarationError to replace various errors that occur during
invalid class declarations via the DSL.
* Raise an error if a non-URI predicate is given in the DSL
* Small updates for RDF.rb 0.2.0
* Implemented dirty field tracking. Resource#dirty?(:name) will now report if
a field has not been saved.
## 0.0.5
* Relations can now find related classes in modules, either by absolute
reference, or by class name if they are in the same namespace.
* Fix a bug with default_vocabulary in which a '/' was appended to
vocabularies ending in '#'
* Fix a bug with the Decimal type where round-tripping was incorrect
* Fix some error messages that were missing closing parentheses
## 0.0.4
* Added a Decimal type
* Small updates for RDF.rb 0.2.0 compatibility
* Add a Spira::Base class that can be inherited from for users who prefer to
inherit rather than include.
* Resource#new returns to the public API as a way to create a resource with a
new blank node subject.
## 0.0.3
* Bumped promise dependency to 0.1.1 to fix a Ruby 1.9 warning
* Rework error handling when a repository is not configured; this should
always now raise a Spira::NoRepositoryError regardless of what operation
was attempted, and the error message was improved as well.
* A '/' is no longer appended to base URIs ending with a '#'
* Resources can now take a BNode as a subject. Implemented #node?, #uri,
#to_uri, #to_node, and #to_subject in support of this; see the yardocs for
exact semantics. RDF::Node is monkey patched with #as, just like RDF::URI,
for instantiation. Old code should not break, but if you want to add
BNodes, you may be using #uri where you want to now be using #subject.
## 0.0.2
* Implemented #each on resource classes, allowing classes with a defined RDF
type to be enumerated
* Fragment URIs are now used as strings, allowing i.e. Integers to be used as
the final portion of a URI for classes with a base_uri defined.
* Added an RDF::URI property type
* Implemented #to_rdf and #to_uri for increased compatibility with the RDF.rb
ecosystem
## 0.0.1
* Initial release