tripod 0.7.4 → 0.7.5
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/lib/tripod/eager_loading.rb +20 -9
- data/lib/tripod/finders.rb +6 -0
- data/lib/tripod/resource_collection.rb +4 -0
- data/lib/tripod/serialization.rb +4 -1
- data/lib/tripod/version.rb +1 -1
- data/spec/tripod/eager_loading_spec.rb +40 -13
- metadata +22 -22
data/lib/tripod/eager_loading.rb
CHANGED
@@ -10,23 +10,33 @@ module Tripod::EagerLoading
|
|
10
10
|
|
11
11
|
# get all the triples in the db where the predicate uri is their subject
|
12
12
|
# stick the results in this resource's repo
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
# options: labels_only (default false)
|
14
|
+
def eager_load_predicate_triples!(opts={})
|
15
|
+
|
16
|
+
if opts[:labels_only]
|
17
|
+
construct_query = "CONSTRUCT { ?p <#{RDF::RDFS.label}> ?pred_label } WHERE { <#{self.uri.to_s}> ?p ?o . ?p <#{RDF::RDFS.label}> ?pred_label }"
|
18
|
+
else
|
19
|
+
construct_query = "CONSTRUCT { ?p ?pred_pred ?pred_label } WHERE { <#{self.uri.to_s}> ?p ?o . ?p ?pred_pred ?pred_label }"
|
20
|
+
end
|
21
|
+
|
22
|
+
extra_triples = self.class._graph_of_triples_from_construct_or_describe construct_query
|
23
|
+
self.class.add_data_to_repository(extra_triples, self.repository)
|
16
24
|
end
|
17
25
|
|
18
26
|
# get all the triples in the db where the object uri is their subject
|
19
27
|
# stick the results in this resource's repo
|
20
|
-
|
28
|
+
# options: labels_only (default false)
|
29
|
+
def eager_load_object_triples!(opts={})
|
21
30
|
object_uris = []
|
22
31
|
|
23
|
-
|
24
|
-
|
32
|
+
if opts[:labels_only]
|
33
|
+
construct_query = "CONSTRUCT { ?o <#{RDF::RDFS.label}> ?obj_label } WHERE { <#{self.uri.to_s}> ?p ?o . ?o <#{RDF::RDFS.label}> ?obj_label }"
|
34
|
+
else
|
35
|
+
construct_query = "CONSTRUCT { ?o ?obj_pred ?obj_label } WHERE { <#{self.uri.to_s}> ?p ?o . ?o ?obj_pred ?obj_label }"
|
25
36
|
end
|
26
37
|
|
27
|
-
|
28
|
-
|
29
|
-
self.class.add_data_to_repository(graph_of_triples, self.repository)
|
38
|
+
extra_triples = self.class._graph_of_triples_from_construct_or_describe construct_query
|
39
|
+
self.class.add_data_to_repository(extra_triples, self.repository)
|
30
40
|
end
|
31
41
|
|
32
42
|
# get the resource that represents a particular uri. If there's triples in our repo where that uri
|
@@ -50,4 +60,5 @@ module Tripod::EagerLoading
|
|
50
60
|
r
|
51
61
|
end
|
52
62
|
|
63
|
+
|
53
64
|
end
|
data/lib/tripod/finders.rb
CHANGED
@@ -132,6 +132,12 @@ module Tripod::Finders
|
|
132
132
|
graph
|
133
133
|
end
|
134
134
|
|
135
|
+
# given a construct or describe query, return a graph of triples.
|
136
|
+
def _graph_of_triples_from_construct_or_describe(construct_query)
|
137
|
+
ntriples_str = Tripod::SparqlClient::Query.query(construct_query, "application/n-triples")
|
138
|
+
_rdf_graph_from_ntriples_string(ntriples_str, graph=nil)
|
139
|
+
end
|
140
|
+
|
135
141
|
# Given a select query, perform a DESCRIBE query to get a graph of data from which we
|
136
142
|
# create and hydrate a collection of resources.
|
137
143
|
#
|
data/lib/tripod/serialization.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
# This module defines behaviour for finders.
|
4
3
|
module Tripod::Serialization
|
5
4
|
extend ActiveSupport::Concern
|
6
5
|
|
@@ -24,4 +23,8 @@ module Tripod::Serialization
|
|
24
23
|
get_triples_for_this_resource.dump(:jsonld)
|
25
24
|
end
|
26
25
|
|
26
|
+
def to_text
|
27
|
+
to_nt
|
28
|
+
end
|
29
|
+
|
27
30
|
end
|
data/lib/tripod/version.rb
CHANGED
@@ -6,10 +6,12 @@ describe Tripod::EagerLoading do
|
|
6
6
|
|
7
7
|
@name = Resource.new('http://example.com/name', 'http://example.com/names')
|
8
8
|
@name.label = "Name"
|
9
|
+
@name.write_predicate('http://example.com/name-other-pred', 'hello') # another predicate
|
9
10
|
@name.save!
|
10
11
|
|
11
12
|
@peter = Person.new('http://example.com/peter')
|
12
13
|
@peter.name = "Peter"
|
14
|
+
@peter.age = 30
|
13
15
|
@peter.save!
|
14
16
|
|
15
17
|
@john = Person.new('http://example.com/john')
|
@@ -20,15 +22,35 @@ describe Tripod::EagerLoading do
|
|
20
22
|
|
21
23
|
describe "#eager_load_predicate_triples!" do
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
+
context "with no options passed" do
|
26
|
+
before do
|
27
|
+
@peter.eager_load_predicate_triples!
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should add triples to the repository all for the predicates' predicates" do
|
31
|
+
triples = @peter.repository.query([ RDF::URI.new('http://example.com/name'), :predicate, :object] )
|
32
|
+
triples.to_a.length.should == 2
|
33
|
+
|
34
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }.first.predicate.should == RDF::URI('http://example.com/name-other-pred')
|
35
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }.first.object.to_s.should == "hello"
|
36
|
+
|
37
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }.last.predicate.should == RDF::RDFS.label
|
38
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }.last.object.to_s.should == "Name"
|
39
|
+
end
|
25
40
|
end
|
26
41
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
42
|
+
context "with labels_only option" do
|
43
|
+
before do
|
44
|
+
@peter.eager_load_predicate_triples!(:labels_only => true)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should add triples to the repository all for the predicates labels only" do
|
48
|
+
triples = @peter.repository.query([ RDF::URI.new('http://example.com/name'), :predicate, :object] )
|
49
|
+
triples.to_a.length.should == 1
|
50
|
+
triples.first.predicate.should == RDF::RDFS.label
|
51
|
+
triples.first.object.to_s.should == "Name"
|
52
|
+
end
|
53
|
+
|
32
54
|
end
|
33
55
|
|
34
56
|
end
|
@@ -39,15 +61,19 @@ describe Tripod::EagerLoading do
|
|
39
61
|
@john.eager_load_object_triples!
|
40
62
|
end
|
41
63
|
|
42
|
-
it "should add triples to the repository for the objects" do
|
64
|
+
it "should add triples to the repository for the all the objects' predicates" do
|
43
65
|
triples = @john.repository.query([ @peter.uri, :predicate, :object] )
|
44
|
-
triples.to_a.length.
|
66
|
+
triples.to_a.length.should == 3
|
45
67
|
|
46
|
-
triples.to_a[
|
47
|
-
triples.to_a[
|
68
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }[0].predicate.should == RDF::URI('http://example.com/age')
|
69
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }[0].object.to_s.should == "30"
|
70
|
+
|
71
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }[1].predicate.should == RDF::URI('http://example.com/name')
|
72
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }[1].object.to_s.should == "Peter"
|
73
|
+
|
74
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }[2].predicate.should == RDF.type
|
75
|
+
triples.to_a.sort{|a,b| a.to_s <=> b.to_s }[2].object.to_s.should == RDF::URI('http://example.com/person')
|
48
76
|
|
49
|
-
triples.to_a[0].predicate.should == RDF::URI('http://example.com/name')
|
50
|
-
triples.to_a[0].object.to_s.should == "Peter"
|
51
77
|
end
|
52
78
|
|
53
79
|
end
|
@@ -86,6 +112,7 @@ describe Tripod::EagerLoading do
|
|
86
112
|
res = @john.get_related_resource(@peter.uri, Person)
|
87
113
|
res.should == @peter
|
88
114
|
end
|
115
|
+
|
89
116
|
end
|
90
117
|
|
91
118
|
context "when eager_load_predicate_triples has been called" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tripod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-
|
14
|
+
date: 2013-04-04 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
18
|
-
requirement: &
|
18
|
+
requirement: &70124439331920 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70124439331920
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
|
-
requirement: &
|
29
|
+
requirement: &70124439346220 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '3.2'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70124439346220
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: equivalent-xml
|
40
|
-
requirement: &
|
40
|
+
requirement: &70124439344500 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '0'
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70124439344500
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: rdf
|
51
|
-
requirement: &
|
51
|
+
requirement: &70124439343180 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: '1.0'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70124439343180
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rdf-rdfxml
|
62
|
-
requirement: &
|
62
|
+
requirement: &70124439341020 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ! '>='
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: '0'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70124439341020
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rdf-n3
|
73
|
-
requirement: &
|
73
|
+
requirement: &70124439339640 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: '0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *70124439339640
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: rdf-json
|
84
|
-
requirement: &
|
84
|
+
requirement: &70124439354600 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ! '>='
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *70124439354600
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: json-ld
|
95
|
-
requirement: &
|
95
|
+
requirement: &70124439352980 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ! '>='
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: '0'
|
101
101
|
type: :runtime
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *70124439352980
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: guid
|
106
|
-
requirement: &
|
106
|
+
requirement: &70124439352500 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ! '>='
|
@@ -111,10 +111,10 @@ dependencies:
|
|
111
111
|
version: '0'
|
112
112
|
type: :runtime
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *70124439352500
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: dalli
|
117
|
-
requirement: &
|
117
|
+
requirement: &70124439351820 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ~>
|
@@ -122,7 +122,7 @@ dependencies:
|
|
122
122
|
version: '2.6'
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *70124439351820
|
126
126
|
description: RDF ruby ORM
|
127
127
|
email:
|
128
128
|
- ric@swirrl.com
|