notification scaffold
This commit is contained in:
parent
5f14a6bcf8
commit
d55ade1686
10 changed files with 119 additions and 7 deletions
11
app/controllers/notifications_controller.rb
Normal file
11
app/controllers/notifications_controller.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
class NotificationsController < ApplicationController
|
||||||
|
layout 'profile'
|
||||||
|
|
||||||
|
def show
|
||||||
|
@notification = current_user.notification
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@notification = current_user.notification
|
||||||
|
end
|
||||||
|
end
|
2
app/helpers/notifications_helper.rb
Normal file
2
app/helpers/notifications_helper.rb
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
module NotificationsHelper
|
||||||
|
end
|
30
app/models/notification.rb
Normal file
30
app/models/notification.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
class Notification
|
||||||
|
#
|
||||||
|
# Notification levels
|
||||||
|
#
|
||||||
|
N_DISABLED = 0
|
||||||
|
N_PARTICIPATING = 1
|
||||||
|
N_WATCH = 2
|
||||||
|
|
||||||
|
attr_accessor :user
|
||||||
|
|
||||||
|
def self.notification_levels
|
||||||
|
[N_DISABLED, N_PARTICIPATING, N_WATCH]
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize(user)
|
||||||
|
@user = user
|
||||||
|
end
|
||||||
|
|
||||||
|
def disabled?
|
||||||
|
user.notification_level == N_DISABLED
|
||||||
|
end
|
||||||
|
|
||||||
|
def participating?
|
||||||
|
user.notification_level == N_PARTICIPATING
|
||||||
|
end
|
||||||
|
|
||||||
|
def watch?
|
||||||
|
user.notification_level == N_WATCH
|
||||||
|
end
|
||||||
|
end
|
|
@ -54,13 +54,6 @@ class User < ActiveRecord::Base
|
||||||
attr_accessible :login
|
attr_accessible :login
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Notification levels
|
|
||||||
#
|
|
||||||
N_DISABLED = 0
|
|
||||||
N_PARTICIPATING = 1
|
|
||||||
N_WATCH = 2
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Relations
|
# Relations
|
||||||
#
|
#
|
||||||
|
@ -116,6 +109,9 @@ class User < ActiveRecord::Base
|
||||||
format: { with: Gitlab::Regex.username_regex,
|
format: { with: Gitlab::Regex.username_regex,
|
||||||
message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
|
message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
|
||||||
|
|
||||||
|
validates :notification_level,
|
||||||
|
inclusion: { in: Notification.notification_levels },
|
||||||
|
presence: true
|
||||||
|
|
||||||
validate :namespace_uniq, if: ->(user) { user.username_changed? }
|
validate :namespace_uniq, if: ->(user) { user.username_changed? }
|
||||||
|
|
||||||
|
@ -216,6 +212,10 @@ class User < ActiveRecord::Base
|
||||||
username
|
username
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def notification
|
||||||
|
@notification ||= Notification.new(self)
|
||||||
|
end
|
||||||
|
|
||||||
def generate_password
|
def generate_password
|
||||||
if self.force_random_password
|
if self.force_random_password
|
||||||
self.password = self.password_confirmation = Devise.friendly_token.first(8)
|
self.password = self.password_confirmation = Devise.friendly_token.first(8)
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
%i.icon-home
|
%i.icon-home
|
||||||
= nav_link(path: 'profiles#account') do
|
= nav_link(path: 'profiles#account') do
|
||||||
= link_to "Account", account_profile_path
|
= link_to "Account", account_profile_path
|
||||||
|
= nav_link(controller: :notifications) do
|
||||||
|
= link_to "Notifications", profile_notifications_path
|
||||||
= nav_link(controller: :keys) do
|
= nav_link(controller: :keys) do
|
||||||
= link_to keys_path do
|
= link_to keys_path do
|
||||||
SSH Keys
|
SSH Keys
|
||||||
|
|
26
app/views/notifications/show.html.haml
Normal file
26
app/views/notifications/show.html.haml
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
%h3.page_title Setup your notification level
|
||||||
|
%hr
|
||||||
|
|
||||||
|
|
||||||
|
= form_tag profile_notifications_path do
|
||||||
|
|
||||||
|
%ul.unstyled
|
||||||
|
%li
|
||||||
|
.row
|
||||||
|
.span3
|
||||||
|
%h5 Global
|
||||||
|
.span9
|
||||||
|
= label_tag do
|
||||||
|
= radio_button_tag :notification_level, Notification::N_DISABLED, @notification.disabled?
|
||||||
|
%span Disabled
|
||||||
|
|
||||||
|
= label_tag do
|
||||||
|
= radio_button_tag :notification_level, Notification::N_PARTICIPATING, @notification.participating?
|
||||||
|
%span Participating
|
||||||
|
|
||||||
|
= label_tag do
|
||||||
|
= radio_button_tag :notification_level, Notification::N_WATCH, @notification.watch?
|
||||||
|
%span Watch
|
||||||
|
|
||||||
|
.form-actions
|
||||||
|
= submit_tag 'Save', class: 'btn btn-save'
|
|
@ -110,6 +110,8 @@ Gitlab::Application.routes.draw do
|
||||||
put :reset_private_token
|
put :reset_private_token
|
||||||
put :update_username
|
put :update_username
|
||||||
end
|
end
|
||||||
|
|
||||||
|
resource :notifications
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :keys
|
resources :keys
|
||||||
|
|
15
spec/helpers/notifications_helper_spec.rb
Normal file
15
spec/helpers/notifications_helper_spec.rb
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
# Specs in this file have access to a helper object that includes
|
||||||
|
# the NotificationsHelper. For example:
|
||||||
|
#
|
||||||
|
# describe NotificationsHelper do
|
||||||
|
# describe "string concat" do
|
||||||
|
# it "concats two strings with spaces" do
|
||||||
|
# helper.concat_strings("this","that").should == "this that"
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
describe NotificationsHelper do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
11
spec/requests/notifications_spec.rb
Normal file
11
spec/requests/notifications_spec.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe "Notifications" do
|
||||||
|
describe "GET /notifications" do
|
||||||
|
it "works! (now write some real specs)" do
|
||||||
|
# Run the generator again with the --webrat flag if you want to use webrat methods/matchers
|
||||||
|
get notifications_path
|
||||||
|
response.status.should be(200)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
13
spec/routing/notifications_routing_spec.rb
Normal file
13
spec/routing/notifications_routing_spec.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
require "spec_helper"
|
||||||
|
|
||||||
|
describe NotificationsController do
|
||||||
|
describe "routing" do
|
||||||
|
it "routes to #show" do
|
||||||
|
get("/profile/notifications").should route_to("notifications#show")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "routes to #update" do
|
||||||
|
put("/profile/notifications").should route_to("notifications#update")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue