Configuration Guide
View SourceThe TaskValidator library provides a flexible configuration system that allows you to customize validation parameters to match your project's specific requirements.
Overview
All configuration is managed through Elixir's Application environment. The TaskValidator.Config
module provides centralized access to all configuration values with sensible defaults.
Configuration Options
Basic Configuration
# config/config.exs
config :task_validator,
valid_statuses: ["Not Started", "Planned", "In Progress", "Completed", "On Hold"],
valid_priorities: ["High", "Medium", "Low"]
Task ID Format
Customize the regex pattern for task IDs:
config :task_validator,
task_id_regex: ~r/^[A-Z]{2,4}\d{3,4}(-\d+)?$/
This default pattern matches:
- Main tasks:
SSH0001
,ERR001
,SCP0005
- Subtasks:
SSH0001-1
,ERR001-2
Review Ratings
Configure the valid review rating format:
config :task_validator,
rating_regex: ~r/^\d+\.\d+\/10$/
Code Quality KPIs
Set thresholds for code quality metrics:
config :task_validator,
kpis: %{
max_functions_per_module: 5,
max_lines_per_function: 15,
max_call_depth: 2
}
Task Categories
Define task number ranges for different categories:
config :task_validator,
task_categories: %{
"core" => 1..99,
"features" => 100..199,
"documentation" => 200..299,
"testing" => 300..399
}
Complete Example
Here's a complete configuration example:
# config/config.exs
config :task_validator,
valid_statuses: ["Not Started", "Planned", "In Progress", "Completed", "On Hold", "Cancelled"],
valid_priorities: ["Critical", "High", "Medium", "Low"],
task_id_regex: ~r/^[A-Z]{3}\d{4}(-\d+)?$/,
rating_regex: ~r/^\d+\.\d+\/10$/,
kpis: %{
max_functions_per_module: 7,
max_lines_per_function: 20,
max_call_depth: 3
},
task_categories: %{
"infrastructure" => 1..99,
"api" => 100..199,
"ui" => 200..299,
"testing" => 300..399,
"documentation" => 400..499
}
Runtime Configuration
You can also configure values at runtime:
# Set a single value
Application.put_env(:task_validator, :valid_statuses, ["Draft", "Active", "Done"])
# Set multiple values
Application.put_all_env([
{:task_validator, :valid_priorities, ["P0", "P1", "P2", "P3"]},
{:task_validator, :kpis, %{max_functions_per_module: 10}}
])
Configuration Validation
The TaskValidator.Config
module validates configuration values when accessed:
- Status and priority lists must be non-empty lists of strings
- KPI values must be positive integers
- Task categories must be non-overlapping ranges
Invalid configurations will raise an error with a descriptive message.
Testing with Configuration
When testing, you may want to temporarily override configuration:
defmodule MyTest do
use ExUnit.Case
setup do
# Store original config
original_statuses = Application.get_env(:task_validator, :valid_statuses)
# Set test config
Application.put_env(:task_validator, :valid_statuses, ["Test Status"])
on_exit(fn ->
# Restore original config
Application.put_env(:task_validator, :valid_statuses, original_statuses)
end)
:ok
end
test "validates with custom status" do
# Your test here
end
end
Default Values
If no configuration is provided, the following defaults are used:
- Valid Statuses: "Not Started", "Planned", "In Progress", "Completed", "On Hold"
- Valid Priorities: "High", "Medium", "Low"
- Task ID Regex:
^[A-Z]{2,4}\d{3,4}(-\d+)?$
- Rating Regex:
^\d+\.\d+\/10$
- Max Functions per Module: 5
- Max Lines per Function: 15
- Max Call Depth: 2
- Task Categories:
- core: 1-99
- features: 100-199
- documentation: 200-299
- testing: 300-399
Best Practices
- Use config files for environment-specific settings
- Document your custom configuration in your project's README
- Validate early by checking configuration at application startup
- Keep defaults sensible to minimize required configuration
- Test with different configurations to ensure flexibility