defmodule Fluent.Assembly.Source do
@moduledoc """
Module
"""
@doc """
Returns absolute path to directory, which contains all FTL data for `assembly`.
## Examples:
iex> assembly_dir(MyApp.Fluent)
"/path/to/ftl/files/"
"""
@spec assembly_dir(assembly :: Fluent.Assembly.t()) :: Path.t()
def assembly_dir(assembly) do
assembly.__config__(:otp_app)
|> :code.priv_dir()
|> Path.join(assembly.__config__(:priv))
end
@doc """
Returns absolute path to directory, which contains all FTL data for `assembly` with given `locale`.
## Examples:
iex> assembly_dir(MyApp.Fluent, "en-US")
"/path/to/ftl/files/en-US"
"""
@spec locale_dir(assembly :: Fluent.Assembly.t(), locale :: Fluent.locale()) :: Path.t()
def locale_dir(assembly, locale) do
Path.join(assembly_dir(assembly), locale)
end
@doc """
Returns list of all available locales for given `assembly`
## Examples:
iex> locales(MyApp.Fluent)
["en", "fr", "ru"]
"""
@spec locales(assembly :: Fluent.Assembly.t()) :: [Fluent.locale()]
def locales(assembly) do
# Caching not to call twise
assembly_dir = assembly_dir(assembly)
assembly_dir
|> Path.join("*")
|> Path.wildcard()
|> Enum.map(&Path.relative_to(&1, assembly_dir))
end
@doc """
Returns absolute pathes to all FTL files for given `assembly` and it's `locale`.
## Examples:
iex> ftl_files_pathes(MyApp.Fluent, "en")
["/path/to/ftl/1.ftl", "/path/to/ftl/2.frl", ... "/path/to/ftl/last.ftl"]
"""
@spec ftl_files_pathes(assembly :: Fluent.Assembly.t(), locale :: Fluent.locale()) :: [Path.t()]
def ftl_files_pathes(assembly, locale) do
locale_dir(assembly, locale)
|> Path.join("*.ftl")
|> Path.wildcard()
end
end