tripod 0.2 → 0.2.1

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.
@@ -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