rdf-tabular 2.2.2 → 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: 991a83da465e15379b8493093b925b1263cabe124ba3c2c55bc446de633e4c61
4
- data.tar.gz: 60e841e78b08b10359fe0ccb1dc56de230ea5bb01b5e3a194a4f506b8edbf1ba
3
+ metadata.gz: 0d840e057cd2f7f01a882004f99001f8cd1465592d1e2a50245f4d129ba3d16f
4
+ data.tar.gz: 7e719cc19261cd4a282d320cd94a79c0d32188418275f59b468b80f724b8a942
5
5
  SHA512:
6
- metadata.gz: 72cdd6adb1aa52c65130a800233cf460a73638df5d9db8892c22a17351ea72513493b42291616e3ed224c9a59c35788f0376362ea59ce3682758698f34cdc91b
7
- data.tar.gz: a49059f0de84ec21b955e755fb67f67380b30fb216a3f9508fb071b714e85602c4baa94a28e38c224ae4e85a0670962c5a0c6276fb1b67c3076b2bbefe11d7f1
6
+ metadata.gz: d7e6027430e8da553654e349ecad2903a730ff75d94a22b96c14406ec97c11333fedfe643e245b4aa695ac7b2fce49a3b285a5539d1bb604bf94a1170a2e126d
7
+ data.tar.gz: 8efb5950cbdfdd4f3e65aec2848c395110d1f29f74ffaf25e22333983a8e27ac1261ea92cde7961280d22af7d210899e9d40d9c12affe4ab58fabb3ecd6732d5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.2
1
+ 3.1.0
@@ -13,7 +13,7 @@ module RDF::Tabular
13
13
  ##
14
14
  # @param [Object] value
15
15
  # @option options [String] :lexical (nil)
16
- def initialize(value, options = {})
16
+ def initialize(value, **options)
17
17
  @datatype = options[:datatype] || DATATYPE
18
18
  @string = options[:lexical] if options.has_key?(:lexical)
19
19
  if value.is_a?(String)
@@ -136,15 +136,15 @@ module RDF::Tabular
136
136
  # see `RDF::Util::File.open_file` in RDF.rb and {new}
137
137
  # @yield [Metadata]
138
138
  # @raise [IOError] if file not found
139
- def self.open(path, options = {})
139
+ def self.open(path, **options)
140
140
  options = options.merge(
141
141
  headers: {
142
142
  'Accept' => 'application/ld+json, application/json'
143
143
  }
144
144
  )
145
145
  path = "file:" + path unless path =~ /^\w+:/
146
- RDF::Util::File.open_file(path, options) do |file|
147
- self.new(file, options.merge(base: path, filenames: path))
146
+ RDF::Util::File.open_file(path, **options) do |file|
147
+ self.new(file, **options.merge(base: path, filenames: path))
148
148
  end
149
149
  end
150
150
 
@@ -173,16 +173,16 @@ module RDF::Tabular
173
173
  # @option options [RDF::URI] :base
174
174
  # The Base URL to use when expanding the document. This overrides the value of `input` if it is a URL. If not specified and `input` is not an URL, the base URL defaults to the current document URL if in a browser context, or the empty string if there is no document context.
175
175
  # @return [Metadata]
176
- def self.for_input(input, options = {})
176
+ def self.for_input(input, **options)
177
177
  base = options[:base]
178
178
 
179
179
  # Use user metadata, if provided
180
180
  metadata = case options[:metadata]
181
181
  when Metadata then options[:metadata]
182
182
  when Hash
183
- Metadata.new(options[:metadata], options.merge(reason: "load user metadata: #{options[:metadata].inspect}"))
183
+ Metadata.new(options[:metadata], **options.merge(reason: "load user metadata: #{options[:metadata].inspect}"))
184
184
  when String, RDF::URI
185
- Metadata.open(options[:metadata], options.merge(filenames: options[:metadata], reason: "load user metadata: #{options[:metadata].inspect}"))
185
+ Metadata.open(options[:metadata], **options.merge(filenames: options[:metadata], reason: "load user metadata: #{options[:metadata].inspect}"))
186
186
  end
187
187
 
188
188
  # Search for metadata until found
@@ -191,13 +191,13 @@ module RDF::Tabular
191
191
  if !metadata && input.respond_to?(:links) &&
192
192
  link = input.links.find_link(%w(rel describedby))
193
193
  link_loc = RDF::URI(base).join(link.href).to_s
194
- md = Metadata.open(link_loc, options.merge(filenames: link_loc, reason: "load linked metadata: #{link_loc}"))
194
+ md = Metadata.open(link_loc, **options.merge(filenames: link_loc, reason: "load linked metadata: #{link_loc}"))
195
195
  if md
196
196
  # Metadata must describe file to be useful
197
197
  if md.describes_file?(base)
198
198
  metadata = md
199
199
  else
200
- log_warn("Found metadata at #{link_loc}, which does not describe #{base}, ignoring", options)
200
+ log_warn("Found metadata at #{link_loc}, which does not describe #{base}, ignoring", **options)
201
201
  end
202
202
  end
203
203
  end
@@ -206,28 +206,28 @@ module RDF::Tabular
206
206
  # If we still don't have metadata, load the site-wide configuration file and use templates found there as locations
207
207
  if !metadata && base
208
208
  templates = site_wide_config(base)
209
- log_debug("for_input", options) {"templates: #{templates.map(&:to_s).inspect}"}
209
+ log_debug("for_input", **options) {"templates: #{templates.map(&:to_s).inspect}"}
210
210
  locs = templates.map do |template|
211
211
  t = Addressable::Template.new(template)
212
212
  RDF::URI(base).join(t.expand(url: base).to_s)
213
213
  end
214
- log_debug("for_input", options) {"locs: #{locs.map(&:to_s).inspect}"}
214
+ log_debug("for_input", **options) {"locs: #{locs.map(&:to_s).inspect}"}
215
215
 
216
216
  locs.each do |loc|
217
217
  metadata ||= begin
218
- md = Metadata.open(loc, options.merge(filenames: loc, reason: "load found metadata: #{loc}"))
218
+ md = Metadata.open(loc, **options.merge(filenames: loc, reason: "load found metadata: #{loc}"))
219
219
  # Metadata must describe file to be useful
220
220
  if md
221
221
  # Metadata must describe file to be useful
222
222
  if md.describes_file?(base)
223
223
  md
224
224
  else
225
- log_warn("Found metadata at #{loc}, which does not describe #{base}, ignoring", options)
225
+ log_warn("Found metadata at #{loc}, which does not describe #{base}, ignoring", **options)
226
226
  nil
227
227
  end
228
228
  end
229
229
  rescue IOError
230
- log_debug("for_input", options) {"failed to load found metadata #{loc}: #{$!}"}
230
+ log_debug("for_input", **options) {"failed to load found metadata #{loc}: #{$!}"}
231
231
  nil
232
232
  end
233
233
  end
@@ -236,8 +236,8 @@ module RDF::Tabular
236
236
  # Return either the merge or user- and found-metadata, any of these, or an empty TableGroup
237
237
  metadata = case
238
238
  when metadata then metadata
239
- when base then TableGroup.new({"@context" => "http://www.w3.org/ns/csvw", tables: [{url: base}]}, options)
240
- else TableGroup.new({"@context" => "http://www.w3.org/ns/csvw", tables: [{url: nil}]}, options)
239
+ when base then TableGroup.new({"@context" => "http://www.w3.org/ns/csvw", tables: [{url: base}]}, **options)
240
+ else TableGroup.new({"@context" => "http://www.w3.org/ns/csvw", tables: [{url: nil}]}, **options)
241
241
  end
242
242
 
243
243
  # Make TableGroup, if not already
@@ -246,7 +246,7 @@ module RDF::Tabular
246
246
 
247
247
  ##
248
248
  # @private
249
- def self.new(input, options = {})
249
+ def self.new(input, **options)
250
250
  # Triveal case
251
251
  return input if input.is_a?(Metadata)
252
252
 
@@ -297,7 +297,7 @@ module RDF::Tabular
297
297
  end
298
298
 
299
299
  md = klass.allocate
300
- md.send(:initialize, object, options)
300
+ md.send(:initialize, object, **options)
301
301
  md
302
302
  rescue ::JSON::ParserError
303
303
  raise Error, "Expected input to be a JSON Object"
@@ -318,7 +318,7 @@ module RDF::Tabular
318
318
  # @option options [Boolean] :validate Strict metadata validation
319
319
  # @raise [Error]
320
320
  # @return [Metadata]
321
- def initialize(input, options = {})
321
+ def initialize(input, **options)
322
322
  @options = options.dup
323
323
 
324
324
  # Parent of this Metadata, if any
@@ -467,16 +467,16 @@ module RDF::Tabular
467
467
  object[:tableSchema] = case value
468
468
  when String
469
469
  link = context.base.join(value).to_s
470
- md = Schema.open(link, @options.merge(parent: self, context: nil, normalize: true))
470
+ md = Schema.open(link, **@options.merge(parent: self, context: nil, normalize: true))
471
471
  md[:@id] ||= link
472
472
  md
473
473
  when Hash
474
- Schema.new(value, @options.merge(parent: self, context: nil))
474
+ Schema.new(value, **@options.merge(parent: self, context: nil))
475
475
  when Schema
476
476
  value
477
477
  else
478
478
  log_warn "#{type} has invalid property 'tableSchema' (#{value.inspect}): expected a URL or object"
479
- Schema.new({}, @options.merge(parent: self, context: nil))
479
+ Schema.new({}, **@options.merge(parent: self, context: nil))
480
480
  end
481
481
  end
482
482
 
@@ -491,7 +491,7 @@ module RDF::Tabular
491
491
  when object[:dialect] then object[:dialect]
492
492
  when parent then parent.dialect
493
493
  when is_a?(Table) || is_a?(TableGroup)
494
- d = Dialect.new({}, @options.merge(parent: self, context: nil))
494
+ d = Dialect.new({}, **@options.merge(parent: self, context: nil))
495
495
  self.dialect = d unless self.parent
496
496
  d
497
497
  else
@@ -514,11 +514,11 @@ module RDF::Tabular
514
514
  @dialect = object[:dialect] = case value
515
515
  when String
516
516
  link = context.base.join(value).to_s
517
- md = Metadata.open(link, @options.merge(parent: self, context: nil, normalize: true))
517
+ md = Metadata.open(link, **@options.merge(parent: self, context: nil, normalize: true))
518
518
  md[:@id] ||= link
519
519
  md
520
520
  when Hash
521
- Dialect.new(value, @options.merge(parent: self, context: nil))
521
+ Dialect.new(value, **@options.merge(parent: self, context: nil))
522
522
  when Dialect
523
523
  value
524
524
  else
@@ -532,8 +532,8 @@ module RDF::Tabular
532
532
  # @raise [Error] if datatype is not valid
533
533
  def datatype=(value)
534
534
  val = case value
535
- when Hash then Datatype.new(value, @options.merge(parent: self))
536
- else Datatype.new({base: value}, @options.merge(parent: self))
535
+ when Hash then Datatype.new(value, **@options.merge(parent: self))
536
+ else Datatype.new({base: value}, **@options.merge(parent: self))
537
537
  end
538
538
 
539
539
  if val.valid? || value.is_a?(Hash)
@@ -872,7 +872,7 @@ module RDF::Tabular
872
872
  csv << data unless data.empty?
873
873
  end
874
874
  else
875
- csv = ::CSV.new(input, csv_options)
875
+ csv = ::CSV.new(input, **csv_options)
876
876
  # Skip skipRows and headerRowCount
877
877
  skipped = (dialect.skipRows.to_i + dialect.headerRowCount)
878
878
  (1..skipped).each {csv.shift}
@@ -891,7 +891,7 @@ module RDF::Tabular
891
891
  next
892
892
  end
893
893
  number += 1
894
- row = Row.new(data, self, number, number + skipped, @options)
894
+ row = Row.new(data, self, number, number + skipped, **@options)
895
895
  (self.object[:rows] ||= []) << row if @options[:validate] # Keep track of rows when validating
896
896
  yield(row)
897
897
  end
@@ -1036,7 +1036,7 @@ module RDF::Tabular
1036
1036
  end
1037
1037
  index = 0
1038
1038
  object_columns.all? do |cb|
1039
- ca = non_virtual_columns[index] || Column.new({}, @options)
1039
+ ca = non_virtual_columns[index] || Column.new({}, **@options)
1040
1040
  ta = ca.titles || {}
1041
1041
  tb = cb.titles || {}
1042
1042
  if !ca.object.has_key?(:name) && !cb.object.has_key?(:name) && ta.empty? && tb.empty?
@@ -1235,13 +1235,13 @@ module RDF::Tabular
1235
1235
  end
1236
1236
 
1237
1237
  # General setter for array properties
1238
- def set_array_value(key, value, klass, options={})
1238
+ def set_array_value(key, value, klass, **options)
1239
1239
  object[key] = case value
1240
1240
  when Array
1241
1241
  value.map do |v|
1242
1242
  case v
1243
1243
  when Hash
1244
- klass.new(v, @options.merge(options).merge(parent: self, context: nil))
1244
+ klass.new(v, **@options.merge(options).merge(parent: self, context: nil))
1245
1245
  else v
1246
1246
  end
1247
1247
  end
@@ -1282,11 +1282,11 @@ module RDF::Tabular
1282
1282
  class DebugContext
1283
1283
  include RDF::Util::Logger
1284
1284
  end
1285
- def self.log_debug(*args, &block)
1286
- DebugContext.new.log_debug(*args, &block)
1285
+ def self.log_debug(*args, **options, &block)
1286
+ DebugContext.new.log_debug(*args, **options, &block)
1287
1287
  end
1288
- def self.log_warn(*args)
1289
- DebugContext.new.log_warn(*args)
1288
+ def self.log_warn(*args, **options)
1289
+ DebugContext.new.log_warn(*args, **options)
1290
1290
  end
1291
1291
  end
1292
1292
 
@@ -1434,7 +1434,7 @@ module RDF::Tabular
1434
1434
  content['@context'] = object.delete(:@context) if object[:@context]
1435
1435
  ctx = @context
1436
1436
  remove_instance_variable(:@context) if instance_variables.include?(:@context)
1437
- tg = TableGroup.new(content, @options.merge(context: ctx, filenames: @filenames, base: base))
1437
+ tg = TableGroup.new(content, **@options.merge(context: ctx, filenames: @filenames, base: base))
1438
1438
  @parent = tg # Link from parent
1439
1439
  tg
1440
1440
  end
@@ -1489,7 +1489,7 @@ module RDF::Tabular
1489
1489
  number += 1
1490
1490
  case v
1491
1491
  when Hash
1492
- Column.new(v, @options.merge(
1492
+ Column.new(v, **@options.merge(
1493
1493
  table: (parent if parent.is_a?(Table)),
1494
1494
  parent: self,
1495
1495
  context: nil,
@@ -1621,8 +1621,8 @@ module RDF::Tabular
1621
1621
  def name
1622
1622
  self[:name] || if titles && (ts = titles[context.default_language || 'und'] || titles[self.lang || 'und'])
1623
1623
  n = Array(ts).first
1624
- n0 = URI.encode(n[0,1], /[^a-zA-Z0-9]/).encode("utf-8")
1625
- n1 = URI.encode(n[1..-1], /[^\w\.]/).encode("utf-8")
1624
+ n0 = RDF::URI.encode(n[0,1], /[^a-zA-Z0-9]/).encode("utf-8")
1625
+ n1 = RDF::URI.encode(n[1..-1], /[^\w\.]/).encode("utf-8")
1626
1626
  "#{n0}#{n1}"
1627
1627
  end || "_col.#{number}"
1628
1628
  end
@@ -1783,12 +1783,12 @@ module RDF::Tabular
1783
1783
  # @option options [String] :lang, language to set in table, if any
1784
1784
  # @return [Metadata] Tabular metadata
1785
1785
  # @see http://w3c.github.io/csvw/syntax/#parsing
1786
- def embedded_metadata(input, metadata, options = {})
1786
+ def embedded_metadata(input, metadata, **options)
1787
1787
  options = options.dup
1788
1788
  options.delete(:context) # Don't accidentally use a passed context
1789
1789
  # Normalize input to an IO object
1790
1790
  if input.is_a?(String)
1791
- return ::RDF::Util::File.open_file(input) {|f| embedded_metadata(f, metadata, options.merge(base: input.to_s))}
1791
+ return ::RDF::Util::File.open_file(input) {|f| embedded_metadata(f, metadata, **options.merge(base: input.to_s))}
1792
1792
  end
1793
1793
 
1794
1794
  table = {
@@ -1841,7 +1841,7 @@ module RDF::Tabular
1841
1841
  end
1842
1842
  end
1843
1843
  else
1844
- csv = ::CSV.new(input, csv_options)
1844
+ csv = ::CSV.new(input, **csv_options)
1845
1845
  (1..skipRows.to_i).each do
1846
1846
  value = csv.shift.join(delimiter) # Skip initial lines, these form comment annotations
1847
1847
  # Trim value
@@ -1876,7 +1876,7 @@ module RDF::Tabular
1876
1876
  log_debug("embedded_metadata") {"table: #{table.inspect}"}
1877
1877
  input.rewind if input.respond_to?(:rewind)
1878
1878
 
1879
- Table.new(table, options.merge(reason: "load embedded metadata: #{table['@id']}"))
1879
+ Table.new(table, **options.merge(reason: "load embedded metadata: #{table['@id']}"))
1880
1880
  end
1881
1881
  end
1882
1882
 
@@ -2026,7 +2026,7 @@ module RDF::Tabular
2026
2026
  # @param [Hash{Symbol => Object}] options ({})
2027
2027
  # @option options [Boolean] :validate check for PK/FK consistency
2028
2028
  # @return [Row]
2029
- def initialize(row, metadata, number, source_number, options = {})
2029
+ def initialize(row, metadata, number, source_number, **options)
2030
2030
  @table = metadata
2031
2031
  @number = number
2032
2032
  @sourceNumber = source_number
@@ -2058,13 +2058,13 @@ module RDF::Tabular
2058
2058
 
2059
2059
  # create column if necessary
2060
2060
  columns[index - skipColumns] ||=
2061
- Column.new({}, options.merge(table: metadata, parent: metadata.tableSchema, number: index + 1 - skipColumns))
2061
+ Column.new({}, **options.merge(table: metadata, parent: metadata.tableSchema, number: index + 1 - skipColumns))
2062
2062
 
2063
2063
  column = columns[index - skipColumns]
2064
2064
 
2065
2065
  @values << cell = Cell.new(metadata, column, self, value)
2066
2066
 
2067
- datatype = column.datatype || Datatype.new({base: "string"}, options.merge(parent: column))
2067
+ datatype = column.datatype || Datatype.new({base: "string"}, **options.merge(parent: column))
2068
2068
  value = value.gsub(/\r\n\t/, ' ') unless %w(string json xml html anyAtomicType).include?(datatype.base)
2069
2069
  value = value.strip.gsub(/\s+/, ' ') unless %w(string json xml html anyAtomicType normalizedString).include?(datatype.base)
2070
2070
  # if the resulting string is an empty string, apply the remaining steps to the string given by the default property
@@ -2110,7 +2110,7 @@ module RDF::Tabular
2110
2110
  # Map URLs for row
2111
2111
  @values.each_with_index do |cell, index|
2112
2112
  mapped_values = map_values.merge(
2113
- "_name" => URI.decode(cell.column.name),
2113
+ "_name" => CGI.unescape(cell.column.name),
2114
2114
  "_column" => cell.column.number,
2115
2115
  "_sourceColumn" => cell.column.sourceNumber
2116
2116
  )
@@ -63,7 +63,7 @@ module RDF::Tabular
63
63
  # @yieldparam [RDF::Reader] reader
64
64
  # @yieldreturn [void] ignored
65
65
  # @raise [RDF::ReaderError] if the CSV document cannot be loaded
66
- def initialize(input = $stdin, options = {}, &block)
66
+ def initialize(input = $stdin, **options, &block)
67
67
  super do
68
68
  # Base would be how we are to take this
69
69
  @options[:base] ||= base_uri.to_s if base_uri
@@ -89,7 +89,7 @@ module RDF::Tabular
89
89
  # If input is JSON, then the input is the metadata
90
90
  content_type = @input.respond_to?(:content_type) ? @input.content_type : ""
91
91
  if @options[:base] =~ /\.json(?:ld)?$/ || content_type =~ %r(application/(csvm\+|ld\+)?json)
92
- @metadata = Metadata.new(@input, @options.merge(filenames: @options[:base]))
92
+ @metadata = Metadata.new(@input, filenames: @options[:base], **@options)
93
93
  # If @metadata is for a Table, turn it into a TableGroup
94
94
  @metadata = @metadata.to_table_group if @metadata.is_a?(Table)
95
95
  @metadata.normalize!
@@ -102,7 +102,7 @@ module RDF::Tabular
102
102
  def script.content_type; "application/csvm+json"; end
103
103
  log_debug("Reader#initialize") {"Process HTML script block"}
104
104
  @input = script
105
- @metadata = Metadata.new(@input, @options.merge(filenames: @options[:base]))
105
+ @metadata = Metadata.new(@input, filenames: @options[:base], **@options)
106
106
  # If @metadata is for a Table, turn it into a TableGroup
107
107
  @metadata = @metadata.to_table_group if @metadata.is_a?(Table)
108
108
  @metadata.normalize!
@@ -119,7 +119,7 @@ module RDF::Tabular
119
119
  dialect.separator = "\t" if (input.content_type == "text/tsv" rescue nil)
120
120
  embed_options = @options.dup
121
121
  embed_options[:lang] = dialect_metadata.lang if dialect_metadata.lang
122
- embedded_metadata = dialect.embedded_metadata(input, @options[:metadata], embed_options)
122
+ embedded_metadata = dialect.embedded_metadata(input, @options[:metadata], **embed_options)
123
123
 
124
124
  if (@metadata = @options[:metadata]) && @metadata.tableSchema
125
125
  @metadata.verify_compatible!(embedded_metadata)
@@ -136,7 +136,7 @@ module RDF::Tabular
136
136
  else
137
137
  # It's tabluar data. Find metadata and proceed as if it was specified in the first place
138
138
  @options[:original_input] = @input unless @options[:metadata]
139
- @input = @metadata = Metadata.for_input(@input, @options).normalize!
139
+ @input = @metadata = Metadata.for_input(@input, **@options).normalize!
140
140
  end
141
141
 
142
142
  log_debug("Reader#initialize") {"input: #{input}, metadata: #{metadata.inspect}"}
@@ -186,7 +186,7 @@ module RDF::Tabular
186
186
  if options[:original_input] && !input.describes_file?(options[:base_uri])
187
187
  table_resource = RDF::Node.new
188
188
  add_statement(0, table_group, CSVW.table, table_resource) unless minimal?
189
- Reader.new(options[:original_input], options.merge(
189
+ Reader.new(options[:original_input], **options.merge(
190
190
  metadata: input.tables.first,
191
191
  base: input.tables.first.url,
192
192
  no_found_metadata: true,
@@ -205,7 +205,7 @@ module RDF::Tabular
205
205
  end.flatten.compact
206
206
  table_resource = table.id || RDF::Node.new
207
207
  add_statement(0, table_group, CSVW.table, table_resource) unless minimal?
208
- Reader.open(table.url, options.merge(
208
+ Reader.open(table.url, **options.merge(
209
209
  metadata: table,
210
210
  base: table.url,
211
211
  no_found_metadata: true,
@@ -421,9 +421,9 @@ module RDF::Tabular
421
421
 
422
422
  res = if io
423
423
  ::JSON::dump_default_options = json_state
424
- ::JSON.dump(self.send(hash_fn, options), io)
424
+ ::JSON.dump(self.send(hash_fn, **options), io)
425
425
  else
426
- hash = self.send(hash_fn, options)
426
+ hash = self.send(hash_fn, **options)
427
427
  ::JSON.generate(hash, json_state)
428
428
  end
429
429
 
@@ -443,7 +443,7 @@ module RDF::Tabular
443
443
  #
444
444
  # @param [Hash{Symbol => Object}] options
445
445
  # @return [Hash, Array]
446
- def to_hash(options = {})
446
+ def to_hash(**options)
447
447
  # Construct metadata from that passed from file open, along with information from the file.
448
448
  if input.is_a?(Metadata)
449
449
  log_debug("each_statement: metadata") {input.inspect}
@@ -467,13 +467,13 @@ module RDF::Tabular
467
467
  table_group['tables'] = tables
468
468
 
469
469
  if options[:original_input] && !input.describes_file?(options[:base_uri])
470
- Reader.new(options[:original_input], options.merge(
470
+ Reader.new(options[:original_input], **options.merge(
471
471
  metadata: input.tables.first,
472
472
  base: input.tables.first.url,
473
473
  minimal: minimal?,
474
474
  no_found_metadata: true,
475
475
  )) do |r|
476
- case t = r.to_hash(options)
476
+ case t = r.to_hash(**options)
477
477
  when Array then tables += t unless input.tables.first.suppressOutput
478
478
  when Hash then tables << t unless input.tables.first.suppressOutput
479
479
  end
@@ -481,13 +481,13 @@ module RDF::Tabular
481
481
  else
482
482
  input.each_table do |table|
483
483
  next if table.suppressOutput && !validate?
484
- Reader.open(table.url, options.merge(
484
+ Reader.open(table.url, **options.merge(
485
485
  metadata: table,
486
486
  base: table.url,
487
487
  minimal: minimal?,
488
488
  no_found_metadata: true,
489
489
  )) do |r|
490
- case t = r.to_hash(options)
490
+ case t = r.to_hash(**options)
491
491
  when Array then tables += t unless table.suppressOutput
492
492
  when Hash then tables << t unless table.suppressOutput
493
493
  end
@@ -560,7 +560,7 @@ module RDF::Tabular
560
560
  co['@id'] = subject.to_s unless subject == 'null'
561
561
  prop = case cell.propertyUrl
562
562
  when RDF.type then '@type'
563
- when nil then URI.decode(column.name) # Use URI-decoded name
563
+ when nil then CGI.unescape(column.name) # Use URI-decoded name
564
564
  else
565
565
  # Compact the property to a term or prefixed name
566
566
  metadata.context.compact_iri(cell.propertyUrl, vocab: true)
@@ -838,12 +838,6 @@ describe RDF::Tabular::Metadata do
838
838
  ":type Schema" => [{}, {type: :Schema}, RDF::Tabular::Schema],
839
839
  ":type Column" => [{}, {type: :Column}, RDF::Tabular::Column],
840
840
  ":type Dialect" => [{}, {type: :Dialect}, RDF::Tabular::Dialect],
841
- "@type TableGroup" => [{}, {"@type" => "TableGroup"}, RDF::Tabular::TableGroup],
842
- "@type Table" => [{"@type" => "Table"}, RDF::Tabular::Table],
843
- "@type Template" => [{"@type" => "Template"}, RDF::Tabular::Transformation],
844
- "@type Schema" => [{"@type" => "Schema"}, RDF::Tabular::Schema],
845
- "@type Column" => [{"@type" => "Column"}, RDF::Tabular::Column],
846
- "@type Dialect" => [{"@type" => "Dialect"}, RDF::Tabular::Dialect],
847
841
  "tables TableGroup" => [{"tables" => []}, RDF::Tabular::TableGroup],
848
842
  "dialect Table" => [{"dialect" => {}}, RDF::Tabular::Table],
849
843
  "tableSchema Table" => [{"tableSchema" => {}}, RDF::Tabular::Table],
@@ -874,7 +868,7 @@ describe RDF::Tabular::Metadata do
874
868
  options ||= {}
875
869
  options[:logger] = logger
876
870
  options[:context] ||= 'http://www.w3.org/ns/csvw'
877
- expect(described_class.new(input, options)).to be_a(klass)
871
+ expect(described_class.new(input, **options)).to be_a(klass)
878
872
  expect(logger.to_s).not_to match(/ERROR|WARN/)
879
873
  end
880
874
  end
@@ -1379,7 +1373,7 @@ describe RDF::Tabular::Metadata do
1379
1373
  context "Unsupported datatypes" do
1380
1374
  %w(anyType anySimpleType ENTITIES IDREFS NMTOKENS ENTITY ID IDREF NOTATAION foo).each do |base|
1381
1375
  it "detects #{base} as unsupported" do
1382
- md = RDF::Tabular::Table.new({
1376
+ RDF::Tabular::Table.new({
1383
1377
  url: "http://example.com/table.csv",
1384
1378
  tableSchema: {
1385
1379
  columns: [{
@@ -23,7 +23,7 @@ module RDF::Util
23
23
  # HTTP Request headers.
24
24
  # @return [IO] File stream
25
25
  # @yield [IO] File stream
26
- def self.open_file(filename_or_url, options = {}, &block)
26
+ def self.open_file(filename_or_url, **options, &block)
27
27
  case
28
28
  when filename_or_url.to_s =~ /^file:/
29
29
  path = filename_or_url.to_s[5..-1]
@@ -73,7 +73,7 @@ module RDF::Util
73
73
  end
74
74
  end
75
75
  else
76
- original_open_file(filename_or_url, options) do |remote_document|
76
+ original_open_file(filename_or_url, **options) do |remote_document|
77
77
  # Add Link header, if necessary
78
78
  remote_document.headers[:link] = options[:httpLink] if options[:httpLink]
79
79
 
@@ -25,11 +25,10 @@ describe RDF::Tabular::Reader do
25
25
  t.logger.info "source:\n#{t.input}"
26
26
  begin
27
27
  RDF::Tabular::Reader.open(t.action,
28
- t.reader_options.merge(
29
- base_uri: t.base,
30
- validate: t.validation?,
31
- logger: t.logger,
32
- )
28
+ base_uri: t.base,
29
+ validate: t.validation?,
30
+ logger: t.logger,
31
+ **t.reader_options
33
32
  ) do |reader|
34
33
  expect(reader).to be_a RDF::Reader
35
34
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf-tabular
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregg Kellogg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-20 00:00:00.000000000 Z
11
+ date: 2019-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcp47
@@ -36,62 +36,56 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '3.0'
39
+ version: '3.1'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '3.0'
46
+ version: '3.1'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdf-vocab
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '3.0'
53
+ version: '3.1'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '3.0'
60
+ version: '3.1'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rdf-xsd
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '3.0'
67
+ version: '3.1'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '3.0'
74
+ version: '3.1'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: json-ld
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '2.1'
82
- - - "<"
79
+ - - "~>"
83
80
  - !ruby/object:Gem::Version
84
- version: '4.0'
81
+ version: '3.1'
85
82
  type: :runtime
86
83
  prerelease: false
87
84
  version_requirements: !ruby/object:Gem::Requirement
88
85
  requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- version: '2.1'
92
- - - "<"
86
+ - - "~>"
93
87
  - !ruby/object:Gem::Version
94
- version: '4.0'
88
+ version: '3.1'
95
89
  - !ruby/object:Gem::Dependency
96
90
  name: addressable
97
91
  requirement: !ruby/object:Gem::Requirement
@@ -154,56 +148,56 @@ dependencies:
154
148
  requirements:
155
149
  - - "~>"
156
150
  - !ruby/object:Gem::Version
157
- version: '3.0'
151
+ version: '3.1'
158
152
  type: :development
159
153
  prerelease: false
160
154
  version_requirements: !ruby/object:Gem::Requirement
161
155
  requirements:
162
156
  - - "~>"
163
157
  - !ruby/object:Gem::Version
164
- version: '3.0'
158
+ version: '3.1'
165
159
  - !ruby/object:Gem::Dependency
166
160
  name: rdf-spec
167
161
  requirement: !ruby/object:Gem::Requirement
168
162
  requirements:
169
163
  - - "~>"
170
164
  - !ruby/object:Gem::Version
171
- version: '3.0'
165
+ version: '3.1'
172
166
  type: :development
173
167
  prerelease: false
174
168
  version_requirements: !ruby/object:Gem::Requirement
175
169
  requirements:
176
170
  - - "~>"
177
171
  - !ruby/object:Gem::Version
178
- version: '3.0'
172
+ version: '3.1'
179
173
  - !ruby/object:Gem::Dependency
180
174
  name: rdf-turtle
181
175
  requirement: !ruby/object:Gem::Requirement
182
176
  requirements:
183
177
  - - "~>"
184
178
  - !ruby/object:Gem::Version
185
- version: '3.0'
179
+ version: '3.1'
186
180
  type: :development
187
181
  prerelease: false
188
182
  version_requirements: !ruby/object:Gem::Requirement
189
183
  requirements:
190
184
  - - "~>"
191
185
  - !ruby/object:Gem::Version
192
- version: '3.0'
186
+ version: '3.1'
193
187
  - !ruby/object:Gem::Dependency
194
188
  name: sparql
195
189
  requirement: !ruby/object:Gem::Requirement
196
190
  requirements:
197
191
  - - "~>"
198
192
  - !ruby/object:Gem::Version
199
- version: '3.0'
193
+ version: '3.1'
200
194
  type: :development
201
195
  prerelease: false
202
196
  version_requirements: !ruby/object:Gem::Requirement
203
197
  requirements:
204
198
  - - "~>"
205
199
  - !ruby/object:Gem::Version
206
- version: '3.0'
200
+ version: '3.1'
207
201
  - !ruby/object:Gem::Dependency
208
202
  name: webmock
209
203
  requirement: !ruby/object:Gem::Requirement
@@ -256,7 +250,6 @@ files:
256
250
  - lib/rdf/tabular.rb
257
251
  - lib/rdf/tabular/csvw.rb
258
252
  - lib/rdf/tabular/format.rb
259
- - lib/rdf/tabular/json.rb
260
253
  - lib/rdf/tabular/literal.rb
261
254
  - lib/rdf/tabular/metadata.rb
262
255
  - lib/rdf/tabular/reader.rb
@@ -346,7 +339,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
346
339
  - !ruby/object:Gem::Version
347
340
  version: '0'
348
341
  requirements: []
349
- rubygems_version: 3.0.3
342
+ rubygems_version: 3.0.6
350
343
  signing_key:
351
344
  specification_version: 4
352
345
  summary: Tabular Data RDF Reader and JSON serializer.
File without changes