REnum
Many useful functions implemented. REnum is Enum extended with convenient functions inspired by Ruby and Rails ActiveSupport. It also provides full support for native functions through metaprogramming.
Installation
def deps do
[
{:r_enum, "~> 0.1"}
]
endUsage
You can use all of Enum.Enumerable.* functions through REnum Module.
# Examples.
# REnum.Ruby.compact()
iex> [1, nil, 2, 3]
iex> |> REnum.compact()
[1, 2, 3]
# REnum.Ruby.tally()
iex> ~w(a c d b c a)
iex> |> REnum.tally()
%{
"a" => 2,
"c" => 2,
"d" => 1,
"b" => 1
}
# REnum.Ruby.grep()
iex> ["foo", "bar", "car", "moo"]
iex> |> REnum.grep(~r/ar/)
["bar", "car"]
# REnum.Ruby.reverse_each()
iex> [1, 2, 3]
iex> |> REnum.reverse_each(&IO.inspect(&1))
# 3
# 2
# 1
[1, 2, 3]
# REnum.ActiveSupport.pluck()
iex> payments = [
...> %Payment{dollars: 5, cents: 99},
...> %Payment{dollars: 10, cents: 0},
...> %Payment{dollars: 0, cents: 5}
...> ]
iex> |> REnum.pluck(:dollars)
[5, 10, 0]
# REnum.ActiveSupport.maximum()
iex> REnum.maximum(payments, :dollars)
10
# REnum.ActiveSupport.without()
iex> 1..5
iex> |> REnum.without([1, 5])
[2, 3, 4]
# Aliases.
# REnum.Ruby.select()
iex> [1, 2, 3]
iex> |> REnum.select(fn x -> rem(x, 2) == 0 end) ==
iex> Enum.filter([1, 2, 3], fn x -> rem(x, 2) == 0 end)
true
# Can use Elixir's Enum functions too.
# REnum.Ruby.find()
iex> [1, 2, 3]
iex> |> REnum.find(fn x -> rem(x, 2) == 1 end)
3
# REnum.Ruby.sort()
iex> [1, 2, 3]
iex> REnum.sort()
[1, 2, 3]For the full list of available functions, see API Reference.
Docs
See hexdocs.
Roadmap
- [x] 0.1.0
- REnum.Native
- REnum.Ruby
- REnum.Support
- RList.Native
- RMap.Native
- RRange.Native
- RStream.Native
- RUtils
- [x] 0.2.0
- REnum.ActiveSupport
- [ ] 0.4.0
- RList.Ruby
- [ ] 0.5.0
- RList.ActiveSupport
- [ ] 0.6.0
- RMap.Ruby
- RMap.ActiveSupport
- [ ] 0.7.0
- RRange.Ruby
- RRange.ActiveSupport
- [ ] 0.8.0
- RStream.Ruby
- RStream.ActiveSupport
Progress
| REnum | Elixir Module | Ruby Class | Elixir | Ruby | ActiveSupport |
|---|---|---|---|---|---|
| REnum | Enum | Enumerable | ✅ | ✅ | ✅ |
| RList | List | Array | ✅ | TODO | TODO |
| RMap | Map | Hash | ✅ | TODO | TODO |
| RRange | Range | Range | ✅ | TODO | TODO |
| RStream | Stream | Enumerator::Lazy | ✅ | TODO | TODO |