spira 0.0.3 → 0.0.4
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/CHANGES.md +8 -1
- data/README +19 -3
- data/VERSION +1 -1
- data/lib/spira.rb +1 -0
- data/lib/spira/base.rb +11 -0
- data/lib/spira/resource/class_methods.rb +2 -2
- data/lib/spira/resource/instance_methods.rb +8 -6
- data/lib/spira/types.rb +1 -0
- data/lib/spira/types/decimal.rb +29 -0
- data/lib/spira/version.rb +1 -1
- metadata +13 -11
data/CHANGES.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# Changelog for Spira <http://github.com/datagraph/spira>
|
2
|
-
|
2
|
+
|
3
3
|
## untagged
|
4
|
+
* Small updates for RDF.rb 0.2.0 compatibility
|
5
|
+
* Add a Spira::Base class that can be inherited from for users who prefer to
|
6
|
+
inherit rather than include.
|
7
|
+
* Resource#new returns to the public API as a way to create a resource with a
|
8
|
+
new blank node subject.
|
9
|
+
|
10
|
+
## 0.0.3
|
4
11
|
* Bumped promise dependency to 0.1.1 to fix a Ruby 1.9 warning
|
5
12
|
* Rework error handling when a repository is not configured; this should
|
6
13
|
always now raise a Spira::NoRepositoryError regardless of what operation
|
data/README
CHANGED
@@ -94,9 +94,12 @@ Then use your model classes, in a way more or less similar to any number of ORMs
|
|
94
94
|
hits = CD.for 'queens-greatest-hits'
|
95
95
|
hits.artist == artist == queen
|
96
96
|
|
97
|
-
###
|
97
|
+
### URIs and Blank Nodes
|
98
98
|
|
99
|
-
|
99
|
+
Spira instances have a subject, which is either a URI or a blank node.
|
100
|
+
|
101
|
+
A class with a base URI can instantiate with a string (or anything, via to_s),
|
102
|
+
and it will have a URI representation:
|
100
103
|
|
101
104
|
Artist.for('queen')
|
102
105
|
|
@@ -108,12 +111,25 @@ can always access classes with a full URI:
|
|
108
111
|
If you have a URI that you would like to look at as a Spira resource, you can instantiate it from the URI:
|
109
112
|
|
110
113
|
RDF::URI.new('http://example.org/my-hidden-cds/new-kids').as(Artist)
|
111
|
-
# => <Artist @
|
114
|
+
# => <Artist @subject=http://example.org/my-hidden-cds/new-kids>
|
112
115
|
|
113
116
|
Any call to 'for' with a valid identifier will always return an object with nil
|
114
117
|
fields. It's a way of looking at a given resource, not a closed-world mapping
|
115
118
|
to one.
|
116
119
|
|
120
|
+
You can use also use blank nodes more or less as you would a URI:
|
121
|
+
|
122
|
+
remix_artist = Artist.for(RDF::Node.new)
|
123
|
+
# => <Artist @subject=#<RDF::Node:0xd1d314(_:g13751060)>>
|
124
|
+
RDF::Node.new.as(Artist)
|
125
|
+
# => <Artist @subject=#<RDF::Node:0xd1d314(_:g13751040)>>
|
126
|
+
|
127
|
+
Finally, you can create an instance of a Spira projection with #new, and you'll
|
128
|
+
get an instance with a shiny new blank node subject:
|
129
|
+
|
130
|
+
formerly_known_as_prince = Artist.new
|
131
|
+
# => <Artist @subject=#<RDF::Node:0xd1d314(_:g13747140)>>
|
132
|
+
|
117
133
|
### Class Options
|
118
134
|
|
119
135
|
A number of options are available for Spira classes.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/lib/spira.rb
CHANGED
data/lib/spira/base.rb
ADDED
@@ -67,8 +67,8 @@ module Spira
|
|
67
67
|
if !self.type.nil? && attributes[:type]
|
68
68
|
raise TypeError, "#{self} has an RDF type, #{self.type}, and cannot accept one as an argument."
|
69
69
|
end
|
70
|
-
|
71
|
-
self.new(
|
70
|
+
subject = id_for(identifier)
|
71
|
+
self.new(attributes.merge(:_subject => subject))
|
72
72
|
end
|
73
73
|
|
74
74
|
##
|
@@ -20,15 +20,17 @@ module Spira
|
|
20
20
|
attr_reader :subject
|
21
21
|
|
22
22
|
##
|
23
|
-
# Initialize a new Spira::Resource instance of this resource class
|
24
|
-
#
|
23
|
+
# Initialize a new Spira::Resource instance of this resource class using
|
24
|
+
# a new blank node subject. Accepts a hash of arguments for initial
|
25
|
+
# attributes. To use a URI or existing blank node as a subject, use
|
25
26
|
# {Spira::Resource::ClassMethods#for} instead.
|
26
27
|
#
|
27
|
-
# @param [RDF::URI, RDF::Node] identifier The URI or URI fragment for this instance
|
28
28
|
# @param [Hash] opts Default attributes for this instance
|
29
29
|
# @see Spira::Resource::ClassMethods#for
|
30
|
-
|
31
|
-
|
30
|
+
# @see RDF::URI#as
|
31
|
+
# @see RDF::Node#as
|
32
|
+
def initialize(opts = {})
|
33
|
+
@subject = opts[:_subject] || RDF::Node.new
|
32
34
|
reload(opts)
|
33
35
|
end
|
34
36
|
|
@@ -184,7 +186,7 @@ module Spira
|
|
184
186
|
#
|
185
187
|
# @private
|
186
188
|
def inspect
|
187
|
-
"<#{self.class}:#{self.object_id}
|
189
|
+
"<#{self.class}:#{self.object_id} @subject: #{@subject}>"
|
188
190
|
end
|
189
191
|
|
190
192
|
##
|
data/lib/spira/types.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Spira::Types
|
2
|
+
|
3
|
+
##
|
4
|
+
# A {Spira::Type} for integer values. Values will be associated with the
|
5
|
+
# `XSD.integer` type.
|
6
|
+
#
|
7
|
+
# A {Spira::Resource} property can reference this type as
|
8
|
+
# `Spira::Types::Integer`, `Integer`, or `XSD.integer`.
|
9
|
+
#
|
10
|
+
# @see Spira::Type
|
11
|
+
# @see http://rdf.rubyforge.org/RDF/Literal.html
|
12
|
+
class Decimal
|
13
|
+
include Spira::Type
|
14
|
+
|
15
|
+
def self.unserialize(value)
|
16
|
+
require 'bigdecimal' unless defined?(BigDecimal)
|
17
|
+
object = value.object
|
18
|
+
object.is_a?(BigDecimal) ? object : BigDecimal.new(object.to_s)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.serialize(value)
|
22
|
+
require 'bigdecimal' unless defined?(BigDecimal)
|
23
|
+
RDF::Literal.new(value, :datatype => XSD.decimal)
|
24
|
+
end
|
25
|
+
|
26
|
+
register_alias XSD.decimal
|
27
|
+
|
28
|
+
end
|
29
|
+
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
|
+
- 4
|
9
|
+
version: 0.0.4
|
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-06-
|
18
|
+
date: 2010-06-21 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -23,13 +23,13 @@ dependencies:
|
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
segments:
|
29
29
|
- 0
|
30
|
-
-
|
31
|
-
-
|
32
|
-
version: 0.
|
30
|
+
- 2
|
31
|
+
- 0
|
32
|
+
version: 0.2.0
|
33
33
|
type: :development
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
@@ -65,13 +65,13 @@ dependencies:
|
|
65
65
|
prerelease: false
|
66
66
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- -
|
68
|
+
- - ~>
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
segments:
|
71
71
|
- 0
|
72
|
-
-
|
73
|
-
-
|
74
|
-
version: 0.
|
72
|
+
- 2
|
73
|
+
- 0
|
74
|
+
version: 0.2.0
|
75
75
|
type: :runtime
|
76
76
|
version_requirements: *id004
|
77
77
|
- !ruby/object:Gem::Dependency
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- README
|
117
117
|
- UNLICENSE
|
118
118
|
- VERSION
|
119
|
+
- lib/spira/base.rb
|
119
120
|
- lib/spira/errors.rb
|
120
121
|
- lib/spira/exceptions.rb
|
121
122
|
- lib/spira/resource/class_methods.rb
|
@@ -126,6 +127,7 @@ files:
|
|
126
127
|
- lib/spira/type.rb
|
127
128
|
- lib/spira/types/any.rb
|
128
129
|
- lib/spira/types/boolean.rb
|
130
|
+
- lib/spira/types/decimal.rb
|
129
131
|
- lib/spira/types/float.rb
|
130
132
|
- lib/spira/types/integer.rb
|
131
133
|
- lib/spira/types/string.rb
|