Skip to content

Commit 6efe2d0

Browse files
authored
Merge pull request #319 from Jaza/base64-for-binary-fields
Base64 for binary fields
2 parents 5f6bdbe + cbc7c97 commit 6efe2d0

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

Diff for: lib/kaffy/resource_form.ex

+8
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,14 @@ defmodule Kaffy.ResourceForm do
152152
:decimal ->
153153
text_input(form, field, opts)
154154

155+
:binary ->
156+
value =
157+
data
158+
|> Map.get(field, "")
159+
|> Base.encode64()
160+
161+
text_input(form, field, [value: value] ++ opts)
162+
155163
t when t in [:boolean, :boolean_checkbox] ->
156164
checkbox_opts = add_class(opts, "custom-control-input")
157165
label_opts = add_class(opts, "custom-control-label")

Diff for: lib/kaffy/resource_params.ex

+8-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ defmodule Kaffy.ResourceParams do
33

44
def decode_map_fields(resource, schema, params) do
55
map_fields = ResourceSchema.get_map_fields(schema) |> Enum.map(fn {f, _} -> to_string(f) end)
6+
binary_fields = ResourceSchema.get_binary_fields(schema) |> Enum.map(fn {f, _} -> to_string(f) end)
67

78
attrs =
89
Map.get(params, resource, %{})
@@ -12,9 +13,13 @@ defmodule Kaffy.ResourceParams do
1213
{k, v}
1314

1415
false ->
15-
case k in map_fields && String.length(v) > 0 do
16-
true -> {k, Kaffy.Utils.json().decode!(v)}
17-
false -> {k, v}
16+
if k in binary_fields && String.length(v) > 0 do
17+
{k, Base.decode64!(v)}
18+
else
19+
case k in map_fields && String.length(v) > 0 do
20+
true -> {k, Kaffy.Utils.json().decode!(v)}
21+
false -> {k, v}
22+
end
1823
end
1924
end
2025
end)

Diff for: lib/kaffy/resource_schema.ex

+21-2
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,11 @@ defmodule Kaffy.ResourceSchema do
194194
Kaffy.Utils.json().encode!(value, escape: :html_safe, pretty: true)
195195

196196
is_binary(value) ->
197-
value
197+
if String.valid?(value) do
198+
value
199+
else
200+
Base.encode64(value)
201+
end
198202

199203
true ->
200204
kaffy_field_value(schema, field)
@@ -224,7 +228,11 @@ defmodule Kaffy.ResourceSchema do
224228
Kaffy.Utils.json().encode!(value, escape: :html_safe, pretty: true)
225229

226230
is_binary(value) ->
227-
String.slice(value, 0, 140)
231+
if String.valid?(value) do
232+
String.slice(value, 0, 140)
233+
else
234+
Base.encode64(String.slice(value, 0, 140))
235+
end
228236

229237
is_list(value) ->
230238
pretty_list(value)
@@ -337,6 +345,17 @@ defmodule Kaffy.ResourceSchema do
337345
end)
338346
end
339347

348+
def get_binary_fields(schema) do
349+
get_all_fields(schema)
350+
|> Enum.filter(fn
351+
{_f, %{type: :binary}} ->
352+
true
353+
354+
_ ->
355+
false
356+
end)
357+
end
358+
340359
def widgets(_resource) do
341360
[]
342361
end

0 commit comments

Comments
 (0)