rdf 3.1.0 → 3.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2daf8eddad46785b68f11f655491114ece3425f5af8e283ec5372f186fbf0494
4
- data.tar.gz: d84668437ad7b0c703bf0cec3a0c2cd50a25f6a81e4e1b9289b87c33b70fe18f
3
+ metadata.gz: f11909f850c5c1de088d0fd736267556ea533ec2f14e7245676e0547ff22f4d8
4
+ data.tar.gz: 4cf062a4eb81399c761e60210dbb7e87a1b778c8aa46161f6086c3819c3b9b23
5
5
  SHA512:
6
- metadata.gz: 30730b50722a1d159fdc4acc7d226253101a28475925451e0dffd599a20b837146a21202d539125aa513ded6dc7de50c290d570a273963052a4820c304a291eb
7
- data.tar.gz: 611b837819f8470547ca79cd6d948201e39c288f2e8f2da25f6c39e557abd5efa4b39b3c549d47f09bd75db53af84de3e46fc43f8ebcbc082245556c0ed06b39
6
+ metadata.gz: eb6699ee27aceb7eff73b5b15a685abb3501b1de930ed3b5612662c2303af75239d1b76b3c6a0a721bf79577bfa357acefe71084db89851d2619ede8fcfc44cc
7
+ data.tar.gz: 94c48695d2c77cb6847a88aecabed96e6b31db07e5b7d3a70f43e54afc5d6910d090e41f26fe74e5acff6733f62c3321a6185336928f64d39bf5d3924d366465
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.0
1
+ 3.1.1
@@ -31,10 +31,11 @@ module RDF
31
31
  #
32
32
  # @since 2.0.0
33
33
  class Changeset
34
- include RDF::Mutable
34
+ # include RDF::Mutable
35
+ include RDF::Util::Coercions
35
36
 
36
37
  ##
37
- # Applies a changeset to the given mutable RDF::Enumerable .
38
+ # Applies a changeset to the given {RDF::Mutable} object.
38
39
  #
39
40
  # @param [RDF::Mutable] mutable
40
41
  # @param [Hash{Symbol => Object}] options
@@ -98,6 +99,24 @@ module RDF
98
99
  false
99
100
  end
100
101
 
102
+ ##
103
+ # Returns `false` as changesets are not {RDF::Writable}.
104
+ #
105
+ # @return [Boolean]
106
+ # @see RDF::Writable#writable?
107
+ def writable?
108
+ false
109
+ end
110
+
111
+ ##
112
+ # Returns `false` as changesets are not {RDF::Mutable}.
113
+ #
114
+ # @return [Boolean]
115
+ # @see RDF::Mutable#mutable?
116
+ def mutable?
117
+ false
118
+ end
119
+
101
120
  ##
102
121
  # Applies this changeset to the given mutable RDF::Enumerable.
103
122
  #
@@ -127,35 +146,77 @@ module RDF
127
146
 
128
147
  ##
129
148
  # Outputs a developer-friendly representation of this changeset to
130
- # `stderr`.
149
+ # `$stderr`.
131
150
  #
132
151
  # @return [void]
133
152
  def inspect!
134
153
  $stderr.puts(self.inspect)
135
154
  end
136
155
 
137
- protected
138
-
139
156
  ##
140
- # Appends an RDF statement to the sequence to insert when applied.
157
+ # Returns the sum of both the `inserts` and `deletes` counts.
141
158
  #
142
- # @param [RDF::Statement] statement
143
- # @return [void]
144
- # @see RDF::Writable#insert_statement
145
- def insert_statement(statement)
146
- self.inserts << statement
159
+ # @return [Integer]
160
+ def count
161
+ inserts.count + deletes.count
147
162
  end
148
163
 
164
+ # Append statements to `inserts`. Statements _should_ be constant
165
+ # as variable statements will at best be ignored or at worst raise
166
+ # an error when applied.
167
+ #
168
+ # @param statements [Enumerable, RDF::Statement] Some statements
169
+ # @return [self]
170
+ def insert(*statements)
171
+ coerce_statements(statements) do |stmts|
172
+ append_statements :inserts, stmts
173
+ end
174
+
175
+ self
176
+ end
177
+ alias_method :insert!, :insert
178
+ alias_method :<<, :insert
179
+
180
+ # Append statements to `deletes`. Statements _may_ contain
181
+ # variables, although support will depend on the {RDF::Mutable}
182
+ # target.
183
+ #
184
+ # @param statements [Enumerable, RDF::Statement] Some statements
185
+ # @return [self]
186
+ def delete(*statements)
187
+ coerce_statements(statements) do |stmts|
188
+ append_statements :deletes, stmts
189
+ end
190
+
191
+ self
192
+ end
193
+ alias_method :delete!, :delete
194
+ alias_method :>>, :delete
195
+
196
+ private
197
+
149
198
  ##
150
- # Appends an RDF statement to the sequence to delete when applied.
199
+ # Append statements to the appropriate target. This is a little
200
+ # shim to go in between the other shim and the target.
151
201
  #
152
- # @param [RDF::Statement] statement
153
- # @return [void]
154
- # @see RDF::Mutable#delete_statement
155
- def delete_statement(statement)
156
- self.deletes << statement
202
+ # @param target [Symbol] the method to send
203
+ # @param arg [Enumerable, RDF::Statement]
204
+ #
205
+ def append_statements(target, arg)
206
+ # coerce to an enumerator
207
+ stmts = case
208
+ when arg.is_a?(RDF::Statement)
209
+ [arg]
210
+ when arg.respond_to?(:each_statement)
211
+ arg.each_statement
212
+ when arg.respond_to?(:each)
213
+ arg
214
+ else
215
+ raise ArgumentError, "Invalid statement: #{arg.class}"
216
+ end
217
+
218
+ stmts.each { |s| send(target) << s }
157
219
  end
158
220
 
159
- undef_method :load, :update, :clear
160
221
  end # Changeset
161
222
  end # RDF
@@ -9,6 +9,7 @@ module RDF
9
9
  extend RDF::Util::Aliasing::LateBound
10
10
  include RDF::Readable
11
11
  include RDF::Writable
12
+ include RDF::Util::Coercions
12
13
 
13
14
  ##
14
15
  # Returns `true` if `self` is mutable.
@@ -154,20 +155,9 @@ module RDF
154
155
  def delete(*statements)
155
156
  raise TypeError.new("#{self} is immutable") if immutable?
156
157
 
157
- statements.map! do |value|
158
- case
159
- when value.respond_to?(:each_statement)
160
- delete_statements(value)
161
- nil
162
- when (statement = Statement.from(value)).constant?
163
- statement
164
- else
165
- delete_statements(query(value))
166
- nil
167
- end
158
+ coerce_statements(statements, query: true, constant: true) do |value|
159
+ delete_statements(value)
168
160
  end
169
- statements.compact!
170
- delete_statements(statements) unless statements.empty?
171
161
 
172
162
  return self
173
163
  end
@@ -7,6 +7,7 @@ module RDF
7
7
  # @see RDF::Repository
8
8
  module Writable
9
9
  extend RDF::Util::Aliasing::LateBound
10
+ include RDF::Util::Coercions
10
11
 
11
12
  ##
12
13
  # Returns `true` if `self` is writable.
@@ -58,26 +59,13 @@ module RDF
58
59
  # @param [Enumerable<RDF::Statement>] statements
59
60
  # @return [self]
60
61
  def insert(*statements)
61
- statements.map! do |value|
62
- case
63
- when value.respond_to?(:each_statement)
64
- insert_statements(value)
65
- nil
66
- when (statement = Statement.from(value))
67
- statement
68
- else
69
- raise ArgumentError.new("not a valid statement: #{value.inspect}")
70
- end
71
- end
72
- statements.compact!
73
- insert_statements(statements) unless statements.empty?
62
+ coerce_statements(statements) { |value| insert_statements value }
74
63
 
75
64
  return self
76
65
  end
77
66
  alias_method :insert!, :insert
78
67
 
79
68
  protected
80
-
81
69
  ##
82
70
  # Inserts statements from the given RDF reader into the underlying
83
71
  # storage or output stream.
@@ -340,7 +340,14 @@ module RDF
340
340
  # @see Mutable#apply_changeset
341
341
  def apply_changeset(changeset)
342
342
  data = @data
343
- changeset.deletes.each { |del| data = delete_from(data, del) }
343
+ changeset.deletes.each do |del|
344
+ if del.constant?
345
+ data = delete_from(data, del)
346
+ else
347
+ # we need this condition to handle wildcard statements
348
+ query_pattern(del) { |stmt| data = delete_from(data, stmt) }
349
+ end
350
+ end
344
351
  changeset.inserts.each { |ins| data = insert_to(data, ins) }
345
352
  @data = data
346
353
  end
@@ -1,7 +1,8 @@
1
1
  module RDF; module Util
2
- autoload :Aliasing, 'rdf/util/aliasing'
3
- autoload :Cache, 'rdf/util/cache'
4
- autoload :File, 'rdf/util/file'
5
- autoload :Logger, 'rdf/util/logger'
6
- autoload :UUID, 'rdf/util/uuid'
2
+ autoload :Aliasing, 'rdf/util/aliasing'
3
+ autoload :Cache, 'rdf/util/cache'
4
+ autoload :File, 'rdf/util/file'
5
+ autoload :Logger, 'rdf/util/logger'
6
+ autoload :UUID, 'rdf/util/uuid'
7
+ autoload :Coercions, 'rdf/util/coercions'
7
8
  end; end
@@ -0,0 +1,60 @@
1
+ # -*- coding: utf-8 -*-
2
+ module RDF
3
+ module Util
4
+ module Coercions
5
+ # This is a provisional module intended to house input
6
+ # coercions. Currently the only coercion is a statement
7
+ # preprocessor that is used in e.g. {RDF::Writable#insert} and
8
+ # {RDF::Mutable#delete}.
9
+
10
+ protected
11
+
12
+ ##
13
+ # Coerce an array of arguments into {RDF::Statement}, or
14
+ # {RDF::Enumerable} and then yield to a block. Note that this
15
+ # code was amalgamated from that which was sandwiched around
16
+ # both {RDF::Writable#insert_statements} and
17
+ # {RDF::Mutable#delete_statements}. The parameters `query` and
18
+ # `constant` are therefore present to handle the conditions
19
+ # where the statements contain wildcards and what to do about
20
+ # them.
21
+ #
22
+ # @example
23
+ # coerce_statements(statements) { |value| do_something(value) }
24
+ #
25
+ # @param statements [#map] The arbitrary-ish input to be manipulated
26
+ # @param query [false, true] Whether to call `query` before the block
27
+ # (as expected by {Mutable#delete_statements})
28
+ # @param constant [false, true] Whether to test if the statements
29
+ # are constant (as expected by {Mutable#delete_statements})
30
+ # @yield [RDF::Statement, RDF::Enumerable]
31
+ # @return statements
32
+ def coerce_statements(statements, query: false, constant: false, &block)
33
+ raise ArgumentError, 'expecting a block' unless block_given?
34
+
35
+ statements = statements.map do |value|
36
+ case
37
+ when value.respond_to?(:each_statement)
38
+ block.call(value)
39
+ nil
40
+ when (statement = Statement.from(value)) &&
41
+ (!constant || statement.constant?)
42
+ statement
43
+ when query
44
+ # XXX note that this only makes sense when the module is include()d
45
+ block.call(self.query(value))
46
+ nil
47
+ else
48
+ raise ArgumentError, "Not a valid statement: #{value.inspect}"
49
+ end
50
+ end.compact
51
+
52
+ block.call(statements) unless statements.empty?
53
+
54
+ # eh might as well return these
55
+ statements
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -190,7 +190,7 @@ module RDF
190
190
  comment: %(
191
191
  boolean represents the values of two-valued logic.
192
192
  ).freeze,
193
- label: "base64Binary".freeze,
193
+ label: "boolean".freeze,
194
194
  subClassOf: "xsd:anyAtomicType".freeze,
195
195
  type: "rdfs:Datatype".freeze
196
196
  term :byte,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arto Bendiken
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-12-11 00:00:00.000000000 Z
13
+ date: 2020-01-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: link_header
@@ -80,28 +80,28 @@ dependencies:
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '3.0'
83
+ version: '3.1'
84
84
  type: :development
85
85
  prerelease: false
86
86
  version_requirements: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '3.0'
90
+ version: '3.1'
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rdf-xsd
93
93
  requirement: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '3.0'
97
+ version: '3.1'
98
98
  type: :development
99
99
  prerelease: false
100
100
  version_requirements: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: '3.0'
104
+ version: '3.1'
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: rest-client
107
107
  requirement: !ruby/object:Gem::Requirement
@@ -267,6 +267,7 @@ files:
267
267
  - lib/rdf/util.rb
268
268
  - lib/rdf/util/aliasing.rb
269
269
  - lib/rdf/util/cache.rb
270
+ - lib/rdf/util/coercions.rb
270
271
  - lib/rdf/util/file.rb
271
272
  - lib/rdf/util/logger.rb
272
273
  - lib/rdf/util/uuid.rb
@@ -302,7 +303,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
302
303
  - !ruby/object:Gem::Version
303
304
  version: '0'
304
305
  requirements: []
305
- rubygems_version: 3.0.6
306
+ rubygems_version: 3.1.1
306
307
  signing_key:
307
308
  specification_version: 4
308
309
  summary: A Ruby library for working with Resource Description Framework (RDF) data.