mailboxer 0.12.0.rc1 → 0.12.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -0
- data/app/builders/mailboxer/base_builder.rb +26 -0
- data/app/builders/mailboxer/conversation_builder.rb +8 -0
- data/app/builders/mailboxer/message_builder.rb +16 -0
- data/app/builders/mailboxer/notification_builder.rb +8 -0
- data/app/builders/mailboxer/receipt_builder.rb +13 -0
- data/app/models/mailboxer/conversation.rb +12 -15
- data/app/models/mailboxer/mailbox.rb +31 -28
- data/app/models/mailboxer/message.rb +1 -2
- data/app/models/mailboxer/notification.rb +33 -44
- data/app/models/mailboxer/receipt.rb +7 -10
- data/app/uploaders/mailboxer/attachment_uploader.rb +3 -0
- data/lib/mailboxer/models/messageable.rb +28 -17
- data/lib/mailboxer/version.rb +1 -1
- data/spec/dummy/Gemfile +0 -22
- data/spec/integration/message_and_receipt_spec.rb +13 -13
- data/spec/models/notification_spec.rb +1 -1
- metadata +8 -3
- data/app/uploaders/attachment_uploader.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38f9237485be3b51d9455f038fa12dcd5a8d0ed6
|
4
|
+
data.tar.gz: 001a61d76bf5735eb93070b6f0e9b02c7c33a507
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33d87aed32e8303d19ba5cf31164d6517f48c7b360a2fbcbe691ef6ddad138f48258b6185e559492c7b0366f3c0aba3b52bfaeae98a4f687fb8b404db7ccfb9b
|
7
|
+
data.tar.gz: 4d8e2e8e858855700a61a160874bd87ac66d9cc0c4575c1bbbe10aa137a402ba69e460047f65329a29544df84f6cc404993df5c5afa8fa56c86e13729271645a
|
data/README.md
CHANGED
@@ -56,6 +56,21 @@ And don't forget to migrate your database:
|
|
56
56
|
$ rake db:migrate
|
57
57
|
```
|
58
58
|
|
59
|
+
Upgrading
|
60
|
+
---------
|
61
|
+
|
62
|
+
If upgrading from 0.11.0 to 0.12.0, run the following generator:
|
63
|
+
|
64
|
+
```sh
|
65
|
+
$ rails generate mailboxer:namespacing_compatibility
|
66
|
+
```
|
67
|
+
|
68
|
+
Then, migrate your database:
|
69
|
+
|
70
|
+
```sh
|
71
|
+
$ rake db:migrate
|
72
|
+
```
|
73
|
+
|
59
74
|
## Requirements & Settings
|
60
75
|
|
61
76
|
### Emails
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Mailboxer::BaseBuilder
|
2
|
+
|
3
|
+
attr_reader :params
|
4
|
+
|
5
|
+
def initialize(params)
|
6
|
+
@params = params.with_indifferent_access
|
7
|
+
end
|
8
|
+
|
9
|
+
def build
|
10
|
+
klass.new.tap do |object|
|
11
|
+
params.keys.each do |field|
|
12
|
+
object.send("#{field}=", get(field)) unless get(field).nil?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def get(key)
|
20
|
+
respond_to?(key) ? send(key) : params[key]
|
21
|
+
end
|
22
|
+
|
23
|
+
def recipients
|
24
|
+
Array(params[:recipients]).uniq
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Mailboxer::MessageBuilder < Mailboxer::BaseBuilder
|
2
|
+
|
3
|
+
protected
|
4
|
+
|
5
|
+
def klass
|
6
|
+
Mailboxer::Message
|
7
|
+
end
|
8
|
+
|
9
|
+
def subject
|
10
|
+
params[:subject] || default_subject
|
11
|
+
end
|
12
|
+
|
13
|
+
def default_subject
|
14
|
+
"#{params[:conversation].subject}"
|
15
|
+
end
|
16
|
+
end
|
@@ -81,22 +81,22 @@ class Mailboxer::Conversation < ActiveRecord::Base
|
|
81
81
|
|
82
82
|
#Originator of the conversation.
|
83
83
|
def originator
|
84
|
-
@originator ||=
|
84
|
+
@originator ||= original_message.sender
|
85
85
|
end
|
86
86
|
|
87
87
|
#First message of the conversation.
|
88
88
|
def original_message
|
89
|
-
@original_message ||=
|
89
|
+
@original_message ||= messages.order('created_at').first
|
90
90
|
end
|
91
91
|
|
92
92
|
#Sender of the last message.
|
93
93
|
def last_sender
|
94
|
-
@last_sender ||=
|
94
|
+
@last_sender ||= last_message.sender
|
95
95
|
end
|
96
96
|
|
97
97
|
#Last message in the conversation.
|
98
98
|
def last_message
|
99
|
-
@last_message ||=
|
99
|
+
@last_message ||= messages.order('created_at DESC').first
|
100
100
|
end
|
101
101
|
|
102
102
|
#Returns the receipts of the conversation for one participants
|
@@ -117,29 +117,26 @@ class Mailboxer::Conversation < ActiveRecord::Base
|
|
117
117
|
|
118
118
|
#Adds a new participant to the conversation
|
119
119
|
def add_participant(participant)
|
120
|
-
messages = self.messages
|
121
120
|
messages.each do |message|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
receipt.created_at = message.created_at
|
129
|
-
receipt.save
|
121
|
+
Mailboxer::ReceiptBuilder.new({
|
122
|
+
:notification => message,
|
123
|
+
:receiver => participant,
|
124
|
+
:updated_at => message.updated_at,
|
125
|
+
:created_at => message.created_at
|
126
|
+
}).build.save
|
130
127
|
end
|
131
128
|
end
|
132
129
|
|
133
130
|
#Returns true if the participant has at least one trashed message of the conversation
|
134
131
|
def is_trashed?(participant)
|
135
132
|
return false unless participant
|
136
|
-
|
133
|
+
receipts_for(participant).trash.count != 0
|
137
134
|
end
|
138
135
|
|
139
136
|
#Returns true if the participant has deleted the conversation
|
140
137
|
def is_deleted?(participant)
|
141
138
|
return false unless participant
|
142
|
-
return
|
139
|
+
return receipts_for(participant).deleted.count == receipts_for(participant).count
|
143
140
|
end
|
144
141
|
|
145
142
|
#Returns true if both participants have deleted the conversation
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class Mailboxer::Mailbox
|
2
|
-
attr_accessor :type
|
3
2
|
attr_reader :messageable
|
4
3
|
|
5
4
|
#Initializer method
|
@@ -10,8 +9,8 @@ class Mailboxer::Mailbox
|
|
10
9
|
#Returns the notifications for the messageable
|
11
10
|
def notifications(options = {})
|
12
11
|
#:type => nil is a hack not to give Messages as Notifications
|
13
|
-
notifs = Mailboxer::Notification.recipient(
|
14
|
-
if
|
12
|
+
notifs = Mailboxer::Notification.recipient(messageable).where(:type => nil).order("mailboxer_notifications.created_at DESC")
|
13
|
+
if options[:read] == false || options[:unread]
|
15
14
|
notifs = notifs.unread
|
16
15
|
end
|
17
16
|
|
@@ -31,23 +30,10 @@ class Mailboxer::Mailbox
|
|
31
30
|
#* :unread=true
|
32
31
|
#
|
33
32
|
def conversations(options = {})
|
34
|
-
conv =
|
35
|
-
|
36
|
-
if options[:mailbox_type].present?
|
37
|
-
case options[:mailbox_type]
|
38
|
-
when 'inbox'
|
39
|
-
conv = Mailboxer::Conversation.inbox(@messageable)
|
40
|
-
when 'sentbox'
|
41
|
-
conv = Mailboxer::Conversation.sentbox(@messageable)
|
42
|
-
when 'trash'
|
43
|
-
conv = Mailboxer::Conversation.trash(@messageable)
|
44
|
-
when 'not_trash'
|
45
|
-
conv = Mailboxer::Conversation.not_trash(@messageable)
|
46
|
-
end
|
47
|
-
end
|
33
|
+
conv = get_conversations(options[:mailbox_type])
|
48
34
|
|
49
|
-
if
|
50
|
-
conv = conv.unread(
|
35
|
+
if options[:read] == false || options[:unread]
|
36
|
+
conv = conv.unread(messageable)
|
51
37
|
end
|
52
38
|
|
53
39
|
conv
|
@@ -58,7 +44,7 @@ class Mailboxer::Mailbox
|
|
58
44
|
#Same as conversations({:mailbox_type => 'inbox'})
|
59
45
|
def inbox(options={})
|
60
46
|
options = options.merge(:mailbox_type => 'inbox')
|
61
|
-
|
47
|
+
conversations(options)
|
62
48
|
end
|
63
49
|
|
64
50
|
#Returns the conversations in the sentbox of messageable
|
@@ -66,7 +52,7 @@ class Mailboxer::Mailbox
|
|
66
52
|
#Same as conversations({:mailbox_type => 'sentbox'})
|
67
53
|
def sentbox(options={})
|
68
54
|
options = options.merge(:mailbox_type => 'sentbox')
|
69
|
-
|
55
|
+
conversations(options)
|
70
56
|
end
|
71
57
|
|
72
58
|
#Returns the conversations in the trash of messageable
|
@@ -74,12 +60,12 @@ class Mailboxer::Mailbox
|
|
74
60
|
#Same as conversations({:mailbox_type => 'trash'})
|
75
61
|
def trash(options={})
|
76
62
|
options = options.merge(:mailbox_type => 'trash')
|
77
|
-
|
63
|
+
conversations(options)
|
78
64
|
end
|
79
65
|
|
80
66
|
#Returns all the receipts of messageable, from Messages and Notifications
|
81
67
|
def receipts(options = {})
|
82
|
-
Mailboxer::Receipt.where(options).recipient(
|
68
|
+
Mailboxer::Receipt.where(options).recipient(messageable)
|
83
69
|
end
|
84
70
|
|
85
71
|
#Deletes all the messages in the trash of messageable. NOT IMPLEMENTED.
|
@@ -90,17 +76,17 @@ class Mailboxer::Mailbox
|
|
90
76
|
|
91
77
|
#Returns if messageable is a participant of conversation
|
92
78
|
def has_conversation?(conversation)
|
93
|
-
conversation.is_participant?(
|
79
|
+
conversation.is_participant?(messageable)
|
94
80
|
end
|
95
81
|
|
96
82
|
#Returns true if messageable has at least one trashed message of the conversation
|
97
83
|
def is_trashed?(conversation)
|
98
|
-
conversation.is_trashed?(
|
84
|
+
conversation.is_trashed?(messageable)
|
99
85
|
end
|
100
86
|
|
101
87
|
#Returns true if messageable has trashed all the messages of the conversation
|
102
88
|
def is_completely_trashed?(conversation)
|
103
|
-
conversation.is_completely_trashed?(
|
89
|
+
conversation.is_completely_trashed?(messageable)
|
104
90
|
end
|
105
91
|
|
106
92
|
#Returns the receipts of object for messageable as a ActiveRecord::Relation
|
@@ -114,9 +100,26 @@ class Mailboxer::Mailbox
|
|
114
100
|
def receipts_for(object)
|
115
101
|
case object
|
116
102
|
when Mailboxer::Message, Mailboxer::Notification
|
117
|
-
object.receipt_for(
|
103
|
+
object.receipt_for(messageable)
|
118
104
|
when Mailboxer::Conversation
|
119
|
-
object.receipts_for(
|
105
|
+
object.receipts_for(messageable)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def get_conversations(mailbox)
|
112
|
+
case mailbox
|
113
|
+
when 'inbox'
|
114
|
+
Mailboxer::Conversation.inbox(messageable)
|
115
|
+
when 'sentbox'
|
116
|
+
Mailboxer::Conversation.sentbox(messageable)
|
117
|
+
when 'trash'
|
118
|
+
Mailboxer::Conversation.trash(messageable)
|
119
|
+
when 'not_trash'
|
120
|
+
Mailboxer::Conversation.not_trash(messageable)
|
121
|
+
else
|
122
|
+
Mailboxer::Conversation.participant(messageable)
|
120
123
|
end
|
121
124
|
end
|
122
125
|
end
|
@@ -33,8 +33,7 @@ class Mailboxer::Message < Mailboxer::Notification
|
|
33
33
|
|
34
34
|
temp_receipts << sender_receipt
|
35
35
|
|
36
|
-
if temp_receipts.all?(&:
|
37
|
-
temp_receipts.each(&:save!) #Save receipts
|
36
|
+
if temp_receipts.all?(&:save!)
|
38
37
|
|
39
38
|
Mailboxer::MailDispatcher.new(self, recipients).call
|
40
39
|
|
@@ -33,11 +33,15 @@ class Mailboxer::Notification < ActiveRecord::Base
|
|
33
33
|
|
34
34
|
class << self
|
35
35
|
#Sends a Notification to all the recipients
|
36
|
-
def notify_all(recipients,subject,body,obj = nil,sanitize_text = true,notification_code=nil,send_mail=true)
|
37
|
-
notification = Mailboxer::
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
def notify_all(recipients, subject, body, obj = nil, sanitize_text = true, notification_code=nil, send_mail=true)
|
37
|
+
notification = Mailboxer::NotificationBuilder.new({
|
38
|
+
:recipients => recipients,
|
39
|
+
:subject => subject,
|
40
|
+
:body => body,
|
41
|
+
:notified_object => obj,
|
42
|
+
:notification_code => notification_code
|
43
|
+
}).build
|
44
|
+
|
41
45
|
notification.deliver sanitize_text, send_mail
|
42
46
|
end
|
43
47
|
|
@@ -47,10 +51,8 @@ class Mailboxer::Notification < ActiveRecord::Base
|
|
47
51
|
case receipts
|
48
52
|
when Mailboxer::Receipt
|
49
53
|
receipts.valid?
|
50
|
-
receipts.errors.empty?
|
51
54
|
when Array
|
52
|
-
receipts.
|
53
|
-
receipts.all? { |t| t.errors.empty? }
|
55
|
+
receipts.all?(&:valid?)
|
54
56
|
else
|
55
57
|
false
|
56
58
|
end
|
@@ -58,18 +60,18 @@ class Mailboxer::Notification < ActiveRecord::Base
|
|
58
60
|
end
|
59
61
|
|
60
62
|
def expired?
|
61
|
-
|
63
|
+
expires.present? && (expires < Time.now)
|
62
64
|
end
|
63
65
|
|
64
66
|
def expire!
|
65
|
-
unless
|
66
|
-
|
67
|
-
|
67
|
+
unless expired?
|
68
|
+
expire
|
69
|
+
save
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
71
73
|
def expire
|
72
|
-
unless
|
74
|
+
unless expired?
|
73
75
|
self.expires = Time.now - 1.second
|
74
76
|
end
|
75
77
|
end
|
@@ -78,12 +80,7 @@ class Mailboxer::Notification < ActiveRecord::Base
|
|
78
80
|
#Use Mailboxer::Models::Message.notify and Notification.notify_all instead.
|
79
81
|
def deliver(should_clean = true, send_mail = true)
|
80
82
|
clean if should_clean
|
81
|
-
temp_receipts =
|
82
|
-
|
83
|
-
#Receiver receipts
|
84
|
-
self.recipients.each do |r|
|
85
|
-
temp_receipts << build_receipt(r, nil, false)
|
86
|
-
end
|
83
|
+
temp_receipts = recipients.map { |r| build_receipt(r, nil, false) }
|
87
84
|
|
88
85
|
if temp_receipts.all?(&:valid?)
|
89
86
|
temp_receipts.each(&:save!) #Save receipts
|
@@ -97,16 +94,8 @@ class Mailboxer::Notification < ActiveRecord::Base
|
|
97
94
|
|
98
95
|
#Returns the recipients of the Notification
|
99
96
|
def recipients
|
100
|
-
|
101
|
-
|
102
|
-
self.receipts.each do |receipt|
|
103
|
-
recipients_array << receipt.receiver
|
104
|
-
end
|
105
|
-
|
106
|
-
recipients_array
|
107
|
-
else
|
108
|
-
@recipients
|
109
|
-
end
|
97
|
+
return Array.wrap(@recipients) unless @recipients.blank?
|
98
|
+
@recipients = receipts.map { |receipt| receipt.receiver }
|
110
99
|
end
|
111
100
|
|
112
101
|
#Returns the receipt for the participant
|
@@ -122,53 +111,53 @@ class Mailboxer::Notification < ActiveRecord::Base
|
|
122
111
|
#Returns if the participant have read the Notification
|
123
112
|
def is_unread?(participant)
|
124
113
|
return false if participant.nil?
|
125
|
-
!
|
114
|
+
!receipt_for(participant).first.is_read
|
126
115
|
end
|
127
116
|
|
128
117
|
def is_read?(participant)
|
129
|
-
!
|
118
|
+
!is_unread?(participant)
|
130
119
|
end
|
131
120
|
|
132
121
|
#Returns if the participant have trashed the Notification
|
133
122
|
def is_trashed?(participant)
|
134
123
|
return false if participant.nil?
|
135
|
-
|
124
|
+
receipt_for(participant).first.trashed
|
136
125
|
end
|
137
126
|
|
138
127
|
#Returns if the participant have deleted the Notification
|
139
128
|
def is_deleted?(participant)
|
140
129
|
return false if participant.nil?
|
141
|
-
return
|
130
|
+
return receipt_for(participant).first.deleted
|
142
131
|
end
|
143
132
|
|
144
133
|
#Mark the notification as read
|
145
134
|
def mark_as_read(participant)
|
146
135
|
return if participant.nil?
|
147
|
-
|
136
|
+
receipt_for(participant).mark_as_read
|
148
137
|
end
|
149
138
|
|
150
139
|
#Mark the notification as unread
|
151
140
|
def mark_as_unread(participant)
|
152
141
|
return if participant.nil?
|
153
|
-
|
142
|
+
receipt_for(participant).mark_as_unread
|
154
143
|
end
|
155
144
|
|
156
145
|
#Move the notification to the trash
|
157
146
|
def move_to_trash(participant)
|
158
147
|
return if participant.nil?
|
159
|
-
|
148
|
+
receipt_for(participant).move_to_trash
|
160
149
|
end
|
161
150
|
|
162
151
|
#Takes the notification out of the trash
|
163
152
|
def untrash(participant)
|
164
153
|
return if participant.nil?
|
165
|
-
|
154
|
+
receipt_for(participant).untrash
|
166
155
|
end
|
167
156
|
|
168
157
|
#Mark the notification as deleted for one of the participant
|
169
158
|
def mark_as_deleted(participant)
|
170
159
|
return if participant.nil?
|
171
|
-
return
|
160
|
+
return receipt_for(participant).mark_as_deleted
|
172
161
|
end
|
173
162
|
|
174
163
|
#Sanitizes the body and subject
|
@@ -190,12 +179,12 @@ class Mailboxer::Notification < ActiveRecord::Base
|
|
190
179
|
private
|
191
180
|
|
192
181
|
def build_receipt(receiver, mailbox_type, is_read = false)
|
193
|
-
Mailboxer::
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
182
|
+
Mailboxer::ReceiptBuilder.new({
|
183
|
+
:notification => self,
|
184
|
+
:mailbox_type => mailbox_type,
|
185
|
+
:receiver => receiver,
|
186
|
+
:is_read => is_read
|
187
|
+
}).build
|
199
188
|
end
|
200
189
|
|
201
190
|
end
|
@@ -73,13 +73,10 @@ class Mailboxer::Receipt < ActiveRecord::Base
|
|
73
73
|
end
|
74
74
|
|
75
75
|
#This methods helps to do a update_all with table joins, not currently supported by rails.
|
76
|
-
#
|
76
|
+
#According to the github ticket https://github.com/rails/rails/issues/522 it should be
|
77
77
|
#supported with 3.2.
|
78
78
|
def update_receipts(updates,options={})
|
79
|
-
ids =
|
80
|
-
where(options).each do |rcp|
|
81
|
-
ids << rcp.id
|
82
|
-
end
|
79
|
+
ids = where(options).map { |rcp| rcp.id }
|
83
80
|
unless ids.empty?
|
84
81
|
conditions = [""].concat(ids)
|
85
82
|
condition = "id = ? "
|
@@ -140,12 +137,12 @@ class Mailboxer::Receipt < ActiveRecord::Base
|
|
140
137
|
|
141
138
|
#Returns if the participant have read the Notification
|
142
139
|
def is_unread?
|
143
|
-
!
|
140
|
+
!is_read
|
144
141
|
end
|
145
142
|
|
146
143
|
#Returns if the participant have trashed the Notification
|
147
144
|
def is_trashed?
|
148
|
-
|
145
|
+
trashed
|
149
146
|
end
|
150
147
|
|
151
148
|
protected
|
@@ -153,9 +150,9 @@ class Mailboxer::Receipt < ActiveRecord::Base
|
|
153
150
|
#Removes the duplicate error about not present subject from Conversation if it has been already
|
154
151
|
#raised by Message
|
155
152
|
def remove_duplicate_errors
|
156
|
-
if
|
157
|
-
|
158
|
-
|
153
|
+
if errors["mailboxer_notification.conversation.subject"].present? and errors["mailboxer_notification.subject"].present?
|
154
|
+
errors["mailboxer_notification.conversation.subject"].each do |msg|
|
155
|
+
errors["mailboxer_notification.conversation.subject"].delete(msg)
|
159
156
|
end
|
160
157
|
end
|
161
158
|
end
|
@@ -47,9 +47,7 @@ module Mailboxer
|
|
47
47
|
|
48
48
|
#Gets the mailbox of the messageable
|
49
49
|
def mailbox
|
50
|
-
@mailbox
|
51
|
-
@mailbox.type = :all
|
52
|
-
@mailbox
|
50
|
+
@mailbox ||= Mailboxer::Mailbox.new(self)
|
53
51
|
end
|
54
52
|
|
55
53
|
#Sends a notification to the messageable
|
@@ -60,26 +58,39 @@ module Mailboxer
|
|
60
58
|
#Sends a messages, starting a new conversation, with the messageable
|
61
59
|
#as originator
|
62
60
|
def send_message(recipients, msg_body, subject, sanitize_text=true, attachment=nil, message_timestamp = Time.now)
|
63
|
-
convo = Mailboxer::
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
message
|
70
|
-
|
71
|
-
|
61
|
+
convo = Mailboxer::ConversationBuilder.new({
|
62
|
+
:subject => subject,
|
63
|
+
:created_at => message_timestamp,
|
64
|
+
:updated_at => message_timestamp
|
65
|
+
}).build
|
66
|
+
|
67
|
+
message = Mailboxer::MessageBuilder.new({
|
68
|
+
:sender => self,
|
69
|
+
:conversation => convo,
|
70
|
+
:recipients => recipients,
|
71
|
+
:body => msg_body,
|
72
|
+
:subject => subject,
|
73
|
+
:attachment => attachment,
|
74
|
+
:created_at => message_timestamp,
|
75
|
+
:updated_at => message_timestamp
|
76
|
+
}).build
|
77
|
+
|
72
78
|
message.deliver false, sanitize_text
|
73
79
|
end
|
74
80
|
|
75
81
|
#Basic reply method. USE NOT RECOMENDED.
|
76
82
|
#Use reply_to_sender, reply_to_all and reply_to_conversation instead.
|
77
83
|
def reply(conversation, recipients, reply_body, subject=nil, sanitize_text=true, attachment=nil)
|
78
|
-
subject = subject || "
|
79
|
-
response =
|
80
|
-
|
81
|
-
|
82
|
-
|
84
|
+
subject = subject || "#{conversation.subject}"
|
85
|
+
response = Mailboxer::MessageBuilder.new({
|
86
|
+
:sender => self,
|
87
|
+
:conversation => conversation,
|
88
|
+
:recipients => recipients,
|
89
|
+
:body => reply_body,
|
90
|
+
:subject => subject,
|
91
|
+
:attachment => attachment
|
92
|
+
}).build
|
93
|
+
|
83
94
|
response.recipients.delete(self)
|
84
95
|
response.deliver true, sanitize_text
|
85
96
|
end
|
data/lib/mailboxer/version.rb
CHANGED
data/spec/dummy/Gemfile
CHANGED
@@ -9,25 +9,3 @@ gem 'factory_girl'
|
|
9
9
|
|
10
10
|
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
11
11
|
gem "jdbc-sqlite3", :platform => :jruby
|
12
|
-
|
13
|
-
# Use unicorn as the web server
|
14
|
-
# gem 'unicorn'
|
15
|
-
|
16
|
-
# Deploy with Capistrano
|
17
|
-
# gem 'capistrano'
|
18
|
-
|
19
|
-
# To use debugger
|
20
|
-
# gem 'ruby-debug'
|
21
|
-
|
22
|
-
# Bundle the extra gems:
|
23
|
-
# gem 'bj'
|
24
|
-
# gem 'nokogiri'
|
25
|
-
# gem 'sqlite3-ruby', :require => 'sqlite3'
|
26
|
-
# gem 'aws-s3', :require => 'aws/s3'
|
27
|
-
|
28
|
-
# Bundle gems for the local environment. Make sure to
|
29
|
-
# put test-only gems in this group so their generators
|
30
|
-
# and rake tasks are available in development mode:
|
31
|
-
# group :development, :test do
|
32
|
-
# gem 'webrat'
|
33
|
-
# end
|
@@ -61,8 +61,8 @@ describe "Messages And Mailboxer::Receipts" do
|
|
61
61
|
it "should create proper message" do
|
62
62
|
@message2.sender.id.should == @entity2.id
|
63
63
|
@message2.sender.class.should == @entity2.class
|
64
|
-
|
65
|
-
|
64
|
+
@message2.body.should eq "Reply body"
|
65
|
+
@message2.subject.should eq "Subject"
|
66
66
|
end
|
67
67
|
|
68
68
|
it "should create proper mails" do
|
@@ -108,7 +108,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
108
108
|
@message2.sender.id.should == @entity2.id
|
109
109
|
@message2.sender.class.should == @entity2.class
|
110
110
|
assert @message2.body.eql?"Reply body"
|
111
|
-
assert @message2.subject.eql?"
|
111
|
+
assert @message2.subject.eql?"Subject"
|
112
112
|
end
|
113
113
|
|
114
114
|
it "should create proper mails" do
|
@@ -153,7 +153,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
153
153
|
@message2.sender.id.should == @entity2.id
|
154
154
|
@message2.sender.class.should == @entity2.class
|
155
155
|
assert @message2.body.eql?"Reply body"
|
156
|
-
assert @message2.subject.eql?"
|
156
|
+
assert @message2.subject.eql?"Subject"
|
157
157
|
end
|
158
158
|
|
159
159
|
it "should create proper mails" do
|
@@ -248,7 +248,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
248
248
|
@message2.sender.id.should == @entity2.id
|
249
249
|
@message2.sender.class.should == @entity2.class
|
250
250
|
assert @message2.body.eql?"Reply body"
|
251
|
-
assert @message2.subject.eql?"
|
251
|
+
assert @message2.subject.eql?"Subject"
|
252
252
|
end
|
253
253
|
|
254
254
|
it "should create proper mails" do
|
@@ -294,7 +294,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
294
294
|
@message2.sender.id.should == @entity2.id
|
295
295
|
@message2.sender.class.should == @entity2.class
|
296
296
|
assert @message2.body.eql?"Reply body"
|
297
|
-
assert @message2.subject.eql?"
|
297
|
+
assert @message2.subject.eql?"Subject"
|
298
298
|
end
|
299
299
|
|
300
300
|
it "should create proper mails" do
|
@@ -417,7 +417,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
417
417
|
@message2.sender.id.should == @entity2.id
|
418
418
|
@message2.sender.class.should == @entity2.class
|
419
419
|
assert @message2.body.eql?"Reply body"
|
420
|
-
assert @message2.subject.eql?"
|
420
|
+
assert @message2.subject.eql?"Subject"
|
421
421
|
end
|
422
422
|
|
423
423
|
it "should create proper mails" do
|
@@ -473,7 +473,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
473
473
|
@message2.sender.id.should == @entity2.id
|
474
474
|
@message2.sender.class.should == @entity2.class
|
475
475
|
assert @message2.body.eql?"Reply body"
|
476
|
-
assert @message2.subject.eql?"
|
476
|
+
assert @message2.subject.eql?"Subject"
|
477
477
|
end
|
478
478
|
|
479
479
|
it "should create proper mails" do
|
@@ -599,7 +599,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
599
599
|
@message2.sender.id.should == @entity2.id
|
600
600
|
@message2.sender.class.should == @entity2.class
|
601
601
|
assert @message2.body.eql?"Reply body"
|
602
|
-
assert @message2.subject.eql?"
|
602
|
+
assert @message2.subject.eql?"Subject"
|
603
603
|
end
|
604
604
|
|
605
605
|
it "should create proper mails" do
|
@@ -655,7 +655,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
655
655
|
@message2.sender.id.should == @entity2.id
|
656
656
|
@message2.sender.class.should == @entity2.class
|
657
657
|
assert @message2.body.eql?"Reply body"
|
658
|
-
assert @message2.subject.eql?"
|
658
|
+
assert @message2.subject.eql?"Subject"
|
659
659
|
end
|
660
660
|
|
661
661
|
it "should create proper mails" do
|
@@ -775,7 +775,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
775
775
|
@message2.sender.id.should == @entity2.id
|
776
776
|
@message2.sender.class.should == @entity2.class
|
777
777
|
assert @message2.body.eql?"Reply body"
|
778
|
-
assert @message2.subject.eql?"
|
778
|
+
assert @message2.subject.eql?"Subject"
|
779
779
|
end
|
780
780
|
|
781
781
|
it "should create proper mails" do
|
@@ -821,7 +821,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
821
821
|
@message2.sender.id.should == @entity2.id
|
822
822
|
@message2.sender.class.should == @entity2.class
|
823
823
|
assert @message2.body.eql?"Reply body"
|
824
|
-
assert @message2.subject.eql?"
|
824
|
+
assert @message2.subject.eql?"Subject"
|
825
825
|
end
|
826
826
|
|
827
827
|
it "should create proper mails" do
|
@@ -866,7 +866,7 @@ describe "Messages And Mailboxer::Receipts" do
|
|
866
866
|
@message2.sender.id.should == @entity2.id
|
867
867
|
@message2.sender.class.should == @entity2.class
|
868
868
|
assert @message2.body.eql?"Reply body"
|
869
|
-
assert @message2.subject.eql?"
|
869
|
+
assert @message2.subject.eql?"Subject"
|
870
870
|
end
|
871
871
|
|
872
872
|
it "should create proper mails" do
|
@@ -47,7 +47,7 @@ describe Mailboxer::Notification do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should notify several users" do
|
50
|
-
recipients =
|
50
|
+
recipients = [@entity1,@entity2,@entity3]
|
51
51
|
Mailboxer::Notification.notify_all(recipients,"Subject","Body")
|
52
52
|
#Check getting ALL receipts
|
53
53
|
@entity1.mailbox.receipts.size.should==1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailboxer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.0.
|
4
|
+
version: 0.12.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo Casanova Cuesta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: foreigner
|
@@ -170,6 +170,11 @@ files:
|
|
170
170
|
- LICENSE.txt
|
171
171
|
- README.md
|
172
172
|
- Rakefile
|
173
|
+
- app/builders/mailboxer/base_builder.rb
|
174
|
+
- app/builders/mailboxer/conversation_builder.rb
|
175
|
+
- app/builders/mailboxer/message_builder.rb
|
176
|
+
- app/builders/mailboxer/notification_builder.rb
|
177
|
+
- app/builders/mailboxer/receipt_builder.rb
|
173
178
|
- app/mailers/mailboxer/base_mailer.rb
|
174
179
|
- app/mailers/mailboxer/message_mailer.rb
|
175
180
|
- app/mailers/mailboxer/notification_mailer.rb
|
@@ -179,7 +184,7 @@ files:
|
|
179
184
|
- app/models/mailboxer/message.rb
|
180
185
|
- app/models/mailboxer/notification.rb
|
181
186
|
- app/models/mailboxer/receipt.rb
|
182
|
-
- app/uploaders/attachment_uploader.rb
|
187
|
+
- app/uploaders/mailboxer/attachment_uploader.rb
|
183
188
|
- app/views/mailboxer/message_mailer/new_message_email.html.erb
|
184
189
|
- app/views/mailboxer/message_mailer/new_message_email.text.erb
|
185
190
|
- app/views/mailboxer/message_mailer/reply_message_email.html.erb
|