Kopier til clipboard fra iEX
Når en bruker iEX til debugging eller for å hente ut data kan det være kjekt å kunne kopiere noe direkte til clipboard fra iEX. Her viser vi deg hvordan du kan gjøre det.
19.6.2022 – Skrevet av Kim Grytøyr
Mesteparten av backend-koden Devos forholder seg til er skrevet i Elixir, et funksjonelt programmeringsspråk som er basert på Erlang. Elixir har et veldig kjekt interaktivt shell (REPL) som heter iEX. Hvis du starter denne i et eksisterende prosjekt med kommandoen iex -S mix
, så vil det åpnes et interaktivt shell hvor hele applikasjonen din er tilgjengelig.
Sett at vi hadde en applikasjon, MyApplication, som hadde mange transaksjoner, og vi trengte å hente ut en liste over alle ID-ene til disse transaksjonene.
iex(1)> MyApplication.Transactions.list_transactions()
[
%Transaction{ id: 1, amount: 100.0 },
%Transaction{ id: 2, amount: 150.0 }
]
iex(2)>
Denne funksjonen returnerer en liste med alle transaksjonene i. Det vi trenger er bare en liste med ID-ene i JSON-format, noe vi enkelt kan få til med følgende uttrykk:
iex(2)> MyApplication.Transactions.list_transactions
...(2)> |> Enum.map(&(&1.id))
...(2)> |> Jason.encode!
"[1,2]"
Dette er vel og bra, men i virkeligheten vil det typisk være langt flere enn to transaksjoner, og å kopiere resultatet kan noen ganger være vanskelig å få til på en fornuftig og ikke-frustrerende måte. Det er her denne lille modulen kommer inn i bildet:
# Denne koden plasseres i filen .iex.exs
# i rot-mappen til prosjektet ditt.
defmodule IEXHelpers do
def copy(term) do
text =
if is_binary(term) do
term
else
inspect(term, limit: :infinity, pretty: true)
end
port = Port.open({:spawn, "pbcopy"}, [])
true = Port.command(port, text)
true = Port.close(port)
:ok
end
end
Når du nå starter iEX igjen kan du gjøre følgende:
iex(1)> MyApplication.Transactions.list_transactions
...(1)> |> Enum.map(&(&1.id))
...(1)> |> Jason.encode!
...(1)> |> IEXHelpers.copy
...og voilà! Du har hele listen over ID-ene i clipboardet ditt.
Merk: Denne kodesnutten er beregnet skrevet for bruk på en Mac. Hvis du bruker et annet operativsystem må den tilpasses noe, men på Unix-baserte operativsystem kan du stort sett bare bytte ut pbcopy med xclip på linje 13.
Denne funksjonen og inspirasjonen til denne artikkelen kom fra: