summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/company.rb18
-rw-r--r--db/migrate/20230309235404_create_active_storage_tables.active_storage.rb57
-rw-r--r--db/migrate/20230309235713_create_companies.rb11
-rw-r--r--spec/models/company_spec.rb11
4 files changed, 97 insertions, 0 deletions
diff --git a/app/models/company.rb b/app/models/company.rb
new file mode 100644
index 0000000..134d8e9
--- /dev/null
+++ b/app/models/company.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+# Company
+# name: string
+# short_name: string
+# country: string
+class Company < ApplicationRecord
+ validates :short_name, uniqueness: true
+ validates :short_name, presence: true
+ validates :name, presence: true
+ validates :country, presence: true
+
+ has_one_attached :logo
+
+ def to_param
+ short_name
+ end
+end
diff --git a/db/migrate/20230309235404_create_active_storage_tables.active_storage.rb b/db/migrate/20230309235404_create_active_storage_tables.active_storage.rb
new file mode 100644
index 0000000..8a7bfe1
--- /dev/null
+++ b/db/migrate/20230309235404_create_active_storage_tables.active_storage.rb
@@ -0,0 +1,57 @@
+# This migration comes from active_storage (originally 20170806125915)
+class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
+ def change
+ # Use Active Record's configured type for primary and foreign keys
+ primary_key_type, foreign_key_type = primary_and_foreign_key_types
+
+ create_table :active_storage_blobs, id: primary_key_type do |t|
+ t.string :key, null: false
+ t.string :filename, null: false
+ t.string :content_type
+ t.text :metadata
+ t.string :service_name, null: false
+ t.bigint :byte_size, null: false
+ t.string :checksum
+
+ if connection.supports_datetime_with_precision?
+ t.datetime :created_at, precision: 6, null: false
+ else
+ t.datetime :created_at, null: false
+ end
+
+ t.index [ :key ], unique: true
+ end
+
+ create_table :active_storage_attachments, id: primary_key_type do |t|
+ t.string :name, null: false
+ t.references :record, null: false, polymorphic: true, index: false, type: foreign_key_type
+ t.references :blob, null: false, type: foreign_key_type
+
+ if connection.supports_datetime_with_precision?
+ t.datetime :created_at, precision: 6, null: false
+ else
+ t.datetime :created_at, null: false
+ end
+
+ t.index [ :record_type, :record_id, :name, :blob_id ], name: :index_active_storage_attachments_uniqueness, unique: true
+ t.foreign_key :active_storage_blobs, column: :blob_id
+ end
+
+ create_table :active_storage_variant_records, id: primary_key_type do |t|
+ t.belongs_to :blob, null: false, index: false, type: foreign_key_type
+ t.string :variation_digest, null: false
+
+ t.index [ :blob_id, :variation_digest ], name: :index_active_storage_variant_records_uniqueness, unique: true
+ t.foreign_key :active_storage_blobs, column: :blob_id
+ end
+ end
+
+ private
+ def primary_and_foreign_key_types
+ config = Rails.configuration.generators
+ setting = config.options[config.orm][:primary_key_type]
+ primary_key_type = setting || :primary_key
+ foreign_key_type = setting || :bigint
+ [primary_key_type, foreign_key_type]
+ end
+end
diff --git a/db/migrate/20230309235713_create_companies.rb b/db/migrate/20230309235713_create_companies.rb
new file mode 100644
index 0000000..7c8c527
--- /dev/null
+++ b/db/migrate/20230309235713_create_companies.rb
@@ -0,0 +1,11 @@
+class CreateCompanies < ActiveRecord::Migration[7.0]
+ def change
+ create_table :companies do |t|
+ t.string :name
+ t.string :country
+ t.string :short_name
+
+ t.timestamps
+ end
+ end
+end
diff --git a/spec/models/company_spec.rb b/spec/models/company_spec.rb
new file mode 100644
index 0000000..7fe3a87
--- /dev/null
+++ b/spec/models/company_spec.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Company, type: :model do
+ it { should validate_presence_of(:name) }
+ it { should validate_presence_of(:short_name) }
+ it { should validate_presence_of(:country) }
+ it { should validate_uniqueness_of(:short_name).ignoring_case_sensitivity }
+ it { should have_one_attached(:logo) }
+end