mailboxer 0.0.13 → 0.0.14
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/app/models/conversation.rb +5 -11
- data/app/models/mailbox.rb +62 -86
- data/app/models/message.rb +31 -10
- data/app/models/receipt.rb +76 -62
- data/lib/generators/mailboxer/templates/migration.rb +24 -3
- data/lib/mailboxer/models/messageable.rb +5 -9
- data/mailboxer.gemspec +31 -31
- metadata +41 -74
data/app/models/conversation.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
class Conversation < ActiveRecord::Base
|
2
2
|
attr_reader :originator, :original_message, :last_sender, :last_message
|
3
|
-
attr_accessor :recipients, :body
|
4
3
|
has_many :messages
|
5
4
|
has_many :receipts, :through => :messages
|
6
5
|
|
7
|
-
validates_presence_of :
|
6
|
+
validates_presence_of :subject
|
8
7
|
|
9
|
-
|
10
|
-
after_create :clear_recipients
|
8
|
+
before_validation :clean
|
11
9
|
|
12
10
|
# before_create :clean
|
13
11
|
scope :participant, lambda {|participant|
|
@@ -52,12 +50,12 @@ class Conversation < ActiveRecord::Base
|
|
52
50
|
end
|
53
51
|
|
54
52
|
def recipients
|
55
|
-
if
|
53
|
+
if self.last_message
|
56
54
|
recps = self.last_message.recipients
|
57
55
|
recps = recps.is_a?(Array) ? recps : [recps]
|
58
|
-
|
56
|
+
return recps
|
59
57
|
end
|
60
|
-
return
|
58
|
+
return []
|
61
59
|
end
|
62
60
|
|
63
61
|
#originator of the conversation.
|
@@ -129,8 +127,4 @@ class Conversation < ActiveRecord::Base
|
|
129
127
|
self.subject = sanitize self.subject
|
130
128
|
end
|
131
129
|
|
132
|
-
def clear_recipients
|
133
|
-
self.recipients=nil
|
134
|
-
end
|
135
|
-
|
136
130
|
end
|
data/app/models/mailbox.rb
CHANGED
@@ -1,88 +1,64 @@
|
|
1
1
|
class Mailbox
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
msg_receipt = Receipt.new
|
65
|
-
msg_receipt.message = msg
|
66
|
-
msg_receipt.read = (msg.sender.id == @messageable.id && msg.sender.class == @messageable.class)
|
67
|
-
msg_receipt.receiver = @messageable
|
68
|
-
msg_receipt.mailbox_type = @type.to_s unless @type == :all
|
69
|
-
@messageable.receipts << msg_receipt
|
70
|
-
return msg_receipt
|
71
|
-
end
|
72
|
-
|
73
|
-
def empty_trash(options = {})
|
74
|
-
return false
|
75
|
-
end
|
76
|
-
|
77
|
-
def has_conversation?(conversation)
|
78
|
-
return conversation.is_participant?(@messageable)
|
79
|
-
end
|
80
|
-
|
81
|
-
def is_trashed?(conversation)
|
82
|
-
return conversation.is_trashed?(@messageable)
|
83
|
-
end
|
84
|
-
def is_completely_trashed?(conversation)
|
85
|
-
return conversation.is_completely_trashed?(@messageable)
|
86
|
-
end
|
87
|
-
|
2
|
+
attr_accessor :type
|
3
|
+
attr_reader :messageable
|
4
|
+
def initialize(recipient, box = :all)
|
5
|
+
@messageable = recipient
|
6
|
+
end
|
7
|
+
|
8
|
+
def conversations(options = {})
|
9
|
+
conv = Conversation.participant(@messageable)
|
10
|
+
|
11
|
+
if options[:mailbox_type].present?
|
12
|
+
case options[:mailbox_type]
|
13
|
+
when 'inbox'
|
14
|
+
conv = Conversation.inbox(@messageable)
|
15
|
+
when 'sentbox'
|
16
|
+
conv = Conversation.sentbox(@messageable)
|
17
|
+
when 'trash'
|
18
|
+
conv = Conversation.trash(@messageable)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
if (options[:read].present? and options[:read]==false) or (options[:unread].present? and options[:unread]==true)
|
23
|
+
conv = conv.unread(@messageable)
|
24
|
+
end
|
25
|
+
|
26
|
+
return conv.uniq
|
27
|
+
end
|
28
|
+
|
29
|
+
def inbox(options={})
|
30
|
+
options = options.merge(:mailbox_type => 'inbox')
|
31
|
+
return self.conversations(options)
|
32
|
+
end
|
33
|
+
|
34
|
+
def sentbox(options={})
|
35
|
+
options = options.merge(:mailbox_type => 'sentbox')
|
36
|
+
return self.conversations(options)
|
37
|
+
end
|
38
|
+
|
39
|
+
def trash(options={})
|
40
|
+
options = options.merge(:mailbox_type => 'trash')
|
41
|
+
return self.conversations(options)
|
42
|
+
end
|
43
|
+
|
44
|
+
def receipts(options = {})
|
45
|
+
return Receipt.where(options).receiver(@messageable)
|
46
|
+
end
|
47
|
+
|
48
|
+
def empty_trash(options = {})
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
|
52
|
+
def has_conversation?(conversation)
|
53
|
+
return conversation.is_participant?(@messageable)
|
54
|
+
end
|
55
|
+
|
56
|
+
def is_trashed?(conversation)
|
57
|
+
return conversation.is_trashed?(@messageable)
|
58
|
+
end
|
59
|
+
|
60
|
+
def is_completely_trashed?(conversation)
|
61
|
+
return conversation.is_completely_trashed?(@messageable)
|
62
|
+
end
|
63
|
+
|
88
64
|
end
|
data/app/models/message.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
class Message < ActiveRecord::Base
|
2
|
-
#
|
3
|
-
serialize :headers
|
4
|
-
|
2
|
+
#
|
5
3
|
attr_accessor :recipients
|
4
|
+
belongs_to :sender, :polymorphic => :true
|
5
|
+
belongs_to :conversation, :validate => true, :autosave => true
|
6
|
+
validates_presence_of :subject, :body, :sender
|
6
7
|
|
7
8
|
class_inheritable_accessor :on_deliver_callback
|
8
9
|
protected :on_deliver_callback
|
9
|
-
belongs_to :sender, :polymorphic => :true
|
10
|
-
belongs_to :conversation
|
11
10
|
has_many :receipts
|
12
11
|
scope :conversation, lambda { |conversation|
|
13
12
|
where(:conversation_id => conversation.id)
|
@@ -19,14 +18,36 @@ class Message < ActiveRecord::Base
|
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
22
|
-
def deliver(
|
21
|
+
def deliver(reply = false, should_clean = true)
|
23
22
|
self.clean if should_clean
|
24
|
-
|
23
|
+
temp_receipts = Array.new
|
24
|
+
#Receiver receipts
|
25
25
|
self.recipients.each do |r|
|
26
|
-
|
26
|
+
msg_receipt = Receipt.new
|
27
|
+
msg_receipt.message = self
|
28
|
+
msg_receipt.read = false
|
29
|
+
msg_receipt.receiver = r
|
30
|
+
msg_receipt.mailbox_type = "inbox"
|
31
|
+
temp_receipts << msg_receipt
|
27
32
|
end
|
28
|
-
|
29
|
-
|
33
|
+
#Sender receipt
|
34
|
+
sender_receipt = Receipt.new
|
35
|
+
sender_receipt.message = self
|
36
|
+
sender_receipt.read = true
|
37
|
+
sender_receipt.receiver = self.sender
|
38
|
+
sender_receipt.mailbox_type = "sentbox"
|
39
|
+
temp_receipts << sender_receipt
|
40
|
+
|
41
|
+
temp_receipts.each(&:valid?)
|
42
|
+
if temp_receipts.all? { |t| t.errors.empty? }
|
43
|
+
temp_receipts.each(&:save!) #Save receipts
|
44
|
+
if reply
|
45
|
+
self.conversation.update_attribute(:updated_at, Time.now)
|
46
|
+
end
|
47
|
+
self.recipients=nil
|
48
|
+
self.on_deliver_callback.call(self) unless self.on_deliver_callback.nil?
|
49
|
+
end
|
50
|
+
return sender_receipt
|
30
51
|
end
|
31
52
|
|
32
53
|
def recipients
|
data/app/models/receipt.rb
CHANGED
@@ -1,71 +1,85 @@
|
|
1
1
|
class Receipt < ActiveRecord::Base
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
belongs_to :message, :validate => true, :autosave => true
|
3
|
+
has_one :conversation, :through => :message
|
4
|
+
belongs_to :receiver, :polymorphic => :true
|
5
|
+
|
6
|
+
validates_presence_of :receiver
|
7
|
+
|
8
|
+
scope :receiver, lambda { |receiver|
|
6
9
|
where(:receiver_id => receiver.id,:receiver_type => receiver.class.to_s)
|
7
10
|
}
|
8
|
-
|
11
|
+
scope :message, lambda { |message|
|
9
12
|
where(:message_id => message.id)
|
10
13
|
}
|
11
|
-
|
14
|
+
scope :conversation, lambda { |conversation|
|
12
15
|
joins(:message).where('messages.conversation_id' => conversation.id)
|
13
16
|
}
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
17
|
+
scope :sentbox, where(:mailbox_type => "sentbox")
|
18
|
+
scope :inbox, where(:mailbox_type => "inbox")
|
19
|
+
scope :trash, where(:trashed => true)
|
20
|
+
scope :not_trash, where(:trashed => false)
|
21
|
+
scope :read, where(:read => true)
|
22
|
+
scope :unread, where(:read => false)
|
23
|
+
|
24
|
+
after_validation :remove_duplicate_errors
|
25
|
+
class << self
|
26
|
+
def mark_as_read(options={})
|
27
|
+
where(options).update_all(:read => true)
|
28
|
+
end
|
29
|
+
|
30
|
+
def mark_as_unread(options={})
|
31
|
+
where(options).update_all(:read => false)
|
32
|
+
end
|
33
|
+
|
34
|
+
def move_to_trash(options={})
|
35
|
+
where(options).update_all(:trashed => true)
|
36
|
+
end
|
37
|
+
|
38
|
+
def untrash(options={})
|
39
|
+
where(options).update_all(:trashed => false)
|
40
|
+
end
|
41
|
+
|
42
|
+
def move_to_inbox(options={})
|
43
|
+
where(options).update_all(:mailbox_type => :inbox, :trashed => false)
|
44
|
+
end
|
45
|
+
|
46
|
+
def move_to_sentbox(options={})
|
47
|
+
where(options).update_all(:mailbox_type => :sentbox, :trashed => false)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def mark_as_read
|
52
|
+
update_attributes(:read => true)
|
53
|
+
end
|
54
|
+
|
55
|
+
def mark_as_unread
|
56
|
+
update_attributes(:read => false)
|
57
|
+
end
|
58
|
+
|
59
|
+
def move_to_trash
|
60
|
+
update_attributes(:trashed => true)
|
61
|
+
end
|
62
|
+
|
63
|
+
def untrash
|
64
|
+
update_attributes(:trashed => false)
|
65
|
+
end
|
66
|
+
|
67
|
+
def move_to_inbox
|
68
|
+
update_attributes(:mailbox_type => :inbox, :trashed => false)
|
69
|
+
end
|
70
|
+
|
71
|
+
def move_to_sentbox
|
72
|
+
update_attributes(:mailbox_type => :sentbox, :trashed => false)
|
73
|
+
end
|
74
|
+
|
75
|
+
protected
|
76
|
+
|
77
|
+
def remove_duplicate_errors
|
78
|
+
if self.errors["message.conversation.subject"].present? and self.errors["message.subject"].present?
|
79
|
+
self.errors["message.conversation.subject"].each do |msg|
|
80
|
+
self.errors["message.conversation.subject"].delete(msg)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
70
84
|
|
71
85
|
end
|
@@ -1,10 +1,13 @@
|
|
1
1
|
class CreateMailboxer < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
|
+
#Tables
|
4
|
+
#Conversations
|
3
5
|
create_table :conversations do |t|
|
4
6
|
t.column :subject, :string, :default => ""
|
5
7
|
t.column :created_at, :datetime, :null => false
|
6
8
|
t.column :updated_at, :datetime, :null => false
|
7
9
|
end
|
10
|
+
#Receipts
|
8
11
|
create_table :receipts do |t|
|
9
12
|
t.references :receiver, :polymorphic => true
|
10
13
|
t.column :message_id, :integer, :null => false
|
@@ -15,21 +18,39 @@ class CreateMailboxer < ActiveRecord::Migration
|
|
15
18
|
t.column :created_at, :datetime, :null => false
|
16
19
|
t.column :updated_at, :datetime, :null => false
|
17
20
|
end
|
21
|
+
#Messages
|
18
22
|
create_table :messages do |t|
|
19
23
|
t.column :body, :text
|
20
24
|
t.column :subject, :string, :default => ""
|
21
|
-
t.column :headers, :text
|
22
25
|
t.references :sender, :polymorphic => true
|
23
26
|
t.column :conversation_id, :integer
|
24
|
-
t.column :sent, :boolean, :default => false
|
25
27
|
t.column :draft, :boolean, :default => false
|
26
|
-
t.column :system, :boolean, :default => false
|
27
28
|
t.column :updated_at, :datetime, :null => false
|
28
29
|
t.column :created_at, :datetime, :null => false
|
29
30
|
end
|
31
|
+
|
32
|
+
|
33
|
+
#Indexes
|
34
|
+
#Conversations
|
35
|
+
#Receipts
|
36
|
+
add_index "receipts","message_id"
|
37
|
+
#Messages
|
38
|
+
add_index "messages","conversation_id"
|
39
|
+
|
40
|
+
#Foreign keys
|
41
|
+
#Conversations
|
42
|
+
#Receipts
|
43
|
+
add_foreign_key "receipts", "messages", :name => "receipts_on_message_id"
|
44
|
+
#Messages
|
45
|
+
add_foreign_key "messages", "conversations", :name => "messages_on_conversation_id"
|
30
46
|
end
|
31
47
|
|
32
48
|
def self.down
|
49
|
+
#Tables
|
50
|
+
remove_foreign_key "receipts", :name => "receipts_on_message_id"
|
51
|
+
remove_foreign_key "messages", :name => "messages_on_conversation_id"
|
52
|
+
|
53
|
+
#Indexes
|
33
54
|
drop_table :receipts
|
34
55
|
drop_table :conversations
|
35
56
|
drop_table :messages
|
@@ -22,24 +22,20 @@ module Mailboxer
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def send_message(recipients, msg_body, subject)
|
25
|
-
convo = Conversation.
|
26
|
-
message = Message.
|
25
|
+
convo = Conversation.new({:subject => subject})
|
26
|
+
message = Message.new({:sender => self, :conversation => convo, :body => msg_body, :subject => subject})
|
27
27
|
message.recipients = recipients.is_a?(Array) ? recipients : [recipients]
|
28
28
|
message.recipients = message.recipients.uniq
|
29
|
-
message.deliver
|
30
|
-
return mailbox[:sentbox] << message
|
29
|
+
return message.deliver
|
31
30
|
end
|
32
31
|
|
33
32
|
def reply(conversation, recipients, reply_body, subject = nil)
|
34
|
-
return nil if(reply_body.blank?)
|
35
|
-
conversation.update_attribute(:updated_at, Time.now)
|
36
33
|
subject = subject || "RE: #{conversation.subject}"
|
37
|
-
response = Message.
|
34
|
+
response = Message.new({:sender => self, :conversation => conversation, :body => reply_body, :subject => subject})
|
38
35
|
response.recipients = recipients.is_a?(Array) ? recipients : [recipients]
|
39
36
|
response.recipients = response.recipients.uniq
|
40
37
|
response.recipients.delete(self)
|
41
|
-
response.deliver(
|
42
|
-
return mailbox[:sentbox] << response
|
38
|
+
return response.deliver(true)
|
43
39
|
end
|
44
40
|
|
45
41
|
def reply_to_sender(receipt, reply_body, subject = nil)
|
data/mailboxer.gemspec
CHANGED
@@ -1,35 +1,35 @@
|
|
1
|
-
|
2
1
|
Gem::Specification.new do |s|
|
3
|
-
|
4
|
-
|
2
|
+
s.name = "mailboxer"
|
3
|
+
s.version = "0.0.14"
|
4
|
+
s.authors = ["Eduardo Casanova Cuesta"]
|
5
|
+
s.summary = "Messaging system for rails apps."
|
6
|
+
s.description = "A Rails engine that allows any model to act as messageable, permitting it interchange messages with any other messageable model."
|
7
|
+
s.email = "ecasanovac@gmail.com"
|
8
|
+
s.homepage = "http://github.com/ging/mailboxer"
|
9
|
+
s.files = `git ls-files`.split("\n")
|
10
|
+
|
11
|
+
# Gem dependencies
|
12
|
+
#
|
13
|
+
# SQL foreign keys
|
14
|
+
s.add_runtime_dependency('foreigner', '~> 0.9.1')
|
15
|
+
|
16
|
+
# Development Gem dependencies
|
17
|
+
#
|
18
|
+
s.add_development_dependency('rails', '~> 3.0.5')
|
19
|
+
# Testing database
|
20
|
+
s.add_development_dependency('sqlite3-ruby')
|
21
|
+
# Debugging
|
22
|
+
if RUBY_VERSION < '1.9'
|
23
|
+
s.add_development_dependency('ruby-debug', '~> 0.10.3')
|
24
|
+
end
|
25
|
+
# Specs
|
26
|
+
s.add_development_dependency('rspec-rails', '~> 2.5.0')
|
27
|
+
# Fixtures
|
28
|
+
s.add_development_dependency('factory_girl', '~> 1.3.2')
|
29
|
+
# Population
|
30
|
+
s.add_development_dependency('forgery', '~> 0.3.6')
|
31
|
+
# Integration testing
|
32
|
+
s.add_development_dependency('capybara', '~> 0.3.9')
|
5
33
|
|
6
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
7
|
-
s.authors = ["Eduardo Casanova Cuesta"]
|
8
|
-
s.date = %q{2011-03-26}
|
9
|
-
s.description = %q{A Rails engine that allows any model to act as messageable, permitting it interchange messages with any other messageable model. }
|
10
|
-
s.email = %q{ecasanovac@gmail.com}
|
11
|
-
s.extra_rdoc_files = [
|
12
|
-
"LICENSE.txt",
|
13
|
-
"README.rdoc"
|
14
|
-
]
|
15
|
-
s.homepage = %q{http://github.com/ging/mailboxer}
|
16
|
-
s.licenses = ["MIT"]
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
s.rubygems_version = %q{1.3.7}
|
19
|
-
s.summary = %q{Messaging system for rails apps.}
|
20
|
-
s.files = `git ls-files`.split("\n")
|
21
|
-
|
22
|
-
s.add_development_dependency('rails', '~> 3.0.5')
|
23
|
-
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
|
24
|
-
if RUBY_VERSION < '1.9'
|
25
|
-
s.add_development_dependency('ruby-debug', '~> 0.10.3')
|
26
|
-
end
|
27
|
-
s.add_development_dependency(%q<rspec-rails>, [">= 2.0.0.beta"])
|
28
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
29
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
|
30
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
31
|
-
s.add_development_dependency('factory_girl', '~> 1.3.2')
|
32
|
-
s.add_development_dependency('forgery', '~> 0.3.6')
|
33
|
-
s.add_development_dependency('capybara', '~> 0.3.9')
|
34
34
|
end
|
35
35
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailboxer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 14
|
10
|
+
version: 0.0.14
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Eduardo Casanova Cuesta
|
@@ -15,13 +15,29 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-30 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: foreigner
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 57
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 9
|
33
|
+
- 1
|
34
|
+
version: 0.9.1
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rails
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
25
41
|
none: false
|
26
42
|
requirements:
|
27
43
|
- - ~>
|
@@ -33,11 +49,11 @@ dependencies:
|
|
33
49
|
- 5
|
34
50
|
version: 3.0.5
|
35
51
|
type: :development
|
36
|
-
version_requirements: *
|
52
|
+
version_requirements: *id002
|
37
53
|
- !ruby/object:Gem::Dependency
|
38
54
|
name: sqlite3-ruby
|
39
55
|
prerelease: false
|
40
|
-
requirement: &
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
57
|
none: false
|
42
58
|
requirements:
|
43
59
|
- - ">="
|
@@ -47,11 +63,11 @@ dependencies:
|
|
47
63
|
- 0
|
48
64
|
version: "0"
|
49
65
|
type: :development
|
50
|
-
version_requirements: *
|
66
|
+
version_requirements: *id003
|
51
67
|
- !ruby/object:Gem::Dependency
|
52
68
|
name: ruby-debug
|
53
69
|
prerelease: false
|
54
|
-
requirement: &
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
55
71
|
none: false
|
56
72
|
requirements:
|
57
73
|
- - ~>
|
@@ -63,75 +79,27 @@ dependencies:
|
|
63
79
|
- 3
|
64
80
|
version: 0.10.3
|
65
81
|
type: :development
|
66
|
-
version_requirements: *id003
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: rspec-rails
|
69
|
-
prerelease: false
|
70
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
hash: 31098209
|
76
|
-
segments:
|
77
|
-
- 2
|
78
|
-
- 0
|
79
|
-
- 0
|
80
|
-
- beta
|
81
|
-
version: 2.0.0.beta
|
82
|
-
type: :development
|
83
82
|
version_requirements: *id004
|
84
83
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
84
|
+
name: rspec-rails
|
86
85
|
prerelease: false
|
87
86
|
requirement: &id005 !ruby/object:Gem::Requirement
|
88
87
|
none: false
|
89
88
|
requirements:
|
90
89
|
- - ~>
|
91
90
|
- !ruby/object:Gem::Version
|
92
|
-
hash:
|
91
|
+
hash: 27
|
93
92
|
segments:
|
94
|
-
-
|
95
|
-
- 0
|
96
|
-
- 0
|
97
|
-
version: 1.0.0
|
98
|
-
type: :development
|
99
|
-
version_requirements: *id005
|
100
|
-
- !ruby/object:Gem::Dependency
|
101
|
-
name: jeweler
|
102
|
-
prerelease: false
|
103
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
104
|
-
none: false
|
105
|
-
requirements:
|
106
|
-
- - ~>
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
hash: 270495430
|
109
|
-
segments:
|
110
|
-
- 1
|
93
|
+
- 2
|
111
94
|
- 5
|
112
95
|
- 0
|
113
|
-
|
114
|
-
version: 1.5.0.pre3
|
96
|
+
version: 2.5.0
|
115
97
|
type: :development
|
116
|
-
version_requirements: *
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: rcov
|
119
|
-
prerelease: false
|
120
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
hash: 3
|
126
|
-
segments:
|
127
|
-
- 0
|
128
|
-
version: "0"
|
129
|
-
type: :development
|
130
|
-
version_requirements: *id007
|
98
|
+
version_requirements: *id005
|
131
99
|
- !ruby/object:Gem::Dependency
|
132
100
|
name: factory_girl
|
133
101
|
prerelease: false
|
134
|
-
requirement: &
|
102
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
135
103
|
none: false
|
136
104
|
requirements:
|
137
105
|
- - ~>
|
@@ -143,11 +111,11 @@ dependencies:
|
|
143
111
|
- 2
|
144
112
|
version: 1.3.2
|
145
113
|
type: :development
|
146
|
-
version_requirements: *
|
114
|
+
version_requirements: *id006
|
147
115
|
- !ruby/object:Gem::Dependency
|
148
116
|
name: forgery
|
149
117
|
prerelease: false
|
150
|
-
requirement: &
|
118
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
151
119
|
none: false
|
152
120
|
requirements:
|
153
121
|
- - ~>
|
@@ -159,11 +127,11 @@ dependencies:
|
|
159
127
|
- 6
|
160
128
|
version: 0.3.6
|
161
129
|
type: :development
|
162
|
-
version_requirements: *
|
130
|
+
version_requirements: *id007
|
163
131
|
- !ruby/object:Gem::Dependency
|
164
132
|
name: capybara
|
165
133
|
prerelease: false
|
166
|
-
requirement: &
|
134
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
167
135
|
none: false
|
168
136
|
requirements:
|
169
137
|
- - ~>
|
@@ -175,16 +143,15 @@ dependencies:
|
|
175
143
|
- 9
|
176
144
|
version: 0.3.9
|
177
145
|
type: :development
|
178
|
-
version_requirements: *
|
179
|
-
description:
|
146
|
+
version_requirements: *id008
|
147
|
+
description: A Rails engine that allows any model to act as messageable, permitting it interchange messages with any other messageable model.
|
180
148
|
email: ecasanovac@gmail.com
|
181
149
|
executables: []
|
182
150
|
|
183
151
|
extensions: []
|
184
152
|
|
185
|
-
extra_rdoc_files:
|
186
|
-
|
187
|
-
- README.rdoc
|
153
|
+
extra_rdoc_files: []
|
154
|
+
|
188
155
|
files:
|
189
156
|
- .gitignore
|
190
157
|
- .yardopts
|
@@ -260,8 +227,8 @@ files:
|
|
260
227
|
- spec/spec_helper.rb
|
261
228
|
has_rdoc: true
|
262
229
|
homepage: http://github.com/ging/mailboxer
|
263
|
-
licenses:
|
264
|
-
|
230
|
+
licenses: []
|
231
|
+
|
265
232
|
post_install_message:
|
266
233
|
rdoc_options: []
|
267
234
|
|