Current section
Files
Jump to
Current section
Files
lib/rules/storage.ex
defmodule ElxValidation.Storage do
@moduledoc """
### File
- the field under validation must be a file and at leas 1 kilobyte size
- empty value return error unless field is under nullable validation
```
data = %{
logo: "LOGO FILE",
}
rules = [
%{
field: "logo",
validate: ["file","min_size:10","max_size:20","mimes:png,jpg","mime_types:image/png,image/jpeg"]
},
]
```
- file : data must be a file and at least 1 kb size
- min_size: minimum size (Kb) of file
- max_size: maximum size (Kb) of file
- mimes: list of accepted mimes
- mime_types: list of accepted mime_types
"""
def is_file(target) do
if File.exists?(target.path) do
true
else
false
end
rescue
_ ->
false
end
def max_size(target, value) do
if is_file(target) do
%{size: size} = File.stat!(target.path)
cond do
div(size, 1024) <= String.to_integer(value) -> true
div(size, 1024) > String.to_integer(value) -> false
true -> false
end
else
false
end
rescue
_ ->
false
end
def min_size(target, value) do
if is_file(target) do
%{size: size} = File.stat!(target.path)
cond do
div(size, 1024) >= String.to_integer(value) -> true
div(size, 1024) < String.to_integer(value) -> false
true -> false
end
else
false
end
rescue
_ ->
false
end
def mimes(target, value) do
if is_file(target) do
extension = Path.extname(target.filename)
v =
value
|> String.split(",")
Enum.find(v, fn x -> "." <> x == extension end) != nil
else
false
end
rescue
_ ->
false
end
def mime_types(target, value) do
if is_file(target) do
v =
value
|> String.split(",")
Enum.find(v, fn x -> x == target.content_type end) != nil
else
false
end
rescue
_ ->
false
end
end