@@ -18,28 +18,22 @@ defimpl Inspect, for: RethinkDB.Q do
18
18
|> Poison . decode! ( )
19
19
|> Enum . into ( % { } , fn { key , val } -> { val , key } end )
20
20
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 )
30
28
end
31
29
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 ) ] ] } )
35
33
end
36
34
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 ) , ", " ) } )"
44
38
end
45
39
end
0 commit comments