From de37a7e81f7f962abb4effbc8686479e31267965 Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Fri, 14 Jun 2024 09:57:13 +0100 Subject: [PATCH] Add TextField model --- app/models/character_sheet_section.rb | 1 + app/models/text_field.rb | 10 ++++++++++ db/migrate/20240614084224_create_text_fields.rb | 14 ++++++++++++++ db/schema.rb | 12 +++++++++++- test/fixtures/action_text/rich_texts.yml | 5 +++++ test/fixtures/character_sheet_sections.yml | 4 ++++ test/fixtures/text_fields.yml | 3 +++ test/models/text_field_test.rb | 9 +++++++++ 8 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 app/models/text_field.rb create mode 100644 db/migrate/20240614084224_create_text_fields.rb create mode 100644 test/fixtures/text_fields.yml create mode 100644 test/models/text_field_test.rb diff --git a/app/models/character_sheet_section.rb b/app/models/character_sheet_section.rb index 657962c..770a675 100644 --- a/app/models/character_sheet_section.rb +++ b/app/models/character_sheet_section.rb @@ -9,6 +9,7 @@ class CharacterSheetSection < ApplicationRecord dependent: :destroy has_many :counters, dependent: :destroy has_many :stats, dependent: :destroy + has_many :text_fields, dependent: :destroy validates :name, presence: true, length: { maximum: 255 } diff --git a/app/models/text_field.rb b/app/models/text_field.rb new file mode 100644 index 0000000..d7444a7 --- /dev/null +++ b/app/models/text_field.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class TextField < ApplicationRecord + belongs_to :character_sheet_section + + has_rich_text :content + + validates :name, presence: true, + length: { maximum: 100 } +end diff --git a/db/migrate/20240614084224_create_text_fields.rb b/db/migrate/20240614084224_create_text_fields.rb new file mode 100644 index 0000000..10857b3 --- /dev/null +++ b/db/migrate/20240614084224_create_text_fields.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class CreateTextFields < ActiveRecord::Migration[7.1] + def change + create_table :text_fields do |t| + t.belongs_to :character_sheet_section, null: false, foreign_key: true + t.string :name, null: false + + t.timestamps + end + + add_check_constraint :text_fields, "length(name) <= 100", name: "chk_text_field_name_max_length" + end +end diff --git a/db/schema.rb b/db/schema.rb index 80bd864..65c2262 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_06_13_072942) do +ActiveRecord::Schema[7.1].define(version: 2024_06_14_084224) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -276,6 +276,15 @@ ActiveRecord::Schema[7.1].define(version: 2024_06_13_072942) do t.check_constraint "length(slug::text) <= 100", name: "chk_table_slug_max_length" end + create_table "text_fields", force: :cascade do |t| + t.bigint "character_sheet_section_id", null: false + t.string "name", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["character_sheet_section_id"], name: "index_text_fields_on_character_sheet_section_id" + t.check_constraint "length(name::text) <= 100", name: "chk_text_field_name_max_length" + end + create_table "users", force: :cascade do |t| t.string "username", limit: 20, null: false t.string "password_digest", limit: 200, null: false @@ -315,4 +324,5 @@ ActiveRecord::Schema[7.1].define(version: 2024_06_13_072942) do add_foreign_key "table_invites", "tables" add_foreign_key "tables", "game_systems" add_foreign_key "tables", "users", column: "owner_id" + add_foreign_key "text_fields", "character_sheet_sections" end diff --git a/test/fixtures/action_text/rich_texts.yml b/test/fixtures/action_text/rich_texts.yml index 6ae16f0..eeb71fe 100644 --- a/test/fixtures/action_text/rich_texts.yml +++ b/test/fixtures/action_text/rich_texts.yml @@ -2,3 +2,8 @@ one: record: trevor (User) name: profile body:

I am just so awesome

+ +two: + record: background (TextField) + name: content + body:

Rhino-Man

diff --git a/test/fixtures/character_sheet_sections.yml b/test/fixtures/character_sheet_sections.yml index a777fd8..75fa540 100644 --- a/test/fixtures/character_sheet_sections.yml +++ b/test/fixtures/character_sheet_sections.yml @@ -10,3 +10,7 @@ subsection: name: Subsection character: nardren parent_section: stats + +info: + name: Info + character: nardren diff --git a/test/fixtures/text_fields.yml b/test/fixtures/text_fields.yml new file mode 100644 index 0000000..f3067cd --- /dev/null +++ b/test/fixtures/text_fields.yml @@ -0,0 +1,3 @@ +background: + character_sheet_section: info + name: Background diff --git a/test/models/text_field_test.rb b/test/models/text_field_test.rb new file mode 100644 index 0000000..ee6a50f --- /dev/null +++ b/test/models/text_field_test.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require "test_helper" + +class TextFieldTest < ActiveSupport::TestCase + test "name must exist" do + assert_must_exist(text_fields(:background), :name) + end +end