acts-as-messageable 0.4.5 → 0.4.6
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/.travis.yml +4 -1
- data/Gemfile +4 -4
- data/README.md +17 -1
- data/VERSION +1 -1
- data/acts-as-messageable.gemspec +16 -18
- data/lib/acts-as-messageable.rb +1 -1
- data/lib/acts-as-messageable/message.rb +17 -19
- data/lib/acts-as-messageable/model.rb +46 -26
- data/lib/acts-as-messageable/{acts-as-messageable.rb → railtie.rb} +0 -0
- data/lib/acts-as-messageable/relation.rb +3 -2
- data/spec/acts-as-messageable_spec.rb +74 -43
- data/spec/custom-class_spec.rb +1 -1
- data/spec/custom-required_spec.rb +1 -2
- data/spec/spec_helper.rb +5 -5
- data/spec/support/user.rb +1 -0
- metadata +58 -25
- data/rails/init.rb +0 -1
- data/spec/inheritance_spec.rb +0 -23
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -2,11 +2,11 @@ source "http://rubygems.org"
|
|
2
2
|
|
3
3
|
gem "activerecord", ">= 3.0.0"
|
4
4
|
gem "activesupport", ">= 3.0.0"
|
5
|
-
gem "ancestry", "~> 1.
|
5
|
+
gem "ancestry", "~> 1.3.0"
|
6
6
|
gem "railties", ">= 3.0.0"
|
7
7
|
|
8
8
|
group :development do
|
9
|
-
gem "rspec", "~> 2.
|
10
|
-
gem "jeweler", "~> 1.
|
11
|
-
gem "sqlite3
|
9
|
+
gem "rspec", "~> 2.11.0"
|
10
|
+
gem "jeweler", "~> 1.8.0"
|
11
|
+
gem "sqlite3"
|
12
12
|
end
|
data/README.md
CHANGED
@@ -41,7 +41,8 @@ Usage
|
|
41
41
|
class User < ActiveRecord::Base
|
42
42
|
acts_as_messageable :table_name => "table_with_messages", # default 'messages'
|
43
43
|
:required => :body # default [:topic, :body]
|
44
|
-
:class_name => "CustomMessages" # default "ActsAsMessageable::Message"
|
44
|
+
:class_name => "CustomMessages" # default "ActsAsMessageable::Message",
|
45
|
+
:dependent => :destroy # default :nullify
|
45
46
|
end
|
46
47
|
```
|
47
48
|
|
@@ -246,4 +247,19 @@ Message has been deleted **permanently**
|
|
246
247
|
@alice.delete_message(@message) # @alice delete @message
|
247
248
|
```
|
248
249
|
|
250
|
+
Restore message
|
251
|
+
===============
|
252
|
+
|
253
|
+
```ruby
|
254
|
+
@alice.deleted_messages.process do |m|
|
255
|
+
m.restore # @alice restore 'm' message from trash
|
256
|
+
end
|
257
|
+
```
|
258
|
+
|
259
|
+
## Restore message without context
|
260
|
+
|
261
|
+
```ruby
|
262
|
+
@alice.restore_message(@message) # @alice restore message from trash
|
263
|
+
```
|
264
|
+
|
249
265
|
Copyright © 2011 Piotr Niełacny (http://ruby-blog.pl), released under the MIT license
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.6
|
data/acts-as-messageable.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "acts-as-messageable"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Piotr Nielacny"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-09-27"
|
13
13
|
s.email = "piotr.nielacny@gmail.com"
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.md"
|
@@ -27,18 +27,16 @@ Gem::Specification.new do |s|
|
|
27
27
|
"gemfiles/Gemfile-3.1",
|
28
28
|
"gemfiles/Gemfile-3.2",
|
29
29
|
"lib/acts-as-messageable.rb",
|
30
|
-
"lib/acts-as-messageable/acts-as-messageable.rb",
|
31
30
|
"lib/acts-as-messageable/message.rb",
|
32
31
|
"lib/acts-as-messageable/model.rb",
|
32
|
+
"lib/acts-as-messageable/railtie.rb",
|
33
33
|
"lib/acts-as-messageable/relation.rb",
|
34
34
|
"lib/generators/acts-as-messageable/migration/migration_generator.rb",
|
35
35
|
"lib/generators/acts-as-messageable/migration/templates/migration.rb",
|
36
36
|
"lib/generators/acts-as-messageable/migration/templates/migration_permanent.rb",
|
37
|
-
"rails/init.rb",
|
38
37
|
"spec/acts-as-messageable_spec.rb",
|
39
38
|
"spec/custom-class_spec.rb",
|
40
39
|
"spec/custom-required_spec.rb",
|
41
|
-
"spec/inheritance_spec.rb",
|
42
40
|
"spec/spec_helper.rb",
|
43
41
|
"spec/support/admin.rb",
|
44
42
|
"spec/support/send_message.rb",
|
@@ -46,7 +44,7 @@ Gem::Specification.new do |s|
|
|
46
44
|
]
|
47
45
|
s.homepage = "http://github.com/LTe/acts-as-messageable"
|
48
46
|
s.require_paths = ["lib"]
|
49
|
-
s.rubygems_version = "1.8.
|
47
|
+
s.rubygems_version = "1.8.24"
|
50
48
|
s.summary = "Make user messageable!;-)"
|
51
49
|
|
52
50
|
if s.respond_to? :specification_version then
|
@@ -55,28 +53,28 @@ Gem::Specification.new do |s|
|
|
55
53
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
56
54
|
s.add_runtime_dependency(%q<activerecord>, [">= 3.0.0"])
|
57
55
|
s.add_runtime_dependency(%q<activesupport>, [">= 3.0.0"])
|
58
|
-
s.add_runtime_dependency(%q<ancestry>, ["~> 1.
|
56
|
+
s.add_runtime_dependency(%q<ancestry>, ["~> 1.3.0"])
|
59
57
|
s.add_runtime_dependency(%q<railties>, [">= 3.0.0"])
|
60
|
-
s.add_development_dependency(%q<rspec>, ["~> 2.
|
61
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.
|
62
|
-
s.add_development_dependency(%q<sqlite3
|
58
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.11.0"])
|
59
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.0"])
|
60
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
63
61
|
else
|
64
62
|
s.add_dependency(%q<activerecord>, [">= 3.0.0"])
|
65
63
|
s.add_dependency(%q<activesupport>, [">= 3.0.0"])
|
66
|
-
s.add_dependency(%q<ancestry>, ["~> 1.
|
64
|
+
s.add_dependency(%q<ancestry>, ["~> 1.3.0"])
|
67
65
|
s.add_dependency(%q<railties>, [">= 3.0.0"])
|
68
|
-
s.add_dependency(%q<rspec>, ["~> 2.
|
69
|
-
s.add_dependency(%q<jeweler>, ["~> 1.
|
70
|
-
s.add_dependency(%q<sqlite3
|
66
|
+
s.add_dependency(%q<rspec>, ["~> 2.11.0"])
|
67
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.0"])
|
68
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
71
69
|
end
|
72
70
|
else
|
73
71
|
s.add_dependency(%q<activerecord>, [">= 3.0.0"])
|
74
72
|
s.add_dependency(%q<activesupport>, [">= 3.0.0"])
|
75
|
-
s.add_dependency(%q<ancestry>, ["~> 1.
|
73
|
+
s.add_dependency(%q<ancestry>, ["~> 1.3.0"])
|
76
74
|
s.add_dependency(%q<railties>, [">= 3.0.0"])
|
77
|
-
s.add_dependency(%q<rspec>, ["~> 2.
|
78
|
-
s.add_dependency(%q<jeweler>, ["~> 1.
|
79
|
-
s.add_dependency(%q<sqlite3
|
75
|
+
s.add_dependency(%q<rspec>, ["~> 2.11.0"])
|
76
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.0"])
|
77
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
80
78
|
end
|
81
79
|
end
|
82
80
|
|
data/lib/acts-as-messageable.rb
CHANGED
@@ -21,7 +21,7 @@ module ActsAsMessageable
|
|
21
21
|
:created_at,
|
22
22
|
:updated_at
|
23
23
|
|
24
|
-
attr_accessor :removed
|
24
|
+
attr_accessor :removed, :restored
|
25
25
|
cattr_accessor :required
|
26
26
|
|
27
27
|
|
@@ -29,7 +29,10 @@ module ActsAsMessageable
|
|
29
29
|
default_scope order("created_at desc")
|
30
30
|
scope :are_from, lambda { |*args| where(:sent_messageable_id => args.first, :sent_messageable_type => args.first.class.name) }
|
31
31
|
scope :are_to, lambda { |*args| where(:received_messageable_id => args.first, :received_messageable_type => args.first.class.name) }
|
32
|
-
scope :with_id, lambda { |*args|
|
32
|
+
scope :with_id, lambda { |*args|
|
33
|
+
ActiveSupport::Deprecation.warn("Calling with_id is deprecated. Please use `find` instead.")
|
34
|
+
where(:id => args.first)
|
35
|
+
}
|
33
36
|
|
34
37
|
scope :connected_with, lambda { |*args| where("(sent_messageable_type = :sent_type and
|
35
38
|
sent_messageable_id = :sent_id and
|
@@ -47,7 +50,7 @@ module ActsAsMessageable
|
|
47
50
|
:s_perm_delete => false)
|
48
51
|
}
|
49
52
|
scope :readed, lambda { where(:opened => true) }
|
50
|
-
scope :
|
53
|
+
scope :unreaded, lambda { where(:opened => false) }
|
51
54
|
scope :deleted, lambda { where(:recipient_delete => true, :sender_delete => true) }
|
52
55
|
|
53
56
|
def open?
|
@@ -57,26 +60,17 @@ module ActsAsMessageable
|
|
57
60
|
def open
|
58
61
|
update_attributes!(:opened => true)
|
59
62
|
end
|
60
|
-
|
61
|
-
|
62
|
-
open
|
63
|
-
end
|
63
|
+
alias :mark_as_read :open
|
64
|
+
alias :read :open
|
64
65
|
|
65
66
|
def close
|
66
67
|
update_attributes!(:opened => false)
|
67
68
|
end
|
69
|
+
alias :mark_as_unread :close
|
70
|
+
alias :unread :close
|
68
71
|
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
def from
|
74
|
-
sent_messageable
|
75
|
-
end
|
76
|
-
|
77
|
-
def to
|
78
|
-
received_messageable
|
79
|
-
end
|
72
|
+
alias :from :sent_messageable
|
73
|
+
alias :to :received_messageable
|
80
74
|
|
81
75
|
def participant?(user)
|
82
76
|
(to == user) || (from == user)
|
@@ -89,7 +83,11 @@ module ActsAsMessageable
|
|
89
83
|
def delete
|
90
84
|
self.removed = true
|
91
85
|
end
|
92
|
-
|
86
|
+
|
87
|
+
def restore
|
88
|
+
self.restored = true
|
89
|
+
end
|
90
|
+
|
93
91
|
def reply(*args)
|
94
92
|
to.reply_to(self, *args)
|
95
93
|
end
|
@@ -10,15 +10,18 @@ module ActsAsMessageable
|
|
10
10
|
|
11
11
|
# Method make ActiveRecord::Base object messageable
|
12
12
|
# @param [Symbol] :table_name - table name for messages
|
13
|
+
# @param [String] :class_name - message class name
|
14
|
+
# @param [Array, Symbol] :required - required fields in message
|
15
|
+
# @param [Symbol] :dependent - dependent option from ActiveRecord has_many method
|
13
16
|
def acts_as_messageable(options = {})
|
14
17
|
has_many :received_messages_relation,
|
15
18
|
:as => :received_messageable,
|
16
19
|
:class_name => options[:class_name] || "ActsAsMessageable::Message",
|
17
|
-
:dependent => :nullify
|
20
|
+
:dependent => options[:dependent] || :nullify
|
18
21
|
has_many :sent_messages_relation,
|
19
22
|
:as => :sent_messageable,
|
20
23
|
:class_name => options[:class_name] || "ActsAsMessageable::Message",
|
21
|
-
:dependent => :nullify
|
24
|
+
:dependent => options[:dependent] || :nullify
|
22
25
|
|
23
26
|
self.messages_class_name = (options[:class_name] || "ActsAsMessageable::Message").constantize
|
24
27
|
|
@@ -29,18 +32,14 @@ module ActsAsMessageable
|
|
29
32
|
ActiveSupport::Deprecation.warn("Calling set_table_name is deprecated. Please use `self.table_name = 'the_name'` instead.")
|
30
33
|
end
|
31
34
|
|
32
|
-
|
33
|
-
self.messages_class_name.required = [options[:required]]
|
34
|
-
elsif options[:required].is_a? Array
|
35
|
-
self.messages_class_name.required = options[:required]
|
36
|
-
else
|
37
|
-
self.messages_class_name.required = [:topic, :body]
|
38
|
-
end
|
39
|
-
|
35
|
+
self.messages_class_name.required = Array.wrap(options[:required] || [:topic, :body])
|
40
36
|
self.messages_class_name.validates_presence_of self.messages_class_name.required
|
37
|
+
|
41
38
|
include ActsAsMessageable::Model::InstanceMethods
|
42
39
|
end
|
43
40
|
|
41
|
+
# Method recognize real object class
|
42
|
+
# @return [ActiveRecord::Base] class or relation object
|
44
43
|
def resolve_active_record_ancestor
|
45
44
|
self.reflect_on_association(:received_messages_relation).active_record
|
46
45
|
end
|
@@ -48,7 +47,6 @@ module ActsAsMessageable
|
|
48
47
|
end
|
49
48
|
|
50
49
|
module InstanceMethods
|
51
|
-
# Get all messages connected with user
|
52
50
|
# @return [ActiveRecord::Relation] all messages connected with user
|
53
51
|
def messages(trash = false)
|
54
52
|
result = self.class.messages_class_name.connected_with(self, trash)
|
@@ -57,6 +55,7 @@ module ActsAsMessageable
|
|
57
55
|
result
|
58
56
|
end
|
59
57
|
|
58
|
+
# @return [ActiveRecord::Relation] returns all messages from inbox
|
60
59
|
def received_messages
|
61
60
|
result = received_messages_relation.scoped.where(:recipient_delete => false)
|
62
61
|
result.relation_context = self
|
@@ -64,6 +63,7 @@ module ActsAsMessageable
|
|
64
63
|
result
|
65
64
|
end
|
66
65
|
|
66
|
+
# @return [ActiveRecord::Relation] returns all messages from outbox
|
67
67
|
def sent_messages
|
68
68
|
result = sent_messages_relation.scoped.where(:sender_delete => false)
|
69
69
|
result.relation_context = self
|
@@ -71,6 +71,7 @@ module ActsAsMessageable
|
|
71
71
|
result
|
72
72
|
end
|
73
73
|
|
74
|
+
# @return [ActiveRecord::Relation] returns all messages from trash
|
74
75
|
def deleted_messages
|
75
76
|
messages true
|
76
77
|
end
|
@@ -82,9 +83,10 @@ module ActsAsMessageable
|
|
82
83
|
#
|
83
84
|
# @return [ActsAsMessageable::Message] the message object
|
84
85
|
def send_message(to, *args)
|
86
|
+
message_attributes = {}
|
87
|
+
|
85
88
|
case args.first
|
86
89
|
when String
|
87
|
-
message_attributes = {}
|
88
90
|
self.class.messages_class_name.required.each_with_index do |attribute, index|
|
89
91
|
message_attributes[attribute] = args[index]
|
90
92
|
end
|
@@ -100,10 +102,16 @@ module ActsAsMessageable
|
|
100
102
|
message
|
101
103
|
end
|
102
104
|
|
105
|
+
# Reply to given message
|
106
|
+
# @param [ActsAsMessageable::Message] message
|
107
|
+
# @param [String] topic
|
108
|
+
# @param [String] body
|
109
|
+
#
|
110
|
+
# @return [ActsAsMessageable::Message] a message that is a response to a given message
|
103
111
|
def reply_to(message, *args)
|
104
112
|
current_user = self
|
105
|
-
|
106
|
-
if message.participant?(current_user)
|
113
|
+
|
114
|
+
if message.participant?(current_user)
|
107
115
|
reply_message = send_message(message.from, *args)
|
108
116
|
reply_message.parent = message
|
109
117
|
reply_message.save
|
@@ -112,25 +120,37 @@ module ActsAsMessageable
|
|
112
120
|
end
|
113
121
|
end
|
114
122
|
|
123
|
+
# Mark message as deleted
|
115
124
|
def delete_message(message)
|
116
125
|
current_user = self
|
117
126
|
|
118
|
-
|
119
|
-
|
120
|
-
message.
|
127
|
+
case current_user
|
128
|
+
when message.to
|
129
|
+
attribute = message.recipient_delete ? :recipient_permanent_delete : :recipient_delete
|
130
|
+
when message.from
|
131
|
+
attribute = message.sender_delete ? :sender_permanent_delete : :sender_delete
|
121
132
|
else
|
122
|
-
|
123
|
-
end
|
124
|
-
elsif message.sent_messageable == current_user
|
125
|
-
unless message.sender_delete
|
126
|
-
message.update_attributes!(:sender_delete => true)
|
127
|
-
else
|
128
|
-
message.update_attributes!(:sender_permanent_delete => true)
|
129
|
-
end
|
133
|
+
raise "#{current_user} can't delete this message"
|
130
134
|
end
|
135
|
+
|
136
|
+
message.update_attributes!(attribute => true)
|
131
137
|
end
|
132
138
|
|
133
|
-
|
139
|
+
# Mark message as restored
|
140
|
+
def restore_message(message)
|
141
|
+
current_user = self
|
134
142
|
|
143
|
+
case current_user
|
144
|
+
when message.to
|
145
|
+
attribute = :recipient_delete
|
146
|
+
when message.from
|
147
|
+
attribute = :sender_delete
|
148
|
+
else
|
149
|
+
raise "#{current_user} can't delete this message"
|
150
|
+
end
|
151
|
+
|
152
|
+
message.update_attributes!(attribute => false)
|
153
|
+
end
|
154
|
+
end
|
135
155
|
end
|
136
156
|
end
|
File without changes
|
@@ -5,8 +5,9 @@ module ActsAsMessageable
|
|
5
5
|
def process(context = self.relation_context, &block)
|
6
6
|
self.each do |message|
|
7
7
|
block.call(message) if block_given?
|
8
|
-
context.delete_message(message)
|
8
|
+
context.delete_message(message) if message.removed
|
9
|
+
context.restore_message(message) if message.restored
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
12
|
-
end
|
13
|
+
end
|
@@ -1,76 +1,80 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
class User < ActiveRecord::Base
|
4
|
-
acts_as_messageable
|
5
|
-
end
|
1
|
+
require 'spec_helper'
|
6
2
|
|
7
3
|
describe "ActsAsMessageable" do
|
8
|
-
|
9
|
-
before(:all) do
|
4
|
+
before do
|
10
5
|
User.acts_as_messageable
|
11
|
-
|
12
|
-
|
13
|
-
describe "prepare for specs" do
|
14
|
-
it "should be 4 users in database" do
|
15
|
-
User.count.should == 4
|
16
|
-
end
|
6
|
+
@message = send_message
|
17
7
|
end
|
18
8
|
|
19
9
|
describe "send messages" do
|
20
10
|
it "alice should have one message" do
|
21
|
-
send_message
|
22
11
|
@alice.messages.count.should == 1
|
23
12
|
end
|
24
13
|
|
25
14
|
it "alice should have one message from bob" do
|
26
|
-
send_message
|
27
15
|
@alice.messages.are_from(@bob).count.should == 1
|
28
16
|
end
|
29
17
|
|
30
18
|
it "bob should have one message" do
|
31
|
-
send_message
|
32
19
|
@bob.messages.count.should == 1
|
33
20
|
end
|
34
21
|
|
35
22
|
it "bob should have one message to alice in outbox" do
|
36
|
-
send_message
|
37
23
|
@bob.sent_messages.are_to(@alice).count.should == 1
|
38
24
|
end
|
39
25
|
|
40
26
|
it "bob should have one open message from alice" do
|
41
|
-
send_message
|
42
27
|
@alice.messages.are_from(@bob).process { |m| m.open }
|
43
28
|
@alice.messages.readed.count.should == 1
|
44
29
|
end
|
45
30
|
end
|
46
|
-
|
31
|
+
|
32
|
+
describe "inheritance models" do
|
33
|
+
it "men send message to alice" do
|
34
|
+
send_message(@men, @alice)
|
35
|
+
@men.sent_messages.size.should be_equal(1)
|
36
|
+
@alice.received_messages.size.should be_equal(2)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "messages method should receive all messages connected with user" do
|
40
|
+
send_message(@men, @alice)
|
41
|
+
@men.messages.size.should be_equal(1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "men send message and receive from alice" do
|
45
|
+
send_message(@men, @alice)
|
46
|
+
send_message(@alice, @men)
|
47
|
+
|
48
|
+
@men.messages.size.should be_equal(2)
|
49
|
+
@men.sent_messages.size.should be_equal(1)
|
50
|
+
@men.received_messages.size.should be_equal(1)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
47
54
|
describe "reply to messages" do
|
48
55
|
it "pat should not be able to reply to a message from bob to alice" do
|
49
|
-
@message = send_message
|
50
56
|
@reply_message = @pat.reply_to(@message, "Re: Topic", "Body")
|
51
57
|
@reply_message.should be_nil
|
52
58
|
end
|
53
|
-
|
59
|
+
|
54
60
|
it "alice should be able to reply to a message from bob to alice" do
|
55
|
-
@message = send_message
|
56
61
|
@reply_message = @alice.reply_to(@message, "Re: Topic", "Body")
|
57
62
|
@reply_message.should_not be_nil
|
58
|
-
@bob.messages.are_from(@alice).count.should == 1
|
59
|
-
@alice.sent_messages.are_to(@bob).count.should == 1
|
60
|
-
end
|
63
|
+
@bob.messages.are_from(@alice).count.should == 1
|
64
|
+
@alice.sent_messages.are_to(@bob).count.should == 1
|
65
|
+
end
|
61
66
|
|
62
67
|
it "alice should be able to reply to a message using the message object" do
|
63
|
-
@message = send_message
|
64
68
|
@reply_message = @message.reply("Re: Topic", "Body")
|
65
|
-
@reply_message.should_not be_nil
|
66
|
-
@bob.messages.are_from(@alice).count.should == 1
|
67
|
-
@alice.sent_messages.are_to(@bob).count.should == 1
|
69
|
+
@reply_message.should_not be_nil
|
70
|
+
@bob.messages.are_from(@alice).count.should == 1
|
71
|
+
@alice.sent_messages.are_to(@bob).count.should == 1
|
68
72
|
end
|
69
73
|
end
|
70
74
|
|
71
75
|
describe "delete messages" do
|
76
|
+
|
72
77
|
it "bob should have one deleted message from alice" do
|
73
|
-
send_message
|
74
78
|
@bob.messages.process do |m|
|
75
79
|
m.delete
|
76
80
|
end
|
@@ -85,8 +89,6 @@ describe "ActsAsMessageable" do
|
|
85
89
|
end
|
86
90
|
|
87
91
|
it "received_messages and sent_messages should work with .process method" do
|
88
|
-
@message = send_message
|
89
|
-
|
90
92
|
@bob.sent_messages.count.should == 1
|
91
93
|
@alice.received_messages.count.should == 1
|
92
94
|
|
@@ -99,7 +101,6 @@ describe "ActsAsMessageable" do
|
|
99
101
|
end
|
100
102
|
|
101
103
|
it "message should permanent delete" do
|
102
|
-
@message = send_message
|
103
104
|
@alice.messages.process { |m| m.delete }
|
104
105
|
@alice.messages.count.should == 0
|
105
106
|
|
@@ -112,14 +113,47 @@ describe "ActsAsMessageable" do
|
|
112
113
|
|
113
114
|
@bob.sent_messages.count.should == 1
|
114
115
|
end
|
116
|
+
|
117
|
+
it "pat should not able to delete message" do
|
118
|
+
lambda { @pat.delete_message(@message) }.should raise_error
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "restore message" do
|
123
|
+
it "alice should restore message" do
|
124
|
+
@alice.received_messages.process { |m| m.delete }
|
125
|
+
@alice.restore_message(@message.reload)
|
126
|
+
@alice.received_messages.count.should == 1
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should works with relation" do
|
130
|
+
@alice.received_messages.process { |m| m.delete }
|
131
|
+
@alice.received_messages.count.should == 0
|
132
|
+
@alice.deleted_messages.process { |m| m.restore }
|
133
|
+
@alice.received_messages.count.should == 1
|
134
|
+
end
|
135
|
+
|
136
|
+
it "pat should not able to restore message" do
|
137
|
+
lambda { @pat.restore_message(@message) }.should raise_error
|
138
|
+
end
|
115
139
|
end
|
116
140
|
|
117
141
|
describe "read/unread feature" do
|
118
142
|
it "alice should have one unread message from bob" do
|
119
|
-
|
120
|
-
@alice.messages.are_from(@bob).unread.count.should == 1
|
143
|
+
@alice.messages.are_from(@bob).unreaded.count.should == 1
|
121
144
|
@alice.messages.are_from(@bob).readed.count.should == 0
|
122
145
|
end
|
146
|
+
|
147
|
+
it "alice should able to read message from bob" do
|
148
|
+
@alice.messages.are_from(@bob).first.read
|
149
|
+
@alice.messages.are_from(@bob).unreaded.count.should == 0
|
150
|
+
end
|
151
|
+
|
152
|
+
it "alice should able to unread message from bob" do
|
153
|
+
@alice.messages.are_from(@bob).first.read
|
154
|
+
@alice.messages.are_from(@bob).first.unread
|
155
|
+
@alice.messages.are_from(@bob).unreaded.count.should == 1
|
156
|
+
end
|
123
157
|
end
|
124
158
|
|
125
159
|
it "should be in database message with id ..." do
|
@@ -127,15 +161,17 @@ describe "ActsAsMessageable" do
|
|
127
161
|
@bob.messages.with_id(message_id).count.should == 1
|
128
162
|
end
|
129
163
|
|
164
|
+
it "finds proper message" do
|
165
|
+
@bob.messages.find(@message.id) == @message
|
166
|
+
end
|
167
|
+
|
130
168
|
it "message should have proper topic" do
|
131
|
-
send_message
|
132
169
|
@bob.messages.count.should == 1
|
133
170
|
@bob.messages.first.topic == "Topic"
|
134
171
|
end
|
135
172
|
|
136
173
|
describe "conversation" do
|
137
174
|
it "bob send message to alice, and alice reply to bob message and show proper tree" do
|
138
|
-
@message = send_message
|
139
175
|
@reply_message = @alice.reply_to(@message, "Re: Topic", "Body")
|
140
176
|
|
141
177
|
@reply_message.conversation.size.should == 2
|
@@ -144,7 +180,6 @@ describe "ActsAsMessageable" do
|
|
144
180
|
end
|
145
181
|
|
146
182
|
it "bob send message to alice, alice answer, and bob answer for alice answer" do
|
147
|
-
@message = send_message
|
148
183
|
@reply_message = @alice.reply_to(@message, "Re: Topic", "Body")
|
149
184
|
@reply_reply_message = @bob.reply_to(@reply_message, "Re: Re: Topic", "Body")
|
150
185
|
|
@@ -166,18 +201,15 @@ describe "ActsAsMessageable" do
|
|
166
201
|
end
|
167
202
|
|
168
203
|
it "messages should return in right order :created_at" do
|
169
|
-
@message = send_message
|
170
204
|
@message = send_message(@bob, @alice, "Example", "Example Body")
|
171
205
|
@alice.messages.last.body.should == "Body"
|
172
206
|
end
|
173
207
|
|
174
208
|
it "received_messages should return ActiveRecord::Relation" do
|
175
|
-
send_message
|
176
209
|
@alice.received_messages.class.should == ActiveRecord::Relation
|
177
210
|
end
|
178
211
|
|
179
212
|
it "sent_messages should return ActiveRecord::Relation" do
|
180
|
-
send_message
|
181
213
|
@bob.sent_messages.class.should == ActiveRecord::Relation
|
182
214
|
end
|
183
215
|
|
@@ -188,7 +220,7 @@ describe "ActsAsMessageable" do
|
|
188
220
|
|
189
221
|
it "bob send message to admin (different model) with the same id" do
|
190
222
|
@bob.send_message(@alice, "hello", "alice")
|
191
|
-
@alice.messages.are_to(@alice).size.should be_equal(
|
223
|
+
@alice.messages.are_to(@alice).size.should be_equal(2)
|
192
224
|
@alice.messages.are_to(@admin).size.should be_equal(0)
|
193
225
|
end
|
194
226
|
|
@@ -197,7 +229,6 @@ describe "ActsAsMessageable" do
|
|
197
229
|
@bob.messages.are_from(@admin).size.should be_equal(1)
|
198
230
|
@bob.messages.are_from(@alice).size.should be_equal(0)
|
199
231
|
end
|
200
|
-
|
201
232
|
end
|
202
233
|
|
203
234
|
end
|
data/spec/custom-class_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "custom require" do
|
4
4
|
before(:each) do
|
@@ -47,5 +47,4 @@ describe "custom require" do
|
|
47
47
|
@alice.received_messages.first.body.should == "Hi Alice!"
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|
51
50
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -12,11 +12,11 @@ RSpec.configure do |config|
|
|
12
12
|
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
13
13
|
create_database
|
14
14
|
|
15
|
-
@alice = User.create
|
16
|
-
@bob = User.create
|
17
|
-
@pat = User.create
|
18
|
-
@admin = Admin.create :email
|
19
|
-
@men = Men.create
|
15
|
+
@alice = User.create :email => "alice@example.com"
|
16
|
+
@bob = User.create :email => "bob@example.com"
|
17
|
+
@pat = User.create :email => "pat@example.com"
|
18
|
+
@admin = Admin.create :email => "admin@example.com"
|
19
|
+
@men = Men.create :email => "men@example.com"
|
20
20
|
end
|
21
21
|
|
22
22
|
config.after(:all) do
|
data/spec/support/user.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts-as-messageable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.0.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: activesupport
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,21 +37,31 @@ dependencies:
|
|
32
37
|
version: 3.0.0
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 3.0.0
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: ancestry
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
42
52
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.
|
53
|
+
version: 1.3.0
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.3.0
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: railties
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,32 +69,47 @@ dependencies:
|
|
54
69
|
version: 3.0.0
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 3.0.0
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: rspec
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
64
84
|
- !ruby/object:Gem::Version
|
65
|
-
version: 2.
|
85
|
+
version: 2.11.0
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.11.0
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: jeweler
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ~>
|
75
100
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.
|
101
|
+
version: 1.8.0
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.8.0
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
|
-
name: sqlite3
|
82
|
-
requirement:
|
111
|
+
name: sqlite3
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,7 +117,12 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
description:
|
92
127
|
email: piotr.nielacny@gmail.com
|
93
128
|
executables: []
|
@@ -107,18 +142,16 @@ files:
|
|
107
142
|
- gemfiles/Gemfile-3.1
|
108
143
|
- gemfiles/Gemfile-3.2
|
109
144
|
- lib/acts-as-messageable.rb
|
110
|
-
- lib/acts-as-messageable/acts-as-messageable.rb
|
111
145
|
- lib/acts-as-messageable/message.rb
|
112
146
|
- lib/acts-as-messageable/model.rb
|
147
|
+
- lib/acts-as-messageable/railtie.rb
|
113
148
|
- lib/acts-as-messageable/relation.rb
|
114
149
|
- lib/generators/acts-as-messageable/migration/migration_generator.rb
|
115
150
|
- lib/generators/acts-as-messageable/migration/templates/migration.rb
|
116
151
|
- lib/generators/acts-as-messageable/migration/templates/migration_permanent.rb
|
117
|
-
- rails/init.rb
|
118
152
|
- spec/acts-as-messageable_spec.rb
|
119
153
|
- spec/custom-class_spec.rb
|
120
154
|
- spec/custom-required_spec.rb
|
121
|
-
- spec/inheritance_spec.rb
|
122
155
|
- spec/spec_helper.rb
|
123
156
|
- spec/support/admin.rb
|
124
157
|
- spec/support/send_message.rb
|
@@ -137,7 +170,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
170
|
version: '0'
|
138
171
|
segments:
|
139
172
|
- 0
|
140
|
-
hash:
|
173
|
+
hash: 2981709725326590203
|
141
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
175
|
none: false
|
143
176
|
requirements:
|
@@ -146,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
179
|
version: '0'
|
147
180
|
requirements: []
|
148
181
|
rubyforge_project:
|
149
|
-
rubygems_version: 1.8.
|
182
|
+
rubygems_version: 1.8.24
|
150
183
|
signing_key:
|
151
184
|
specification_version: 3
|
152
185
|
summary: Make user messageable!;-)
|
data/rails/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'acts-as-messageable'
|
data/spec/inheritance_spec.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
describe "inheritance models" do
|
4
|
-
it "men send message to alice" do
|
5
|
-
send_message(@men, @alice)
|
6
|
-
@men.sent_messages.size.should be_equal(1)
|
7
|
-
@alice.received_messages.size.should be_equal(1)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "messages method should receive all messages connected with user" do
|
11
|
-
send_message(@men, @alice)
|
12
|
-
@men.messages.size.should be_equal(1)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "men send message and receive from alice" do
|
16
|
-
send_message(@men, @alice)
|
17
|
-
send_message(@alice, @men)
|
18
|
-
|
19
|
-
@men.messages.size.should be_equal(2)
|
20
|
-
@men.sent_messages.size.should be_equal(1)
|
21
|
-
@men.received_messages.size.should be_equal(1)
|
22
|
-
end
|
23
|
-
end
|