Skip to content

Commit

Permalink
Merge pull request #95 from LTe/convert-opened-to-opened-at
Browse files Browse the repository at this point in the history
Add support for `opened_at`
  • Loading branch information
LTe committed Apr 19, 2020
2 parents 14cf3d3 + 11bb9aa commit 69b119a
Show file tree
Hide file tree
Showing 14 changed files with 52 additions and 8 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ group :development do
gem 'rspec'
gem 'rubocop', require: false
gem 'sqlite3'
gem 'timecop'
end
2 changes: 2 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ GEM
tins (~> 1.0)
thor (1.0.1)
thread_safe (0.3.6)
timecop (0.9.1)
tins (1.24.1)
sync
tzinfo (1.2.7)
Expand All @@ -172,6 +173,7 @@ DEPENDENCIES
rspec
rubocop
sqlite3
timecop

BUNDLED WITH
2.1.4
1 change: 1 addition & 0 deletions gemfiles/rails_3.2.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ group :development do
gem 'rspec'
gem 'rubocop', require: false
gem 'sqlite3', '~> 1.3.6'
gem 'timecop'
end
1 change: 1 addition & 0 deletions gemfiles/rails_4.2.11.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ group :development do
gem 'rspec'
gem 'rubocop', require: false
gem 'sqlite3', '~> 1.3.6'
gem 'timecop'
end
1 change: 1 addition & 0 deletions gemfiles/rails_5.2.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ group :development do
gem 'rspec'
gem 'rubocop', require: false
gem 'sqlite3', '~> 1.3.6'
gem 'timecop'
end
1 change: 1 addition & 0 deletions gemfiles/rails_6.0.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ group :development do
gem 'rspec'
gem 'rubocop', require: false
gem 'sqlite3', '~> 1.4.0'
gem 'timecop'
end
1 change: 1 addition & 0 deletions gemfiles/rails_master.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ group :development do
gem 'rspec'
gem 'rubocop', require: false
gem 'sqlite3'
gem 'timecop'
end
8 changes: 7 additions & 1 deletion lib/acts_as_messageable/message.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Message < ::ActiveRecord::Base
cattr_accessor :required

ActsAsMessageable.rails_api.new(self).attr_accessible(
:topic, :body, :opened, :recipient_permanent_delete,
:topic, :body, :opened, :opened_at, :recipient_permanent_delete,
:recipient_delete, :sender_permanent_delete, :sender_delete
)
ActsAsMessageable.rails_api.new(self).default_scope('created_at desc')
Expand All @@ -22,14 +22,20 @@ def open?
opened?
end

def opened?
opened_at.present? || super
end

def open
update_attributes!(opened_at: DateTime.now)
update_attributes!(opened: true)
end

alias mark_as_read open
alias read open

def close
update_attributes!(opened_at: nil)
update_attributes!(opened: false)
end

Expand Down
4 changes: 2 additions & 2 deletions lib/acts_as_messageable/scopes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ def initialize_scopes
r_perm_delete: false,
s_perm_delete: false)
}
scope :readed, -> { where(opened: true) }
scope :unreaded, -> { where(opened: false) }
scope :readed, -> { where('opened_at is not null OR opened = ?', true) }
scope :unreaded, -> { where('opened_at is null OR opened = ?', false) }
scope :deleted, -> { where(recipient_delete: true, sender_delete: true) }
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,18 @@ def self.next_migration_number(dirname)

def create_migration_file
begin
migration_template('migration.rb', 'db/migrate/create_messages_table.rb')
migration_template 'migration.rb', 'db/migrate/create_messages_table.rb'
rescue StandardError
nil
end
begin
migration_template(
'migration_permanent.rb',
'db/migrate/add_recipient_permanent_delete_and_sender_permanent_delete_to_messages.rb'
)
migration_template 'migration_permanent.rb',
'db/migrate/add_recipient_permanent_delete_and_sender_permanent_delete_to_messages.rb'
rescue StandardError
nil
end
begin
migration_template 'migration_opened_as_datetime.rb', 'db/migrate/add_opened_at_to_messages.rb'
rescue StandardError
nil
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class AddOpenedAtToMessages < ActiveRecord::Migration
def self.up
add_column :<%= table_name %>, :opened_at, :datetime
<%= table_name.classify %>.where(opened:true).update_all(opened_at: DateTime.now)
end
def self.down
<%= table_name.classify %>.where.not(opened_at:nil).update_all(opened: true)
remove_column :<%= table_name %>, :opened_at
end
end
13 changes: 13 additions & 0 deletions spec/acts_as_messageable_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,15 @@
expect(@alice.messages.are_from(@bob).unreaded.count).to eq(1)
end

it 'alice should see the read_at updated' do
date_time_when_read = Time.new(2014, 9, 4, 15, 12, 34)
Timecop.freeze(date_time_when_read) do
@alice.messages.are_from(@bob).first.read
first_message = @alice.messages.are_from(@bob).first
expect(first_message.opened_at).to eql(date_time_when_read)
end
end

it 'alice should able to get datetime when he read bob message' do
@alice.messages.are_from(@bob).first.read
read_datetime = @alice.messages.are_from(@bob).first.updated_at
Expand Down Expand Up @@ -271,6 +280,10 @@
expect(@bob.sent_messages.loaded?).to be_falsey
end

it 'sent_messages should return unloaded messages' do
expect(@bob.sent_messages.loaded?).to be_falsey
end

describe 'send messages between two different models (the same id)' do
it 'should have the same id' do
expect(@alice.id).to be_equal(@admin.id)
Expand Down
2 changes: 2 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
require 'coveralls'
Coveralls.wear!

require 'timecop'

require 'bundler/setup'
Bundler.require(:default)

Expand Down
1 change: 1 addition & 0 deletions spec/support/table_schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
t.boolean :sender_delete, default: false
t.boolean :recipient_permanent_delete, default: false
t.boolean :sender_permanent_delete, default: false
t.datetime :opened_at, :datetime
t.string :ancestry
t.timestamps
end

0 comments on commit 69b119a

Please sign in to comment.