Commit c1a897c
Changed files (5)
app
models
spec
models
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