Skip to content

Commit 58c0784

Browse files
committed
Finish 1.1.2
2 parents df5303b + e8b0280 commit 58c0784

File tree

5 files changed

+91
-51
lines changed

5 files changed

+91
-51
lines changed

.gemspec

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

2828
gem.required_ruby_version = '>= 1.9.2'
2929
gem.requirements = []
30-
gem.add_runtime_dependency 'rdf', '>= 1.0.8'
31-
gem.add_development_dependency 'equivalent-xml' , '>= 0.2.8'
32-
gem.add_development_dependency 'open-uri-cached', '>= 0.0.5'
33-
gem.add_development_dependency 'yard' , '>= 0.8.3'
34-
gem.add_development_dependency 'rspec', '>= 2.12.0'
35-
gem.add_development_dependency 'rdf-spec', '>= 1.0'
36-
gem.add_development_dependency 'rdf-turtle', '>= 1.0.7'
37-
gem.add_development_dependency 'rdf-trig', '>= 1.0.1'
38-
gem.add_development_dependency 'rdf-isomorphic'
39-
gem.add_development_dependency 'rdf-xsd'
30+
gem.add_runtime_dependency 'rdf', '~> 1.1'
31+
gem.add_development_dependency 'equivalent-xml' , '~> 0.4'
32+
gem.add_development_dependency 'open-uri-cached', '~> 0.0', '>= 0.0.5'
33+
gem.add_development_dependency 'yard' , '~> 0.8'
34+
gem.add_development_dependency 'rspec', '~> 2.14'
35+
gem.add_development_dependency 'rdf-spec', '~> 1.1'
36+
gem.add_development_dependency 'rdf-turtle', '~> 1.1'
37+
gem.add_development_dependency 'rdf-trig', '~> 1.1'
38+
gem.add_development_dependency 'rdf-isomorphic', '~> 1.1'
39+
gem.add_development_dependency 'rdf-xsd', '~> 1.1'
4040

4141
gem.post_install_message = nil
4242
end

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,8 @@ Install with `gem install json-ld`
216216

217217
`RDF::GRAPH#dump` can also take a `:context` option to use a separately defined context
218218

219+
As JSON-LD may come from many different sources, included as an embedded script tag within an HTML document, the RDF Reader will strip input before the leading `{` or `[` and after the trailing `}` or `]`.
220+
219221
## Documentation
220222
Full documentation available on [RubyDoc](http://rubydoc.info/gems/json-ld/file/README.md)
221223

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.1
1+
1.1.2

lib/json/ld/reader.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ def initialize(input = $stdin, options = {}, &block)
3030
super do
3131
@options[:base] ||= base_uri.to_s if base_uri
3232
begin
33+
# Trim non-JSON stuff in script.
34+
input = input.read if input.respond_to?(:read)
35+
input = input.to_s.sub(%r(\A[^{\[]*)m, '').sub(%r([^}\]]*\Z)m, '')
3336
@doc = JSON.load(input)
3437
rescue JSON::ParserError => e
3538
raise RDF::ReaderError, "Failed to parse input document: #{e.message}" if validate?

spec/reader_spec.rb

Lines changed: 75 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -26,52 +26,87 @@
2626
end
2727

2828
context :interface do
29-
subject { %q({
30-
"@context": {"foaf": "http://xmlns.com/foaf/0.1/"},
31-
"@id": "_:bnode1",
32-
"@type": "foaf:Person",
33-
"foaf:homepage": "http://example.com/bob/",
34-
"foaf:name": "Bob"
35-
}) }
29+
{
30+
plain: %q({
31+
"@context": {"foaf": "http://xmlns.com/foaf/0.1/"},
32+
"@id": "_:bnode1",
33+
"@type": "foaf:Person",
34+
"foaf:homepage": "http://example.com/bob/",
35+
"foaf:name": "Bob"
36+
}),
37+
leading_comment: %q(
38+
// A comment before content
39+
{
40+
"@context": {"foaf": "http://xmlns.com/foaf/0.1/"},
41+
"@id": "_:bnode1",
42+
"@type": "foaf:Person",
43+
"foaf:homepage": "http://example.com/bob/",
44+
"foaf:name": "Bob"
45+
}
46+
),
47+
script: %q(<script type="application/ld+json">
48+
{
49+
"@context": {"foaf": "http://xmlns.com/foaf/0.1/"},
50+
"@id": "_:bnode1",
51+
"@type": "foaf:Person",
52+
"foaf:homepage": "http://example.com/bob/",
53+
"foaf:name": "Bob"
54+
}
55+
</script>),
56+
script_comments: %q(<script type="application/ld+json">
57+
// A comment before content
58+
{
59+
"@context": {"foaf": "http://xmlns.com/foaf/0.1/"},
60+
"@id": "_:bnode1",
61+
"@type": "foaf:Person",
62+
"foaf:homepage": "http://example.com/bob/",
63+
"foaf:name": "Bob"
64+
}
65+
</script>),
66+
}.each do |variant, src|
67+
context variant do
68+
subject {src}
3669

37-
describe "#initialize" do
38-
it "yields reader given string" do
39-
inner = double("inner")
40-
inner.should_receive(:called).with(JSON::LD::Reader)
41-
JSON::LD::Reader.new(subject) do |reader|
42-
inner.called(reader.class)
43-
end
44-
end
70+
describe "#initialize" do
71+
it "yields reader given string" do
72+
inner = double("inner")
73+
inner.should_receive(:called).with(JSON::LD::Reader)
74+
JSON::LD::Reader.new(subject) do |reader|
75+
inner.called(reader.class)
76+
end
77+
end
4578

46-
it "yields reader given IO" do
47-
inner = double("inner")
48-
inner.should_receive(:called).with(JSON::LD::Reader)
49-
JSON::LD::Reader.new(StringIO.new(subject)) do |reader|
50-
inner.called(reader.class)
51-
end
52-
end
79+
it "yields reader given IO" do
80+
inner = double("inner")
81+
inner.should_receive(:called).with(JSON::LD::Reader)
82+
JSON::LD::Reader.new(StringIO.new(subject)) do |reader|
83+
inner.called(reader.class)
84+
end
85+
end
5386

54-
it "returns reader" do
55-
JSON::LD::Reader.new(subject).should be_a(JSON::LD::Reader)
56-
end
57-
end
87+
it "returns reader" do
88+
JSON::LD::Reader.new(subject).should be_a(JSON::LD::Reader)
89+
end
90+
end
5891

59-
describe "#each_statement" do
60-
it "yields statements" do
61-
inner = double("inner")
62-
inner.should_receive(:called).with(RDF::Statement).exactly(3)
63-
JSON::LD::Reader.new(subject).each_statement do |statement|
64-
inner.called(statement.class)
92+
describe "#each_statement" do
93+
it "yields statements" do
94+
inner = double("inner")
95+
inner.should_receive(:called).with(RDF::Statement).exactly(3)
96+
JSON::LD::Reader.new(subject).each_statement do |statement|
97+
inner.called(statement.class)
98+
end
99+
end
65100
end
66-
end
67-
end
68101

69-
describe "#each_triple" do
70-
it "yields statements" do
71-
inner = double("inner")
72-
inner.should_receive(:called).exactly(3)
73-
JSON::LD::Reader.new(subject).each_triple do |subject, predicate, object|
74-
inner.called(subject.class, predicate.class, object.class)
102+
describe "#each_triple" do
103+
it "yields statements" do
104+
inner = double("inner")
105+
inner.should_receive(:called).exactly(3)
106+
JSON::LD::Reader.new(subject).each_triple do |subject, predicate, object|
107+
inner.called(subject.class, predicate.class, object.class)
108+
end
109+
end
75110
end
76111
end
77112
end

0 commit comments

Comments
 (0)