shahryarjb
Mishka developer tools - macros and modules to make creating your elixir application
I tried to deliver a series of our client’s CMS built on Elixir at the start of the my small group project, but we recently archived this open-source project and have yet to make plans to rework and expand it. After a long period, a series of macros and functional modules emerged from this project and our other projects, which we are gradually publishing in this library.
The creation of this macro will allow you to build normal/nested Structs that provide you with a number of important options, including the following:
- Validation
- Sanitizing
- Constructor
- It provides the capacity to operate in a nested style simultaneously.
This is the latest macro that I put in this library and it makes good features for you with the help of struct. Please click on the name of this macro to see different examples of it.
-
2. Basic CRUD
Creating basic CRUD; This macro needs to be rewritten and it is a simple macro that can be very useful to save your time.
I will gradually add some other modules and macros that may be useful to this post, please do not hesitate to give me your comments and suggestions.
Links
Hex: mishka_developer_tools | Hex
Documents: MishkaDeveloperTools — Mishka developer tools v0.1.9
Github: GitHub - mishka-group/mishka_developer_tools: Mishka developer tools provides some macros and modules to make creating your elixir application as easy as possible
Most Liked
shahryarjb
We are delighted to introduce our new version (0.1.3) of Mishka developer tools library.
For more info click on GuardedStruct.
RoadMap 0.1.4: Predefined validations and sanitizers version 0.1.4 · Issue #8 · mishka-group/guarded_struct · GitHub
Changelog for MishkaDeveloperTools 0.1.3
Features:
- Support List
conditional_field
"actor": [
"http://joe.example.org",
{
"type": "Person",
"id": "http://sally.example.org",
"name": "Sally"
},
:test
]
- Covering
hintinside deriveconditional_fieldand normalderive - Support
domainkey inside children fields - Support new derives:
not_flatten_empty,not_flatten_empty_itemas validation - Support
not_emptyandmax_len,min_lenfor list in validation derive.
Fixed bugs:
- Fix and Remove
downcasebug instrip_tags - Fix and Remove preventer of calling a
structinside itself - Fix domain core key to prevent it not to check domain when the key is
nil
Improvements:
- Changing the structure of on core key based on the value of the caller
- Support calling struct inside itself
- Separate all test of
GuardedStructmacro in different files - Add
dialyzerfor GuardedStruct macro
Github: Release 0.1.3 · mishka-group/mishka_developer_tools · GitHub
Hex: mishka_developer_tools | Hex
If you can contribute with me in this way, please contact me
shahryarjb
We are delighted to introduce our new version (0.1.4) of Mishka developer tools library. For more info click on GuardedStruct.
RoadMap 0.1.5: Predefined validations and sanitizers version 0.1.5 · Issue #27 · mishka-group/mishka_developer_tools · GitHub
Changelog for MishkaDeveloperTools 0.1.4
Features:
-
Support whole entries check derives for struct or structs (external module) (More information: Support whole entries check derives for `struct` or `structs` (external module) · Issue #26 · mishka-group/mishka_developer_tools · GitHub)
-
Support
deriveandvalidatoronconditional_fieldmacro as entries checker -
Support nested conditional fields(More information: Support nested conditional fields · Issue #7 · mishka-group/guarded_struct · GitHub)
guardedstruct do
conditional_field(:actor, any()) do
field(:actor, struct(), struct: Actor, derive: "validate(map, not_empty)")
conditional_field(:actor, any(),
structs: true,
derive: "validate(list, not_empty, not_flatten_empty_item)"
) do
field(:actor, struct(), struct: Actor, derive: "validate(map, not_empty)")
field(:actor, String.t(), derive: "sanitize(tag=strip_tags) validate(url, max_len=160)")
end
field(:actor, String.t(), derive: "sanitize(tag=strip_tags) validate(url, max_len=160)")
end
end
Fixed bugs:
- Fix showing different errors when they accompany a conditional errors
- Fix short anonymous function warning in elixir 1.16
- Support pre-check derives inside conditional fields
- Normalize conditional fields errors
- Normalize validator errors
- Normalize errors
hint - Normalize
deriveserrors - Fix
dialyzerwarning - Support derive in normal conditional field without validator
conditional_field(:id, String.t()) do
field(:id, String.t(), derive: "sanitize(tag=strip_tags) validate(url, max_len=160)")
field(:id, any(), derive: "sanitize(tag=strip_tags) validate(not_empty_string, uuid)")
end
Docs
- Add LiveBook
Github: Release 0.1.4 · mishka-group/mishka_developer_tools · GitHub
Hex: mishka_developer_tools | Hex
If you can contribute with me in this way, please contact me
shahryarjb
We recently separated the GuardedStruct macro into a standalone library. Please visit its repository for more information.
The Mishka Developer Tools library became a place where I gradually added my helper tools, one of which was the GuardedStruct macro, which eventually became a fully independent and improved tool. I received two requests to separate this library, along with other reasons, such as deprecating many optional libraries that, if installed, provided an additional validation layer, like for location.
Now, all these optional libraries have been removed, and if you’d like to add custom validation, you can easily do so following the library’s documentation. Backward compatibility has also been fully considered, allowing you to use the package with ease.
Hex: guarded_struct | Hex
In the next version, I’ll publish a separate post for this library. If you were only using the
GuardedStructmacro, you can remove Mishka Developer Tools and install the mentioned library instead.
Installation
def deps do
[
{:guarded_struct, "~> 0.0.1"}
]
end








