Skip to content
This repository has been archived by the owner on May 20, 2023. It is now read-only.

Commit

Permalink
Merge pull request #25 from wikimedia/optout
Browse files Browse the repository at this point in the history
Allow individual checks to be disabled in config
  • Loading branch information
Krinkle committed Aug 25, 2015
2 parents ed93f3b + f487f68 commit 21619cc
Show file tree
Hide file tree
Showing 17 changed files with 168 additions and 36 deletions.
24 changes: 24 additions & 0 deletions Gruntfile.js
Expand Up @@ -34,6 +34,30 @@ module.exports = function ( grunt ) {
sourceFile: 'messages.json',
documentationFile: 'documentation.json'
}
},
requireMetadata: {
src: 'test/requireMetadata',
options: {
requireMetadata: false
}
},
requireCompleteMessageDocumentation: {
src: 'test/requireCompleteMessageDocumentation',
options: {
requireCompleteMessageDocumentation: false
}
},
requireNonEmptyDocumentation: {
src: 'test/requireNonEmptyDocumentation',
options: {
requireNonEmptyDocumentation: false
}
},
requireNoUnusedDocumentation: {
src: 'test/requireNoUnusedDocumentation',
options: {
requireNoUnusedDocumentation: false
}
}
},
watch: {
Expand Down
24 changes: 24 additions & 0 deletions README.md
Expand Up @@ -46,6 +46,30 @@ Default value: `"qqq.json"`

The JSON file providing the documentation messages.

### requireMetadata
Type: `boolean`
Default value: `true`

Whether to fail if message files don't have a `@metadata` meta-data key.

### requireCompleteMessageDocumentation
Type: `boolean`
Default value: `true`

Whether to fail if any message is in the primary file but not documented.

### requireNonEmptyDocumentation
Type: `boolean`
Default value: `true`

Whether to fail if any message is in the primary file but documented as a blank string.

### requireNoUnusedDocumentation
Type: `boolean`
Default value: `true`

Whether to fail if any documented message isn't in the primary file.


Example uses
--------------------
Expand Down
75 changes: 45 additions & 30 deletions tasks/banana.js
Expand Up @@ -9,7 +9,10 @@ module.exports = function ( grunt ) {
path = require( 'path' ),
options = this.options( {
sourceFile: 'en.json',
documentationFile: 'qqq.json'
documentationFile: 'qqq.json',
requireMetadata: true,
requireCompleteMessageDocumentation: true,
requireNoUnusedDocumentation: true
} ),
messageCount = 0;

Expand All @@ -20,6 +23,12 @@ module.exports = function ( grunt ) {

ok = true;

if ( this.filesSrc.length === 0 ) {
grunt.log.error( 'Target directory does not exist.' );
ok = false;
return;
}

this.filesSrc.forEach( function ( dir ) {
var sourceMessages, sourceMessageKeys,
documentationMessages, documentationMessageKeys,
Expand Down Expand Up @@ -49,7 +58,7 @@ module.exports = function ( grunt ) {
}

sourceMessagesMetadataIndex = sourceMessageKeys.indexOf( '@metadata' );
if ( sourceMessagesMetadataIndex === -1 ) {
if ( options.requireMetadata && sourceMessagesMetadataIndex === -1 ) {
grunt.log.error( 'Source file lacks a metadata block.' );
ok = false;
return;
Expand All @@ -59,7 +68,7 @@ module.exports = function ( grunt ) {
messageCount += sourceMessageKeys.length;

documentationMessagesMetadataIndex = documentationMessageKeys.indexOf( '@metadata' );
if ( documentationMessagesMetadataIndex === -1 ) {
if ( options.requireMetadata && documentationMessagesMetadataIndex === -1 ) {
grunt.log.error( 'Documentation file lacks a metadata block.' );
ok = false;
return;
Expand All @@ -83,43 +92,49 @@ module.exports = function ( grunt ) {
sourceMessageKeys.splice( 0, 1 );
}

count = sourceMessageMissing.length;
if ( count > 0 ) {
ok = false;
if ( options.requireCompleteMessageDocumentation ) {
count = sourceMessageMissing.length;
if ( count > 0 ) {
ok = false;

grunt.log.error(
count + ' message' + ( count > 1 ? 's lack' : ' lacks' ) + ' documentation.'
);
grunt.log.error(
count + ' message' + ( count > 1 ? 's lack' : ' lacks' ) + ' documentation.'
);

sourceMessageMissing.forEach( function ( message ) {
grunt.log.error( 'Message "' + message + '" lacks documentation.' );
} );
sourceMessageMissing.forEach( function ( message ) {
grunt.log.error( 'Message "' + message + '" lacks documentation.' );
} );
}
}

count = documentationMessageBlanks.length;
if ( count > 0 ) {
ok = false;
if ( options.requireNonEmptyDocumentation ) {
count = documentationMessageBlanks.length;
if ( count > 0 ) {
ok = false;

grunt.log.error(
count + ' documented message' + ( count > 1 ? 's are' : ' is' ) + ' blank.'
);
grunt.log.error(
count + ' documented message' + ( count > 1 ? 's are' : ' is' ) + ' blank.'
);

documentationMessageBlanks.forEach( function ( message ) {
grunt.log.error( 'Message "' + message + '" is documented with a blank string.' );
} );
documentationMessageBlanks.forEach( function ( message ) {
grunt.log.error( 'Message "' + message + '" is documented with a blank string.' );
} );
}
}

count = documentationMessageKeys.length;
if ( count > 0 ) {
ok = false;
if ( options.requireNoUnusedDocumentation ) {
count = documentationMessageKeys.length;
if ( count > 0 ) {
ok = false;

grunt.log.error(
count + ' documented message' + ( count > 1 ? 's are' : ' is' ) + ' undefined.'
);
grunt.log.error(
count + ' documented message' + ( count > 1 ? 's are' : ' is' ) + ' undefined.'
);

documentationMessageKeys.forEach( function ( message ) {
grunt.log.error( 'Message "' + message + '" is documented but undefined.' );
} );
documentationMessageKeys.forEach( function ( message ) {
grunt.log.error( 'Message "' + message + '" is documented but undefined.' );
} );
}
}
} );

Expand Down
2 changes: 1 addition & 1 deletion test/advanced/a/documentation.json
Expand Up @@ -7,4 +7,4 @@
"second-message-key": "second message definition",
"third-message-key": "third message definition",
"four-message-key": "four message definition"
}
}
2 changes: 1 addition & 1 deletion test/advanced/a/messages.json
Expand Up @@ -6,4 +6,4 @@
"second-message-key": "second message value",
"third-message-key": "third message value",
"four-message-key": "four message value"
}
}
2 changes: 1 addition & 1 deletion test/advanced/b/documentation.json
Expand Up @@ -7,4 +7,4 @@
"second-message-key": "second message definition",
"third-message-key": "third message definition",
"four-message-key": "four message definition"
}
}
2 changes: 1 addition & 1 deletion test/advanced/b/messages.json
Expand Up @@ -6,4 +6,4 @@
"second-message-key": "second message value",
"third-message-key": "third message value",
"four-message-key": "four message value"
}
}
9 changes: 9 additions & 0 deletions test/requireCompleteMessageDocumentation/en.json
@@ -0,0 +1,9 @@
{
"@metadata": {
"metadata-key": "metadata value"
},
"first-message-key": "first message value",
"second-message-key": "second message value",
"third-message-key": "third message value",
"four-message-key": "four message value"
}
9 changes: 9 additions & 0 deletions test/requireCompleteMessageDocumentation/qqq.json
@@ -0,0 +1,9 @@
{
"@metadata": {
"first-metadata-key": "metadata value",
"second-metadata-key": "metadata value"
},
"first-message-key": "first message definition",
"second-message-key": "second message definition",
"four-message-key": "four message definition"
}
6 changes: 6 additions & 0 deletions test/requireMetadata/en.json
@@ -0,0 +1,6 @@
{
"first-message-key": "first message value",
"second-message-key": "second message value",
"third-message-key": "third message value",
"four-message-key": "four message value"
}
6 changes: 6 additions & 0 deletions test/requireMetadata/qqq.json
@@ -0,0 +1,6 @@
{
"first-message-key": "first message definition",
"second-message-key": "second message definition",
"third-message-key": "third message definition",
"four-message-key": "four message definition"
}
9 changes: 9 additions & 0 deletions test/requireNoUnusedDocumentation/en.json
@@ -0,0 +1,9 @@
{
"@metadata": {
"metadata-key": "metadata value"
},
"first-message-key": "first message value",
"second-message-key": "second message value",
"third-message-key": "third message value",
"four-message-key": "four message value"
}
11 changes: 11 additions & 0 deletions test/requireNoUnusedDocumentation/qqq.json
@@ -0,0 +1,11 @@
{
"@metadata": {
"first-metadata-key": "metadata value",
"second-metadata-key": "metadata value"
},
"first-message-key": "first message definition",
"second-message-key": "second message definition",
"third-message-key": "third message definition",
"four-message-key": "four message definition",
"five-message-key": "extra message definition"
}
9 changes: 9 additions & 0 deletions test/requireNonEmptyDocumentation/en.json
@@ -0,0 +1,9 @@
{
"@metadata": {
"metadata-key": "metadata value"
},
"first-message-key": "first message value",
"second-message-key": "second message value",
"third-message-key": "third message value",
"four-message-key": "four message value"
}
10 changes: 10 additions & 0 deletions test/requireNonEmptyDocumentation/qqq.json
@@ -0,0 +1,10 @@
{
"@metadata": {
"first-metadata-key": "metadata value",
"second-metadata-key": "metadata value"
},
"first-message-key": "first message definition",
"second-message-key": "",
"third-message-key": "third message definition",
"four-message-key": "four message definition"
}
2 changes: 1 addition & 1 deletion test/simple/en.json
Expand Up @@ -6,4 +6,4 @@
"second-message-key": "second message value",
"third-message-key": "third message value",
"four-message-key": "four message value"
}
}
2 changes: 1 addition & 1 deletion test/simple/qqq.json
Expand Up @@ -7,4 +7,4 @@
"second-message-key": "second message definition",
"third-message-key": "third message definition",
"four-message-key": "four message definition"
}
}

0 comments on commit 21619cc

Please sign in to comment.