Current section
Files
Jump to
Current section
Files
private_module
README.md
README.md
# PrivateModule
[](https://hex.pm/packages/private_module)
[](https://hexdocs.pm/private_module)
PrivateModule is an Elixir library that introduces the concept of private modules - modules that can only be used within their parent module. This helps enforce encapsulation and prevents external access to internal implementation details.
## Installation
Add `private_module` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:private_module, "~> 0.1.0", runtime: false}
]
end
```
Then add the `:private_module` compiler to your project configuration:
```elixir
def project do
[
# ... other configuration
compilers: [:private_module] ++ Mix.compilers(),
# ... other configuration
]
end
```
## Usage
To mark a module as private, simply `use PrivateModule`:
```elixir
defmodule MyApp.UserService do
def create_user(params) do
validated_params = Validator.validate(params)
# ... implementation
end
defmodule Validator do
use PrivateModule
def validate(params) do
# Private validation logic
params
end
end
end
```
In this example:
- ✅ `MyApp.UserService` can call `MyApp.UserService.Validator.validate/1`
- ❌ Any other module (like `MyApp.AccountService`) cannot call `MyApp.UserService.Validator.validate/1`
## Error Messages
When a privacy violation is detected, you'll see a clear error message:
```
error: Module MyApp.SomeOtherModule is not allowed to call private module MyApp.UserService.Validator
at lib/my_app/some_other_module.ex:15
```
## Development
To set up the development environment:
```bash
git clone https://github.com/bit4bit/private_module.git
cd private_module
mix deps.get
mix test
```
### Running Tests
```bash
mix test
```
### Code Quality
```bash
mix credo
mix dialyzer
```
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests for new functionality
5. Ensure all tests pass
6. Submit a pull request
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.