Current section

Files

Jump to
pharams lib pharams_utils.ex
Raw

lib/pharams_utils.ex

defmodule Pharams.PharamsUtils do
alias Pharams.{SchemaUtils, ValidationUtils}
def split_basic_and_group_fields(ast) do
Enum.split_with(ast, fn
{_req, _line, [_field, _type, opts]} ->
not Keyword.has_key?(opts, :do)
{_req, _line, [_field, _type]} ->
true
end)
end
def get_basic_field_asts(ast) do
{basic_fields, _group_fields} = split_basic_and_group_fields(ast)
basic_fields
end
def get_group_field_asts(ast) do
{_basic_fields, group_fields} = split_basic_and_group_fields(ast)
group_fields
end
def get_all_basic_fields(ast) do
ast
|> get_basic_field_asts()
|> Enum.map(fn
{_req, _line, [field, _type, _opts]} ->
field
{_req, _line, [field, _type]} ->
field
end)
end
def get_required_basic_fields(ast) do
ast
|> get_basic_field_asts()
|> Enum.filter(fn
{:required, _line, [_field, _type, opts]} when is_list(opts) -> true
{:required, _line, [_field, _type]} -> true
_ -> false
end)
|> Enum.map(fn
{_req, _line, [field, _type, _opts]} ->
field
{_req, _line, [field, _type]} ->
field
end)
end
def generate_basic_field_schema_definitions(ast) do
ast
|> get_basic_field_asts()
|> Enum.map(&SchemaUtils.generate_schema_entry/1)
end
def generate_group_field_schema_definitions(ast) do
ast
|> get_group_field_asts()
|> Enum.map(&SchemaUtils.generate_schema_entry/1)
end
def generate_group_field_schema_casts(ast, parent \\ nil) do
ast
|> get_group_field_asts()
|> Enum.map(fn entry ->
ValidationUtils.generate_group_field_schema_cast_entries(entry, parent)
end)
end
def generate_group_field_schema_changesets(ast, parent \\ nil) do
ast
|> get_group_field_asts()
|> Enum.map(fn entry ->
ValidationUtils.generate_group_field_schema_changeset_entries(entry, parent)
end)
end
def generate_basic_field_validations(ast) do
ast
|> get_basic_field_asts()
|> Enum.map(&ValidationUtils.generate_changeset_validation_entries/1)
|> List.flatten()
|> Enum.reject(fn entry -> entry == nil end)
end
end