1defmodule Tzdata.BasicDataMap do 2 @moduledoc false 3 4 alias Tzdata.Parser 5 alias Tzdata.ParserOrganizer, as: Organizer 6 @file_names ~w(africa antarctica asia australasia backward etcetera europe northamerica southamerica)s 7 def from_files_in_dir(dir_name) do 8 Enum.map(@file_names, fn file_name -> {String.to_atom(file_name), Parser.read_file(file_name, dir_name)} end) 9 |> make_map 10 end 11 12 def make_map(all_files_read) do 13 all_files_flattened = all_files_read |> Enum.map(fn {_name, read_file} -> read_file end) |> List.flatten 14 rules = Organizer.rules(all_files_flattened) 15 zones = Organizer.zones(all_files_flattened) 16 links = Organizer.links(all_files_flattened) 17 zone_list = Organizer.zone_list(all_files_flattened) 18 link_list = Organizer.link_list(all_files_flattened) 19 zone_and_link_list = Organizer.zone_and_link_list(all_files_flattened) 20 21 by_group = all_files_read 22 |> Enum.map(fn {name, file_read} -> {name, Organizer.zone_and_link_list(file_read)} end) 23 |> Enum.into(Map.new) 24 {:ok, 25 %{rules: rules, 26 zones: zones, 27 links: links, 28 zone_list: zone_list, 29 link_list: link_list, 30 zone_and_link_list: zone_and_link_list, 31 by_group: by_group, 32 } 33 } 34 end 35end 36