Packages
stripity_stripe
0.2.0
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/uri.ex
defmodule Stripe.URI do
@moduledoc """
Stripe URI helpers to encode nested dictionaries as query_params.
"""
defmacro __using__(_) do
quote do
defp build_url(ext \\ "") do
if ext != "", do: ext = "/" <> ext
@base <> ext
end
end
end
@doc """
Takes a flat or nested HashDict and turns it into proper query values.
## Example
card = HashDict.new([
card: HashDict.new([
number: 424242424242,
exp_year: 2014
])
])
Stripe.URI.encode_query(card) # card[number]=424242424242&card[exp_year]=2014
"""
def encode_query(list) do
Enum.map_join list, "&", fn x ->
pair(x)
end
end
defp pair({key, value}) do
cond do
Enumerable.impl_for(value) ->
pair(to_string(key), [], value)
true ->
param_name = key |> to_string |> URI.encode
param_value = value |> to_string |> URI.encode
"#{param_name}=#{param_value}"
end
end
defp pair(root, parents, values) do
Enum.map_join values, "&", fn {key, value} ->
cond do
Enumerable.impl_for(value) ->
pair(root, parents ++ [key], value)
true ->
build_key(root, parents ++ [key]) <> to_string(value)
end
end
end
defp build_key(root, parents) do
path = Enum.map_join parents, "", fn x ->
param = x |> to_string |> URI.encode
"[#{param}]"
end
"#{root}#{path}="
end
end