Skip to content

Commit 080ddb9

Browse files
author
Mario Flach
committed
Add support for options in inspect(%RethinkDB.Q{})
1 parent 93d902a commit 080ddb9

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

lib/rethinkdb/q.ex

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,22 @@ defimpl Inspect, for: RethinkDB.Q do
1818
|> Poison.decode!()
1919
|> Enum.into(%{}, fn {key, val} -> {val, key} end)
2020

21-
def inspect(%RethinkDB.Q{query: [index, params]}, _) do
22-
query =
23-
# Replaces references with a-z variable names,
24-
# using the same ref between fn head and body.
25-
params
26-
|> Enum.map_reduce(97, &resolve_param/2)
27-
|> elem(0)
28-
|> Enum.join(", ")
29-
"#{Map.get(@apidef, index, index)}(#{query})"
21+
def inspect(%RethinkDB.Q{query: [69, [[2, refs], lambda]]}, _) do
22+
# Replaces references within lambda functions
23+
# with capture syntax arguments (&1, &2, etc).
24+
refs
25+
|> Enum.map_reduce(1, &{{&1, "&#{&2}"}, &2 + 1})
26+
|> elem(0)
27+
|> Enum.reduce("&(#{inspect lambda})", fn {ref, var}, lambda -> String.replace(lambda, "var(#{inspect ref})", var) end)
3028
end
3129

32-
defp resolve_param([2, [ref]], acc) when is_reference(ref) do
33-
# function head reference
34-
{to_string([acc]), acc + 1}
30+
def inspect(%RethinkDB.Q{query: [index, args, opts]}, _) do
31+
# Converts function options (map) to keyword list.
32+
Kernel.inspect(%RethinkDB.Q{query: [index, args ++ [Map.to_list(opts)]]})
3533
end
3634

37-
defp resolve_param(ref, acc) when is_reference(ref) do
38-
# function body reference
39-
{to_string([acc]), acc + 1}
40-
end
41-
42-
defp resolve_param(val, acc) do
43-
{Kernel.inspect(val), acc}
35+
def inspect(%RethinkDB.Q{query: [index, args]}, _options) do
36+
# Resolve index & args and return them as string.
37+
Map.get(@apidef, index) <> "(#{Enum.join(Enum.map(args, &Kernel.inspect/1), ", ")})"
4438
end
4539
end

0 commit comments

Comments
 (0)