Packages
stripity_stripe
2.0.0-alpha.9
3.3.2
3.3.1
3.2.0
3.1.1
3.1.0
3.0.0
2.17.3
2.17.2
2.17.1
2.17.0
2.16.0
2.15.1
2.15.0
2.14.1
2.14.0
2.13.0
2.12.1
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.0
2.5.0
2.4.0
2.3.0
2.2.3
2.2.2
2.2.1
2.2.0
2.1.0
2.0.1
2.0.0
2.0.0-alpha.11
2.0.0-alpha.10
2.0.0-alpha.9
2.0.0-alpha.8
2.0.0-alpha.7
2.0.0-alpha.6
2.0.0-alpha.5
2.0.0-alpha.4
2.0.0-alpha.3
2.0.0-alpha.2
2.0.0-alpha.1
1.6.2
1.6.1
1.6.0
1.4.0
1.3.0
1.2.0
1.1.0
0.5.0
0.4.0
0.3.0
0.2.0
A Stripe client for Elixir.
Current section
Files
Jump to
Current section
Files
lib/stripe/changeset.ex
defmodule Stripe.Changeset do
alias Stripe.Util
@doc """
Takes changes as a map with atom or string keys, a nested schema map,
and an optional list of keys that can be unset.
Returns a whitelisted map that can be used to send to Stripe.
"""
@spec cast(map, map, atom, list) :: map
def cast(changes, schema, operation, nullable_keys \\ []) do
keys = Map.keys(schema)
changes = Util.atomize_keys(changes)
Enum.reduce(keys, %{}, fn key, acc ->
schema_value = schema[key]
change = Map.get(changes, key)
acc |> apply_changes(key, change, operation, schema_value, nullable_keys)
end)
end
defp apply_changes(acc, key, change, op, schema_value, _) when is_map(change) and not is_list(schema_value) do
Map.put(acc, key, cast(change, schema_value, op))
end
defp apply_changes(acc, key, change, op, schema_value, nullable_keys) do
check_operation(acc, key, change, op, schema_value, nullable_keys)
end
defp check_operation(acc, key, change, op, ops, nullable_keys) do
case Enum.member?(ops, op) do
true -> attempt_change(acc, key, change, nullable_keys)
false -> acc
end
end
defp attempt_change(acc, key, nil = change, nullable_keys) do
case Enum.member?(nullable_keys, key) do
true -> put_change(acc, key, change)
false -> acc
end
end
defp attempt_change(acc, key, change, _nullable_keys), do: put_change(acc, key, change)
defp put_change(acc, key, change) do
Map.put(acc, key, change)
end
end