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 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