Skip to content

Commit

Permalink
simplify helpers: added simplify.entities
Browse files Browse the repository at this point in the history
fix #29
  • Loading branch information
maxlath committed Jun 27, 2018
1 parent c4b5172 commit 58caecb
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 7 deletions.
15 changes: 14 additions & 1 deletion docs/simplify_entities_data.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ wdk.simplify.entity(entity)
```
You can also pass options as a second argument, that will then be passed the subfunctions: currently only [simplify claims](simplify_claims.md) and [simplify sitelinks](#simplify-sitelinks).
```js
wdk.simplify.entity(entity, {
const simplificationOptions = {
// claims
entityPrefix: 'wd',
propertyPrefix: 'wdt',
Expand All @@ -36,6 +36,19 @@ wdk.simplify.entity(entity, {
keepNonTruthy: true,
// sitelinks
addUrl: true
}
wdk.simplify.entity(entity, simplificationOptions)
```

## Simplify entities
Same as [`wdk.simplify.entity`](#simplify-entity), but accepts the all the entities sent by the Wikidata API at once:
```js
const url = wdk.getEntities(['Q1', 'Q2', 'Q3'])
fetch(url)
.then(res => {
const { entities } = res.json()
# simplificationOptions: see wdk.simplify.entity doc above
const simplifiedEntities = wdk.simplify.entity(entities, simplificationOptions)
})
```

Expand Down
11 changes: 10 additions & 1 deletion lib/helpers/simplify_entity.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const { simplifyClaims } = require('./simplify_claims')
const simplify = require('./simplify_text_attributes')
const simplifySitelinks = require('./simplify_sitelinks')

module.exports = (entity, options) => {
const simplifyEntity = (entity, options) => {
const simplified = {
id: entity.id,
type: entity.type,
Expand All @@ -29,3 +29,12 @@ const simplifyIfDefined = (entity, simplified, attribute) => {
simplified[attribute] = simplify[attribute](entity[attribute])
}
}

const simplifyEntities = (entities, options) => {
return Object.keys(entities).reduce((obj, key) => {
obj[key] = simplifyEntity(entities[key], options)
return obj
}, {})
}

module.exports = { simplifyEntity, simplifyEntities }
5 changes: 4 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ const claimsSimplifiers = require('./helpers/simplify_claims')
const simplifySparqlResults = require('./helpers/simplify_sparql_results')

wdk.simplify = require('../lib/helpers/simplify_text_attributes')
wdk.simplify.entity = require('../lib/helpers/simplify_entity')
const { simplifyEntity, simplifyEntities } = require('../lib/helpers/simplify_entity')
wdk.simplify.entity = simplifyEntity
wdk.simplify.entities = simplifyEntities
wdk.simplify.claim = claimsSimplifiers.simplifyClaim
wdk.simplify.propertyClaims = claimsSimplifiers.simplifyPropertyClaims
wdk.simplify.claims = claimsSimplifiers.simplifyClaims
Expand All @@ -23,6 +25,7 @@ wdk.simplify.sparqlResults = simplifySparqlResults

// Legacy
wdk.simplifySparqlResults = require('./helpers/simplify_sparql_results')
// Legacy + truthyClaims + truthyPropertyClaims
Object.assign(wdk, claimsSimplifiers)

// Aliases
Expand Down
1 change: 1 addition & 0 deletions test/general.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ describe('general', function () {

wdk.simplify.should.be.a.Object()
wdk.simplify.entity.should.be.a.Function()
wdk.simplify.entities.should.be.a.Function()
wdk.simplify.labels.should.be.a.Function()
wdk.simplify.descriptions.should.be.a.Function()
wdk.simplify.aliases.should.be.a.Function()
Expand Down
27 changes: 23 additions & 4 deletions test/simplify_entity.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ require('should')
const Q571 = require('./data/Q571.json')
const _ = require('lodash')

const simplifyEntity = require('../lib/helpers/simplify_entity')
const { simplifyEntity, simplifyEntities } = require('../lib/helpers/simplify_entity')

describe('simplify.entity', () => {
it('should be a function', (done) => {
Expand All @@ -11,7 +11,8 @@ describe('simplify.entity', () => {
})

it('should return a simplified entity', (done) => {
const simplifiedEntity = simplifyEntity(Q571)
const Q571Clone = _.cloneDeep(Q571)
const simplifiedEntity = simplifyEntity(Q571Clone)
simplifiedEntity.labels.fr.should.equal('livre')
simplifiedEntity.descriptions.fr.should.equal('document écrit formé de pages reliées entre elles')
simplifiedEntity.aliases.pl.should.be.an.Array()
Expand All @@ -23,7 +24,8 @@ describe('simplify.entity', () => {
})

it('should pass options down to subfunctions', (done) => {
const simplifiedEntity = simplifyEntity(Q571, { keepQualifiers: true, keepIds: true, addUrl: true })
const Q571Clone = _.cloneDeep(Q571)
const simplifiedEntity = simplifyEntity(Q571Clone, { keepQualifiers: true, keepIds: true, addUrl: true })
simplifiedEntity.labels.fr.should.equal('livre')
simplifiedEntity.descriptions.fr.should.equal('document écrit formé de pages reliées entre elles')
simplifiedEntity.aliases.pl.should.be.an.Array()
Expand All @@ -38,12 +40,29 @@ describe('simplify.entity', () => {
})

it('should accept partial entities', (done) => {
const Q571Clone = _.cloneDeep(Q571)
const emptyEntity = simplifyEntity({})
Object.keys(emptyEntity).length.should.equal(3)
const partialEntity = simplifyEntity(_.pick(Q571, 'id', 'type', 'labels'))
const partialEntity = simplifyEntity(_.pick(Q571Clone, 'id', 'type', 'labels'))
Object.keys(partialEntity).length.should.equal(4)
partialEntity.labels.should.be.an.Object()
partialEntity.labels.fr.should.equal('livre')
done()
})
})

describe('simplify.entities', () => {
it('should accept enities objects', (done) => {
const Q571Clone = _.cloneDeep(Q571)
const entities = { Q571: Q571Clone }
const simplifiedEntities = simplifyEntities(entities)
simplifiedEntities.Q571.labels.fr.should.equal('livre')
simplifiedEntities.Q571.descriptions.fr.should.equal('document écrit formé de pages reliées entre elles')
simplifiedEntities.Q571.aliases.pl.should.be.an.Array()
simplifiedEntities.Q571.aliases.pl[0].should.equal('Tom')
simplifiedEntities.Q571.claims.P279.should.be.an.Array()
simplifiedEntities.Q571.claims.P279[0].should.equal('Q2342494')
simplifiedEntities.Q571.sitelinks.afwiki.should.equal('Boek')
done()
})
})

0 comments on commit 58caecb

Please sign in to comment.