defmodule Mix.Tasks.CfSync.Setup do @moduledoc """ This task builds config files for use with `mix cf_sync.dump`. """ @shortdoc "Setup configuration for `mix cf_sync.dump`." use Mix.Task import CfSync.Tasks.Utils @default_url "https://cdn.contentful.com/" @impl Mix.Task def run(_) do name = ask("Config name: (default) ", filter: ~r/^[a-z_]+$/, error_message: "Lowercase and underscore only, please.", default_value: "default" ) next = case read_conf(name) do :no_file -> :setup {:ok, data} -> warn("Current config data for \"#{name}\":") IO.puts("########## START CONFIG ##########") IO.puts(inspect(data, pretty: true, width: 0)) IO.puts("########### END CONFIG ###########") overwrite = ask("Do you want to overwrite this config file? ", default_value: "n" ) if String.downcase(overwrite) == "y" do :setup else :end end end if next == :setup, do: setup(name) end defp setup(name) do root_url = ask( "Content delivery API root: (#{@default_url}) ", filter: ~r/^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/, default_value: @default_url, error_msg: "URL format, please." ) space_id = ask("Contentful space ID: ", filter: ~r/^.+$/) delivery_token = ask("Token for Content delivery API: ", filter: ~r/^.+$/) write_conf!(name, %{ root_url: root_url, space_id: space_id, delivery_token: delivery_token }) end end