Introduce NotificationSetting model
It will hold notification setting per group or per project. It will allow get rid of notification level stored in Member model Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
a9346cab20
commit
31b0e53015
4 changed files with 53 additions and 3 deletions
14
app/models/notification_setting.rb
Normal file
14
app/models/notification_setting.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
class NotificationSetting < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
belongs_to :source, polymorphic: true
|
||||
|
||||
validates :user, presence: true
|
||||
validates :source, presence: true
|
||||
validates :level, presence: true
|
||||
validates :user_id, uniqueness: { scope: [:source_type, :source_id],
|
||||
message: "already exists in source",
|
||||
allow_nil: true }
|
||||
# Notification level
|
||||
# Note: When adding an option, it MUST go on the end of the array.
|
||||
enum level: [:disabled, :participating, :watch, :global, :mention]
|
||||
end
|
12
db/migrate/20160328112808_create_notification_settings.rb
Normal file
12
db/migrate/20160328112808_create_notification_settings.rb
Normal file
|
@ -0,0 +1,12 @@
|
|||
class CreateNotificationSettings < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :notification_settings do |t|
|
||||
t.integer :user_id
|
||||
t.integer :level
|
||||
t.integer :source_id
|
||||
t.string :source_type
|
||||
|
||||
t.timestamps null: false
|
||||
end
|
||||
end
|
||||
end
|
15
db/schema.rb
15
db/schema.rb
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20160320204112) do
|
||||
ActiveRecord::Schema.define(version: 20160328112808) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -417,9 +417,9 @@ ActiveRecord::Schema.define(version: 20160320204112) do
|
|||
t.string "state"
|
||||
t.integer "iid"
|
||||
t.integer "updated_by_id"
|
||||
t.integer "moved_to_id"
|
||||
t.boolean "confidential", default: false
|
||||
t.boolean "confidential", default: false
|
||||
t.datetime "deleted_at"
|
||||
t.integer "moved_to_id"
|
||||
end
|
||||
|
||||
add_index "issues", ["assignee_id"], name: "index_issues_on_assignee_id", using: :btree
|
||||
|
@ -638,6 +638,15 @@ ActiveRecord::Schema.define(version: 20160320204112) do
|
|||
add_index "notes", ["project_id"], name: "index_notes_on_project_id", using: :btree
|
||||
add_index "notes", ["updated_at"], name: "index_notes_on_updated_at", using: :btree
|
||||
|
||||
create_table "notification_settings", force: :cascade do |t|
|
||||
t.integer "user_id"
|
||||
t.integer "level"
|
||||
t.integer "source_id"
|
||||
t.string "source_type"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
end
|
||||
|
||||
create_table "oauth_access_grants", force: :cascade do |t|
|
||||
t.integer "resource_owner_id", null: false
|
||||
t.integer "application_id", null: false
|
||||
|
|
15
spec/models/notification_setting_spec.rb
Normal file
15
spec/models/notification_setting_spec.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe NotificationSetting, type: :model do
|
||||
describe "Associations" do
|
||||
it { is_expected.to belong_to(:user) }
|
||||
end
|
||||
|
||||
describe "Validation" do
|
||||
subject { NotificationSetting.new }
|
||||
|
||||
it { is_expected.to validate_presence_of(:user) }
|
||||
it { is_expected.to validate_presence_of(:source) }
|
||||
it { is_expected.to validate_presence_of(:level) }
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue