mailboxer-without-notification 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/.travis.yml +11 -0
- data/.yardopts +2 -0
- data/Appraisals +19 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +298 -0
- data/Rakefile +11 -0
- data/app/mailers/message_mailer.rb +37 -0
- data/app/models/conversation.rb +179 -0
- data/app/models/mailbox.rb +122 -0
- data/app/models/message.rb +218 -0
- data/app/models/receipt.rb +176 -0
- data/app/uploaders/attachment_uploader.rb +3 -0
- data/app/views/message_mailer/new_message_email.html.erb +20 -0
- data/app/views/message_mailer/new_message_email.text.erb +10 -0
- data/app/views/message_mailer/reply_message_email.html.erb +20 -0
- data/app/views/message_mailer/reply_message_email.text.erb +10 -0
- data/config/locales/en.yml +7 -0
- data/config/locales/fr.yml +7 -0
- data/db/migrate/20110511145103_create_mailboxer.rb +61 -0
- data/db/migrate/20110719110700_add_notified_object.rb +17 -0
- data/db/migrate/20110912163911_add_notification_code.rb +13 -0
- data/db/migrate/20111204163911_add_attachments.rb +9 -0
- data/db/migrate/20120813110712_rename_receipts_read.rb +9 -0
- data/db/migrate/20130305144212_add_global_notification_support.rb +9 -0
- data/db/migrate/20131003144212_change_table_notification.rb +10 -0
- data/db/migrate/20131003214212_change_relations.rb +6 -0
- data/gemfiles/rails3.0.gemfile +8 -0
- data/gemfiles/rails3.1.gemfile +8 -0
- data/gemfiles/rails3.2.gemfile +8 -0
- data/gemfiles/rails4.0.gemfile +8 -0
- data/lib/generators/mailboxer/install_generator.rb +35 -0
- data/lib/generators/mailboxer/templates/initializer.rb +17 -0
- data/lib/generators/mailboxer/views_generator.rb +9 -0
- data/lib/mailboxer.rb +37 -0
- data/lib/mailboxer/concerns/configurable_mailer.rb +13 -0
- data/lib/mailboxer/engine.rb +17 -0
- data/lib/mailboxer/models/messageable.rb +225 -0
- data/mailboxer.gemspec +49 -0
- data/spec/dummy/.gitignore +5 -0
- data/spec/dummy/Gemfile +33 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/home_controller.rb +4 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/models/cylon.rb +7 -0
- data/spec/dummy/app/models/duck.rb +11 -0
- data/spec/dummy/app/models/user.rb +6 -0
- data/spec/dummy/app/views/home/index.html.haml +7 -0
- data/spec/dummy/app/views/layouts/application.html.haml +11 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +42 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +24 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +26 -0
- data/spec/dummy/config/environments/production.rb +49 -0
- data/spec/dummy/config/environments/test.rb +33 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mailboxer.rb +17 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +58 -0
- data/spec/dummy/config/sunspot.yml +17 -0
- data/spec/dummy/db/migrate/20110228120600_create_users.rb +14 -0
- data/spec/dummy/db/migrate/20110306002940_create_ducks.rb +14 -0
- data/spec/dummy/db/migrate/20110306015107_create_cylons.rb +14 -0
- data/spec/dummy/db/migrate/20120305103200_create_mailboxer.rb +61 -0
- data/spec/dummy/db/migrate/20120305103201_add_notified_object.rb +17 -0
- data/spec/dummy/db/migrate/20120305103202_add_notification_code.rb +13 -0
- data/spec/dummy/db/migrate/20120305103203_add_attachments.rb +5 -0
- data/spec/dummy/db/migrate/20120813110712_rename_receipts_read.rb +9 -0
- data/spec/dummy/db/migrate/20130305144212_add_global_notification_support.rb +11 -0
- data/spec/dummy/db/migrate/20131003144212_change_table_notification.rb +10 -0
- data/spec/dummy/db/migrate/20131003214212_change_relations.rb +6 -0
- data/spec/dummy/db/schema.rb +74 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/index.html +239 -0
- data/spec/dummy/public/robots.txt +5 -0
- data/spec/dummy/public/uploads/testfile.txt +1 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/factories/cylon.rb +10 -0
- data/spec/factories/duck.rb +10 -0
- data/spec/factories/user.rb +10 -0
- data/spec/integration/message_and_receipt_spec.rb +903 -0
- data/spec/integration/navigation_spec.rb +9 -0
- data/spec/mailboxer/concerns/configurable_mailer_spec.rb +27 -0
- data/spec/mailboxer_spec.rb +7 -0
- data/spec/mailers/message_mailer_spec.rb +109 -0
- data/spec/models/conversation_spec.rb +154 -0
- data/spec/models/mailbox_spec.rb +160 -0
- data/spec/models/mailboxer_models_messageable_spec.rb +324 -0
- data/spec/models/message_spec.rb +222 -0
- data/spec/models/receipt_spec.rb +56 -0
- data/spec/spec_helper.rb +36 -0
- data/spec/testfile.txt +1 -0
- metadata +301 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<h1>You have a new message: <%= @message.subject.html_safe? ? @message.subject : strip_tags(@message.subject) %></h1>
|
|
8
|
+
<p>
|
|
9
|
+
You have received a new message:
|
|
10
|
+
</p>
|
|
11
|
+
<blockquote>
|
|
12
|
+
<p>
|
|
13
|
+
<%= raw @message.body %>
|
|
14
|
+
</p>
|
|
15
|
+
</blockquote>
|
|
16
|
+
<p>
|
|
17
|
+
Visit <%= link_to root_url,root_url %> and go to your inbox for more info.
|
|
18
|
+
</p>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
You have a new message: <%= @message.subject.html_safe? ? @message.subject : strip_tags(@message.subject) %>
|
|
2
|
+
===============================================
|
|
3
|
+
|
|
4
|
+
You have received a new message:
|
|
5
|
+
|
|
6
|
+
-----------------------------------------------
|
|
7
|
+
<%= @message.body.html_safe? ? @message.body : strip_tags(@message.body) %>
|
|
8
|
+
-----------------------------------------------
|
|
9
|
+
|
|
10
|
+
Visit <%= root_url %> and go to your inbox for more info.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<h1>You have a new reply: <%= @message.subject.html_safe? ? @message.subject : strip_tags(@message.subject) %></h1>
|
|
8
|
+
<p>
|
|
9
|
+
You have received a new reply:
|
|
10
|
+
</p>
|
|
11
|
+
<blockquote>
|
|
12
|
+
<p>
|
|
13
|
+
<%= raw @message.body %>
|
|
14
|
+
</p>
|
|
15
|
+
</blockquote>
|
|
16
|
+
<p>
|
|
17
|
+
Visit <%= link_to root_url,root_url %> and go to your inbox for more info.
|
|
18
|
+
</p>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
You have a new reply: <%= @message.subject.html_safe? ? @message.subject : strip_tags(@message.subject) %>
|
|
2
|
+
===============================================
|
|
3
|
+
|
|
4
|
+
You have received a new reply:
|
|
5
|
+
|
|
6
|
+
-----------------------------------------------
|
|
7
|
+
<%= @message.body.html_safe? ? @message.body : strip_tags(@message.body) %>
|
|
8
|
+
-----------------------------------------------
|
|
9
|
+
|
|
10
|
+
Visit <%= root_url %> and go to your inbox for more info.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
class CreateMailboxer < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
#Tables
|
|
4
|
+
#Conversations
|
|
5
|
+
create_table :conversations do |t|
|
|
6
|
+
t.column :subject, :string, :default => ""
|
|
7
|
+
t.column :created_at, :datetime, :null => false
|
|
8
|
+
t.column :updated_at, :datetime, :null => false
|
|
9
|
+
end
|
|
10
|
+
#Receipts
|
|
11
|
+
create_table :receipts do |t|
|
|
12
|
+
t.references :receiver, :polymorphic => true
|
|
13
|
+
t.column :notification_id, :integer, :null => false
|
|
14
|
+
t.column :read, :boolean, :default => false
|
|
15
|
+
t.column :trashed, :boolean, :default => false
|
|
16
|
+
t.column :deleted, :boolean, :default => false
|
|
17
|
+
t.column :mailbox_type, :string, :limit => 25
|
|
18
|
+
t.column :created_at, :datetime, :null => false
|
|
19
|
+
t.column :updated_at, :datetime, :null => false
|
|
20
|
+
end
|
|
21
|
+
#Notifications and Messages
|
|
22
|
+
create_table :notifications do |t|
|
|
23
|
+
t.column :type, :string
|
|
24
|
+
t.column :body, :text
|
|
25
|
+
t.column :subject, :string, :default => ""
|
|
26
|
+
t.references :sender, :polymorphic => true
|
|
27
|
+
t.references :object, :polymorphic => true
|
|
28
|
+
t.column :conversation_id, :integer
|
|
29
|
+
t.column :draft, :boolean, :default => false
|
|
30
|
+
t.column :updated_at, :datetime, :null => false
|
|
31
|
+
t.column :created_at, :datetime, :null => false
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
#Indexes
|
|
36
|
+
#Conversations
|
|
37
|
+
#Receipts
|
|
38
|
+
add_index "receipts","notification_id"
|
|
39
|
+
|
|
40
|
+
#Messages
|
|
41
|
+
add_index "notifications","conversation_id"
|
|
42
|
+
|
|
43
|
+
#Foreign keys
|
|
44
|
+
#Conversations
|
|
45
|
+
#Receipts
|
|
46
|
+
add_foreign_key "receipts", "notifications", :name => "receipts_on_notification_id"
|
|
47
|
+
#Messages
|
|
48
|
+
add_foreign_key "notifications", "conversations", :name => "notifications_on_conversation_id"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.down
|
|
52
|
+
#Tables
|
|
53
|
+
remove_foreign_key "receipts", :name => "receipts_on_notification_id"
|
|
54
|
+
remove_foreign_key "notifications", :name => "notifications_on_conversation_id"
|
|
55
|
+
|
|
56
|
+
#Indexes
|
|
57
|
+
drop_table :receipts
|
|
58
|
+
drop_table :conversations
|
|
59
|
+
drop_table :notifications
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class AddNotifiedObject < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
change_table :notifications do |t|
|
|
4
|
+
t.references :notified_object, :polymorphic => true
|
|
5
|
+
t.remove :object_id
|
|
6
|
+
t.remove :object_type
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.down
|
|
11
|
+
change_table :notifications do |t|
|
|
12
|
+
t.remove :notified_object_id
|
|
13
|
+
t.remove :notified_object_type
|
|
14
|
+
t.references :object, :polymorphic => true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class AddNotificationCode < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
change_table :notifications do |t|
|
|
4
|
+
t.string :notification_code, :default => nil
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.down
|
|
9
|
+
change_table :notifications do |t|
|
|
10
|
+
t.remove :notification_code
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
class ChangeTableNotification < ActiveRecord::Migration
|
|
2
|
+
|
|
3
|
+
def change
|
|
4
|
+
rename_table :notifications, :messages
|
|
5
|
+
remove_column :messages, :type
|
|
6
|
+
remove_column :messages, :notified_object_id
|
|
7
|
+
remove_column :messages, :notified_object_type
|
|
8
|
+
remove_column :messages, :notification_code
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class Mailboxer::InstallGenerator < Rails::Generators::Base #:nodoc:
|
|
2
|
+
include Rails::Generators::Migration
|
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
4
|
+
require 'rails/generators/migration'
|
|
5
|
+
|
|
6
|
+
def self.next_migration_number path
|
|
7
|
+
unless @prev_migration_nr
|
|
8
|
+
@prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
|
|
9
|
+
else
|
|
10
|
+
@prev_migration_nr += 1
|
|
11
|
+
end
|
|
12
|
+
@prev_migration_nr.to_s
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def create_initializer_file
|
|
16
|
+
template 'initializer.rb', 'config/initializers/mailboxer.rb'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def copy_migrations
|
|
20
|
+
if Rails.version < "3.1"
|
|
21
|
+
migrations = [["20110511145103_create_mailboxer.rb","create_mailboxer.rb"],
|
|
22
|
+
["20110719110700_add_notified_object.rb","add_notified_object.rb"],
|
|
23
|
+
["20110912163911_add_notification_code.rb","add_notification_code.rb"],
|
|
24
|
+
["20111204163911_add_attachments.rb","add_attachments.rb"]]
|
|
25
|
+
migrations.each do |migration|
|
|
26
|
+
migration_template "../../../../db/migrate/" + migration[0], "db/migrate/" + migration[1]
|
|
27
|
+
end
|
|
28
|
+
else
|
|
29
|
+
require 'rake'
|
|
30
|
+
Rails.application.load_tasks
|
|
31
|
+
Rake::Task['railties:install:migrations'].reenable
|
|
32
|
+
Rake::Task['mailboxer_engine:install:migrations'].invoke
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Mailboxer.setup do |config|
|
|
2
|
+
|
|
3
|
+
#Configures if you applications uses or no the email sending for Notifications and Messages
|
|
4
|
+
config.uses_emails = true
|
|
5
|
+
|
|
6
|
+
#Configures the default from for the email sent for Messages and Notifications of Mailboxer
|
|
7
|
+
config.default_from = "no-reply@mailboxer.com"
|
|
8
|
+
|
|
9
|
+
#Configures the methods needed by mailboxer
|
|
10
|
+
config.email_method = :mailboxer_email
|
|
11
|
+
config.name_method = :name
|
|
12
|
+
|
|
13
|
+
#Configures if you use or not a search engine and wich one are you using
|
|
14
|
+
#Supported enignes: [:solr,:sphinx]
|
|
15
|
+
config.search_enabled = false
|
|
16
|
+
config.search_engine = :solr
|
|
17
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
class Mailboxer::ViewsGenerator < Rails::Generators::Base
|
|
2
|
+
source_root File.expand_path("../../../../app/views", __FILE__)
|
|
3
|
+
|
|
4
|
+
desc "Copy Mailboxer views into your app"
|
|
5
|
+
def copy_views
|
|
6
|
+
directory('message_mailer', 'app/views/message_mailer')
|
|
7
|
+
#directory('notification_mailer', 'app/views/notification_mailer')
|
|
8
|
+
end
|
|
9
|
+
end
|
data/lib/mailboxer.rb
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Mailboxer
|
|
2
|
+
module Models
|
|
3
|
+
autoload :Messageable, 'mailboxer/models/messageable'
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
mattr_accessor :default_from
|
|
7
|
+
@@default_from = "no-reply@mailboxer.com"
|
|
8
|
+
mattr_accessor :uses_emails
|
|
9
|
+
@@uses_emails = true
|
|
10
|
+
mattr_accessor :mailer_wants_array
|
|
11
|
+
@@mailer_wants_array = false
|
|
12
|
+
mattr_accessor :search_enabled
|
|
13
|
+
@@search_enabled = false
|
|
14
|
+
mattr_accessor :search_engine
|
|
15
|
+
@@search_engine = :solr
|
|
16
|
+
mattr_accessor :email_method
|
|
17
|
+
@@email_method = :mailboxer_email
|
|
18
|
+
mattr_accessor :name_method
|
|
19
|
+
@@name_method = :name
|
|
20
|
+
#mattr_accessor :notification_mailer
|
|
21
|
+
mattr_accessor :message_mailer
|
|
22
|
+
|
|
23
|
+
class << self
|
|
24
|
+
def setup
|
|
25
|
+
yield self
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def protected_attributes?
|
|
29
|
+
Rails.version < '4' || defined?(ProtectedAttributes)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
# reopen ActiveRecord and include all the above to make
|
|
35
|
+
# them available to all our models if they want it
|
|
36
|
+
require 'mailboxer/engine'
|
|
37
|
+
require 'mailboxer/concerns/configurable_mailer'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'active_support/inflections'
|
|
2
|
+
|
|
3
|
+
module Concerns
|
|
4
|
+
module ConfigurableMailer
|
|
5
|
+
|
|
6
|
+
def get_mailer
|
|
7
|
+
return @mailer if @mailer
|
|
8
|
+
method = "#{self.class.to_s.downcase}_mailer".to_sym
|
|
9
|
+
@mailer = Mailboxer.send(method) || "#{self.class}Mailer".constantize
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Database foreign keys
|
|
2
|
+
require 'foreigner'
|
|
3
|
+
require 'carrierwave'
|
|
4
|
+
begin
|
|
5
|
+
require 'sunspot_rails'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module Mailboxer
|
|
10
|
+
class Engine < Rails::Engine
|
|
11
|
+
initializer "mailboxer.models.messageable" do
|
|
12
|
+
ActiveSupport.on_load(:active_record) do
|
|
13
|
+
extend Mailboxer::Models::Messageable::ActiveRecord
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
module Mailboxer
|
|
2
|
+
module Models
|
|
3
|
+
module Messageable
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
module ActiveRecord
|
|
7
|
+
#Converts the model into messageable allowing it to interchange messages and
|
|
8
|
+
#receive notifications
|
|
9
|
+
def acts_as_messageable
|
|
10
|
+
include Messageable
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
included do
|
|
15
|
+
has_many :messages, :as => :sender
|
|
16
|
+
if Rails::VERSION::MAJOR == 4
|
|
17
|
+
has_many :receipts, -> { order 'created_at DESC' }, dependent: :destroy, as: :receiver
|
|
18
|
+
else
|
|
19
|
+
# Rails 3 does it this way
|
|
20
|
+
has_many :receipts, :order => 'created_at DESC', :dependent => :destroy, :as => :receiver
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
unless defined?(Mailboxer.name_method)
|
|
25
|
+
# Returning any kind of identification you want for the model
|
|
26
|
+
define_method Mailboxer.name_method do
|
|
27
|
+
begin
|
|
28
|
+
super
|
|
29
|
+
rescue NameError
|
|
30
|
+
return "You should add method :#{Mailboxer.name_method} in your Messageable model"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
unless defined?(Mailboxer.email_method)
|
|
36
|
+
#Returning the email address of the model if an email should be sent for this object (Message or Notification).
|
|
37
|
+
#If no mail has to be sent, return nil.
|
|
38
|
+
define_method Mailboxer.email_method do |object|
|
|
39
|
+
begin
|
|
40
|
+
super
|
|
41
|
+
rescue NameError
|
|
42
|
+
return "You should add method :#{Mailboxer.email_method} in your Messageable model"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#Gets the mailbox of the messageable
|
|
48
|
+
def mailbox
|
|
49
|
+
@mailbox = Mailbox.new(self) if @mailbox.nil?
|
|
50
|
+
@mailbox.type = :all
|
|
51
|
+
@mailbox
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
#Sends a notification to the messageable
|
|
55
|
+
#def notify(subject,body,obj = nil,sanitize_text=true,notification_code=nil,send_mail=true)
|
|
56
|
+
# Message.notify_all([self],subject,body,obj,sanitize_text,notification_code,send_mail)
|
|
57
|
+
#end
|
|
58
|
+
|
|
59
|
+
#Sends a messages, starting a new conversation, with the messageable
|
|
60
|
+
#as originator
|
|
61
|
+
def send_message(recipients, msg_body, subject=nil, sanitize_text=true, attachment=nil, message_timestamp = Time.now)
|
|
62
|
+
convo = Conversation.new({:subject => subject})
|
|
63
|
+
convo.created_at = message_timestamp
|
|
64
|
+
convo.updated_at = message_timestamp
|
|
65
|
+
message = messages.new({:body => msg_body, :subject => subject, :attachment => attachment})
|
|
66
|
+
message.created_at = message_timestamp
|
|
67
|
+
message.updated_at = message_timestamp
|
|
68
|
+
message.conversation = convo
|
|
69
|
+
message.recipients = recipients.is_a?(Array) ? recipients : [recipients]
|
|
70
|
+
message.recipients = message.recipients.uniq
|
|
71
|
+
message.deliver false, sanitize_text
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
#Basic reply method. USE NOT RECOMENDED.
|
|
75
|
+
#Use reply_to_sender, reply_to_all and reply_to_conversation instead.
|
|
76
|
+
def reply(conversation, recipients, reply_body, subject=nil, sanitize_text=true, attachment=nil)
|
|
77
|
+
subject = subject || "RE: #{conversation.subject}"
|
|
78
|
+
response = messages.new({:body => reply_body, :subject => subject, :attachment => attachment})
|
|
79
|
+
response.conversation = conversation
|
|
80
|
+
response.recipients = recipients.is_a?(Array) ? recipients : [recipients]
|
|
81
|
+
response.recipients = response.recipients.uniq
|
|
82
|
+
response.recipients.delete(self)
|
|
83
|
+
response.deliver true, sanitize_text
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#Replies to the sender of the message in the conversation
|
|
87
|
+
def reply_to_sender(receipt, reply_body, subject=nil, sanitize_text=true, attachment=nil)
|
|
88
|
+
reply(receipt.conversation, receipt.message.sender, reply_body, subject, sanitize_text, attachment)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
#Replies to all the recipients of the message in the conversation
|
|
92
|
+
def reply_to_all(receipt, reply_body, subject=nil, sanitize_text=true, attachment=nil)
|
|
93
|
+
reply(receipt.conversation, receipt.message.recipients, reply_body, subject, sanitize_text, attachment)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
#Replies to all the recipients of the last message in the conversation and untrash any trashed message by messageable
|
|
97
|
+
#if should_untrash is set to true (this is so by default)
|
|
98
|
+
def reply_to_conversation(conversation, reply_body, subject=nil, should_untrash=true, sanitize_text=true, attachment=nil)
|
|
99
|
+
#move conversation to inbox if it is currently in the trash and should_untrash parameter is true.
|
|
100
|
+
if should_untrash && mailbox.is_trashed?(conversation)
|
|
101
|
+
mailbox.receipts_for(conversation).untrash
|
|
102
|
+
mailbox.receipts_for(conversation).mark_as_not_deleted
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
reply(conversation, conversation.last_message.recipients, reply_body, subject, sanitize_text, attachment)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
#Mark the object as read for messageable.
|
|
109
|
+
#
|
|
110
|
+
#Object can be:
|
|
111
|
+
#* A Receipt
|
|
112
|
+
#* A Message
|
|
113
|
+
#* A Notification
|
|
114
|
+
#* A Conversation
|
|
115
|
+
#* An array with any of them
|
|
116
|
+
def mark_as_read(obj)
|
|
117
|
+
case obj
|
|
118
|
+
when Receipt
|
|
119
|
+
obj.mark_as_read if obj.receiver == self
|
|
120
|
+
when Message#, Notification
|
|
121
|
+
obj.mark_as_read(self)
|
|
122
|
+
when Conversation
|
|
123
|
+
obj.mark_as_read(self)
|
|
124
|
+
when Array
|
|
125
|
+
obj.map{ |sub_obj| mark_as_read(sub_obj) }
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
#Mark the object as unread for messageable.
|
|
130
|
+
#
|
|
131
|
+
#Object can be:
|
|
132
|
+
#* A Receipt
|
|
133
|
+
#* A Message
|
|
134
|
+
#* A Notification
|
|
135
|
+
#* A Conversation
|
|
136
|
+
#* An array with any of them
|
|
137
|
+
def mark_as_unread(obj)
|
|
138
|
+
case obj
|
|
139
|
+
when Receipt
|
|
140
|
+
obj.mark_as_unread if obj.receiver == self
|
|
141
|
+
when Message#, Notification
|
|
142
|
+
obj.mark_as_unread(self)
|
|
143
|
+
when Conversation
|
|
144
|
+
obj.mark_as_unread(self)
|
|
145
|
+
when Array
|
|
146
|
+
obj.map{ |sub_obj| mark_as_unread(sub_obj) }
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
#Mark the object as deleted for messageable.
|
|
151
|
+
#
|
|
152
|
+
#Object can be:
|
|
153
|
+
#* A Receipt
|
|
154
|
+
#* A Notification
|
|
155
|
+
#* A Message
|
|
156
|
+
#* A Conversation
|
|
157
|
+
#* An array with any of them
|
|
158
|
+
def mark_as_deleted(obj)
|
|
159
|
+
case obj
|
|
160
|
+
when Receipt
|
|
161
|
+
return obj.mark_as_deleted if obj.receiver == self
|
|
162
|
+
when Message#, Notification
|
|
163
|
+
obj.mark_as_deleted(self)
|
|
164
|
+
when Conversation
|
|
165
|
+
obj.mark_as_deleted(self)
|
|
166
|
+
when Array
|
|
167
|
+
obj.map{ |sub_obj| mark_as_deleted(sub_obj) }
|
|
168
|
+
else
|
|
169
|
+
return nil
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
#Mark the object as trashed for messageable.
|
|
174
|
+
#
|
|
175
|
+
#Object can be:
|
|
176
|
+
#* A Receipt
|
|
177
|
+
#* A Message
|
|
178
|
+
#* A Notification
|
|
179
|
+
#* A Conversation
|
|
180
|
+
#* An array with any of them
|
|
181
|
+
def trash(obj)
|
|
182
|
+
case obj
|
|
183
|
+
when Receipt
|
|
184
|
+
obj.move_to_trash if obj.receiver == self
|
|
185
|
+
when Message#, Notification
|
|
186
|
+
obj.move_to_trash(self)
|
|
187
|
+
when Conversation
|
|
188
|
+
obj.move_to_trash(self)
|
|
189
|
+
when Array
|
|
190
|
+
obj.map{ |sub_obj| trash(sub_obj) }
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
#Mark the object as not trashed for messageable.
|
|
195
|
+
#
|
|
196
|
+
#Object can be:
|
|
197
|
+
#* A Receipt
|
|
198
|
+
#* A Message
|
|
199
|
+
#* A Notification
|
|
200
|
+
#* A Conversation
|
|
201
|
+
#* An array with any of them
|
|
202
|
+
def untrash(obj)
|
|
203
|
+
case obj
|
|
204
|
+
when Receipt
|
|
205
|
+
obj.untrash if obj.receiver == self
|
|
206
|
+
when Message#, Notification
|
|
207
|
+
obj.untrash(self)
|
|
208
|
+
when Conversation
|
|
209
|
+
obj.untrash(self)
|
|
210
|
+
when Array
|
|
211
|
+
obj.map{ |sub_obj| untrash(sub_obj) }
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def search_messages(query)
|
|
216
|
+
@search = Receipt.search do
|
|
217
|
+
fulltext query
|
|
218
|
+
with :receiver_id, self.id
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
@search.results.map { |r| r.conversation }.uniq
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|