Skip to content

Commit 160e8b4

Browse files
authored
Merge pull request #378 from ConorSheehan1/lang_string_patch_squash
lang string patch
2 parents 3d7a594 + dacfb12 commit 160e8b4

2 files changed

Lines changed: 17 additions & 5 deletions

File tree

lib/rdf/model/literal.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,6 @@ def has_datatype?
362362
def valid?
363363
return false if language? && language.to_s !~ /^[a-zA-Z]+(-[a-zA-Z0-9]+)*$/
364364
return false if datatype? && datatype.invalid?
365-
return false if language? && !@language
366365
grammar = self.class.const_get(:GRAMMAR) rescue nil
367366
grammar.nil? || !!(value =~ grammar)
368367
end

spec/model_literal_spec.rb

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ def self.literal(selector)
1212
when :plain then ['Hello'.freeze]
1313
when :empty_lang then [''.freeze, {language: :en}]
1414
when :plain_lang then ['Hello'.freeze, {language: :en}]
15+
# langString language: must not contain spaces
16+
when :wrong_lang then ['WrongLang'.freeze, {language: "en f"}]
17+
# langString language: must be non-empty valid language
18+
when :unset_lang then ['NoLanguage'.freeze, {datatype: RDF::langString}]
1519
when :string then ['String.freeze', {datatype: RDF::XSD.string}]
1620
when :false then [false]
1721
when :true then [true]
@@ -33,6 +37,7 @@ def self.literals(*selector)
3337
when :all_simple then [:empty, :plain, :string].map {|s| literal(s)}
3438
when :all_plain_lang then [:empty_lang, :plain_lang].map {|s| literal(s)}
3539
when :all_native then [:false, :true, :int, :long, :double, :time, :date, :datetime].map {|s| literal(s)}
40+
when :all_invalid_lang then [:wrong_lang, :unset_lang].map {|s| literal(s)}
3641
when :all_plain then literals(:all_simple, :all_plain_lang)
3742
else literals(:all_plain, :all_native)
3843
end
@@ -347,12 +352,20 @@ def self.literals(*selector)
347352
end
348353
end
349354

350-
it "invalidates ['foo', datatype: 'rdf:langString']" do
351-
expect(RDF::Literal.new("foo", datatype: RDF::langString)).not_to be_valid
355+
literals(:all_invalid_lang).each do |args|
356+
it "invalidates #{args.inspect}" do
357+
expect(RDF::Literal.new(*args)).not_to be_valid
358+
end
352359
end
353360

354-
it "invalidates ['foo', :language => 'en f']" do
355-
expect(RDF::Literal.new("foo", language: "en f")).not_to be_valid
361+
# test to make sure extra validation is not needed
362+
context "when language? && !@language" do
363+
langString = RDF::Literal.new("hello", datatype: RDF::langString)
364+
it "should be invalid" do
365+
expect(langString.language?).to be true
366+
expect(!langString.instance_variable_get("@language")).to be true
367+
expect(langString).not_to be_valid
368+
end
356369
end
357370
end
358371

0 commit comments

Comments
 (0)