defmodule Avatador.Helpers do require Integer @moduledoc """ Helper functions for Avatador. """ @moduledoc since: "0.1.0" @doc """ Convert a `value` to `String`. Only converts `Float`, `Integer`, and `Binary` values. `nil` returns `nil`, all else returns `""` (empty string). """ @doc since: "0.1.0" def to_string(value) when is_float(value), do: Float.to_string(value) def to_string(value) when is_integer(value), do: Integer.to_string(value) def to_string(value) when is_binary(value), do: value def to_string(_), do: "" @doc """ Convert a `value` to `Float`. Only converts `Float`, `Integer`, and `Binary` values. All else returns `0.0`. """ @doc since: "0.1.0" def to_float(value) when is_float(value), do: value def to_float(value) when is_integer(value), do: value / 1 def to_float(value) when is_binary(value), do: binary_to_float(value) def to_float(_), do: 0.0 defp binary_to_float(value) do case Float.parse(value) do {int, ""} -> int :error -> 0.0 end end @doc """ Convert a `value` to `Integer`. Only converts `Float`, `Integer`, and `Binary` values. All else returns `0`. """ @doc since: "0.1.0" def to_integer(value) when is_float(value), do: trunc(value) def to_integer(value) when is_integer(value), do: value def to_integer(value) when is_binary(value), do: binary_to_integer(value) def to_integer(_), do: 0 defp binary_to_integer(value) do case Integer.parse(value) do {int, ""} -> int :error -> 0 end end @doc """ Convert a `value` to `Boolean`. `"true"`, `true`, `"1"`, `1` returns `true` `"false"`, `false`, `"0"`, `0` returns `false` """ @doc since: "0.1.0" def to_boolean("true"), do: true def to_boolean("false"), do: false def to_boolean(true), do: true def to_boolean(false), do: false def to_boolean("1"), do: true def to_boolean("0"), do: false def to_boolean(1), do: true def to_boolean(0), do: false def to_boolean(_), do: false @doc """ Hash a `string`. """ @doc since: "0.1.0" def hash_value(string), do: :crypto.hash(:md5, string) @doc """ Convert a `hash` to `Integer`. """ @doc since: "0.1.0" def hash_to_integer(hash), do: hash |> :crypto.bytes_to_integer() @doc """ Convert a `hash` to `List`. """ @doc since: "0.1.0" def hash_to_list(hash), do: hash |> :binary.bin_to_list() @doc """ Generate the initials for a `String`. """ @doc since: "0.1.0" def generate_initials(string) when is_binary(string) do word_array = String.split(string) if length(word_array) == 1 do List.first(word_array) |> String.slice(0..1) else initial1 = String.first(List.first(word_array)) initial2 = String.first(List.last(word_array)) initial1 <> initial2 end end @doc """ Capitalize a `String` based on provided `cap_option` - 1 for all uppercase - 2 for all lowercase - 3 for leaving such as provided """ @doc since: "0.1.0" def maybe_capitalize(string, 1) when is_binary(string), do: String.upcase(string) def maybe_capitalize(string, 2) when is_binary(string), do: String.downcase(string) def maybe_capitalize(string, 3) when is_binary(string), do: string def maybe_capitalize(string, _) when is_binary(string), do: String.upcase(string) end