recommendable 0.1.4 → 0.1.5

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