mailboxer 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 :recipients, :subject, :body
6
+ validates_presence_of :subject
8
7
 
9
- before_create :clean
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 @recipients.blank? and self.last_message
53
+ if self.last_message
56
54
  recps = self.last_message.recipients
57
55
  recps = recps.is_a?(Array) ? recps : [recps]
58
- return recps
56
+ return recps
59
57
  end
60
- return @recipients
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
@@ -1,88 +1,64 @@
1
1
  class Mailbox
2
- attr_accessor :type
3
- attr_reader :messageable
4
-
5
- def initialize(recipient, box = :all)
6
- @messageable = recipient
7
- @type = box
8
- end
9
- #sets the mailbox type to the symbol corresponding to the given val.
10
- def type=(val)
11
- @type = val.to_sym
12
- end
13
-
14
- def conversations(options = {})
15
- conv = Conversation.participant(@messageable)
16
-
17
- if options[:mailbox_type].present?
18
- case options[:mailbox_type]
19
- when 'inbox'
20
- conv = Conversation.inbox(@messageable)
21
- when 'sentbox'
22
- conv = Conversation.sentbox(@messageable)
23
- when 'trash'
24
- conv = Conversation.trash(@messageable)
25
- end
26
- end
27
-
28
- if (options[:read].present? and options[:read]==false) or (options[:unread].present? and options[:unread]==true)
29
- conv = conv.unread(@messageable)
30
- end
31
-
32
- return conv.uniq
33
- end
34
-
35
- def inbox(options={})
36
- options = options.merge(:mailbox_type => 'inbox')
37
- return self.conversations(options)
38
- end
39
-
40
- def sentbox(options={})
41
- options = options.merge(:mailbox_type => 'sentbox')
42
- return self.conversations(options)
43
- end
44
-
45
- def trash(options={})
46
- options = options.merge(:mailbox_type => 'trash')
47
- return self.conversations(options)
48
- end
49
-
50
- def receipts(options = {})
51
- return Receipt.where(options).receiver(@messageable)
52
- end
53
-
54
- def [](mailbox_type)
55
- self.type = mailbox_type
56
- return self
57
- end
58
-
59
- def <<(msg)
60
- return self.add(msg)
61
- end
62
-
63
- def add(msg)
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
@@ -1,13 +1,12 @@
1
1
  class Message < ActiveRecord::Base
2
- #any additional info that needs to be sent in a message (ex. I use these to determine request types)
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(mailbox_type, should_clean = true)
21
+ def deliver(reply = false, should_clean = true)
23
22
  self.clean if should_clean
24
- self.save
23
+ temp_receipts = Array.new
24
+ #Receiver receipts
25
25
  self.recipients.each do |r|
26
- r.mailbox[mailbox_type] << self
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
- self.recipients=nil
29
- self.on_deliver_callback.call(self, mailbox_type) unless self.on_deliver_callback.nil?
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
@@ -1,71 +1,85 @@
1
1
  class Receipt < ActiveRecord::Base
2
- belongs_to :message
3
- has_one :conversation, :through => :message
4
- belongs_to :receiver, :polymorphic => :true
5
- scope :receiver, lambda { |receiver|
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
- scope :message, lambda { |message|
11
+ scope :message, lambda { |message|
9
12
  where(:message_id => message.id)
10
13
  }
11
- scope :conversation, lambda { |conversation|
14
+ scope :conversation, lambda { |conversation|
12
15
  joins(:message).where('messages.conversation_id' => conversation.id)
13
16
  }
14
- scope :sentbox, where(:mailbox_type => "sentbox")
15
- scope :inbox, where(:mailbox_type => "inbox")
16
- scope :trash, where(:trashed => true)
17
- scope :not_trash, where(:trashed => false)
18
- scope :read, where(:read => true)
19
- scope :unread, where(:read => false)
20
-
21
- class << self
22
- def mark_as_read(options={})
23
- where(options).update_all(:read => true)
24
- end
25
-
26
- def mark_as_unread(options={})
27
- where(options).update_all(:read => false)
28
- end
29
-
30
- def move_to_trash(options={})
31
- where(options).update_all(:trashed => true)
32
- end
33
-
34
- def untrash(options={})
35
- where(options).update_all(:trashed => false)
36
- end
37
-
38
- def move_to_inbox(options={})
39
- where(options).update_all(:mailbox_type => :inbox, :trashed => false)
40
- end
41
-
42
- def move_to_sentbox(options={})
43
- where(options).update_all(:mailbox_type => :sentbox, :trashed => false)
44
- end
45
- end
46
-
47
- def mark_as_read
48
- update_attributes(:read => true)
49
- end
50
-
51
- def mark_as_unread
52
- update_attributes(:read => false)
53
- end
54
-
55
- def move_to_trash
56
- update_attributes(:trashed => true)
57
- end
58
-
59
- def untrash
60
- update_attributes(:trashed => false)
61
- end
62
-
63
- def move_to_inbox
64
- update_attributes(:mailbox_type => :inbox, :trashed => false)
65
- end
66
-
67
- def move_to_sentbox
68
- update_attributes(:mailbox_type => :sentbox, :trashed => false)
69
- end
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.create!({:recipients => recipients, :body => msg_body, :subject => subject})
26
- message = Message.create({:sender => self, :conversation => convo, :body => msg_body, :subject => subject})
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(:inbox)
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.create({:sender => self, :conversation => conversation, :body => reply_body, :subject => subject})
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(:inbox)
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
- s.name = "mailboxer"
4
- s.version = "0.0.13"
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: 5
4
+ hash: 3
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 13
10
- version: 0.0.13
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-26 00:00:00 +01:00
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: rails
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: *id001
52
+ version_requirements: *id002
37
53
  - !ruby/object:Gem::Dependency
38
54
  name: sqlite3-ruby
39
55
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::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: *id002
66
+ version_requirements: *id003
51
67
  - !ruby/object:Gem::Dependency
52
68
  name: ruby-debug
53
69
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::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: bundler
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: 23
91
+ hash: 27
93
92
  segments:
94
- - 1
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
- - pre3
114
- version: 1.5.0.pre3
96
+ version: 2.5.0
115
97
  type: :development
116
- version_requirements: *id006
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: &id008 !ruby/object:Gem::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: *id008
114
+ version_requirements: *id006
147
115
  - !ruby/object:Gem::Dependency
148
116
  name: forgery
149
117
  prerelease: false
150
- requirement: &id009 !ruby/object:Gem::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: *id009
130
+ version_requirements: *id007
163
131
  - !ruby/object:Gem::Dependency
164
132
  name: capybara
165
133
  prerelease: false
166
- requirement: &id010 !ruby/object:Gem::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: *id010
179
- description: "A Rails engine that allows any model to act as messageable, permitting it interchange messages with any other messageable model. "
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
- - LICENSE.txt
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
- - MIT
230
+ licenses: []
231
+
265
232
  post_install_message:
266
233
  rdoc_options: []
267
234