Skip to content

Commit f965cef

Browse files
authored
Merge pull request #22 from Frameio/fb/update-deps-gha
Add Github Actions workflow
2 parents 541e4e9 + 7f44e27 commit f965cef

23 files changed

+299
-172
lines changed

.formatter.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Used by "mix format"
2+
[
3+
inputs: ["mix.exs", "{config,lib,test}/**/*.{ex,exs}"],
4+
line_length: 120
5+
]

.github/workflows/ci.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Elixir CI
2+
3+
on:
4+
push:
5+
branches: ["master"]
6+
pull_request:
7+
branches: ["master"]
8+
9+
permissions:
10+
contents: read
11+
12+
jobs:
13+
build:
14+
name: Build and test
15+
runs-on: ubuntu-latest
16+
strategy:
17+
matrix:
18+
include:
19+
- elixir: "1.15"
20+
otp: "25"
21+
- elixir: "1.18"
22+
otp: "27"
23+
lint: true
24+
steps:
25+
- name: Checkout code
26+
uses: actions/checkout@v4
27+
28+
- name: Set up Elixir
29+
uses: erlef/setup-beam@v1
30+
with:
31+
otp-version: ${{matrix.otp}}
32+
elixir-version: ${{matrix.elixir}}
33+
34+
- name: Restore dependencies cache
35+
uses: actions/cache@v3
36+
with:
37+
path: deps
38+
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
39+
restore-keys: ${{ runner.os }}-mix-
40+
41+
- name: Install dependencies
42+
run: mix deps.get
43+
44+
- name: Compile
45+
run: mix compile --warnings-as-errors
46+
47+
- name: Run tests
48+
run: mix test
49+
50+
- name: checks that the mix.lock file has no unused deps
51+
run: mix deps.unlock --check-unused
52+
if: ${{ matrix.lint }}
53+
54+
- name: check if files are already formatted
55+
run: mix format --check-formatted
56+
if: ${{ matrix.lint }}

.tool-versions

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
erlang 25.3.2.8
2-
elixir 1.16.1-otp-25
1+
elixir 1.18.2-otp-27
2+
erlang 27.2.3
3+
nodejs 16.11.1

cereal-1.0.0.tar

-15.5 KB
Binary file not shown.

cereal_ex.iml

Lines changed: 0 additions & 9 deletions
This file was deleted.

lib/cereal/association_not_loaded_error.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ defmodule Cereal.AssociationNotLoadedError do
77
Please pre-fetch the relationship before serialization or override the
88
#{opts[:name]}/2 function in your serializer.
99
"""
10+
1011
%Cereal.AssociationNotLoadedError{message: msg}
1112
end
1213
end

lib/cereal/builders/base.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ defmodule Cereal.Builders.Base do
1010
1111
Will correctly handle Scrievener pagination.
1212
"""
13-
@spec build(Cereal.Context.t) :: __MODULE__.t
13+
@spec build(Cereal.Context.t()) :: __MODULE__.t()
1414
def build(context)
15+
1516
if Code.ensure_loaded?(Scrivener) do
1617
def build(%{data: %Scrivener.Page{} = page, opts: opts} = context) do
1718
opts = opts |> Enum.into(%{}) |> Map.put(:page, to_page_options(page))
1819
build(%{context | data: page.entries, opts: opts})
1920
end
2021
end
22+
2123
def build(%{serializer: serializer, data: data, opts: opts} = context) do
2224
opts = parse_opts(opts)
2325
data = serializer.preload(data, context.conn, Map.get(opts, :include, []))
@@ -33,16 +35,19 @@ defmodule Cereal.Builders.Base do
3335
defp build_metadata(%{opts: opts}), do: Map.get(opts, :metadata)
3436

3537
defp parse_opts(opts) when is_list(opts), do: opts |> Map.new() |> parse_opts()
38+
3639
defp parse_opts(opts) when is_map(opts) do
3740
opts
3841
|> parse_includes()
3942
|> parse_fields_list(:fields)
4043
|> parse_fields_list(:excludes)
4144
end
45+
4246
defp parse_opts(_), do: %{}
4347

4448
defp parse_includes(%{include: include} = opts) when is_binary(include),
4549
do: %{opts | include: Utils.normalize_includes(include)}
50+
4651
defp parse_includes(opts), do: opts
4752

4853
defp parse_fields_list(opts, key) do

lib/cereal/builders/entity.ex

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ defmodule Cereal.Builders.Entity do
1010
|> Map.put(:data, entity)
1111
|> build()
1212
end)
13-
|> Enum.map(fn({:ok, result}) -> result end)
13+
|> Enum.map(fn {:ok, result} -> result end)
1414
end
1515

1616
def build(%{serializer: serializer} = context) do
@@ -23,18 +23,20 @@ defmodule Cereal.Builders.Entity do
2323
id: serializer.id(context.data, context.conn),
2424
type: serializer.type(context.data, context.conn),
2525
attributes: attributes(context),
26-
rels: relationships(context),
26+
rels: relationships(context)
2727
}
2828
end
2929

3030
# if an assigns/2 function was specified in the serializer - we'll add its
3131
# return value to the conn's assigns
3232
defp do_assigns(%{serializer: serializer, conn: conn, data: data} = context) do
3333
conn = Map.put_new(conn, :assigns, %{})
34+
3435
conn =
3536
data
3637
|> serializer.assigns(conn)
3738
|> Enum.reduce(conn, &do_assign/2)
39+
3840
%{context | conn: conn}
3941
end
4042

@@ -58,7 +60,7 @@ defmodule Cereal.Builders.Entity do
5860
relation =
5961
should_include_relation?(context.opts, name, rel_opts)
6062
|> case do
61-
true -> relation(context, name, rel_opts)
63+
true -> relation(context, name, rel_opts)
6264
false -> nil
6365
end
6466

@@ -71,6 +73,7 @@ defmodule Cereal.Builders.Entity do
7173
end
7274

7375
defp build_relation_entity(nil, _, _, _), do: nil
76+
7477
defp build_relation_entity(relation, context, name, rel_opts) do
7578
context
7679
|> Map.put(:serializer, rel_opts.serializer)
@@ -81,30 +84,37 @@ defmodule Cereal.Builders.Entity do
8184

8285
defp with_relationship_includes(%{include: includes} = opts, name) when is_list(includes),
8386
do: %{opts | include: includes[name]}
87+
8488
defp with_relationship_includes(opts, _), do: opts
8589

8690
# We include the option when the following is true:
8791
# 1) The relation options have `include: true`
8892
# 2) The `include` option is passed in and includes the resource
8993
defp should_include_relation?(_, _, %{include: true}), do: true
94+
9095
defp should_include_relation?(%{include: included}, name, _) when is_list(included),
9196
do: included[name] |> is_list()
97+
9298
defp should_include_relation?(_, _, %{include: false}), do: false
9399
defp should_include_relation?(_, _, _), do: true
94100

95101
defp filter_attributes(attrs, %{serializer: serializer, opts: %{fields: fields}} = context) when is_list(fields) do
96102
type = serializer.type(context.data, context.conn) |> String.to_atom()
97103
do_filter_attributes(attrs, {:take, fields[type]})
98104
end
105+
99106
defp filter_attributes(attrs, %{serializer: serializer, opts: %{excludes: fields}} = context) when is_list(fields) do
100107
type = serializer.type(context.data, context.conn) |> String.to_atom()
101108
do_filter_attributes(attrs, {:drop, fields[type]})
102109
end
110+
103111
defp filter_attributes(attrs, _), do: attrs
104112

105113
defp do_filter_attributes(attrs, {:take, fields}) when is_list(fields),
106114
do: Map.take(attrs, fields)
115+
107116
defp do_filter_attributes(attrs, {:drop, fields}) when is_list(fields),
108117
do: Map.drop(attrs, fields)
118+
109119
defp do_filter_attributes(attrs, _), do: attrs
110120
end

lib/cereal/builders/error.ex

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,38 @@ defmodule Cereal.Builders.Error do
33
defstruct [:title, :code, :detail, :source, {:meta, %{}}]
44

55
def build(%{data: %Ecto.Changeset{}} = context), do: build_errors_from_changeset(context)
6+
67
def build(%{data: data} = context) when is_list(data) do
7-
data |> Enum.map(fn error ->
8+
data
9+
|> Enum.map(fn error ->
810
context |> Map.put(:data, error) |> build()
911
end)
1012
end
13+
1114
def build(context) do
1215
attrs = with_serializer_context(context)
1316
struct(__MODULE__, attrs)
1417
end
1518

1619
defp build_errors_from_changeset(%{data: cs} = context) do
17-
cs.errors |> Enum.map(fn field ->
20+
cs.errors
21+
|> Enum.map(fn field ->
1822
context |> Map.put(:data, field) |> format_ecto_error()
1923
end)
2024
end
2125

2226
defp format_ecto_error(%{data: {field, {message, vals}}} = context) do
23-
message = Enum.reduce(vals, message, fn {key, value}, acc ->
24-
case key do
25-
:type -> acc
26-
_ -> String.replace(acc, "%{#{key}}", to_string(value))
27-
end
28-
end)
27+
message =
28+
Enum.reduce(vals, message, fn {key, value}, acc ->
29+
case key do
30+
:type -> acc
31+
_ -> String.replace(acc, "%{#{key}}", to_string(value))
32+
end
33+
end)
2934

3035
%{context | data: {field, message}} |> format_ecto_error()
3136
end
37+
3238
defp format_ecto_error(%{data: {field, message}, serializer: serializer} = context) do
3339
%__MODULE__{
3440
title: message,

lib/cereal/builders/errors.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule Cereal.Builders.Errors do
44

55
alias Cereal.Builders.Error
66

7-
@spec build(Cereal.Context.t) :: __MODULE__.t
7+
@spec build(Cereal.Context.t()) :: __MODULE__.t()
88
def build(%{serializer: serializer} = context) do
99
struct(__MODULE__, %{})
1010
|> Map.put(:title, serializer.title(context.conn))

0 commit comments

Comments
 (0)