Commit d55ade16861d0700e302f50945560e8570eddcd7

Authored by Dmitriy Zaporozhets
1 parent 5f14a6bc

notification scaffold

app/controllers/notifications_controller.rb 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +class NotificationsController < ApplicationController
  2 + layout 'profile'
  3 +
  4 + def show
  5 + @notification = current_user.notification
  6 + end
  7 +
  8 + def update
  9 + @notification = current_user.notification
  10 + end
  11 +end
... ...
app/helpers/notifications_helper.rb 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +module NotificationsHelper
  2 +end
... ...
app/models/notification.rb 0 → 100644
... ... @@ -0,0 +1,30 @@
  1 +class Notification
  2 + #
  3 + # Notification levels
  4 + #
  5 + N_DISABLED = 0
  6 + N_PARTICIPATING = 1
  7 + N_WATCH = 2
  8 +
  9 + attr_accessor :user
  10 +
  11 + def self.notification_levels
  12 + [N_DISABLED, N_PARTICIPATING, N_WATCH]
  13 + end
  14 +
  15 + def initialize(user)
  16 + @user = user
  17 + end
  18 +
  19 + def disabled?
  20 + user.notification_level == N_DISABLED
  21 + end
  22 +
  23 + def participating?
  24 + user.notification_level == N_PARTICIPATING
  25 + end
  26 +
  27 + def watch?
  28 + user.notification_level == N_WATCH
  29 + end
  30 +end
... ...
app/models/user.rb
... ... @@ -55,13 +55,6 @@ class User &lt; ActiveRecord::Base
55 55  
56 56  
57 57 #
58   - # Notification levels
59   - #
60   - N_DISABLED = 0
61   - N_PARTICIPATING = 1
62   - N_WATCH = 2
63   -
64   - #
65 58 # Relations
66 59 #
67 60  
... ... @@ -116,6 +109,9 @@ class User &lt; ActiveRecord::Base
116 109 format: { with: Gitlab::Regex.username_regex,
117 110 message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
118 111  
  112 + validates :notification_level,
  113 + inclusion: { in: Notification.notification_levels },
  114 + presence: true
119 115  
120 116 validate :namespace_uniq, if: ->(user) { user.username_changed? }
121 117  
... ... @@ -216,6 +212,10 @@ class User &lt; ActiveRecord::Base
216 212 username
217 213 end
218 214  
  215 + def notification
  216 + @notification ||= Notification.new(self)
  217 + end
  218 +
219 219 def generate_password
220 220 if self.force_random_password
221 221 self.password = self.password_confirmation = Devise.friendly_token.first(8)
... ...
app/views/layouts/profile.html.haml
... ... @@ -11,6 +11,8 @@
11 11 %i.icon-home
12 12 = nav_link(path: 'profiles#account') do
13 13 = link_to "Account", account_profile_path
  14 + = nav_link(controller: :notifications) do
  15 + = link_to "Notifications", profile_notifications_path
14 16 = nav_link(controller: :keys) do
15 17 = link_to keys_path do
16 18 SSH Keys
... ...
app/views/notifications/show.html.haml 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +%h3.page_title Setup your notification level
  2 +%hr
  3 +
  4 +
  5 += form_tag profile_notifications_path do
  6 +
  7 + %ul.unstyled
  8 + %li
  9 + .row
  10 + .span3
  11 + %h5 Global
  12 + .span9
  13 + = label_tag do
  14 + = radio_button_tag :notification_level, Notification::N_DISABLED, @notification.disabled?
  15 + %span Disabled
  16 +
  17 + = label_tag do
  18 + = radio_button_tag :notification_level, Notification::N_PARTICIPATING, @notification.participating?
  19 + %span Participating
  20 +
  21 + = label_tag do
  22 + = radio_button_tag :notification_level, Notification::N_WATCH, @notification.watch?
  23 + %span Watch
  24 +
  25 + .form-actions
  26 + = submit_tag 'Save', class: 'btn btn-save'
... ...
config/routes.rb
... ... @@ -110,6 +110,8 @@ Gitlab::Application.routes.draw do
110 110 put :reset_private_token
111 111 put :update_username
112 112 end
  113 +
  114 + resource :notifications
113 115 end
114 116  
115 117 resources :keys
... ...
spec/helpers/notifications_helper_spec.rb 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +require 'spec_helper'
  2 +
  3 +# Specs in this file have access to a helper object that includes
  4 +# the NotificationsHelper. For example:
  5 +#
  6 +# describe NotificationsHelper do
  7 +# describe "string concat" do
  8 +# it "concats two strings with spaces" do
  9 +# helper.concat_strings("this","that").should == "this that"
  10 +# end
  11 +# end
  12 +# end
  13 +describe NotificationsHelper do
  14 + pending "add some examples to (or delete) #{__FILE__}"
  15 +end
... ...
spec/requests/notifications_spec.rb 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +require 'spec_helper'
  2 +
  3 +describe "Notifications" do
  4 + describe "GET /notifications" do
  5 + it "works! (now write some real specs)" do
  6 + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers
  7 + get notifications_path
  8 + response.status.should be(200)
  9 + end
  10 + end
  11 +end
... ...
spec/routing/notifications_routing_spec.rb 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +require "spec_helper"
  2 +
  3 +describe NotificationsController do
  4 + describe "routing" do
  5 + it "routes to #show" do
  6 + get("/profile/notifications").should route_to("notifications#show")
  7 + end
  8 +
  9 + it "routes to #update" do
  10 + put("/profile/notifications").should route_to("notifications#update")
  11 + end
  12 + end
  13 +end
... ...