Commit c1a897c

mo khan <mo@mokhan.ca>
2016-05-14 15:22:51
save received emails in db.
1 parent 412f360
app/models/received_email.rb
@@ -0,0 +1,5 @@
+class ReceivedEmail < ActiveRecord::Base
+  belongs_to :user
+  serialize :to, JSON
+  serialize :from, JSON
+end
app/models/user.rb
@@ -5,6 +5,7 @@ class User < ActiveRecord::Base
   has_many :exercise_sessions, through: :training_sessions
   has_many :user_sessions, dependent: :destroy
   has_one :profile
+  has_many :received_emails
   USERNAME_REGEX=/\A[-a-z0-9_.]*\z/i
 
   validates :username, presence: true, format: { with: USERNAME_REGEX }, uniqueness: true
@@ -32,6 +33,12 @@ class User < ActiveRecord::Base
   end
 
   def add_to_inbox(email)
+    received_emails.create!(
+      to: email.to,
+      from: email.from,
+      subject: email.subject,
+      body: email.body
+    )
     email.attachments.each do |attachment|
       BackupFile.new(self, attachment).process_later(Program.stronglifts)
     end
db/migrate/20160514150039_create_received_emails.rb
@@ -0,0 +1,13 @@
+class CreateReceivedEmails < ActiveRecord::Migration
+  def change
+    create_table :received_emails, id: :uuid do |t|
+      t.belongs_to :user, foreign_key: true, index: true, type: :uuid
+      t.text :to
+      t.text :from
+      t.string :subject
+      t.text :body
+
+      t.timestamps null: false
+    end
+  end
+end
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: 20160512024722) do
+ActiveRecord::Schema.define(version: 20160514150039) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -83,6 +83,18 @@ ActiveRecord::Schema.define(version: 20160512024722) do
 
   add_index "programs", ["slug"], name: "index_programs_on_slug", unique: true, using: :btree
 
+  create_table "received_emails", id: :uuid, default: "uuid_generate_v4()", force: :cascade do |t|
+    t.uuid     "user_id"
+    t.text     "to"
+    t.text     "from"
+    t.string   "subject"
+    t.text     "body"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  add_index "received_emails", ["user_id"], name: "index_received_emails_on_user_id", using: :btree
+
   create_table "training_sessions", id: :uuid, default: "uuid_generate_v4()", force: :cascade do |t|
     t.uuid     "user_id",     null: false
     t.datetime "created_at",  null: false
@@ -121,5 +133,6 @@ ActiveRecord::Schema.define(version: 20160512024722) do
     t.datetime "updated_at", null: false
   end
 
+  add_foreign_key "received_emails", "users"
   add_foreign_key "user_sessions", "users"
 end
spec/models/user_spec.rb
@@ -217,4 +217,20 @@ describe User do
       it { expect(User.login("sofake", "password")).to be_falsey }
     end
   end
+
+  describe "#add_to_inbox" do
+    include_context "stronglifts_program"
+    subject { create(:user) }
+    let(:email) { build(:email, :with_attachment) }
+
+    it 'records the email' do
+      subject.add_to_inbox(email)
+      expect(subject.received_emails.count).to eql(1)
+      received_email = subject.received_emails.first
+      expect(received_email.to.map(&:symbolize_keys)).to match_array(email.to)
+      expect(received_email.from.symbolize_keys).to eql(email.from)
+      expect(received_email.subject).to eql(email.subject)
+      expect(received_email.body).to eql(email.body)
+    end
+  end
 end