private_mail 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/generators/private_mail/install/install_generator.rb +2 -2
- data/lib/generators/private_mail/install/models/conversation.rb +1 -1
- data/lib/generators/private_mail/install/models/{mail.rb → mail_item.rb} +1 -2
- data/lib/generators/private_mail/install/templates/{create_mail.rb → create_mail_items.rb} +3 -3
- data/lib/mailbox.rb +22 -22
- data/lib/private_mail.rb +1 -1
- data/lib/private_mail/version.rb +1 -1
- metadata +12 -10
@@ -22,11 +22,11 @@ module PrivateMail
|
|
22
22
|
migration_template "create_conversations.rb", "db/migrate/create_conversations.rb"
|
23
23
|
migration_template "create_messages.rb", "db/migrate/create_messages.rb"
|
24
24
|
migration_template "create_messages_recipients.rb", "db/migrate/create_messages_recipients.rb"
|
25
|
-
migration_template "
|
25
|
+
migration_template "create_mail_items.rb", "db/migrate/create_mail_items.rb"
|
26
26
|
end
|
27
27
|
|
28
28
|
def copy_models
|
29
|
-
copy_file "../models/
|
29
|
+
copy_file "../models/mail_item.rb", "app/models/mail_item.rb"
|
30
30
|
copy_file "../models/message.rb", "app/models/message.rb"
|
31
31
|
copy_file "../models/conversation.rb", "app/models/conversation.rb"
|
32
32
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Conversation < ActiveRecord::Base
|
2
2
|
attr_reader :originator, :original_message, :last_sender, :last_message, :users
|
3
3
|
has_many :messages
|
4
|
-
has_many :
|
4
|
+
has_many :mail_items
|
5
5
|
before_create :clean
|
6
6
|
#looks like shit but isnt too bad
|
7
7
|
#has_many :users, :through :messages, :source => :recipients, :uniq => true doesnt work due to recipients being a habtm association
|
@@ -1,6 +1,6 @@
|
|
1
|
-
class
|
1
|
+
class CreateMailItems < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
|
-
create_table :
|
3
|
+
create_table :mail_items do |t|
|
4
4
|
t.column :user_id, :integer, :null => false
|
5
5
|
t.column :message_id, :integer, :null => false
|
6
6
|
t.column :conversation_id, :integer
|
@@ -13,6 +13,6 @@ class CreateMail < ActiveRecord::Migration
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.down
|
16
|
-
drop_table :
|
16
|
+
drop_table :mail_items
|
17
17
|
end
|
18
18
|
end
|
data/lib/mailbox.rb
CHANGED
@@ -38,9 +38,9 @@ module PrivateMail
|
|
38
38
|
# phil.mailbox[:inbox].mail_count(:unread)
|
39
39
|
#
|
40
40
|
def mail_count(filter = :all, options = {})
|
41
|
-
default_options = {:conditions => ["
|
41
|
+
default_options = {:conditions => ["mail_items.user_id = ?", @user.id]}
|
42
42
|
add_mailbox_condition!(default_options, @type)
|
43
|
-
add_conditions!(default_options, "
|
43
|
+
add_conditions!(default_options, "mail_items.read = ?", filter == :read) unless filter == :all
|
44
44
|
return count_mail(default_options, options)
|
45
45
|
end
|
46
46
|
|
@@ -49,7 +49,7 @@ module PrivateMail
|
|
49
49
|
#====params:
|
50
50
|
#options:: all valid find options are accepted as well as an additional conversation option.
|
51
51
|
#* :conversation - Conversation object to filter mail only belonging to this conversation.
|
52
|
-
#* :conditions - same as find conditions however the array version of conditions will not work, i.e., :conditions => ['
|
52
|
+
#* :conditions - same as find conditions however the array version of conditions will not work, i.e., :conditions => ['mail_items.read = ?', false] will not work here.
|
53
53
|
#* all other find options will work as expected.
|
54
54
|
#
|
55
55
|
#====returns:
|
@@ -65,7 +65,7 @@ module PrivateMail
|
|
65
65
|
# phil.mailbox[:inbox].mail(:conversation => Conversation.find(23))
|
66
66
|
#
|
67
67
|
# #get all unread mail messages belonging to phil associated with conversation 23
|
68
|
-
# phil.mailbox.mail(:conversation => Conversation.find(23), :conditions => '
|
68
|
+
# phil.mailbox.mail(:conversation => Conversation.find(23), :conditions => 'mail_items.read = false')
|
69
69
|
#
|
70
70
|
def mail(options = {})
|
71
71
|
default_options = {}
|
@@ -88,7 +88,7 @@ module PrivateMail
|
|
88
88
|
# phil.mailbox[:inbox].unread_mail
|
89
89
|
#
|
90
90
|
def unread_mail(options = {})
|
91
|
-
default_options = {:conditions => ["
|
91
|
+
default_options = {:conditions => ["mail_items.read = ?", false]}
|
92
92
|
add_mailbox_condition!(default_options, @type)
|
93
93
|
return get_mail(default_options, options)
|
94
94
|
end
|
@@ -108,7 +108,7 @@ module PrivateMail
|
|
108
108
|
# phil.mailbox[:inbox].read_mail
|
109
109
|
#
|
110
110
|
def read_mail(options = {})
|
111
|
-
default_options = {:conditions => ["
|
111
|
+
default_options = {:conditions => ["mail_items.read = ?", true]}
|
112
112
|
add_mailbox_condition!(default_options, @type)
|
113
113
|
return get_mail(default_options, options)
|
114
114
|
end
|
@@ -148,8 +148,8 @@ module PrivateMail
|
|
148
148
|
attributes = {:message => msg, :conversation => msg.conversation}
|
149
149
|
attributes[:mailbox] = @type.to_s unless @type == :all
|
150
150
|
attributes[:read] = msg.sender.id == @user.id
|
151
|
-
mail_msg =
|
152
|
-
@user.
|
151
|
+
mail_msg = MailItem.new(attributes)
|
152
|
+
@user.mail_items << mail_msg
|
153
153
|
return mail_msg
|
154
154
|
end
|
155
155
|
|
@@ -170,7 +170,7 @@ module PrivateMail
|
|
170
170
|
def mark_as_read(options = {})
|
171
171
|
default_options = {}
|
172
172
|
add_mailbox_condition!(default_options, @type)
|
173
|
-
return update_mail("
|
173
|
+
return update_mail("mail_items.read = true", default_options, options)
|
174
174
|
end
|
175
175
|
|
176
176
|
#marks all the mail messages matched by the options and type as unread, except for sent messages.
|
@@ -188,9 +188,9 @@ module PrivateMail
|
|
188
188
|
# phil.mailbox[:inbox].mark_as_unread()
|
189
189
|
#
|
190
190
|
def mark_as_unread(options = {})
|
191
|
-
default_options = {:conditions => ["
|
191
|
+
default_options = {:conditions => ["mail_items.mailbox != ?",@user.mailbox_types[:sent].to_s]}
|
192
192
|
add_mailbox_condition!(default_options, @type)
|
193
|
-
return update_mail("
|
193
|
+
return update_mail("mail_items.read = false", default_options, options)
|
194
194
|
end
|
195
195
|
|
196
196
|
#moves all mail matched by the options to the given mailbox. sent messages stay in the sentbox.
|
@@ -206,13 +206,13 @@ module PrivateMail
|
|
206
206
|
add_mailbox_condition!(default_options, @type)
|
207
207
|
if(!trash)
|
208
208
|
#conditional update because sentmail is always sentmail - I believe case if the most widely supported conditional, mysql also has an if which would work as well but i think mysql is the only one to support it
|
209
|
-
return update_mail("
|
210
|
-
CASE
|
211
|
-
WHEN '#{@user.mailbox_types[:sent].to_s}' THEN
|
209
|
+
return update_mail("mail_items.trashed = false, mail_items.mailbox =
|
210
|
+
CASE mail_items.mailbox
|
211
|
+
WHEN '#{@user.mailbox_types[:sent].to_s}' THEN mail_items.mailbox
|
212
212
|
ELSE '#{mailbox.to_s}'
|
213
213
|
END", default_options, options)
|
214
214
|
end
|
215
|
-
return update_mail("
|
215
|
+
return update_mail("mail_items.trashed = true", default_options, options)
|
216
216
|
end
|
217
217
|
|
218
218
|
#permanantly deletes all the mail messages matched by the options. Use move_to(:trash) instead if you want to send to user's trash without deleting.
|
@@ -221,7 +221,7 @@ module PrivateMail
|
|
221
221
|
#options:: see mail for acceptable options.
|
222
222
|
#
|
223
223
|
def delete(options = {})
|
224
|
-
default_options = {:conditions => ["
|
224
|
+
default_options = {:conditions => ["mail_items.user_id = ?", @user.id]}
|
225
225
|
add_mailbox_condition!(default_options, @type)
|
226
226
|
return delete_mail(default_options, options)
|
227
227
|
end
|
@@ -237,7 +237,7 @@ module PrivateMail
|
|
237
237
|
#options:: see mail for acceptable options.
|
238
238
|
#
|
239
239
|
def empty_trash(options = {})
|
240
|
-
default_options = {:conditions => ["
|
240
|
+
default_options = {:conditions => ["mail_items.user_id = ? AND mail_items.trashed = ?", @user.id, true]}
|
241
241
|
add_mailbox_condition!(default_options, @type)
|
242
242
|
return delete_mail(default_options, options)
|
243
243
|
end
|
@@ -271,12 +271,12 @@ module PrivateMail
|
|
271
271
|
|
272
272
|
def get_mail(default_options, options)
|
273
273
|
build_options(default_options, options) unless options.empty?
|
274
|
-
return @user.
|
274
|
+
return @user.mail_items.find(:all, default_options)
|
275
275
|
end
|
276
276
|
|
277
277
|
def update_mail(updates, default_options, options)
|
278
278
|
build_options(default_options, options) unless options.empty?
|
279
|
-
return @user.
|
279
|
+
return @user.mail_items.update_all(updates, default_options[:conditions])
|
280
280
|
end
|
281
281
|
|
282
282
|
def delete_mail(default_options, options)
|
@@ -300,7 +300,7 @@ module PrivateMail
|
|
300
300
|
def only_latest(mail)
|
301
301
|
convos = []
|
302
302
|
latest = []
|
303
|
-
|
303
|
+
mail_items.each do |m|
|
304
304
|
next if(convos.include?(m.conversation_id))
|
305
305
|
convos << m.conversation_id
|
306
306
|
latest << m
|
@@ -310,8 +310,8 @@ module PrivateMail
|
|
310
310
|
|
311
311
|
def add_mailbox_condition!(options, mailbox_type)
|
312
312
|
return if mailbox_type == :all
|
313
|
-
return add_conditions!(options, "
|
314
|
-
return add_conditions!(options, "
|
313
|
+
return add_conditions!(options, "mail_items.mailbox = ? AND mail_items.trashed = ?", mailbox_type.to_s, false) unless mailbox_type == @user.mailbox_types[:deleted]
|
314
|
+
return add_conditions!(options, "mail_items.trashed = ?", true)
|
315
315
|
end
|
316
316
|
|
317
317
|
def add_conversation_condition!(options, conversation)
|
data/lib/private_mail.rb
CHANGED
@@ -27,7 +27,7 @@ module PrivateMail
|
|
27
27
|
# acts_as_messageable :received => :in, :sent => :sent, :deleted => :garbage
|
28
28
|
def acts_as_messageable(options = {})
|
29
29
|
cattr_accessor :mailbox_types
|
30
|
-
has_many :
|
30
|
+
has_many :mail_items, :order => 'created_at DESC', :dependent => :delete_all
|
31
31
|
|
32
32
|
self.mailbox_types = {
|
33
33
|
:received => :inbox,
|
data/lib/private_mail/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: private_mail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-10-31 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &2169805040 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2169805040
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &2169804620 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,8 +32,9 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
description:
|
35
|
+
version_requirements: *2169804620
|
36
|
+
description: Enables User models in Rails 3.1+ apps to have simple private messaging
|
37
|
+
capabilites between them.
|
37
38
|
email: john@mcdowall.info
|
38
39
|
executables: []
|
39
40
|
extensions: []
|
@@ -41,10 +42,10 @@ extra_rdoc_files: []
|
|
41
42
|
files:
|
42
43
|
- lib/generators/private_mail/install/install_generator.rb
|
43
44
|
- lib/generators/private_mail/install/models/conversation.rb
|
44
|
-
- lib/generators/private_mail/install/models/
|
45
|
+
- lib/generators/private_mail/install/models/mail_item.rb
|
45
46
|
- lib/generators/private_mail/install/models/message.rb
|
46
47
|
- lib/generators/private_mail/install/templates/create_conversations.rb
|
47
|
-
- lib/generators/private_mail/install/templates/
|
48
|
+
- lib/generators/private_mail/install/templates/create_mail_items.rb
|
48
49
|
- lib/generators/private_mail/install/templates/create_messages.rb
|
49
50
|
- lib/generators/private_mail/install/templates/create_messages_recipients.rb
|
50
51
|
- lib/mailbox.rb
|
@@ -64,7 +65,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
65
|
version: '0'
|
65
66
|
segments:
|
66
67
|
- 0
|
67
|
-
hash: -
|
68
|
+
hash: -3700018115756833954
|
68
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
70
|
none: false
|
70
71
|
requirements:
|
@@ -76,5 +77,6 @@ rubyforge_project:
|
|
76
77
|
rubygems_version: 1.8.11
|
77
78
|
signing_key:
|
78
79
|
specification_version: 3
|
79
|
-
summary:
|
80
|
+
summary: This gem provides basic simple private messaging, based on the bondes of
|
81
|
+
acts_as_messageable.
|
80
82
|
test_files: []
|