recommendable 2.2.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c4bb9e3b50bed189b31f1a4eaeb4b1a368c2aeda
4
- data.tar.gz: 786fbed254bce107f4fb23885ee8014b069a1149
2
+ SHA256:
3
+ metadata.gz: bed9eb66adf5e636014b2f559c0f0c68542c778437bc177dfd4ce107fd7cbead
4
+ data.tar.gz: e37871a3954bc1032249c6b5920193cddd0897f340d0fc9bda9f9ffd4ca761e3
5
5
  SHA512:
6
- metadata.gz: 1a409bcc8d2a9ab2f1313045503461630f1b2b8ff43e824b63a1a08a562b8196c169c4ebd5996af4c4f9e565486d0f37accd946c0501e8fc144e7e2c26944920
7
- data.tar.gz: 15f55ac0d5a380a92e72c6b59743043e124855021568ea70bdae6a3096581bd755e7e76820e2eff4aa2f4884b9a0618480e5f9b6df3d6b38cd23fe03942bdca2
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
 
@@ -6,6 +6,8 @@ module Recommendable
6
6
  klass.where(:id => ids)
7
7
  end
8
8
 
9
+ alias_method :active_record_uuid, :active_record
10
+
9
11
  def data_mapper(klass, ids)
10
12
  klass.all(:id => ids)
11
13
  end
@@ -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
@@ -0,0 +1,6 @@
1
+ require 'active_record'
2
+
3
+ ActiveRecord::Base.send(:include, Recommendable::Rater)
4
+ ActiveRecord::Base.send(:include, Recommendable::Ratable)
5
+
6
+ Recommendable.configure { |config| config.orm = :active_record_uuid }
@@ -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] count the number of users to return (defaults to 10)
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(count = 10, offset = 0)
10
- ids = Recommendable.redis.zrevrange(Recommendable::Helpers::RedisKeyMapper.similarity_set_for(id), offset, count - 1)
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
- private
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] count the number of recommendations to fetch (defaults to 10)
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, count = 10, offset = 0)
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, offset, count - 1, :with_scores => true)
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
- Recommendable.query(klass, ids).sort_by { |record| ids.index(record.id.to_s) }
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)
@@ -2,7 +2,7 @@ module Recommendable
2
2
  class Version
3
3
  MAJOR = 2
4
4
  MINOR = 2
5
- PATCH = 0
5
+ PATCH = 1
6
6
 
7
7
  def self.to_s
8
8
  [MAJOR, MINOR, PATCH].join('.')
@@ -3,4 +3,5 @@ require 'redis'
3
3
 
4
4
  Recommendable.configure do |config|
5
5
  config.redis = Redis.new(:host => 'localhost', :port => 6379, :db => 15)
6
+ config.user_class = User
6
7
  end
@@ -1,7 +1,7 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../test', __FILE__)
2
2
  require 'test_helper'
3
3
 
4
- class CalculationsTest < MiniTest::Unit::TestCase
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 < MiniTest::Unit::TestCase
5
- def test_output_of_liked_set_for
6
- assert_equal Recommendable::Helpers::RedisKeyMapper.liked_set_for(Movie, 1), 'recommendable:users:1:liked_movies'
7
- end
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
- def test_output_of_disliked_set_for
10
- assert_equal Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Movie, 1), 'recommendable:users:1:disliked_movies'
11
- end
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
- def test_output_of_hidden_set_for
14
- assert_equal Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Movie, 1), 'recommendable:users:1:hidden_movies'
15
- end
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
- def test_output_of_bookmarked_set_for
18
- assert_equal Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Movie, 1), 'recommendable:users:1:bookmarked_movies'
19
- end
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
- def test_output_of_recommended_set_for
22
- assert_equal Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Movie, 1), 'recommendable:users:1:recommended_movies'
23
- end
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
- def test_output_of_similarity_set_for
26
- assert_equal Recommendable::Helpers::RedisKeyMapper.similarity_set_for(1), 'recommendable:users:1:similarities'
27
- end
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
- def test_output_of_liked_by_set_for
30
- assert_equal Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Movie, 1), 'recommendable:movies:1:liked_by'
31
- end
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
- def test_output_of_disliked_by_set_for
34
- assert_equal Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Movie, 1), 'recommendable:movies:1:disliked_by'
35
- end
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
- def test_output_of_score_set_for
38
- assert_equal Recommendable::Helpers::RedisKeyMapper.score_set_for(Movie), 'recommendable:movies:scores'
39
- end
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
- def test_output_of_liked_set_for_subclass_of_ratable
42
- assert_equal Recommendable::Helpers::RedisKeyMapper.liked_set_for(Documentary, 1), 'recommendable:users:1:liked_movies'
43
- end
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
- def test_output_of_disliked_set_for_subclass_of_ratable
46
- assert_equal Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Documentary, 1), 'recommendable:users:1:disliked_movies'
47
- end
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
- def test_output_of_hidden_set_for_subclass_of_ratable
50
- assert_equal Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Documentary, 1), 'recommendable:users:1:hidden_movies'
51
- end
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
- def test_output_of_bookmarked_set_for_subclass_of_ratable
54
- assert_equal Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Documentary, 1), 'recommendable:users:1:bookmarked_movies'
55
- end
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
- def test_output_of_recommended_set_for_subclass_of_ratable
58
- assert_equal Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Documentary, 1), 'recommendable:users:1:recommended_movies'
59
- end
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
- def test_output_of_liked_by_set_for_subclass_of_ratable
62
- assert_equal Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Documentary, 1), 'recommendable:movies:1:liked_by'
63
- end
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
- def test_output_of_disliked_by_set_for_subclass_of_ratable
66
- assert_equal Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Documentary, 1), 'recommendable:movies:1:disliked_by'
67
- end
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
- def test_output_of_score_set_for_subclass_of_ratable
70
- assert_equal Recommendable::Helpers::RedisKeyMapper.score_set_for(Documentary), 'recommendable:movies:scores'
71
- end
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
- def test_output_of_liked_set_for_ratable_subclass_of_nonratable
74
- assert_equal Recommendable::Helpers::RedisKeyMapper.liked_set_for(Car, 1), 'recommendable:users:1:liked_cars'
75
- end
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
- def test_output_of_disliked_set_for_ratable_subclass_of_nonratable
78
- assert_equal Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Car, 1), 'recommendable:users:1:disliked_cars'
79
- end
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
- def test_output_of_hidden_set_for_ratable_subclass_of_nonratable
82
- assert_equal Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Car, 1), 'recommendable:users:1:hidden_cars'
83
- end
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
- def test_output_of_bookmarked_set_for_ratable_subclass_of_nonratable
86
- assert_equal Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Car, 1), 'recommendable:users:1:bookmarked_cars'
87
- end
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
- def test_output_of_recommended_set_for_ratable_subclass_of_nonratable
90
- assert_equal Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Car, 1), 'recommendable:users:1:recommended_cars'
91
- end
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
- def test_output_of_liked_by_set_for_ratable_subclass_of_nonratable
94
- assert_equal Recommendable::Helpers::RedisKeyMapper.liked_by_set_for(Car, 1), 'recommendable:cars:1:liked_by'
95
- end
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
- def test_output_of_disliked_by_set_for_ratable_subclass_of_nonratable
98
- assert_equal Recommendable::Helpers::RedisKeyMapper.disliked_by_set_for(Car, 1), 'recommendable:cars:1:disliked_by'
99
- end
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
- def test_output_of_score_set_for_ratable_subclass_of_nonratable
102
- assert_equal Recommendable::Helpers::RedisKeyMapper.score_set_for(Car), 'recommendable:cars:scores'
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