feat: Add configurable default difficulty via environment variable#7
feat: Add configurable default difficulty via environment variable#7
Conversation
Added DEFAULT_DIFFICULTY environment variable to allow configuring the default
mining difficulty without code changes.
Changes:
- Created .env.example with DEFAULT_DIFFICULTY=2
- Removed .env from git tracking (security best practice)
- Updated .env.test with DEFAULT_DIFFICULTY=2
- Updated Block model to use ENV.fetch('DEFAULT_DIFFICULTY', '2').to_i as default
- Updated main.rb to use ENV.fetch('DEFAULT_DIFFICULTY', '2').to_i when difficulty not provided
Benefits:
- Allows different difficulty settings per environment (dev/staging/prod)
- No code changes needed to adjust default difficulty
- Follows 12-factor app configuration principles
All tests passing (17 examples, 0 failures)
RuboCop clean (10 files, no offenses)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
WalkthroughSe introduce la variable de entorno Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutos
Possibly related PRs
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (4)
.env.example (1)
5-5: Variable de entorno agregada correctamente.La adición de
DEFAULT_DIFFICULTY=2es correcta y se alinea con los cambios en el código.Nota sobre ordenamiento (opcional): El linter sugiere ordenar las claves alfabéticamente (
DEFAULT_DIFFICULTYantes deENVIRONMENT). Esto es una convención de estilo menor y puede abordarse si se desea mantener consistencia con las reglas del linter.main.rb (1)
48-48: Cambio correcto, pero considerar extracción para evitar duplicación.La implementación funciona correctamente al leer la dificultad desde variables de entorno. Sin embargo, el patrón
ENV.fetch('DEFAULT_DIFFICULTY', '2').to_ise repite ensrc/block.rb:30, lo que viola el principio DRY.Adicionalmente, no hay validación del valor leído desde ENV. Si alguien configura un valor inválido (ej: negativo, cero, o texto),
.to_ipuede producir resultados inesperados (ej:'abc'.to_iretorna0).Refactor sugerido: Extraer a constante o método helper
Crea un helper compartido para centralizar la lógica:
# En helpers o en un módulo compartido def default_difficulty value = ENV.fetch('DEFAULT_DIFFICULTY', '2').to_i raise ArgumentError, 'DEFAULT_DIFFICULTY must be positive' if value <= 0 value endLuego úsalo en
main.rb:48:- difficulty = validation[:difficulty] || ENV.fetch('DEFAULT_DIFFICULTY', '2').to_i + difficulty = validation[:difficulty] || default_difficultyY en
src/block.rb:30:- field :difficulty, type: Integer, default: -> { ENV.fetch('DEFAULT_DIFFICULTY', '2').to_i } + field :difficulty, type: Integer, default: -> { default_difficulty }.env.test (1)
5-5: Variable de entorno agregada correctamente para el entorno de pruebas.La adición de
DEFAULT_DIFFICULTY=2en el archivo de configuración de pruebas es correcta y asegura consistencia entre entornos.Nota sobre ordenamiento (opcional): Similar a
.env.example, el linter sugiere ordenar alfabéticamente las claves. Esto es una convención de estilo menor.src/block.rb (1)
30-30: Uso correcto de lambda para default dinámico en Mongoid.La implementación usando lambda es correcta para Mongoid - el valor se evalúa en tiempo de creación de cada instancia, no al cargar la clase. Esto permite que la variable de entorno sea leída dinámicamente.
Observaciones:
- El mismo patrón
ENV.fetch('DEFAULT_DIFFICULTY', '2').to_ise repite enmain.rb:48(ver comentario en ese archivo sobre refactorización recomendada para eliminar duplicación).- No hay validación del valor de la variable de entorno, lo que podría permitir valores problemáticos como cero o negativos.
La implementación funciona correctamente según está.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
.env.example(1 hunks).env.test(1 hunks).junie/guidelines.md(1 hunks)main.rb(1 hunks)src/block.rb(1 hunks)
🧰 Additional context used
🪛 dotenv-linter (4.0.0)
.env.example
[warning] 5-5: [UnorderedKey] The DEFAULT_DIFFICULTY key should go before the ENVIRONMENT key
(UnorderedKey)
.env.test
[warning] 5-5: [UnorderedKey] The DEFAULT_DIFFICULTY key should go before the ENVIRONMENT key
(UnorderedKey)
🔇 Additional comments (1)
.junie/guidelines.md (1)
1-154: Las actualizaciones de documentación reflejan correctamente la nueva configuración basada en variables de entorno.La reorganización y expansión de las guías de desarrollo están bien estructuradas y documentan adecuadamente el nuevo enfoque de configuración con
DEFAULT_DIFFICULTY.
Summary
DEFAULT_DIFFICULTYenvironment variable.envfrom git tracking (security best practice).env.exampleas template for environment configurationChanges
.env.examplewithDEFAULT_DIFFICULTY=2configuration.env.testto includeDEFAULT_DIFFICULTY=2src/block.rb- Block model now reads default difficulty from environmentmain.rb- API endpoint uses environment variable when difficulty not provided.envfrom git tracking (already in .gitignore)Benefits
Technical Details
Test plan
🤖 Generated with Claude Code
Summary by CodeRabbit
Notas de la Versión
Nuevas Funcionalidades
Documentación
Tareas de Mantenimiento