tripod 0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,81 @@
4
4
  module Tripod::Finders
5
5
  extend ActiveSupport::Concern
6
6
 
7
+ # FOLLOWING METHODS NOT PART OF THE PUBLIC API:
8
+ ## private methods
9
+ def self.included(base)
10
+
11
+ class << base
12
+
13
+ private
14
+
15
+ def select_uris_and_graphs(criteria, opts)
16
+ select_results = Tripod::SparqlClient::Query.select(criteria)
17
+
18
+ # data will contain a map of uris against graphs.
19
+ data = {}
20
+
21
+ select_results.each do |r|
22
+ uri_variable = opts[:uri_variable] || 'uri'
23
+ graph_variable = opts[:graph_variable] || 'graph'
24
+ data[ r[uri_variable]["value"] ] = r[graph_variable]["value"]
25
+ end
26
+
27
+ data
28
+ end
29
+
30
+ def create_and_hydrate_resources(uris_and_graphs, opts={})
31
+
32
+ triples_repository = create_resources(uris_and_graphs)
33
+ resources = hydrate_resources(uris_and_graphs, triples_repository, opts)
34
+
35
+ end
36
+
37
+ def create_resources(uris_and_graphs)
38
+
39
+ triples_repository = RDF::Repository.new()
40
+
41
+ if uris_and_graphs.keys.length > 0
42
+ uris_sparql_str = uris_and_graphs.keys.map{ |u| "<#{u}>" }.join(" ")
43
+
44
+ # Do a big describe statement, and read the results into an in-memory repo
45
+ triples = Tripod::SparqlClient::Query::describe("DESCRIBE #{uris_sparql_str}")
46
+ RDF::Reader.for(:ntriples).new(triples) do |reader|
47
+ reader.each_statement do |statement|
48
+ triples_repository << statement
49
+ end
50
+ end
51
+ end
52
+
53
+ triples_repository
54
+ end
55
+
56
+ def hydrate_resources(uris_and_graphs, triples_repository, opts={})
57
+
58
+ resources =[]
59
+
60
+ uris_and_graphs.each_pair do |u,g|
61
+ r = self.new(u,g)
62
+ data_graph = RDF::Graph.new
63
+ triples_repository.query( [RDF::URI.new(u), :predicate, :object] ) do |statement|
64
+ data_graph << statement
65
+ end
66
+
67
+ hydrate_opts = {:graph => data_graph}
68
+ hydrate_opts[:only] = opts[:only_hydrate]
69
+
70
+ r.hydrate!(:graph => data_graph)
71
+ r.new_record = false
72
+ resources << r
73
+ end
74
+
75
+ resources
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+
7
82
  module ClassMethods
8
83
 
9
84
  # Find a +Resource+ by its uri (and, optionally, by its graph if there are more than one).
@@ -59,51 +134,13 @@ module Tripod::Finders
59
134
  #
60
135
  # @option options [ String ] uri_variable The name of the uri variable in thh query, if not 'uri'
61
136
  # @option options [ String ] graph_variable The name of the uri variable in thh query, if not 'graph'
137
+ # @option options [ String, RDF:URI, Array] only_hydrate a single predicate or list of predicates to hydrate the returned objects with. If ommited, does a full hydrate
62
138
  #
63
139
  # @return [ Array ] An array of hydrated resources of this class's type.
64
140
  def where(criteria, opts={})
65
-
66
- # 1. Run the select.
67
- select_results = Tripod::SparqlClient::Query.select(criteria)
68
-
69
- # data will contain a map of uris against graphs.
70
- data = {}
71
-
72
- select_results.each do |r|
73
- uri_variable = opts[:uri_variable] || 'uri'
74
- graph_variable = opts[:graph_variable] || 'graph'
75
- data[ r[uri_variable]["value"] ] = r[graph_variable]["value"]
76
- end
77
-
78
- resources = []
79
-
80
- if data.keys.length > 0
81
-
82
- uris_sparql_str = data.keys.map{ |u| "<#{u}>" }.join(" ")
83
-
84
- # 2. Do a big describe statement, and read the results into an in-memory repo
85
- triples = Tripod::SparqlClient::Query::describe("DESCRIBE #{uris_sparql_str}")
86
- triples_repository = RDF::Repository.new()
87
- RDF::Reader.for(:ntriples).new(triples) do |reader|
88
- reader.each_statement do |statement|
89
- triples_repository << statement
90
- end
91
- end
92
-
93
- # 3. for each of our uris, make a resource, with a graph of triples for that uri from the in-mem repo
94
- data.each_pair do |u,g|
95
- r = self.new(u,g)
96
- data_graph = RDF::Graph.new
97
- triples_repository.query( [RDF::URI.new(u), :predicate, :object] ) do |statement|
98
- data_graph << statement
99
- end
100
- r.hydrate!(:graph => data_graph)
101
- r.new_record = false
102
- resources << r
103
- end
104
- end
105
- resources
106
-
141
+ uris_and_graphs = select_uris_and_graphs(criteria, opts)
142
+ create_and_hydrate_resources(uris_and_graphs, opts)
107
143
  end
144
+
108
145
  end
109
146
  end
@@ -1,3 +1,3 @@
1
1
  module Tripod
2
- VERSION = "0.2"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -2,7 +2,7 @@
2
2
  require File.expand_path('../lib/tripod/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["RicSwirrl"]
5
+ gem.authors = ["Ric Roberts", "Bill Roberts", "Asa Calow"]
6
6
  gem.email = ["ric@swirrl.com"]
7
7
  gem.description = %q{RDF ruby ORM}
8
8
  gem.summary = %q{Active Model style RDF ORM}
metadata CHANGED
@@ -1,11 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tripod
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - RicSwirrl
8
+ - Ric Roberts
9
+ - Bill Roberts
10
+ - Asa Calow
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain: []
@@ -13,7 +15,7 @@ date: 2013-02-05 00:00:00.000000000 Z
13
15
  dependencies:
14
16
  - !ruby/object:Gem::Dependency
15
17
  name: rest-client
16
- requirement: &70356011065320 !ruby/object:Gem::Requirement
18
+ requirement: &70338965901200 !ruby/object:Gem::Requirement
17
19
  none: false
18
20
  requirements:
19
21
  - - ! '>='
@@ -21,10 +23,10 @@ dependencies:
21
23
  version: '0'
22
24
  type: :runtime
23
25
  prerelease: false
24
- version_requirements: *70356011065320
26
+ version_requirements: *70338965901200
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: activemodel
27
- requirement: &70356011064380 !ruby/object:Gem::Requirement
29
+ requirement: &70338965900320 !ruby/object:Gem::Requirement
28
30
  none: false
29
31
  requirements:
30
32
  - - ~>
@@ -32,10 +34,10 @@ dependencies:
32
34
  version: '3.1'
33
35
  type: :runtime
34
36
  prerelease: false
35
- version_requirements: *70356011064380
37
+ version_requirements: *70338965900320
36
38
  - !ruby/object:Gem::Dependency
37
39
  name: equivalent-xml
38
- requirement: &70356011063560 !ruby/object:Gem::Requirement
40
+ requirement: &70338965915940 !ruby/object:Gem::Requirement
39
41
  none: false
40
42
  requirements:
41
43
  - - ! '>='
@@ -43,10 +45,10 @@ dependencies:
43
45
  version: '0'
44
46
  type: :runtime
45
47
  prerelease: false
46
- version_requirements: *70356011063560
48
+ version_requirements: *70338965915940
47
49
  - !ruby/object:Gem::Dependency
48
50
  name: rdf
49
- requirement: &70356011079140 !ruby/object:Gem::Requirement
51
+ requirement: &70338965914940 !ruby/object:Gem::Requirement
50
52
  none: false
51
53
  requirements:
52
54
  - - ~>
@@ -54,10 +56,10 @@ dependencies:
54
56
  version: '1.0'
55
57
  type: :runtime
56
58
  prerelease: false
57
- version_requirements: *70356011079140
59
+ version_requirements: *70338965914940
58
60
  - !ruby/object:Gem::Dependency
59
61
  name: rdf-rdfxml
60
- requirement: &70356011078020 !ruby/object:Gem::Requirement
62
+ requirement: &70338965913560 !ruby/object:Gem::Requirement
61
63
  none: false
62
64
  requirements:
63
65
  - - ! '>='
@@ -65,10 +67,10 @@ dependencies:
65
67
  version: '0'
66
68
  type: :runtime
67
69
  prerelease: false
68
- version_requirements: *70356011078020
70
+ version_requirements: *70338965913560
69
71
  - !ruby/object:Gem::Dependency
70
72
  name: rdf-n3
71
- requirement: &70356011076860 !ruby/object:Gem::Requirement
73
+ requirement: &70338965912940 !ruby/object:Gem::Requirement
72
74
  none: false
73
75
  requirements:
74
76
  - - ! '>='
@@ -76,10 +78,10 @@ dependencies:
76
78
  version: '0'
77
79
  type: :runtime
78
80
  prerelease: false
79
- version_requirements: *70356011076860
81
+ version_requirements: *70338965912940
80
82
  - !ruby/object:Gem::Dependency
81
83
  name: rdf-json
82
- requirement: &70356011076360 !ruby/object:Gem::Requirement
84
+ requirement: &70338965912360 !ruby/object:Gem::Requirement
83
85
  none: false
84
86
  requirements:
85
87
  - - ! '>='
@@ -87,10 +89,10 @@ dependencies:
87
89
  version: '0'
88
90
  type: :runtime
89
91
  prerelease: false
90
- version_requirements: *70356011076360
92
+ version_requirements: *70338965912360
91
93
  - !ruby/object:Gem::Dependency
92
94
  name: json-ld
93
- requirement: &70356011075640 !ruby/object:Gem::Requirement
95
+ requirement: &70338965911540 !ruby/object:Gem::Requirement
94
96
  none: false
95
97
  requirements:
96
98
  - - ! '>='
@@ -98,10 +100,10 @@ dependencies:
98
100
  version: '0'
99
101
  type: :runtime
100
102
  prerelease: false
101
- version_requirements: *70356011075640
103
+ version_requirements: *70338965911540
102
104
  - !ruby/object:Gem::Dependency
103
105
  name: guid
104
- requirement: &70356011074860 !ruby/object:Gem::Requirement
106
+ requirement: &70338965910800 !ruby/object:Gem::Requirement
105
107
  none: false
106
108
  requirements:
107
109
  - - ! '>='
@@ -109,7 +111,7 @@ dependencies:
109
111
  version: '0'
110
112
  type: :runtime
111
113
  prerelease: false
112
- version_requirements: *70356011074860
114
+ version_requirements: *70338965910800
113
115
  description: RDF ruby ORM
114
116
  email:
115
117
  - ric@swirrl.com