- WHAT I NEED TO SOLVE? (problem description, PT)
- About - PT
- About - EN
- To Get Working
- Run Tests
- Run App
- Contribute
Virtudes:
Para resolver o problema em questão, pensei em deixá-lo da forma mais aberta possível, primando pela criação de novas funcionalidades e possibilitando um baixo acoplamento.
Usei a gem Yamlet para criar uma forma extremamente simples de salvar as informações obtidas, (não queria fazer in-memory).
Adotei em sua maioria o pattern Template Method para que possibilitasse implementar novas funcionalidades instantâneamente, e o melhor, sem precisar alterar o código legado. É possível analisar essa estrutura ao acessar a classe Rule
(rule.rb
).
Para cada linha do log uma regra diferente seria criada, ex: KillRule
diz respeito as linhas com Kill:
/ Item:
se quisesse descobrir quais items foram coletados... Enfim, isso possibilita que as outras regras não interfiram.
Problemas:
Infelizmente nem tudo são flores, a solução é um tanto quanto lenta, pois o arquivo yml não está preparado para tais acessos de I/O simultâneos, quem sabe algo mais assíncrono caia melhor. Ou uma mudança no formato de armazenamento.
Virtues:
To resolve the issue in question, I thought I'd leave it as openly as possible, striving for the creation of new features and enabling a low coupling.
I used the gem [Yamlet] (https://github.com/rbmrclo/yamlet) to create an extremely simple way to save the information obtained, (did not want to do in-memory).
Adopted mostly the pattern [Template Method] (https://github.com/nslocum/design-patterns-in-ruby#template-method) that would enable to implement new features instantly, and the best, without having to change the code legacy. You can analyze this structure to access the Rule
class ( rule.rb
).
For each log line a different rule would be created, eg KillRule
concerns lines withKill:
/Item:
if you wanted to find out what items were collected... Anyway, it enables other rules do not interfere.
Problems:
Unfortunately not everything is perfect, the solution is somewhat slow because the yml file is not prepared for such access I / O simultaneously, perhaps something more asynchronous fall better. Or a change in storage size.
$ git clone [email protected]:brunoocasali/quake_log_parser.git
$ cd quake_log_parser
$ bundle install
$ rspec
$ ruby app.rb
See the issues page /issues
by: Bruno Casali, @brunoocasali