UNPKG

geohash-cli

Version:

CLI to find as much info as possible about today's (or any date's) geohashes.

109 lines (70 loc) 4.31 kB
#!/usr/bin/env node 'use strict'; var _yargs = require('yargs'); var _yargs2 = _interopRequireDefault(_yargs); var _open = require('open'); var _open2 = _interopRequireDefault(_open); var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug); var _async = require('async'); var _async2 = _interopRequireDefault(_async); var _pick = require('lodash/pick'); var _pick2 = _interopRequireDefault(_pick); var _map = require('lodash/map'); var _map2 = _interopRequireDefault(_map); var _invokeMap = require('lodash/invokeMap'); var _invokeMap2 = _interopRequireDefault(_invokeMap); var _each = require('lodash/each'); var _each2 = _interopRequireDefault(_each); var _compact = require('lodash/compact'); var _compact2 = _interopRequireDefault(_compact); var _chunk = require('lodash/chunk'); var _chunk2 = _interopRequireDefault(_chunk); var _cliTable = require('cli-table'); var _cliTable2 = _interopRequireDefault(_cliTable); var _package = require('../package'); var _geohash = require('./geohash'); var _geohash2 = _interopRequireDefault(_geohash); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var openMap = function openMap(map, cb) { return (0, _open2.default)(map, null, cb); }; var endsWith = function endsWith(str, suffix) { return str.indexOf(suffix, str.length - suffix.length) !== -1; }; var decodeMap = function decodeMap(key, value) { var decode = endsWith(key, 'map') || endsWith(key, 'Map'); return decode ? decodeURIComponent(value) : value; }; var debug = (0, _debug2.default)('geohash:cli'); var _yargs$alias$default$ = _yargs2.default.alias('o', 'open').default('o', false).alias('p', 'pretty').default('p', false).alias('j', 'json').default('j', false).alias('t', 'table').default('t', false).alias('h', 'help').default('h', false).default('cache', true).version(_package.version), argv = _yargs$alias$default$.argv; var noOuput = !argv.o && !argv.j && !argv.t ? 'Please use either --json, --table, or --open' : ''; debug(argv); if (argv.help || noOuput) { console.log('\n ' + noOuput + '\n\n Data options\n\n --date=YYYY-MM-DD [today]\n The date to start getting geohashes. Defaults to todays\'s date.\n\n --days [4]\n How many does to get in the future. Defaults to 4 or up to the most\n current date that has available data.\n\n --location=lat,lon [current location]\n Your location. By default it will try and use `whereami` to find\n your current location.\n\n --key\n The Google maps static maps API key to use for your maps.\n\n --cache [$HOME/.config/djia/djia_cache.json]\n The file or directory where you want to cache Dow Jones data.\n\n Output options\n\n -j, --json [false]\n Output the full JSON information.\n\n -p, --pretty [false]\n Make the json output prettier.\n\n -t, --table [false]\n Output tables of all the distances for each day.\n\n -o, --open [false]\n Open all maps in your default browser.\n\n -h, --help [false]\n You\'re looking at it.\n\n --version\n Output the version and exit.\n '); process.exit(0); } (0, _geohash2.default)((0, _pick2.default)(argv, 'date', 'days', 'location', 'key', 'cache'), function (err, results) { if (err) return process.stderr.write(err.message || err); debug('Success'); var dates = results.dates; if (argv.json) { process.stdout.write(JSON.stringify(results, argv.pretty ? decodeMap : null, argv.pretty ? 2 : 0)); } if (argv.table) { if (argv.json) console.log('\n'); (0, _each2.default)(dates, function (values, date) { var distanceTable = new _cliTable2.default({ head: [date, 'Distances', 'Miles'] }); distanceTable.push(['', '', '']); distanceTable.push.apply(distanceTable, (0, _chunk2.default)((0, _invokeMap2.default)((0, _map2.default)(values.geohashes, 'distance'), 'toFixed', 2), 3)); distanceTable.push(['', '', '']); distanceTable.push(['Global', values.global.distance.toFixed(2), '']); console.log(distanceTable.toString()); }); } if (argv.open) { var maps = (0, _map2.default)(dates, 'map').concat((0, _map2.default)(dates, 'globalMap')); _async2.default.eachSeries((0, _compact2.default)(maps), openMap); } });