recommendable 2.2.0 → 2.2.1
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 +5 -5
- data/lib/recommendable/helpers/calculations.rb +1 -1
- data/lib/recommendable/helpers/queriers.rb +2 -0
- data/lib/recommendable/helpers/redis_key_mapper.rb +7 -1
- data/lib/recommendable/orm/active_record_uuid.rb +6 -0
- data/lib/recommendable/rater/bookmarker.rb +0 -7
- data/lib/recommendable/rater/disliker.rb +0 -7
- data/lib/recommendable/rater/hider.rb +0 -7
- data/lib/recommendable/rater/liker.rb +0 -7
- data/lib/recommendable/rater/recommender.rb +16 -10
- data/lib/recommendable/version.rb +1 -1
- data/test/dummy/config/initializers/recommendable.rb +1 -0
- data/test/recommendable/helpers/calculations_test.rb +1 -1
- data/test/recommendable/helpers/redis_key_mapper_test.rb +186 -75
- data/test/recommendable/ratable/dislikable_test.rb +1 -1
- data/test/recommendable/ratable/likable_test.rb +1 -1
- data/test/recommendable/ratable_test.rb +1 -1
- data/test/recommendable/rater/bookmarker_test.rb +1 -1
- data/test/recommendable/rater/disliker_test.rb +1 -1
- data/test/recommendable/rater/hider_test.rb +1 -1
- data/test/recommendable/rater/liker_test.rb +1 -1
- data/test/recommendable/rater/recommender_test.rb +1 -1
- data/test/recommendable/rater_test.rb +1 -1
- data/test/test_helper.rb +2 -2
- metadata +50 -37
- data/test/dummy/log/test.log +0 -1802
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bed9eb66adf5e636014b2f559c0f0c68542c778437bc177dfd4ce107fd7cbead
|
4
|
+
data.tar.gz: e37871a3954bc1032249c6b5920193cddd0897f340d0fc9bda9f9ffd4ca761e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff226a0223b80b733d4ea0ff04805c343e9d4e6baa9376c1f5fb07ffab69559030ae0fe9a3680f6883c0991aed2073cd296ada67a1446132ba7e5dac9f318df9
|
7
|
+
data.tar.gz: 9c3e92781cb02678ca928bfe66637071c38ddd14fc41936374235f22227b7030d0691232a99fa71e94f529ccbbf4bde73ea8ec79484e8303d3ef6b6e543e5563
|
@@ -125,7 +125,7 @@ module Recommendable
|
|
125
125
|
end
|
126
126
|
|
127
127
|
# Get dislikes from the least similar users
|
128
|
-
least_similar_user_ids.inject(sets_to_union) do |sets, id|
|
128
|
+
sets_to_union = least_similar_user_ids.inject(sets_to_union) do |sets, id|
|
129
129
|
sets << Recommendable::Helpers::RedisKeyMapper.disliked_set_for(klass, id)
|
130
130
|
end
|
131
131
|
|
@@ -31,7 +31,13 @@ module Recommendable
|
|
31
31
|
private
|
32
32
|
|
33
33
|
def redis_namespace
|
34
|
-
Recommendable.config.redis_namespace
|
34
|
+
name_space = Recommendable.config.redis_namespace
|
35
|
+
case
|
36
|
+
when name_space.kind_of?(Proc)
|
37
|
+
return name_space.call
|
38
|
+
else
|
39
|
+
return name_space
|
40
|
+
end
|
35
41
|
end
|
36
42
|
|
37
43
|
def user_namespace
|
@@ -62,13 +62,10 @@ module Recommendable
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
private
|
66
|
-
|
67
65
|
# Fetch IDs for objects belonging to a passed class that the user has bookmarked
|
68
66
|
#
|
69
67
|
# @param [String, Symbol, Class] the class for which you want IDs
|
70
68
|
# @return [Array] an array of IDs
|
71
|
-
# @private
|
72
69
|
def bookmarked_ids_for(klass)
|
73
70
|
ids = Recommendable.redis.smembers(Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(klass, id))
|
74
71
|
ids.map!(&:to_i) if [:active_record, :data_mapper, :sequel].include?(Recommendable.config.orm)
|
@@ -79,7 +76,6 @@ module Recommendable
|
|
79
76
|
#
|
80
77
|
# @param [String, Symbol, Class] the class for which you want bookmarked records
|
81
78
|
# @return [Array] an array of bookmarked records
|
82
|
-
# @private
|
83
79
|
def bookmarked_for(klass)
|
84
80
|
Recommendable.query(klass, bookmarked_ids_for(klass))
|
85
81
|
end
|
@@ -88,7 +84,6 @@ module Recommendable
|
|
88
84
|
#
|
89
85
|
# @param [String, Symbol, Class] the class for which you want a count of bookmarks
|
90
86
|
# @return [Fixnum] the number of bookmarks
|
91
|
-
# @private
|
92
87
|
def bookmarked_count_for(klass)
|
93
88
|
Recommendable.redis.scard(Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(klass, id))
|
94
89
|
end
|
@@ -99,7 +94,6 @@ module Recommendable
|
|
99
94
|
# @param [User] the other user
|
100
95
|
# @param [String, Symbol, Class] the class of common bookmarked items
|
101
96
|
# @return [Array] an array of records both users have bookmarked
|
102
|
-
# @private
|
103
97
|
def bookmarked_in_common_with(klass, user)
|
104
98
|
Recommendable.query(klass, bookmarked_ids_in_common_with(klass, user))
|
105
99
|
end
|
@@ -110,7 +104,6 @@ module Recommendable
|
|
110
104
|
# @param [User] the other user
|
111
105
|
# @param [String, Symbol, Class] the class of common bookmarked items
|
112
106
|
# @return [Array] an array of IDs for records that both users have bookmarked
|
113
|
-
# @private
|
114
107
|
def bookmarked_ids_in_common_with(klass, user_id)
|
115
108
|
user_id = user_id.id if user_id.is_a?(Recommendable.config.user_class)
|
116
109
|
Recommendable.redis.sinter(Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(klass, id), Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(klass, user_id))
|
@@ -65,13 +65,10 @@ module Recommendable
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
private
|
69
|
-
|
70
68
|
# Fetch IDs for objects belonging to a passed class that the user has disliked
|
71
69
|
#
|
72
70
|
# @param [String, Symbol, Class] the class for which you want IDs
|
73
71
|
# @return [Array] an array of IDs
|
74
|
-
# @private
|
75
72
|
def disliked_ids_for(klass)
|
76
73
|
ids = Recommendable.redis.smembers(Recommendable::Helpers::RedisKeyMapper.disliked_set_for(klass, id))
|
77
74
|
ids.map!(&:to_i) if [:active_record, :data_mapper, :sequel].include?(Recommendable.config.orm)
|
@@ -82,7 +79,6 @@ module Recommendable
|
|
82
79
|
#
|
83
80
|
# @param [String, Symbol, Class] the class for which you want disliked records
|
84
81
|
# @return [Array] an array of disliked records
|
85
|
-
# @private
|
86
82
|
def disliked_for(klass)
|
87
83
|
Recommendable.query(klass, disliked_ids_for(klass))
|
88
84
|
end
|
@@ -91,7 +87,6 @@ module Recommendable
|
|
91
87
|
#
|
92
88
|
# @param [String, Symbol, Class] the class for which you want a count of dislikes
|
93
89
|
# @return [Fixnum] the number of dislikes
|
94
|
-
# @private
|
95
90
|
def disliked_count_for(klass)
|
96
91
|
Recommendable.redis.scard(Recommendable::Helpers::RedisKeyMapper.disliked_set_for(klass, id))
|
97
92
|
end
|
@@ -101,7 +96,6 @@ module Recommendable
|
|
101
96
|
# @param [User] the other user
|
102
97
|
# @param [String, Symbol, Class] the class of common disliked items
|
103
98
|
# @return [Array] an array of records both users have disliked
|
104
|
-
# @private
|
105
99
|
def disliked_in_common_with(klass, user)
|
106
100
|
Recommendable.query(klass, disliked_ids_in_common_with(klass, user))
|
107
101
|
end
|
@@ -112,7 +106,6 @@ module Recommendable
|
|
112
106
|
# @param [User, Fixnum] the other user (or its ID)
|
113
107
|
# @param [String, Symbol, Class] the class of common disliked items
|
114
108
|
# @return [Array] an array of IDs for records that both users have disliked
|
115
|
-
# @private
|
116
109
|
def disliked_ids_in_common_with(klass, user_id)
|
117
110
|
user_id = user_id.id if user_id.is_a?(Recommendable.config.user_class)
|
118
111
|
Recommendable.redis.sinter(Recommendable::Helpers::RedisKeyMapper.disliked_set_for(klass, id), Recommendable::Helpers::RedisKeyMapper.disliked_set_for(klass, user_id))
|
@@ -63,13 +63,10 @@ module Recommendable
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
private
|
67
|
-
|
68
66
|
# Fetch IDs for objects belonging to a passed class that the user has hidden
|
69
67
|
#
|
70
68
|
# @param [String, Symbol, Class] the class for which you want IDs
|
71
69
|
# @return [Array] an array of IDs
|
72
|
-
# @private
|
73
70
|
def hidden_ids_for(klass)
|
74
71
|
ids = Recommendable.redis.smembers(Recommendable::Helpers::RedisKeyMapper.hidden_set_for(klass, id))
|
75
72
|
ids.map!(&:to_i) if [:active_record, :data_mapper, :sequel].include?(Recommendable.config.orm)
|
@@ -80,7 +77,6 @@ module Recommendable
|
|
80
77
|
#
|
81
78
|
# @param [String, Symbol, Class] the class for which you want hidden records
|
82
79
|
# @return [Array] an array of hidden records
|
83
|
-
# @private
|
84
80
|
def hidden_for(klass)
|
85
81
|
Recommendable.query(klass, hidden_ids_for(klass))
|
86
82
|
end
|
@@ -89,7 +85,6 @@ module Recommendable
|
|
89
85
|
#
|
90
86
|
# @param [String, Symbol, Class] the class for which you want a count of hidden items
|
91
87
|
# @return [Fixnum] the number of hidden items
|
92
|
-
# @private
|
93
88
|
def hidden_count_for(klass)
|
94
89
|
Recommendable.redis.scard(Recommendable::Helpers::RedisKeyMapper.hidden_set_for(klass, id))
|
95
90
|
end
|
@@ -99,7 +94,6 @@ module Recommendable
|
|
99
94
|
# @param [User] the other user
|
100
95
|
# @param [String, Symbol, Class] the class of common hidden items
|
101
96
|
# @return [Array] an array of records both users have hidden
|
102
|
-
# @private
|
103
97
|
def hidden_in_common_with(klass, user)
|
104
98
|
Recommendable.query(klass, hidden_ids_in_common_with(klass, user))
|
105
99
|
end
|
@@ -110,7 +104,6 @@ module Recommendable
|
|
110
104
|
# @param [User] the other user
|
111
105
|
# @param [String, Symbol, Class] the class of common hidden items
|
112
106
|
# @return [Array] an array of IDs for records that both users have hidden
|
113
|
-
# @private
|
114
107
|
def hidden_ids_in_common_with(klass, user_id)
|
115
108
|
user_id = user_id.id if user_id.is_a?(Recommendable.config.user_class)
|
116
109
|
Recommendable.redis.sinter(Recommendable::Helpers::RedisKeyMapper.hidden_set_for(klass, id), Recommendable::Helpers::RedisKeyMapper.hidden_set_for(klass, user_id))
|
@@ -65,13 +65,10 @@ module Recommendable
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
private
|
69
|
-
|
70
68
|
# Fetch IDs for objects belonging to a passed class that the user has liked
|
71
69
|
#
|
72
70
|
# @param [String, Symbol, Class] the class for which you want IDs
|
73
71
|
# @return [Array] an array of IDs
|
74
|
-
# @private
|
75
72
|
def liked_ids_for(klass)
|
76
73
|
ids = Recommendable.redis.smembers(Recommendable::Helpers::RedisKeyMapper.liked_set_for(klass, id))
|
77
74
|
ids.map!(&:to_i) if [:active_record, :data_mapper, :sequel].include?(Recommendable.config.orm)
|
@@ -82,7 +79,6 @@ module Recommendable
|
|
82
79
|
#
|
83
80
|
# @param [String, Symbol, Class] the class for which you want liked records
|
84
81
|
# @return [Array] an array of liked records
|
85
|
-
# @private
|
86
82
|
def liked_for(klass)
|
87
83
|
Recommendable.query(klass, liked_ids_for(klass))
|
88
84
|
end
|
@@ -91,7 +87,6 @@ module Recommendable
|
|
91
87
|
#
|
92
88
|
# @param [String, Symbol, Class] the class for which you want a count of likes
|
93
89
|
# @return [Fixnum] the number of likes
|
94
|
-
# @private
|
95
90
|
def liked_count_for(klass)
|
96
91
|
Recommendable.redis.scard(Recommendable::Helpers::RedisKeyMapper.liked_set_for(klass, id))
|
97
92
|
end
|
@@ -101,7 +96,6 @@ module Recommendable
|
|
101
96
|
# @param [User] the other user
|
102
97
|
# @param [String, Symbol, Class] the class of common liked items
|
103
98
|
# @return [Array] an array of records both users have liked
|
104
|
-
# @private
|
105
99
|
def liked_in_common_with(klass, user)
|
106
100
|
Recommendable.query(klass, liked_ids_in_common_with(klass, user))
|
107
101
|
end
|
@@ -112,7 +106,6 @@ module Recommendable
|
|
112
106
|
# @param [User, Fixnum] the other user (or its ID)
|
113
107
|
# @param [String, Symbol, Class] the class of common liked items
|
114
108
|
# @return [Array] an array of IDs for records that both users have liked
|
115
|
-
# @private
|
116
109
|
def liked_ids_in_common_with(klass, user_id)
|
117
110
|
user_id = user_id.id if user_id.is_a?(Recommendable.config.user_class)
|
118
111
|
Recommendable.redis.sinter(Recommendable::Helpers::RedisKeyMapper.liked_set_for(klass, id), Recommendable::Helpers::RedisKeyMapper.liked_set_for(klass, user_id))
|
@@ -4,30 +4,36 @@ module Recommendable
|
|
4
4
|
# Get a list of raters that have been found to be the most similar to
|
5
5
|
# self. They are sorted by the calculated similarity value.
|
6
6
|
#
|
7
|
-
# @param [Fixnum]
|
7
|
+
# @param [Fixnum] limit the number of users to return (defaults to 10)
|
8
8
|
# @return [Array] An array of instances of your user class
|
9
|
-
def similar_raters(
|
10
|
-
ids = Recommendable.redis.zrevrange(Recommendable::Helpers::RedisKeyMapper.similarity_set_for(id),
|
11
|
-
Recommendable.query(self.class, ids).sort_by { |user| ids.index(user.id.to_s) }
|
12
|
-
end
|
9
|
+
def similar_raters(limit = 10, offset = 0)
|
10
|
+
ids = Recommendable.redis.zrevrange(Recommendable::Helpers::RedisKeyMapper.similarity_set_for(id), 0, -1)
|
13
11
|
|
14
|
-
|
12
|
+
order = ids.map { |id| "#{Recommendable.config.user_class.quoted_table_name}.#{Recommendable.config.user_class.quoted_primary_key} = %d DESC" }.join(', ')
|
13
|
+
order = self.class.send(:sanitize_sql_for_assignment, [order, *ids])
|
14
|
+
|
15
|
+
Recommendable.query(self.class, ids).order(order).limit(limit).offset(offset)
|
16
|
+
end
|
15
17
|
|
16
18
|
# Fetch a list of recommendations for a passed class.
|
17
19
|
#
|
18
20
|
# @param [String, Symbol, Class] klass the class from which to get recommendations
|
19
|
-
# @param [Fixnum]
|
21
|
+
# @param [Fixnum] limit the number of recommendations to fetch (defaults to 10)
|
20
22
|
# @return [Array] a list of things this person's gonna love
|
21
|
-
def recommended_for(klass,
|
23
|
+
def recommended_for(klass, limit = 10, offset = 0)
|
22
24
|
recommended_set = Recommendable::Helpers::RedisKeyMapper.recommended_set_for(klass, self.id)
|
23
25
|
return Recommendable.query(klass, []) unless rated_anything? && Recommendable.redis.zcard(recommended_set) > 0
|
24
26
|
|
25
|
-
ids = Recommendable.redis.zrevrange(recommended_set,
|
27
|
+
ids = Recommendable.redis.zrevrange(recommended_set, 0, -1, :with_scores => true)
|
26
28
|
ids = ids.select { |id, score| score > 0 }.map { |pair| pair.first }
|
27
29
|
|
28
|
-
|
30
|
+
order = ids.map { |id| "#{klass.quoted_table_name}.#{klass.quoted_primary_key} = %d DESC" }.join(', ')
|
31
|
+
order = klass.send(:sanitize_sql_for_assignment, [order, *ids])
|
32
|
+
Recommendable.query(klass, ids).order(order).limit(limit).offset(offset)
|
29
33
|
end
|
30
34
|
|
35
|
+
private
|
36
|
+
|
31
37
|
# Removes an item from a user's set of recommendations
|
32
38
|
# @private
|
33
39
|
def unrecommend(obj)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
$LOAD_PATH.unshift File.expand_path('../../test', __FILE__)
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
|
-
class CalculationsTest <
|
4
|
+
class CalculationsTest < Minitest::Test
|
5
5
|
def setup
|
6
6
|
@user = Factory(:user)
|
7
7
|
5.times { |x| instance_variable_set(:"@user#{x+1}", Factory(:user)) }
|
@@ -1,105 +1,216 @@
|
|
1
1
|
$LOAD_PATH.unshift File.expand_path('../../test', __FILE__)
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
|
-
class RedisKeyMapperTest <
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
class RedisKeyMapperTest < Minitest::Test
|
5
|
+
describe "with default namespace" do
|
6
|
+
def test_output_of_liked_set_for
|
7
|
+
assert_equal 'recommendable:users:1:liked_movies', Recommendable::Helpers::RedisKeyMapper.liked_set_for(Movie, 1)
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def test_output_of_disliked_set_for
|
11
|
+
assert_equal 'recommendable:users:1:disliked_movies', Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Movie, 1)
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
def test_output_of_hidden_set_for
|
15
|
+
assert_equal 'recommendable:users:1:hidden_movies', Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Movie, 1)
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
def test_output_of_bookmarked_set_for
|
19
|
+
assert_equal 'recommendable:users:1:bookmarked_movies', Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Movie, 1)
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
def test_output_of_recommended_set_for
|
23
|
+
assert_equal 'recommendable:users:1:recommended_movies', Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Movie, 1)
|
24
|
+
end
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
def test_output_of_similarity_set_for
|
27
|
+
assert_equal 'recommendable:users:1:similarities', Recommendable::Helpers::RedisKeyMapper.similarity_set_for(1)
|
28
|
+
end
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
def test_output_of_liked_by_set_for
|
31
|
+
assert_equal 'recommendable:movies:1:liked_by', Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Movie, 1)
|
32
|
+
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
def test_output_of_disliked_by_set_for
|
35
|
+
assert_equal 'recommendable:movies:1:disliked_by', Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Movie, 1)
|
36
|
+
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
def test_output_of_score_set_for
|
39
|
+
assert_equal 'recommendable:movies:scores', Recommendable::Helpers::RedisKeyMapper.score_set_for(Movie)
|
40
|
+
end
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
def test_output_of_liked_set_for_subclass_of_ratable
|
43
|
+
assert_equal 'recommendable:users:1:liked_movies', Recommendable::Helpers::RedisKeyMapper.liked_set_for(Documentary, 1)
|
44
|
+
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
def test_output_of_disliked_set_for_subclass_of_ratable
|
47
|
+
assert_equal 'recommendable:users:1:disliked_movies', Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Documentary, 1)
|
48
|
+
end
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
50
|
+
def test_output_of_hidden_set_for_subclass_of_ratable
|
51
|
+
assert_equal 'recommendable:users:1:hidden_movies', Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Documentary, 1)
|
52
|
+
end
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
def test_output_of_bookmarked_set_for_subclass_of_ratable
|
55
|
+
assert_equal 'recommendable:users:1:bookmarked_movies', Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Documentary, 1)
|
56
|
+
end
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
58
|
+
def test_output_of_recommended_set_for_subclass_of_ratable
|
59
|
+
assert_equal 'recommendable:users:1:recommended_movies', Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Documentary, 1)
|
60
|
+
end
|
60
61
|
|
61
|
-
|
62
|
-
|
63
|
-
|
62
|
+
def test_output_of_liked_by_set_for_subclass_of_ratable
|
63
|
+
assert_equal 'recommendable:movies:1:liked_by', Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Documentary, 1)
|
64
|
+
end
|
64
65
|
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
def test_output_of_disliked_by_set_for_subclass_of_ratable
|
67
|
+
assert_equal 'recommendable:movies:1:disliked_by', Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Documentary, 1)
|
68
|
+
end
|
68
69
|
|
69
|
-
|
70
|
-
|
71
|
-
|
70
|
+
def test_output_of_score_set_for_subclass_of_ratable
|
71
|
+
assert_equal 'recommendable:movies:scores', Recommendable::Helpers::RedisKeyMapper.score_set_for(Documentary)
|
72
|
+
end
|
72
73
|
|
73
|
-
|
74
|
-
|
75
|
-
|
74
|
+
def test_output_of_liked_set_for_ratable_subclass_of_nonratable
|
75
|
+
assert_equal 'recommendable:users:1:liked_cars', Recommendable::Helpers::RedisKeyMapper.liked_set_for(Car, 1)
|
76
|
+
end
|
76
77
|
|
77
|
-
|
78
|
-
|
79
|
-
|
78
|
+
def test_output_of_disliked_set_for_ratable_subclass_of_nonratable
|
79
|
+
assert_equal 'recommendable:users:1:disliked_cars', Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Car, 1)
|
80
|
+
end
|
80
81
|
|
81
|
-
|
82
|
-
|
83
|
-
|
82
|
+
def test_output_of_hidden_set_for_ratable_subclass_of_nonratable
|
83
|
+
assert_equal 'recommendable:users:1:hidden_cars', Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Car, 1)
|
84
|
+
end
|
84
85
|
|
85
|
-
|
86
|
-
|
87
|
-
|
86
|
+
def test_output_of_bookmarked_set_for_ratable_subclass_of_nonratable
|
87
|
+
assert_equal 'recommendable:users:1:bookmarked_cars', Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Car, 1)
|
88
|
+
end
|
88
89
|
|
89
|
-
|
90
|
-
|
91
|
-
|
90
|
+
def test_output_of_recommended_set_for_ratable_subclass_of_nonratable
|
91
|
+
assert_equal 'recommendable:users:1:recommended_cars', Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Car, 1)
|
92
|
+
end
|
92
93
|
|
93
|
-
|
94
|
-
|
95
|
-
|
94
|
+
def test_output_of_liked_by_set_for_ratable_subclass_of_nonratable
|
95
|
+
assert_equal 'recommendable:cars:1:liked_by', Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Car, 1)
|
96
|
+
end
|
96
97
|
|
97
|
-
|
98
|
-
|
99
|
-
|
98
|
+
def test_output_of_disliked_by_set_for_ratable_subclass_of_nonratable
|
99
|
+
assert_equal 'recommendable:cars:1:disliked_by', Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Car, 1)
|
100
|
+
end
|
100
101
|
|
101
|
-
|
102
|
-
|
102
|
+
def test_output_of_score_set_for_ratable_subclass_of_nonratable
|
103
|
+
assert_equal 'recommendable:cars:scores', Recommendable::Helpers::RedisKeyMapper.score_set_for(Car)
|
104
|
+
end
|
103
105
|
end
|
104
106
|
|
107
|
+
describe "with proc namespace" do
|
108
|
+
def setup
|
109
|
+
Recommendable::config.redis_namespace = lambda {"recommendable_proc"}
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_output_of_liked_set_for
|
113
|
+
assert_equal 'recommendable_proc:users:1:liked_movies', Recommendable::Helpers::RedisKeyMapper.liked_set_for(Movie, 1)
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_output_of_disliked_set_for
|
117
|
+
assert_equal 'recommendable_proc:users:1:disliked_movies', Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Movie, 1)
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_output_of_hidden_set_for
|
121
|
+
assert_equal 'recommendable_proc:users:1:hidden_movies', Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Movie, 1)
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_output_of_bookmarked_set_for
|
125
|
+
assert_equal 'recommendable_proc:users:1:bookmarked_movies', Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Movie, 1)
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_output_of_recommended_set_for
|
129
|
+
assert_equal 'recommendable_proc:users:1:recommended_movies', Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Movie, 1)
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_output_of_similarity_set_for
|
133
|
+
assert_equal 'recommendable_proc:users:1:similarities', Recommendable::Helpers::RedisKeyMapper.similarity_set_for(1)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_output_of_liked_by_set_for
|
137
|
+
assert_equal 'recommendable_proc:movies:1:liked_by', Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Movie, 1)
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_output_of_disliked_by_set_for
|
141
|
+
assert_equal 'recommendable_proc:movies:1:disliked_by', Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Movie, 1)
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_output_of_score_set_for
|
145
|
+
assert_equal 'recommendable_proc:movies:scores', Recommendable::Helpers::RedisKeyMapper.score_set_for(Movie)
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_output_of_liked_set_for_subclass_of_ratable
|
149
|
+
assert_equal 'recommendable_proc:users:1:liked_movies', Recommendable::Helpers::RedisKeyMapper.liked_set_for(Documentary, 1)
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_output_of_disliked_set_for_subclass_of_ratable
|
153
|
+
assert_equal 'recommendable_proc:users:1:disliked_movies', Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Documentary, 1)
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_output_of_hidden_set_for_subclass_of_ratable
|
157
|
+
assert_equal 'recommendable_proc:users:1:hidden_movies', Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Documentary, 1)
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_output_of_bookmarked_set_for_subclass_of_ratable
|
161
|
+
assert_equal 'recommendable_proc:users:1:bookmarked_movies', Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Documentary, 1)
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_output_of_recommended_set_for_subclass_of_ratable
|
165
|
+
assert_equal 'recommendable_proc:users:1:recommended_movies', Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Documentary, 1)
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_output_of_liked_by_set_for_subclass_of_ratable
|
169
|
+
assert_equal 'recommendable_proc:movies:1:liked_by', Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Documentary, 1)
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_output_of_disliked_by_set_for_subclass_of_ratable
|
173
|
+
assert_equal 'recommendable_proc:movies:1:disliked_by', Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Documentary, 1)
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_output_of_score_set_for_subclass_of_ratable
|
177
|
+
assert_equal 'recommendable_proc:movies:scores', Recommendable::Helpers::RedisKeyMapper.score_set_for(Documentary)
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_output_of_liked_set_for_ratable_subclass_of_nonratable
|
181
|
+
assert_equal 'recommendable_proc:users:1:liked_cars', Recommendable::Helpers::RedisKeyMapper.liked_set_for(Car, 1)
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_output_of_disliked_set_for_ratable_subclass_of_nonratable
|
185
|
+
assert_equal 'recommendable_proc:users:1:disliked_cars', Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Car, 1)
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_output_of_hidden_set_for_ratable_subclass_of_nonratable
|
189
|
+
assert_equal 'recommendable_proc:users:1:hidden_cars', Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Car, 1)
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_output_of_bookmarked_set_for_ratable_subclass_of_nonratable
|
193
|
+
assert_equal 'recommendable_proc:users:1:bookmarked_cars', Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Car, 1)
|
194
|
+
end
|
195
|
+
|
196
|
+
def test_output_of_recommended_set_for_ratable_subclass_of_nonratable
|
197
|
+
assert_equal 'recommendable_proc:users:1:recommended_cars', Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Car, 1)
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_output_of_liked_by_set_for_ratable_subclass_of_nonratable
|
201
|
+
assert_equal 'recommendable_proc:cars:1:liked_by', Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Car, 1)
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_output_of_disliked_by_set_for_ratable_subclass_of_nonratable
|
205
|
+
assert_equal 'recommendable_proc:cars:1:disliked_by', Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Car, 1)
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_output_of_score_set_for_ratable_subclass_of_nonratable
|
209
|
+
assert_equal 'recommendable_proc:cars:scores', Recommendable::Helpers::RedisKeyMapper.score_set_for(Car)
|
210
|
+
end
|
211
|
+
|
212
|
+
def teardown
|
213
|
+
Recommendable::config.redis_namespace = :recommendable
|
214
|
+
end
|
215
|
+
end
|
105
216
|
end
|