recommendable 2.1.0.2 → 2.1.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/recommendable/rater/recommender.rb +4 -4
  3. data/lib/recommendable/version.rb +2 -2
  4. data/test/dummy/Rakefile +7 -0
  5. data/test/dummy/app/models/book.rb +3 -0
  6. data/test/dummy/app/models/movie.rb +3 -0
  7. data/test/dummy/app/models/rock.rb +3 -0
  8. data/test/dummy/app/models/user.rb +4 -0
  9. data/test/dummy/config.ru +4 -0
  10. data/test/dummy/config/application.rb +62 -0
  11. data/test/dummy/config/boot.rb +6 -0
  12. data/test/dummy/config/database.yml +25 -0
  13. data/test/dummy/config/environment.rb +5 -0
  14. data/test/dummy/config/environments/development.rb +37 -0
  15. data/test/dummy/config/environments/production.rb +67 -0
  16. data/test/dummy/config/environments/test.rb +37 -0
  17. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  18. data/test/dummy/config/initializers/inflections.rb +15 -0
  19. data/test/dummy/config/initializers/mime_types.rb +5 -0
  20. data/test/dummy/config/initializers/recommendable.rb +6 -0
  21. data/test/dummy/config/initializers/secret_token.rb +7 -0
  22. data/test/dummy/config/initializers/session_store.rb +8 -0
  23. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  24. data/test/dummy/config/routes.rb +58 -0
  25. data/test/dummy/db/development.sqlite3 +0 -0
  26. data/test/dummy/db/migrate/20121006052300_create_users.rb +9 -0
  27. data/test/dummy/db/migrate/20121006052339_create_movies.rb +10 -0
  28. data/test/dummy/db/migrate/20121007212545_create_rocks.rb +9 -0
  29. data/test/dummy/db/migrate/20121007213144_create_books.rb +10 -0
  30. data/test/dummy/db/schema.rb +42 -0
  31. data/test/dummy/db/seeds.rb +7 -0
  32. data/test/dummy/db/test.sqlite3 +0 -0
  33. data/test/dummy/db/test.sqlite3-journal +0 -0
  34. data/test/dummy/log/test.log +37254 -0
  35. data/test/dummy/script/rails +6 -0
  36. data/test/factories.rb +17 -0
  37. data/test/recommendable/helpers/calculations_test.rb +69 -0
  38. data/test/recommendable/helpers/redis_key_mapper_test.rb +40 -0
  39. data/test/recommendable/ratable/dislikable_test.rb +31 -0
  40. data/test/recommendable/ratable/likable_test.rb +31 -0
  41. data/test/recommendable/ratable_test.rb +78 -0
  42. data/test/recommendable/rater/bookmarker_test.rb +122 -0
  43. data/test/recommendable/rater/disliker_test.rb +122 -0
  44. data/test/recommendable/rater/hider_test.rb +122 -0
  45. data/test/recommendable/rater/liker_test.rb +122 -0
  46. data/test/recommendable/rater/recommender_test.rb +115 -0
  47. data/test/recommendable/rater_test.rb +29 -0
  48. data/test/test_helper.rb +25 -0
  49. metadata +95 -4
@@ -0,0 +1,122 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../test', __FILE__)
2
+ require 'test_helper'
3
+
4
+ class HiderTest < MiniTest::Unit::TestCase
5
+ def setup
6
+ @user = Factory(:user)
7
+ @movie = Factory(:movie)
8
+ end
9
+
10
+ def test_that_hide_adds_to_hidden_set
11
+ refute_includes @user.hidden_movie_ids, @movie.id
12
+ @user.hide(@movie)
13
+ assert_includes @user.hidden_movie_ids, @movie.id
14
+ end
15
+
16
+ def test_that_cant_hide_already_hidden_object
17
+ assert @user.hide(@movie)
18
+ assert_nil @user.hide(@movie)
19
+ end
20
+
21
+ def test_that_cant_hide_unratable_object
22
+ basic_obj = Object.new
23
+ rock = Factory(:rock)
24
+
25
+ assert_raises(ArgumentError) { @user.hide(basic_obj) }
26
+ assert_raises(ArgumentError) { @user.hide(rock) }
27
+ end
28
+
29
+ def test_that_hides_returns_true_if_hidden
30
+ refute @user.hides?(@movie)
31
+ @user.hide(@movie)
32
+ assert @user.hides?(@movie)
33
+ end
34
+
35
+ def test_that_unhide_removes_item_from_hidden_set
36
+ @user.hide(@movie)
37
+ assert_includes @user.hidden_movie_ids, @movie.id
38
+ @user.unhide(@movie)
39
+ refute_includes @user.hidden_movie_ids, @movie.id
40
+ end
41
+
42
+ def test_that_cant_unhide_item_unless_hidden
43
+ assert_nil @user.unhide(@movie)
44
+ end
45
+
46
+ def test_that_hidden_returns_hidden_records
47
+ refute_includes @user.hiding, @movie
48
+ @user.hide(@movie)
49
+ assert_includes @user.hiding, @movie
50
+ end
51
+
52
+ def test_that_dynamic_hidden_finder_only_returns_relevant_records
53
+ book = Factory(:book)
54
+ @user.hide(@movie)
55
+ @user.hide(book)
56
+
57
+ refute_includes @user.hidden_movies, book
58
+ refute_includes @user.hidden_books, @movie
59
+ end
60
+
61
+ def test_that_hides_count_counts_all_hides
62
+ book = Factory(:book)
63
+ movie2 = Factory(:movie)
64
+
65
+ @user.hide(@movie)
66
+ @user.hide(movie2)
67
+ @user.hide(book)
68
+
69
+ assert_equal @user.hidden_count, 3
70
+ end
71
+
72
+ def test_that_dynamic_hidden_count_methods_only_count_relevant_hides
73
+ book = Factory(:book)
74
+ movie2 = Factory(:movie)
75
+
76
+ @user.hide(@movie)
77
+ @user.hide(movie2)
78
+ @user.hide(book)
79
+
80
+ assert_equal @user.hidden_movies_count, 2
81
+ assert_equal @user.hidden_books_count, 1
82
+ end
83
+
84
+ def test_that_hides_in_common_with_returns_all_common_hides
85
+ friend = Factory(:user)
86
+ movie2 = Factory(:movie)
87
+ book = Factory(:book)
88
+ book2 = Factory(:book)
89
+
90
+ @user.hide(@movie)
91
+ @user.hide(book)
92
+ @user.hide(movie2)
93
+ friend.hide(@movie)
94
+ friend.hide(book)
95
+ friend.hide(book2)
96
+
97
+ assert_includes @user.hiding_in_common_with(friend), @movie
98
+ assert_includes @user.hiding_in_common_with(friend), book
99
+ refute_includes @user.hiding_in_common_with(friend), movie2
100
+ refute_includes friend.hiding_in_common_with(@user), book2
101
+ end
102
+
103
+ def test_that_dynamic_hidden_in_common_with_only_returns_relevant_records
104
+ friend = Factory(:user)
105
+ movie2 = Factory(:movie)
106
+ book = Factory(:book)
107
+
108
+ @user.hide(@movie)
109
+ @user.hide(book)
110
+ friend.hide(@movie)
111
+ friend.hide(book)
112
+
113
+ assert_includes @user.hidden_movies_in_common_with(friend), @movie
114
+ assert_includes @user.hidden_books_in_common_with(friend), book
115
+ refute_includes @user.hidden_movies_in_common_with(friend), book
116
+ refute_includes @user.hidden_books_in_common_with(friend), @movie
117
+ end
118
+
119
+ def teardown
120
+ Recommendable.redis.flushdb
121
+ end
122
+ end
@@ -0,0 +1,122 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../test', __FILE__)
2
+ require 'test_helper'
3
+
4
+ class LikerTest < MiniTest::Unit::TestCase
5
+ def setup
6
+ @user = Factory(:user)
7
+ @movie = Factory(:movie)
8
+ end
9
+
10
+ def test_that_like_adds_to_liked_set
11
+ refute_includes @user.liked_movie_ids, @movie.id
12
+ @user.like(@movie)
13
+ assert_includes @user.liked_movie_ids, @movie.id
14
+ end
15
+
16
+ def test_that_cant_like_already_liked_object
17
+ assert @user.like(@movie)
18
+ assert_nil @user.like(@movie)
19
+ end
20
+
21
+ def test_that_cant_like_unratable_object
22
+ basic_obj = Object.new
23
+ rock = Factory(:rock)
24
+
25
+ assert_raises(ArgumentError) { @user.like(basic_obj) }
26
+ assert_raises(ArgumentError) { @user.like(rock) }
27
+ end
28
+
29
+ def test_that_likes_returns_true_if_liked
30
+ refute @user.likes?(@movie)
31
+ @user.like(@movie)
32
+ assert @user.likes?(@movie)
33
+ end
34
+
35
+ def test_that_unlike_removes_item_from_liked_set
36
+ @user.like(@movie)
37
+ assert_includes @user.liked_movie_ids, @movie.id
38
+ @user.unlike(@movie)
39
+ refute_includes @user.liked_movie_ids, @movie.id
40
+ end
41
+
42
+ def test_that_cant_unlike_item_unless_liked
43
+ assert_nil @user.unlike(@movie)
44
+ end
45
+
46
+ def test_that_likes_returns_liked_records
47
+ refute_includes @user.likes, @movie
48
+ @user.like(@movie)
49
+ assert_includes @user.likes, @movie
50
+ end
51
+
52
+ def test_that_dynamic_liked_finder_only_returns_relevant_records
53
+ book = Factory(:book)
54
+ @user.like(@movie)
55
+ @user.like(book)
56
+
57
+ refute_includes @user.liked_movies, book
58
+ refute_includes @user.liked_books, @movie
59
+ end
60
+
61
+ def test_that_likes_count_counts_all_likes
62
+ book = Factory(:book)
63
+ movie2 = Factory(:movie)
64
+
65
+ @user.like(@movie)
66
+ @user.like(movie2)
67
+ @user.like(book)
68
+
69
+ assert_equal @user.likes_count, 3
70
+ end
71
+
72
+ def test_that_dynamic_liked_count_methods_only_count_relevant_likes
73
+ book = Factory(:book)
74
+ movie2 = Factory(:movie)
75
+
76
+ @user.like(@movie)
77
+ @user.like(movie2)
78
+ @user.like(book)
79
+
80
+ assert_equal @user.liked_movies_count, 2
81
+ assert_equal @user.liked_books_count, 1
82
+ end
83
+
84
+ def test_that_likes_in_common_with_returns_all_common_likes
85
+ friend = Factory(:user)
86
+ movie2 = Factory(:movie)
87
+ book = Factory(:book)
88
+ book2 = Factory(:book)
89
+
90
+ @user.like(@movie)
91
+ @user.like(book)
92
+ @user.like(movie2)
93
+ friend.like(@movie)
94
+ friend.like(book)
95
+ friend.like(book2)
96
+
97
+ assert_includes @user.likes_in_common_with(friend), @movie
98
+ assert_includes @user.likes_in_common_with(friend), book
99
+ refute_includes @user.likes_in_common_with(friend), movie2
100
+ refute_includes friend.likes_in_common_with(@user), book2
101
+ end
102
+
103
+ def test_that_dynamic_liked_in_common_with_only_returns_relevant_records
104
+ friend = Factory(:user)
105
+ movie2 = Factory(:movie)
106
+ book = Factory(:book)
107
+
108
+ @user.like(@movie)
109
+ @user.like(book)
110
+ friend.like(@movie)
111
+ friend.like(book)
112
+
113
+ assert_includes @user.liked_movies_in_common_with(friend), @movie
114
+ assert_includes @user.liked_books_in_common_with(friend), book
115
+ refute_includes @user.liked_movies_in_common_with(friend), book
116
+ refute_includes @user.liked_books_in_common_with(friend), @movie
117
+ end
118
+
119
+ def teardown
120
+ Recommendable.redis.flushdb
121
+ end
122
+ end
@@ -0,0 +1,115 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../test', __FILE__)
2
+ require 'test_helper'
3
+
4
+ class RecommenderTest < MiniTest::Unit::TestCase
5
+ def setup
6
+ @user = Factory(:user)
7
+ 5.times { |x| instance_variable_set(:"@user#{x+1}", Factory(:user)) }
8
+ 10.times { |x| instance_variable_set(:"@movie#{x+1}", Factory(:movie)) }
9
+ 10.times { |x| instance_variable_set(:"@book#{x+1}", Factory(:book)) }
10
+
11
+ [@movie1, @movie2, @movie3, @book4, @book5, @book6].each { |obj| @user.like(obj) }
12
+ [@book1, @book2, @book3, @movie4, @movie5, @movie6].each { |obj| @user.dislike(obj) }
13
+
14
+ # @user.similarity_with(@user2) should == 1.0
15
+ [@movie1, @movie2, @movie3, @book4, @book5, @book6, @book7, @book8, @movie9, @movie10].each { |obj| @user2.like(obj) }
16
+ [@book1, @book2, @book3, @movie4, @movie5, @movie6, @movie8, @movie8, @book9, @book10].each { |obj| @user2.dislike(obj) }
17
+
18
+ # @user.similarity_with(@user4) should == 0.25
19
+ [@movie1, @movie2, @movie3, @book4, @book5, @book6].each { |obj| @user4.like(obj) }
20
+ [@book1, @book2, @book3].each { |obj| @user4.like(obj) }
21
+
22
+ # @user.similarity_with(@user3) should == 0.0
23
+ [@movie1, @movie2, @movie3].each { |obj| @user3.like(obj) }
24
+ [@book1, @book2, @book3].each { |obj| @user3.like(obj) }
25
+
26
+ # @user.similarity_with(@user1) should == -0.25
27
+ [@movie1, @movie2, @movie3].each { |obj| @user1.like(obj) }
28
+ [@book1, @book2, @book3, @movie4, @movie5, @movie6].each { |obj| @user1.like(obj) }
29
+
30
+ # @user.similarity_with(@user5) should == -1.0
31
+ [@movie1, @movie2, @movie3, @book4, @book5, @book6].each { |obj| @user5.dislike(obj) }
32
+ [@book1, @book2, @book3, @movie4, @movie5, @movie6].each { |obj| @user5.like(obj) }
33
+
34
+ Recommendable::Helpers::Calculations.update_similarities_for(@user.id)
35
+ Recommendable::Helpers::Calculations.update_recommendations_for(@user.id)
36
+ end
37
+
38
+ def test_similar_raters_returns_sorted_similar_users
39
+ similar_raters = @user.similar_raters(5)
40
+
41
+ assert_equal similar_raters[0], @user2
42
+ assert_equal similar_raters[1], @user4
43
+ assert_equal similar_raters[2], @user3
44
+ assert_equal similar_raters[3], @user1
45
+ assert_equal similar_raters[4], @user5
46
+ end
47
+
48
+ def test_recommended_for_only_returns_relevant_recommendations
49
+ [@book7, @book8, @book9, @book10].each { |book| refute_includes @user.recommended_movies, book }
50
+ [@movie7, @movie8, @movie9, @movie10].each { |movie| refute_includes @user.recommended_books, movie }
51
+ end
52
+
53
+ def test_that_it_is_removed_from_recommendable_after_destroy
54
+ Recommendable::Helpers::Calculations.update_similarities_for(@user2.id)
55
+
56
+ @user.hide(@movie10)
57
+ @user.hide(@book10)
58
+ @user.bookmark(@movie9)
59
+ @user.bookmark(@book9)
60
+
61
+ sets = [
62
+ @user.liked_movie_ids,
63
+ @user.disliked_movie_ids,
64
+ @user.liked_book_ids,
65
+ @user.disliked_book_ids,
66
+ @user.hidden_movie_ids,
67
+ @user.hidden_book_ids,
68
+ @user.bookmarked_movie_ids,
69
+ @user.bookmarked_book_ids,
70
+ @user.recommended_movies,
71
+ @user.recommended_books,
72
+ @user.similar_raters
73
+ ]
74
+
75
+ sets.each { |set| refute_empty set }
76
+ assert_includes @user2.similar_raters(5), @user
77
+
78
+ redis_sets = [
79
+ Recommendable::Helpers::RedisKeyMapper.liked_set_for(Movie, @user.id),
80
+ Recommendable::Helpers::RedisKeyMapper.liked_set_for(Book, @user.id),
81
+ Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Movie, @user.id),
82
+ Recommendable::Helpers::RedisKeyMapper.disliked_set_for(Book, @user.id),
83
+ Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Movie, @user.id),
84
+ Recommendable::Helpers::RedisKeyMapper.hidden_set_for(Book, @user.id),
85
+ Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Movie, @user.id),
86
+ Recommendable::Helpers::RedisKeyMapper.bookmarked_set_for(Book, @user.id),
87
+ ]
88
+
89
+ redis_zsets = [
90
+ Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Movie, @user.id),
91
+ Recommendable::Helpers::RedisKeyMapper.recommended_set_for(Book, @user.id),
92
+ Recommendable::Helpers::RedisKeyMapper.similarity_set_for(@user.id)
93
+ ]
94
+
95
+ id = @user.id
96
+ @user.destroy
97
+
98
+ redis_sets.each { |set| assert_equal Recommendable.redis.scard(set), 0 }
99
+ redis_zsets.each { |zset| assert_equal Recommendable.redis.zcard(zset), 0 }
100
+
101
+ [@movie1, @movie2, @movie3, @book4, @book5, @book6].each do |obj|
102
+ refute_includes obj.liked_by_ids, id.to_s
103
+ end
104
+
105
+ [@book1, @book2, @book3, @movie4, @movie5, @movie6].each do |obj|
106
+ refute_includes obj.disliked_by_ids, id.to_s
107
+ end
108
+
109
+ refute_includes @user2.similar_raters(5).map(&:id), id
110
+ end
111
+
112
+ def teardown
113
+ Recommendable.redis.flushdb
114
+ end
115
+ end
@@ -0,0 +1,29 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../test', __FILE__)
2
+ require 'test_helper'
3
+
4
+ class RaterTest < MiniTest::Unit::TestCase
5
+ def setup
6
+ @user = Factory(:user)
7
+ end
8
+
9
+ def test_that_it_belongs_to_recommendables_user_class
10
+ assert_instance_of Recommendable.config.user_class, @user
11
+ end
12
+
13
+ def test_that_its_class_responds_to_recommendable_hooks
14
+ %w[like dislike hide bookmark].each do |action|
15
+ assert_respond_to @user.class, "before_#{action}"
16
+ assert_respond_to @user.class, "before_un#{action}"
17
+ assert_respond_to @user.class, "after_#{action}"
18
+ assert_respond_to @user.class, "after_un#{action}"
19
+ end
20
+ end
21
+
22
+ def test_that_rated_anything_is_false_by_default
23
+ refute @user.rated_anything?
24
+ end
25
+
26
+ def teardown
27
+ Recommendable.redis.flushdb
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ ENV['RAILS_ENV'] = 'test'
2
+
3
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
4
+ require 'rails/test_help'
5
+
6
+ require 'minitest/unit'
7
+ require 'minitest/pride'
8
+ require 'minitest/autorun'
9
+
10
+ require 'database_cleaner'
11
+
12
+ require 'miniskirt'
13
+ require 'factories'
14
+
15
+ require 'recommendable'
16
+
17
+ DatabaseCleaner.strategy = :transaction
18
+ Rails.backtrace_cleaner.remove_silencers!
19
+
20
+ DatabaseCleaner.start
21
+
22
+ MiniTest::Unit.after_tests do
23
+ DatabaseCleaner.clean
24
+ Recommendable.redis.flushdb
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recommendable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0.2
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Celis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-14 00:00:00.000000000 Z
11
+ date: 2013-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -169,8 +169,54 @@ files:
169
169
  - lib/recommendable/workers/sidekiq.rb
170
170
  - lib/recommendable/workers/torque_box.rb
171
171
  - lib/recommendable.rb
172
+ - test/dummy/app/models/book.rb
173
+ - test/dummy/app/models/movie.rb
174
+ - test/dummy/app/models/rock.rb
175
+ - test/dummy/app/models/user.rb
176
+ - test/dummy/config/application.rb
177
+ - test/dummy/config/boot.rb
178
+ - test/dummy/config/database.yml
179
+ - test/dummy/config/environment.rb
180
+ - test/dummy/config/environments/development.rb
181
+ - test/dummy/config/environments/production.rb
182
+ - test/dummy/config/environments/test.rb
183
+ - test/dummy/config/initializers/backtrace_silencers.rb
184
+ - test/dummy/config/initializers/inflections.rb
185
+ - test/dummy/config/initializers/mime_types.rb
186
+ - test/dummy/config/initializers/recommendable.rb
187
+ - test/dummy/config/initializers/secret_token.rb
188
+ - test/dummy/config/initializers/session_store.rb
189
+ - test/dummy/config/initializers/wrap_parameters.rb
190
+ - test/dummy/config/routes.rb
191
+ - test/dummy/config.ru
192
+ - test/dummy/db/development.sqlite3
193
+ - test/dummy/db/migrate/20121006052300_create_users.rb
194
+ - test/dummy/db/migrate/20121006052339_create_movies.rb
195
+ - test/dummy/db/migrate/20121007212545_create_rocks.rb
196
+ - test/dummy/db/migrate/20121007213144_create_books.rb
197
+ - test/dummy/db/schema.rb
198
+ - test/dummy/db/seeds.rb
199
+ - test/dummy/db/test.sqlite3
200
+ - test/dummy/db/test.sqlite3-journal
201
+ - test/dummy/log/test.log
202
+ - test/dummy/Rakefile
203
+ - test/dummy/script/rails
204
+ - test/factories.rb
205
+ - test/recommendable/helpers/calculations_test.rb
206
+ - test/recommendable/helpers/redis_key_mapper_test.rb
207
+ - test/recommendable/ratable/dislikable_test.rb
208
+ - test/recommendable/ratable/likable_test.rb
209
+ - test/recommendable/ratable_test.rb
210
+ - test/recommendable/rater/bookmarker_test.rb
211
+ - test/recommendable/rater/disliker_test.rb
212
+ - test/recommendable/rater/hider_test.rb
213
+ - test/recommendable/rater/liker_test.rb
214
+ - test/recommendable/rater/recommender_test.rb
215
+ - test/recommendable/rater_test.rb
216
+ - test/test_helper.rb
172
217
  homepage: https://github.com/davidcelis/recommendable
173
- licenses: []
218
+ licenses:
219
+ - MIT
174
220
  metadata: {}
175
221
  post_install_message:
176
222
  rdoc_options: []
@@ -192,5 +238,50 @@ rubygems_version: 2.0.2
192
238
  signing_key:
193
239
  specification_version: 4
194
240
  summary: A Like/Dislike recommendation engine for Ruby apps using Redis
195
- test_files: []
241
+ test_files:
242
+ - test/dummy/app/models/book.rb
243
+ - test/dummy/app/models/movie.rb
244
+ - test/dummy/app/models/rock.rb
245
+ - test/dummy/app/models/user.rb
246
+ - test/dummy/config/application.rb
247
+ - test/dummy/config/boot.rb
248
+ - test/dummy/config/database.yml
249
+ - test/dummy/config/environment.rb
250
+ - test/dummy/config/environments/development.rb
251
+ - test/dummy/config/environments/production.rb
252
+ - test/dummy/config/environments/test.rb
253
+ - test/dummy/config/initializers/backtrace_silencers.rb
254
+ - test/dummy/config/initializers/inflections.rb
255
+ - test/dummy/config/initializers/mime_types.rb
256
+ - test/dummy/config/initializers/recommendable.rb
257
+ - test/dummy/config/initializers/secret_token.rb
258
+ - test/dummy/config/initializers/session_store.rb
259
+ - test/dummy/config/initializers/wrap_parameters.rb
260
+ - test/dummy/config/routes.rb
261
+ - test/dummy/config.ru
262
+ - test/dummy/db/development.sqlite3
263
+ - test/dummy/db/migrate/20121006052300_create_users.rb
264
+ - test/dummy/db/migrate/20121006052339_create_movies.rb
265
+ - test/dummy/db/migrate/20121007212545_create_rocks.rb
266
+ - test/dummy/db/migrate/20121007213144_create_books.rb
267
+ - test/dummy/db/schema.rb
268
+ - test/dummy/db/seeds.rb
269
+ - test/dummy/db/test.sqlite3
270
+ - test/dummy/db/test.sqlite3-journal
271
+ - test/dummy/log/test.log
272
+ - test/dummy/Rakefile
273
+ - test/dummy/script/rails
274
+ - test/factories.rb
275
+ - test/recommendable/helpers/calculations_test.rb
276
+ - test/recommendable/helpers/redis_key_mapper_test.rb
277
+ - test/recommendable/ratable/dislikable_test.rb
278
+ - test/recommendable/ratable/likable_test.rb
279
+ - test/recommendable/ratable_test.rb
280
+ - test/recommendable/rater/bookmarker_test.rb
281
+ - test/recommendable/rater/disliker_test.rb
282
+ - test/recommendable/rater/hider_test.rb
283
+ - test/recommendable/rater/liker_test.rb
284
+ - test/recommendable/rater/recommender_test.rb
285
+ - test/recommendable/rater_test.rb
286
+ - test/test_helper.rb
196
287
  has_rdoc: yard