-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #103 from lageIBUSP/bulk
Bulk
- Loading branch information
Showing
11 changed files
with
196 additions
and
87 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
<?php | ||
|
||
namespace App\Rules; | ||
|
||
use Illuminate\Contracts\Validation\Rule; | ||
use Illuminate\Support\Arr; | ||
use App\Utils\Csv; | ||
|
||
class CsvRule implements Rule | ||
{ | ||
private $rules = []; | ||
private $colNames = []; | ||
private $error_messages = []; | ||
|
||
/** | ||
* Create a new rule instance. | ||
* | ||
* @param array $rules | ||
* @return void | ||
*/ | ||
public function __construct($rules) | ||
{ | ||
$this->rules = $rules; | ||
$this->colNames = array_keys($this->rules); | ||
} | ||
|
||
/** | ||
* Determine if the validation rule passes. | ||
* | ||
* @param string $attribute | ||
* @param mixed $value | ||
* @return bool | ||
*/ | ||
public function passes($attribute, $value) | ||
{ | ||
$result = false; | ||
$request = request(); | ||
|
||
if($request->hasFile($attribute)) { | ||
|
||
$errors = []; | ||
|
||
// Get data | ||
$csv = new Csv($request->file($attribute)->get()); | ||
$csv_data = $csv->getData(); | ||
|
||
foreach($csv_data as $row_index => $row_data) { | ||
|
||
$validator = \Validator::make( | ||
$row_data, | ||
$this->rules | ||
); | ||
|
||
if($validator->fails()) { | ||
|
||
$line_errors = $validator->errors()->toArray(); | ||
foreach($line_errors as $error_index => $line_error) { | ||
// Add line information on error message | ||
$errors[] = "Line ".($row_index+2).": ".$line_error[0]; | ||
} | ||
} | ||
} | ||
|
||
$this->error_messages = $errors; | ||
|
||
if(empty($errors)) { | ||
$result = true; | ||
} | ||
|
||
} | ||
return $result; | ||
} | ||
|
||
/** | ||
* Get the validation error messages. | ||
* | ||
* @return array | ||
*/ | ||
public function message() | ||
{ | ||
return $this->error_messages; | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
<?php | ||
|
||
namespace App\Utils; | ||
|
||
class Csv | ||
{ | ||
protected $columnsNames = []; | ||
protected $data = []; | ||
|
||
public function __construct(string $content) { | ||
$rows = array_map('str_getcsv', explode(PHP_EOL, $content)); | ||
$this->columnsNames = array_map('trim', array_shift($rows)); | ||
|
||
foreach ($rows as $row) { | ||
$row = array_map('trim', $row); | ||
if( sizeof($row) == sizeof($this->columnsNames) ) { | ||
$associatedRowData = array_combine($this->columnsNames, $row); | ||
if (empty($keyField)) { | ||
$this->data[] = $associatedRowData; | ||
} else { | ||
$this->data[$associatedRowData[$keyField]] = $associatedRowData; | ||
} | ||
} | ||
} | ||
} | ||
|
||
public function getColumnNames(): array { | ||
return $this->columnsNames; | ||
} | ||
|
||
public function getData(): array { | ||
return $this->data; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,2 @@ | ||
* | ||
!public/ | ||
temp/ | ||
!.gitignore |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
* | ||
arquivos/ | ||
!examples/ | ||
!.gitignore |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
name,email | ||
Fulano de Tal, [email protected] | ||
Cicrana de Tal, [email protected] | ||
Zé da Silva, [email protected] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
name: '101.00 Bem-vindo(a) ao notaR' | ||
description: |- | ||
Olá! Este deve ser o primeiro exercício que você resolve no notaR, e ele serve para você ganhar familiaridade com o conceito de um corretor automático e com o funcionamento deste sistema. | ||
O notaR funciona executando o script (código) que você envia e verificando se esse script cumpre os requisitos do exercício. Nós não estamos verificando quais são os comandos que você escreve, e sim qual é o resultado, já que existem várias maneiras de resolver os mesmos problemas. | ||
Para pegar um gostinho de como o sistema funciona, nesse exercício você precisa criar 2 objetos. O primeiro deles é um vetor da classe "character" chamado <code>carambola</code>, contendo os elementos "abacaxi" e "beterraba". | ||
Para isso, crie um arquivo no seu computador contendo o comando: | ||
<code> | ||
carambola <- c("abacaxi", "beterraba") | ||
</code> | ||
Salve esse arquivo e envie para o corretor usando a caixinha abaixo. | ||
Feito? Você deve ter recebido uma mensagem indicando que seu aproveitamento foi de 50% até agora, e dando uma dica de como melhorar! O próximo passo é criar um objeto chamado <code>salada</code>, contendo "beringela" e "batata". Acrescente no seu script a seguinte linha (perceba que ela tem errinhos de digitação): | ||
<code> | ||
salada <- c("berinjuela", "babata") | ||
</code> | ||
Envie para o corretor e veja qual é a mensagem de ajuda agora! Corrija a digitação e envie de novo para receber a nota máxima! | ||
Por fim, às vezes cometemos erros e o código não executa. Tente enviar um arquivo com a seguinte linha (onde faltam os (parênteses)) para ver o que acontece. | ||
<code> | ||
salada <- c"beringela", "batata" | ||
</code> | ||
Se você receber essa mensagem nos próximos exercícios, <a href="panic.jpg">não se desespere</a>! Clique no linque de ajuda que fica abaixo de todos os enunciados para ver dicas de como descobrir o que está errado! | ||
precondicoes: |- | ||
my_carambola <- c("abacaxi", "beterraba") | ||
my_salada <- c("beringela", "batata") | ||
testes: | ||
- { condicao: 'exists("carambola")', dica: 'Não existe um objeto chamado carambola. Você selecionou o arquivo correto?', peso: 1.0 } | ||
- { condicao: 'class(carambola)=="character"', dica: 'O objeto carambola deveria ser da classe character', peso: 1.0 } | ||
- { condicao: 'identical(carambola, my_carambola)', dica: 'O conteúdo do objeto carambola está incorreto. Você digitou corretamente?', peso: 1.0 } | ||
- { condicao: 'exists("salada")', dica: 'Não existe um objeto chamado salada', peso: 1.0 } | ||
- { condicao: 'class(salada)=="character"', dica: 'O objeto salada deveria ser da classe character', peso: 1.0 } | ||
- { condicao: 'identical(salada, my_salada)', dica: 'O conteúdo do objeto salada está incorreto. Você digitou corretamente?', peso: 1.0 } |