From f11f6374dac81a3e800e4db9dd897f75923a8a60 Mon Sep 17 00:00:00 2001 From: Matchu Date: Wed, 10 Sep 2014 14:32:54 -0500 Subject: [PATCH] donation mailer --- Gemfile | 2 + Gemfile.lock | 5 +++ app/assets/javascripts/static/donate.js | 3 ++ app/mailers/donation_mailer.rb | 8 ++++ app/models/donation.rb | 3 ++ .../donation_mailer/thank_you_email.html.erb | 38 ++++++++++++++++++ app/views/donations/show.html.haml | 5 ++- app/views/static/donate.html.haml | 4 ++ config/environments/development.rb | 2 + config/environments/development_async.rb | 2 + config/environments/production.rb | 15 +++++++ .../20140910181819_add_email_to_donations.rb | 5 +++ db/schema.rb | 11 ++--- spec/mailers/donation_mailer_spec.rb | 5 +++ vendor/cache/launchy-2.4.2.gem | Bin 0 -> 28672 bytes vendor/cache/letter_opener-1.2.0.gem | Bin 0 -> 12288 bytes 16 files changed, 101 insertions(+), 7 deletions(-) create mode 100644 app/mailers/donation_mailer.rb create mode 100644 app/views/donation_mailer/thank_you_email.html.erb create mode 100644 db/migrate/20140910181819_add_email_to_donations.rb create mode 100644 spec/mailers/donation_mailer_spec.rb create mode 100644 vendor/cache/launchy-2.4.2.gem create mode 100644 vendor/cache/letter_opener-1.2.0.gem diff --git a/Gemfile b/Gemfile index 2add685c..effadb20 100644 --- a/Gemfile +++ b/Gemfile @@ -70,6 +70,8 @@ gem 'react-rails', '~> 0.8.0.0' gem 'stripe', :git => 'https://github.com/stripe/stripe-ruby' +gem "letter_opener", :group => :development + # Needed for the new asset pipeline group :assets do diff --git a/Gemfile.lock b/Gemfile.lock index 2cf09e89..fbfce2ab 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -174,6 +174,10 @@ GEM i18n (0.6.9) journey (1.0.4) json (1.8.1) + launchy (2.4.2) + addressable (~> 2.3) + letter_opener (1.2.0) + launchy (~> 2.2) mail (2.5.4) mime-types (~> 1.16) treetop (~> 1.4.8) @@ -336,6 +340,7 @@ DEPENDENCIES haml (~> 4.0.0) http_accept_language! json (~> 1.8.1) + letter_opener memcache-client (~> 1.8.5) mini_magick (~> 3.4) msgpack (~> 0.5.3) diff --git a/app/assets/javascripts/static/donate.js b/app/assets/javascripts/static/donate.js index 3efde440..ca78514d 100644 --- a/app/assets/javascripts/static/donate.js +++ b/app/assets/javascripts/static/donate.js @@ -2,6 +2,8 @@ var donationForm = document.getElementById('donation-form'); var amountField = donationForm.querySelector( '[name=donation\\[amount\\]]'); + var emailField = donationForm.querySelector( + '[name=donation\\[donor_email\\]]'); var tokenField = donationForm.querySelector( '[name=donation\\[stripe_token\\]]'); @@ -10,6 +12,7 @@ image: donationForm.getAttribute('data-checkout-image'), token: function(token) { tokenField.value = token.id; + emailField.value = token.email; donationForm.submit(); } }); diff --git a/app/mailers/donation_mailer.rb b/app/mailers/donation_mailer.rb new file mode 100644 index 00000000..97a26abe --- /dev/null +++ b/app/mailers/donation_mailer.rb @@ -0,0 +1,8 @@ +class DonationMailer < ActionMailer::Base + default from: "matchu@openneo.net" + + def thank_you_email(donation, recipient) + @donation = donation + mail(to: recipient, subject: 'Thanks for donating to Dress to Impress!') + end +end diff --git a/app/models/donation.rb b/app/models/donation.rb index 2f3b5ce5..5495c5a0 100644 --- a/app/models/donation.rb +++ b/app/models/donation.rb @@ -29,6 +29,7 @@ class Donation < ActiveRecord::Base donation.charge_id = charge.id donation.user_id = user.try(:id) donation.donor_name = user.try(:name) + donation.donor_email = params[:donor_email] donation.secret = new_secret num_features = amount / FEATURE_COST @@ -42,6 +43,8 @@ class Donation < ActiveRecord::Base features.each(&:save!) end + DonationMailer.thank_you_email(donation, customer.email).deliver + donation end diff --git a/app/views/donation_mailer/thank_you_email.html.erb b/app/views/donation_mailer/thank_you_email.html.erb new file mode 100644 index 00000000..87da2924 --- /dev/null +++ b/app/views/donation_mailer/thank_you_email.html.erb @@ -0,0 +1,38 @@ +

+ Hello, hello! I'm Matchu, loving father of Dress to Impress. + I started building the site on a whim one day, and never expected it to + really catch on—but here you are, proving that someone else out there loves + Dress to Impress as much as I do <3 Thank you so much! +

+ +

+ Before I forget, let's get to receipt business. + You donated + <%= number_to_currency @donation.amount / 100.0 %> + (thanks again, by the way!), + and you can update the name and outfits on that donation whenever you like at + <%= link_to donation_url(@donation), donation_url(@donation) %>. +

+ +

+ Anyway. I hope you enjoy our little thank-you gift (you do have some + beautiful outfits for me to show off, right?), and that Dress to Impress + continues to bring you joy :) +

+ +

+ Oh! And, if you ever have anything to say to me, please let me know + at <%= mail_to 'matchu@openneo.net' %>. I'm looking forward to any and all + questions, comments, concerns, insults, treasure maps, love letters, or memes + you send my way :D +

+ +

+ Thanks again for your help! DTI <3s you.
+ —Matchu +

+ +

+ P.S. Seriously. Reply to this email and tell me something. + It'll make my day :D +

diff --git a/app/views/donations/show.html.haml b/app/views/donations/show.html.haml index ab992408..f56a932d 100644 --- a/app/views/donations/show.html.haml +++ b/app/views/donations/show.html.haml @@ -14,14 +14,15 @@ %p %strong But enough about us. Let's talk about you! - When we brag about you on our donors list, what should we say? + When we brag about you on our #{link_to 'donors list', donate_path}, + what should we say? (If you'd rather take care of this later, no worries! Check your email for a copy of this URL.) = form_for @donation, html: {id: 'edit-donation'} do |f| %ul %li.name - = f.label :donor_name, "Your name on the donors page" + = f.label :donor_name, "Your name on the donors list" = f.text_field :donor_name, placeholder: 'Anonymous' - @features.each do |feature| diff --git a/app/views/static/donate.html.haml b/app/views/static/donate.html.haml index 034b84cb..d0c36606 100644 --- a/app/views/static/donate.html.haml +++ b/app/views/static/donate.html.haml @@ -10,10 +10,14 @@ 'data-checkout-image' => image_path('default-preview.png'), 'data-checkout-publishable-key' => Rails.configuration.stripe[:publishable_key] do = hidden_field_tag 'donation[stripe_token]' + = hidden_field_tag 'donation[donor_email]' %header %p#donation-form-title Thanks for supporting Dress to Impress! %p#donation-form-subtitle + Securely powered by #{link_to 'Stripe', 'https://stripe.com/'}. + We never, ever see your payment info. + %br All donations go directly to our hosting costs. Thanks for your help! %div = precede '$' do diff --git a/config/environments/development.rb b/config/environments/development.rb index 60312fd4..6eda8d2a 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -15,6 +15,8 @@ OpenneoImpressItems::Application.configure do # Don't care if the mailer can't send config.action_mailer.raise_delivery_errors = false + config.action_mailer.default_url_options = {host: "impress.dev.openneo.net"} + config.action_mailer.delivery_method = :letter_opener config.active_support.deprecation = :log diff --git a/config/environments/development_async.rb b/config/environments/development_async.rb index 6f7f8c49..7c40fbe5 100644 --- a/config/environments/development_async.rb +++ b/config/environments/development_async.rb @@ -18,6 +18,8 @@ OpenneoImpressItems::Application.configure do config.action_mailer.raise_delivery_errors = false config.active_support.deprecation = :log + + config.action_mailer.default_url_options[:host] = 'impress.dev.openneo.net' config.threadsafe! end diff --git a/config/environments/production.rb b/config/environments/production.rb index 361292e5..daaf18fc 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -61,6 +61,21 @@ OpenneoImpressItems::Application.configure do # config.force_ssl = true config.react.variant = :production + + config.action_mailer.default_url_options = {host: "impress.openneo.net"} + + config.action_mailer.delivery_method = :smtp + config.action_mailer.smtp_settings = { + :address => "mail.openneo.net", + :port => 587, + :domain => "openneo.net", + :authentication => :login, + :user_name => "matchu@openneo.net", + :password => ENV.fetch("MATCHU_EMAIL_PASSWORD"), + :enable_starttls_auto => false + } + config.action_mailer.raise_delivery_errors = true + config.action_mailer.perform_deliveries = true end LocalImpressHost = 'newimpress.openneo.net' diff --git a/db/migrate/20140910181819_add_email_to_donations.rb b/db/migrate/20140910181819_add_email_to_donations.rb new file mode 100644 index 00000000..a187ff2d --- /dev/null +++ b/db/migrate/20140910181819_add_email_to_donations.rb @@ -0,0 +1,5 @@ +class AddEmailToDonations < ActiveRecord::Migration + def change + add_column :donations, :donor_email, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index b47e72cf..720ef3cc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20140910030549) do +ActiveRecord::Schema.define(:version => 20140910181819) do create_table "auth_servers", :force => true do |t| t.string "short_name", :limit => 10, :null => false @@ -107,13 +107,14 @@ ActiveRecord::Schema.define(:version => 20140910030549) do end create_table "donations", :force => true do |t| - t.integer "amount", :null => false - t.string "charge_id", :null => false + t.integer "amount", :null => false + t.string "charge_id", :null => false t.integer "user_id" t.string "donor_name" t.string "secret" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "donor_email" end create_table "donations_old", :force => true do |t| diff --git a/spec/mailers/donation_mailer_spec.rb b/spec/mailers/donation_mailer_spec.rb new file mode 100644 index 00000000..97227bf6 --- /dev/null +++ b/spec/mailers/donation_mailer_spec.rb @@ -0,0 +1,5 @@ +require "spec_helper" + +describe DonationMailer do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/vendor/cache/launchy-2.4.2.gem b/vendor/cache/launchy-2.4.2.gem new file mode 100644 index 0000000000000000000000000000000000000000..23763cc63e3c8c05bfbd78f3e7125ff4a926e924 GIT binary patch literal 28672 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
uh921oqE*~A$ZN$7ELA%OQIj`I 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