Skip to content

Commit

Permalink
feat(diff): compare config in both ways (#60)
Browse files Browse the repository at this point in the history
  • Loading branch information
ta2edchimp committed Apr 21, 2016
1 parent 4cc7b98 commit 66e6159
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 19 deletions.
54 changes: 46 additions & 8 deletions src/bin/diff.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,61 @@

'use strict'

var path = require('path')

var cli = require('../lib/cli-util')

var getRuleFinder = require('../lib/rule-finder')
var difference = require('../lib/array-diff')
var getSortedRules = require('../lib/sort-rules')

var rules = getSortedRules(
difference(
getRuleFinder(process.argv[2]).getCurrentRules(),
getRuleFinder(process.argv[3]).getCurrentRules()
)
)
var files = [process.argv[2], process.argv[3]]
var collectedRules = getFilesToCompare(files).map(compareConfigs)

var rulesCount = collectedRules.reduce(
function getLength(prev, curr) {
return prev + (curr && curr.rules ? curr.rules.length : /* istanbul ignore next */ 0)
}, 0)

/* istanbul ignore next */
if (rules.length) {
if (rulesCount) {
cli.push('\ndiff rules\n')
cli.push(rules)
collectedRules.forEach(function displayConfigs(diff) {
var rules = diff.rules

if (!rules.length) {
return
}

cli.push('\nin ' + diff.config1 + ' but not in ' + diff.config2 + ':\n')
cli.push(rules)
})
}

cli.write()

function getFilesToCompare(allFiles) {
var filesToCompare = [allFiles]
filesToCompare.push([].concat(allFiles).reverse())
return filesToCompare
}

function compareConfigs(currentFiles) {
return {
config1: path.basename(currentFiles[0]),
config2: path.basename(currentFiles[1]),
rules: rulesDifference(
getRuleFinder(currentFiles[0]),
getRuleFinder(currentFiles[1])
),
}
}

function rulesDifference(a, b) {
return getSortedRules(
difference(
a.getCurrentRules(),
b.getCurrentRules()
)
)
}
26 changes: 15 additions & 11 deletions test/bin/diff.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,41 @@ var sinon = require('sinon')

var consoleLog = console.log // eslint-disable-line no-console

var difference = sinon.stub().returns(['diff'])

var stub = {
'../lib/rule-finder': function() {
return {
getCurrentRules: function noop() {},
}
},
'../lib/array-diff': difference,
'../lib/array-diff': sinon.stub().returns(['diff']),
}

describe('diff', function() {

beforeEach(function() {
process.argv = process.argv.slice(0, 2)
sinon.stub(console, 'log', function() {
// print out everything but the test target's output
if (!arguments[0].match(/diff/)) {
consoleLog.apply(null, arguments)
}
})
})

afterEach(function() {
console.log = consoleLog // eslint-disable-line no-console
console.log.restore() // eslint-disable-line no-console
})

it('log diff', function() {
process.argv[2] = './foo'
process.argv[3] = './bar'
console.log = function() { // eslint-disable-line no-console
if (arguments[0].match(/(diff)/)) {
return
}
consoleLog.apply(null, arguments)
}
proxyquire('../../src/bin/diff', stub)
assert.ok(difference.called)
assert.ok(
console.log.calledWith( // eslint-disable-line no-console
sinon.match(
/diff rules[^]*in foo but not in bar:[^]*diff[^]*in bar but not in foo:[^]*diff/
)
)
)
})
})

0 comments on commit 66e6159

Please sign in to comment.