spira 0.0.1 → 0.0.2
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.
- data/README +9 -6
- data/VERSION +1 -1
- data/lib/spira.rb +1 -1
- data/lib/spira/exceptions.rb +11 -0
- data/lib/spira/resource.rb +1 -1
- data/lib/spira/resource/class_methods.rb +34 -9
- data/lib/spira/resource/instance_methods.rb +18 -1
- data/lib/spira/types.rb +1 -0
- data/lib/spira/types/uri.rb +25 -0
- data/lib/spira/version.rb +1 -1
- metadata +6 -4
data/README
CHANGED
@@ -5,12 +5,14 @@ It's time to breathe life into your linked data.
|
|
5
5
|
---
|
6
6
|
|
7
7
|
## Synopsis
|
8
|
-
Spira is a framework for using the information in RDF.rb repositories as model
|
8
|
+
Spira is a framework for using the information in [RDF.rb][] repositories as model
|
9
9
|
objects. It gives you the ability to work in a resource-oriented way without
|
10
10
|
losing access to statement-oriented nature of linked data, if you so choose.
|
11
11
|
It can be used either to access existing RDF data in a resource-oriented way,
|
12
12
|
or to create a new store of RDF data based on simple defaults.
|
13
13
|
|
14
|
+
An introductory blog post is at <http://blog.datagraph.org/2010/05/spira>
|
15
|
+
|
14
16
|
### Example
|
15
17
|
|
16
18
|
class Person
|
@@ -332,12 +334,12 @@ built in `assert` and assert helpers such as `assert_set` and
|
|
332
334
|
end
|
333
335
|
end
|
334
336
|
|
335
|
-
|
336
|
-
|
337
|
-
|
337
|
+
dancing_queen.artist = nickelback
|
338
|
+
dancing_queen.save! #=> ValidationError
|
339
|
+
dancing_queen.errors.each #=> ["artist cannot be Nickelback"]
|
338
340
|
|
339
|
-
|
340
|
-
|
341
|
+
dancing_queen.artist = abba
|
342
|
+
dancing_queen.save! #=> true
|
341
343
|
|
342
344
|
|
343
345
|
## Inheritance
|
@@ -391,3 +393,4 @@ Fork it on Github and go. Please make sure you're kosher with the UNLICENSE
|
|
391
393
|
file before contributing.
|
392
394
|
|
393
395
|
[public-rdf-ruby w3c mailing list]: http://lists.w3.org/Archives/Public/public-rdf-ruby/
|
396
|
+
[RDF.rb]: http://rdf.rubyforge.org
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/spira.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rdf'
|
2
|
+
require 'spira/exceptions'
|
2
3
|
|
3
4
|
##
|
4
5
|
# Spira is a framework for building projections of RDF data into Ruby classes.
|
@@ -103,7 +104,6 @@ module Spira
|
|
103
104
|
autoload :Errors, 'spira/errors'
|
104
105
|
autoload :VERSION, 'spira/version'
|
105
106
|
|
106
|
-
class ValidationError < StandardError; end
|
107
107
|
end
|
108
108
|
|
109
109
|
module RDF
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Spira
|
2
|
+
|
3
|
+
##
|
4
|
+
# For cases when a method is called which requires a `type` method be
|
5
|
+
# declared on a Spira class.
|
6
|
+
class NoTypeError < StandardError ; end
|
7
|
+
|
8
|
+
##
|
9
|
+
# For cases when a projection fails a validation check
|
10
|
+
class ValidationError < StandardError; end
|
11
|
+
end
|
data/lib/spira/resource.rb
CHANGED
@@ -72,14 +72,12 @@ module Spira
|
|
72
72
|
case identifier
|
73
73
|
when RDF::URI
|
74
74
|
identifier
|
75
|
-
|
76
|
-
uri = RDF::URI.new(identifier)
|
75
|
+
else
|
76
|
+
uri = RDF::URI.new(identifier.to_s)
|
77
77
|
return uri if uri.absolute?
|
78
78
|
raise ArgumentError, "Cannot create identifier for #{self} by String without base_uri; RDF::URI required" if self.base_uri.nil?
|
79
79
|
separator = self.base_uri.to_s[-1,1] == "/" ? '' : '/'
|
80
|
-
RDF::URI.new(self.base_uri.to_s + separator + identifier)
|
81
|
-
else
|
82
|
-
raise ArgumentError, "Cannot create an identifier for #{self} from #{identifier}, expected RDF::URI or String"
|
80
|
+
RDF::URI.new(self.base_uri.to_s + separator + identifier.to_s)
|
83
81
|
end
|
84
82
|
end
|
85
83
|
|
@@ -89,15 +87,42 @@ module Spira
|
|
89
87
|
# This method is only valid for classes which declare a `type` with the
|
90
88
|
# `type` method in the DSL.
|
91
89
|
#
|
92
|
-
# @raise [
|
90
|
+
# @raise [Spira::NoTypeError] if the resource class does not have an RDF type declared
|
93
91
|
# @return [Integer] the count
|
94
92
|
# @see Spira::Resource::DSL
|
95
93
|
def count
|
96
|
-
raise
|
97
|
-
|
98
|
-
|
94
|
+
raise Spira::NoTypeError, "Cannot count a #{self} without a reference type URI." if @type.nil?
|
95
|
+
repository.query(:predicate => RDF.type, :object => @type).subjects.count
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Enumerate over all resources projectable as this class. This method is
|
100
|
+
# only valid for classes which declare a `type` with the `type` method in
|
101
|
+
# the DSL.
|
102
|
+
#
|
103
|
+
# @raise [Spira::NoTypeError] if the resource class does not have an RDF type declared
|
104
|
+
# @overload each
|
105
|
+
# @yield [instance] A block to perform for each available projection of this class
|
106
|
+
# @yieldparam [self] instance
|
107
|
+
# @yieldreturn [Void]
|
108
|
+
# @return [Void]
|
109
|
+
#
|
110
|
+
# @overload each
|
111
|
+
# @return [Enumerator]
|
112
|
+
# @see Spira::Resource::DSL
|
113
|
+
def each(&block)
|
114
|
+
raise Spira::NoTypeError, "Cannot count a #{self} without a reference type URI." if @type.nil?
|
115
|
+
case block_given?
|
116
|
+
when false
|
117
|
+
enum_for(:each)
|
118
|
+
else
|
119
|
+
repository.query(:predicate => RDF.type, :object => @type).each_subject do |subject|
|
120
|
+
block.call(self.for(subject))
|
121
|
+
end
|
122
|
+
end
|
99
123
|
end
|
100
124
|
|
125
|
+
|
101
126
|
##
|
102
127
|
# Returns true if the given property is a has_many property, false otherwise
|
103
128
|
#
|
@@ -176,7 +176,23 @@ module Spira
|
|
176
176
|
def type=(type)
|
177
177
|
raise TypeError, "Cannot reassign RDF.type for #{self}; consider appending to a has_many :types"
|
178
178
|
end
|
179
|
-
|
179
|
+
|
180
|
+
##
|
181
|
+
# Returns the RDF representation of this resource.
|
182
|
+
#
|
183
|
+
# @return [RDF::Enumerable]
|
184
|
+
def to_rdf
|
185
|
+
self
|
186
|
+
end
|
187
|
+
|
188
|
+
##
|
189
|
+
# Returns the URI representation of this resource.
|
190
|
+
#
|
191
|
+
# @return [RDF::URI]
|
192
|
+
def to_uri
|
193
|
+
uri
|
194
|
+
end
|
195
|
+
|
180
196
|
##
|
181
197
|
# A developer-friendly view of this projection
|
182
198
|
#
|
@@ -255,6 +271,7 @@ module Spira
|
|
255
271
|
def ==(other)
|
256
272
|
case other
|
257
273
|
# TODO: define behavior for equality on subclasses.
|
274
|
+
# TODO: should we compare attributes here?
|
258
275
|
when self.class
|
259
276
|
@uri == other.uri
|
260
277
|
when RDF::Enumerable
|
data/lib/spira/types.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Spira::Types
|
2
|
+
|
3
|
+
##
|
4
|
+
# This type takes RDF Resource objects and provides RDF::URI objects for the
|
5
|
+
# ruby representation.
|
6
|
+
#
|
7
|
+
# @see Spira::Type
|
8
|
+
# @see http://rdf.rubyforge.org/RDF/URI.html
|
9
|
+
class URI
|
10
|
+
|
11
|
+
include Spira::Type
|
12
|
+
|
13
|
+
def self.unserialize(value)
|
14
|
+
RDF::URI(value)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.serialize(value)
|
18
|
+
RDF::URI(value)
|
19
|
+
end
|
20
|
+
|
21
|
+
register_alias :uri
|
22
|
+
register_alias RDF::URI
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/lib/spira/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ben Lavender
|
@@ -15,7 +15,7 @@ bindir:
|
|
15
15
|
- bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-06-04 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- UNLICENSE
|
117
117
|
- VERSION
|
118
118
|
- lib/spira/errors.rb
|
119
|
+
- lib/spira/exceptions.rb
|
119
120
|
- lib/spira/resource/class_methods.rb
|
120
121
|
- lib/spira/resource/dsl.rb
|
121
122
|
- lib/spira/resource/instance_methods.rb
|
@@ -127,10 +128,11 @@ files:
|
|
127
128
|
- lib/spira/types/float.rb
|
128
129
|
- lib/spira/types/integer.rb
|
129
130
|
- lib/spira/types/string.rb
|
131
|
+
- lib/spira/types/uri.rb
|
130
132
|
- lib/spira/types.rb
|
131
133
|
- lib/spira/version.rb
|
132
134
|
- lib/spira.rb
|
133
|
-
has_rdoc:
|
135
|
+
has_rdoc: yard
|
134
136
|
homepage: http://spira.rubyforge.org
|
135
137
|
licenses:
|
136
138
|
- Public Domain
|