From 98db33f6234fc96d0bb8e5e0f3cc6d344bfc2faf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Miedes=20Garc=C3=A9s?= Date: Thu, 5 Jan 2017 23:31:11 +0100 Subject: [PATCH] Track email digests --- ...15410_add_failed_email_digests_count_to_users.rb | 5 +++++ db/schema.rb | 9 ++++++--- lib/email_digest.rb | 1 + lib/tasks/emails.rake | 9 +++++++-- spec/lib/email_digests_spec.rb | 13 +++++++++++++ 5 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20170105215410_add_failed_email_digests_count_to_users.rb diff --git a/db/migrate/20170105215410_add_failed_email_digests_count_to_users.rb b/db/migrate/20170105215410_add_failed_email_digests_count_to_users.rb new file mode 100644 index 000000000..44744ed98 --- /dev/null +++ b/db/migrate/20170105215410_add_failed_email_digests_count_to_users.rb @@ -0,0 +1,5 @@ +class AddFailedEmailDigestsCountToUsers < ActiveRecord::Migration + def change + add_column :users, :failed_email_digests_count, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index 0c3cfd3cf..8195aa0cf 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161229110336) do +ActiveRecord::Schema.define(version: 20170105215410) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -123,10 +123,10 @@ ActiveRecord::Schema.define(version: 20161229110336) do t.string "visit_id" t.datetime "hidden_at" t.integer "flags_count", default: 0 - t.datetime "ignored_flag_at" t.integer "cached_votes_total", default: 0 t.integer "cached_votes_up", default: 0 t.integer "cached_votes_down", default: 0 + t.datetime "ignored_flag_at" t.integer "comments_count", default: 0 t.datetime "confirmed_hide_at" t.integer "cached_anonymous_votes_total", default: 0 @@ -145,6 +145,7 @@ ActiveRecord::Schema.define(version: 20161229110336) do add_index "debates", ["cached_votes_total"], name: "index_debates_on_cached_votes_total", using: :btree add_index "debates", ["cached_votes_up"], name: "index_debates_on_cached_votes_up", using: :btree add_index "debates", ["confidence_score"], name: "index_debates_on_confidence_score", using: :btree + add_index "debates", ["description"], name: "index_debates_on_description", using: :btree add_index "debates", ["geozone_id"], name: "index_debates_on_geozone_id", using: :btree add_index "debates", ["hidden_at"], name: "index_debates_on_hidden_at", using: :btree add_index "debates", ["hot_score"], name: "index_debates_on_hot_score", using: :btree @@ -308,6 +309,7 @@ ActiveRecord::Schema.define(version: 20161229110336) do add_index "proposals", ["author_id"], name: "index_proposals_on_author_id", using: :btree add_index "proposals", ["cached_votes_up"], name: "index_proposals_on_cached_votes_up", using: :btree add_index "proposals", ["confidence_score"], name: "index_proposals_on_confidence_score", using: :btree + add_index "proposals", ["description"], name: "index_proposals_on_description", using: :btree add_index "proposals", ["geozone_id"], name: "index_proposals_on_geozone_id", using: :btree add_index "proposals", ["hidden_at"], name: "index_proposals_on_hidden_at", using: :btree add_index "proposals", ["hot_score"], name: "index_proposals_on_hot_score", using: :btree @@ -480,8 +482,9 @@ ActiveRecord::Schema.define(version: 20161229110336) do t.boolean "email_digest", default: true t.boolean "email_on_direct_message", default: true t.boolean "official_position_badge", default: false - t.datetime "password_changed_at", default: '2016-12-21 17:55:08', null: false + t.datetime "password_changed_at", default: '2016-11-02 13:51:14', null: false t.boolean "created_from_signature", default: false + t.integer "failed_email_digests_count", default: 0 end add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree diff --git a/lib/email_digest.rb b/lib/email_digest.rb index 2936a5db5..511d137a6 100644 --- a/lib/email_digest.rb +++ b/lib/email_digest.rb @@ -22,6 +22,7 @@ class EmailDigest def mark_as_emailed notifications.update_all(emailed_at: Time.current) + user.update(failed_email_digests_count: 0) end end diff --git a/lib/tasks/emails.rake b/lib/tasks/emails.rake index ffadebf05..3afa81449 100644 --- a/lib/tasks/emails.rake +++ b/lib/tasks/emails.rake @@ -4,8 +4,13 @@ namespace :emails do task digest: :environment do User.email_digest.find_each do |user| email_digest = EmailDigest.new(user) - email_digest.deliver - email_digest.mark_as_emailed + begin + email_digest.deliver + email_digest.mark_as_emailed + rescue + user.increment_counter(:failed_email_digests_count) + user.save + end end end diff --git a/spec/lib/email_digests_spec.rb b/spec/lib/email_digests_spec.rb index 76efffe2e..6f15a92d4 100644 --- a/spec/lib/email_digests_spec.rb +++ b/spec/lib/email_digests_spec.rb @@ -122,6 +122,19 @@ describe EmailDigest do expect(notification3.emailed_at).to_not be end + it "resets the failed_email_digests_count flag" do + user1 = create(:user, failed_email_digests_count: 0) + user2 = create(:user, failed_email_digests_count: 3) + + email_digest_1 = EmailDigest.new(user1) + email_digest_2 = EmailDigest.new(user2) + email_digest_1.mark_as_emailed + email_digest_2.mark_as_emailed + + expect(user1.failed_email_digests_count).to eq(0) + expect(user2.failed_email_digests_count).to eq(0) + end + end end