Skip to content

Commit 6e3cee4

Browse files
committed
Fix problem compacting a type map with three types.
1 parent 5fd15a6 commit 6e3cee4

File tree

4 files changed

+36
-8
lines changed

4 files changed

+36
-8
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ Note, the API method signatures differed in versions before 1.0, in that they al
334334

335335
## Dependencies
336336
* [Ruby](http://ruby-lang.org/) (>= 2.2.2)
337-
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 2.0)
337+
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 2.2)
338338
* [JSON](https://rubygems.org/gems/json) (>= 1.5)
339339

340340
## Installation

json-ld.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Gem::Specification.new do |gem|
2727

2828
gem.required_ruby_version = '>= 2.2.2'
2929
gem.requirements = []
30-
gem.add_runtime_dependency 'rdf', '~> 2.1'
30+
gem.add_runtime_dependency 'rdf', '~> 2.2'
3131
gem.add_runtime_dependency 'multi_json', '~> 1.12'
3232
gem.add_development_dependency 'linkeddata', '~> 2.0'
3333
gem.add_development_dependency 'jsonlint', '~> 0.2' unless RUBY_ENGINE == "jruby"
@@ -37,7 +37,7 @@ Gem::Specification.new do |gem|
3737
gem.add_development_dependency "rest-client", '~> 1.8'
3838
gem.add_development_dependency "rest-client-components", '~> 1.4'
3939
gem.add_development_dependency 'rdf-isomorphic', '~> 2.0'
40-
gem.add_development_dependency 'rdf-spec', '~> 2.0'
40+
gem.add_development_dependency 'rdf-spec', '~> 2.2'
4141
gem.add_development_dependency 'rdf-trig', '~> 2.0'
4242
gem.add_development_dependency 'rdf-turtle', '~> 2.0'
4343
gem.add_development_dependency 'rdf-vocab', '~> 2.0'

lib/json/ld/compact.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,11 @@ def compact(element, property: nil)
163163
value?(expanded_item) ? expanded_item['@value'] : compacted_item
164164
when '@type'
165165
type_prop = context.compact_iri('@type', vocab: true, quiet: true)
166-
map_key, types = Array(compacted_item[type_prop])
167-
if Array(types).empty?
168-
compacted_item.delete(type_prop)
169-
else
170-
compacted_item[type_prop] = types
166+
map_key, *types = Array(compacted_item[type_prop])
167+
case types.length
168+
when 0 then compacted_item.delete(type_prop)
169+
when 1 then compacted_item[type_prop] = types.first
170+
else compacted_item[type_prop] = types
171171
end
172172
compacted_item
173173
end

spec/compact_spec.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,34 @@
582582
}
583583
})
584584
},
585+
"Indexes to object already having multiple @type values" => {
586+
input: %([{
587+
"http://example/typemap": [
588+
{
589+
"@type": ["_:bar", "_:foo", "_:baz"],
590+
"http://example/label": [{"@value": "Object with @type _:bar"}]
591+
},
592+
{
593+
"@type": ["http://example.org/foo", "http://example.org/bar", "http://example.org/baz"],
594+
"http://example/label": [{"@value": "Object with @type <foo>"}]
595+
}
596+
]
597+
}]),
598+
context: %({
599+
"@vocab": "http://example/",
600+
"typemap": {"@container": "@type"}
601+
}),
602+
output: %({
603+
"@context": {
604+
"@vocab": "http://example/",
605+
"typemap": {"@container": "@type"}
606+
},
607+
"typemap": {
608+
"http://example.org/foo": {"@type": ["http://example.org/bar", "http://example.org/baz"], "label": "Object with @type <foo>"},
609+
"_:bar": {"@type": ["_:foo", "_:baz"], "label": "Object with @type _:bar"}
610+
}
611+
})
612+
},
585613
}.each_pair do |title, params|
586614
it(title) {run_compact(params)}
587615
end

0 commit comments

Comments
 (0)