rdf 3.0.13 → 3.1.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 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.