{% assign model=include.model %}

{% include models/_model.html model=model %}

Generate model

{% capture model_fields_cmd %}{% for field in model.fields %}{% if field.name != “id” %}{% if field.references %}{{ field.name | remove: '_id' }}:references {% else %}{{ field.name }}:{{ field.type }} {% endif %}{% endif %}{% endfor %}{% endcapture %}

$ rails g model {{ model.name | capitalize }} {{ model_fields_cmd }}

Migration:

{% capture model_migration_file %}{% for field in model.fields %} {% if field.references %}t.references :{{ field.name }}, foreign_key: true, type: :uuid{% if !field.references_optional %}, null: true{% endif %}{% else %}{% if field.name != “id” %}t.{{ field.type }} :{{ field.name }}{% endif %}{% if field.default %}, default: {{ field.default}}{% endif %}{% endif %}{% endfor %}{% endcapture %}

# frozen_string_literal: true

# Creates User Identities
class Create{{ model.db_name | capitalize }} < ActiveRecord::Migration[6.0]
  def change
    create_table {{ model.db_name }}, id: :uuid do |t|
      {{ model_migration_file }}

      t.timestamps
    end
  end
end

models/{{ model.name | capitalize }}.rb

{% capture model_relations %}{% for r in model.relations %} {{ r.type }}: {{ r.resource }}{% if r.optional %}, optional: true{% endif %}{% endfor %}{% endcapture %}

{% capture model_validations %}{% for r in model.validations %} validates :{{ r.field }}{% if r.presence %}, presence: true{% endif%}{% endfor %}{% endcapture %}

{% capture model_enums %}{% for r in model.fields %}{% if r.enum %} enum {{ r.name }}: { {% for e in r.enum_values %} {{ e.val }}: {{e.key}},{% endfor %} }{% endif %}{% endfor %}{% endcapture %}

# frozen_string_literal: true

# {{ model.name | capitalize }} model
class {{ model.name | capitalize }} < ApplicationRecord
  {{ model_validations }}
  {{ model_relations }}
  {{ model_enums }}

end