hex.pm version CI GitHub code size in bytes

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.0"}
  ]
end

Usage

You can use all of Enum.Enumerable.* functions through REnum Module.

# Examples.
# REnum.Enumerable.Ruby.compact()
iex> [1, nil, 2, 3]
iex> |> REnum.compact()
[1, 2, 3]
# REnum.Enumerable.Ruby.tally()
iex> ~w(a c d b c a)
iex> |> REnum.tally()
%{
  "a" => 2,
  "c" => 2,
  "d" => 1,
  "b" => 1
}
# REnum.Enumerable.Ruby.grep()
iex> ["foo", "bar", "car", "moo"]
iex> |> REnum.grep(~r/ar/)
["bar", "car"]
# REnum.Enumerable.Ruby.reverse_each()
iex> [1, 2, 3]
iex> |> REnum.reverse_each(&IO.inspect(&1))
# 3
# 2
# 1
[1, 2, 3]
# REnum.Enumerable.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.Enumerable.ActiveSupport.maximum()
iex> REnum.maximum(payments, :dollars)
10
# REnum.Enumerable.ActiveSupport.without()
iex> 1..5
iex> |> REnum.without([1, 5])
[2, 3, 4]

# Aliases.
# REnum.Enumerable.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.Enumerable.Ruby.find()
iex> [1, 2, 3]
iex> |> REnum.find(fn x -> rem(x, 2) == 1 end)
3
# REnum.Enumerable.Ruby.sort()
iex> [1, 2, 3]
iex> REnum.sort()
[1, 2, 3]

And more functions. See also

Docs

See hexdocs.

Roadmap

  • [x] 0.1.0
    • REnum.Enumerable.Native
    • REnum.Enumerable.Ruby
    • REnum.Enumerable.Support
    • REnum.List.Native
    • REnum.Map.Native
    • REnum.Range.Native
    • REnum.Stream.Native
    • REnum.Utils
  • [x] 0.2.0
    • REnum.Enumerable.ActiveSupport
  • [ ] 0.3.0
    • REnum.List.Ruby
  • [ ] 0.4.0
    • REnum.List.ActiveSupport
  • [ ] 0.5.0
    • REnum.Map.Ruby
    • REnum.Map.ActiveSupport
  • [ ] 0.6.0
    • REnum.Range.Ruby
    • REnum.Range.ActiveSupport
  • [ ] 0.7.0
    • REnum.Stream.Ruby
    • REnum.Stream.ActiveSupport

Progress

REnumElixir ModuleRuby ClassElixirRubyActiveSupport
REnumEnumEnumerable
REnum.ListListArray××
REnum.MapMapHash××
REnum.RangeRangeRange××
REnum.StreamStreamEnumerator::Lazy××