Skip to content

Commit

Permalink
fixed support of multiple objects for same predicate
Browse files Browse the repository at this point in the history
  • Loading branch information
elf Pavlik committed Feb 28, 2014
1 parent 71c6baf commit e2ac0ff
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 9 deletions.
19 changes: 11 additions & 8 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
});
stream.end();
});
};
}

graphdb.jsonld.put = function(obj, options, callback) {
if (typeof obj === 'string') {
Expand Down Expand Up @@ -141,8 +141,11 @@ function levelgraphJSONLD(db, jsonldOpts) {
switch (type) {
case TYPES.STRING:
case TYPES.PLAIN:
coerced['@value'] = value;
break;
case RDFLANGSTRING:
coerced['@value'] = value;
coerced['@language'] = N3Util.getLiteralLanguage(object);
break;
case TYPES.INTEGER:
coerced['@value'] = parseInt(value, 10);
Expand All @@ -163,7 +166,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
coerced = { '@value': value, '@type': type };
}
return coerced;
};
}

function fetchExpandedTriples(iri, memo, callback) {
if (typeof memo === 'function') {
Expand Down Expand Up @@ -195,12 +198,12 @@ function levelgraphJSONLD(db, jsonldOpts) {
object['@id'] = triple.object;
} else if (N3Util.isLiteral(triple.object)) {
object = getCoercedObject(triple.object);
var language = N3Util.getLiteralLanguage(triple.object);
if (language) {
object['@language'] = language;
}
}
acc[triple.subject][triple.predicate] = object;
if(acc[triple.subject][triple.predicate]){
acc[triple.subject][triple.predicate].push(object);
} else {
acc[triple.subject][triple.predicate] = [object];
}
cb(null, acc);
} else {
fetchExpandedTriples(triple.object, function(err, expanded) {
Expand All @@ -217,7 +220,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
}
}, callback);
});
};
}

graphdb.jsonld.get = function(iri, context, options, callback) {

Expand Down
26 changes: 26 additions & 0 deletions test/get_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,32 @@ describe('jsonld.get', function() {
});
});

it('with an object with multiple objects for same predicate' ,function(done){
var bbb = helper.getFixture('bigbuckbunny.json');

var act1 = {
subject: bbb['@id'],
predicate: 'http://schema.org/actor',
object: 'http://example.net/act1'
};

var act2 = {
subject: bbb['@id'],
predicate: 'http://schema.org/actor',
object: 'http://example.net/act2'
};

db.jsonld.put(bbb, function() {
db.put([act1, act2], function() {
db.jsonld.get(bbb['@id'], bbb['@context'], function(err, doc) {
expect(doc['actor']).to.be.an('array');
expect(doc['actor']).to.have.length(2);
done();
});
});
});
});

describe('with an object with an array for its ["@type"]', function() {
var ratatat;

Expand Down
29 changes: 28 additions & 1 deletion test/languagetags_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ describe('jsonld.get language tags', function() {
});

it('recognizes', function(done) {
triple = {
delete bbb.name;
var triple = {
subject: bbb['@id'],
predicate: 'http://schema.org/name',
object: '"Big Buck Bunny"@en'
Expand All @@ -86,4 +87,30 @@ describe('jsonld.get language tags', function() {
});
});
});

it('supports multiple language objects', function(done) {
var en = {
subject: bbb['@id'],
predicate: 'http://schema.org/description',
object: '"Big Buck Bunny"@en'
};

var it = {
subject: bbb['@id'],
predicate: 'http://schema.org/description',
object: '"Grande Coniglio Coniglietto"@it'
};
bbb['@context'].description = { '@container': '@language' };

db.jsonld.put(bbb, function() {
db.put([en, it], function() {
db.jsonld.get(bbb['@id'], bbb['@context'], function(err, doc) {
expect(doc.description.en).to.equal('Big Buck Bunny');
expect(doc.description.it).to.equal('Grande Coniglio Coniglietto');
done();
});
});
});
});

});

0 comments on commit e2ac0ff

Please sign in to comment.