Download the PHP package alazzi-az/laravel-bitmask without Composer
On this page you can find all versions of the php package alazzi-az/laravel-bitmask. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download alazzi-az/laravel-bitmask
More information about alazzi-az/laravel-bitmask
Files in alazzi-az/laravel-bitmask
Package laravel-bitmask
Short Description laravel package to work with bitmasking
License MIT
Homepage https://github.com/alazzi-az/laravel-bitmask
Informations about the package laravel-bitmask
Laravel Bitmask
Laravel Bitmask is a powerful wrapper package for integrating the functionality of the php-bitmask library into Laravel applications. It leverages Laravel's service container and facades to provide an elegant and intuitive interface for reading, validating, and converting bitmasks. The package also simplifies casting bitmasks to and from enum values, enabling developers to efficiently apply bitmasking techniques while harnessing the full power of Laravel’s ecosystem.
Features
- Bitmask Reading: Easily retrieve active bits from a given bitmask.
- Bitmask Validation: Ensure that provided bits and masks are valid, including checks for single-bit settings.
- Bitmask Conversion: Convert indices to bitmasks and vice versa, along with conversions to binary string representations.
- Casting for Masks and Enums: Automatically handle the casting of bitmask values to and from enum types, providing a seamless experience when working with enumerated bitmasks.
- Integration with Laravel: Utilizes Laravel's facade system for seamless integration and easy access.
- Eloquent Query Scopes: Provides a trait with query scopes for performing bitmask operations directly within your Eloquent models.
Installation
You can install the package via Composer:
Usage
1. HasBitmask Trait
The HasBitmask
trait provides Eloquent query scopes for performing bitmask operations on multiple columns within your models.
Overview
The HasBitmask
trait allows you to:
- Check if a specific flag is set.
- Check if any of a set of flags are set.
- Check if all of a set of flags are set.
- Check if specific flags are not set.
Integration
To use the HasBitmask
trait in your Laravel models, follow these steps:
-
Import and Use the Trait
-
Define Bitmask Columns
In your model, define the
$bitmaskColumns
property as shown above. This property is an associative array where keys are the column names storing bitmask values, and values are the corresponding Enum classes. If no Enum is associated, you can set the value tonull
.
Usage Examples
Assuming you have an Archive
model with archive_data_flag
and user_permissions_flag
columns, here are some usage examples:
a. Querying for a Single Flag
Objective: Retrieve all Archive
records where the HOTELS
flag is set in the archive_data_flag
column.
b. Querying for Multiple Flags (Any)
Objective: Retrieve all Archive
records where any of the specified flags (HOTELS
or CITIES
) are set in the archive_data_flag
column.
c. Querying for Multiple Flags (All)
Objective: Retrieve all Archive
records where all of the specified flags (HOTELS
and CITIES
) are set in the archive_data_flag
column.
d. Querying Across Multiple Bitmask Columns
Objective: Retrieve all Archive
records where the HOTELS
flag is set in archive_data_flag
and the ADMIN
flag is set in user_permissions_flag
.
e. Excluding Flags
Objective: Retrieve all Archive
records where the HOTELS
flag is not set in the archive_data_flag
column.
For full enum example
2. EnumBitmaskCast
Overview
EnumBitmaskCast
is a custom attribute casting class that converts a bitmask integer into an enum-based object. This allows you to leverage PHP enums in your models for cleaner and more expressive code.
Usage
To use EnumBitmaskCast
in your model, specify the cast in the $casts
property:
Example
3. BitmaskCast
Overview
BitmaskCast
is another custom attribute casting class that handles integer bitmask values. It allows you to work with bitmask values more easily in your models.
Usage
To use BitmaskCast
in your model, specify the cast in the $casts
property:
Example
4. BitmaskHandler
The BitmaskHandler
class provides an interface for managing bitmask operations in a Laravel application. It allows for the manipulation of bitmasks through various methods, including adding, deleting, and checking for specific bits.
5. EnumBitmaskHandler
The EnumBitmaskHandler
class provides an interface for managing bitmask operations specific to enumerations in a Laravel application. It allows manipulation of bitmasks using enums, enabling you to add, delete, and check for specific bits represented by these enums.
Example Usage
Here's an example that illustrates how to use the EnumBitmaskHandler
class:
Note on toArray
Method
If you want to customize the keys in the resulting array from the toArray
method, consider implementing the Alazziaz\LaravelBitmask\Contracts\MaskableEnum
interface for your enum. You can define a toMaskKey
method to specify custom keys for each enum value. For example:
With this approach, the toArray
method in EnumBitmaskHandler
can utilize the toMaskKey
method to generate a more descriptive and meaningful array representation of the current mask.
6. Additional Bitmask Class Methods
1. Exposing BitmaskConverter Methods
-
indexToBitMask(int $index): int
Converts an index to its corresponding bitmask.
Example: -
bitMaskToIndex(int $mask): int
Converts a bitmask to its index.
Example: -
getEnumMaxBitValue(string $enum): int
Retrieves the maximum bit value for the given enum. -
bitMaskToArray(int $mask): array
Converts a bitmask into an array of active bit values.
Example: arrayToBitMask(array $bits): int
Converts an array of bit values to a bitmask.
Example:
2. Exposing BitmaskReader Methods
-
getActiveBits(int $bitmask): array
Retrieves the active bit values from a bitmask.
Example: -
getActiveIndexes(int $bitmask): array
Retrieves the active bit indexes from a bitmask.
Example: -
countActiveBits(int $bitmask): int
Counts the number of active bits in a bitmask.
Example: -
getMostSignificantBitIndex(int $bitmask): int
Returns the index of the most significant active bit.
Example: -
getLeastSignificantBitIndex(int $bitmask): int
Returns the index of the least significant active bit.
Example: convertToBinaryString(int $bitmask): string
Converts a bitmask to its binary string representation.
Example:
3. Exposing BitmaskValidator Methods
-
validateBit(int $bit): void
Validates a single bit to ensure it's valid.
Example: validateBits(array $bits): void
Validates an array of bits to ensure all are valid.
Example:
Testing
You can run the package's test suite using Composer:
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Credits
- Mohammed Azman
- All Contributors
License
The MIT License (MIT). Please see License File for more information.
All versions of laravel-bitmask with dependencies
alazzi-az/php-bitmask Version ^1.0
illuminate/contracts Version ^10.0||^11.0
spatie/laravel-package-tools Version ^1.16