Skip to content

Commit 7e6d5ff

Browse files
Merge pull request #60 from diffo-dev/56-obscure-error-when-specification-id-not-uuid-v4
improved error handling
2 parents 915b588 + ca2a4fe commit 7e6d5ff

21 files changed

Lines changed: 410 additions & 37 deletions

CHANGELOG.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,14 @@ See [Conventional Commits](Https://conventionalcommits.org) for commit guideline
5757

5858
### Fixes
5959

60-
* fixed relationship enrichment inconsistent across neo4j versions
60+
* fixed relationship enrichment inconsistent across neo4j versions
61+
62+
## [v0.1.6](https://github.com/diffo-dev/diffo/compare/v0.1.5...v0.1.6) (2026-03-19)
63+
64+
### Fixes
65+
66+
* incorrect domain label
67+
68+
### Maintenance
69+
70+
* improved error handling

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ by adding `diffo` to your list of dependencies in `mix.exs`:
4040
```elixir
4141
def deps do
4242
[
43-
{:diffo, "~> 0.1.5"}
43+
{:diffo, "~> 0.1.6"}
4444
]
4545
end
4646
```

diffo.livemd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ SPDX-License-Identifier: MIT
99
```elixir
1010
Mix.install(
1111
[
12-
{:diffo, "~> 0.1.5"}
12+
{:diffo, "~> 0.1.6"}
1313
],
1414
consolidate_protocols: false
1515
)

documentation/dsls/DSL-Diffo.Provider.Instance.Extension.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ Configuration for Instance Features
5656
features do
5757
feature :dynamic_line_management do
5858
is_enabled? true
59-
characteristics do
60-
characteristic :constraints, Diffo.Access.Constraints
61-
end
59+
characteristic :constraints, Diffo.Access.Constraints
6260
end
6361
end
6462

documentation/how_to/use_diffo_provider_instance_extension.livemd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ SPDX-License-Identifier: MIT
99
```elixir
1010
Mix.install(
1111
[
12-
{:diffo, "~> 0.1.5"}
12+
{:diffo, "~> 0.1.6"}
1313
],
1414
consolidate_protocols: false
1515
)

lib/diffo/helpers/uuid.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ defmodule Diffo.Uuid do
6363

6464
case info do
6565
{:ok, result} ->
66-
if result[:version] == 4 do
66+
if result[:version] == 4 and result[:variant] == :rfc4122 do
6767
true
6868
else
6969
false

lib/diffo/provider/components/instance/extension/characteristic.ex

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ defmodule Diffo.Provider.Instance.Characteristic do
3030
[] ->
3131
changeset
3232

33+
{:error, error} ->
34+
Ash.Changeset.add_error(changeset, error)
35+
3336
_ ->
3437
characteristic_ids = Enum.map(characteristics, &Map.get(&1, :id))
3538
Ash.Changeset.force_set_argument(changeset, :characteristics, characteristic_ids)
@@ -43,14 +46,20 @@ defmodule Diffo.Provider.Instance.Characteristic do
4346
characteristics = Info.characteristics(module)
4447

4548
Enum.reduce_while(characteristics, [], fn %{name: name, value_type: value_type}, acc ->
46-
value = struct(value_type)
49+
try do
50+
value = struct(value_type)
4751

48-
case Provider.create_characteristic(%{name: name, type: type, value: value}) do
49-
{:ok, result} ->
50-
{:cont, [result | acc]}
52+
case Provider.create_characteristic(%{name: name, type: type, value: value}) do
53+
{:ok, result} ->
54+
{:cont, [result | acc]}
5155

52-
{:error, _error} ->
53-
{:halt, []}
56+
{:error, error} ->
57+
{:halt, {:error, error}}
58+
end
59+
rescue
60+
_e in UndefinedFunctionError ->
61+
{:halt,
62+
{:error, "couldn't create characteristic with value of unknown type #{value_type}"}}
5463
end
5564
end)
5665
end

lib/diffo/provider/components/instance/extension/feature.ex

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ defmodule Diffo.Provider.Instance.Feature do
3030
[] ->
3131
changeset
3232

33+
{:error, error} ->
34+
Ash.Changeset.add_error(changeset, error)
35+
3336
_ ->
3437
feature_ids = Enum.map(features, &Map.get(&1, :id))
3538
Ash.Changeset.force_set_argument(changeset, :features, feature_ids)
@@ -49,28 +52,41 @@ defmodule Diffo.Provider.Instance.Feature do
4952
fn %{name: name, is_enabled?: isEnabled, characteristics: characteristics}, acc ->
5053
characteristic_ids =
5154
Enum.reduce_while(characteristics, [], fn %{name: name, value_type: value_type}, acc ->
52-
value = struct(value_type)
55+
try do
56+
value = struct(value_type)
57+
58+
case Provider.create_characteristic(%{name: name, value: value, type: :feature}) do
59+
{:ok, result} ->
60+
{:cont, [result.id | acc]}
61+
62+
{:error, error} ->
63+
{:halt, {:error, error}}
64+
end
65+
rescue
66+
_e in UndefinedFunctionError ->
67+
{:halt,
68+
{:error,
69+
"couldn't create feature characteristic with value of unknown type #{value_type}"}}
70+
end
71+
end)
5372

54-
case Provider.create_characteristic(%{name: name, value: value, type: :feature}) do
73+
case characteristic_ids do
74+
{:error, error} ->
75+
{:halt, {:error, error}}
76+
77+
_ ->
78+
# create feature with feature characteristics
79+
case Provider.create_feature(%{
80+
name: name,
81+
isEnabled: isEnabled,
82+
characteristics: characteristic_ids
83+
}) do
5584
{:ok, result} ->
56-
{:cont, [result.id | acc]}
85+
{:cont, [result | acc]}
5786

58-
{:error, _error} ->
59-
{:halt, []}
87+
{:error, error} ->
88+
{:halt, {:error, error}}
6089
end
61-
end)
62-
63-
# create feature with feature characteristics
64-
case Provider.create_feature(%{
65-
name: name,
66-
isEnabled: isEnabled,
67-
characteristics: characteristic_ids
68-
}) do
69-
{:ok, result} ->
70-
{:cont, [result | acc]}
71-
72-
{:error, _error} ->
73-
{:halt, []}
7490
end
7591
end
7692
)

lib/diffo/provider/components/instance/extension/specification.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ defmodule Diffo.Provider.Instance.Specification do
2929
{:ok, specification} ->
3030
Ash.Changeset.force_set_argument(changeset, :specified_by, specification.id)
3131

32-
{:error, _error} ->
33-
Logger.error("couldn't find/create required specification")
32+
{:error, error} ->
33+
Ash.Changeset.add_error(changeset, error)
3434
end
3535
end
3636

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule Diffo.MixProject do
66
@moduledoc false
77
use Mix.Project
88

9-
@version "0.1.5"
9+
@version "0.1.6"
1010
@name "Diffo"
1111
@description "TMF Service and Resource Manager with a difference"
1212
@github_url "https://github.com/diffo-dev/diffo"

0 commit comments

Comments
 (0)