private_mail 0.0.1 → 0.0.2
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/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: []
|