shahryarjb

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:

  1. Validation
  2. Sanitizing
  3. Constructor
  4. 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.


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

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 hint inside derive conditional_field and normal derive
  • Support domain key inside children fields
  • Support new derives: not_flatten_empty, not_flatten_empty_item as validation
  • Support not_empty and max_len, min_len for list in validation derive.

Fixed bugs:

  • Fix and Remove downcase bug in strip_tags
  • Fix and Remove preventer of calling a struct inside 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 GuardedStruct macro in different files
  • Add dialyzer for 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

shahryarjb

We are delighted to introduce our new version (0.1.4) of Mishka developer tools library. For more info click on GuardedStruct.

Run in Livebook


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:

  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 derives errors
  • Fix dialyzer warning
  • 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

Run in 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

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 GuardedStruct macro, you can remove Mishka Developer Tools and install the mentioned library instead.

Installation

def deps do
  [
    {:guarded_struct, "~> 0.0.1"}
  ]
end

Where Next?

Popular in Announcing Top

josevalim
Yes, yet another parser combinator library! Most of the parser combinators in the ecosystem are either compile-time, often using AST tra...
159 19103 141
New
seancribbs
Today I released a new dialyzer Mix task as the dialyzex package! At the time we started writing this task, the existing dialyzer integra...
New
mplatts
With HEEX released we decided to start a components library using Tailwind CSS - check it out here: Petal Components. We also have a boi...
New
Crowdhailer
I have been updating a library that allows you to pipe between functions that use the erlang result tuple convention. Assuming you have...
New
mbuhot
Leverage Open Api 3.0 (Swagger) to document, test, validate and explore your Plug and Phoenix APIs. Generate and serve a JSON Open API ...
New
bluzky
You may know https://ui.shadcn.com/, a UI component library for React. I really love it’s design style and components. I’ve built some co...
384 13673 119
New
hpopp
After just over two years in development, this latest version of Pigeon is what I finally consider done in regards to my original vision ...
New
Hal9000
Here is my first stab at this. README pasted below. https://github.com/Hal9000/elixir_random Comments and critiques are welcome. Th...
New
Qqwy
TypeCheck: Fast and flexible runtime type-checking for your Elixir projects. Core ideas Type- and function specifications are const...
336 14302 100
New
mattludwigs
Grizzly is a library for working with Z-Wave devices. Z-Wave is a low-frequency radio protocol for controlling smart home devices on a me...
New

Other popular topics Top

sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
274 41454 115
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30840 112
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod -- where is this set? Thanks.
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New

We're in Beta

About us Mission Statement