cover/Elixir.Tools.Sys.Get.html

1 defmodule Tools.Sys.Get do
2 import Log, only: [log: 5, agent: 5]
3 import Mem, only: [depth: 0, table: 1]
4
5 @icon "👀"
6
7 def spec(name, _state) do
8 68 spec(name)
9 end
10
11 defp spec(name) do
12 68 %{name: name, description: description(), parameters: parameters()}
13 end
14
15 68 defp description do
16 "Retrieve data by key"
17 end
18
19
:-(
def icon, do: @icon
20
21 15 def exec(_, %{"key" => key}, %{name: name} = state) do
22 15 value = fetch(name, key)
23 15 log(@icon, key, ": ", value, :blue)
24 15 agent(@icon, key, ": ", value, %{name: name})
25 {value, state}
26 end
27
28 defp parameters do
29 68 %{type: "object", properties: props(), required: required()}
30 end
31
32 68 defp required do
33 ["key"]
34 end
35
36 defp props do
37 68 %{key: %{type: "string", description: "The key to retrieve data for"}}
38 end
39
40 defp fetch(name, key) do
41 15 table = pick(key, name)
42 15 found(key, :ets.lookup(table, key))
43 end
44
45
:-(
defp pick("depth_" <> _, _name), do: depth()
46
:-(
defp pick("tree_" <> _, _name), do: depth()
47 15 defp pick(_key, name), do: table(name)
48
49 12 defp found(key, [{key, value}]), do: value
50 3 defp found(_key, []), do: "(empty)"
51 end
Line Hits Source