add CI pipeline with credo and dialyzer
mix ci alias: compile --warning-as-errors, format --check-formatted, credo, dialyzer, test. Credo configured with sensible defaults. Dialyzer ignore file for false positives (Stripe types, Mix tasks, ExUnit internals). Credo fixes: map_join, filter consolidation, nesting extraction, cond→if simplification. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -89,7 +89,7 @@ defmodule SimpleshopTheme.Clients.Printify do
|
||||
"""
|
||||
def get_shop_id do
|
||||
case get_shops() do
|
||||
{:ok, shops} when is_list(shops) and length(shops) > 0 ->
|
||||
{:ok, shops} when is_list(shops) and shops != [] ->
|
||||
{:ok, hd(shops)["id"]}
|
||||
|
||||
{:ok, []} ->
|
||||
|
||||
@@ -214,7 +214,7 @@ defmodule SimpleshopTheme.Mockups.Generator do
|
||||
"""
|
||||
def find_print_provider(blueprint_id) do
|
||||
case Client.get_print_providers(blueprint_id) do
|
||||
{:ok, providers} when is_list(providers) and length(providers) > 0 ->
|
||||
{:ok, providers} when is_list(providers) and providers != [] ->
|
||||
# Just pick the first provider for simplicity
|
||||
{:ok, hd(providers)}
|
||||
|
||||
|
||||
@@ -23,24 +23,27 @@ defmodule SimpleshopTheme.Orders.FulfilmentStatusWorker do
|
||||
Logger.info("Polling fulfilment status for #{length(orders)} order(s)")
|
||||
|
||||
Enum.each(orders, fn order ->
|
||||
case Orders.refresh_fulfilment_status(order) do
|
||||
{:ok, updated} ->
|
||||
if updated.fulfilment_status != order.fulfilment_status do
|
||||
Logger.info(
|
||||
"Order #{order.order_number} status: #{order.fulfilment_status} → #{updated.fulfilment_status}"
|
||||
)
|
||||
end
|
||||
|
||||
{:error, reason} ->
|
||||
Logger.warning(
|
||||
"Failed to refresh status for order #{order.order_number}: #{inspect(reason)}"
|
||||
)
|
||||
end
|
||||
|
||||
refresh_order(order)
|
||||
Process.sleep(200)
|
||||
end)
|
||||
|
||||
:ok
|
||||
end
|
||||
end
|
||||
|
||||
defp refresh_order(order) do
|
||||
case Orders.refresh_fulfilment_status(order) do
|
||||
{:ok, updated} ->
|
||||
if updated.fulfilment_status != order.fulfilment_status do
|
||||
Logger.info(
|
||||
"Order #{order.order_number} status: #{order.fulfilment_status} → #{updated.fulfilment_status}"
|
||||
)
|
||||
end
|
||||
|
||||
{:error, reason} ->
|
||||
Logger.warning(
|
||||
"Failed to refresh status for order #{order.order_number}: #{inspect(reason)}"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -146,21 +146,22 @@ defmodule SimpleshopTheme.Providers.Printify do
|
||||
true ->
|
||||
with api_key when is_binary(api_key) <- ProviderConnection.get_api_key(conn),
|
||||
:ok <- set_api_key(api_key) do
|
||||
results =
|
||||
Enum.map(@webhook_events, fn event ->
|
||||
case Client.create_webhook(shop_id, webhook_url, event, secret) do
|
||||
{:ok, response} -> {:ok, event, response}
|
||||
{:error, reason} -> {:error, event, reason}
|
||||
end
|
||||
end)
|
||||
|
||||
{:ok, results}
|
||||
{:ok, create_all_webhooks(shop_id, webhook_url, secret)}
|
||||
else
|
||||
nil -> {:error, :no_api_key}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
defp create_all_webhooks(shop_id, webhook_url, secret) do
|
||||
Enum.map(@webhook_events, fn event ->
|
||||
case Client.create_webhook(shop_id, webhook_url, event, secret) do
|
||||
{:ok, response} -> {:ok, event, response}
|
||||
{:error, reason} -> {:error, event, reason}
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Lists registered webhooks for the shop.
|
||||
"""
|
||||
|
||||
@@ -128,9 +128,7 @@ defmodule SimpleshopTheme.Theme.Fonts do
|
||||
[heading_key, body_key]
|
||||
end
|
||||
|
||||
font_keys
|
||||
|> Enum.map(&generate_font_face_for_font(&1, path_resolver))
|
||||
|> Enum.join("\n")
|
||||
Enum.map_join(font_keys, "\n", &generate_font_face_for_font(&1, path_resolver))
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -143,8 +141,7 @@ defmodule SimpleshopTheme.Theme.Fonts do
|
||||
def generate_all_font_faces(path_resolver \\ &default_path_resolver/1) do
|
||||
@fonts
|
||||
|> Map.keys()
|
||||
|> Enum.map(&generate_font_face_for_font(&1, path_resolver))
|
||||
|> Enum.join("\n")
|
||||
|> Enum.map_join("\n", &generate_font_face_for_font(&1, path_resolver))
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -213,8 +210,7 @@ defmodule SimpleshopTheme.Theme.Fonts do
|
||||
defp generate_font_face_for_font(key, path_resolver) do
|
||||
case get_font(key) do
|
||||
%{family: family, file_prefix: prefix, weights: weights} ->
|
||||
weights
|
||||
|> Enum.map(fn weight ->
|
||||
Enum.map_join(weights, "", fn weight ->
|
||||
weight_suffix = if weight == 400, do: "regular", else: to_string(weight)
|
||||
font_path = path_resolver.("/fonts/#{prefix}-#{weight_suffix}.woff2")
|
||||
|
||||
@@ -228,7 +224,6 @@ defmodule SimpleshopTheme.Theme.Fonts do
|
||||
}
|
||||
"""
|
||||
end)
|
||||
|> Enum.join("")
|
||||
|
||||
nil ->
|
||||
""
|
||||
|
||||
@@ -393,8 +393,7 @@ defmodule SimpleshopTheme.Theme.PreviewData do
|
||||
# Get available variants for pricing
|
||||
available_variants =
|
||||
product.variants
|
||||
|> Enum.filter(& &1.is_enabled)
|
||||
|> Enum.filter(& &1.is_available)
|
||||
|> Enum.filter(&(&1.is_enabled and &1.is_available))
|
||||
|
||||
# Get the cheapest available variant for display price
|
||||
cheapest_variant =
|
||||
|
||||
Reference in New Issue
Block a user