rdf 3.0.13 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a969744cdc52b4d24c7621d70e0bdcc0cb0453ee5c9f371bc1019bacecce5b27
4
- data.tar.gz: b2dc220b847515e8e96f1b1c55be1290b5b948e7f10ced559203d27a0793be41
3
+ metadata.gz: 2daf8eddad46785b68f11f655491114ece3425f5af8e283ec5372f186fbf0494
4
+ data.tar.gz: d84668437ad7b0c703bf0cec3a0c2cd50a25f6a81e4e1b9289b87c33b70fe18f
5
5
  SHA512:
6
- metadata.gz: 28cd11713d9a680ffd9198bff24e123fba6dd489c123808704ed591931c40d1238ff37baab7bac5a9685fafc5d5168e55216b703ccd35c4bf6916853c5cd3c70
7
- data.tar.gz: c1b11ad1585b69b65e117e5ccff21a75de10ab63aac1b5228e880fe5ea1fd380f197afdb9ed8534ed0d077477b5ca3b2a9fa6e967c2334c457d17e0620789b20
6
+ metadata.gz: 30730b50722a1d159fdc4acc7d226253101a28475925451e0dffd599a20b837146a21202d539125aa513ded6dc7de50c290d570a273963052a4820c304a291eb
7
+ data.tar.gz: 611b837819f8470547ca79cd6d948201e39c288f2e8f2da25f6c39e557abd5efa4b39b3c549d47f09bd75db53af84de3e46fc43f8ebcbc082245556c0ed06b39
data/README.md CHANGED
@@ -29,7 +29,8 @@ This is a pure-Ruby library for working with [Resource Description Framework
29
29
  not modify any of Ruby's core classes or standard library.
30
30
  * Based entirely on Ruby's autoloading, meaning that you can generally make
31
31
  use of any one part of the library without needing to load up the rest.
32
- * Compatible with Ruby Ruby >= 2.2.2, Rubinius and JRuby 9.0+.
32
+ * Compatible with Ruby Ruby >= 2.4, Rubinius and JRuby 9.0+.
33
+ * Note, changes in mapping hashes to keyword arguments for Ruby 2.7+ may require that arguments be passed more explicitly, especially when the first argument is a Hash and there are optional keyword arguments. In this case, Hash argument may need to be explicitly included within `{}` and the optional keyword arguments may need to be specified using `**{}` if there are no keyword arguments.
33
34
  * Performs auto-detection of input to select appropriate Reader class if one
34
35
  cannot be determined from file characteristics.
35
36
 
@@ -189,7 +190,7 @@ Note that no prefixes are loaded automatically, however they can be provided as
189
190
  FOAF.name => :name,
190
191
  FOAF.mbox => :email,
191
192
  }
192
- })
193
+ }, **{})
193
194
 
194
195
  query.execute(graph) do |solution|
195
196
  puts "name=#{solution.name} email=#{solution.email}"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.13
1
+ 3.1.0
data/lib/rdf.rb CHANGED
@@ -79,8 +79,8 @@ module RDF
79
79
  #
80
80
  # @param (see RDF::Resource#initialize)
81
81
  # @return [RDF::Resource]
82
- def self.Resource(*args, &block)
83
- Resource.new(*args, &block)
82
+ def self.Resource(*args)
83
+ Resource.new(*args)
84
84
  end
85
85
 
86
86
  ##
@@ -88,8 +88,8 @@ module RDF
88
88
  #
89
89
  # @param (see RDF::Node#initialize)
90
90
  # @return [RDF::Node]
91
- def self.Node(*args, &block)
92
- Node.new(*args, &block)
91
+ def self.Node(*args)
92
+ Node.new(*args)
93
93
  end
94
94
 
95
95
  ##
@@ -97,8 +97,15 @@ module RDF
97
97
  #
98
98
  # @param (see RDF::URI#initialize)
99
99
  # @return [RDF::URI]
100
- def self.URI(uri, *args, &block)
101
- uri.respond_to?(:to_uri) ? uri.to_uri : URI.new(uri, *args, &block)
100
+ def self.URI(*args)
101
+ if args.first.respond_to?(:to_uri)
102
+ args.first.to_uri
103
+ elsif args.first.is_a?(Hash)
104
+ URI.new(**args.first)
105
+ else
106
+ opts = args.last.is_a?(Hash) ? args.pop : {}
107
+ URI.new(*args, **opts)
108
+ end
102
109
  end
103
110
 
104
111
  ##
@@ -106,10 +113,10 @@ module RDF
106
113
  #
107
114
  # @param (see RDF::Literal#initialize)
108
115
  # @return [RDF::Literal]
109
- def self.Literal(literal, *args, &block)
116
+ def self.Literal(literal, **options)
110
117
  case literal
111
118
  when RDF::Literal then literal
112
- else Literal.new(literal, *args, &block)
119
+ else Literal.new(literal, **options)
113
120
  end
114
121
  end
115
122
 
@@ -119,7 +126,7 @@ module RDF
119
126
  # @param (see RDF::Graph#initialize)
120
127
  # @return [RDF::Graph]
121
128
  def self.Graph(**options, &block)
122
- Graph.new(options, &block)
129
+ Graph.new(**options, &block)
123
130
  end
124
131
 
125
132
  ##
@@ -171,11 +178,11 @@ module RDF
171
178
  # @option options [RDF::Resource] :graph_name (nil)
172
179
  # @return [RDF::Statement]
173
180
  #
174
- def self.Statement(*args)
175
- if args.empty?
181
+ def self.Statement(*args, **options)
182
+ if args.empty? && options.empty?
176
183
  RDF[:Statement]
177
184
  else
178
- Statement.new(*args)
185
+ Statement.new(*args, **options)
179
186
  end
180
187
  end
181
188
 
@@ -42,7 +42,7 @@ module RDF
42
42
  # @yieldparam [RDF::Changeset] changes
43
43
  # @return [void]
44
44
  def self.apply(mutable, **options, &block)
45
- self.new(&block).apply(mutable, options)
45
+ self.new(&block).apply(mutable, **options)
46
46
  end
47
47
 
48
48
  ##
@@ -175,7 +175,7 @@ module RDF
175
175
  unless repository.count > 0
176
176
  start = Time.new
177
177
  count = 0
178
- self.parse(argv, opts) do |reader|
178
+ self.parse(argv, **opts) do |reader|
179
179
  reader.each_statement do |statement|
180
180
  count += 1
181
181
  end
@@ -240,7 +240,7 @@ module RDF
240
240
  out = opts[:output]
241
241
  opts = opts.merge(prefixes: {})
242
242
  writer_opts = opts.merge(standard_prefixes: true)
243
- writer_class.new(out, writer_opts) do |writer|
243
+ writer_class.new(out, **writer_opts) do |writer|
244
244
  writer << repository
245
245
  end
246
246
  end
@@ -501,7 +501,7 @@ module RDF
501
501
  if cmds.any? {|c| COMMANDS[c.to_sym][:parse]}
502
502
  start = Time.new
503
503
  count = 0
504
- self.parse(args, options) do |reader|
504
+ self.parse(args, **options) do |reader|
505
505
  @repository << reader
506
506
  end
507
507
  secs = Time.new - start
@@ -575,7 +575,7 @@ module RDF
575
575
  RDF::Format.each do |format|
576
576
  format.cli_commands.each do |command, options|
577
577
  options = {lambda: options} unless options.is_a?(Hash)
578
- add_command(command, options)
578
+ add_command(command, **options)
579
579
  end
580
580
  end
581
581
  @commands_loaded = true
@@ -637,13 +637,13 @@ module RDF
637
637
  r = RDF::Reader.for(format|| {sample: sample})
638
638
  raise ArgumentError, "Unknown format for evaluated input" unless r
639
639
  (@readers ||= []) << r
640
- r.new(input, options) do |reader|
640
+ r.new(input, **options) do |reader|
641
641
  yield(reader)
642
642
  end
643
643
  else
644
644
  options[:format] = format if format
645
645
  files.each do |file|
646
- RDF::Reader.open(file, options) do |reader|
646
+ RDF::Reader.open(file, **options) do |reader|
647
647
  (@readers ||= []) << reader.class.to_s
648
648
  yield(reader)
649
649
  end
@@ -122,7 +122,7 @@ module RDF
122
122
  sample = case sample
123
123
  when Proc then sample.call.to_s
124
124
  else sample.dup.to_s
125
- end.force_encoding(Encoding::ASCII_8BIT)
125
+ end.dup.force_encoding(Encoding::ASCII_8BIT)
126
126
  # Given a sample, perform format detection across the appropriate formats, choosing the last that matches
127
127
  # Return last format that has a positive detection
128
128
  formats = formats.select {|f| f.detect(sample)}
@@ -145,10 +145,10 @@ module RDF
145
145
  # @param [String, RDF::URI] filename
146
146
  # @return [Class]
147
147
  #
148
- # @overload for(**options)
148
+ # @overload for(options)
149
149
  # Finds an RDF serialization format class based on various options.
150
150
  #
151
- # @param [Hash{Symbol => Object}] options
151
+ # @param [Hash{Symbol => Object}] options ({})
152
152
  # @option options [String, #to_s] :file_name (nil)
153
153
  # @option options [Symbol, #to_sym] :file_extension (nil)
154
154
  # @option options [String, #to_s] :content_type (nil)
@@ -164,19 +164,26 @@ module RDF
164
164
  # @yieldreturn [String] another way to provide a sample, allows lazy for retrieving the sample.
165
165
  #
166
166
  # @return [Class]
167
- def self.for(*args, **options, &block)
167
+ def self.for(*arg, &block)
168
+ case arg.length
169
+ when 0 then arg = nil
170
+ when 1 then arg = arg.first
171
+ else
172
+ raise ArgumentError, "Format.for accepts zero or one argument, got #{arg.length}."
173
+ end
174
+
175
+ options = arg.is_a?(Hash) ? arg : {}
168
176
  options = {sample: block}.merge(options) if block_given?
169
- formats = case args.first
177
+ formats = case arg
170
178
  when String, RDF::URI
171
179
  # Find a format based on the file name
172
- self.each(file_name: args.first, **options).to_a
180
+ self.each(file_name: arg, **options).to_a
173
181
  when Symbol
174
182
  # Try to find a match based on the full class name
175
183
  # We want this to work even if autoloading fails
176
- fmt = args.first
177
- classes = self.each(options).select {|f| f.symbols.include?(fmt)}
184
+ classes = self.each(**options).select {|f| f.symbols.include?(arg)}
178
185
  if classes.empty?
179
- classes = case fmt
186
+ classes = case arg
180
187
  when :ntriples then [RDF::NTriples::Format]
181
188
  when :nquads then [RDF::NQuads::Format]
182
189
  else []
@@ -184,7 +191,7 @@ module RDF
184
191
  end
185
192
  classes
186
193
  else
187
- self.each(options.merge(all_if_none: false)).to_a
194
+ self.each(**options.merge(all_if_none: false)).to_a
188
195
  end
189
196
 
190
197
  # Return the last detected format
@@ -220,7 +220,7 @@ module RDF
220
220
  def each_triple
221
221
  if block_given?
222
222
  each_statement do |statement|
223
- yield *statement.to_triple
223
+ yield(*statement.to_triple)
224
224
  end
225
225
  end
226
226
  enum_triple
@@ -282,7 +282,7 @@ module RDF
282
282
  def each_quad
283
283
  if block_given?
284
284
  each_statement do |statement|
285
- yield *statement.to_quad
285
+ yield(*statement.to_quad)
286
286
  end
287
287
  end
288
288
  enum_quad
@@ -37,10 +37,10 @@ module RDF
37
37
  # @option options [RDF::Resource] :graph_name
38
38
  # Set set graph name of each loaded statement
39
39
  # @return [void]
40
- def load(url, graph_name: nil, **options)
40
+ def load(url, graph_name: nil, **options)
41
41
  raise TypeError.new("#{self} is immutable") if immutable?
42
42
 
43
- Reader.open(url, {base_uri: url}.merge(options)) do |reader|
43
+ Reader.open(url, base_uri: url, **options) do |reader|
44
44
  if graph_name
45
45
  statements = []
46
46
  reader.each_statement do |statement|
@@ -19,7 +19,7 @@ module RDF
19
19
  #
20
20
  # @example Querying for statements having a given predicate
21
21
  # queryable.query([nil, RDF::Vocab::DOAP.developer, nil])
22
- # queryable.query(predicate: RDF::Vocab::DOAP.developer) do |statement|
22
+ # queryable.query({predicate: RDF::Vocab::DOAP.developer}) do |statement|
23
23
  # puts statement.inspect
24
24
  # end
25
25
  #
@@ -50,7 +50,7 @@ module RDF
50
50
  solutions = RDF::Query::Solutions.new
51
51
  block = lambda {|solution| solutions << solution} unless block_given?
52
52
  before_query(pattern) if respond_to?(:before_query)
53
- query_execute(pattern, options, &block)
53
+ query_execute(pattern, **options, &block)
54
54
  after_query(pattern) if respond_to?(:after_query)
55
55
  # Returns the solutions, not an enumerator
56
56
  solutions
@@ -85,7 +85,7 @@ module RDF
85
85
 
86
86
  # Otherwise, we delegate to `#query_pattern`:
87
87
  else # pattern.variable?
88
- query_pattern(pattern, options, &block)
88
+ query_pattern(pattern, **options, &block)
89
89
  end
90
90
  after_query(pattern) if respond_to?(:after_query)
91
91
  enum
@@ -116,7 +116,7 @@ module RDF
116
116
  # query execution by breaking down the query into its constituent
117
117
  # triple patterns and invoking `RDF::Query::Pattern#execute` on each
118
118
  # pattern.
119
- query.execute(self, options, &block)
119
+ query.execute(self, **options, &block)
120
120
  end
121
121
  protected :query_execute
122
122
 
@@ -211,7 +211,7 @@ module RDF
211
211
  # @return [Integer]
212
212
  # @see RDF::Enumerable#count
213
213
  def count
214
- @data.query(graph_name: graph_name || false).count
214
+ @data.query({graph_name: graph_name || false}).count
215
215
  end
216
216
 
217
217
  ##
@@ -237,7 +237,7 @@ module RDF
237
237
  # @see RDF::Enumerable#each_statement
238
238
  def each(&block)
239
239
  if @data.respond_to?(:query)
240
- @data.query(graph_name: graph_name || false, &block)
240
+ @data.query({graph_name: graph_name || false}, &block)
241
241
  elsif @data.respond_to?(:each)
242
242
  @data.each(&block)
243
243
  else
@@ -59,7 +59,7 @@ module RDF
59
59
  def initialize(subject: nil, graph: nil, values: nil, &block)
60
60
  @subject = subject || RDF.nil
61
61
  @graph = graph || RDF::Graph.new
62
- is_empty = @graph.query(subject: subject, predicate: RDF.first).empty?
62
+ is_empty = @graph.query({subject: subject, predicate: RDF.first}).empty?
63
63
 
64
64
  if subject && is_empty
65
65
  # An empty list with explicit subject and value initializers
@@ -115,7 +115,7 @@ module RDF
115
115
  list_nodes << li
116
116
  rest = nil
117
117
  firsts = rests = 0
118
- @graph.query(subject: li) do |st|
118
+ @graph.query({subject: li}) do |st|
119
119
  return false unless st.subject.node?
120
120
  case st.predicate
121
121
  when RDF.first
@@ -136,7 +136,7 @@ module RDF
136
136
 
137
137
  # All elements other than the head must be referenced exactly once
138
138
  return list_nodes.all? do |li|
139
- refs = @graph.query(object: li).count
139
+ refs = @graph.query({object: li}).count
140
140
  case refs
141
141
  when 0 then li == subject
142
142
  when 1 then true
@@ -479,7 +479,7 @@ module RDF
479
479
  # @return [Boolean]
480
480
  # @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-empty-3F
481
481
  def empty?
482
- graph.query(subject: subject, predicate: RDF.first).empty?
482
+ graph.query({subject: subject, predicate: RDF.first}).empty?
483
483
  end
484
484
 
485
485
  ##
@@ -822,7 +822,7 @@ module RDF
822
822
  return enum_statement unless block_given?
823
823
 
824
824
  each_subject do |subject|
825
- graph.query(subject: subject, &block)
825
+ graph.query({subject: subject}, &block)
826
826
  end
827
827
  end
828
828
  alias_method :to_rdf, :each_statement
@@ -141,8 +141,8 @@ module RDF
141
141
  #
142
142
  # (see #initialize)
143
143
  # @return [RDF::URI] an immutable, frozen URI object
144
- def self.intern(str, *args)
145
- (cache[(str = str.to_s).to_sym] ||= self.new(str, *args)).freeze
144
+ def self.intern(str, *args, **options)
145
+ (cache[(str = str.to_s).to_sym] ||= self.new(str, *args, **options)).freeze
146
146
  end
147
147
 
148
148
  ##
@@ -225,11 +225,9 @@ module RDF
225
225
  @mutex = Mutex.new
226
226
  uri = args.first
227
227
  if uri
228
- @value = uri.to_s
229
- if @value.encoding != Encoding::UTF_8
230
- @value.dup.force_encoding(Encoding::UTF_8)
231
- @value.freeze
232
- end
228
+ @value = uri.to_s.dup
229
+ @value.dup.force_encoding(Encoding::UTF_8) if @value.encoding != Encoding::UTF_8
230
+ @value.freeze
233
231
  else
234
232
  %w(
235
233
  scheme
@@ -441,7 +439,7 @@ module RDF
441
439
  end
442
440
 
443
441
  # Return joined URI
444
- RDF::URI.new(joined_parts)
442
+ RDF::URI.new(**joined_parts)
445
443
  end
446
444
 
447
445
  ##
@@ -509,7 +507,7 @@ module RDF
509
507
  case fragment.to_s[0,1]
510
508
  when '#'
511
509
  # Base ending with '/', fragment beginning with '#'. The fragment wins, we use '#'.
512
- res.path = res.path.to_s.sub!(/\/*$/, '')
510
+ res.path = res.path.to_s.sub(/\/*$/, '')
513
511
  # Add fragment
514
512
  res.fragment = fragment.to_s.sub(/^#+/,'')
515
513
  else
@@ -574,7 +572,7 @@ module RDF
574
572
  self
575
573
  else
576
574
  RDF::URI.new(
577
- object.merge(path: '/').
575
+ **object.merge(path: '/').
578
576
  keep_if {|k, v| [:scheme, :authority, :path].include?(k)})
579
577
  end
580
578
  end
@@ -659,7 +657,7 @@ module RDF
659
657
  #
660
658
  # @return [RDF::URI]
661
659
  def dup
662
- self.class.new((@value || @object).dup)
660
+ self.class.new(@value, **(@object || {}))
663
661
  end
664
662
 
665
663
  ##
@@ -848,7 +846,7 @@ module RDF
848
846
  parts[:user] = (user.dup.force_encoding(Encoding::UTF_8) if user)
849
847
  parts[:password] = (password.dup.force_encoding(Encoding::UTF_8) if password)
850
848
  parts[:host] = (host.dup.force_encoding(Encoding::UTF_8) if host)
851
- parts[:port] = (::URI.decode(port).to_i if port)
849
+ parts[:port] = (URI.decode(port).to_i if port)
852
850
  parts[:path] = (path.to_s.dup.force_encoding(Encoding::UTF_8) unless path.empty?)
853
851
  parts[:query] = (query[1..-1].dup.force_encoding(Encoding::UTF_8) if query)
854
852
  parts[:fragment] = (fragment[1..-1].dup.force_encoding(Encoding::UTF_8) if fragment)
@@ -904,7 +902,7 @@ module RDF
904
902
  # Normalized version of user
905
903
  # @return [String]
906
904
  def normalized_user
907
- ::URI.encode(::URI.decode(user), /[^#{IUNRESERVED}|#{SUB_DELIMS}]/) if user
905
+ URI.encode(URI.decode(user), /[^#{IUNRESERVED}|#{SUB_DELIMS}]/) if user
908
906
  end
909
907
 
910
908
  ##
@@ -930,7 +928,7 @@ module RDF
930
928
  # Normalized version of password
931
929
  # @return [String]
932
930
  def normalized_password
933
- ::URI.encode(::URI.decode(password), /[^#{IUNRESERVED}|#{SUB_DELIMS}]/) if password
931
+ URI.encode(URI.decode(password), /[^#{IUNRESERVED}|#{SUB_DELIMS}]/) if password
934
932
  end
935
933
 
936
934
  HOST_FROM_AUTHORITY_RE = /(?:[^@]+@)?([^:]+)(?::.*)?$/.freeze
@@ -939,7 +937,7 @@ module RDF
939
937
  # @return [String]
940
938
  def host
941
939
  object.fetch(:host) do
942
- @object[:host] = ($1 if HOST_FROM_AUTHORITY_RE.match(@object[:authority]))
940
+ @object[:host] = ($1 if @object[:authority] && HOST_FROM_AUTHORITY_RE.match(@object[:authority]))
943
941
  end
944
942
  end
945
943
 
@@ -967,7 +965,7 @@ module RDF
967
965
  # @return [String]
968
966
  def port
969
967
  object.fetch(:port) do
970
- @object[:port] = ($1 if PORT_FROM_AUTHORITY_RE.match(@object[:authority]))
968
+ @object[:port] = ($1 if @object[:authority] && PORT_FROM_AUTHORITY_RE.match(@object[:authority]))
971
969
  end
972
970
  end
973
971
 
@@ -1182,8 +1180,8 @@ module RDF
1182
1180
  inject(return_type == Hash ? {} : []) do |memo,kv|
1183
1181
  k,v = kv.to_s.split('=', 2)
1184
1182
  next if k.to_s.empty?
1185
- k = ::URI.decode(k)
1186
- v = ::URI.decode(v) if v
1183
+ k = URI.decode(k)
1184
+ v = URI.decode(v) if v
1187
1185
  if return_type == Hash
1188
1186
  case memo[k]
1189
1187
  when nil then memo[k] = v
@@ -1295,9 +1293,9 @@ module RDF
1295
1293
  def normalize_segment(value, expr, downcase = false)
1296
1294
  if value
1297
1295
  value = value.dup.force_encoding(Encoding::UTF_8)
1298
- decoded = ::URI.decode(value)
1296
+ decoded = URI.decode(value)
1299
1297
  decoded.downcase! if downcase
1300
- ::URI.encode(decoded, /[^(?:#{expr})]/)
1298
+ URI.encode(decoded, /[^(?:#{expr})]/)
1301
1299
  end
1302
1300
  end
1303
1301
 
@@ -1316,6 +1314,27 @@ module RDF
1316
1314
  ""
1317
1315
  end
1318
1316
  end
1317
+
1318
+ # URI encode matching characters in value
1319
+ # From URI gem, as this is now generally deprecated
1320
+ def self.encode(str, expr)
1321
+ str.gsub(expr) do
1322
+ us = $&
1323
+ tmp = ''
1324
+ us.each_byte do |uc|
1325
+ tmp << sprintf('%%%02X', uc)
1326
+ end
1327
+ tmp
1328
+ end.force_encoding(Encoding::US_ASCII)
1329
+ end
1330
+
1331
+ # URI decode escape sequences in value
1332
+ # From URI gem, as this is now generally deprecated
1333
+ def self.decode(str)
1334
+ enc = str.encoding
1335
+ enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
1336
+ str.gsub(PCT_ENCODED) { [$&[1, 2]].pack('H2').force_encoding(enc) }
1337
+ end
1319
1338
  end
1320
1339
 
1321
1340
  # RDF::IRI is a synonym for RDF::URI
@@ -96,7 +96,7 @@ module RDF
96
96
  # @param [RDF::Term] object
97
97
  # @return [void]
98
98
  def write_quad(subject, predicate, object, graph_name)
99
- puts format_quad(subject, predicate, object, graph_name, @options)
99
+ puts format_quad(subject, predicate, object, graph_name, **@options)
100
100
  end
101
101
 
102
102
  ##
@@ -107,7 +107,7 @@ module RDF
107
107
  # @return [String]
108
108
  # @since 0.4.0
109
109
  def format_statement(statement, **options)
110
- format_quad(*statement.to_quad, options)
110
+ format_quad(*statement.to_quad, **options)
111
111
  end
112
112
 
113
113
  ##
@@ -120,8 +120,8 @@ module RDF
120
120
  # @param [Hash{Symbol => Object}] options = ({})
121
121
  # @return [String]
122
122
  def format_quad(subject, predicate, object, graph_name, **options)
123
- s = "%s %s %s " % [subject, predicate, object].map { |value| format_term(value, options) }
124
- s += format_term(graph_name, options) + " " if graph_name
123
+ s = "%s %s %s " % [subject, predicate, object].map { |value| format_term(value, **options) }
124
+ s += format_term(graph_name, **options) + " " if graph_name
125
125
  s + "."
126
126
  end
127
127
  end # Writer
@@ -96,7 +96,7 @@ module RDF::NTriples
96
96
  def self.unserialize(input, **options)
97
97
  case input
98
98
  when nil then nil
99
- else self.new(input, {logger: []}.merge(options)).read_value
99
+ else self.new(input, logger: [], **options).read_value
100
100
  end
101
101
  end
102
102
 
@@ -104,20 +104,20 @@ module RDF::NTriples
104
104
  # (see unserialize)
105
105
  # @return [RDF::Resource]
106
106
  def self.parse_subject(input, **options)
107
- parse_uri(input, options) || parse_node(input, options)
107
+ parse_uri(input, **options) || parse_node(input, **options)
108
108
  end
109
109
 
110
110
  ##
111
111
  # (see unserialize)
112
112
  # @return [RDF::URI]
113
- def self.parse_predicate(input, *options)
113
+ def self.parse_predicate(input, **options)
114
114
  parse_uri(input, intern: true)
115
115
  end
116
116
 
117
117
  ##
118
118
  # (see unserialize)
119
119
  def self.parse_object(input, **options)
120
- parse_uri(input, options) || parse_node(input, options) || parse_literal(input, options)
120
+ parse_uri(input, **options) || parse_node(input, **options) || parse_literal(input, **options)
121
121
  end
122
122
 
123
123
  ##
@@ -208,7 +208,7 @@ module RDF::NTriples
208
208
  # @param [RDF::Term] object
209
209
  # @return [void]
210
210
  def write_triple(subject, predicate, object)
211
- puts format_triple(subject, predicate, object, @options)
211
+ puts format_triple(subject, predicate, object, **@options)
212
212
  end
213
213
 
214
214
  ##
@@ -90,7 +90,7 @@ module RDF
90
90
  # the resulting solution sequence
91
91
  # @see RDF::Query#execute
92
92
  def self.execute(queryable, patterns = {}, options = {}, &block)
93
- self.new(patterns, options, &block).execute(queryable, options)
93
+ self.new(patterns, **options, &block).execute(queryable, **options)
94
94
  end
95
95
 
96
96
  ##
@@ -134,6 +134,12 @@ module RDF
134
134
  # @return [Hash]
135
135
  attr_reader :options
136
136
 
137
+ ##
138
+ # Scope the query to named graphs matching value
139
+ #
140
+ # @return [RDF::Resource, RDF::Query::Variable, false] graph_name
141
+ attr_accessor :graph_name
142
+
137
143
  ##
138
144
  # Initializes a new basic graph pattern query.
139
145
  #
@@ -180,6 +186,7 @@ module RDF
180
186
  @options = options.dup
181
187
  @solutions = Query::Solutions(solutions)
182
188
  graph_name = name if graph_name.nil?
189
+ @graph_name = graph_name
183
190
 
184
191
  patterns << @options if patterns.empty?
185
192
 
@@ -189,8 +196,6 @@ module RDF
189
196
  else patterns
190
197
  end
191
198
 
192
- self.graph_name = graph_name
193
-
194
199
  if block_given?
195
200
  case block.arity
196
201
  when 1 then block.call(self)
@@ -223,7 +228,7 @@ module RDF
223
228
  # whether this is an optional pattern
224
229
  # @return [void] self
225
230
  def pattern(pattern, **options)
226
- @patterns << Pattern.from(pattern, options)
231
+ @patterns << Pattern.from(pattern, **options)
227
232
  self
228
233
  end
229
234
 
@@ -235,7 +240,7 @@ module RDF
235
240
  # @return [RDF::Query] a copy of `self`
236
241
  # @since 0.3.0
237
242
  def optimize(**options)
238
- self.dup.optimize!(options)
243
+ self.dup.optimize!(**options)
239
244
  end
240
245
 
241
246
  ##
@@ -294,9 +299,7 @@ module RDF
294
299
  # the resulting solution sequence
295
300
  # @see http://www.holygoat.co.uk/blog/entry/2005-10-25-1
296
301
  # @see http://www.w3.org/TR/sparql11-query/#emptyGroupPattern
297
- def execute(queryable, solutions: Solution.new, graph_name: nil, name: nil, **options, &block)
298
- options = {bindings: {}}.merge(options)
299
-
302
+ def execute(queryable, bindings: {}, solutions: Solution.new, graph_name: nil, name: nil, **options, &block)
300
303
  # Use provided solutions to allow for query chaining
301
304
  # Otherwise, a quick empty solution simplifies the logic below; no special case for
302
305
  # the first pattern
@@ -310,15 +313,14 @@ module RDF
310
313
 
311
314
  patterns = @patterns
312
315
  graph_name = name if graph_name.nil?
313
- graph_name = self.graph_name if graph_name.nil?
314
- options[:graph_name] = graph_name unless graph_name.nil?
316
+ @graph_name = graph_name unless graph_name.nil?
315
317
 
316
318
  # Add graph_name to pattern, if necessary
317
- unless graph_name.nil?
319
+ unless @graph_name.nil?
318
320
  if patterns.empty?
319
- patterns = [Pattern.new(nil, nil, nil, graph_name: graph_name)]
321
+ patterns = [Pattern.new(nil, nil, nil, graph_name: @graph_name)]
320
322
  else
321
- apply_graph_name(graph_name)
323
+ apply_graph_name(@graph_name)
322
324
  end
323
325
  end
324
326
 
@@ -326,15 +328,15 @@ module RDF
326
328
 
327
329
  old_solutions, @solutions = @solutions, Query::Solutions()
328
330
 
329
- options[:bindings].each_key do |variable|
331
+ bindings.each_key do |variable|
330
332
  if pattern.variables.include?(variable)
331
333
  unbound_solutions, old_solutions = old_solutions, Query::Solutions()
332
- options[:bindings][variable].each do |binding|
334
+ bindings[variable].each do |binding|
333
335
  unbound_solutions.each do |solution|
334
336
  old_solutions << solution.merge(variable => binding)
335
337
  end
336
338
  end
337
- options[:bindings].delete(variable)
339
+ bindings.delete(variable)
338
340
  end
339
341
  end
340
342
 
@@ -407,38 +409,26 @@ module RDF
407
409
  # Is this query scoped to a named graph?
408
410
  # @return [Boolean]
409
411
  def named?
410
- !!options[:graph_name]
412
+ !!graph_name
411
413
  end
412
414
 
413
415
  # Is this query scoped to the default graph?
414
416
  # @return [Boolean]
415
417
  def default?
416
- options[:graph_name] == false
418
+ graph_name == false
417
419
  end
418
420
 
419
421
  # Is this query unscoped? This indicates that it can return results from
420
422
  # either a named graph or the default graph.
421
423
  # @return [Boolean]
422
424
  def unnamed?
423
- options[:graph_name].nil?
424
- end
425
-
426
- # Scope the query to named graphs matching value
427
- # @param [RDF::IRI, RDF::Query::Variable] value
428
- # @return [RDF::IRI, RDF::Query::Variable]
429
- def graph_name=(value)
430
- options[:graph_name] = value
431
- end
432
-
433
- # Scope of this query, if any
434
- # @return [RDF::IRI, RDF::Query::Variable]
435
- def graph_name
436
- options[:graph_name]
425
+ graph_name.nil?
437
426
  end
438
427
 
439
428
  # Apply the graph name specified (or configured) to all patterns that have no graph name
440
429
  # @param [RDF::IRI, RDF::Query::Variable] graph_name (self.graph_name)
441
- def apply_graph_name(graph_name = options[:graph_name])
430
+ def apply_graph_name(graph_name = nil)
431
+ graph_name ||= self.graph_name
442
432
  patterns.each {|pattern| pattern.graph_name = graph_name if pattern.graph_name.nil?} unless graph_name.nil?
443
433
  end
444
434
 
@@ -515,8 +505,7 @@ module RDF
515
505
  # @return [RDF::Query]
516
506
  def dup
517
507
  patterns = @patterns.map {|p| p.dup}
518
- patterns << @options.merge(solutions: @solutions.dup)
519
- Query.new(*patterns)
508
+ Query.new(patterns, solutions: @solutions.dup, **options)
520
509
  end
521
510
 
522
511
  ##
@@ -85,13 +85,14 @@ module RDF; class Query
85
85
  # the string format for anonymous subjects.
86
86
  # @return [Hash{Symbol => Object}]
87
87
  # the resulting query pattern as a normalized hash.
88
- def normalize!(hash_pattern = {}, options = {})
88
+ def normalize!(*args)
89
+ hash_pattern = args.shift
90
+ options = args.shift || {}
91
+ anonymous_subject_format = options.fetch(:anonymous_subject_format, '__%s__')
89
92
  raise ArgumentError, "invalid hash pattern: #{hash_pattern.inspect}" unless hash_pattern.is_a?(Hash)
90
93
 
91
94
  counter = RDF::Query::HashPatternNormalizer::Counter.new
92
95
 
93
- anonymous_subject_format = (options[:anonymous_subject_format] || '__%s__').to_s
94
-
95
96
  hash_pattern.inject({}) { |acc, pair|
96
97
  subject, predicate_to_object = pair
97
98
 
@@ -184,7 +185,7 @@ module RDF; class Query
184
185
  # the query pattern as a hash.
185
186
  # @return [Hash{Symbol => Object}]
186
187
  # the resulting query pattern as a normalized hash.
187
- def normalize!(**hash_pattern)
188
+ def normalize!(hash_pattern)
188
189
  self.class.normalize!(hash_pattern, @options)
189
190
  end
190
191
  end # RDF::Query::HashPatternNormalizer
@@ -17,7 +17,7 @@ module RDF; class Query
17
17
  end
18
18
 
19
19
  ##
20
- # @overload initialize(**options)
20
+ # @overload initialize(options = {})
21
21
  # @param [Hash{Symbol => Object}] options
22
22
  # @option options [Variable, Resource, Symbol, nil] :subject (nil)
23
23
  # @option options [Variable, URI, Symbol, nil] :predicate (nil)
@@ -26,7 +26,7 @@ module RDF; class Query
26
26
  # A graph_name of nil matches any graph, a graph_name of false, matches only the default graph.
27
27
  # @option options [Boolean] :optional (false)
28
28
  #
29
- # @overload initialize(subject, predicate, object, **options)
29
+ # @overload initialize(subject, predicate, object, options = {})
30
30
  # @param [Variable, Resource, Symbol, nil] subject
31
31
  # @param [Variable, URI, Symbol, nil] predicate
32
32
  # @param [Variable, Termm, Symbol, nil] object
@@ -88,9 +88,15 @@ module RDF
88
88
  # @yieldreturn [String] another way to provide a sample, allows lazy for retrieving the sample.
89
89
  #
90
90
  # @return [Class]
91
- def self.for(options = {}, &block)
92
- options = options.merge(has_reader: true) if options.is_a?(Hash)
93
- if format = self.format || Format.for(options, &block)
91
+ def self.for(*arg, &block)
92
+ case arg.length
93
+ when 0 then arg = nil
94
+ when 1 then arg = arg.first
95
+ else
96
+ raise ArgumentError, "Format.for accepts zero or one argument, got #{arg.length}."
97
+ end
98
+ arg = arg.merge(has_reader: true) if arg.is_a?(Hash)
99
+ if format = self.format || Format.for(arg, &block)
94
100
  format.reader
95
101
  end
96
102
  end
@@ -206,7 +212,7 @@ module RDF
206
212
  headers['Accept'] ||= (self.format.accept_type + %w(*/*;q=0.1)).join(", ")
207
213
  end
208
214
 
209
- Util::File.open_file(filename, options) do |file|
215
+ Util::File.open_file(filename, **options) do |file|
210
216
  format_options = options.dup
211
217
  format_options[:content_type] ||= file.content_type if
212
218
  file.respond_to?(:content_type) &&
@@ -229,7 +235,7 @@ module RDF
229
235
  options[:filename] ||= filename
230
236
 
231
237
  if reader
232
- reader.new(file, options, &block)
238
+ reader.new(file, **options, &block)
233
239
  else
234
240
  raise FormatError, "unknown RDF format: #{format_options.inspect}#{"\nThis may be resolved with a require of the 'linkeddata' gem." unless Object.const_defined?(:LinkedData)}"
235
241
  end
@@ -119,9 +119,9 @@ module RDF
119
119
  # @yieldparam [Repository]
120
120
  # @return [void]
121
121
  def self.load(urls, **options, &block)
122
- self.new(options) do |repository|
122
+ self.new(**options) do |repository|
123
123
  Array(urls).each do |url|
124
- repository.load(url, options)
124
+ repository.load(url, **options)
125
125
  end
126
126
 
127
127
  if block_given?
@@ -411,7 +411,7 @@ module RDF
411
411
  end
412
412
  end
413
413
  else
414
- enum_for(:query_pattern, pattern, options)
414
+ enum_for(:query_pattern, pattern, **options)
415
415
  end
416
416
  end
417
417
 
@@ -512,8 +512,8 @@ module RDF
512
512
  class SerializedTransaction < Transaction
513
513
  ##
514
514
  # @see Transaction#initialize
515
- def initialize(*)
516
- super
515
+ def initialize(*args, **options, &block)
516
+ super(*args, **options, &block)
517
517
  @base_snapshot = @snapshot
518
518
  end
519
519
 
@@ -24,7 +24,7 @@ module RDF
24
24
  # repository = RDF::Repository.new
25
25
  #
26
26
  # RDF::Transaction.begin(repository) do |tx|
27
- # tx.query(predicate: RDF::Vocab::DOAP.developer) do |statement|
27
+ # tx.query({predicate: RDF::Vocab::DOAP.developer}) do |statement|
28
28
  # puts statement.inspect
29
29
  # end
30
30
  # end
@@ -319,7 +319,7 @@ module RDF; module Util
319
319
  url_no_frag_or_query.query = nil
320
320
  url_no_frag_or_query.fragment = nil
321
321
  options[:encoding] ||= Encoding::UTF_8
322
- Kernel.open(url_no_frag_or_query, "r", options) do |file|
322
+ Kernel.open(url_no_frag_or_query, "r", **options) do |file|
323
323
  document_options = {
324
324
  base_uri: filename_or_url.to_s,
325
325
  charset: file.external_encoding.to_s,
@@ -430,7 +430,7 @@ module RDF; module Util
430
430
  end if body.respond_to?(:unicode_normalized?)
431
431
  end
432
432
 
433
- super(body, "r:#{encoding}")
433
+ super(body).set_encoding encoding
434
434
  end
435
435
 
436
436
  ##
@@ -38,7 +38,7 @@ module RDF; module Util
38
38
  # @option options [Logger, #<<] :logger
39
39
  # @return [Hash{Symbol => Integer}]
40
40
  def log_statistics(**options)
41
- logger(options).log_statistics
41
+ logger(**options).log_statistics
42
42
  end
43
43
 
44
44
  ##
@@ -84,7 +84,7 @@ module RDF; module Util
84
84
  # @return [void]
85
85
  # @raise Raises the provided exception class using the first element from args as the message component, if `:exception` option is provided.
86
86
  def log_error(*args, level: :error, **options, &block)
87
- logger = self.logger(options)
87
+ logger = self.logger(**options)
88
88
  return if logger.recovering
89
89
  logger.recovering = true
90
90
  logger_common(*args, level: level, **options, &block)
@@ -96,7 +96,7 @@ module RDF; module Util
96
96
  # @option options [Logger, #<<] :logger
97
97
  # @return [Boolean]
98
98
  def log_recovering?(**options)
99
- self.logger(options).recovering
99
+ self.logger(**options).recovering
100
100
  end
101
101
 
102
102
  ##
@@ -135,7 +135,7 @@ module RDF; module Util
135
135
  # @yieldreturn [String] added to message
136
136
  # @return [void]
137
137
  def log_recover(*args, level: :info, **options, &block)
138
- logger = self.logger(options)
138
+ logger = self.logger(**options)
139
139
  logger.recovering = false
140
140
  return if args.empty? && !block_given?
141
141
  logger_common(*args, level: level, **options, &block)
@@ -192,7 +192,7 @@ module RDF; module Util
192
192
  # # Return the current log depth
193
193
  # @return [Integer]
194
194
  def log_depth(**options, &block)
195
- self.logger(options).log_depth(&block)
195
+ self.logger(**options).log_depth(&block)
196
196
  end
197
197
 
198
198
  private
@@ -218,7 +218,7 @@ module RDF; module Util
218
218
  # @yieldreturn [String] added to message
219
219
  # @return [void]
220
220
  def logger_common(*args, level:, **options)
221
- logger = self.logger(options)
221
+ logger = self.logger(**options)
222
222
  logger.log_statistics[level] = logger.log_statistics[level].to_i + 1
223
223
  # Some older code uses integer level numbers
224
224
  level = LOGGER_COMMON_LEVELS_REVERSE.fetch(level) if level.is_a?(Integer)
@@ -33,6 +33,12 @@ module RDF
33
33
  isDefinedBy: %(rdf:).freeze,
34
34
  subClassOf: "rdfs:Container".freeze,
35
35
  type: "rdfs:Class".freeze
36
+ term :CompoundLiteral,
37
+ comment: %(A class representing a compound literal.).freeze,
38
+ label: "CompoundLiteral".freeze,
39
+ isDefinedBy: %(http://www.w3.org/1999/02/22-rdf-syntax-ns#).freeze,
40
+ subClassOf: "rdfs:Class".freeze,
41
+ type: "rdfs:Class".freeze
36
42
  term :List,
37
43
  comment: %(The class of RDF Lists.).freeze,
38
44
  label: "List".freeze,
@@ -59,6 +65,13 @@ module RDF
59
65
  type: "rdfs:Class".freeze
60
66
 
61
67
  # Property definitions
68
+ property :direction,
69
+ comment: %(The direction component of a CompoundLiteral.).freeze,
70
+ domain: "rdf:CompoundLiteral".freeze,
71
+ label: "direction".freeze,
72
+ range: "rdfs:Resource".freeze,
73
+ isDefinedBy: %(http://www.w3.org/1999/02/22-rdf-syntax-ns#).freeze,
74
+ type: "rdf:Property".freeze
62
75
  property :first,
63
76
  comment: %(The first item in the subject RDF list.).freeze,
64
77
  domain: "rdf:List".freeze,
@@ -73,6 +86,13 @@ module RDF
73
86
  range: "rdfs:Resource".freeze,
74
87
  isDefinedBy: %(rdf:).freeze,
75
88
  type: "rdf:Property".freeze
89
+ property :language,
90
+ comment: %(The language component of a CompoundLiteral.).freeze,
91
+ domain: "rdf:CompoundLiteral".freeze,
92
+ label: "language".freeze,
93
+ range: "rdfs:Resource".freeze,
94
+ isDefinedBy: %(http://www.w3.org/1999/02/22-rdf-syntax-ns#).freeze,
95
+ type: "rdf:Property".freeze
76
96
  property :predicate,
77
97
  comment: %(The predicate of the subject RDF statement.).freeze,
78
98
  domain: "rdf:Statement".freeze,
@@ -117,6 +137,11 @@ module RDF
117
137
  "rdfs:seeAlso": %(http://www.w3.org/TR/rdf11-concepts/#section-html).freeze,
118
138
  subClassOf: "rdfs:Literal".freeze,
119
139
  type: "rdfs:Datatype".freeze
140
+ property :JSON,
141
+ comment: %(The datatype of RDF literals storing JSON content.).freeze,
142
+ label: "JSON".freeze,
143
+ isDefinedBy: %(http://www.w3.org/1999/02/22-rdf-syntax-ns#).freeze,
144
+ type: "rdfs:Datatype".freeze
120
145
  term :PlainLiteral,
121
146
  comment: %(The class of plain \(i.e. untyped\) literal values, as used in RIF and OWL 2).freeze,
122
147
  label: "PlainLiteral".freeze,
@@ -873,8 +873,8 @@ module RDF
873
873
  #
874
874
  # @param (see #initialize)
875
875
  # @return [RDF::URI] an immutable, frozen URI object
876
- def self.intern(str, *args)
877
- (URI.cache[(str = str.to_s).to_sym] ||= self.new(str, *args)).freeze
876
+ def self.intern(str, *args, **options)
877
+ (URI.cache[(str = str.to_s).to_sym] ||= self.new(str, *args, **options)).freeze
878
878
  end
879
879
 
880
880
  ##
@@ -1001,7 +1001,7 @@ module RDF
1001
1001
  when :domainIncludes, :rangeIncludes
1002
1002
  RDF::Vocabulary.find_term("http://schema.org/#{p}")
1003
1003
  when :broader, :definition, :exactMatch, :hasTopConcept, :inScheme,
1004
- :member, :narrower, :related, :altLabel, :definition, :editorialNote,
1004
+ :member, :narrower, :related, :altLabel, :editorialNote,
1005
1005
  :notation, :note, :prefLabel
1006
1006
  RDF::Vocabulary.find_term("http://www.w3.org/2004/02/skos/core##{p}")
1007
1007
  else
@@ -79,7 +79,7 @@ module RDF
79
79
  # @param [String] filename
80
80
  # @return [Class]
81
81
  #
82
- # @overload for(**options)
82
+ # @overload for(options = {})
83
83
  # Finds an RDF writer class based on various options.
84
84
  #
85
85
  # @param [Hash{Symbol => Object}] options
@@ -89,9 +89,15 @@ module RDF
89
89
  # @return [Class]
90
90
  #
91
91
  # @return [Class]
92
- def self.for(options = {})
93
- options = options.merge(has_writer: true) if options.is_a?(Hash)
94
- if format = self.format || Format.for(options)
92
+ def self.for(*arg, &block)
93
+ case arg.length
94
+ when 0 then arg = nil
95
+ when 1 then arg = arg.first
96
+ else
97
+ raise ArgumentError, "Format.for accepts zero or one argument, got #{arg.length}."
98
+ end
99
+ arg = arg.merge(has_writer: true) if arg.is_a?(Hash)
100
+ if format = self.format || Format.for(arg)
95
101
  format.writer
96
102
  end
97
103
  end
@@ -505,11 +511,11 @@ module RDF
505
511
  # @since 0.3.0
506
512
  def format_term(term, **options)
507
513
  case term
508
- when String then format_literal(RDF::Literal(term, options), options)
509
- when RDF::List then format_list(term, options)
510
- when RDF::Literal then format_literal(term, options)
511
- when RDF::URI then format_uri(term, options)
512
- when RDF::Node then format_node(term, options)
514
+ when String then format_literal(RDF::Literal(term, **options), **options)
515
+ when RDF::List then format_list(term, **options)
516
+ when RDF::Literal then format_literal(term, **options)
517
+ when RDF::URI then format_uri(term, **options)
518
+ when RDF::Node then format_node(term, **options)
513
519
  else nil
514
520
  end
515
521
  end
@@ -553,7 +559,7 @@ module RDF
553
559
  # @abstract
554
560
  # @since 0.2.3
555
561
  def format_list(value, **options)
556
- format_term(value.subject, options)
562
+ format_term(value.subject, **options)
557
563
  end
558
564
 
559
565
  protected
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.0.13
4
+ version: 3.1.0
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-10-31 00:00:00.000000000 Z
13
+ date: 2019-12-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: link_header
@@ -52,28 +52,28 @@ dependencies:
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '3.0'
55
+ version: '3.1'
56
56
  type: :development
57
57
  prerelease: false
58
58
  version_requirements: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '3.0'
62
+ version: '3.1'
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: rdf-turtle
65
65
  requirement: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '3.0'
69
+ version: '3.1'
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '3.0'
76
+ version: '3.1'
77
77
  - !ruby/object:Gem::Dependency
78
78
  name: rdf-vocab
79
79
  requirement: !ruby/object:Gem::Requirement
@@ -108,98 +108,98 @@ dependencies:
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: '2.0'
111
+ version: '2.1'
112
112
  type: :development
113
113
  prerelease: false
114
114
  version_requirements: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: '2.0'
118
+ version: '2.1'
119
119
  - !ruby/object:Gem::Dependency
120
120
  name: rspec
121
121
  requirement: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: '3.7'
125
+ version: '3.9'
126
126
  type: :development
127
127
  prerelease: false
128
128
  version_requirements: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: '3.7'
132
+ version: '3.9'
133
133
  - !ruby/object:Gem::Dependency
134
134
  name: rspec-its
135
135
  requirement: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: '1.2'
139
+ version: '1.3'
140
140
  type: :development
141
141
  prerelease: false
142
142
  version_requirements: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - "~>"
145
145
  - !ruby/object:Gem::Version
146
- version: '1.2'
146
+ version: '1.3'
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: webmock
149
149
  requirement: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - "~>"
152
152
  - !ruby/object:Gem::Version
153
- version: '3.1'
153
+ version: '3.7'
154
154
  type: :development
155
155
  prerelease: false
156
156
  version_requirements: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - "~>"
159
159
  - !ruby/object:Gem::Version
160
- version: '3.1'
160
+ version: '3.7'
161
161
  - !ruby/object:Gem::Dependency
162
162
  name: yard
163
163
  requirement: !ruby/object:Gem::Requirement
164
164
  requirements:
165
165
  - - "~>"
166
166
  - !ruby/object:Gem::Version
167
- version: 0.9.12
167
+ version: 0.9.20
168
168
  type: :development
169
169
  prerelease: false
170
170
  version_requirements: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - "~>"
173
173
  - !ruby/object:Gem::Version
174
- version: 0.9.12
174
+ version: 0.9.20
175
175
  - !ruby/object:Gem::Dependency
176
176
  name: faraday
177
177
  requirement: !ruby/object:Gem::Requirement
178
178
  requirements:
179
179
  - - "~>"
180
180
  - !ruby/object:Gem::Version
181
- version: '0.13'
181
+ version: '0.17'
182
182
  type: :development
183
183
  prerelease: false
184
184
  version_requirements: !ruby/object:Gem::Requirement
185
185
  requirements:
186
186
  - - "~>"
187
187
  - !ruby/object:Gem::Version
188
- version: '0.13'
188
+ version: '0.17'
189
189
  - !ruby/object:Gem::Dependency
190
190
  name: faraday_middleware
191
191
  requirement: !ruby/object:Gem::Requirement
192
192
  requirements:
193
193
  - - "~>"
194
194
  - !ruby/object:Gem::Version
195
- version: '0.12'
195
+ version: '0.13'
196
196
  type: :development
197
197
  prerelease: false
198
198
  version_requirements: !ruby/object:Gem::Requirement
199
199
  requirements:
200
200
  - - "~>"
201
201
  - !ruby/object:Gem::Version
202
- version: '0.12'
202
+ version: '0.13'
203
203
  description: RDF.rb is a pure-Ruby library for working with Resource Description Framework
204
204
  (RDF) data.
205
205
  email: public-rdf-ruby@w3.org
@@ -295,14 +295,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
295
295
  requirements:
296
296
  - - ">="
297
297
  - !ruby/object:Gem::Version
298
- version: 2.2.2
298
+ version: '2.4'
299
299
  required_rubygems_version: !ruby/object:Gem::Requirement
300
300
  requirements:
301
301
  - - ">="
302
302
  - !ruby/object:Gem::Version
303
303
  version: '0'
304
304
  requirements: []
305
- rubygems_version: 3.0.4
305
+ rubygems_version: 3.0.6
306
306
  signing_key:
307
307
  specification_version: 4
308
308
  summary: A Ruby library for working with Resource Description Framework (RDF) data.