MongoDB Factory

Uma gem Ruby que fornece um cliente MongoDB com padrão Singleton e operações comuns de banco de dados.

Instalação

Adicione esta linha ao seu Gemfile:

gem 'mongodb_factory'

E execute:

$ bundle install

Ou instale diretamente:

$ gem install mongodb_factory

Configuração

Configure as variáveis de ambiente para conexão com MongoDB:

# Opção 1: Variáveis padrão
export USER=seu_usuario_mongodb
export PASSWORD=sua_senha_mongodb
export HOST=seu_host_mongodb
export DATABASE=seu_database_mongodb

# Opção 2: Variáveis específicas do MongoDB
export MONGODB_USER=seu_usuario_mongodb
export MONGODB_PASSWORD=sua_senha_mongodb
export MONGODB_HOST=seu_host_mongodb
export MONGODB_DATABASE=seu_database_mongodb

Uso

Básico

require 'mongodb_factory'

# Usando o padrão Singleton
client = MongodbFactory::Client.instance

# Ou criando uma nova instância com string de conexão customizada
client = MongodbFactory::Client.new("mongodb://localhost:27017/meu_database")

Operações CRUD

# Inserir múltiplos documentos
data = [
  { name: "João", age: 30 },
  { name: "Maria", age: 25 }
]
client.insert_many("users", data)

# Buscar documentos
users = client.find("users", { age: { "$gte" => 25 } })

# Buscar com ordenação e limite
recent_users = client.find_sort("users", {}, { created_at: -1 }, 10)

# Atualizar documento
client.update("users", { name: "João" }, { "$set" => { age: 31 } })

Operações Especializadas

# Contar status de requests (método específico do domínio)
status_counts = client.count_status_requests("requests")

# Upsert de logs
document = { ms: 1234567890, message: "Log entry", created_at: Time.now }
client.upsert_log_to_mongo("logs", document)

# Buscar grupos de log
log_groups = client.fetch_log_groups_from_mongo

# Obter última execução
last_run = client.get_last_run_from_mongo("executions", 1234567890)

Métodos Disponíveis

  • insert_many(collection_name, data) - Insere múltiplos documentos
  • find(collection_name, query) - Busca documentos
  • find_sort(collection_name, query, sort, limit) - Busca com ordenação e limite
  • update(collection_name, query, update_query) - Atualiza documento
  • update_log_group(collection_name, query, update_query, upsert: false) - Atualiza com opção de upsert
  • count_status_requests(collection_name) - Conta status de requests por domínio
  • upsert_log_to_mongo(collection_name, document) - Upsert de logs
  • upsert_log_to_mongo_log_group(collection_name, document) - Upsert de grupos de log
  • fetch_log_groups_from_mongo - Busca grupos de log
  • get_last_run_from_mongo(collection_name, ms) - Obtém última execução

Desenvolvimento

Após clonar o repositório:

$ bundle install
$ rake spec  # Para executar os testes

Contribuição

  1. Faça um Fork do projeto
  2. Crie uma branch para sua feature (git checkout -b my-new-feature)
  3. Commit suas mudanças (git commit -am 'Add some feature')
  4. Push para a branch (git push origin my-new-feature)
  5. Crie um Pull Request

Licença

Esta gem está disponível como código aberto sob os termos da Licença MIT.