acts-as-messageable 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -0
- data/VERSION +1 -1
- data/acts-as-messageable.gemspec +6 -2
- data/lib/acts-as-messageable.rb +4 -13
- data/lib/acts-as-messageable/acts-as-messageable.rb +8 -116
- data/lib/acts-as-messageable/model.rb +122 -0
- data/spec/spec_helper.rb +1 -1
- metadata +27 -15
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
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.2"
|
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 = "2011-11-
|
12
|
+
s.date = "2011-11-19"
|
13
13
|
s.email = "piotr.nielacny@gmail.com"
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.md"
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
"lib/acts-as-messageable.rb",
|
27
27
|
"lib/acts-as-messageable/acts-as-messageable.rb",
|
28
28
|
"lib/acts-as-messageable/message.rb",
|
29
|
+
"lib/acts-as-messageable/model.rb",
|
29
30
|
"lib/acts-as-messageable/relation.rb",
|
30
31
|
"lib/generators/acts-as-messageable/migration/migration_generator.rb",
|
31
32
|
"lib/generators/acts-as-messageable/migration/templates/migration.rb",
|
@@ -49,6 +50,7 @@ Gem::Specification.new do |s|
|
|
49
50
|
s.add_runtime_dependency(%q<activerecord>, [">= 3.0.0"])
|
50
51
|
s.add_runtime_dependency(%q<activesupport>, [">= 3.0.0"])
|
51
52
|
s.add_runtime_dependency(%q<ancestry>, ["~> 1.2.4"])
|
53
|
+
s.add_runtime_dependency(%q<railties>, [">= 3.0.0"])
|
52
54
|
s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
|
53
55
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
|
54
56
|
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
|
@@ -56,6 +58,7 @@ Gem::Specification.new do |s|
|
|
56
58
|
s.add_dependency(%q<activerecord>, [">= 3.0.0"])
|
57
59
|
s.add_dependency(%q<activesupport>, [">= 3.0.0"])
|
58
60
|
s.add_dependency(%q<ancestry>, ["~> 1.2.4"])
|
61
|
+
s.add_dependency(%q<railties>, [">= 3.0.0"])
|
59
62
|
s.add_dependency(%q<rspec>, ["~> 2.6.0"])
|
60
63
|
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
61
64
|
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
@@ -64,6 +67,7 @@ Gem::Specification.new do |s|
|
|
64
67
|
s.add_dependency(%q<activerecord>, [">= 3.0.0"])
|
65
68
|
s.add_dependency(%q<activesupport>, [">= 3.0.0"])
|
66
69
|
s.add_dependency(%q<ancestry>, ["~> 1.2.4"])
|
70
|
+
s.add_dependency(%q<railties>, [">= 3.0.0"])
|
67
71
|
s.add_dependency(%q<rspec>, ["~> 2.6.0"])
|
68
72
|
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
69
73
|
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
data/lib/acts-as-messageable.rb
CHANGED
@@ -1,16 +1,7 @@
|
|
1
|
-
require "active_record"
|
2
|
-
require "active_support/core_ext"
|
3
|
-
require "acts-as-messageable/acts-as-messageable"
|
4
|
-
|
5
1
|
module ActsAsMessageable
|
6
|
-
autoload :
|
7
|
-
autoload :
|
8
|
-
|
9
|
-
|
10
|
-
if defined?(ActiveRecord::Base)
|
11
|
-
ActiveRecord::Base.send :include, ActsAsMessageable::Model
|
2
|
+
autoload :Model, 'acts-as-messageable/model'
|
3
|
+
autoload :Message, 'acts-as-messageable/message'
|
4
|
+
autoload :Relation, 'acts-as-messageable/relation'
|
12
5
|
end
|
13
6
|
|
14
|
-
|
15
|
-
ActiveRecord::Relation.send :include, ActsAsMessageable::Relation
|
16
|
-
end
|
7
|
+
require 'acts-as-messageable/acts-as-messageable'
|
@@ -1,122 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
def self.included(base)
|
5
|
-
base.extend ClassMethods
|
6
|
-
end
|
7
|
-
|
8
|
-
module ClassMethods
|
9
|
-
mattr_accessor :class_name
|
10
|
-
|
11
|
-
# Method make ActiveRecord::Base object messageable
|
12
|
-
# @param [Symbol] :table_name - table name for messages
|
13
|
-
def acts_as_messageable(options = {})
|
14
|
-
has_many :received_messages_relation,
|
15
|
-
:as => :received_messageable,
|
16
|
-
:class_name => options[:class_name] || "ActsAsMessageable::Message",
|
17
|
-
:dependent => :nullify
|
18
|
-
has_many :sent_messages_relation,
|
19
|
-
:as => :sent_messageable,
|
20
|
-
:class_name => options[:class_name] || "ActsAsMessageable::Message",
|
21
|
-
:dependent => :nullify
|
22
|
-
|
23
|
-
self.class_name = (options[:class_name] || "ActsAsMessageable::Message").constantize
|
24
|
-
self.class_name.set_table_name(options[:table_name] || "messages")
|
25
|
-
|
26
|
-
if options[:required].is_a? Symbol
|
27
|
-
self.class_name.required = [options[:required]]
|
28
|
-
elsif options[:required].is_a? Array
|
29
|
-
self.class_name.required = options[:required]
|
30
|
-
else
|
31
|
-
self.class_name.required = [:topic, :body]
|
32
|
-
end
|
33
|
-
|
34
|
-
self.class_name.validates_presence_of self.class_name.required
|
35
|
-
include ActsAsMessageable::Model::InstanceMethods
|
36
|
-
end
|
1
|
+
require 'active_record/railtie'
|
2
|
+
require 'active_support/core_ext'
|
37
3
|
|
4
|
+
module ActsAsMessageable
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
if defined?(ActiveRecord::Base)
|
7
|
+
ActiveRecord::Base.send :include, ActsAsMessageable::Model
|
38
8
|
end
|
39
9
|
|
40
|
-
|
41
|
-
|
42
|
-
# @return [ActiveRecord::Relation] all messages connected with user
|
43
|
-
def messages(trash = false)
|
44
|
-
result = self.class.class_name.connected_with(self, trash)
|
45
|
-
result.relation_context = self
|
46
|
-
|
47
|
-
result
|
48
|
-
end
|
49
|
-
|
50
|
-
def received_messages
|
51
|
-
result = received_messages_relation.scoped.where(:recipient_delete => false)
|
52
|
-
result.relation_context = self
|
53
|
-
|
54
|
-
result
|
55
|
-
end
|
56
|
-
|
57
|
-
def sent_messages
|
58
|
-
result = sent_messages_relation.scoped.where(:sender_delete => false)
|
59
|
-
result.relation_context = self
|
60
|
-
|
61
|
-
result
|
62
|
-
end
|
63
|
-
|
64
|
-
def deleted_messages
|
65
|
-
messages true
|
66
|
-
end
|
67
|
-
|
68
|
-
# Method sens message to another user
|
69
|
-
# @param [ActiveRecord::Base] to
|
70
|
-
# @param [String] topic
|
71
|
-
# @param [String] body
|
72
|
-
#
|
73
|
-
# @return [ActsAsMessageable::Message] the message object
|
74
|
-
def send_message(to, *args)
|
75
|
-
case args.first
|
76
|
-
when String
|
77
|
-
message_attributes = {}
|
78
|
-
self.class.class_name.required.each_with_index do |attribute, index|
|
79
|
-
message_attributes[attribute] = args[index]
|
80
|
-
end
|
81
|
-
when Hash
|
82
|
-
message_attributes = args.first
|
83
|
-
end
|
84
|
-
|
85
|
-
message = self.class.class_name.create! message_attributes
|
86
|
-
|
87
|
-
self.sent_messages_relation << message
|
88
|
-
to.received_messages_relation << message
|
89
|
-
|
90
|
-
message
|
91
|
-
end
|
92
|
-
|
93
|
-
def reply_to(message, *args)
|
94
|
-
reply_message = send_message(message.from, *args)
|
95
|
-
reply_message.parent = message
|
96
|
-
reply_message.save
|
97
|
-
|
98
|
-
reply_message
|
99
|
-
end
|
100
|
-
|
101
|
-
def delete_message(message)
|
102
|
-
current_user = self
|
103
|
-
|
104
|
-
if message.received_messageable == current_user
|
105
|
-
unless message.recipient_delete
|
106
|
-
message.update_attributes!(:recipient_delete => true)
|
107
|
-
else
|
108
|
-
message.update_attributes!(:recipient_permanent_delete => true)
|
109
|
-
end
|
110
|
-
elsif message.sent_messageable == current_user
|
111
|
-
unless message.sender_delete
|
112
|
-
message.update_attributes!(:sender_delete => true)
|
113
|
-
else
|
114
|
-
message.update_attributes!(:sender_permanent_delete => true)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
10
|
+
if defined?(ActiveRecord::Relation)
|
11
|
+
ActiveRecord::Relation.send :include, ActsAsMessageable::Relation
|
119
12
|
end
|
120
|
-
|
121
13
|
end
|
122
14
|
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
module ActsAsMessageable
|
2
|
+
module Model
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
mattr_accessor :messages_class_name
|
10
|
+
|
11
|
+
# Method make ActiveRecord::Base object messageable
|
12
|
+
# @param [Symbol] :table_name - table name for messages
|
13
|
+
def acts_as_messageable(options = {})
|
14
|
+
has_many :received_messages_relation,
|
15
|
+
:as => :received_messageable,
|
16
|
+
:class_name => options[:class_name] || "ActsAsMessageable::Message",
|
17
|
+
:dependent => :nullify
|
18
|
+
has_many :sent_messages_relation,
|
19
|
+
:as => :sent_messageable,
|
20
|
+
:class_name => options[:class_name] || "ActsAsMessageable::Message",
|
21
|
+
:dependent => :nullify
|
22
|
+
|
23
|
+
self.messages_class_name = (options[:class_name] || "ActsAsMessageable::Message").constantize
|
24
|
+
self.messages_class_name.set_table_name(options[:table_name] || "messages")
|
25
|
+
|
26
|
+
if options[:required].is_a? Symbol
|
27
|
+
self.messages_class_name.required = [options[:required]]
|
28
|
+
elsif options[:required].is_a? Array
|
29
|
+
self.messages_class_name.required = options[:required]
|
30
|
+
else
|
31
|
+
self.messages_class_name.required = [:topic, :body]
|
32
|
+
end
|
33
|
+
|
34
|
+
self.messages_class_name.validates_presence_of self.messages_class_name.required
|
35
|
+
include ActsAsMessageable::Model::InstanceMethods
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
module InstanceMethods
|
41
|
+
# Get all messages connected with user
|
42
|
+
# @return [ActiveRecord::Relation] all messages connected with user
|
43
|
+
def messages(trash = false)
|
44
|
+
result = self.class.messages_class_name.connected_with(self, trash)
|
45
|
+
result.relation_context = self
|
46
|
+
|
47
|
+
result
|
48
|
+
end
|
49
|
+
|
50
|
+
def received_messages
|
51
|
+
result = received_messages_relation.scoped.where(:recipient_delete => false)
|
52
|
+
result.relation_context = self
|
53
|
+
|
54
|
+
result
|
55
|
+
end
|
56
|
+
|
57
|
+
def sent_messages
|
58
|
+
result = sent_messages_relation.scoped.where(:sender_delete => false)
|
59
|
+
result.relation_context = self
|
60
|
+
|
61
|
+
result
|
62
|
+
end
|
63
|
+
|
64
|
+
def deleted_messages
|
65
|
+
messages true
|
66
|
+
end
|
67
|
+
|
68
|
+
# Method sens message to another user
|
69
|
+
# @param [ActiveRecord::Base] to
|
70
|
+
# @param [String] topic
|
71
|
+
# @param [String] body
|
72
|
+
#
|
73
|
+
# @return [ActsAsMessageable::Message] the message object
|
74
|
+
def send_message(to, *args)
|
75
|
+
case args.first
|
76
|
+
when String
|
77
|
+
message_attributes = {}
|
78
|
+
self.class.messages_class_name.required.each_with_index do |attribute, index|
|
79
|
+
message_attributes[attribute] = args[index]
|
80
|
+
end
|
81
|
+
when Hash
|
82
|
+
message_attributes = args.first
|
83
|
+
end
|
84
|
+
|
85
|
+
message = self.class.messages_class_name.create! message_attributes
|
86
|
+
|
87
|
+
self.sent_messages_relation << message
|
88
|
+
to.received_messages_relation << message
|
89
|
+
|
90
|
+
message
|
91
|
+
end
|
92
|
+
|
93
|
+
def reply_to(message, *args)
|
94
|
+
reply_message = send_message(message.from, *args)
|
95
|
+
reply_message.parent = message
|
96
|
+
reply_message.save
|
97
|
+
|
98
|
+
reply_message
|
99
|
+
end
|
100
|
+
|
101
|
+
def delete_message(message)
|
102
|
+
current_user = self
|
103
|
+
|
104
|
+
if message.received_messageable == current_user
|
105
|
+
unless message.recipient_delete
|
106
|
+
message.update_attributes!(:recipient_delete => true)
|
107
|
+
else
|
108
|
+
message.update_attributes!(:recipient_permanent_delete => true)
|
109
|
+
end
|
110
|
+
elsif message.sent_messageable == current_user
|
111
|
+
unless message.sender_delete
|
112
|
+
message.update_attributes!(:sender_delete => true)
|
113
|
+
else
|
114
|
+
message.update_attributes!(:sender_permanent_delete => true)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|
data/spec/spec_helper.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.2
|
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: 2011-11-
|
12
|
+
date: 2011-11-19 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &70019859513520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70019859513520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &70019859510340 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70019859510340
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: ancestry
|
38
|
-
requirement: &
|
38
|
+
requirement: &70019859508340 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,21 @@ dependencies:
|
|
43
43
|
version: 1.2.4
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70019859508340
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: railties
|
49
|
+
requirement: &70019859506340 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.0
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70019859506340
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: rspec
|
49
|
-
requirement: &
|
60
|
+
requirement: &70019859505060 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ~>
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: 2.6.0
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70019859505060
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: jeweler
|
60
|
-
requirement: &
|
71
|
+
requirement: &70019859503360 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ~>
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: 1.6.0
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *70019859503360
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: sqlite3-ruby
|
71
|
-
requirement: &
|
82
|
+
requirement: &70019859501840 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ! '>='
|
@@ -76,7 +87,7 @@ dependencies:
|
|
76
87
|
version: '0'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *70019859501840
|
80
91
|
description:
|
81
92
|
email: piotr.nielacny@gmail.com
|
82
93
|
executables: []
|
@@ -95,6 +106,7 @@ files:
|
|
95
106
|
- lib/acts-as-messageable.rb
|
96
107
|
- lib/acts-as-messageable/acts-as-messageable.rb
|
97
108
|
- lib/acts-as-messageable/message.rb
|
109
|
+
- lib/acts-as-messageable/model.rb
|
98
110
|
- lib/acts-as-messageable/relation.rb
|
99
111
|
- lib/generators/acts-as-messageable/migration/migration_generator.rb
|
100
112
|
- lib/generators/acts-as-messageable/migration/templates/migration.rb
|
@@ -119,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
131
|
version: '0'
|
120
132
|
segments:
|
121
133
|
- 0
|
122
|
-
hash: -
|
134
|
+
hash: -2282999855817855460
|
123
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
136
|
none: false
|
125
137
|
requirements:
|