Compare projects
Project comparisons allow you to view any selection of projects side by side just like they're shown on regular categories or in search results. You can try out an example or start yourself by adding a library to the comparison via the input below. You can also easily share your current comparison with others by sending the URL of the current page.
0.0
# Crowdfund (Alec)
Ferramenta de linha de comando e biblioteca Ruby para simular um programa de **arrecadação de fundos** com rodadas, promessas (pledges) e diferentes tipos de projetos (básico, com *matching*, e *grant*).
## Instalação
```bash
gem install crowdfund_alec
```
Ou rode a partir do código-fonte:
```bash
ruby bin/crowdfund
```
## Como funciona
- Você carrega projetos via CSV (nome, fundos_iniciais, meta).
- Em cada rodada, um dado é rolado para **adicionar** (+25) ou **remover** (–15) fundos do projeto.
- Em paralelo, o projeto recebe **pledges** aleatórios: bronze ($50), silver ($75), gold ($100).
- Projetos podem ter comportamento especial:
- **MatchingProject**: quando chega a 50% da meta, cada `add_fund` passa a dobrar (+50).
- **GrantProject**: nunca perde fundos em `remove_fund`.
- Ao sair, o relatório salva os **subfinanciados** em `needmoremoney.txt` e imprime estatísticas.
## Uso (CLI)
```bash
# (1) CSV padrão (bin/projects.csv)
ruby bin/crowdfund
# (2) Informando um CSV customizado
ruby bin/crowdfund caminho/para/projetos.csv
```
Durante a execução:
- Digite um número para a quantidade de rodadas.
- Digite `q` ou `e` para sair e ver o relatório final.
### Formato do CSV
```
NomeDoProjeto,fundos_iniciais,meta
BuyaBoat,5,10000
TraveltoVictoriaIsland,5,3000
GetaPuppy,5,300
```
## Saída esperada
- Resumo por rodada dos fundos e pledges recebidos.
- Arquivo `needmoremoney.txt` contendo:
- Título do relatório.
- Projetos totalmente financiados.
- Projetos subfinanciados ordenados por **quanto falta**.
- Snapshot CSV de todos os projetos.
## API (uso como biblioteca)
Requerendo as classes principais:
```ruby
require 'crowdfund/project'
require 'crowdfund/fund_request'
```
Criando projetos e executando rodadas:
```ruby
project = Project.new("My App", 500, 2000)
funding = FundRequest.new("Startup do Alec")
funding.add_project(project)
funding.request_funding(5)
funding.print_results
```
### Classes principais
- `Project`
- Atributos: `name`, `fund_amount`, `target_fund_amount`
- Métodos: `add_fund`, `remove_fund`, `funds_needed`, `funded?`, `received_pledge`, `pledges`, `total_funds`, `each_received_pledge`, `to_csv`, `status`
- `FundRequest`
- Gerencia lista de projetos, executa rodadas, imprime e salva relatórios.
- `MatchingProject < Project`
- Dobra `add_fund` quando `halfway_funded?` (>= 50% da meta).
- `GrantProject < Project`
- Sobrescreve `remove_fund` para nunca diminuir fundos.
- `Pledgesmod`
- Constante `PLEDGES` e `.random` para escolher bronze/silver/gold.
- `FundingRound`
- Regras de uma rodada: rola `Die`, aplica `add/remove`, atribui pledge.
- `Fundable` (mixin)
- Implementa `add_fund`, `remove_fund`, `funds_needed`, `funded?`.
- `Die`
- D6 simples com `roll`.
## Testes
Rodar todos os testes:
```bash
rspec
```
Principais cenários cobertos:
- Regras de `add_fund`/`remove_fund`.
- Comportamento de `MatchingProject` e `GrantProject`.
- Integração de `FundingRound` e `Pledgesmod`.
- Geração do relatório em `FundRequest`.
## Licença
MIT — consulte o arquivo `LICENSE`.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
Activity