Packages
tz
0.27.2
0.28.2
0.28.1
0.28.0
0.27.3
0.27.2
0.27.1
0.27.0
0.26.6
0.26.5
0.26.4
0.26.3
0.26.2
0.26.1
0.26.0
0.25.1
0.25.0
0.24.0
0.23.0
0.22.0
0.21.1
0.21.0
0.20.1
0.20.0
0.19.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Time zone support for Elixir
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/download.ex
defmodule Mix.Tasks.Tz.Download do
use Mix.Task
alias Tz.IanaDataDir
alias Tz.Updater
@shortdoc "Downloads the IANA time zone data."
def run(command_line_args) do
{version, dir} = command_line_args(command_line_args)
dir = dir || IanaDataDir.dir()
case Updater.update_tz_database(version, dir) do
:error ->
Mix.raise("failed to download IANA data for version #{version}")
{:ok, dir} ->
Mix.shell().info(
"IANA time zone data for version #{version} has been extracted into #{dir}"
)
end
end
defp command_line_args([]) do
{fetch_latest_version(), nil}
end
defp command_line_args([version]) do
{version(version), nil}
end
defp command_line_args([version, dir]) do
unless File.exists?(dir) do
Mix.raise("path #{dir} doesn't exist")
end
{version(version), dir}
end
defp command_line_args(_) do
Mix.raise(
"command may have two optional arguments: the tz data version and the destination directory"
)
end
defp version("latest") do
fetch_latest_version()
end
defp version(version) do
unless Regex.match?(~r/^20[0-9]{2}[a-z]$/, version) do
Mix.raise("invalid version: #{version}")
end
version
end
defp fetch_latest_version() do
case Updater.fetch_latest_iana_tz_version() do
{:ok, version} ->
version
:error ->
Mix.raise("failed to read the latest version of the IANA time zone database")
end
end
end