rdf-tabular 0.4.0 → 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.
Files changed (74) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +24 -5
  3. data/VERSION +1 -1
  4. data/etc/csvw.jsonld +135 -50
  5. data/lib/rdf/tabular/csvw.rb +215 -181
  6. data/lib/rdf/tabular/format.rb +8 -6
  7. data/lib/rdf/tabular/literal.rb +1 -1
  8. data/lib/rdf/tabular/metadata.rb +61 -80
  9. data/lib/rdf/tabular/reader.rb +18 -15
  10. data/lib/rdf/tabular/uax35.rb +143 -38
  11. data/spec/data/countries-minimal.json +38 -0
  12. data/spec/data/countries-minimal.ttl +36 -0
  13. data/spec/data/countries-standard.json +86 -0
  14. data/spec/data/countries-standard.ttl +75 -0
  15. data/spec/data/countries.csv +4 -0
  16. data/spec/data/countries.csv-minimal.json +16 -0
  17. data/spec/data/countries.csv-minimal.ttl +19 -0
  18. data/spec/data/countries.csv-standard.json +33 -0
  19. data/spec/data/countries.csv-standard.ttl +44 -0
  20. data/spec/data/countries.html +88 -0
  21. data/spec/data/countries.json +53 -0
  22. data/spec/data/countries_embed-minimal.json +38 -0
  23. data/spec/data/countries_embed-minimal.ttl +36 -0
  24. data/spec/data/countries_embed-standard.json +86 -0
  25. data/spec/data/countries_embed-standard.ttl +75 -0
  26. data/spec/data/countries_embed.html +88 -0
  27. data/spec/data/countries_html-minimal.json +38 -0
  28. data/spec/data/countries_html-minimal.ttl +36 -0
  29. data/spec/data/countries_html-standard.json +86 -0
  30. data/spec/data/countries_html-standard.ttl +75 -0
  31. data/spec/data/country-codes-and-names-minimal.json +19 -0
  32. data/spec/data/country-codes-and-names-minimal.ttl +22 -0
  33. data/spec/data/country-codes-and-names-standard.json +47 -0
  34. data/spec/data/country-codes-and-names-standard.ttl +45 -0
  35. data/spec/data/country-codes-and-names.csv +5 -0
  36. data/spec/data/country_slice.csv +4 -0
  37. data/spec/data/junior-roles.csv +3 -0
  38. data/spec/data/junior-roles.json +54 -0
  39. data/spec/data/roles-minimal.json +32 -0
  40. data/spec/data/roles-minimal.ttl +36 -0
  41. data/spec/data/roles-standard.json +56 -0
  42. data/spec/data/roles-standard.ttl +66 -0
  43. data/spec/data/roles.json +23 -0
  44. data/spec/data/senior-roles.csv +3 -0
  45. data/spec/data/senior-roles.json +52 -0
  46. data/spec/data/test232-metadata.json +10 -0
  47. data/spec/data/test232.csv +3 -0
  48. data/spec/data/tree-ops-atd.json +1 -0
  49. data/spec/data/tree-ops-ext-minimal.json +42 -0
  50. data/spec/data/tree-ops-ext-minimal.ttl +34 -0
  51. data/spec/data/tree-ops-ext-standard.json +93 -0
  52. data/spec/data/tree-ops-ext-standard.ttl +82 -0
  53. data/spec/data/tree-ops-ext.csv +4 -0
  54. data/spec/data/tree-ops-ext.json +81 -0
  55. data/spec/data/tree-ops-minimal.json +18 -0
  56. data/spec/data/tree-ops-minimal.ttl +14 -0
  57. data/spec/data/tree-ops-standard.json +44 -0
  58. data/spec/data/tree-ops-standard.ttl +44 -0
  59. data/spec/data/tree-ops-virtual-minimal.json +32 -0
  60. data/spec/data/tree-ops-virtual-minimal.ttl +25 -0
  61. data/spec/data/tree-ops-virtual-standard.json +49 -0
  62. data/spec/data/tree-ops-virtual-standard.ttl +49 -0
  63. data/spec/data/tree-ops-virtual.json +48 -0
  64. data/spec/data/tree-ops.csv +3 -0
  65. data/spec/data/tree-ops.csv-metadata.json +43 -0
  66. data/spec/data/tree-ops.html +54 -0
  67. data/spec/data/tree-ops.tsv +3 -0
  68. data/spec/format_spec.rb +5 -4
  69. data/spec/metadata_spec.rb +10 -16
  70. data/spec/suite_helper.rb +2 -2
  71. data/spec/suite_spec.rb +5 -6
  72. data/spec/uax35_spec.rb +239 -0
  73. metadata +149 -36
  74. data/lib/rdf/tabular/json.rb +0 -0
@@ -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
@@ -1136,7 +1130,7 @@ describe RDF::Tabular::Metadata do
1136
1130
  format: {"groupChar" => ";"},
1137
1131
  value: "123;;456.789",
1138
1132
  result: "123;;456.789",
1139
- errors: [/has repeating/]
1133
+ errors: [/does not match numeric pattern/]
1140
1134
  },
1141
1135
  "decimal with explicit decimalChar" => {
1142
1136
  base: "decimal",
@@ -1184,19 +1178,19 @@ describe RDF::Tabular::Metadata do
1184
1178
  "invalid nonPositiveInteger" => {base: "nonPositiveInteger", value: "1", errors: ["1 is not a valid nonPositiveInteger"]},
1185
1179
  "valid nonNegativeInteger" => {base: "nonNegativeInteger", value: "0"},
1186
1180
  "invalid nonNegativeInteger" => {base: "nonNegativeInteger", value: "-1", errors: ["-1 is not a valid nonNegativeInteger"]},
1187
- "valid double" => {base: "double", value: "1234.456E789"},
1181
+ "valid double" => {base: "double", value: "1234.456e789"},
1188
1182
  "invalid double" => {base: "double", value: "1z", errors: ["1z is not a valid double"]},
1189
- "NaN double" => {base: "double", value: "NaN"},
1183
+ "NaN double" => {base: "double", value: "NaN", result: "NaN"},
1190
1184
  "INF double" => {base: "double", value: "INF"},
1191
1185
  "-INF double" => {base: "double", value: "-INF"},
1192
- "valid number" => {base: "number", value: "1234.456E789"},
1186
+ "valid number" => {base: "number", value: "1234.456e789"},
1193
1187
  "invalid number" => {base: "number", value: "1z", errors: ["1z is not a valid number"]},
1194
- "NaN number" => {base: "number", value: "NaN"},
1188
+ "NaN number" => {base: "number", value: "NaN", result: "NaN"},
1195
1189
  "INF number" => {base: "number", value: "INF"},
1196
1190
  "-INF number" => {base: "number", value: "-INF"},
1197
- "valid float" => {base: "float", value: "1234.456E7"},
1191
+ "valid float" => {base: "float", value: "1234.456e7"},
1198
1192
  "invalid float" => {base: "float", value: "1z", errors: ["1z is not a valid float"]},
1199
- "NaN float" => {base: "float", value: "NaN"},
1193
+ "NaN float" => {base: "float", value: "NaN", result: "NaN"},
1200
1194
  "INF float" => {base: "float", value: "INF"},
1201
1195
  "-INF float" => {base: "float", value: "-INF"},
1202
1196
 
@@ -1327,7 +1321,7 @@ describe RDF::Tabular::Metadata do
1327
1321
  "valid NMTOKEN" => {base: "NMTOKEN", value: "someThing", result: RDF::Literal("someThing", datatype: RDF::XSD.NMTOKEN)},
1328
1322
 
1329
1323
  # Aliases
1330
- "number is alias for double" => {base: "number", value: "1234.456E789", result: RDF::Literal("1234.456E789", datatype: RDF::XSD.double)},
1324
+ "number is alias for double" => {base: "number", value: "1234.456e789", result: RDF::Literal("1234.456e789", datatype: RDF::XSD.double)},
1331
1325
  "binary is alias for base64Binary" => {base: "binary", value: "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g", result: RDF::Literal("Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g", datatype: RDF::XSD.base64Binary)},
1332
1326
  "datetime is alias for dateTime" => {base: "dateTime", value: "15-3-2015 1502", format: "d-M-yyyy HHmm", result: RDF::Literal("2015-03-15T15:02:00", datatype: RDF::XSD.dateTime)},
1333
1327
  "any is alias for anyAtomicType" => {base: "any", value: "some thing", result: RDF::Literal("some thing", datatype: RDF::XSD.anyAtomicType)},
@@ -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
 
@@ -18,18 +18,17 @@ describe RDF::Tabular::Reader do
18
18
  m.entries.each do |t|
19
19
  next if t.approval =~ /Rejected/
20
20
  specify "#{t.id.split("/").last}: #{t.name} - #{t.comment}" do
21
- pending "rdf#test158 should be isomorphic" if t.id.include?("rdf#test158")
21
+ pending "rdf#test283 literal normalization" if t.id.include?("rdf#test283")
22
22
  t.logger = RDF::Spec.logger
23
23
  t.logger.formatter = lambda {|severity, datetime, progname, msg| "#{severity}: #{msg}\n"}
24
24
  t.logger.info t.inspect
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
 
@@ -0,0 +1,239 @@
1
+ # encoding: UTF-8
2
+ $:.unshift "."
3
+ require 'spec_helper'
4
+
5
+ describe RDF::Tabular::UAX35 do
6
+ subject {"".extend(RDF::Tabular::UAX35)}
7
+
8
+ describe "parse_uax35_date" do
9
+ {
10
+ # Dates
11
+ "valid date yyyy-MM-dd" => {value: "2015-03-22", pattern: "yyyy-MM-dd", result: "2015-03-22"},
12
+ "valid date yyyyMMdd" => {value: "20150322", pattern: "yyyyMMdd", result: "2015-03-22"},
13
+ "valid date dd-MM-yyyy" => {value: "22-03-2015", pattern: "dd-MM-yyyy", result: "2015-03-22"},
14
+ "valid date d-M-yyyy" => {value: "22-3-2015", pattern: "d-M-yyyy", result: "2015-03-22"},
15
+ "valid date d-M-yy" => {value: "22-3-15", pattern: "d-M-yy", result: "2015-03-22"},
16
+ "valid date d-M-y" => {value: "22-3-15", pattern: "d-M-y", result: "2015-03-22"},
17
+ "valid date MM-dd-yyyy" => {value: "03-22-2015", pattern: "MM-dd-yyyy", result: "2015-03-22"},
18
+ "valid date M-d-yyyy" => {value: "3-22-2015", pattern: "M-d-yyyy", result: "2015-03-22"},
19
+ "valid date M-d-yy" => {value: "3-22-70", pattern: "M-d-yy", result: "1970-03-22"},
20
+ "valid date M-d-y" => {value: "3-22-70", pattern: "M-d-y", result: "1970-03-22"},
21
+ "valid date dd/MM/yyyy" => {value: "22/03/2015", pattern: "dd/MM/yyyy", result: "2015-03-22"},
22
+ "valid date d/M/yyyy" => {value: "22/3/2015", pattern: "d/M/yyyy", result: "2015-03-22"},
23
+ "valid date d/M/yy" => {value: "22/3/15", pattern: "d/M/yy", result: "2015-03-22"},
24
+ "valid date d/M/y" => {value: "22/3/15", pattern: "d/M/y", result: "2015-03-22"},
25
+ "valid date MM/dd/yyyy" => {value: "03/22/2015", pattern: "MM/dd/yyyy", result: "2015-03-22"},
26
+ "valid date M/d/yyyy" => {value: "3/22/2015", pattern: "M/d/yyyy", result: "2015-03-22"},
27
+ "valid date M/d/yy" => {value: "3/22/15", pattern: "M/d/yy", result: "2015-03-22"},
28
+ "valid date M/d/y" => {value: "3/22/15", pattern: "M/d/y", result: "2015-03-22"},
29
+ "valid date dd.MM.yyyy" => {value: "22.03.2015", pattern: "dd.MM.yyyy", result: "2015-03-22"},
30
+ "valid date d.M.yyyy" => {value: "22.3.2015", pattern: "d.M.yyyy", result: "2015-03-22"},
31
+ "valid date d.M.yy" => {value: "22.3.15", pattern: "d.M.yy", result: "2015-03-22"},
32
+ "valid date d.M.y" => {value: "22.3.15", pattern: "d.M.y", result: "2015-03-22"},
33
+ "valid date MM.dd.yyyy" => {value: "03.22.2015", pattern: "MM.dd.yyyy", result: "2015-03-22"},
34
+ "valid date M.d.yyyy" => {value: "3.22.2015", pattern: "M.d.yyyy", result: "2015-03-22"},
35
+ "valid date M.d.yy" => {value: "3.22.15", pattern: "M.d.yy", result: "2015-03-22"},
36
+ "valid date M.d.y" => {value: "3.22.15", pattern: "M.d.y", result: "2015-03-22"},
37
+
38
+ # Times
39
+ "valid time HH:mm:ss.S" => {value: "15:02:37.1", pattern: "HH:mm:ss.S", result: "15:02:37.1"},
40
+ "valid time HH:mm:ss" => {value: "15:02:37", pattern: "HH:mm:ss", result: "15:02:37"},
41
+ "valid time HHmmss" => {value: "150237", pattern: "HHmmss", result: "15:02:37"},
42
+ "valid time HH:mm" => {value: "15:02", pattern: "HH:mm", result: "15:02:00"},
43
+ "valid time HHmm" => {value: "1502", pattern: "HHmm", result: "15:02:00"},
44
+
45
+ # DateTimes
46
+ "valid dateTime yyyy-MM-ddTHH:mm:ss" => {value: "2015-03-15T15:02:37", pattern: "yyyy-MM-ddTHH:mm:ss", result: "2015-03-15T15:02:37"},
47
+ "valid dateTime yyyy-MM-ddTHH:mm:ss.S"=> {value: "2015-03-15T15:02:37.1", pattern: "yyyy-MM-ddTHH:mm:ss.S", result: "2015-03-15T15:02:37.1"},
48
+ "valid dateTime yyyy-MM-dd HH:mm:ss" => {value: "2015-03-15 15:02:37", pattern: "yyyy-MM-dd HH:mm:ss", result: "2015-03-15T15:02:37"},
49
+ "valid dateTime yyyyMMdd HHmmss" => {value: "20150315 150237", pattern: "yyyyMMdd HHmmss", result: "2015-03-15T15:02:37"},
50
+ "valid dateTime dd-MM-yyyy HH:mm" => {value: "15-03-2015 15:02", pattern: "dd-MM-yyyy HH:mm", result: "2015-03-15T15:02:00"},
51
+ "valid dateTime d-M-yyyy HHmm" => {value: "15-3-2015 1502", pattern: "d-M-yyyy HHmm", result: "2015-03-15T15:02:00"},
52
+ "valid dateTime yyyy-MM-ddTHH:mm" => {value: "2015-03-15T15:02", pattern: "yyyy-MM-ddTHH:mm", result: "2015-03-15T15:02:00"},
53
+ "valid dateTimeStamp d-M-yyyy HHmm X" => {value: "15-3-2015 1502 Z", pattern: "d-M-yyyy HHmm X", result: "2015-03-15T15:02:00Z"},
54
+ "valid datetime yyyy-MM-ddTHH:mm:ss" => {value: "2015-03-15T15:02:37", pattern: "yyyy-MM-ddTHH:mm:ss", result: "2015-03-15T15:02:37"},
55
+ "valid datetime yyyy-MM-dd HH:mm:ss" => {value: "2015-03-15 15:02:37", pattern: "yyyy-MM-dd HH:mm:ss", result: "2015-03-15T15:02:37"},
56
+ "valid datetime yyyyMMdd HHmmss" => {value: "20150315 150237", pattern: "yyyyMMdd HHmmss", result: "2015-03-15T15:02:37"},
57
+ "valid datetime dd-MM-yyyy HH:mm" => {value: "15-03-2015 15:02", pattern: "dd-MM-yyyy HH:mm", result: "2015-03-15T15:02:00"},
58
+ "valid datetime d-M-yyyy HHmm" => {value: "15-3-2015 1502", pattern: "d-M-yyyy HHmm", result: "2015-03-15T15:02:00"},
59
+ "valid datetime yyyy-MM-ddTHH:mm" => {value: "2015-03-15T15:02", pattern: "yyyy-MM-ddTHH:mm", result: "2015-03-15T15:02:00"},
60
+
61
+ # Timezones
62
+ "valid w/TZ yyyy-MM-ddX" => {value: "2015-03-22Z", pattern: "yyyy-MM-ddX", result: "2015-03-22Z"},
63
+ "valid w/TZ HH:mm:ssX" => {value: "15:02:37-05", pattern: "HH:mm:ssX", result: "15:02:37-05:00"},
64
+ "valid w/TZ yyyy-MM-dd HH:mm:ss X" => {value: "2015-03-15 15:02:37 +0800", pattern: "yyyy-MM-dd HH:mm:ss X", result: "2015-03-15T15:02:37+08:00"},
65
+ "valid w/TZ HHmm XX" => {value: "1502 +0800", pattern: "HHmm XX", result: "15:02:00+08:00"},
66
+ "valid w/TZ yyyy-MM-dd HH:mm:ss XX" => {value: "2015-03-15 15:02:37 -0800", pattern: "yyyy-MM-dd HH:mm:ss XX", result: "2015-03-15T15:02:37-08:00"},
67
+ "valid w/TZ HHmm XXX" => {value: "1502 +08:00", pattern: "HHmm XXX", result: "15:02:00+08:00"},
68
+ "valid w/TZ yyyy-MM-ddTHH:mm:ssXXX" => {value: "2015-03-15T15:02:37-05:00", pattern: "yyyy-MM-ddTHH:mm:ssXXX", result: "2015-03-15T15:02:37-05:00"},
69
+ "invalid w/TZ HH:mm:ssX" => {value: "15:02:37-05:00", pattern: "HH:mm:ssX", error: "15:02:37-05:00 does not match pattern HH:mm:ssX"},
70
+ "invalid w/TZ HH:mm:ssXX" => {value: "15:02:37-05", pattern: "HH:mm:ssXX", error: "15:02:37-05 does not match pattern HH:mm:ssXX"},
71
+ }.each do |name, props|
72
+ context name do
73
+ let(:base) {props[:base]}
74
+ let(:pattern) {props[:pattern]}
75
+ let(:value) {props[:value]}
76
+ let(:result) {props.fetch(:result, value)}
77
+ if props[:error]
78
+ it "finds error" do
79
+ expect {subject.parse_uax35_date(pattern, value)}.to raise_error(RDF::Tabular::UAX35::ParseError, props[:error])
80
+ end
81
+ else
82
+ it "generates #{props[:result] || props[:value]}" do
83
+ expect(subject.parse_uax35_date(pattern, value)).to eql result
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ describe "parse_uax35_number" do
91
+ {
92
+ # Numbers
93
+ "default no constraints" => {valid: %w(4)},
94
+ "default matching pattern" => {pattern: "000", valid: %w(123)},
95
+ "default explicit groupChar" => {groupChar: ";", valid: {"123;456.789" => "123456.789"}},
96
+ "default repeated groupChar" => {groupChar: ";", invalid: %w(123;;456.789)},
97
+ "default explicit decimalChar" => {decimalChar: ";", valid: {"123456;789" => "123456.789"}},
98
+ "default percent" => {groupChar: ",", valid: {"123456.789%" => "1234.56789"}},
99
+ "default per-mille" => {groupChar: ",", valid: {"123456.789‰" => "123.456789"}},
100
+
101
+ "0" => {pattern: "0", valid: %w(1 -1 12), invalid: %w(1.2)},
102
+ "00" => {pattern: "00", valid: %w(12 123), invalid: %w(1 1,2)},
103
+ "#" => {pattern: "#", valid: %w(1 12 123), invalid: %w(1.2)},
104
+ "##" => {pattern: "##", valid: %w(1 12 123), invalid: %w(1.2)},
105
+ "#0" => {pattern: "#0", valid: %w(1 12 123), invalid: %w(1.2)},
106
+ '0.0' => {pattern: "0.0", valid: %w(1.1 -1.1 12.1), invalid: %w(1.12)},
107
+ '0.00' => {pattern: '0.00', valid: %w(1.12 +1.12 12.12), invalid: %w(1.1 1.123)},
108
+ '0.#' => {pattern: '0.#', valid: %w(1 1.1 12.1), invalid: %w(1.12)},
109
+ '-0' => {pattern: '-0', valid: %w(-1 -10), invalid: %w(1 +1)},
110
+ '%000' => {pattern: '%000', valid: {"%123" => "1.23", "%+123" => "+1.23", "%1234" => "12.34"}, invalid: %w(%12 123%)},
111
+ '‰000' => {pattern: '‰000', valid: {"‰123" => "0.123", "‰+123" => "+0.123", "‰1234" => "1.234"}, invalid: %w(‰12 123‰)},
112
+ '000%' => {pattern: '000%', valid: {"123%" => "1.23", "+123%" => "+1.23", "1234%" => "12.34"}, invalid: %w(12% %123)},
113
+ '000‰' => {pattern: '000‰', valid: {"123‰" => "0.123", "+123‰" => "+0.123", "1234‰" => "1.234"}, invalid: %w(12‰ ‰123)},
114
+ '000.0%' => {pattern: '000.0%', valid: {"123.4%" => "1.234", "+123.4%" => "+1.234"}, invalid: %w(123.4‰ 123.4 1.234% 12.34% 123.45%)},
115
+
116
+ '###0.#####' => {pattern: '###0.#####', valid: %w(1 1.1 12345.12345), invalid: %w(1,234.1 1.123456)},
117
+ '###0.0000#' => {pattern: '###0.0000#', valid: %w(1.1234 1.12345 12345.12345), invalid: %w(1,234.1234 1.12)},
118
+ '00000.0000' => {pattern: '00000.0000', valid: %w(12345.1234), invalid: %w(1.2 1,234.123,4)},
119
+
120
+ '#0.0#E#0' => {pattern: '#0.0#E#0', valid: %w(1.2e3 12.34e56)},
121
+ '#0.0#E+#0' => {pattern: '#0.0#E+#0', valid: %w(1.2e+3 12.34e+56), invalid: %w(1.2e3 12.34e56)},
122
+ '#0.0#E#0%' => {pattern: '#0.0#E#0%', valid: {"1.2e3%" => "0.012e3", "12.34e56%" => "0.1234e56"}, invalid: %w(1.2e+3 12.34e+56 1.2e3 12.34e56)},
123
+
124
+ # Grouping
125
+ '#,##,##0' => {pattern: '#,##,##0', valid: {"1" => "1", "12" => "12", "123" => "123", "1,234" => "1234", "12,345" => "12345", "1,23,456" => "123456"}, invalid: %w(1,2 12,34)},
126
+ '#,##,#00' => {pattern: '#,##,#00', valid: {"12" => "12", "123" => "123", "1,234" => "1234", "12,345" => "12345"}, invalid: %w(1)},
127
+ '#,##,000' => {pattern: '#,##,000', valid: {"123" => "123", "1,234" => "1234", "12,345" => "12345"}, invalid: %w(1 12)},
128
+ '#,#0,000' => {pattern: '#,#0,000', valid: {"1,234" => "1234", "12,345" => "12345"}, invalid: %w(1 12 123)},
129
+ '#,00,000' => {pattern: '#,00,000', valid: {"12,345" => "12345"}, invalid: %w(1 12 123 1,234)},
130
+ '0,00,000' => {pattern: '0,00,000'},
131
+
132
+ '0.0##,###' => {pattern: '0.0##,###'},
133
+ '0.00#,###' => {pattern: '0.00#,###'},
134
+ '0.000,###' => {pattern: '0.000,###'},
135
+ '0.000,0##' => {pattern: '0.000,0##'},
136
+ '0.000,00#' => {pattern: '0.000,00#'},
137
+ '0.000,000' => {pattern: '0.000,000'},
138
+
139
+ # Jeni's
140
+ '##0' => {pattern: '##0', valid: %w(1 12 123 1234), invalid: %w(1,234 123.4)},
141
+ '#,#00' => {pattern: '#,#00', valid: {"12" => "12", "123" => "123", "1,234" => "1234", "1,234,567" => "1234567"}, invalid: %w(1 1234 12,34 12,34,567)},
142
+ '#0.#' => {pattern: '#0.#', valid: %w(1 1.2 1234.5), invalid: %w(12.34 1,234.5)},
143
+ '#0.0#,#' => {pattern: '#0.0#,#', valid: {"12.3" => "12.3", "12.34" => "12.34", "12.34,5" => "12.345"}, invalid: %w(1 12.345 12.34,56,7 12.34,567)},
144
+ }.each do |name, props|
145
+ context name do
146
+ let(:pattern) {props[:pattern]}
147
+ let(:groupChar) {props.fetch(:groupChar, ',')}
148
+ let(:decimalChar) {props.fetch(:decimalChar, '.')}
149
+
150
+ describe "valid" do
151
+ case props[:valid]
152
+ when Hash
153
+ props[:valid].each do |value, result|
154
+ it "with #{props[:pattern].inspect} #{value.inspect} => #{result.inspect}" do
155
+ expect(subject.parse_uax35_number(pattern, value, groupChar, decimalChar)).to eql result
156
+ end
157
+ end
158
+ when Array
159
+ props[:valid].each do |value|
160
+ it "with #{props[:pattern].inspect} #{value.inspect} => #{value.inspect}" do
161
+ expect(subject.parse_uax35_number(pattern, value, groupChar, decimalChar)).to eql value
162
+ end
163
+ end
164
+ end
165
+ end
166
+ describe "invalid" do
167
+ Array(props[:invalid]).each do |value|
168
+ it "with #{props[:pattern].inspect} #{value.inspect} invalid" do
169
+ expect {subject.parse_uax35_number(pattern, value, groupChar, decimalChar)}.to raise_error RDF::Tabular::UAX35::ParseError
170
+ end
171
+ end
172
+ end
173
+
174
+ it "recognizes bad pattern #{pattern.inspect}" do
175
+ expect{subject.parse_uax35_number(pattern, "", groupChar, decimalChar)}.to raise_error(ArgumentError)
176
+ end if props[:exception]
177
+ end
178
+ end
179
+ end
180
+
181
+ describe "#build_number_re" do
182
+ {
183
+ '0' => {valid: %w(1 -1 +1 12), invalid: %w(1.2), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,})(?<suffix>)$/},
184
+ '00' => {valid: %w(12 123), invalid: %w(1 1,2), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{2,})(?<suffix>)$/},
185
+ '#' => {valid: %w(1 12 123), invalid: %w(1.2), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{0,})(?<suffix>)$/},
186
+ '##' => {re: /^(?<prefix>[+-]?)(?<numeric_part>\d{0,})(?<suffix>)$/},
187
+ '#0' => {re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,})(?<suffix>)$/},
188
+
189
+ '0.0' => {valid: %w(1.1 -1.1 12.1), invalid: %w(1.12), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1})(?<suffix>)$/},
190
+ '0.00' => {valid: %w(1.12 +1.12 12.12), invalid: %w(1.1 1.123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{2})(?<suffix>)$/},
191
+ '0.#' => {valid: %w(1 1.1 12.1), invalid: %w(1.12), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}(?:\.\d{0,1})?)(?<suffix>)$/},
192
+ '-0' => {valid: %w(-1 -10), invalid: %w(1 +1), base: "decimal", re: /^(?<prefix>\-)(?<numeric_part>\d{1,})(?<suffix>)$/},
193
+ '%000' => {valid: %w(%123 %+123 %-123 %1234), invalid: %w(%12 123%), base: "decimal", re: /^(?<prefix>%[+-]?)(?<numeric_part>\d{3,})(?<suffix>)$/},
194
+ '‰000' => {valid: %w(‰123 ‰+123 ‰-123 ‰1234), invalid: %w(‰12 123‰), base: "decimal", re: /^(?<prefix>‰[+-]?)(?<numeric_part>\d{3,})(?<suffix>)$/},
195
+ '000%' => {valid: %w(123% +123% -123% 1234%), invalid: %w(12% %123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3,})(?<suffix>%)$/},
196
+ '000‰' => {valid: %w(123‰ +123‰ -123‰ 1234‰), invalid: %w(12‰ ‰123), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3,})(?<suffix>‰)$/},
197
+ '000.0%' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{3,}\.\d{1})(?<suffix>%)$/},
198
+
199
+ '###0.#####' => {valid: %w(1 1.1 12345.12345), invalid: %w(1,234.1 1.123456), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}(?:\.\d{0,5})?)(?<suffix>)$/},
200
+ '###0.0000#' => {valid: %w(1.1234 1.12345 12345.12345), invalid: %w(1,234.1234 1.12), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{4,5})(?<suffix>)$/},
201
+ '00000.0000' => {valid: %w(12345.1234), invalid: %w(1.2 1,234.123,4), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{5,}\.\d{4})(?<suffix>)$/},
202
+
203
+ '#0.0#E#0' => {base: "double", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1,2}E[+-]?\d{1,2})(?<suffix>)$/},
204
+ '#0.0#E+#0' => {base: "double", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1,2}E\+\d{1,2})(?<suffix>)$/},
205
+ '#0.0#E#0%' => {base: "double", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1,2}E[+-]?\d{1,2})(?<suffix>%)$/},
206
+
207
+ # Grouping
208
+ '#,##,##0' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:(?:(?:\d{1,2},)?(?:\d{2},)*\d)?\d)?\d{1})(?<suffix>)$/},
209
+ '#,##,#00' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:(?:\d{1,2},)?(?:\d{2},)*\d)?\d{2})(?<suffix>)$/},
210
+ '#,##,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:\d{1,2},)?(?:\d{2},)*\d{3})(?<suffix>)$/},
211
+ '#,#0,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:(?:\d{1,2},)?(?:\d{2},)*\d)?\d{1},\d{3})(?<suffix>)$/},
212
+ '#,00,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:\d{1,2},)?(?:\d{2},)*\d{2},\d{3})(?<suffix>)$/},
213
+ '0,00,000' => {base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:(?:\d{1,2},)?(?:\d{2},)*\d)?\d{1},\d{2},\d{3})(?<suffix>)$/},
214
+
215
+ '0.0##,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1}(?:\d(?:\d(?:,\d(?:\d(?:\d)?)?)?)?)?)(?<suffix>)$/},
216
+ '0.00#,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{2}(?:\d(?:,\d(?:\d(?:\d)?)?)?)?)(?<suffix>)$/},
217
+ '0.000,###' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{3}(?:,\d(?:\d(?:\d)?)?)?)(?<suffix>)$/},
218
+ '0.000,0##' => {base: "decimal", re:/^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{3},\d{1}(?:\d(?:\d)?)?)(?<suffix>)$/},
219
+ '0.000,00#' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{3},\d{2}(?:\d)?)(?<suffix>)$/},
220
+ '0.000,000' => {base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{3},\d{3})(?<suffix>)$/},
221
+
222
+ # Jeni's
223
+ '##0' => {valid: %w(1 12 123 1234), invalid: %w(1,234 123.4), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,})(?<suffix>)$/},
224
+ '#,#00' => {valid: %w(12 123 1,234 1,234,567), invalid: %w(1 1234 12,34 12,34,567), base: "integer", re: /^(?<prefix>[+-]?)(?<numeric_part>(?:(?:\d{1,3},)?(?:\d{3},)*\d)?\d{2})(?<suffix>)$/},
225
+ '#0.#' => {valid: %w(1 1.2 1234.5), invalid: %w(12.34 1,234.5), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}(?:\.\d{0,1})?)(?<suffix>)$/},
226
+ '#0.0#,#' => {valid: %w(12.3 12.34 12.34,5), invalid: %w(1 12.345 12.34,56,7 12.34,567), base: "decimal", re: /^(?<prefix>[+-]?)(?<numeric_part>\d{1,}\.\d{1}(?:\d(?:,\d)?)?)(?<suffix>)$/},
227
+ }.each do |pattern, props|
228
+ context pattern do
229
+ it "generates #{props[:re]} for #{pattern}" do
230
+ expect(subject.build_number_re(pattern, ",", ".")).to eql props[:re]
231
+ end if props[:re].is_a?(Regexp)
232
+
233
+ it "recognizes bad pattern #{pattern}" do
234
+ expect{subject.build_number_re(pattern, ",", ".")}.to raise_error(ArgumentError)
235
+ end if props[:re] == ArgumentError
236
+ end
237
+ end
238
+ end
239
+ end
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: 0.4.0
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: 2016-04-10 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,56 +36,56 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '2.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: '2.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: '2.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: '2.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: '2.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: '2.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
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '2.0'
81
+ version: '3.1'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '2.0'
88
+ version: '3.1'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: addressable
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -106,28 +106,28 @@ dependencies:
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '1.6'
109
+ version: '1.8'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '1.6'
116
+ version: '1.8'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: rspec
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '3.4'
123
+ version: '3.7'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '3.4'
130
+ version: '3.7'
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: rspec-its
133
133
  requirement: !ruby/object:Gem::Requirement
@@ -148,84 +148,84 @@ dependencies:
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '2.0'
151
+ version: '3.1'
152
152
  type: :development
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
156
  - - "~>"
157
157
  - !ruby/object:Gem::Version
158
- version: '2.0'
158
+ version: '3.1'
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: rdf-spec
161
161
  requirement: !ruby/object:Gem::Requirement
162
162
  requirements:
163
163
  - - "~>"
164
164
  - !ruby/object:Gem::Version
165
- version: '2.0'
165
+ version: '3.1'
166
166
  type: :development
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: '2.0'
172
+ version: '3.1'
173
173
  - !ruby/object:Gem::Dependency
174
174
  name: rdf-turtle
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '2.0'
179
+ version: '3.1'
180
180
  type: :development
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: '2.0'
186
+ version: '3.1'
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: sparql
189
189
  requirement: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: '2.0'
193
+ version: '3.1'
194
194
  type: :development
195
195
  prerelease: false
196
196
  version_requirements: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - "~>"
199
199
  - !ruby/object:Gem::Version
200
- version: '2.0'
200
+ version: '3.1'
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: webmock
203
203
  requirement: !ruby/object:Gem::Requirement
204
204
  requirements:
205
205
  - - "~>"
206
206
  - !ruby/object:Gem::Version
207
- version: '1.17'
207
+ version: '3.0'
208
208
  type: :development
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
212
  - - "~>"
213
213
  - !ruby/object:Gem::Version
214
- version: '1.17'
214
+ version: '3.0'
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: yard
217
217
  requirement: !ruby/object:Gem::Requirement
218
218
  requirements:
219
219
  - - "~>"
220
220
  - !ruby/object:Gem::Version
221
- version: '0.8'
221
+ version: 0.9.12
222
222
  type: :development
223
223
  prerelease: false
224
224
  version_requirements: !ruby/object:Gem::Requirement
225
225
  requirements:
226
226
  - - "~>"
227
227
  - !ruby/object:Gem::Version
228
- version: '0.8'
228
+ version: 0.9.12
229
229
  description: RDF::Tabular processes tabular data with metadata creating RDF or JSON
230
230
  output.
231
231
  email: public-rdf-ruby@w3.org
@@ -250,12 +250,68 @@ files:
250
250
  - lib/rdf/tabular.rb
251
251
  - lib/rdf/tabular/csvw.rb
252
252
  - lib/rdf/tabular/format.rb
253
- - lib/rdf/tabular/json.rb
254
253
  - lib/rdf/tabular/literal.rb
255
254
  - lib/rdf/tabular/metadata.rb
256
255
  - lib/rdf/tabular/reader.rb
257
256
  - lib/rdf/tabular/uax35.rb
258
257
  - lib/rdf/tabular/version.rb
258
+ - spec/data/countries-minimal.json
259
+ - spec/data/countries-minimal.ttl
260
+ - spec/data/countries-standard.json
261
+ - spec/data/countries-standard.ttl
262
+ - spec/data/countries.csv
263
+ - spec/data/countries.csv-minimal.json
264
+ - spec/data/countries.csv-minimal.ttl
265
+ - spec/data/countries.csv-standard.json
266
+ - spec/data/countries.csv-standard.ttl
267
+ - spec/data/countries.html
268
+ - spec/data/countries.json
269
+ - spec/data/countries_embed-minimal.json
270
+ - spec/data/countries_embed-minimal.ttl
271
+ - spec/data/countries_embed-standard.json
272
+ - spec/data/countries_embed-standard.ttl
273
+ - spec/data/countries_embed.html
274
+ - spec/data/countries_html-minimal.json
275
+ - spec/data/countries_html-minimal.ttl
276
+ - spec/data/countries_html-standard.json
277
+ - spec/data/countries_html-standard.ttl
278
+ - spec/data/country-codes-and-names-minimal.json
279
+ - spec/data/country-codes-and-names-minimal.ttl
280
+ - spec/data/country-codes-and-names-standard.json
281
+ - spec/data/country-codes-and-names-standard.ttl
282
+ - spec/data/country-codes-and-names.csv
283
+ - spec/data/country_slice.csv
284
+ - spec/data/junior-roles.csv
285
+ - spec/data/junior-roles.json
286
+ - spec/data/roles-minimal.json
287
+ - spec/data/roles-minimal.ttl
288
+ - spec/data/roles-standard.json
289
+ - spec/data/roles-standard.ttl
290
+ - spec/data/roles.json
291
+ - spec/data/senior-roles.csv
292
+ - spec/data/senior-roles.json
293
+ - spec/data/test232-metadata.json
294
+ - spec/data/test232.csv
295
+ - spec/data/tree-ops-atd.json
296
+ - spec/data/tree-ops-ext-minimal.json
297
+ - spec/data/tree-ops-ext-minimal.ttl
298
+ - spec/data/tree-ops-ext-standard.json
299
+ - spec/data/tree-ops-ext-standard.ttl
300
+ - spec/data/tree-ops-ext.csv
301
+ - spec/data/tree-ops-ext.json
302
+ - spec/data/tree-ops-minimal.json
303
+ - spec/data/tree-ops-minimal.ttl
304
+ - spec/data/tree-ops-standard.json
305
+ - spec/data/tree-ops-standard.ttl
306
+ - spec/data/tree-ops-virtual-minimal.json
307
+ - spec/data/tree-ops-virtual-minimal.ttl
308
+ - spec/data/tree-ops-virtual-standard.json
309
+ - spec/data/tree-ops-virtual-standard.ttl
310
+ - spec/data/tree-ops-virtual.json
311
+ - spec/data/tree-ops.csv
312
+ - spec/data/tree-ops.csv-metadata.json
313
+ - spec/data/tree-ops.html
314
+ - spec/data/tree-ops.tsv
259
315
  - spec/format_spec.rb
260
316
  - spec/matchers.rb
261
317
  - spec/metadata_spec.rb
@@ -263,6 +319,7 @@ files:
263
319
  - spec/spec_helper.rb
264
320
  - spec/suite_helper.rb
265
321
  - spec/suite_spec.rb
322
+ - spec/uax35_spec.rb
266
323
  homepage: http://github.com/ruby-rdf/rdf-tabular
267
324
  licenses:
268
325
  - Unlicense
@@ -275,24 +332,80 @@ required_ruby_version: !ruby/object:Gem::Requirement
275
332
  requirements:
276
333
  - - ">="
277
334
  - !ruby/object:Gem::Version
278
- version: '2.0'
335
+ version: 2.2.2
279
336
  required_rubygems_version: !ruby/object:Gem::Requirement
280
337
  requirements:
281
338
  - - ">="
282
339
  - !ruby/object:Gem::Version
283
340
  version: '0'
284
341
  requirements: []
285
- rubyforge_project:
286
- rubygems_version: 2.4.8
342
+ rubygems_version: 3.0.6
287
343
  signing_key:
288
344
  specification_version: 4
289
345
  summary: Tabular Data RDF Reader and JSON serializer.
290
346
  test_files:
291
- - spec/format_spec.rb
292
- - spec/matchers.rb
293
- - spec/metadata_spec.rb
294
- - spec/reader_spec.rb
295
347
  - spec/spec_helper.rb
296
- - spec/suite_helper.rb
348
+ - spec/metadata_spec.rb
349
+ - spec/matchers.rb
297
350
  - spec/suite_spec.rb
298
- has_rdoc: false
351
+ - spec/suite_helper.rb
352
+ - spec/reader_spec.rb
353
+ - spec/format_spec.rb
354
+ - spec/uax35_spec.rb
355
+ - spec/data/roles.json
356
+ - spec/data/countries.csv-minimal.ttl
357
+ - spec/data/countries_embed-standard.json
358
+ - spec/data/tree-ops-standard.json
359
+ - spec/data/countries.csv
360
+ - spec/data/countries_embed-minimal.json
361
+ - spec/data/countries-standard.json
362
+ - spec/data/countries_html-minimal.json
363
+ - spec/data/countries.csv-minimal.json
364
+ - spec/data/senior-roles.csv
365
+ - spec/data/roles-standard.ttl
366
+ - spec/data/countries_embed-standard.ttl
367
+ - spec/data/senior-roles.json
368
+ - spec/data/countries_html-minimal.ttl
369
+ - spec/data/junior-roles.csv
370
+ - spec/data/countries.csv-standard.ttl
371
+ - spec/data/tree-ops-ext-standard.json
372
+ - spec/data/countries_html-standard.ttl
373
+ - spec/data/tree-ops-minimal.ttl
374
+ - spec/data/junior-roles.json
375
+ - spec/data/roles-minimal.json
376
+ - spec/data/countries_html-standard.json
377
+ - spec/data/country_slice.csv
378
+ - spec/data/countries.csv-standard.json
379
+ - spec/data/tree-ops-virtual-minimal.ttl
380
+ - spec/data/countries.json
381
+ - spec/data/tree-ops.tsv
382
+ - spec/data/tree-ops-virtual.json
383
+ - spec/data/countries-minimal.json
384
+ - spec/data/tree-ops-atd.json
385
+ - spec/data/tree-ops-ext-minimal.ttl
386
+ - spec/data/tree-ops.csv
387
+ - spec/data/tree-ops-standard.ttl
388
+ - spec/data/tree-ops-virtual-standard.ttl
389
+ - spec/data/countries-minimal.ttl
390
+ - spec/data/tree-ops-virtual-standard.json
391
+ - spec/data/countries.html
392
+ - spec/data/tree-ops-ext-standard.ttl
393
+ - spec/data/country-codes-and-names-minimal.json
394
+ - spec/data/tree-ops.html
395
+ - spec/data/test232.csv
396
+ - spec/data/tree-ops-ext.json
397
+ - spec/data/roles-minimal.ttl
398
+ - spec/data/countries_embed.html
399
+ - spec/data/country-codes-and-names-standard.json
400
+ - spec/data/country-codes-and-names-minimal.ttl
401
+ - spec/data/countries_embed-minimal.ttl
402
+ - spec/data/roles-standard.json
403
+ - spec/data/tree-ops-virtual-minimal.json
404
+ - spec/data/tree-ops-minimal.json
405
+ - spec/data/tree-ops.csv-metadata.json
406
+ - spec/data/countries-standard.ttl
407
+ - spec/data/tree-ops-ext-minimal.json
408
+ - spec/data/country-codes-and-names-standard.ttl
409
+ - spec/data/test232-metadata.json
410
+ - spec/data/tree-ops-ext.csv
411
+ - spec/data/country-codes-and-names.csv