notification scaffold

master
Dmitriy Zaporozhets 2013-03-27 19:04:29 +02:00
parent 5f14a6bcf8
commit d55ade1686
10 changed files with 119 additions and 7 deletions

View 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

View File

@ -0,0 +1,2 @@
module NotificationsHelper
end

View 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

View File

@ -54,13 +54,6 @@ class User < ActiveRecord::Base
attr_accessible :login
#
# Notification levels
#
N_DISABLED = 0
N_PARTICIPATING = 1
N_WATCH = 2
#
# Relations
#
@ -116,6 +109,9 @@ class User < ActiveRecord::Base
format: { with: Gitlab::Regex.username_regex,
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? }
@ -216,6 +212,10 @@ class User < ActiveRecord::Base
username
end
def notification
@notification ||= Notification.new(self)
end
def generate_password
if self.force_random_password
self.password = self.password_confirmation = Devise.friendly_token.first(8)

View File

@ -11,6 +11,8 @@
%i.icon-home
= nav_link(path: 'profiles#account') do
= link_to "Account", account_profile_path
= nav_link(controller: :notifications) do
= link_to "Notifications", profile_notifications_path
= nav_link(controller: :keys) do
= link_to keys_path do
SSH Keys

View 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'

View File

@ -110,6 +110,8 @@ Gitlab::Application.routes.draw do
put :reset_private_token
put :update_username
end
resource :notifications
end
resources :keys

View 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

View 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

View 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