Skip to content

Commit

Permalink
feat(generators): adiciona gerador de texto
Browse files Browse the repository at this point in the history
  • Loading branch information
marcelo-lourenco committed Oct 1, 2024
1 parent 361fa1d commit 921ef64
Show file tree
Hide file tree
Showing 8 changed files with 228 additions and 11 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
node_modules
post
12 changes: 8 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.

---

## 1.0.4 (2024-09-30)

### Adiciona Funcionalidades

* Gerador de Texto

---

## 1.0.3 (2024-08-22)

### Adiciona Funcionalidades
Expand All @@ -29,8 +37,6 @@ Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.

---

---

## 1.0.1 (2024-08-13)

### Adiciona Funcionalidades
Expand All @@ -41,8 +47,6 @@ Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.

---

---

## 1.0.0 (2024-08-11)

### Adiciona Funcionalidades
Expand Down
29 changes: 25 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ O pacote fornece uma coleção de funções para gerar dados brasileiros aleató
* **Gerador de Conta Bancária**: Código do Banco, Nome do Banco, Agência Bancária e Conta Bancária;
* **Gerador de Cartão de Crédito**: Número, Bandeira, CVV e Validade;
* **Gerador de Veículo**: Placa Antiga, Placa Mercosul e RENAVAM;
* **Gerador de Texto (Lorem Ipsum)**: palavras, sentenças e parágrafos;


## Instalação

```bash
npm install --save-dev gerador-br
npm install gerador-br
```

## Uso
Expand All @@ -31,10 +33,10 @@ Importe apenas a(s) função(ões) que desejar
import { nome, cpf, cnpj, placaMercosul } from 'gerador-br';

console.log(nome.femininoCompleto()); // Ex: "Maria"
console.log(cpf()); // Gera CPF sem máscara e do estado informado
console.log(cpf(false, "PE")); // Gera CPF com máscara e do estado informado
console.log(cpf()); // Gera CPF sem máscara e do estado aleatório
console.log(cpf(false, "PE")); // Gera CPF sem máscara e do estado informado
console.log(cnpj(true)); // Gera CNPJ com máscara
console.log(placaMercosul(true)); // Gera placa no formato Mercosul sem máscara "ABC1D23"
console.log(placaMercosul(true)); // Gera placa no formato Mercosul com máscara "ABC-1D23"
```

### *Default import*
Expand Down Expand Up @@ -379,6 +381,25 @@ console.log(gerar.placaMercosul(false));

// Gera RENAVAM
console.log(gerar.renavam());

/* ******************** TEXTO *************************** */
// Gera uma palavra aleatória
console.log(gerar.palavra());

// Gera uma sentença com quantidade de palavras aleatórias
console.log(gerar.sentenca());

// Gera uma sentença com quantidade de palavras definida
console.log(gerar.sentenca(10));

// Gera um parágrafo com quantidade de palavras aleatórias
console.log(gerar.paragrafo());

// Gera um parágrafo com quantidade de sentença informada, cada uma com quantidade de palavras aleatórias
console.log(gerar.paragrafo(5));

// Gera um parágrafo com quantidade de sentenças e de palavras informadas.
console.log(gerar.paragrafo(3,8));
```

## Extensão Chrome - Gerador de Dados Fictícios
Expand Down
20 changes: 20 additions & 0 deletions index-teste.js
Original file line number Diff line number Diff line change
Expand Up @@ -333,3 +333,23 @@ console.log(gerar.placaMercosul(false));

// Gera RENAVAM
console.log(gerar.renavam());


/* ******************** TEXTO *************************** */
// Gera uma palavra aleatória
console.log(gerar.palavra());

// Gera uma sentença com quantidade de palavras aleatórias
console.log(gerar.sentenca());

// Gera uma sentença com quantidade de palavras definida
console.log(gerar.sentenca(10));

// Gera um parágrafo com quantidade de palavras aleatórias
console.log(gerar.paragrafo());

// Gera um parágrafo com quantidade de sentença informada, cada uma com quantidade de palavras aleatórias
console.log(gerar.paragrafo(5));

// Gera um parágrafo com quantidade de sentenças e de palavras informadas.
console.log(gerar.paragrafo(3,8));
58 changes: 56 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { placaAntiga, placaMercosul } from "./src/generators/placa.js"
import { renavam } from './src/generators/renavam.js';
import { ddd } from './src/generators/ddd.js';
import { codigoOperadora } from './src/generators/operadora.js';
import { palavra, sentenca, paragrafo } from './src/generators/texto.js';


function apelido() {
Expand Down Expand Up @@ -641,7 +642,58 @@ gerar.placaMercosul = placaMercosul;
* // RENAVAM gerado
* console.log(gerar.renavam); // "12345678901"
*/
gerar.renavam = renavam;

/**
* Gera uma palavra aleatória.
*
* @returns {string} Uma palavra aleatória.
* @example
* // Gera uma palavra aleatória
* console.log(palavra()); // Ex: "Lorem", "ipsum", "dolor", "sit", "amet"
*/
gerar.palavra = palavra;

/**
* Gera uma sentença aleatória.
*
* @param {number} [qttWords] - Quantidade de palavras na sentença. Se não for informado, será um número aleatório entre 10 e 20.
* @returns {string} Uma sentença aleatória.
* @example
* // Gera uma sentença com quantidade de palavras aleatórias
* console.log(sentenca()); // Ex: "Ea placeat, labore quidem, harum expedita fuga."
*
* // Gera uma sentença com a quantidade de palavras informada.
* console.log(sentenca(10)); // Ex: "Dolorem sit modi deleniti nemo sint laborum vitae repellendus ipsa."
*/
gerar.sentenca = sentenca;

/**
* Gera um parágrafo aleatório.
*
* @param {number} [qttParagraph=1] - Quantidade de parágrafos.
* @param {number} [qttWords] - Quantidade de palavras por sentença. Se não for informado, será um número aleatório entre 10 e 20.
* @returns {string} Um parágrafo aleatório.
* @example
* // Gera um parágrafo com quantidade de palavras aleatórias
* console.log(paragrafo());
* // Ex: "Recusandae. facilis consequuntur quae fuga. debitis quaerat architecto do placeat."
*
* // Gera um parágrafo com quantidade de sentença informada, cada uma com quantidade de palavras aleatórias
* console.log(paragrafo(3));
* // Ex:
* "Lorem ipsum dolor sit amet.
* Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
* Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
*
* // Gera um parágrafo com quantidade de sentenças e de palavras informadas.
* console.log(paragrafo(3, 8));
* // Ex:
* "Labore ipsa, eius dolore corporis ipsam doloremque nobis.
* Enim facilis fuga. voluptatem debitis veniam, hic atque.
* Voluptates fugiat nesciunt, numquam reprehenderit, quae commodo minus."
*/
gerar.paragrafo = paragrafo;

export default {
gerar,
Expand Down Expand Up @@ -676,6 +728,8 @@ export default {
codigoOperadora,
placaAntiga,
placaMercosul,
renavam
renavam,
palavra,
sentenca,
paragrafo
};

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "gerador-br",
"version": "1.0.2",
"version": "1.0.3",
"description": " Gerador de Dados Fictícios - Brasil",
"main": "index.js",
"module": "index.js",
Expand Down
65 changes: 65 additions & 0 deletions src/generators/texto.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import { palavras } from '../../data/db-general.js';

/**
* Gera uma palavra aleatória.
*
* @returns {string} Uma palavra aleatória.
* @example
* // Gera uma palavra aleatória
* console.log(palavra()); // Ex: "Lorem", "ipsum", "dolor", "sit", "amet"
*/
export function palavra() {
return palavras[Math.floor(Math.random() * palavras.length)];
}

/**
* Gera uma sentença aleatória.
*
* @param {number} [qttWords] - Quantidade de palavras na sentença. Se não for informado, será um número aleatório entre 10 e 20.
* @returns {string} Uma sentença aleatória.
* @example
* // Gera uma sentença aleatória com quantidade de palavras aleatórias
* console.log(sentenca()); // Ex: "Ea placeat, labore quidem, harum expedita fuga."
*
* // Gera uma sentença aleatória com a quantidade de palavras informada.
* console.log(sentenca(10)); // Ex: "Dolorem sit modi deleniti nemo sint laborum vitae repellendus ipsa."
*/
export function sentenca(qttWords) {
const numberOfWords = qttWords ?? Math.floor(Math.random() * 10) + 10;
let sentence = Array.from({ length: numberOfWords }, () => palavra()).join(' ');
sentence = `${sentence.charAt(0).toUpperCase() + sentence.slice(1)}.`;

return `${sentence.replace(/,\.|\.\.|\!\.|\?\./g, '.').trim()}`;
}

/**
* Gera um parágrafo aleatório.
*
* @param {number} [qttParagraph=1] - Quantidade de parágrafos.
* @param {number} [qttWords] - Quantidade de palavras por sentença. Se não for informado, será um número aleatório entre 10 e 20.
* @returns {string} Um parágrafo aleatório.
* @example
* // Gera um parágrafo aleatório com quantidade de palavras aleatórias
* console.log(paragrafo());
* // Ex: "Recusandae. facilis consequuntur quae fuga. debitis quaerat architecto do placeat."
*
* // Gera um parágrafo aleatório a quantidade de sentença informada, cada uma com quantidade de palavras aleatórias
* console.log(paragrafo(3));
* // Ex:
* "Lorem ipsum dolor sit amet.
* Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
* Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
*
* // Gera um parágrafo aleatório com quantidade de sentenças e de palavras informadas.
* console.log(paragrafo(3, 8));
* // Ex:
* "Labore ipsa, eius dolore corporis ipsam doloremque nobis.
* Enim facilis fuga. voluptatem debitis veniam, hic atque.
* Voluptates fugiat nesciunt, numquam reprehenderit, quae commodo minus."
*/
export function paragrafo(qttParagraph = 1, qttWords) {
return Array.from({ length: qttParagraph }, () => sentenca(qttWords))
.map(sentence => sentence.charAt(0).toUpperCase() + sentence.slice(1))
.join('\n')
.trim();
}
52 changes: 52 additions & 0 deletions test/texto.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { describe, test } from 'node:test';
import { strictEqual, match } from 'node:assert';
import { palavra, sentenca, paragrafo } from '../src/generators/texto.js';

describe('Tests for text generation functions', () => {

test('Should return a random word from the word list', () => {
const result = palavra();
strictEqual(typeof result, 'string');
});

test('Should generate a sentence with the default number of words (10 to 20)', () => {
const result = sentenca();
const wordCount = result.split(' ').length;
strictEqual(wordCount >= 10 && wordCount <= 20, true, `Sentence contains ${wordCount} words`);
strictEqual(result.endsWith('.'), true, 'Sentence should end with a period');
});

test('Should generate a sentence with the exact number of words provided', () => {
const wordCount = 15;
const result = sentenca(wordCount);
const generatedWordCount = result.split(' ').length;
strictEqual(generatedWordCount, wordCount, `Sentence contains ${generatedWordCount} words`);
});

test('Should generate a paragraph with 1 sentence and a random number of words', () => {
const result = paragrafo();
const sentenceCount = result.split('\n').length;
strictEqual(sentenceCount, 1, 'Paragraph should contain 1 sentence');
strictEqual(result.endsWith('.'), true, 'Paragraph should end with a period');
});

test('Should generate a paragraph with 3 sentences and the default number of words per sentence', () => {
const sentenceCount = 3;
const result = paragrafo(sentenceCount);
const generatedSentenceCount = result.split('\n').length;
strictEqual(generatedSentenceCount, sentenceCount, `Paragraph contains ${generatedSentenceCount} sentences`);
});

test('Should generate a paragraph with 2 sentences and 8 words per sentence', () => {
const sentenceCount = 2;
const wordCount = 8;
const result = paragrafo(sentenceCount, wordCount);
const sentences = result.split('\n');
strictEqual(sentences.length, sentenceCount, `Paragraph contains ${sentences.length} sentences`);
sentences.forEach(sentence => {
const generatedWordCount = sentence.split(' ').length;
strictEqual(generatedWordCount, wordCount, `Sentence contains ${generatedWordCount} words`);
});
});

});

0 comments on commit 921ef64

Please sign in to comment.