{"id":15588620,"url":"https://github.com/brunoocasali/qke","last_synced_at":"2025-07-11T08:08:09.528Z","repository":{"id":77548583,"uuid":"64762768","full_name":"brunoocasali/qke","owner":"brunoocasali","description":"This is a simple test in pure ruby to make a parser for Quake III logs.","archived":false,"fork":false,"pushed_at":"2018-01-08T19:01:51.000Z","size":95,"stargazers_count":1,"open_issues_count":3,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-24T00:36:55.626Z","etag":null,"topics":["proficiency-test","quake-log-parser","ruby","wercker"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brunoocasali.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-02T14:14:57.000Z","updated_at":"2017-05-15T14:01:29.000Z","dependencies_parsed_at":"2023-03-20T18:16:44.058Z","dependency_job_id":null,"html_url":"https://github.com/brunoocasali/qke","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunoocasali%2Fqke","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunoocasali%2Fqke/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunoocasali%2Fqke/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunoocasali%2Fqke/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brunoocasali","download_url":"https://codeload.github.com/brunoocasali/qke/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246165765,"owners_count":20734098,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["proficiency-test","quake-log-parser","ruby","wercker"],"created_at":"2024-10-02T22:40:54.315Z","updated_at":"2025-03-29T09:29:02.212Z","avatar_url":"https://github.com/brunoocasali.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quake Log Parser!\n\n[![wercker status](https://app.wercker.com/status/fe8cc0e5d4b85d476a540bc32a0c7a95/s/master \"wercker status\")](https://app.wercker.com/project/byKey/fe8cc0e5d4b85d476a540bc32a0c7a95)\n[![Code Climate](https://codeclimate.com/github/brunoocasali/quake_log_parser/badges/gpa.svg)](https://codeclimate.com/github/brunoocasali/quake_log_parser)\n[![Test Coverage](https://codeclimate.com/github/brunoocasali/quake_log_parser/badges/coverage.svg)](https://codeclimate.com/github/brunoocasali/quake_log_parser/coverage)\n[![Issue Count](https://codeclimate.com/github/brunoocasali/quake_log_parser/badges/issue_count.svg)](https://codeclimate.com/github/brunoocasali/quake_log_parser)\n\n#### Contents:\n  - **[WHAT I NEED TO SOLVE? (problem description, PT)](/TEST.md)**\n  - [About - PT](#about-solution-pt)\n  - [About - EN](#about-solution-en)\n  - [To Get Working](#to-get-working)\n  - [Run Tests](#run-tests)\n  - [Run App](#run-app)\n  - [Contribute](#contribute)\n\n\n### About Solution [PT]:\n  \n  **Virtudes:**\n  \n  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.\n  \n  Usei a gem [Yamlet](https://github.com/rbmrclo/yamlet) para criar uma forma extremamente simples de salvar as informações obtidas, (não queria fazer in-memory).\n  \n  Adotei em sua maioria o pattern [Template Method](https://github.com/nslocum/design-patterns-in-ruby#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`).\n  \n  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.\n  \n  **Problemas:**\n  \n  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.\n\n### About Solution [EN]:\n\n  **Virtues:**\n  \n  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.\n  \n  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).\n  \n  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`).\n  \n  For each log line a different rule would be created, eg `KillRule` concerns lines with` Kill: `/` Item: `if you wanted to find out what items were collected... Anyway, it enables other rules do not interfere.\n  \n  **Problems:**\n  \n  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.\n  \n### To Get Working:\n\n- `$ git clone git@github.com:brunoocasali/quake_log_parser.git`\n- `$ cd quake_log_parser`\n- `$ bundle install`\n\n### Run Tests:\n\n- `$ rspec`\n\n### Run App:\n\n- `$ ruby app.rb`\n \n\n### Contribute:\n\n  See the issues page [/issues](https://github.com/brunoocasali/quake_log_parser/issues)\n\n\n\nby: **Bruno Casali**, @brunoocasali\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrunoocasali%2Fqke","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrunoocasali%2Fqke","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrunoocasali%2Fqke/lists"}