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.
@@ -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
- def eager_load_predicate_triples!
14
- graph_of_triples = self.class.describe_uris(predicates)
15
- self.class.add_data_to_repository(graph_of_triples, self.repository)
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
- def eager_load_object_triples!
28
+ # options: labels_only (default false)
29
+ def eager_load_object_triples!(opts={})
21
30
  object_uris = []
22
31
 
23
- self.get_triples_for_this_resource.each_statement do |statement|
24
- object_uris << statement.object if statement.object.uri?
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
- object_uris = object_uris.uniq # in case an object appears > once.
28
- graph_of_triples = self.class.describe_uris(object_uris)
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
@@ -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
  #
@@ -41,6 +41,10 @@ module Tripod
41
41
  self.to_nt == other.to_nt
42
42
  end
43
43
 
44
+ def to_text
45
+ to_nt
46
+ end
47
+
44
48
  # for n-triples we can just concatenate them
45
49
  def to_nt
46
50
  time_serialization('nt') do
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Tripod
2
- VERSION = "0.7.4"
2
+ VERSION = "0.7.5"
3
3
  end
@@ -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
- before do
24
- @peter.eager_load_predicate_triples!
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
- it "should add triples to the repository for the predicates" do
28
- triples = @peter.repository.query([ RDF::URI.new('http://example.com/name'), :predicate, :object] )
29
- triples.to_a.length.should_not == 0
30
- triples.first.predicate.should == RDF::RDFS.label
31
- triples.first.object.to_s.should == "Name"
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.should_not == 0
66
+ triples.to_a.length.should == 3
45
67
 
46
- triples.to_a[1].predicate.should == RDF.type
47
- triples.to_a[1].object.to_s.should == RDF::URI('http://example.com/person')
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
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-03-29 00:00:00.000000000 Z
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: &70112683423380 !ruby/object:Gem::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: *70112683423380
26
+ version_requirements: *70124439331920
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
- requirement: &70112683421720 !ruby/object:Gem::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: *70112683421720
37
+ version_requirements: *70124439346220
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: equivalent-xml
40
- requirement: &70112683435900 !ruby/object:Gem::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: *70112683435900
48
+ version_requirements: *70124439344500
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rdf
51
- requirement: &70112683432360 !ruby/object:Gem::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: *70112683432360
59
+ version_requirements: *70124439343180
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rdf-rdfxml
62
- requirement: &70112683445060 !ruby/object:Gem::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: *70112683445060
70
+ version_requirements: *70124439341020
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rdf-n3
73
- requirement: &70112683443980 !ruby/object:Gem::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: *70112683443980
81
+ version_requirements: *70124439339640
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: rdf-json
84
- requirement: &70112683442360 !ruby/object:Gem::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: *70112683442360
92
+ version_requirements: *70124439354600
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: json-ld
95
- requirement: &70112683440480 !ruby/object:Gem::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: *70112683440480
103
+ version_requirements: *70124439352980
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: guid
106
- requirement: &70112683438740 !ruby/object:Gem::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: *70112683438740
114
+ version_requirements: *70124439352500
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: dalli
117
- requirement: &70112683449840 !ruby/object:Gem::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: *70112683449840
125
+ version_requirements: *70124439351820
126
126
  description: RDF ruby ORM
127
127
  email:
128
128
  - ric@swirrl.com