calculations do
calculate :full_name, :string, expr(string_join([first_name, surname], " "))
calculate :full_name_similarity, :float, expr(trigram_similarity(full_name, ^arg(:value))) do
argument :value, :string, allow_nil?: false
end
calculate :email_similarity, :float, expr(trigram_similarity(email, ^arg(:value))) do
argument :value, :string, allow_nil?: false
end
calculate :phone_number_similarity, :float, expr(trigram_similarity(phone_number, ^arg(:value))) do
argument :value, :string, allow_nil?: false
end
calculate :similarity, :float, expr(fragment("greatest(?, ?, ?)", full_name_similarity, email_similarity, phone_number_similarity))
end
calculations do
calculate :full_name, :string, expr(string_join([first_name, surname], " "))
calculate :full_name_similarity, :float, expr(trigram_similarity(full_name, ^arg(:value))) do
argument :value, :string, allow_nil?: false
end
calculate :email_similarity, :float, expr(trigram_similarity(email, ^arg(:value))) do
argument :value, :string, allow_nil?: false
end
calculate :phone_number_similarity, :float, expr(trigram_similarity(phone_number, ^arg(:value))) do
argument :value, :string, allow_nil?: false
end
calculate :similarity, :float, expr(fragment("greatest(?, ?, ?)", full_name_similarity, email_similarity, phone_number_similarity))
end