mongo_followable 0.3.0 → 0.3.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/README.rdoc +32 -13
- data/lib/mongo_followable.rb +2 -5
- data/lib/mongo_followable/features/authorization.rb +5 -0
- data/lib/mongo_followable/features/confirmation.rb +5 -0
- data/lib/mongo_followable/features/history.rb +76 -0
- data/lib/mongo_followable/followed.rb +193 -0
- data/lib/mongo_followable/follower.rb +212 -269
- data/lib/mongo_followable/version.rb +4 -2
- data/mongo_followable.gemspec +6 -6
- data/spec/mongo/followable_spec.rb +10 -0
- data/spec/mongo/performance_spec.rb +29 -0
- data/spec/mongo_mapper/childuser.rb +3 -2
- data/spec/mongo_mapper/group.rb +2 -1
- data/spec/mongo_mapper/user.rb +3 -2
- data/spec/mongoid/childuser.rb +3 -2
- data/spec/mongoid/group.rb +2 -1
- data/spec/mongoid/user.rb +3 -2
- metadata +18 -20
- data/.idea/encodings.xml +0 -5
- data/.idea/misc.xml +0 -5
- data/.idea/modules.xml +0 -9
- data/.idea/mongo_followable.iml +0 -17
- data/.idea/vcs.xml +0 -7
- data/lib/mongo_followable/followable.rb +0 -247
- data/lib/mongo_followable/railtie.rb +0 -9
data/mongo_followable.gemspec
CHANGED
@@ -4,7 +4,7 @@ require "mongo_followable/version"
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "mongo_followable"
|
7
|
-
s.version =
|
7
|
+
s.version = Mongo::Followable::VERSION
|
8
8
|
s.authors = ["Jie Fan"]
|
9
9
|
s.email = ["ustc.flyingfox@gmail.com"]
|
10
10
|
s.homepage = "https://github.com/lastomato/mongo_followable"
|
@@ -13,11 +13,11 @@ Gem::Specification.new do |s|
|
|
13
13
|
|
14
14
|
s.rubyforge_project = "mongo_followable"
|
15
15
|
|
16
|
-
s.add_development_dependency('rspec', '
|
17
|
-
s.add_development_dependency('mongoid', '
|
18
|
-
s.add_development_dependency('mongo_mapper', '
|
19
|
-
s.add_development_dependency('bson_ext', '
|
20
|
-
s.add_development_dependency('database_cleaner', '
|
16
|
+
s.add_development_dependency('rspec', '> 2.7.0')
|
17
|
+
s.add_development_dependency('mongoid', '> 2.4.0')
|
18
|
+
s.add_development_dependency('mongo_mapper', '> 0.10.0')
|
19
|
+
s.add_development_dependency('bson_ext', '> 1.5.0')
|
20
|
+
s.add_development_dependency('database_cleaner', '>0.7.0')
|
21
21
|
|
22
22
|
s.files = `git ls-files`.split("\n")
|
23
23
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -46,6 +46,10 @@ describe Mongo::Followable do
|
|
46
46
|
u.ever_follow.should =~ [@v, @g]
|
47
47
|
@v.ever_followed.should == [u]
|
48
48
|
|
49
|
+
u.ever_follow?(@v).should be_true
|
50
|
+
u.ever_follow?(@g).should be_true
|
51
|
+
@v.ever_followed?(u).should be_true
|
52
|
+
|
49
53
|
u.common_followees?(@v).should be_false
|
50
54
|
@v.common_followers?(u).should be_false
|
51
55
|
u.common_followees_with(@v).should == []
|
@@ -99,6 +103,12 @@ describe Mongo::Followable do
|
|
99
103
|
u.ever_follow.should =~ [@g, @v]
|
100
104
|
@g.ever_followed.should == [u]
|
101
105
|
|
106
|
+
u.clear_follow_history!
|
107
|
+
u.ever_follow.should == []
|
108
|
+
|
109
|
+
@g.clear_history!
|
110
|
+
@g.ever_followed.should == []
|
111
|
+
|
102
112
|
u.common_followees?(@v).should be_false
|
103
113
|
@v.common_followers?(@g).should be_true
|
104
114
|
u.common_followees_with(@v).should == []
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "benchmark"
|
2
|
+
require "rubygems"
|
3
|
+
require "bundler/setup"
|
4
|
+
require "mongoid"
|
5
|
+
require "../../lib/mongo_followable"
|
6
|
+
require "../../spec/mongoid/group"
|
7
|
+
require "../../spec/mongoid/user"
|
8
|
+
|
9
|
+
Mongoid.configure do |config|
|
10
|
+
name = 'mongo_followable_test'
|
11
|
+
host = 'localhost'
|
12
|
+
config.master = Mongo::Connection.new.db(name)
|
13
|
+
config.autocreate_indexes = true
|
14
|
+
end
|
15
|
+
|
16
|
+
users = []
|
17
|
+
1000.times { users << User.create! }
|
18
|
+
group = Group.create!
|
19
|
+
|
20
|
+
users.each { |u| u.follow(group) }
|
21
|
+
|
22
|
+
Benchmark.bmbm do |x|
|
23
|
+
x.report("before") { group.followers }
|
24
|
+
end
|
25
|
+
|
26
|
+
RSpec.configure do |c|
|
27
|
+
c.before(:all) { DatabaseCleaner.strategy = :truncation }
|
28
|
+
c.before(:each) { DatabaseCleaner.clean }
|
29
|
+
end
|
data/spec/mongo_mapper/group.rb
CHANGED
data/spec/mongo_mapper/user.rb
CHANGED
data/spec/mongoid/childuser.rb
CHANGED
data/spec/mongoid/group.rb
CHANGED
data/spec/mongoid/user.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo_followable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,14 +9,14 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>'
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 2.7.0
|
22
22
|
type: :development
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ! '>'
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 2.7.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ! '>'
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: 2.4.0
|
38
38
|
type: :development
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ! '>'
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: 2.4.0
|
46
46
|
- !ruby/object:Gem::Dependency
|
@@ -48,7 +48,7 @@ dependencies:
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ! '>'
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: 0.10.0
|
54
54
|
type: :development
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ! '>'
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 0.10.0
|
62
62
|
- !ruby/object:Gem::Dependency
|
@@ -64,7 +64,7 @@ dependencies:
|
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ! '>'
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 1.5.0
|
70
70
|
type: :development
|
@@ -72,7 +72,7 @@ dependencies:
|
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ! '>'
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: 1.5.0
|
78
78
|
- !ruby/object:Gem::Dependency
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - ! '>'
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: 0.7.0
|
86
86
|
type: :development
|
@@ -88,7 +88,7 @@ dependencies:
|
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
|
-
- -
|
91
|
+
- - ! '>'
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: 0.7.0
|
94
94
|
description: ! ' Mongo Followable adds following feature to mongoid/mongo_mapper '
|
@@ -99,11 +99,6 @@ extensions: []
|
|
99
99
|
extra_rdoc_files: []
|
100
100
|
files:
|
101
101
|
- .gitignore
|
102
|
-
- .idea/encodings.xml
|
103
|
-
- .idea/misc.xml
|
104
|
-
- .idea/modules.xml
|
105
|
-
- .idea/mongo_followable.iml
|
106
|
-
- .idea/vcs.xml
|
107
102
|
- .rakeTasks
|
108
103
|
- Gemfile
|
109
104
|
- LICENSE.txt
|
@@ -112,12 +107,15 @@ files:
|
|
112
107
|
- app/models/follow.rb
|
113
108
|
- lib/mongo_followable.rb
|
114
109
|
- lib/mongo_followable/core_ext/string.rb
|
115
|
-
- lib/mongo_followable/
|
110
|
+
- lib/mongo_followable/features/authorization.rb
|
111
|
+
- lib/mongo_followable/features/confirmation.rb
|
112
|
+
- lib/mongo_followable/features/history.rb
|
113
|
+
- lib/mongo_followable/followed.rb
|
116
114
|
- lib/mongo_followable/follower.rb
|
117
|
-
- lib/mongo_followable/railtie.rb
|
118
115
|
- lib/mongo_followable/version.rb
|
119
116
|
- mongo_followable.gemspec
|
120
117
|
- spec/mongo/followable_spec.rb
|
118
|
+
- spec/mongo/performance_spec.rb
|
121
119
|
- spec/mongo_mapper/childuser.rb
|
122
120
|
- spec/mongo_mapper/group.rb
|
123
121
|
- spec/mongo_mapper/user.rb
|
@@ -145,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
143
|
version: '0'
|
146
144
|
requirements: []
|
147
145
|
rubyforge_project: mongo_followable
|
148
|
-
rubygems_version: 1.8.
|
146
|
+
rubygems_version: 1.8.24
|
149
147
|
signing_key:
|
150
148
|
specification_version: 3
|
151
149
|
summary: adds following feature to mongoid/mongo_mapper
|
data/.idea/encodings.xml
DELETED
data/.idea/misc.xml
DELETED
data/.idea/modules.xml
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<project version="4">
|
3
|
-
<component name="ProjectModuleManager">
|
4
|
-
<modules>
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/mongo_followable.iml" filepath="$PROJECT_DIR$/.idea/mongo_followable.iml" />
|
6
|
-
</modules>
|
7
|
-
</component>
|
8
|
-
</project>
|
9
|
-
|
data/.idea/mongo_followable.iml
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<module type="RUBY_MODULE" version="4">
|
3
|
-
<component name="NewModuleRootManager">
|
4
|
-
<content url="file://$MODULE_DIR$" />
|
5
|
-
<orderEntry type="inheritedJdk" />
|
6
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
7
|
-
<orderEntry type="library" scope="PROVIDED" name="builder (v3.0.0, RVM: ruby-1.9.3-p125) [gem]" level="application" />
|
8
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v1.1.3, RVM: ruby-1.9.3-p125) [gem]" level="application" />
|
9
|
-
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.1.3, RVM: ruby-1.9.3-p125) [gem]" level="application" />
|
10
|
-
<orderEntry type="library" scope="PROVIDED" name="i18n (v0.6.0, RVM: ruby-1.9.3-p125) [gem]" level="application" />
|
11
|
-
<orderEntry type="library" scope="PROVIDED" name="mongo (v1.5.2, RVM: ruby-1.9.3-p125) [gem]" level="application" />
|
12
|
-
<orderEntry type="library" scope="PROVIDED" name="mongoid (v2.4.7, RVM: ruby-1.9.3-p125) [gem]" level="application" />
|
13
|
-
<orderEntry type="library" scope="PROVIDED" name="multi_json (v1.0.4, RVM: ruby-1.9.3-p125) [gem]" level="application" />
|
14
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec (v2.7.0, RVM: ruby-1.9.3-p125) [gem]" level="application" />
|
15
|
-
</component>
|
16
|
-
</module>
|
17
|
-
|
data/.idea/vcs.xml
DELETED
@@ -1,247 +0,0 @@
|
|
1
|
-
module Mongo
|
2
|
-
module Followable
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
included do |base|
|
6
|
-
if defined?(Mongoid)
|
7
|
-
if CONFIG[:authorization]
|
8
|
-
base.field :cannot_followed, :type => Array, :default => []
|
9
|
-
end
|
10
|
-
|
11
|
-
if CONFIG[:history]
|
12
|
-
base.field :followed_history, :type => Array, :default => []
|
13
|
-
end
|
14
|
-
|
15
|
-
base.has_many :followers, :class_name => "Follow", :as => :followable, :dependent => :destroy
|
16
|
-
elsif defined?(MongoMapper)
|
17
|
-
if CONFIG[:authorization]
|
18
|
-
base.key :cannot_followed, :type => Array, :default => []
|
19
|
-
end
|
20
|
-
|
21
|
-
if CONFIG[:history]
|
22
|
-
base.key :followed_history, :type => Array, :default => []
|
23
|
-
end
|
24
|
-
|
25
|
-
base.many :followers, :class_name => "Follow", :as => :followable, :dependent => :destroy
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
module ClassMethods
|
30
|
-
|
31
|
-
# get certain model's followees of this type
|
32
|
-
#
|
33
|
-
# Example:
|
34
|
-
# >> @jim = User.new
|
35
|
-
# >> @ruby = Group.new
|
36
|
-
# >> @jim.save
|
37
|
-
# >> @ruby.save
|
38
|
-
#
|
39
|
-
# >> @jim.follow(@ruby)
|
40
|
-
# >> User.followees_of(@jim)
|
41
|
-
# => [@ruby]
|
42
|
-
#
|
43
|
-
# Arguments:
|
44
|
-
# model: instance of some followable model
|
45
|
-
|
46
|
-
def followees_of(model)
|
47
|
-
model.followees_by_type(self.name)
|
48
|
-
end
|
49
|
-
|
50
|
-
# 4 methods in this function
|
51
|
-
#
|
52
|
-
# Example:
|
53
|
-
# >> Group.with_max_followers
|
54
|
-
# => [@ruby]
|
55
|
-
# >> Group.with_max_followers_by_type('user')
|
56
|
-
# => [@ruby]
|
57
|
-
|
58
|
-
["max", "min"].each do |s|
|
59
|
-
define_method(:"with_#{s}_followers") do
|
60
|
-
follow_array = self.all.to_a.sort! { |a, b| a.followers_count <=> b.followers_count }
|
61
|
-
num = follow_array[-1].followers_count
|
62
|
-
follow_array.select { |c| c.followers_count == num }
|
63
|
-
end
|
64
|
-
|
65
|
-
define_method(:"with_#{s}_followers_by_type") do |*args|
|
66
|
-
follow_array = self.all.to_a.sort! { |a, b| a.followers_count_by_type(args[0]) <=> b.followers_count_by_type(args[0]) }
|
67
|
-
num = follow_array[-1].followers_count_by_type(args[0])
|
68
|
-
follow_array.select { |c| c.followers_count_by_type(args[0]) == num }
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
#def method_missing(name, *args)
|
73
|
-
# if name.to_s =~ /^with_(max|min)_followers$/i
|
74
|
-
# follow_array = self.all.to_a.sort! { |a, b| a.followers_count <=> b.followers_count }
|
75
|
-
# if $1 == "max"
|
76
|
-
# max = follow_array[-1].followers_count
|
77
|
-
# follow_array.select { |c| c.followers_count == max }
|
78
|
-
# elsif $1 == "min"
|
79
|
-
# min = follow_array[0].followers_count
|
80
|
-
# follow_array.select { |c| c.followers_count == min }
|
81
|
-
# end
|
82
|
-
# elsif name.to_s =~ /^with_(max|min)_followers_by_type$/i
|
83
|
-
# follow_array = self.all.to_a.sort! { |a, b| a.followers_count_by_type(args[0]) <=> b.followers_count_by_type(args[0]) }
|
84
|
-
# if $1 == "max"
|
85
|
-
# max = follow_array[-1].followers_count_by_type(args[0])
|
86
|
-
# follow_array.select { |c| c.followers_count_by_type(args[0]) == max }
|
87
|
-
# elsif $1 == "min"
|
88
|
-
# min = follow_array[0].followers_count
|
89
|
-
# follow_array.select { |c| c.followers_count_by_type(args[0]) == min }
|
90
|
-
# end
|
91
|
-
# else
|
92
|
-
# super
|
93
|
-
# end
|
94
|
-
#end
|
95
|
-
|
96
|
-
end
|
97
|
-
|
98
|
-
# set which mongoid cannot follow self
|
99
|
-
#
|
100
|
-
# Example:
|
101
|
-
# >> @ruby.set_authorization('user')
|
102
|
-
# => true
|
103
|
-
|
104
|
-
if CONFIG[:authorization]
|
105
|
-
define_method(:set_authorization) do |*models|
|
106
|
-
models.each do |model|
|
107
|
-
|
108
|
-
self.cannot_followed << model.safe_capitalize
|
109
|
-
end
|
110
|
-
self.save
|
111
|
-
end
|
112
|
-
|
113
|
-
define_method(:unset_authorization) do |*models|
|
114
|
-
models.each do |model|
|
115
|
-
self.cannot_followed -= [model.safe_capitalize]
|
116
|
-
end
|
117
|
-
self.save
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
# see if this model is followee of some model
|
122
|
-
#
|
123
|
-
# Example:
|
124
|
-
# >> @ruby.followee_of?(@jim)
|
125
|
-
# => true
|
126
|
-
|
127
|
-
def followee_of?(model)
|
128
|
-
0 < self.followers.by_model(model).limit(1).count * model.followees.by_model(self).limit(1).count
|
129
|
-
end
|
130
|
-
|
131
|
-
# return true if self is followed by some models
|
132
|
-
#
|
133
|
-
# Example:
|
134
|
-
# >> @ruby.followed?
|
135
|
-
# => true
|
136
|
-
|
137
|
-
def followed?
|
138
|
-
0 < self.followers.length
|
139
|
-
end
|
140
|
-
|
141
|
-
# get all the followers of this model, same with classmethod followers_of
|
142
|
-
#
|
143
|
-
# Example:
|
144
|
-
# >> @ruby.all_followers
|
145
|
-
# => [@jim]
|
146
|
-
|
147
|
-
def all_followers
|
148
|
-
rebuild_instances(self.followers)
|
149
|
-
end
|
150
|
-
|
151
|
-
def unfollowed(*models, &block)
|
152
|
-
if block_given?
|
153
|
-
models.delete_if { |model| !yield(model) }
|
154
|
-
end
|
155
|
-
|
156
|
-
models.each do |model|
|
157
|
-
term = CONFIG[:authorization] ? (self.cannot_followed.include?(model.class.name) or model.cannot_follow.include?(self.class.name)) : false
|
158
|
-
|
159
|
-
unless model == self or !self.followee_of?(model) or !model.follower_of?(self) or term
|
160
|
-
model.followees.by_model(self).first.destroy
|
161
|
-
self.followers.by_model(model).first.destroy
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
# unfollow all
|
167
|
-
|
168
|
-
def unfollowed_all
|
169
|
-
unfollowed(*self.all_followers)
|
170
|
-
end
|
171
|
-
|
172
|
-
# get all the followers of this model in certain type
|
173
|
-
#
|
174
|
-
# Example:
|
175
|
-
# >> @ruby.followers_by_type("user")
|
176
|
-
# => [@jim]
|
177
|
-
|
178
|
-
def followers_by_type(type)
|
179
|
-
rebuild_instances(self.followers.by_type(type))
|
180
|
-
end
|
181
|
-
|
182
|
-
# get the number of followers
|
183
|
-
#
|
184
|
-
# Example:
|
185
|
-
# >> @ruby.followers_count
|
186
|
-
# => 1
|
187
|
-
|
188
|
-
def followers_count
|
189
|
-
self.followers.count
|
190
|
-
end
|
191
|
-
|
192
|
-
# get the number of followers in certain type
|
193
|
-
#
|
194
|
-
# Example:
|
195
|
-
# >> @ruby.followers_count_by_type("user")
|
196
|
-
# => 1
|
197
|
-
|
198
|
-
def followers_count_by_type(type)
|
199
|
-
self.followers.by_type(type).count
|
200
|
-
end
|
201
|
-
|
202
|
-
# see model's followed history
|
203
|
-
#
|
204
|
-
# Example:
|
205
|
-
# >> @ruby.ever_followed
|
206
|
-
# => [@jim]
|
207
|
-
|
208
|
-
if CONFIG[:history]
|
209
|
-
define_method(:ever_followed) do
|
210
|
-
follow = []
|
211
|
-
self.followed_history.each do |h|
|
212
|
-
follow << h.split('_')[0].constantize.find(h.split('_')[1])
|
213
|
-
end
|
214
|
-
follow
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
# return if there is any common followers
|
219
|
-
#
|
220
|
-
# Example:
|
221
|
-
# >> @ruby.common_followees?(@python)
|
222
|
-
# => true
|
223
|
-
|
224
|
-
def common_followers?(model)
|
225
|
-
0 < (rebuild_instances(self.followers) & rebuild_instances(model.followers)).length
|
226
|
-
end
|
227
|
-
|
228
|
-
# get common followers with some model
|
229
|
-
#
|
230
|
-
# Example:
|
231
|
-
# >> @ruby.common_followers_with(@python)
|
232
|
-
# => [@jim]
|
233
|
-
|
234
|
-
def common_followers_with(model)
|
235
|
-
rebuild_instances(self.followers) & rebuild_instances(model.followers)
|
236
|
-
end
|
237
|
-
|
238
|
-
private
|
239
|
-
def rebuild_instances(follows)
|
240
|
-
follow_list = []
|
241
|
-
follows.each do |follow|
|
242
|
-
follow_list << follow.f_type.constantize.find(follow.f_id)
|
243
|
-
end
|
244
|
-
follow_list
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|