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

Commit

Permalink
Merge pull request #5 from brunooomelo/developer
Browse files Browse the repository at this point in the history
bumb v0.2.0
  • Loading branch information
brunooomelo committed Jan 14, 2019
2 parents eb8f8dd + dac6803 commit 3081258
Show file tree
Hide file tree
Showing 12 changed files with 1,276 additions and 98 deletions.
13 changes: 13 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"extends": "standard",
"rules": {
"no-unused-expressions": "off"
},
"globals": {
"it": true,
"describe": true,
"expect": true,
"beforeEach": true,
"afterEach": true
}
}
14 changes: 14 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
language: node_js
node_js:
- "8"

cache:
yarn: true
directories:
"node_modules"

before_script:
- yarn test && yarn lint

before_script:
- yarn coveralls
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
[![Build Status](https://travis-ci.org/brunooomelo/lottery.svg?branch=master)](https://travis-ci.org/brunooomelo/lottery)
[![Coverage Status](https://coveralls.io/repos/github/brunooomelo/lottery/badge.svg?branch=test%2Fbadges)](https://coveralls.io/github/brunooomelo/lottery?branch=test%2Fbadges)
# Lottery CLI


> A CLI that will make a bettor's life easier.
![Example CLI running](img/example.gif)
Expand Down
20 changes: 18 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
{
"name": "lottery-cli",
"version": "0.0.2",
"version": "0.2.0",
"main": "bin/lottery.js",
"description": "",
"scripts": {
"test": "./node_modules/.bin/mocha test/**/*.test.js",
"test:watch": "yarn test -- --watch",
"test:coverage": "nyc yarn test"
"test:coverage": "nyc yarn test",
"lint": "./node_modules/.bin/eslint **/*.js",
"coveralls": "yarn test:coverage && nyc report --reporter=text-lcov | coveralls"
},
"husky": {
"hooks": {
"pre-commit": "yarn lint",
"pre-push": "yarn lint && yarn test"
}
},
"preferGlobal": true,
"bin": {
Expand Down Expand Up @@ -37,6 +45,14 @@
},
"devDependencies": {
"chai": "^4.2.0",
"coveralls": "^3.0.2",
"eslint": "^5.12.0",
"eslint-config-standard": "^12.0.0",
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-node": "^8.0.1",
"eslint-plugin-promise": "^4.0.1",
"eslint-plugin-standard": "^4.0.0",
"husky": "^1.3.1",
"mocha": "^5.2.0",
"nock": "^10.0.6",
"nyc": "^13.1.0",
Expand Down
5 changes: 2 additions & 3 deletions src/cmd/help.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ const menus = {
lottery help <command> quick help on <command>`,

megasena: `
megasena: `
lottery megasena <options>
--concurso, -c .......... show contest result
`,

`
}

module.exports = (args) => {
Expand Down
126 changes: 126 additions & 0 deletions src/cmd/lotofacil.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
const request = require('request-promise-native')
const ora = require('ora')
const { formatNumber } = require('accounting')

const spinner = ora({
text: 'Retrieving Lottery data...',
color: 'yellow'
})

module.exports = (args) => {
const contest = args.c || args.concurso
const query = `${contest ? `?concurso=${contest}` : ''}`
const token = `!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOLNDH0MPAzcDbz8vTxNDRy9_Y2NQ13CDA0sTIEKIoEKnN0dPUzMfQwMDEwsjAw8XZw8XMwtfQ0MPM2I02-AAzgaENIfrh-FqsQ9wBmoxN_FydLAGAgNTKEK8DkRrACPGwpyQyMMMj0VAcySpRM!/dl5/d5/L2dBISEvZ0FBIS9nQSEh/pw/Z7_61L0H0G0J0VSC0AC4GLFAD2003/res/id=buscaResultado/c=cacheLevelPage/=`
const url = `http://loterias.caixa.gov.br/wps/portal/loterias/landing/lotofacil/${token}/${query}`
spinner.start()
return request(url, { jar: true })
.then(stopSpinner)
.then(parseResponseToJson)
.then(extractLotteryValuesFromBody)
.then(verifyValues)
.then(verifyError)
.then(responseConsole)
}

const stopSpinner = (body) => {
spinner.stop()
return body
}

const parseResponseToJson = (response) => {
return JSON.parse(response)
}

const verifyValues = body => {
if (typeof body.vrEstimativa === 'string') {
const value = body.vrEstimativa.replace(/[.,]/g, '')
body.vrEstimativa = value.slice(0, value.length - 2)
return body
}
return body
}

const verifyError = body => {
return body
}

const extractLotteryValuesFromBody = (body) => {
return {
nu_concurso: body.nu_concurso,
ganhadores: body.ganhadores,
qt_ganhador_faixa1: body.qt_ganhador_faixa1,
qt_ganhador_faixa2: body.qt_ganhador_faixa2,
qt_ganhador_faixa3: body.qt_ganhador_faixa3,
qt_ganhador_faixa4: body.qt_ganhador_faixa4,
qt_ganhador_faixa5: body.qt_ganhador_faixa5,
vr_rateio_faixa1: body.vr_rateio_faixa1,
vr_rateio_faixa2: body.vr_rateio_faixa2,
vr_rateio_faixa3: body.vr_rateio_faixa3,
vr_rateio_faixa4: body.vr_rateio_faixa4,
vr_rateio_faixa5: body.vr_rateio_faixa5,
sorteioAcumulado: body.sorteioAcumulado,
valor_acumulado: body.valor_acumulado,
vrEstimativa: body.vrEstimativa,
resultadoOrdenado: body.resultadoOrdenado.replace(/-/g, ' '),
dt_apuracaoStr: body.dt_apuracaoStr,
dtProximoConcursoStr: body.dtProximoConcursoStr,
localSorteio: body.localSorteio,
no_cidade: body.no_cidade,
sg_uf: body.sg_uf,
mensagens: body.mensagens,
error: body.error
}
}

const responseConsole = (body) => {
const responseHeader = `
-------------------------------------------------
Concurso: ${body.nu_concurso} - ${body.dt_apuracaoStr}
Sorteio realizado ${body.localSorteio} em ${body.no_cidade}, ${body.sg_uf}
-------------------------------------------------`
console.info(responseHeader)
console.info(brokenInRow(body.resultadoOrdenado))
console.info(`
${showText(body)}
14 acertos
${body.qt_ganhador_faixa2} apostas ganhadoras, R$ ${formatNumber(body.vr_rateio_faixa2, 2, '.', ',')}
13 acertos
${body.qt_ganhador_faixa3} apostas ganhadoras, R$ ${formatNumber(body.vr_rateio_faixa3, 2, '.', ',')}
12 acertos
${body.qt_ganhador_faixa4} apostas ganhadoras, R$ ${formatNumber(body.vr_rateio_faixa4, 2, '.', ',')}
11 acertos
${body.qt_ganhador_faixa5} apostas ganhadoras, R$ ${formatNumber(body.vr_rateio_faixa5, 2, '.', ',')}
`)

console.info(`
-------------------------------------------------
Proximo Sorteio ${body.dtProximoConcursoStr}
Estimativa de prêmio é R$ ${formatNumber(body.vrEstimativa, 2, '.', ',')}
-------------------------------------------------`)
}

const brokenInRow = (string) => {
const numbers = string.split(' ')
const result = numbers.reduce((acc, current, index) => {
if (index % 5 === 0) {
return { array: [ ...acc.array, numbers.slice(index, index + 5) ],
string: `${acc.string} \n ${current}`
}
}
return { array: acc.array, string: `${acc.string} ${current}` }
}, { array: [], string: '' })
return result.string
}

const showText = body => {
if (body.sorteioAcumulado === true) {
return ('ACUMULADO!!\n\n 15 acertos\n Não houve ganhador')
}
return (
'15 acertos 🎉\n ' + body.qt_ganhador_faixa1 + ' apostas ganhadoras, R$ ' + formatNumber(body.vr_rateio_faixa1, 2, '.', ',')
)
}
20 changes: 10 additions & 10 deletions src/cmd/megasena.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ const { formatNumber } = require('accounting')

const spinner = ora({
text: 'Retrieving Lottery data...',
color: 'yellow',
color: 'yellow'
})

module.exports = (args) => {
const contest = args.c || args.concurso
const query = `${contest? `?concurso=${contest}` : '' }`
const query = `${contest ? `?concurso=${contest}` : ''}`
const token = `!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOLNDH0MPAzcDbwMPI0sDBxNXAOMwrzCjA0sjIEKIoEKnN0dPUzMfQwMDEwsjAw8XZw8XMwtfQ0MPM2I02-AAzgaENIfrh-FqsQ9wNnUwNHfxcnSwBgIDUyhCvA5EawAjxsKckMjDDI9FQE-F4ca/dl5/d5/L2dBISEvZ0FBIS9nQSEh/pw/Z7_HGK818G0KO6H80AU71KG7J0072/res/id=buscaResultado/c=cacheLevelPage/=`
const url = `http://loterias.caixa.gov.br/wps/portal/loterias/landing/megasena/${token}/${query}`
spinner.start()
return request(url, { jar:true })
return request(url, { jar: true })
.then(stopSpinner)
.then(parseResponseToJson)
.then(verifyError)
Expand All @@ -32,7 +32,7 @@ const parseResponseToJson = (response) => {
}

const verifyError = body => {
if(body.mensagens.length === 0) return body
if (body.mensagens.length === 0) return body
throw Error(`
${body.mensagens[0]}
`)
Expand All @@ -55,7 +55,7 @@ const extractLotteryValuesFromBody = (body) => {
dt_proximo_concursoStr: body.dt_proximo_concursoStr,
de_local_sorteio: body.de_local_sorteio,
no_cidade: body.no_cidade,
sg_uf: body.sg_uf,
sg_uf: body.sg_uf
}
}

Expand All @@ -71,21 +71,21 @@ const responseConsole = (body) => {
${body.acumulado === 0 ? winner(body.ganhadores, body.valor) : 'ACUMULADO!!'}
Quina: 5 números acertados
${body.ganhadores_quina} apostas ganhadoras, R$ ${formatNumber(body.valor_quina, 2, ".", ",")}
${body.ganhadores_quina} apostas ganhadoras, R$ ${formatNumber(body.valor_quina, 2, '.', ',')}
Quadra: 4 números acertados
${body.ganhadores_quadra} apostas ganhadoras, R$ ${formatNumber(body.valor_quadra, 2, ".", ",")}
${body.ganhadores_quadra} apostas ganhadoras, R$ ${formatNumber(body.valor_quadra, 2, '.', ',')}
-------------------------------------------------
Proximo Sorteio ${body.dt_proximo_concursoStr}
Estimativa de prêmio é R$ ${formatNumber(body.vr_estimativa, 2, ".", ",")}
Estimativa de prêmio é R$ ${formatNumber(body.vr_estimativa, 2, '.', ',')}
-------------------------------------------------
`
console.info(responseTemplate)
}
const winner = (bet, priceAmount) => (`Sena: 6 números acertados 🎉
${bet} apostas ganhadoras, R$ ${formatNumber(priceAmount, 2, ".", ",")}`)

const winner = (bet, priceAmount) => (`Sena: 6 números acertados 🎉
${bet} apostas ganhadoras, R$ ${formatNumber(priceAmount, 2, '.', ',')}`)

const errorHandler = ({ message }) => {
spinner.stop()
Expand Down
23 changes: 13 additions & 10 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
const minimist = require("minimist")
const minimist = require('minimist')
const error = require('./utils/error')

module.exports = () => {
const args = minimist(process.argv.slice(2))
let cmd = args._[0] || "help"
let cmd = args._[0] || 'help'
if (args.version || args.v) {
cmd = "version"
cmd = 'version'
}
if (args.help || args.h) {
cmd = "help"
cmd = 'help'
}

switch (cmd) {
case "help":
require("./cmd/help")(args)
case 'help':
require('./cmd/help')(args)
break
case "version":
require("./cmd/version")(args)
case 'version':
require('./cmd/version')(args)
break
case "megasena":
require("./cmd/megasena")(args)
case 'megasena':
require('./cmd/megasena')(args)
break
case 'lotofacil':
require('./cmd/lotofacil')(args)
break
default:
error(`"${cmd}" is not a valid command!`, true)
Expand Down
3 changes: 0 additions & 3 deletions test/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,3 @@ describe('Main CLI', () => {
})
})
})



Loading

0 comments on commit 3081258

Please sign in to comment.