diff options
author | Thong Kuah <tkuah@gitlab.com> | 2019-03-25 06:42:28 +0300 |
---|---|---|
committer | Thong Kuah <tkuah@gitlab.com> | 2019-03-27 09:54:10 +0300 |
commit | af049cb96835e8ed037c3afabc7ec3518fcb8365 (patch) | |
tree | 9abee3b330237d163362d186ad676c8f0f5293a1 | |
parent | 386e4d677bc5aa3532a08a4eff376b63ab6fb00c (diff) |
Add Paas::Service model
This models a Knative Service for a namespace/project. We can have
multiple Services for a namespace/project
-rw-r--r-- | app/models/paas/service.rb | 15 | ||||
-rw-r--r-- | db/migrate/20190325032617_create_paas_services.rb | 15 | ||||
-rw-r--r-- | db/schema.rb | 11 | ||||
-rw-r--r-- | spec/models/paas/service_spec.rb | 12 |
4 files changed, 52 insertions, 1 deletions
diff --git a/app/models/paas/service.rb b/app/models/paas/service.rb new file mode 100644 index 00000000000..2556e4b26c8 --- /dev/null +++ b/app/models/paas/service.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Paas + class Service < ApplicationRecord + self.table_name = 'paas_services' + + belongs_to :namespace, class_name: 'Paas::Namespace' + + delegate :project, to: :namespace + + validates :name, presence: true + validates :image, presence: true + validates :domain, hostname: { allow_numeric_hostname: true } + end +end diff --git a/db/migrate/20190325032617_create_paas_services.rb b/db/migrate/20190325032617_create_paas_services.rb new file mode 100644 index 00000000000..0be554fce5d --- /dev/null +++ b/db/migrate/20190325032617_create_paas_services.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CreatePaasServices < ActiveRecord::Migration[5.0] + DOWNTIME = false + + def change + create_table :paas_services, id: :bigserial do |t| + t.string :name, null: false + t.text :image, null: false + t.string :domain + + t.references :namespace, null: false, index: true, foreign_key: { to_table: :paas_clusters, on_delete: :cascade } + end + end +end diff --git a/db/schema.rb b/db/schema.rb index a589cbea0f4..971e0cc5aa4 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.define(version: 20190325021602) do +ActiveRecord::Schema.define(version: 20190325032617) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1532,6 +1532,14 @@ ActiveRecord::Schema.define(version: 20190325021602) do t.index ["project_id"], name: "index_paas_namespaces_on_project_id", using: :btree end + create_table "paas_services", id: :bigserial, force: :cascade do |t| + t.string "name", null: false + t.text "image", null: false + t.string "domain" + t.integer "namespace_id", null: false + t.index ["namespace_id"], name: "index_paas_services_on_namespace_id", using: :btree + end + create_table "pages_domains", force: :cascade do |t| t.integer "project_id" t.text "certificate" @@ -2500,6 +2508,7 @@ ActiveRecord::Schema.define(version: 20190325021602) do add_foreign_key "oauth_openid_requests", "oauth_access_grants", column: "access_grant_id", name: "fk_oauth_openid_requests_oauth_access_grants_access_grant_id" add_foreign_key "paas_namespaces", "clusters", on_delete: :cascade add_foreign_key "paas_namespaces", "projects", on_delete: :nullify + add_foreign_key "paas_services", "paas_clusters", column: "namespace_id", on_delete: :cascade add_foreign_key "pages_domains", "projects", name: "fk_ea2f6dfc6f", on_delete: :cascade add_foreign_key "personal_access_tokens", "users" add_foreign_key "pool_repositories", "projects", column: "source_project_id", on_delete: :nullify diff --git a/spec/models/paas/service_spec.rb b/spec/models/paas/service_spec.rb new file mode 100644 index 00000000000..d4b412de8ec --- /dev/null +++ b/spec/models/paas/service_spec.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Paas::Service, type: :model do + it { is_expected.to belong_to(:namespace).class_name('Paas::Namespace') } + + it { is_expected.to delegate_method(:project).to(:namespace) } + + it { is_expected.to validate_presence_of(:name) } + it { is_expected.to validate_presence_of(:image) } +end |