def create(conn, params) do
conn
|> render_json_response(bulk_convertor(params))
end
def bulk_convertor(%{"file" => %Plug.Upload{content_type: "text/csv", filename: basename,
path: fullpath}}) do
list = [~w(old, new)]
fullpath
|> read_csv(list)
|> form_response
end
def read_csv(path, list) do
if path |> File.stream! |> Enum.count <= 50 do
path
|> File.stream!
|> Parser.parse_stream
|> Stream.map(fn [arg] -> %{url: arg} end)
|> iterate_urls(list)
else
%{error: %{message: "Limit Exceeded"}}
end
end
def iterate_urls(mapped_stream, list) do
mapped_stream
|> Enum.each(fn(url) -> url_convertor(url, list) end)
%{response: %{message: "Request Initiated"}}
end
def url_convertor(%{url: val}, list) do
with {:ok, %Route{} = route} <- App.create_route(%{"url" => val}) do
route
|> App.redirect_url
|> add_to_list(route, list)
end
end
def add_to_list(new_url, %{url: original_url}, list) do
list = List.insert_at(list, -1, ~w(#{original_url}, #{new_url}))
list
end
Содержимое списка не обновляется всякий раз, когда я пытаюсь распечатать его где-нибудь, используя IO. В этом случае отображается начальный список. Я пытаюсь обновить содержимое списка на основе данных, проанализированных из файла csv, который я анализирую с помощью библиотеки elixir nimble_csv.
Если я пытаюсь напечатать список внутри
add_to_list
видны только две строки: заголовок, который я добавил изначально, и последняя строка из CSV.
Есть ли что-то, что я здесь не так делаю.