recommendable 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.markdown CHANGED
@@ -1,8 +1,37 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- 0.1.4 (current version)
4
+ 0.1.5 (current version)
5
5
  -----------------------
6
+ * Major bugfix: similarity values were, incorrectly, being calculated as 0.0 for every user pair. Sorry!
7
+ * The tables for all models are now all prepended with "recommendable_" to avoid possible collision. If upgrading from a previous version, please do the following:
8
+
9
+ ``` bash
10
+ $ rails g migration RenameRecommendableTables
11
+ ```
12
+
13
+ And paste this into your new migration:
14
+
15
+ ``` ruby
16
+ class RenameRecommendableTables < ActiveRecord::Migration
17
+ def up
18
+ rename_table :likes, :recommendable_likes
19
+ rename_table :dislikes, :recommendable_dislikes
20
+ rename_table :ignores, :recommendable_ignores
21
+ rename_table :stashed_items, :recommendable_stashed_items
22
+ end
23
+
24
+ def down
25
+ rename_table :recommendable_likes, :likes
26
+ rename_table :recommendable_dislikes, :dislikes
27
+ rename_table :recommendable_ignores, :ignores
28
+ rename_table :recommendable_stashed_items, :stashed_items
29
+ end
30
+ end
31
+ ```
32
+
33
+ 0.1.4
34
+ -----
6
35
  * `acts_as_recommendable` is no longer needed in your models
7
36
  * Instead of declaring `acts_as_recommended_to` in your User class, please use `recommends` instead, passing in a list of your recommendable models as a list of symbols (e.g. `recommends :movies, :books`)
8
37
  * Your initializer should no longer declare the user class. This is no longer necessary and is deprecated.
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
- gem "rails", ">= 3.0.0"
3
+ gem "rails", ">= 3.1.0"
4
4
  gem "redis", "~> 2.2.0"
5
5
  gem "resque", "~> 1.19.0"
6
6
  gem "resque-loner", "~> 1.2.0"
data/Gemfile.lock CHANGED
@@ -109,7 +109,7 @@ DEPENDENCIES
109
109
  bundler (~> 1.0.0)
110
110
  miniskirt
111
111
  minitest
112
- rails (>= 3.0.0)
112
+ rails (>= 3.1.0)
113
113
  redis (~> 2.2.0)
114
114
  resque (~> 1.19.0)
115
115
  resque-loner (~> 1.2.0)
data/TODO CHANGED
@@ -1,5 +1,4 @@
1
1
  = TODO
2
2
 
3
- * Recalculate similarity values ONLY for users that have liked/disliked the item
4
- that self just liked/disliked
3
+ * Support Mongoid (and potentially other ORMs)
5
4
  * Allow the option NOT to queue up on like/dislike/ignore?
@@ -1,5 +1,7 @@
1
1
  module Recommendable
2
2
  class Dislike < ActiveRecord::Base
3
+ self.table_name = 'recommendable_dislikes'
4
+
3
5
  belongs_to :user, :class_name => Recommendable.user_class.to_s
4
6
  belongs_to :dislikeable, :polymorphic => :true
5
7
 
@@ -1,5 +1,7 @@
1
1
  module Recommendable
2
2
  class Ignore < ActiveRecord::Base
3
+ self.table_name = 'recommendable_ignores'
4
+
3
5
  belongs_to :user, :class_name => Recommendable.user_class.to_s
4
6
  belongs_to :ignoreable, :polymorphic => :true
5
7
 
@@ -1,5 +1,7 @@
1
1
  module Recommendable
2
2
  class Like < ActiveRecord::Base
3
+ self.table_name = 'recommendable_likes'
4
+
3
5
  belongs_to :user, :class_name => Recommendable.user_class.to_s
4
6
  belongs_to :likeable, :polymorphic => :true
5
7
 
@@ -1,5 +1,7 @@
1
1
  module Recommendable
2
2
  class StashedItem < ActiveRecord::Base
3
+ self.table_name = 'recommendable_stashed_items'
4
+
3
5
  belongs_to :user, :class_name => Recommendable.user_class.to_s
4
6
  belongs_to :stashable, :polymorphic => :true
5
7
 
@@ -1,17 +1,17 @@
1
1
  class CreateLikes < ActiveRecord::Migration
2
2
  def up
3
- create_table :likes do |t|
3
+ create_table :recommendable_likes do |t|
4
4
  t.references :user
5
5
  t.references :likeable, :polymorphic => true
6
6
  t.timestamps
7
7
  end
8
8
 
9
- add_index :likes, :likeable_id
10
- add_index :likes, :likeable_type
11
- add_index :likes, [:user_id, :likeable_id, :likeable_type], :unique => true, :name => "user_like_constraint"
9
+ add_index :recommendable_likes, :likeable_id
10
+ add_index :recommendable_likes, :likeable_type
11
+ add_index :recommendable_likes, [:user_id, :likeable_id, :likeable_type], :unique => true, :name => "user_like_constraint"
12
12
  end
13
13
 
14
14
  def down
15
- drop_table :likes
15
+ drop_table :recommendable_likes
16
16
  end
17
17
  end
@@ -1,17 +1,17 @@
1
1
  class CreateDislikes < ActiveRecord::Migration
2
2
  def up
3
- create_table :dislikes do |t|
3
+ create_table :recommendable_dislikes do |t|
4
4
  t.references :user
5
5
  t.references :dislikeable, :polymorphic => true
6
6
  t.timestamps
7
7
  end
8
8
 
9
- add_index :dislikes, :dislikeable_id
10
- add_index :dislikes, :dislikeable_type
11
- add_index :dislikes, [:user_id, :dislikeable_id, :dislikeable_type], :unique => true, :name => "user_dislike_constraint"
9
+ add_index :recommendable_dislikes, :dislikeable_id
10
+ add_index :recommendable_dislikes, :dislikeable_type
11
+ add_index :recommendable_dislikes, [:user_id, :dislikeable_id, :dislikeable_type], :unique => true, :name => "user_dislike_constraint"
12
12
  end
13
13
 
14
14
  def down
15
- drop_table :dislikes
15
+ drop_table :recommendable_dislikes
16
16
  end
17
17
  end
@@ -1,17 +1,17 @@
1
1
  class CreateIgnores < ActiveRecord::Migration
2
2
  def up
3
- create_table :ignores do |t|
3
+ create_table :recommendable_ignores do |t|
4
4
  t.references :user
5
5
  t.references :ignoreable, :polymorphic => true
6
6
  t.timestamps
7
7
  end
8
8
 
9
- add_index :ignores, :ignoreable_id
10
- add_index :ignores, :ignoreable_type
11
- add_index :ignores, [:user_id, :ignoreable_id, :ignoreable_type], :unique => true, :name => "user_ignore_constraint"
9
+ add_index :recommendable_ignores, :ignoreable_id
10
+ add_index :recommendable_ignores, :ignoreable_type
11
+ add_index :recommendable_ignores, [:user_id, :ignoreable_id, :ignoreable_type], :unique => true, :name => "user_ignore_constraint"
12
12
  end
13
13
 
14
14
  def down
15
- drop_table :ignores
15
+ drop_table :recommendable_ignores
16
16
  end
17
17
  end
@@ -1,17 +1,17 @@
1
1
  class CreateStashedItems < ActiveRecord::Migration
2
2
  def up
3
- create_table :stashed_items do |t|
3
+ create_table :recommendable_stashed_items do |t|
4
4
  t.references :user
5
5
  t.references :stashable, :polymorphic => true
6
6
  t.timestamps
7
7
  end
8
8
 
9
- add_index :stashed_items, :stashable_id
10
- add_index :stashed_items, :stashable_type
11
- add_index :stashed_items, [:user_id, :stashable_id, :stashable_type], :unique => true, :name => "user_stashed_constraint"
9
+ add_index :recommendable_stashed_items, :stashable_id
10
+ add_index :recommendable_stashed_items, :stashable_type
11
+ add_index :recommendable_stashed_items, [:user_id, :stashable_id, :stashable_type], :unique => true, :name => "user_stashed_constraint"
12
12
  end
13
13
 
14
14
  def down
15
- drop_table :stashed_items
15
+ drop_table :recommendable_stashed_items
16
16
  end
17
17
  end
@@ -12,4 +12,4 @@ require "resque-loner"
12
12
 
13
13
  # Tell Redis which database to use (usually between 0 and 15). The default of 0
14
14
  # is most likely okay unless you have another application using that database.
15
- Recommendable.redis.select "0"
15
+ # Recommendable.redis.select "0"
@@ -404,21 +404,25 @@ module Recommendable
404
404
  defaults = { :class => nil,
405
405
  :return_records => true }
406
406
  options = defaults.merge(options)
407
-
407
+ create_recommended_to_sets and rater.create_recommended_to_sets if options[:return_records]
408
+
408
409
  if options[:class]
409
410
  in_common = Recommendable.redis.sinter likes_set_for(options[:class]), rater.likes_set_for(options[:class])
410
- options[:class].to_s.classify.constantize.find in_common if options[:return_records]
411
+ in_common = options[:class].to_s.classify.constantize.find in_common if options[:return_records]
411
412
  else
412
- Recommendable.recommendable_classes.flat_map do |klass|
413
- in_common = Recommendable.redis.sinter(likes_set_for(klass), rater.likes_set_for(klass))
413
+ in_common = Recommendable.recommendable_classes.flat_map do |klass|
414
+ things = Recommendable.redis.sinter(likes_set_for(klass), rater.likes_set_for(klass))
414
415
 
415
416
  if options[:return_records]
416
- klass.to_s.classify.constantize.find in_common
417
+ klass.to_s.classify.constantize.find(things)
417
418
  else
418
- in_common.map {|id| "#{klass.to_s.classify}:#{id}"}
419
+ things.map {|id| "#{klass.to_s.classify}:#{id}"}
419
420
  end
420
421
  end
421
422
  end
423
+
424
+ destroy_recommended_to_sets and rater.destroy_recommended_to_sets if options[:return_records]
425
+ in_common
422
426
  end
423
427
 
424
428
  # Makes a call to Redis and intersects the sets of dislikes belonging to
@@ -433,21 +437,25 @@ module Recommendable
433
437
  defaults = { :class => nil,
434
438
  :return_records => true }
435
439
  options = defaults.merge(options)
436
-
440
+ create_recommended_to_sets and rater.create_recommended_to_sets if options[:return_records]
441
+
437
442
  if options[:class]
438
443
  in_common = Recommendable.redis.sinter dislikes_set_for(options[:class]), rater.dislikes_set_for(options[:class])
439
- options[:class].to_s.classify.constantize.find in_common if options[:return_records]
444
+ in_common = options[:class].to_s.classify.constantize.find in_common if options[:return_records]
440
445
  else
441
- Recommendable.recommendable_classes.flat_map do |klass|
442
- in_common = Recommendable.redis.sinter(dislikes_set_for(klass), rater.dislikes_set_for(klass))
446
+ in_common = Recommendable.recommendable_classes.flat_map do |klass|
447
+ things = Recommendable.redis.sinter(dislikes_set_for(klass), rater.dislikes_set_for(klass))
443
448
 
444
449
  if options[:return_records]
445
- klass.to_s.classify.constantize.find in_common
450
+ klass.to_s.classify.constantize.find(things)
446
451
  else
447
- in_common.map {|id| "#{klass.to_s.classify}:#{id}"}
452
+ things.map {|id| "#{klass.to_s.classify}:#{id}"}
448
453
  end
449
454
  end
450
455
  end
456
+
457
+ destroy_recommended_to_sets and rater.destroy_recommended_to_sets if options[:return_records]
458
+ in_common
451
459
  end
452
460
 
453
461
  # Makes a call to Redis and intersects self's set of likes with rater's
@@ -464,23 +472,27 @@ module Recommendable
464
472
  defaults = { :class => nil,
465
473
  :return_records => true }
466
474
  options = defaults.merge(options)
475
+ create_recommended_to_sets and rater.create_recommended_to_sets if options[:return_records]
467
476
 
468
477
  if options[:class]
469
- disagreements = Recommendable.redis.sinter(likes_set_for(options[:class]), rater.likes_set_for(options[:class]))
470
- disagreements += Recommendable.redis.sinter(dislikes_set_for(options[:class]), rater.dislikes_set_for(options[:class]))
471
- options[:class].to_s.classify.constantize.find disagreements if options[:return_records]
478
+ disagreements = Recommendable.redis.sinter(likes_set_for(options[:class]), rater.dislikes_set_for(options[:class]))
479
+ disagreements += Recommendable.redis.sinter(dislikes_set_for(options[:class]), rater.likes_set_for(options[:class]))
480
+ disagreements = options[:class].to_s.classify.constantize.find disagreements if options[:return_records]
472
481
  else
473
- Recommendable.recommendable_classes.flat_map do |klass|
474
- disagreements = Recommendable.redis.sinter(likes_set_for(klass), rater.likes_set_for(klass))
475
- disagreements += Recommendable.redis.sinter(dislikes_set_for(klass), rater.dislikes_set_for(klass))
476
-
482
+ disagreements = Recommendable.recommendable_classes.flat_map do |klass|
483
+ things = Recommendable.redis.sinter(likes_set_for(klass), rater.dislikes_set_for(klass))
484
+ things += Recommendable.redis.sinter(dislikes_set_for(klass), rater.likes_set_for(klass))
485
+
477
486
  if options[:return_records]
478
- klass.to_s.classify.constantize.find disagreements
487
+ klass.to_s.classify.constantize.find(things)
479
488
  else
480
- disagreements.map {|id| "#{klass.to_s.classify}:#{id}"}
489
+ things.map {|id| "#{options[:class].to_s.classify}:#{id}"}
481
490
  end
482
491
  end
483
492
  end
493
+
494
+ destroy_recommended_to_sets and rater.destroy_recommended_to_sets if options[:return_records]
495
+ disagreements
484
496
  end
485
497
 
486
498
  # Used internally during liking/disliking/stashing/ignoring objects. This
@@ -1,3 +1,3 @@
1
1
  module Recommendable
2
- VERSION = '0.1.4'
2
+ VERSION = '0.1.5'
3
3
  end
@@ -1,3 +1,2 @@
1
1
  class Movie < ActiveRecord::Base
2
- acts_as_recommendable
3
2
  end
@@ -1,3 +1,3 @@
1
1
  class User < ActiveRecord::Base
2
- acts_as_recommended_to
2
+ recommends :movies
3
3
  end
@@ -1,18 +1,18 @@
1
1
  # This migration comes from recommendable (originally 20120124193723)
2
2
  class CreateLikes < ActiveRecord::Migration
3
3
  def up
4
- create_table :likes, :force => true do |t|
4
+ create_table :recommendable_likes, :force => true do |t|
5
5
  t.references :user
6
6
  t.references :likeable, :polymorphic => true
7
7
  t.timestamps
8
8
  end
9
9
 
10
- add_index :likes, :likeable_id
11
- add_index :likes, :likeable_type
12
- add_index :likes, [:user_id, :likeable_id, :likeable_type], :unique => true, :name => "user_like_constraint"
10
+ add_index :recommendable_likes, :likeable_id
11
+ add_index :recommendable_likes, :likeable_type
12
+ add_index :recommendable_likes, [:user_id, :likeable_id, :likeable_type], :unique => true, :name => "user_like_constraint"
13
13
  end
14
14
 
15
15
  def down
16
- drop_table :likes
16
+ drop_table :recommendable_likes
17
17
  end
18
- end
18
+ end
@@ -1,18 +1,18 @@
1
1
  # This migration comes from recommendable (originally 20120124193728)
2
2
  class CreateDislikes < ActiveRecord::Migration
3
3
  def up
4
- create_table :dislikes, :force => true do |t|
4
+ create_table :recommendable_dislikes, :force => true do |t|
5
5
  t.references :user
6
6
  t.references :dislikeable, :polymorphic => true
7
7
  t.timestamps
8
8
  end
9
9
 
10
- add_index :dislikes, :dislikeable_id
11
- add_index :dislikes, :dislikeable_type
12
- add_index :dislikes, [:user_id, :dislikeable_id, :dislikeable_type], :unique => true, :name => "user_dislike_constraint"
10
+ add_index :recommendable_dislikes, :dislikeable_id
11
+ add_index :recommendable_dislikes, :dislikeable_type
12
+ add_index :recommendable_dislikes, [:user_id, :dislikeable_id, :dislikeable_type], :unique => true, :name => "user_dislike_constraint"
13
13
  end
14
14
 
15
15
  def down
16
- drop_table :dislikes
16
+ drop_table :recommendable_dislikes
17
17
  end
18
- end
18
+ end
@@ -1,18 +1,18 @@
1
1
  # This migration comes from recommendable (originally 20120127092558)
2
2
  class CreateIgnores < ActiveRecord::Migration
3
3
  def up
4
- create_table :ignores, :force => true do |t|
4
+ create_table :recommendable_ignores, :force => true do |t|
5
5
  t.references :user
6
6
  t.references :ignoreable, :polymorphic => true
7
7
  t.timestamps
8
8
  end
9
9
 
10
- add_index :ignores, :ignoreable_id
11
- add_index :ignores, :ignoreable_type
12
- add_index :ignores, [:user_id, :ignoreable_id, :ignoreable_type], :unique => true, :name => "user_ignore_constraint"
10
+ add_index :recommendable_ignores, :ignoreable_id
11
+ add_index :recommendable_ignores, :ignoreable_type
12
+ add_index :recommendable_ignores, [:user_id, :ignoreable_id, :ignoreable_type], :unique => true, :name => "user_ignore_constraint"
13
13
  end
14
14
 
15
15
  def down
16
- drop_table :ignores
16
+ drop_table :recommendable_ignores
17
17
  end
18
18
  end
@@ -1,18 +1,18 @@
1
1
  # This migration comes from recommendable (originally 20120131173909)
2
2
  class CreateStashedItems < ActiveRecord::Migration
3
3
  def up
4
- create_table :stashed_items do |t|
4
+ create_table :recommendable_stashed_items do |t|
5
5
  t.references :user
6
6
  t.references :stashable, :polymorphic => true
7
7
  t.timestamps
8
8
  end
9
9
 
10
- add_index :stashed_items, :stashable_id
11
- add_index :stashed_items, :stashable_type
12
- add_index :stashed_items, [:user_id, :stashable_id, :stashable_type], :unique => true, :name => "user_stashed_constraint"
10
+ add_index :recommendable_stashed_items, :stashable_id
11
+ add_index :recommendable_stashed_items, :stashable_type
12
+ add_index :recommendable_stashed_items, [:user_id, :stashable_id, :stashable_type], :unique => true, :name => "user_stashed_constraint"
13
13
  end
14
14
 
15
15
  def down
16
- drop_table :stashed_items
16
+ drop_table :recommendable_stashed_items
17
17
  end
18
18
  end
@@ -19,7 +19,20 @@ ActiveRecord::Schema.define(:version => 20120131195416) do
19
19
  t.datetime "updated_at", :null => false
20
20
  end
21
21
 
22
- create_table "dislikes", :force => true do |t|
22
+ create_table "movies", :force => true do |t|
23
+ t.string "title"
24
+ t.integer "year"
25
+ t.datetime "created_at", :null => false
26
+ t.datetime "updated_at", :null => false
27
+ end
28
+
29
+ create_table "php_frameworks", :force => true do |t|
30
+ t.string "name"
31
+ t.datetime "created_at", :null => false
32
+ t.datetime "updated_at", :null => false
33
+ end
34
+
35
+ create_table "recommendable_dislikes", :force => true do |t|
23
36
  t.integer "user_id"
24
37
  t.integer "dislikeable_id"
25
38
  t.string "dislikeable_type"
@@ -27,11 +40,11 @@ ActiveRecord::Schema.define(:version => 20120131195416) do
27
40
  t.datetime "updated_at", :null => false
28
41
  end
29
42
 
30
- add_index "dislikes", ["dislikeable_id"], :name => "index_dislikes_on_dislikeable_id"
31
- add_index "dislikes", ["dislikeable_type"], :name => "index_dislikes_on_dislikeable_type"
32
- add_index "dislikes", ["user_id", "dislikeable_id", "dislikeable_type"], :name => "user_dislike_constraint", :unique => true
43
+ add_index "recommendable_dislikes", ["dislikeable_id"], :name => "index_recommendable_dislikes_on_dislikeable_id"
44
+ add_index "recommendable_dislikes", ["dislikeable_type"], :name => "index_recommendable_dislikes_on_dislikeable_type"
45
+ add_index "recommendable_dislikes", ["user_id", "dislikeable_id", "dislikeable_type"], :name => "user_dislike_constraint", :unique => true
33
46
 
34
- create_table "ignores", :force => true do |t|
47
+ create_table "recommendable_ignores", :force => true do |t|
35
48
  t.integer "user_id"
36
49
  t.integer "ignoreable_id"
37
50
  t.string "ignoreable_type"
@@ -39,11 +52,11 @@ ActiveRecord::Schema.define(:version => 20120131195416) do
39
52
  t.datetime "updated_at", :null => false
40
53
  end
41
54
 
42
- add_index "ignores", ["ignoreable_id"], :name => "index_ignores_on_ignoreable_id"
43
- add_index "ignores", ["ignoreable_type"], :name => "index_ignores_on_ignoreable_type"
44
- add_index "ignores", ["user_id", "ignoreable_id", "ignoreable_type"], :name => "user_ignore_constraint", :unique => true
55
+ add_index "recommendable_ignores", ["ignoreable_id"], :name => "index_recommendable_ignores_on_ignoreable_id"
56
+ add_index "recommendable_ignores", ["ignoreable_type"], :name => "index_recommendable_ignores_on_ignoreable_type"
57
+ add_index "recommendable_ignores", ["user_id", "ignoreable_id", "ignoreable_type"], :name => "user_ignore_constraint", :unique => true
45
58
 
46
- create_table "likes", :force => true do |t|
59
+ create_table "recommendable_likes", :force => true do |t|
47
60
  t.integer "user_id"
48
61
  t.integer "likeable_id"
49
62
  t.string "likeable_type"
@@ -51,24 +64,11 @@ ActiveRecord::Schema.define(:version => 20120131195416) do
51
64
  t.datetime "updated_at", :null => false
52
65
  end
53
66
 
54
- add_index "likes", ["likeable_id"], :name => "index_likes_on_likeable_id"
55
- add_index "likes", ["likeable_type"], :name => "index_likes_on_likeable_type"
56
- add_index "likes", ["user_id", "likeable_id", "likeable_type"], :name => "user_like_constraint", :unique => true
57
-
58
- create_table "movies", :force => true do |t|
59
- t.string "title"
60
- t.integer "year"
61
- t.datetime "created_at", :null => false
62
- t.datetime "updated_at", :null => false
63
- end
64
-
65
- create_table "php_frameworks", :force => true do |t|
66
- t.string "name"
67
- t.datetime "created_at", :null => false
68
- t.datetime "updated_at", :null => false
69
- end
67
+ add_index "recommendable_likes", ["likeable_id"], :name => "index_recommendable_likes_on_likeable_id"
68
+ add_index "recommendable_likes", ["likeable_type"], :name => "index_recommendable_likes_on_likeable_type"
69
+ add_index "recommendable_likes", ["user_id", "likeable_id", "likeable_type"], :name => "user_like_constraint", :unique => true
70
70
 
71
- create_table "stashed_items", :force => true do |t|
71
+ create_table "recommendable_stashed_items", :force => true do |t|
72
72
  t.integer "user_id"
73
73
  t.integer "stashable_id"
74
74
  t.string "stashable_type"
@@ -76,9 +76,9 @@ ActiveRecord::Schema.define(:version => 20120131195416) do
76
76
  t.datetime "updated_at", :null => false
77
77
  end
78
78
 
79
- add_index "stashed_items", ["stashable_id"], :name => "index_stashed_items_on_stashable_id"
80
- add_index "stashed_items", ["stashable_type"], :name => "index_stashed_items_on_stashable_type"
81
- add_index "stashed_items", ["user_id", "stashable_id", "stashable_type"], :name => "user_stashed_constraint", :unique => true
79
+ add_index "recommendable_stashed_items", ["stashable_id"], :name => "index_recommendable_stashed_items_on_stashable_id"
80
+ add_index "recommendable_stashed_items", ["stashable_type"], :name => "index_recommendable_stashed_items_on_stashable_type"
81
+ add_index "recommendable_stashed_items", ["user_id", "stashable_id", "stashable_type"], :name => "user_stashed_constraint", :unique => true
82
82
 
83
83
  create_table "users", :force => true do |t|
84
84
  t.string "username"
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recommendable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-09 00:00:00.000000000 Z
12
+ date: 2012-02-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sqlite3
16
- requirement: &70238356296840 !ruby/object:Gem::Requirement
16
+ requirement: &70256773489820 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70238356296840
24
+ version_requirements: *70256773489820
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &70238356312480 !ruby/object:Gem::Requirement
27
+ requirement: &70256773489140 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70238356312480
35
+ version_requirements: *70256773489140
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: shoulda
38
- requirement: &70238356311720 !ruby/object:Gem::Requirement
38
+ requirement: &70256773488460 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70238356311720
46
+ version_requirements: *70256773488460
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: yard
49
- requirement: &70238356310980 !ruby/object:Gem::Requirement
49
+ requirement: &70256773487620 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.6.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70238356310980
57
+ version_requirements: *70256773487620
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &70238356310160 !ruby/object:Gem::Requirement
60
+ requirement: &70256773486820 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.0.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70238356310160
68
+ version_requirements: *70256773486820
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &70238356309340 !ruby/object:Gem::Requirement
71
+ requirement: &70256773486040 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.6.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70238356309340
79
+ version_requirements: *70256773486040
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rcov
82
- requirement: &70238356308780 !ruby/object:Gem::Requirement
82
+ requirement: &70256773485460 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70238356308780
90
+ version_requirements: *70256773485460
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rails
93
- requirement: &70238356307740 !ruby/object:Gem::Requirement
93
+ requirement: &70256773484480 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 3.0.0
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70238356307740
101
+ version_requirements: *70256773484480
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: redis
104
- requirement: &70238356307200 !ruby/object:Gem::Requirement
104
+ requirement: &70256773483940 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 2.2.0
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *70238356307200
112
+ version_requirements: *70256773483940
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: resque
115
- requirement: &70238356306660 !ruby/object:Gem::Requirement
115
+ requirement: &70256773483400 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 1.19.0
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *70238356306660
123
+ version_requirements: *70256773483400
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: resque-loner
126
- requirement: &70238356305800 !ruby/object:Gem::Requirement
126
+ requirement: &70256773482500 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,7 +131,7 @@ dependencies:
131
131
  version: 1.2.0
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *70238356305800
134
+ version_requirements: *70256773482500
135
135
  description: Allow a model (typically User) to Like and/or Dislike models in your
136
136
  app. Generate recommendations quickly using redis.
137
137
  email: david@davidcelis.com