rdf-aggregate-repo 1.1.0.1 → 1.99.0
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/rdf/aggregate_repo.rb +30 -57
- data/lib/rdf/aggregate_repo/merge_graph.rb +20 -31
- metadata +5 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a4dd65e6ddcb82e9abbe6477d60a823ba6a443b
|
4
|
+
data.tar.gz: ee446e02cb255fef1405b856ce582a79b7906ca1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76ea80547ca6e67842191f92a940eb47d4300184ce30a775ae10f05c90b45f75e2631ecc01606491e57a4ea5295d7c7603c4234684e76d8c38e14c81d66edad1
|
7
|
+
data.tar.gz: 721aac81e2d62d5fe0f15121f170bb1b31ed5a740039e159dbf7fbd413dcfa19d781d3889a98fc01b2751705121e753a778b1fe340f570a1ab74f52e70a246a8
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.99.0
|
data/lib/rdf/aggregate_repo.rb
CHANGED
@@ -62,7 +62,7 @@ module RDF
|
|
62
62
|
|
63
63
|
@sources = queryable
|
64
64
|
@defaults = []
|
65
|
-
@
|
65
|
+
@named_graphs = []
|
66
66
|
|
67
67
|
if block_given?
|
68
68
|
case block.arity
|
@@ -100,14 +100,14 @@ module RDF
|
|
100
100
|
|
101
101
|
##
|
102
102
|
# Add a named graph projection. Dynamically binds to the
|
103
|
-
# last `queryable` having a matching
|
103
|
+
# last `queryable` having a matching graph.
|
104
104
|
#
|
105
105
|
# @param [RDF::Resource] name
|
106
106
|
# @return [RDF::AggregateRepo] self
|
107
107
|
def named(name)
|
108
108
|
raise ArgumentError, "name must be an RDF::Resource: #{name.inspect}" unless name.is_a?(RDF::Resource)
|
109
|
-
raise ArgumentError, "name does not exist in loaded sources" unless sources.any?{|s| s.
|
110
|
-
@
|
109
|
+
raise ArgumentError, "name does not exist in loaded sources" unless sources.any?{|s| s.has_graph?(name)}
|
110
|
+
@named_graphs << name
|
111
111
|
end
|
112
112
|
|
113
113
|
# Repository overrides
|
@@ -196,43 +196,16 @@ module RDF
|
|
196
196
|
end
|
197
197
|
|
198
198
|
##
|
199
|
-
# Returns `true` if any constituent grahp contains the given RDF
|
199
|
+
# Returns `true` if any constituent grahp contains the given RDF graph.
|
200
200
|
#
|
201
201
|
# @param [RDF::Resource, false] value
|
202
|
-
# Use value `false` to query for the default
|
202
|
+
# Use value `false` to query for the default graph
|
203
203
|
# @return [Boolean]
|
204
|
-
# @see RDF::Enumerable#
|
205
|
-
def
|
206
|
-
@
|
204
|
+
# @see RDF::Enumerable#has_graph?
|
205
|
+
def has_graph?(value)
|
206
|
+
@named_graphs.include?(value)
|
207
207
|
end
|
208
208
|
|
209
|
-
##
|
210
|
-
# Iterates the given block for each unique RDF context, other than the default context.
|
211
|
-
#
|
212
|
-
# If no block was given, returns an enumerator.
|
213
|
-
#
|
214
|
-
# The order in which values are yielded is undefined.
|
215
|
-
#
|
216
|
-
# @overload each_context
|
217
|
-
# @yield [context]
|
218
|
-
# each context term
|
219
|
-
# @yieldparam [RDF::Resource] context
|
220
|
-
# @yieldreturn [void] ignored
|
221
|
-
# @return [void]
|
222
|
-
#
|
223
|
-
# @overload each_context
|
224
|
-
# @return [Enumerator]
|
225
|
-
#
|
226
|
-
# @return [void]
|
227
|
-
# @see RDF::Enumerable#each_context
|
228
|
-
def each_context(&block)
|
229
|
-
if block_given?
|
230
|
-
@contexts.each(&block)
|
231
|
-
end
|
232
|
-
enum_context
|
233
|
-
end
|
234
|
-
|
235
|
-
|
236
209
|
##
|
237
210
|
# Iterate over each graph, in order, finding named graphs from the most recently added `source`.
|
238
211
|
#
|
@@ -248,18 +221,17 @@ module RDF
|
|
248
221
|
# @return [void]
|
249
222
|
#
|
250
223
|
# @overload each_graph
|
251
|
-
# @return [Enumerator]
|
224
|
+
# @return [Enumerator<RDF::Graph>]
|
252
225
|
#
|
253
|
-
# @return [void]
|
254
226
|
# @see RDF::Enumerable#each_graph
|
255
227
|
def each_graph(&block)
|
256
228
|
if block_given?
|
257
|
-
|
229
|
+
yield default_graph
|
258
230
|
|
259
|
-
# Send
|
260
|
-
|
261
|
-
source = sources.reverse.detect {|s| s.
|
262
|
-
block.call(RDF::Graph.new(
|
231
|
+
# Send graph from appropriate source
|
232
|
+
@named_graphs.each do |graph_name|
|
233
|
+
source = sources.reverse.detect {|s| s.has_graph?(graph_name)}
|
234
|
+
block.call(RDF::Graph.new(graph_name, data: source))
|
263
235
|
end
|
264
236
|
end
|
265
237
|
enum_graph
|
@@ -277,20 +249,21 @@ module RDF
|
|
277
249
|
case
|
278
250
|
when sources.length == 0 || defaults.length == 0
|
279
251
|
RDF::Graph.new
|
280
|
-
when defaults
|
281
|
-
|
252
|
+
when defaults == [false] && sources.length == 1
|
253
|
+
# Trivial case
|
254
|
+
RDF::Graph.new(nil, data: sources.first)
|
282
255
|
else
|
283
|
-
# Otherwise, create a MergeGraph from the set of pairs of source and
|
284
|
-
RDF::MergeGraph.new(:
|
256
|
+
# Otherwise, create a MergeGraph from the set of pairs of source and graph_name
|
257
|
+
RDF::MergeGraph.new(name: nil) do |graph|
|
285
258
|
if defaults == [false]
|
286
259
|
graph.sources.each do |s|
|
287
260
|
# Add default graph from each source
|
288
261
|
source s, false
|
289
262
|
end
|
290
263
|
else
|
291
|
-
defaults.each do |
|
264
|
+
defaults.each do |graph_name|
|
292
265
|
# add the named graph
|
293
|
-
graph.source sources.reverse.detect {|s| s.
|
266
|
+
graph.source sources.reverse.detect {|s| s.has_graph?(graph_name)}, graph_name
|
294
267
|
end
|
295
268
|
end
|
296
269
|
end
|
@@ -312,7 +285,7 @@ module RDF
|
|
312
285
|
# @return [void] ignored
|
313
286
|
# @see RDF::Queryable#query_pattern
|
314
287
|
def query_pattern(pattern, &block)
|
315
|
-
case pattern.
|
288
|
+
case pattern.graph_name
|
316
289
|
when nil
|
317
290
|
# Query against all graphs
|
318
291
|
each_graph {|graph| graph.send(:query_pattern, pattern, &block)}
|
@@ -321,15 +294,15 @@ module RDF
|
|
321
294
|
default_graph.send(:query_pattern, pattern, &block)
|
322
295
|
when RDF::Query::Variable
|
323
296
|
# Query against all named graphs
|
324
|
-
|
325
|
-
source = sources.reverse.detect {|s| s.
|
326
|
-
RDF::Graph.new(
|
297
|
+
each_graph do |graph|
|
298
|
+
source = sources.reverse.detect {|s| s.has_graph?(graph.graph_name)}
|
299
|
+
RDF::Graph.new(graph.graph_name, data: source).send(:query_pattern, pattern, &block)
|
327
300
|
end
|
328
301
|
else
|
329
|
-
# Query against a specific
|
330
|
-
if @
|
331
|
-
source = sources.reverse.detect {|s| s.
|
332
|
-
RDF::Graph.new(pattern.
|
302
|
+
# Query against a specific graph
|
303
|
+
if @named_graphs.include?(pattern.graph_name)
|
304
|
+
source = sources.reverse.detect {|s| s.has_graph?(pattern.graph_name)}
|
305
|
+
RDF::Graph.new(pattern.graph_name, data: source).send(:query_pattern, pattern, &block)
|
333
306
|
end
|
334
307
|
end
|
335
308
|
end
|
@@ -35,21 +35,21 @@ module RDF
|
|
35
35
|
# Name of this graph, used for setting the context on returned `Statements`.
|
36
36
|
#
|
37
37
|
# @return [Array<RDF::URI, false>]
|
38
|
-
attr_reader :
|
38
|
+
attr_reader :graph_name
|
39
39
|
|
40
40
|
##
|
41
41
|
# Create a new aggregation instance.
|
42
42
|
#
|
43
43
|
# @overload initialize(queryable = [], options = {})
|
44
44
|
# @param [Hash{Symbol => Object}] options ({})
|
45
|
-
# @option options [RDF::Resource] :
|
46
|
-
# @option options [RDF::Resource] :name alias for :
|
45
|
+
# @option options [RDF::Resource] :graph_name
|
46
|
+
# @option options [RDF::Resource] :name alias for :graph_name
|
47
47
|
# @yield merger
|
48
48
|
# @yieldparam [RDF::MergeGraph] self
|
49
49
|
# @yieldreturn [void] ignored
|
50
50
|
def initialize(options = {}, &block)
|
51
51
|
@sources = []
|
52
|
-
@
|
52
|
+
@graph_name = options[:graph_name] || options[:name]
|
53
53
|
|
54
54
|
if block_given?
|
55
55
|
case block.arity
|
@@ -83,7 +83,7 @@ module RDF
|
|
83
83
|
# @return [Boolean]
|
84
84
|
# @note The next release, graphs will not be named, this will return true
|
85
85
|
def unnamed?
|
86
|
-
@
|
86
|
+
@graph_name.nil?
|
87
87
|
end
|
88
88
|
|
89
89
|
##
|
@@ -98,21 +98,21 @@ module RDF
|
|
98
98
|
# Add a queryable to the set of constituent queryable instances
|
99
99
|
#
|
100
100
|
# @param [RDF::Queryable] queryable
|
101
|
-
# @param [RDF::Resource]
|
101
|
+
# @param [RDF::Resource] graph_name
|
102
102
|
# @return [RDF::MergeGraph] self
|
103
|
-
def source(queryable,
|
104
|
-
@sources << [queryable,
|
103
|
+
def source(queryable, graph_name)
|
104
|
+
@sources << [queryable, graph_name]
|
105
105
|
self
|
106
106
|
end
|
107
107
|
alias_method :add, :source
|
108
108
|
|
109
109
|
##
|
110
|
-
# Set the
|
110
|
+
# Set the graph_name for statements in this graph
|
111
111
|
#
|
112
112
|
# @param [RDF::Resource, false] name
|
113
113
|
# @return [RDF::MergeGraph] self
|
114
114
|
def name(name)
|
115
|
-
@
|
115
|
+
@graph_name = name
|
116
116
|
self
|
117
117
|
end
|
118
118
|
|
@@ -145,7 +145,7 @@ module RDF
|
|
145
145
|
def has_statement?(statement)
|
146
146
|
sources.any? do |(source, ctx)|
|
147
147
|
statement = statement.dup
|
148
|
-
statement.
|
148
|
+
statement.graph_name = ctx
|
149
149
|
source.has_statement?(statement)
|
150
150
|
end
|
151
151
|
end
|
@@ -156,38 +156,27 @@ module RDF
|
|
156
156
|
return enum_for(:each) unless block_given?
|
157
157
|
|
158
158
|
# Add everything to a new graph for de-duplication
|
159
|
-
tmp = RDF::Graph.new(@
|
160
|
-
sources.each do |(source,
|
161
|
-
tmp << RDF::Graph.new(
|
159
|
+
tmp = RDF::Graph.new(@graph_name, data: RDF::Repository.new)
|
160
|
+
sources.each do |(source, gn)|
|
161
|
+
tmp << RDF::Graph.new(gn || nil, data: source)
|
162
162
|
end
|
163
163
|
tmp.each(&block)
|
164
164
|
end
|
165
165
|
|
166
166
|
##
|
167
167
|
# @private
|
168
|
-
# @see RDF::Enumerable#
|
169
|
-
def
|
170
|
-
@
|
168
|
+
# @see RDF::Enumerable#has_graph?
|
169
|
+
def has_graph?(value)
|
170
|
+
@graph_name == value
|
171
171
|
end
|
172
172
|
|
173
|
-
##
|
174
|
-
# @private
|
175
|
-
# @see RDF::Enumerable#each_context
|
176
|
-
def each_context(&block)
|
177
|
-
if block_given?
|
178
|
-
block.call(context) if context
|
179
|
-
end
|
180
|
-
enum_context
|
181
|
-
end
|
182
|
-
|
183
|
-
|
184
173
|
##
|
185
174
|
# Iterate over each graph, in order, finding named graphs from the most recently added `source`.
|
186
175
|
#
|
187
176
|
# @see RDF::Enumerable#each_graph
|
188
177
|
def each_graph(&block)
|
189
178
|
if block_given?
|
190
|
-
|
179
|
+
yield self
|
191
180
|
end
|
192
181
|
enum_graph
|
193
182
|
end
|
@@ -199,8 +188,8 @@ module RDF
|
|
199
188
|
# @see RDF::Queryable#query_pattern
|
200
189
|
def query_pattern(pattern, &block)
|
201
190
|
pattern = pattern.dup
|
202
|
-
sources.each do |(source,
|
203
|
-
pattern.
|
191
|
+
sources.each do |(source, gn)|
|
192
|
+
pattern.graph_name = gn
|
204
193
|
source.send(:query_pattern, pattern, &block)
|
205
194
|
end
|
206
195
|
end
|
metadata
CHANGED
@@ -1,23 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-aggregate-repo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.99.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdf
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.1'
|
20
|
-
- - "<"
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: '1.99'
|
23
20
|
type: :runtime
|
@@ -25,9 +22,6 @@ dependencies:
|
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.1'
|
30
|
-
- - "<"
|
31
25
|
- !ruby/object:Gem::Version
|
32
26
|
version: '1.99'
|
33
27
|
- !ruby/object:Gem::Dependency
|
@@ -35,9 +29,6 @@ dependencies:
|
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
31
|
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '1.1'
|
40
|
-
- - "<"
|
41
32
|
- !ruby/object:Gem::Version
|
42
33
|
version: '1.99'
|
43
34
|
type: :development
|
@@ -45,9 +36,6 @@ dependencies:
|
|
45
36
|
version_requirements: !ruby/object:Gem::Requirement
|
46
37
|
requirements:
|
47
38
|
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '1.1'
|
50
|
-
- - "<"
|
51
39
|
- !ruby/object:Gem::Version
|
52
40
|
version: '1.99'
|
53
41
|
- !ruby/object:Gem::Dependency
|
@@ -55,9 +43,6 @@ dependencies:
|
|
55
43
|
requirement: !ruby/object:Gem::Requirement
|
56
44
|
requirements:
|
57
45
|
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '1.1'
|
60
|
-
- - "<"
|
61
46
|
- !ruby/object:Gem::Version
|
62
47
|
version: '1.99'
|
63
48
|
type: :development
|
@@ -65,9 +50,6 @@ dependencies:
|
|
65
50
|
version_requirements: !ruby/object:Gem::Requirement
|
66
51
|
requirements:
|
67
52
|
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '1.1'
|
70
|
-
- - "<"
|
71
53
|
- !ruby/object:Gem::Version
|
72
54
|
version: '1.99'
|
73
55
|
- !ruby/object:Gem::Dependency
|
@@ -76,14 +58,14 @@ dependencies:
|
|
76
58
|
requirements:
|
77
59
|
- - "~>"
|
78
60
|
- !ruby/object:Gem::Version
|
79
|
-
version: '3.
|
61
|
+
version: '3.2'
|
80
62
|
type: :development
|
81
63
|
prerelease: false
|
82
64
|
version_requirements: !ruby/object:Gem::Requirement
|
83
65
|
requirements:
|
84
66
|
- - "~>"
|
85
67
|
- !ruby/object:Gem::Version
|
86
|
-
version: '3.
|
68
|
+
version: '3.2'
|
87
69
|
- !ruby/object:Gem::Dependency
|
88
70
|
name: rspec-its
|
89
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
138
120
|
requirements:
|
139
121
|
- - ">="
|
140
122
|
- !ruby/object:Gem::Version
|
141
|
-
version: 1.9.
|
123
|
+
version: 1.9.3
|
142
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
125
|
requirements:
|
144
126
|
- - ">="
|