Skip to content

Commit b243097

Browse files
committed
Merge branch 'user_mailer' of https://github.com/hcarreras/hackety-hack.com into hcarreras-user_mailer
2 parents e359dee + 5d57b91 commit b243097

12 files changed

Lines changed: 81 additions & 20 deletions

File tree

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ GEM
9595
erubis (2.7.0)
9696
execjs (1.3.0)
9797
multi_json (~> 1.0)
98-
fabrication (1.2.0)
98+
fabrication (2.8.1)
9999
faker (1.0.1)
100100
i18n (~> 0.4)
101101
ffi (1.0.11)
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
class MailerController < ApplicationController
22
def new
3-
@user = User.find_by_username(params[:user])
3+
@users = Array(params[:user])
4+
@emails = User.where(:username => @users).all.map(&:email);
45
@message = Message.new
56
end
67

78
def create
89
@message = Message.new(params[:message])
910

1011
if @message.valid?
11-
MessageMailer.new_message(@message).deliver
12+
@message.email.each do |email|
13+
MessageMailer.new_message(@message, email).deliver
14+
end
1215
redirect_to users_index_path, :notice => "Email sent correctly"
1316
else
1417
notice = "There was an error"
15-
reder :new
18+
render :new
1619
end
1720
end
1821
end

app/controllers/users_controller.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ class UsersController < InheritedController
44
require 'will_paginate/array'
55

66
def index
7-
@users = User.all.paginate(:page => params[:page], :per_page => 1)
8-
respond_to do |format|
9-
format.html
10-
end
7+
redirect_to root_path unless can? :manage, @users
8+
@users = User.all.paginate(:page => params[:page], :per_page => 10)
119
end
1210

1311
def follow

app/mailers/message_mailer.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
class MessageMailer < ActionMailer::Base
22
default from: "steve@hackety.com"
33

4-
def new_message message
4+
def new_message message, email
55
@message = message
6-
mail(:to => @message.email, :subject => @message.subject)
6+
@email = email
7+
mail(:to => @email, :subject => @message.subject)
78
end
89
end

app/models/message.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Message
22
include MongoMapper::Document
3-
key :email, String
3+
key :email, Array
44
key :subject, String
55
key :body, String
66
validates_presence_of :email, :body

app/views/mailer/_form.html.haml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
.inputs
44
=f.input :subject, :hint => "Write the subject here!"
55
=f.input :body, :as => :text
6-
=f.input :email, :as => :hidden, :input_html => { :value => @user.email }
6+
7+
-@emails.each do |email|
8+
=f.input "email[#{email}]", :as => :text, :as => :hidden, :input_html => { :value => ""}
9+
710
.actions
811
=f.button :submit , 'Send Email', :class => "primary btn"

app/views/mailer/new.html.haml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
= render "form"
33

44
This email will send to:
5-
=@user.username
6-
with email:
7-
=@user.email
5+
-@emails.each do |email|
6+
= email
7+
= " "

app/views/shared/menu/_user.html.haml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
= semantic_menu :class => "nav secondary-nav" do |root|
22
- if current_user
3+
- if current_user.moderator
4+
- root.add "Send an Email", users_index_path
35
- root.add current_user.username, user_path(current_user)
46
- root.add "Log Out", logout_path
57
- else

app/views/users/index.html.haml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
=link_to "Create a diffusion", mailer_path(:user => User.all)
12
%ul
23
- @users.each do |user|
34
%li
45
.info
56
.title= user.username
67
.categories
78
.btn.success= link_to "Email him", mailer_path(:user => user)
9+
810
= will_paginate @users
Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,44 @@
11
require 'spec_helper'
22

33
describe MailerController do
4-
describe "GET 'new'" do
4+
let(:user) { Fabricate(:user) }
5+
let(:users) { Fabricate.sequence(:user, 5)}
6+
7+
describe "GET 'new' for a single user email" do
58
it "returns http success" do
6-
get 'new'
9+
get 'new', user: Array(user)
710
response.should be_success
811
end
912
end
13+
14+
describe "GET 'new' for a diffusion" do
15+
it "returns http success" do
16+
get 'new', user: Array(users)
17+
response.should be_success
18+
end
19+
end
20+
21+
describe "POST 'create' for a single user email" do
22+
it "returns http success" do
23+
@message = Fabricate.build(:message)
24+
post 'create', message: @message
25+
response.should be_success
26+
#We expect after send a message that the deliveries raise one
27+
expect { MessageMailer.new_message(@message, @message.email).deliver }.to change { ActionMailer::Base.deliveries.size }.by(1)
28+
end
29+
end
30+
31+
describe "POST 'create' for a diffusion" do
32+
it "returns http success" do
33+
@diffusion = Fabricate.build(:diffusion)
34+
post 'create', message: @diffusion
35+
response.should be_success
36+
37+
@before_send = ActionMailer::Base.deliveries.size
38+
@diffusion.email.each do |email|
39+
MessageMailer.new_message(@diffusion, email).deliver
40+
end
41+
ActionMailer::Base.deliveries.size.should eq @before_send + @diffusion.email.size
42+
end
43+
end
1044
end

0 commit comments

Comments
 (0)