Some functions that I miss in Elixir core (and maybe you too).
Miss Elixir library brings in a non-intrusive way some extra functions that, for different reasons, are not part of the Elixir core.
None of the functions in Miss Elixir has the same name of functions present in the correspondent Elixir module.
Read about the motivation to create this Elixir library in this blog post.
The package can be installed by adding miss
to your list of dependencies in mix.exs
:
def deps do
[
{:miss, "~> 0.1.1"}
]
end
The order of the Miss
namespace preceding the existing Elixir modules to be extended was made by intention. For example,
Miss.String
.
The modules in Miss Elixir are not intended to be used with aliases. Always use the entire namespace to make explicit that module/function does not belong to Elixir core.
# Do not do that!
alias Miss.Kernel
Kernel.div_rem(10, 2)
# Instead, use like that:
Miss.Kernel.div_rem(10, 2)
Navigate in the documentation of each module to find out all the available functions and detailed examples.
Below there are some examples.
iex> Miss.String.build(["string", 123, true])
"string123true"
iex> Miss.String.build("What ", "do you", " miss?")
"What do you miss?"
iex> Miss.Map.rename_key(%{a: 1, b: 2, c: 3}, :b, :bbb)
%{a: 1, bbb: 2, c: 3}
iex> defmodule Post do
...> defstruct [:title, :text, :date, :author, comments: []]
...> end
...>
...> defmodule Author do
...> defstruct [:id, :name]
...> end
...>
...> defmodule Comment do
...> defstruct [:text]
...> end
...>
...> post = %Post{
...> title: "My post",
...> text: "Something really interesting",
...> date: ~D[2010-09-01],
...> author: %Author{
...> id: 1234,
...> name: "Pedro Bonamides"
...> },
...> comments: [
...> %Comment{text: "Comment one"},
...> %Comment{text: "Comment two"}
...> ]
...> }
...> Miss.Map.from_nested_struct(post, [{Date, :skip}])
%{
title: "My post",
text: "Something really interesting",
date: ~D[2010-09-01],
author: %{
id: 1234,
name: "Pedro Bonamides"
},
comments: [
%{text: "Comment one"},
%{text: "Comment two"}
]
}
iex> Miss.Kernel.div_rem(45, 2)
{22, 1}
iex> defmodule User do
...> defstruct name: "User"
...> end
...>
...> Miss.Kernel.struct_list(User, [%{name: "Akira"}, %{name: "Fernando"}])
[%User{name: "Akira"}, %User{name: "Fernando"}]
iex> Miss.List.intersection([1, 2, 3, 4, 5], [0, 2, 4, 6, 8])
[2, 4]
The full documentation is available at https://hexdocs.pm/miss.
See the contributing guide.
Miss Elixir is released under the Apache 2.0 License. See the LICENSE file.
Copyright © 2020 Fernando Hamasaki de Amorim