From aa7a6b3e04bb5e8689fd99cf8a8cabc2a846f28b Mon Sep 17 00:00:00 2001 From: Seth Call Date: Sat, 10 Aug 2013 15:35:54 -0500 Subject: [PATCH] * VRFS-513; model in place to take feedback from corporate website --- lib/jam_ruby.rb | 3 + lib/jam_ruby/app/mailers/corp_mailer.rb | 35 ++++++ lib/jam_ruby/app/mailers/user_mailer.rb | 114 +++++++++--------- .../jam_ruby/corp_mailer/feedback.html.erb | 14 +++ .../jam_ruby/corp_mailer/feedback.text.erb | 8 ++ lib/jam_ruby/models/feedback.rb | 21 ++++ lib/jam_ruby/models/feedback_observer.rb | 10 ++ spec/jam_ruby/models/feedback_spec.rb | 54 +++++++++ spec/spec_helper.rb | 1 + 9 files changed, 203 insertions(+), 57 deletions(-) create mode 100644 lib/jam_ruby/app/mailers/corp_mailer.rb create mode 100644 lib/jam_ruby/app/views/jam_ruby/corp_mailer/feedback.html.erb create mode 100644 lib/jam_ruby/app/views/jam_ruby/corp_mailer/feedback.text.erb create mode 100644 lib/jam_ruby/models/feedback.rb create mode 100644 lib/jam_ruby/models/feedback_observer.rb create mode 100644 spec/jam_ruby/models/feedback_spec.rb diff --git a/lib/jam_ruby.rb b/lib/jam_ruby.rb index a7aafe72c..af074e607 100755 --- a/lib/jam_ruby.rb +++ b/lib/jam_ruby.rb @@ -25,6 +25,7 @@ require "jam_ruby/environment" require "jam_ruby/init" require "jam_ruby/app/mailers/user_mailer" require "jam_ruby/app/mailers/invited_user_mailer" +require "jam_ruby/app/mailers/corp_mailer" require "jam_ruby/app/uploaders/artifact_uploader" require "jam_ruby/app/uploaders/perf_data_uploader" require "jam_ruby/lib/desk_multipass" @@ -33,6 +34,8 @@ require "jam_ruby/lib/s3_manager" require "jam_ruby/lib/profanity" require "jam_ruby/amqp/amqp_connection_manager" require "jam_ruby/message_factory" +require "jam_ruby/models/feedback" +require "jam_ruby/models/feedback_observer" require "jam_ruby/models/max_mind_geo" require "jam_ruby/models/max_mind_isp" require "jam_ruby/models/genre" diff --git a/lib/jam_ruby/app/mailers/corp_mailer.rb b/lib/jam_ruby/app/mailers/corp_mailer.rb new file mode 100644 index 000000000..0bdd09858 --- /dev/null +++ b/lib/jam_ruby/app/mailers/corp_mailer.rb @@ -0,0 +1,35 @@ +module JamRuby + # CorpMail must be configured to work + # Some common configs occur in jam_ruby/init.rb + # Environment specific configs occur in spec_helper.rb in jam-ruby and jam-web (to put it into test mode), + # and in config/initializers/email.rb in rails to configure sendmail account settings + # If UserMailer were to be used in another project, it would need to be configured there, as well. + + # Templates for UserMailer can be found in jam_ruby/app/views/jam_ruby/user_mailer + class CorpMailer < ActionMailer::Base + include SendGrid + + layout "user_mailer" + + DEFAULT_SENDER = "noreply@jamkazam.com" + + default :from => DEFAULT_SENDER + + sendgrid_category :use_subject_lines + #sendgrid_enable :opentrack, :clicktrack # this makes our emails creepy, imo (seth) + sendgrid_unique_args :env => Environment.mode + + def feedback(feedback) + @email = feedback.email + @body = feedback.body + + sendgrid_category "Corporate" + sendgrid_unique_args :type => "feedback" + + mail(:to => "info@jamkazam.com", :subject => "Feedback received from #{@email} ") do |format| + format.text + format.html + end + end + end +end diff --git a/lib/jam_ruby/app/mailers/user_mailer.rb b/lib/jam_ruby/app/mailers/user_mailer.rb index 96b322def..3b84767cb 100644 --- a/lib/jam_ruby/app/mailers/user_mailer.rb +++ b/lib/jam_ruby/app/mailers/user_mailer.rb @@ -1,71 +1,71 @@ -module JamRuby - # UserMailer must be configured to work - # Some common configs occur in jam_ruby/init.rb - # Environment specific configs occur in spec_helper.rb in jam-ruby and jam-web (to put it into test mode), - # and in config/initializers/email.rb in rails to configure sendmail account settings - # If UserMailer were to be used in another project, it would need to be configured there, as well. + module JamRuby + # UserMailer must be configured to work + # Some common configs occur in jam_ruby/init.rb + # Environment specific configs occur in spec_helper.rb in jam-ruby and jam-web (to put it into test mode), + # and in config/initializers/email.rb in rails to configure sendmail account settings + # If UserMailer were to be used in another project, it would need to be configured there, as well. - # Templates for UserMailer can be found in jam_ruby/app/views/jam_ruby/user_mailer - class UserMailer < ActionMailer::Base - include SendGrid + # Templates for UserMailer can be found in jam_ruby/app/views/jam_ruby/user_mailer + class UserMailer < ActionMailer::Base + include SendGrid - layout "user_mailer" + layout "user_mailer" - DEFAULT_SENDER = "support@jamkazam.com" + DEFAULT_SENDER = "support@jamkazam.com" - default :from => DEFAULT_SENDER + default :from => DEFAULT_SENDER - sendgrid_category :use_subject_lines - #sendgrid_enable :opentrack, :clicktrack # this makes our emails creepy, imo (seth) - sendgrid_unique_args :env => Environment.mode + sendgrid_category :use_subject_lines + #sendgrid_enable :opentrack, :clicktrack # this makes our emails creepy, imo (seth) + sendgrid_unique_args :env => Environment.mode - def welcome_message(user, signup_confirm_url) - @user = user - @signup_confirm_url = signup_confirm_url - sendgrid_category "Welcome" - sendgrid_unique_args :type => "welcome_message" + def welcome_message(user, signup_confirm_url) + @user = user + @signup_confirm_url = signup_confirm_url + sendgrid_category "Welcome" + sendgrid_unique_args :type => "welcome_message" - mail(:to => user.email, :subject => "Welcome to Jamkazam, #{user.first_name} ") do |format| - format.text - format.html - end - end - - def password_changed(user) - @user = user - sendgrid_unique_args :type => "password_changed" - mail(:to => user.email, :subject => "Jamkazam Password Changed") do |format| - format.text - format.html - end - end - - def password_reset(user, password_reset_url) - @user = user - @password_reset_url = password_reset_url - sendgrid_unique_args :type => "password_reset" - mail(:to => user.email, :subject => "Jamkazam Password Reset") do |format| - format.text - format.html + mail(:to => user.email, :subject => "Welcome to Jamkazam, #{user.first_name} ") do |format| + format.text + format.html + end end - end - def updating_email(user) - @user = user - sendgrid_unique_args :type => "updating_email" - mail(:to => user.update_email, :subject => "Jamkazam Email Change Confirmation") do |format| - format.text - format.html + def password_changed(user) + @user = user + sendgrid_unique_args :type => "password_changed" + mail(:to => user.email, :subject => "Jamkazam Password Changed") do |format| + format.text + format.html + end end - end - def updated_email(user) - @user = user - sendgrid_unique_args :type => "updated_email" - mail(:to => user.email, :subject => "Jamkazam Email Changed") do |format| - format.text - format.html + def password_reset(user, password_reset_url) + @user = user + @password_reset_url = password_reset_url + sendgrid_unique_args :type => "password_reset" + mail(:to => user.email, :subject => "Jamkazam Password Reset") do |format| + format.text + format.html + end + end + + def updating_email(user) + @user = user + sendgrid_unique_args :type => "updating_email" + mail(:to => user.update_email, :subject => "Jamkazam Email Change Confirmation") do |format| + format.text + format.html + end + end + + def updated_email(user) + @user = user + sendgrid_unique_args :type => "updated_email" + mail(:to => user.email, :subject => "Jamkazam Email Changed") do |format| + format.text + format.html + end end end end -end diff --git a/lib/jam_ruby/app/views/jam_ruby/corp_mailer/feedback.html.erb b/lib/jam_ruby/app/views/jam_ruby/corp_mailer/feedback.html.erb new file mode 100644 index 000000000..7daab2af6 --- /dev/null +++ b/lib/jam_ruby/app/views/jam_ruby/corp_mailer/feedback.html.erb @@ -0,0 +1,14 @@ + + +

Feedback Received

+

From <%= @email %>:

+

<%= @body %>

+ +
+
+
+

+This email was received because someone left feedback at http://www.jamkazam.com/corp/contact +

+ + diff --git a/lib/jam_ruby/app/views/jam_ruby/corp_mailer/feedback.text.erb b/lib/jam_ruby/app/views/jam_ruby/corp_mailer/feedback.text.erb new file mode 100644 index 000000000..4612cf5ee --- /dev/null +++ b/lib/jam_ruby/app/views/jam_ruby/corp_mailer/feedback.text.erb @@ -0,0 +1,8 @@ +Feedback Received + +From <%= @email %>: + +<%= @body %> + + +This email was received because someone left feedback at http://www.jamkazam.com/corp/contact \ No newline at end of file diff --git a/lib/jam_ruby/models/feedback.rb b/lib/jam_ruby/models/feedback.rb new file mode 100644 index 000000000..454805855 --- /dev/null +++ b/lib/jam_ruby/models/feedback.rb @@ -0,0 +1,21 @@ +module JamRuby + class Feedback + include ActiveModel::Validations + include ActiveModel::Validations::Callbacks + include ActiveModel::Observing + extend ActiveModel::Callbacks + + VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i + validates :email, presence: true, format: {with: VALID_EMAIL_REGEX} + validates :body, :presence => true + + attr_accessor :email, :body + + + def save + + return valid? + + end + end +end \ No newline at end of file diff --git a/lib/jam_ruby/models/feedback_observer.rb b/lib/jam_ruby/models/feedback_observer.rb new file mode 100644 index 000000000..f409c753f --- /dev/null +++ b/lib/jam_ruby/models/feedback_observer.rb @@ -0,0 +1,10 @@ +module JamRuby + class FeedbackObserver < ActiveRecord::Observer + + observe JamRuby::Feedback + + def after_validation(feedback) + CorpMailer.feedback(feedback).deliver unless feedback.errors.any? + end + end +end \ No newline at end of file diff --git a/spec/jam_ruby/models/feedback_spec.rb b/spec/jam_ruby/models/feedback_spec.rb new file mode 100644 index 000000000..bf1260c76 --- /dev/null +++ b/spec/jam_ruby/models/feedback_spec.rb @@ -0,0 +1,54 @@ +require 'spec_helper' + +describe Feedback do + + let(:feedback) { Feedback.new } + + before(:each) do + CorpMailer.deliveries.clear + end + + describe "empty model" do + + before(:each) do + feedback.save + end + + it { feedback.valid?.should be_false } + it { feedback.errors.keys.length.should == 2} + it { feedback.errors["email"].length.should == 2} + it { feedback.errors["email"][0].include?("blank").should be_true} + it { feedback.errors["email"][1].include?("invalid").should be_true} + it { feedback.errors["body"].length.should == 1} + it { feedback.errors["body"][0].include?("blank").should be_true} + it { CorpMailer.deliveries.length.should == 0} + + end + + describe "bad email" do + before(:each) do + feedback.email = "blarg" + feedback.body = "here's the problem!" + feedback.save + end + + it { feedback.valid?.should be_false } + it { feedback.errors.keys.length.should == 1} + it { feedback.errors["email"].length.should == 1} + it { feedback.errors["email"][0].include?("invalid").should be_true} + it { CorpMailer.deliveries.length.should == 0} + end + + describe "populated model" do + before(:each) do + feedback.email = "seth@jamkazam.com" + feedback.body = "here's the problem!" + feedback.save + end + + it { feedback.valid?.should be_true } + it { feedback.errors.keys.length.should == 0 } + it { CorpMailer.deliveries.length.should == 1} + end +end + diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index eeab8e42e..71905ef15 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -25,6 +25,7 @@ include JamRuby # manually register observers ActiveRecord::Base.add_observer InvitedUserObserver.instance ActiveRecord::Base.add_observer UserObserver.instance +ActiveRecord::Base.add_observer FeedbackObserver.instance # put ActionMailer into test mode