Skip to content

Commit

Permalink
update style, readme, travis config, pipe help to stderr
Browse files Browse the repository at this point in the history
  • Loading branch information
jarofghosts committed Sep 26, 2015
1 parent d4d6b32 commit 933929f
Show file tree
Hide file tree
Showing 9 changed files with 166 additions and 144 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
@@ -1,6 +1,6 @@
language: node_js
node_js:
- "iojs"
- "4.0"
- "0.12"
- "0.11"
- "0.10"
20 changes: 11 additions & 9 deletions README.md
@@ -1,8 +1,10 @@
wack
====
# wack

[![Build Status](http://img.shields.io/travis/jarofghosts/wack.svg?style=flat)](https://travis-ci.org/jarofghosts/wack)
[![npm install](http://img.shields.io/npm/dm/wack.svg?style=flat)](https://www.npmjs.org/package/wack)
[![Build Status](https://img.shields.io/travis/jarofghosts/wack.svg?style=flat-square)](https://travis-ci.org/jarofghosts/wack)
[![npm install](https://img.shields.io/npm/dm/wack.svg?style=flat-square)](https://www.npmjs.org/package/wack)
[![npm version](https://img.shields.io/npm/v/wack.svg?style=flat-square)](https://www.npmjs.org/package/wack)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard)
[![License](https://img.shields.io/npm/l/wack.svg?style=flat-square)](https://github.com/jarofghosts/wack/blob/master/LICENSE)

wack stands for Wack ACK

Expand Down Expand Up @@ -53,13 +55,13 @@ wack_stream.on('data', dump)

wack_stream.write('./ramones_albums/')

function dump(data) {
function dump (data) {
console.log(data)
// {
// filename: /current/dir/ramones-albums/rocket-to-russia.txt
// , context: 'Sheena Is a Punk Rocker'
// , line: 6
// , match: ['Sheena', index: 0, input: 'Sheena Is a Punk Rocker']
// filename: '/current/dir/ramones-albums/rocket-to-russia.txt',
// context: 'Sheena Is a Punk Rocker',
// line: 6,
// match: ['Sheena', index: 0, input: 'Sheena Is a Punk Rocker']
// }
}
```
Expand Down
115 changes: 64 additions & 51 deletions bin/wack.js
@@ -1,79 +1,92 @@
#!/usr/bin/env node

var path = require('path')
, fs = require('fs')
var fs = require('fs')

var nopt = require('nopt')

var wackage = require('../package.json')
, wack = require('../')
var wack = require('../')

var wackStream

var noptions = {
dir: String
, ignoredir: String
, ignorecase: Boolean
, knowntypes: Boolean
, maxcount: Number
, norecurse: Boolean
, invertmatch: Boolean
, type: String
, notype: String
, justone: Boolean
, nocolor: Boolean
, thpppt: Boolean
, version: Boolean
, help: Boolean
dir: String,
ignoredir: String,
ignorecase: Boolean,
knowntypes: Boolean,
maxcount: Number,
norecurse: Boolean,
invertmatch: Boolean,
type: String,
notype: String,
justone: Boolean,
nocolor: Boolean,
thpppt: Boolean,
version: Boolean,
help: Boolean
}

var shorts = {
d: ['--dir']
, D: ['--ignoredir']
, i: ['--ignorecase']
, k: ['--knowntypes']
, m: ['--maxcount']
, n: ['--norecurse']
, v: ['--invertmatch']
, t: ['--type']
, T: ['--notype']
, '1': ['--justone']
, C: ['--nocolor']
, h: ['--help']
, V: ['--version']
'd': ['--dir'],
'D': ['--ignoredir'],
'i': ['--ignorecase'],
'k': ['--knowntypes'],
'm': ['--maxcount'],
'n': ['--norecurse'],
'v': ['--invertmatch'],
't': ['--type'],
'T': ['--notype'],
'1': ['--justone'],
'C': ['--nocolor'],
'h': ['--help'],
'V': ['--version']
}

var options = nopt(noptions, shorts, process.argv)
if (require.main === module) {
bin()
}

module.exports = bin

function bin () {
var options = nopt(noptions, shorts, process.argv)
var wackStream

options.pattern = options.argv.remain[0]

if (options.version) {
return version()
}

options.pattern = options.argv.remain[0]
if (options.help || !options.pattern) {
return help()
}

if(options.version) return version()
if(options.help) return help()
if(options.thpppt) return cat()
if(!options.pattern) return help()
if (options.thpppt) {
return cat()
}

function version() {
wackStream = wack(options)
wackStream.pipe(wackStream.prettify()).pipe(process.stdout)
wackStream.write(options.dir || process.cwd())
}

function version () {
console.log('wack version ' + wackage.version)
}

function help() {
function help () {
version()
fs.createReadStream(path.join(__dirname, '..', 'help.txt'))
.pipe(process.stdout)
.pipe(process.stderr)
}

function cat() {
function cat () {
process.stdout.write([
' _ /|'
, ' \\\'o.O\''
, ' =(___)='
, ' U wack --thpppt!'
, ''
' _ /|',
' \\\'o.O\'',
' =(___)=',
' U wack --thpppt!',
''
].join('\n'))
}

wackStream = wack(options)

wackStream.pipe(wackStream.prettify()).pipe(process.stdout)

wackStream.write(options.dir || process.cwd())
38 changes: 19 additions & 19 deletions index.js
@@ -1,42 +1,42 @@
var filestream = require('file-content-stream')
, dirstream = require('dir-stream')
, duplexify = require('duplexify')
var dirstream = require('dir-stream')
var duplexify = require('duplexify')

var fileFilter = require('./lib/file-filter-stream')
, prettify = require('./lib/pretty-stream')
, wack = require('./lib/match-stream')
var prettify = require('./lib/pretty-stream')
var wack = require('./lib/match-stream')

module.exports = wackStream

function wackStream(_settings) {
function wackStream (_settings) {
var ignoreDirs = ['.git', '.hg', '.svn']
, settings = _settings || {}
var settings = _settings || {}

var dirFilterStream
, stream
var stream

var fileFilterStream = fileFilter(
settings.type
, settings.notype
, settings.knowntypes
settings.type,
settings.notype,
settings.knowntypes
)

if(settings.ignoredir) {
if (settings.ignoredir) {
ignoreDirs = ignoreDirs.concat(settings.ignoredir.split(','))
}

dirFilterStream = dirstream({
onlyFiles: true
, noRecurse: settings.norecurse
, ignore: ignoreDirs
onlyFiles: true,
noRecurse: settings.norecurse,
ignore: ignoreDirs
})

stream = duplexify.obj(
dirFilterStream
, dirFilterStream
.pipe(fileFilterStream)
.pipe(filestream())
.pipe(wack(settings))
dirFilterStream,
dirFilterStream
.pipe(fileFilterStream)
.pipe(filestream())
.pipe(wack(settings))
)

stream.prettify = prettify(settings)
Expand Down
16 changes: 8 additions & 8 deletions lib/file-filter-stream.js
@@ -1,15 +1,15 @@
var path = require('path')

var police = require('stream-police')
, type = require('ack-types')
var type = require('ack-types')

module.exports = filterStream

function filterStream(good, bad, justKnown) {
function filterStream (good, bad, justKnown) {
var include
, exclude
var exclude

if(justKnown) {
if (justKnown) {
include = type.allExtensions()
} else {
include = good ? good.split(',').reduce(toAck, []) : null
Expand All @@ -19,18 +19,18 @@ function filterStream(good, bad, justKnown) {

return police(verify)

function toAck(extensions, name) {
function toAck (extensions, name) {
return extensions.concat(type.reverseLookup(name))
}

function verify(filename) {
function verify (filename) {
var extension = path.extname(filename.toString()).slice(1)

if(exclude && exclude.indexOf(extension) > -1) {
if (exclude && exclude.indexOf(extension) > -1) {
return false
}

if(include) {
if (include) {
return include.indexOf(extension) > -1
}

Expand Down
40 changes: 20 additions & 20 deletions lib/match-stream.js
@@ -1,49 +1,49 @@
var path = require('path')

var escape = require('quotemeta')
, through = require('through2')
var through = require('through2')

module.exports = wack

function wack(_options) {
function wack (_options) {
var badChars = /[\x00-\x1F\x80-\x9F]+/
, options = _options || {}
, currentFile
, fileCount
, stream
, regex

regex = new RegExp(
escape(options.pattern)
, options.ignorecase ? 'i' : ''
var options = _options || {}

var currentFile
var fileCount

var regex = new RegExp(
escape(options.pattern),
options.ignorecase ? 'i' : ''
)

options.dir = path.normalize(options.dir || process.cwd())
var stream = through.obj(write)

stream = through.obj(write)
options.dir = path.normalize(options.dir || process.cwd())

return stream

function write(obj, x, next) {
function write (obj, _, next) {
var result = {}
, match

if(obj.filename !== currentFile) {
var match

if (obj.filename !== currentFile) {
currentFile = obj.filename
fileCount = 0
}

if(badChars.test(obj.data)) {
if (badChars.test(obj.data)) {
return next()
}

match = regex.exec(obj.data)

if((match && options.invertmatch) || (!match && !options.invertmatch)) {
if ((match && options.invertmatch) || (!match && !options.invertmatch)) {
return next()
}

if(options.maxcount && ++fileCount > options.maxcount) {
if (options.maxcount && ++fileCount > options.maxcount) {
return next()
}

Expand All @@ -54,7 +54,7 @@ function wack(_options) {

stream.push(result)

if(options.justone) {
if (options.justone) {
return stream.push(null)
}

Expand Down

0 comments on commit 933929f

Please sign in to comment.