mongo_likeable 0.0.1 → 0.0.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 +45 -0
- data/lib/mongo_likeable/mongo_likeable.rb +34 -6
- data/lib/mongo_likeable/version.rb +1 -1
- data/spec/mongo/likeable_spec.rb +7 -0
- metadata +4 -3
data/README.rdoc
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
= mongo_likeable
|
2
|
+
|
3
|
+
Works for both Mongoid and Mongo_Mapper!
|
4
|
+
|
5
|
+
== Installation
|
6
|
+
|
7
|
+
In console:
|
8
|
+
gem install mongo_likeable
|
9
|
+
or in Gemfile:
|
10
|
+
gem 'mongo_likeable'
|
11
|
+
|
12
|
+
== Usage
|
13
|
+
|
14
|
+
To make model likeable you need to include Mongo::Likeable into your document:
|
15
|
+
|
16
|
+
class User
|
17
|
+
include Mongoid::Document #for Mongo_Mapper users, this line of code should be include MongoMapper::Document
|
18
|
+
include Mongo::Likeable
|
19
|
+
end
|
20
|
+
|
21
|
+
After this,
|
22
|
+
|
23
|
+
u = User.new
|
24
|
+
u.like?(some_stuff)
|
25
|
+
|
26
|
+
u.like(some_stuff)
|
27
|
+
u.like(*some_array_of_stuffs) # like an array of stuffs
|
28
|
+
|
29
|
+
u.dislike(some_other_stuff)
|
30
|
+
|
31
|
+
u.clear_likes() # if no parameter is given, all likes will be cleared.
|
32
|
+
u.clear_likes(s, s1, s2...)
|
33
|
+
|
34
|
+
u.like_counts # display total counts
|
35
|
+
u.dislike_counts
|
36
|
+
|
37
|
+
* Any bug or issue, please send me an email: ustc.flyingfox@gmail.com
|
38
|
+
|
39
|
+
== TODO
|
40
|
+
|
41
|
+
* like/dislike history.
|
42
|
+
|
43
|
+
== Copyright
|
44
|
+
|
45
|
+
Copyright (c) Jie Fan. See LICENSE.txt for further details.
|
@@ -6,30 +6,54 @@ module Mongo
|
|
6
6
|
if defined?(Mongoid)
|
7
7
|
base.field :likes, :type => Array, :default => []
|
8
8
|
base.field :dislikes, :type => Array, :default => []
|
9
|
+
|
10
|
+
# base.field :like_history, :type => Array, :default => []
|
11
|
+
# base.field :dislike_history, :type => Array, :default => []
|
9
12
|
elsif defined?(MongoMapper)
|
10
13
|
base.key :likes, :type => Array, :default => []
|
11
14
|
base.key :dislikes, :type => Array, :default => []
|
12
|
-
end
|
13
|
-
end
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
# base.key :like_history, :type => Array, :default => []
|
17
|
+
# base.key :dislike_history, :type => Array, :default => []
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
def like(*models)
|
20
22
|
self.likes |= simplify_instance(*models)
|
23
|
+
# self.like_history |= simplify_instance(*models)
|
24
|
+
|
25
|
+
self.save
|
21
26
|
end
|
22
27
|
|
23
28
|
def dislike(*models)
|
24
29
|
self.dislikes |= simplify_instance(*models)
|
30
|
+
# self.dislike_history |= simplify_instance(*models)
|
31
|
+
|
32
|
+
self.save
|
25
33
|
end
|
26
34
|
|
35
|
+
def like_counts
|
36
|
+
self.likes.length
|
37
|
+
end
|
38
|
+
|
39
|
+
def dislike_counts
|
40
|
+
self.dislikes.length
|
41
|
+
end
|
42
|
+
|
43
|
+
# def like_history
|
44
|
+
# rebuild_instance(*self.like_history)
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# def dislike_history
|
48
|
+
# rebuild_instance(*self.dislike_history)
|
49
|
+
# end
|
50
|
+
|
27
51
|
def like?(model)
|
28
|
-
self.likes.include? simplify_instance(model)
|
52
|
+
self.likes.include? simplify_instance(model)[0]
|
29
53
|
end
|
30
54
|
|
31
55
|
def dislike?(model)
|
32
|
-
self.dislikes.include? simplify_instance(model)
|
56
|
+
self.dislikes.include? simplify_instance(model)[0]
|
33
57
|
end
|
34
58
|
|
35
59
|
def clear_likes(*models)
|
@@ -38,6 +62,8 @@ module Mongo
|
|
38
62
|
else
|
39
63
|
self.likes -= simplify_instance(*models)
|
40
64
|
end
|
65
|
+
|
66
|
+
self.save
|
41
67
|
end
|
42
68
|
|
43
69
|
def clear_dislikes(*models)
|
@@ -46,6 +72,8 @@ module Mongo
|
|
46
72
|
else
|
47
73
|
self.dislikes -= simplify_instance(*models)
|
48
74
|
end
|
75
|
+
|
76
|
+
self.save
|
49
77
|
end
|
50
78
|
|
51
79
|
private
|
data/spec/mongo/likeable_spec.rb
CHANGED
@@ -29,16 +29,23 @@ describe Mongo::Likeable do
|
|
29
29
|
u.dislike?(@s).should be_false
|
30
30
|
|
31
31
|
u.like(@v, @s, @t)
|
32
|
+
u.like_counts.should == 3
|
32
33
|
u.likes.should =~ [@v.class.name + '_' + @v.id.to_s, @s.class.name + '_' + @s.id.to_s, @t.class.name + '_' + @t.id.to_s]
|
34
|
+
# u.like_history.should =~ [@v.class.name + '_' + @v.id.to_s, @s.class.name + '_' + @s.id.to_s, @t.class.name + '_' + @t.id.to_s]
|
33
35
|
|
34
36
|
u.dislike(@v, @s, @t)
|
35
37
|
u.dislikes.should =~ [@v.class.name + '_' + @v.id.to_s, @s.class.name + '_' + @s.id.to_s, @t.class.name + '_' + @t.id.to_s]
|
38
|
+
# u.dislike_history.should =~ [@v.class.name + '_' + @v.id.to_s, @s.class.name + '_' + @s.id.to_s, @t.class.name + '_' + @t.id.to_s]
|
36
39
|
|
37
40
|
u.clear_likes(@v, @s)
|
41
|
+
u.like_counts.should == 1
|
38
42
|
u.likes.should =~ [@t.class.name + '_' + @t.id.to_s]
|
43
|
+
# u.like_history.should =~ [@v.class.name + '_' + @v.id.to_s, @s.class.name + '_' + @s.id.to_s, @t.class.name + '_' + @t.id.to_s]
|
39
44
|
|
40
45
|
u.clear_dislikes()
|
46
|
+
u.dislike_counts.should == 0
|
41
47
|
u.dislikes.should == []
|
48
|
+
# u.dislike_history.should =~ [@v.class.name + '_' + @v.id.to_s, @s.class.name + '_' + @s.id.to_s, @t.class.name + '_' + @t.id.to_s]
|
42
49
|
|
43
50
|
end
|
44
51
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jie Fan
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-02-
|
17
|
+
date: 2012-02-07 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -104,6 +104,7 @@ extra_rdoc_files: []
|
|
104
104
|
files:
|
105
105
|
- .gitignore
|
106
106
|
- Gemfile
|
107
|
+
- README.rdoc
|
107
108
|
- Rakefile
|
108
109
|
- lib/mongo_likeable.rb
|
109
110
|
- lib/mongo_likeable/mongo_likeable.rb
|