acts-as-messageable 0.4.8 → 0.4.9
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.
- checksums.yaml +7 -0
- data/.coveralls.yml +0 -0
- data/.rspec +1 -1
- data/.travis.yml +14 -2
- data/Gemfile +13 -12
- data/Gemfile.lock +121 -0
- data/README.md +360 -278
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/acts-as-messageable.gemspec +21 -10
- data/gemfiles/Gemfile-3.0 +1 -0
- data/gemfiles/Gemfile-3.1 +1 -0
- data/gemfiles/Gemfile-3.2 +1 -0
- data/gemfiles/Gemfile-4.0 +6 -0
- data/lib/acts-as-messageable.rb +18 -7
- data/lib/acts-as-messageable/message.rb +62 -97
- data/lib/acts-as-messageable/model.rb +181 -165
- data/lib/acts-as-messageable/rails3.rb +15 -0
- data/lib/acts-as-messageable/rails4.rb +19 -0
- data/lib/acts-as-messageable/scopes.rb +37 -0
- data/spec/acts-as-messageable_spec.rb +293 -266
- data/spec/custom-class_spec.rb +11 -1
- data/spec/group-messages_spec.rb +28 -0
- data/spec/spec_helper.rb +81 -65
- data/spec/support/admin.rb +3 -3
- data/spec/support/send_message.rb +1 -1
- data/spec/support/user.rb +6 -7
- metadata +40 -38
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 87ccd83bc344a8c0cde5cd004dc44c60256e3e9c
|
4
|
+
data.tar.gz: 93736c5ad1616657ec98ae3c2f02550ec9d00bca
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cde01b879a3aaecce67535976c81e501a6f74f8c9a268c4e66f11a10af9f9e80d53f92d594341f2666a6343efac9ef78c2a6a10c485428e7d0860560fce44a70
|
7
|
+
data.tar.gz: bf849f1ada3703bd7a0c86a897c82296b9ef9034c2a22edffddf0c3eb3baf7a53274822e113dc7ade828d8dac984351491d7bf4ea24bfb59e1dded47a36819e8
|
data/.coveralls.yml
ADDED
File without changes
|
data/.rspec
CHANGED
@@ -1 +1 @@
|
|
1
|
-
-fd -color
|
1
|
+
-fd -color
|
data/.travis.yml
CHANGED
@@ -1,13 +1,25 @@
|
|
1
1
|
rvm:
|
2
2
|
- 1.8.7
|
3
|
-
- 1.9.2
|
4
3
|
- 1.9.3
|
4
|
+
- 2.0.0
|
5
5
|
- ruby-head
|
6
6
|
- ree
|
7
7
|
- rbx-head
|
8
8
|
- rbx-head-d19
|
9
9
|
gemfile:
|
10
|
-
- Gemfile
|
11
10
|
- gemfiles/Gemfile-3.0
|
12
11
|
- gemfiles/Gemfile-3.1
|
13
12
|
- gemfiles/Gemfile-3.2
|
13
|
+
- gemfiles/Gemfile-4.0
|
14
|
+
matrix:
|
15
|
+
allow_failures:
|
16
|
+
- rvm: ruby-head
|
17
|
+
- rvm: rbx-head
|
18
|
+
- rvm: rbx-head-d19
|
19
|
+
exclude:
|
20
|
+
- rvm: 1.8.7
|
21
|
+
gemfile: gemfiles/Gemfile-4.0
|
22
|
+
- rvm: ree
|
23
|
+
gemfile: gemfiles/Gemfile-4.0
|
24
|
+
- rvm: rbx-head
|
25
|
+
gemfile: gemfiles/Gemfile-4.0
|
data/Gemfile
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
-
source "http://rubygems.org"
|
2
|
-
|
3
|
-
gem "activerecord", ">= 3.0.0"
|
4
|
-
gem "activesupport", ">= 3.0.0"
|
5
|
-
gem "ancestry", "
|
6
|
-
gem "railties", ">= 3.0.0"
|
7
|
-
|
8
|
-
group :development do
|
9
|
-
gem "rspec", "~> 2.
|
10
|
-
gem "jeweler", "~> 1.8.0"
|
11
|
-
gem "sqlite3"
|
12
|
-
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
gem "activerecord", ">= 3.0.0"
|
4
|
+
gem "activesupport", ">= 3.0.0"
|
5
|
+
gem "ancestry", ">= 1.3.0"
|
6
|
+
gem "railties", ">= 3.0.0"
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem "rspec", "~> 2.0"
|
10
|
+
gem "jeweler", "~> 1.8.0"
|
11
|
+
gem "sqlite3"
|
12
|
+
gem "coveralls", :require => false
|
13
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
actionpack (4.0.0)
|
5
|
+
activesupport (= 4.0.0)
|
6
|
+
builder (~> 3.1.0)
|
7
|
+
erubis (~> 2.7.0)
|
8
|
+
rack (~> 1.5.2)
|
9
|
+
rack-test (~> 0.6.2)
|
10
|
+
activemodel (4.0.0)
|
11
|
+
activesupport (= 4.0.0)
|
12
|
+
builder (~> 3.1.0)
|
13
|
+
activerecord (4.0.0)
|
14
|
+
activemodel (= 4.0.0)
|
15
|
+
activerecord-deprecated_finders (~> 1.0.2)
|
16
|
+
activesupport (= 4.0.0)
|
17
|
+
arel (~> 4.0.0)
|
18
|
+
activerecord-deprecated_finders (1.0.3)
|
19
|
+
activesupport (4.0.0)
|
20
|
+
i18n (~> 0.6, >= 0.6.4)
|
21
|
+
minitest (~> 4.2)
|
22
|
+
multi_json (~> 1.3)
|
23
|
+
thread_safe (~> 0.1)
|
24
|
+
tzinfo (~> 0.3.37)
|
25
|
+
addressable (2.3.5)
|
26
|
+
ancestry (2.0.0)
|
27
|
+
activerecord (>= 3.0.0)
|
28
|
+
arel (4.0.0)
|
29
|
+
atomic (1.1.10)
|
30
|
+
builder (3.1.4)
|
31
|
+
colorize (0.5.8)
|
32
|
+
coveralls (0.6.7)
|
33
|
+
colorize
|
34
|
+
multi_json (~> 1.3)
|
35
|
+
rest-client
|
36
|
+
simplecov (>= 0.7)
|
37
|
+
thor
|
38
|
+
diff-lcs (1.2.4)
|
39
|
+
erubis (2.7.0)
|
40
|
+
faraday (0.8.7)
|
41
|
+
multipart-post (~> 1.1)
|
42
|
+
git (1.2.5)
|
43
|
+
github_api (0.10.1)
|
44
|
+
addressable
|
45
|
+
faraday (~> 0.8.1)
|
46
|
+
hashie (>= 1.2)
|
47
|
+
multi_json (~> 1.4)
|
48
|
+
nokogiri (~> 1.5.2)
|
49
|
+
oauth2
|
50
|
+
hashie (2.0.5)
|
51
|
+
highline (1.6.19)
|
52
|
+
httpauth (0.2.0)
|
53
|
+
i18n (0.6.4)
|
54
|
+
jeweler (1.8.6)
|
55
|
+
builder
|
56
|
+
bundler (~> 1.0)
|
57
|
+
git (>= 1.2.5)
|
58
|
+
github_api (= 0.10.1)
|
59
|
+
highline (>= 1.6.15)
|
60
|
+
nokogiri (= 1.5.10)
|
61
|
+
rake
|
62
|
+
rdoc
|
63
|
+
json (1.8.0)
|
64
|
+
jwt (0.1.8)
|
65
|
+
multi_json (>= 1.5)
|
66
|
+
mime-types (1.23)
|
67
|
+
minitest (4.7.5)
|
68
|
+
multi_json (1.7.7)
|
69
|
+
multi_xml (0.5.4)
|
70
|
+
multipart-post (1.2.0)
|
71
|
+
nokogiri (1.5.10)
|
72
|
+
oauth2 (0.9.2)
|
73
|
+
faraday (~> 0.8)
|
74
|
+
httpauth (~> 0.2)
|
75
|
+
jwt (~> 0.1.4)
|
76
|
+
multi_json (~> 1.0)
|
77
|
+
multi_xml (~> 0.5)
|
78
|
+
rack (~> 1.2)
|
79
|
+
rack (1.5.2)
|
80
|
+
rack-test (0.6.2)
|
81
|
+
rack (>= 1.0)
|
82
|
+
railties (4.0.0)
|
83
|
+
actionpack (= 4.0.0)
|
84
|
+
activesupport (= 4.0.0)
|
85
|
+
rake (>= 0.8.7)
|
86
|
+
thor (>= 0.18.1, < 2.0)
|
87
|
+
rake (10.1.0)
|
88
|
+
rdoc (4.0.1)
|
89
|
+
json (~> 1.4)
|
90
|
+
rest-client (1.6.7)
|
91
|
+
mime-types (>= 1.16)
|
92
|
+
rspec (2.14.1)
|
93
|
+
rspec-core (~> 2.14.0)
|
94
|
+
rspec-expectations (~> 2.14.0)
|
95
|
+
rspec-mocks (~> 2.14.0)
|
96
|
+
rspec-core (2.14.4)
|
97
|
+
rspec-expectations (2.14.0)
|
98
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
99
|
+
rspec-mocks (2.14.1)
|
100
|
+
simplecov (0.7.1)
|
101
|
+
multi_json (~> 1.0)
|
102
|
+
simplecov-html (~> 0.7.1)
|
103
|
+
simplecov-html (0.7.1)
|
104
|
+
sqlite3 (1.3.7)
|
105
|
+
thor (0.18.1)
|
106
|
+
thread_safe (0.1.2)
|
107
|
+
atomic
|
108
|
+
tzinfo (0.3.37)
|
109
|
+
|
110
|
+
PLATFORMS
|
111
|
+
ruby
|
112
|
+
|
113
|
+
DEPENDENCIES
|
114
|
+
activerecord (>= 3.0.0)
|
115
|
+
activesupport (>= 3.0.0)
|
116
|
+
ancestry (>= 1.3.0)
|
117
|
+
coveralls
|
118
|
+
jeweler (~> 1.8.0)
|
119
|
+
railties (>= 3.0.0)
|
120
|
+
rspec (~> 2.0)
|
121
|
+
sqlite3
|
data/README.md
CHANGED
@@ -1,278 +1,360 @@
|
|
1
|
-
ActsAsMessageable
|
2
|
-
=================
|
3
|
-
|
4
|
-
The Acts As Messageable allows communication between the models.
|
5
|
-
|
6
|
-
[](http://travis-ci.org/LTe/acts-as-messageable)
|
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
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
```
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
```
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
```
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
@message
|
156
|
-
@
|
157
|
-
```
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
```
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
```ruby
|
176
|
-
@alice.
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
```
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
```
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
@
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
```ruby
|
213
|
-
@
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
@
|
223
|
-
```
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
@alice.messages.
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
```
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
1
|
+
ActsAsMessageable
|
2
|
+
=================
|
3
|
+
|
4
|
+
The Acts As Messageable allows communication between the models.
|
5
|
+
|
6
|
+
[](http://travis-ci.org/LTe/acts-as-messageable)
|
7
|
+
[](https://gemnasium.com/LTe/acts-as-messageable)
|
8
|
+
[](https://codeclimate.com/github/LTe/acts-as-messageable)
|
9
|
+
[](https://coveralls.io/r/LTe/acts-as-messageable?branch=master)
|
10
|
+
[](http://badge.fury.io/rb/acts-as-messageable)
|
11
|
+
|
12
|
+
Usage
|
13
|
+
=====
|
14
|
+
|
15
|
+
To use it, add it to your Gemfile:
|
16
|
+
|
17
|
+
### Rails 3
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
gem 'acts-as-messageable'
|
21
|
+
```
|
22
|
+
|
23
|
+
### Rails 2
|
24
|
+
|
25
|
+
Use this [fork](http://github.com/openfirmware/acts-as-messageable)
|
26
|
+
Thanks for [@openfirmware](http://github.com/openfirmware)
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
gem 'acts-as-messageable', :git => 'git://github.com/openfirmware/acts-as-messageable.git',
|
30
|
+
:branch => 'rails2.3.11_compatible'
|
31
|
+
```
|
32
|
+
|
33
|
+
Post installation
|
34
|
+
=================
|
35
|
+
|
36
|
+
```
|
37
|
+
rails g acts-as-messageable:migration table_name # default 'messages'
|
38
|
+
rake db:migrate
|
39
|
+
```
|
40
|
+
|
41
|
+
Usage
|
42
|
+
=====
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
class User < ActiveRecord::Base
|
46
|
+
acts_as_messageable :table_name => "table_with_messages", # default 'messages'
|
47
|
+
:required => :body # default [:topic, :body]
|
48
|
+
:class_name => "CustomMessages" # default "ActsAsMessageable::Message",
|
49
|
+
:dependent => :destroy # default :nullify
|
50
|
+
:group_messages => true # default false
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
Upgrade
|
55
|
+
=======
|
56
|
+
|
57
|
+
Just type once again
|
58
|
+
|
59
|
+
```
|
60
|
+
rails g acts-as-messageable:migration
|
61
|
+
```
|
62
|
+
|
63
|
+
And new migrations should be created.
|
64
|
+
|
65
|
+
```
|
66
|
+
~$ rails g acts-as-messageable:migration
|
67
|
+
create db/migrate/20110811223435_add_recipient_permanent_delete_and_sender_permanent_delete_to_messages.rb
|
68
|
+
```
|
69
|
+
|
70
|
+
Send message
|
71
|
+
============
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
@alice = User.first
|
75
|
+
@bob = User.last
|
76
|
+
|
77
|
+
@alice.send_message(@bob, "Message topic", "Hi bob!")
|
78
|
+
@bob.send_message(@alice, "Re: Message topic", "Hi alice!")
|
79
|
+
```
|
80
|
+
|
81
|
+
## With hash
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
@alice.send_message(@bob, { :body => "Hash body", :topic => "Hash topic" })
|
85
|
+
```
|
86
|
+
|
87
|
+
Custom required (validation)
|
88
|
+
============================
|
89
|
+
|
90
|
+
In User model
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
class User < ActiveRecord::Base
|
94
|
+
acts_as_messageable :required => :body
|
95
|
+
end
|
96
|
+
```
|
97
|
+
|
98
|
+
## With hash
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
@alice.send_message(@bob, { :body => "Hash body" })
|
102
|
+
```
|
103
|
+
|
104
|
+
## Normal
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
@alice.send_message(@bob, "body")
|
108
|
+
```
|
109
|
+
|
110
|
+
## Required sequence
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
class User < ActiveRecord::Base
|
114
|
+
acts_as_messageable :required => [:body, :topic]
|
115
|
+
end
|
116
|
+
|
117
|
+
@alice.send_message(@bob, "body", "topic")
|
118
|
+
```
|
119
|
+
|
120
|
+
## First topic
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
class User < ActiveRecord::Base
|
124
|
+
acts_as_messageable :required => [:topic, :body]
|
125
|
+
end
|
126
|
+
|
127
|
+
@alice.send_message(@bob, "topic", "body")
|
128
|
+
```
|
129
|
+
|
130
|
+
Custom class
|
131
|
+
============
|
132
|
+
|
133
|
+
You can use your own class that will represent the message object. First of all create custom class
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
class CustomMessage < ActsAsMessageable::Message
|
137
|
+
def capitalize_title
|
138
|
+
title.capitalize
|
139
|
+
end
|
140
|
+
end
|
141
|
+
```
|
142
|
+
|
143
|
+
After that you can sepcify custom class in options.
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
class User
|
147
|
+
acts_as_messageable :class_name => "CustomMessage"
|
148
|
+
end
|
149
|
+
```
|
150
|
+
|
151
|
+
From now on, your message has custom class.
|
152
|
+
|
153
|
+
```ruby
|
154
|
+
@message = @alice.send_message(@bob, "hi!")
|
155
|
+
@message # => #<CustomMessage:0x000000024b6278>
|
156
|
+
@message.capitalize_title # => "Hi!"
|
157
|
+
```
|
158
|
+
|
159
|
+
Conversation
|
160
|
+
============
|
161
|
+
|
162
|
+
You can get conversation list from messages scope. For example:
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
@message = @alice.send_message(@bob, "Hello bob!", "How are you?")
|
166
|
+
@reply_message = @bob.reply_to(@message, "Re: Hello bob!", "I'm fine!")
|
167
|
+
|
168
|
+
@alice.received_messages.conversations # => [@reply_message]
|
169
|
+
```
|
170
|
+
|
171
|
+
should receive list of latest messages in conversations (like in facebook).
|
172
|
+
|
173
|
+
To create conversation just reply to a message.
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
@message = @alice.send_message(@bob, "Hello bob!", "How are you?")
|
177
|
+
@message.reply("Re: Hello bob!", "I'm fine")
|
178
|
+
```
|
179
|
+
|
180
|
+
**Or with hash**
|
181
|
+
|
182
|
+
```ruby
|
183
|
+
@message.reply(:topic => "Re: Hello bob!", :body => "I'm fine")
|
184
|
+
```
|
185
|
+
|
186
|
+
**Or in old style**
|
187
|
+
|
188
|
+
```ruby
|
189
|
+
@message = @alice.send_message(@bob, "Hello bob!", "How are you?")
|
190
|
+
@reply_message = @bob.reply_to(@message, "Re: Hello bob!", "I'm fine!")
|
191
|
+
```
|
192
|
+
|
193
|
+
## Get conversation for a specific message
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
@message.conversation #=> [@message, @reply_message]
|
197
|
+
@reply_message.conversation #=> [@message, @reply_message]
|
198
|
+
```
|
199
|
+
|
200
|
+
Search
|
201
|
+
======
|
202
|
+
|
203
|
+
You can search text from messages and get the records where match exist. For example:
|
204
|
+
|
205
|
+
### Search text from messages
|
206
|
+
|
207
|
+
```ruby
|
208
|
+
records = @alice.messages.search("Search me") @alice seach text "Search me" from all messages
|
209
|
+
```
|
210
|
+
|
211
|
+
### Inbox
|
212
|
+
```ruby
|
213
|
+
@alice.received_messages
|
214
|
+
```
|
215
|
+
|
216
|
+
### Outbox
|
217
|
+
```ruby
|
218
|
+
@alice.sent_messages
|
219
|
+
```
|
220
|
+
### Inbox + Outbox. All messages connected with __@alice__
|
221
|
+
```ruby
|
222
|
+
@alice.messages
|
223
|
+
```
|
224
|
+
|
225
|
+
### Trash
|
226
|
+
```ruby
|
227
|
+
@alice.deleted_messages
|
228
|
+
```
|
229
|
+
|
230
|
+
## Filters
|
231
|
+
==========
|
232
|
+
|
233
|
+
```ruby
|
234
|
+
@alice.messages.are_from(@bob) # all message form @bob
|
235
|
+
@alice.messages.are_to(@bob) # all message to @bob
|
236
|
+
@alice.messages.with_id(@id_of_message) # message with id id_of_message
|
237
|
+
@alice.messages.readed # all readed @alice messages
|
238
|
+
@alice.messages.unreaded # all unreaded @alice messages
|
239
|
+
```
|
240
|
+
|
241
|
+
|
242
|
+
**You can use multiple filters at the same time**
|
243
|
+
|
244
|
+
```ruby
|
245
|
+
@alice.messages.are_from(@bob).are_to(@alice).readed # all message from @bob to @alice and readed
|
246
|
+
@alice.deleted_messages.are_from(@bob) # all deleted messages from @bob
|
247
|
+
```
|
248
|
+
|
249
|
+
Read messages
|
250
|
+
=============
|
251
|
+
|
252
|
+
### Read message
|
253
|
+
|
254
|
+
```ruby
|
255
|
+
@message.open # open message
|
256
|
+
@message.read
|
257
|
+
@message.mark_as_read
|
258
|
+
```
|
259
|
+
|
260
|
+
### Unread message
|
261
|
+
|
262
|
+
```ruby
|
263
|
+
@message.close # unread message
|
264
|
+
@message.mark_as_unread
|
265
|
+
```
|
266
|
+
|
267
|
+
|
268
|
+
Delete message
|
269
|
+
==============
|
270
|
+
|
271
|
+
**__We must know who delete message. That why we use *.process* method to save context__**
|
272
|
+
|
273
|
+
```ruby
|
274
|
+
@message = @alice.send_message(@bob, "Topic", "Body")
|
275
|
+
|
276
|
+
@alice.messages.process do |message|
|
277
|
+
message.delete # @alice delete message
|
278
|
+
end
|
279
|
+
```
|
280
|
+
|
281
|
+
Now we can find message in **trash**
|
282
|
+
|
283
|
+
```ruby
|
284
|
+
@alice.deleted_messages #=> [@message]
|
285
|
+
```
|
286
|
+
|
287
|
+
We can delete the message **permanently**
|
288
|
+
|
289
|
+
```ruby
|
290
|
+
@alice.deleted_messages.process do |message|
|
291
|
+
message.delete
|
292
|
+
end
|
293
|
+
|
294
|
+
@alice.delete_message #=> []
|
295
|
+
```
|
296
|
+
|
297
|
+
Message has been deleted **permanently**
|
298
|
+
|
299
|
+
## Delete message without context
|
300
|
+
|
301
|
+
```ruby
|
302
|
+
@alice.delete_message(@message) # @alice delete @message
|
303
|
+
```
|
304
|
+
|
305
|
+
Restore message
|
306
|
+
===============
|
307
|
+
|
308
|
+
```ruby
|
309
|
+
@alice.deleted_messages.process do |m|
|
310
|
+
m.restore # @alice restore 'm' message from trash
|
311
|
+
end
|
312
|
+
```
|
313
|
+
|
314
|
+
## Restore message without context
|
315
|
+
|
316
|
+
```ruby
|
317
|
+
@alice.restore_message(@message) # @alice restore message from trash
|
318
|
+
```
|
319
|
+
|
320
|
+
Group message
|
321
|
+
=============
|
322
|
+
|
323
|
+
## Enable group messages
|
324
|
+
|
325
|
+
```ruby
|
326
|
+
class User
|
327
|
+
acts_as_messageable :group_messages => true
|
328
|
+
end
|
329
|
+
```
|
330
|
+
|
331
|
+
## How to join other users's conversation
|
332
|
+
|
333
|
+
```ruby
|
334
|
+
@message = @alice.send_message(@bob, :topic => "Helou bob!", :body => "What's up?")
|
335
|
+
@reply_message = @sukhi.reply_to(@message, "Hi there!", "I would like to join to this conversation!")
|
336
|
+
@sec_reply_message = @bob.reply_to(@message, "Hi!", "Fine!")
|
337
|
+
@third_reply_message = @alice.reply_to(@reply_message, "hi!", "no problem")
|
338
|
+
```
|
339
|
+
|
340
|
+
## Know the people involved in conversation
|
341
|
+
|
342
|
+
```ruby
|
343
|
+
@message.people # will give you participants users object
|
344
|
+
@message.people # => [@alice, @bob, @sukhi]
|
345
|
+
```
|
346
|
+
|
347
|
+
Search
|
348
|
+
======
|
349
|
+
|
350
|
+
## Search text from messages
|
351
|
+
|
352
|
+
```ruby
|
353
|
+
@alice.messages.search("Search me") @alice seach text "Search me" from all messages
|
354
|
+
```
|
355
|
+
|
356
|
+
Copyright © 2011-2012 Piotr Niełacny (http://ruby-blog.pl), released under the MIT license
|
357
|
+
|
358
|
+
|
359
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
360
|
+
|