acts_as_favoritor 1.0.0 → 1.0.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 +4 -4
- data/.gitignore +0 -1
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +131 -0
- data/README.md +1 -1
- data/acts_as_favoritor.gemspec +20 -20
- data/lib/acts_as_favoritor.rb +2 -2
- data/lib/acts_as_favoritor/favoritable.rb +3 -3
- data/lib/acts_as_favoritor/favoritor.rb +9 -9
- data/lib/acts_as_favoritor/favoritor_lib.rb +2 -2
- data/lib/acts_as_favoritor/railtie.rb +1 -3
- data/lib/acts_as_favoritor/version.rb +2 -2
- data/lib/generators/{acts_as_follower_generator.rb → acts_as_favoritor_generator.rb} +2 -2
- data/lib/generators/templates/migration.rb.erb +2 -2
- data/lib/generators/templates/model.rb +2 -2
- data/test/acts_as_favoritable_test.rb +283 -0
- data/test/acts_as_favoritor_test.rb +224 -0
- data/test/dummy30/Rakefile +0 -3
- data/test/dummy30/config.ru +0 -2
- data/test/dummy30/config/application.rb +0 -28
- data/test/dummy30/config/environments/development.rb +0 -12
- data/test/dummy30/config/environments/test.rb +0 -15
- data/test/dummy30/config/initializers/secret_token.rb +0 -6
- data/test/dummy30/config/initializers/session_store.rb +0 -7
- data/test/dummy30/config/locales/en.yml +0 -3
- data/test/favorite_test.rb +28 -0
- data/test/schema.rb +6 -5
- metadata +17 -17
- data/test/acts_as_followable_test.rb +0 -283
- data/test/acts_as_follower_test.rb +0 -224
- data/test/dummy30/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy30/config/initializers/inflections.rb +0 -10
- data/test/follow_test.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51b26144e2f4621c21c2733217190573550f4457
|
4
|
+
data.tar.gz: 7ac65f0fd1d99f1a22186a975d11031cc79ed047
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbb04b517631931b8fc8cd4eb091eb43f3a1b09635ca7aecc2d5d0979731177989db605b8114bcf7de871a58ea5ee9744b20b22fc0f00fee74ac4206d5102c13
|
7
|
+
data.tar.gz: d710797509f89e5bf16936a9f8da7f8d72f47cf0eb635dc229b04b23d9081be374e2a3718db12855c1044cb5bcd13b139baacffa1139fa2176b09d0eb3c29d05
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
acts_as_favoritor (1.0.1)
|
5
|
+
activerecord (>= 4.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actioncable (5.1.3)
|
11
|
+
actionpack (= 5.1.3)
|
12
|
+
nio4r (~> 2.0)
|
13
|
+
websocket-driver (~> 0.6.1)
|
14
|
+
actionmailer (5.1.3)
|
15
|
+
actionpack (= 5.1.3)
|
16
|
+
actionview (= 5.1.3)
|
17
|
+
activejob (= 5.1.3)
|
18
|
+
mail (~> 2.5, >= 2.5.4)
|
19
|
+
rails-dom-testing (~> 2.0)
|
20
|
+
actionpack (5.1.3)
|
21
|
+
actionview (= 5.1.3)
|
22
|
+
activesupport (= 5.1.3)
|
23
|
+
rack (~> 2.0)
|
24
|
+
rack-test (~> 0.6.3)
|
25
|
+
rails-dom-testing (~> 2.0)
|
26
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
27
|
+
actionview (5.1.3)
|
28
|
+
activesupport (= 5.1.3)
|
29
|
+
builder (~> 3.1)
|
30
|
+
erubi (~> 1.4)
|
31
|
+
rails-dom-testing (~> 2.0)
|
32
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
33
|
+
activejob (5.1.3)
|
34
|
+
activesupport (= 5.1.3)
|
35
|
+
globalid (>= 0.3.6)
|
36
|
+
activemodel (5.1.3)
|
37
|
+
activesupport (= 5.1.3)
|
38
|
+
activerecord (5.1.3)
|
39
|
+
activemodel (= 5.1.3)
|
40
|
+
activesupport (= 5.1.3)
|
41
|
+
arel (~> 8.0)
|
42
|
+
activesupport (5.1.3)
|
43
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
44
|
+
i18n (~> 0.7)
|
45
|
+
minitest (~> 5.1)
|
46
|
+
tzinfo (~> 1.1)
|
47
|
+
arel (8.0.0)
|
48
|
+
builder (3.2.3)
|
49
|
+
concurrent-ruby (1.0.5)
|
50
|
+
erubi (1.6.1)
|
51
|
+
factory_girl (4.8.0)
|
52
|
+
activesupport (>= 3.0.0)
|
53
|
+
globalid (0.4.0)
|
54
|
+
activesupport (>= 4.2.0)
|
55
|
+
i18n (0.8.6)
|
56
|
+
loofah (2.0.3)
|
57
|
+
nokogiri (>= 1.5.9)
|
58
|
+
mail (2.6.6)
|
59
|
+
mime-types (>= 1.16, < 4)
|
60
|
+
method_source (0.8.2)
|
61
|
+
mime-types (3.1)
|
62
|
+
mime-types-data (~> 3.2015)
|
63
|
+
mime-types-data (3.2016.0521)
|
64
|
+
mini_portile2 (2.2.0)
|
65
|
+
minitest (5.10.3)
|
66
|
+
nio4r (2.1.0)
|
67
|
+
nokogiri (1.8.0-x86-mingw32)
|
68
|
+
mini_portile2 (~> 2.2.0)
|
69
|
+
rack (2.0.3)
|
70
|
+
rack-test (0.6.3)
|
71
|
+
rack (>= 1.0)
|
72
|
+
rails (5.1.3)
|
73
|
+
actioncable (= 5.1.3)
|
74
|
+
actionmailer (= 5.1.3)
|
75
|
+
actionpack (= 5.1.3)
|
76
|
+
actionview (= 5.1.3)
|
77
|
+
activejob (= 5.1.3)
|
78
|
+
activemodel (= 5.1.3)
|
79
|
+
activerecord (= 5.1.3)
|
80
|
+
activesupport (= 5.1.3)
|
81
|
+
bundler (>= 1.3.0)
|
82
|
+
railties (= 5.1.3)
|
83
|
+
sprockets-rails (>= 2.0.0)
|
84
|
+
rails-dom-testing (2.0.3)
|
85
|
+
activesupport (>= 4.2.0)
|
86
|
+
nokogiri (>= 1.6)
|
87
|
+
rails-html-sanitizer (1.0.3)
|
88
|
+
loofah (~> 2.0)
|
89
|
+
railties (5.1.3)
|
90
|
+
actionpack (= 5.1.3)
|
91
|
+
activesupport (= 5.1.3)
|
92
|
+
method_source
|
93
|
+
rake (>= 0.8.7)
|
94
|
+
thor (>= 0.18.1, < 2.0)
|
95
|
+
rake (12.0.0)
|
96
|
+
shoulda (3.5.0)
|
97
|
+
shoulda-context (~> 1.0, >= 1.0.1)
|
98
|
+
shoulda-matchers (>= 1.4.1, < 3.0)
|
99
|
+
shoulda-context (1.2.2)
|
100
|
+
shoulda-matchers (2.8.0)
|
101
|
+
activesupport (>= 3.0.0)
|
102
|
+
shoulda_create (0.0.9)
|
103
|
+
sprockets (3.7.1)
|
104
|
+
concurrent-ruby (~> 1.0)
|
105
|
+
rack (> 1, < 3)
|
106
|
+
sprockets-rails (3.2.0)
|
107
|
+
actionpack (>= 4.0)
|
108
|
+
activesupport (>= 4.0)
|
109
|
+
sprockets (>= 3.0.0)
|
110
|
+
sqlite3 (1.3.13-x86-mingw32)
|
111
|
+
thor (0.20.0)
|
112
|
+
thread_safe (0.3.6)
|
113
|
+
tzinfo (1.2.3)
|
114
|
+
thread_safe (~> 0.1)
|
115
|
+
websocket-driver (0.6.5)
|
116
|
+
websocket-extensions (>= 0.1.0)
|
117
|
+
websocket-extensions (0.1.2)
|
118
|
+
|
119
|
+
PLATFORMS
|
120
|
+
x86-mingw32
|
121
|
+
|
122
|
+
DEPENDENCIES
|
123
|
+
acts_as_favoritor!
|
124
|
+
factory_girl (~> 4.8)
|
125
|
+
rails (>= 4.0)
|
126
|
+
shoulda (~> 3.5)
|
127
|
+
shoulda_create (~> 0.0)
|
128
|
+
sqlite3 (~> 1.3)
|
129
|
+
|
130
|
+
BUNDLED WITH
|
131
|
+
1.15.4
|
data/README.md
CHANGED
data/acts_as_favoritor.gemspec
CHANGED
@@ -2,28 +2,28 @@
|
|
2
2
|
$:.push File.expand_path('../lib', __FILE__)
|
3
3
|
require 'acts_as_favoritor/version'
|
4
4
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.name = 'acts_as_favoritor'
|
7
|
+
gem.version = ActsAsFavoritor::VERSION
|
8
|
+
gem.authors = ['Jonas Hübotter']
|
9
|
+
gem.email = ['developer@slooob.com']
|
10
|
+
gem.homepage = 'https://github.com/slooob/acts_as_favoritor'
|
11
|
+
gem.summary = 'A Rubygem to add Favorite functionality for ActiveRecord models'
|
12
|
+
gem.description = 'acts_as_favoritor is a Rubygem to allow any ActiveRecord model to favorite any other model. This is accomplished through a double polymorphic relationship on the Favorite model. There is also built in support for blocking/un-blocking favorite records.'
|
13
|
+
gem.license = 'MIT'
|
14
14
|
|
15
|
-
|
15
|
+
gem.files = `git ls-files`.split("\n")
|
16
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
gem.require_paths = ['lib']
|
16
19
|
|
17
|
-
|
18
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
-
s.require_paths = ['lib']
|
20
|
+
gem.required_ruby_version = '>= 2.0'
|
21
21
|
|
22
|
-
|
22
|
+
gem.add_dependency 'activerecord', '>= 4.0'
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
gem.add_development_dependency 'sqlite3', '~> 1.3'
|
25
|
+
gem.add_development_dependency 'shoulda_create', '~> 0.0'
|
26
|
+
gem.add_development_dependency 'shoulda', '~> 3.5'
|
27
|
+
gem.add_development_dependency 'factory_girl', '~> 4.8'
|
28
|
+
gem.add_development_dependency 'rails', '>= 4.0'
|
29
29
|
end
|
data/lib/acts_as_favoritor.rb
CHANGED
@@ -25,9 +25,9 @@ module ActsAsFavoritor #:nodoc:
|
|
25
25
|
favorites = favoritor_type.constantize.
|
26
26
|
joins(:favorites).
|
27
27
|
where('favorites.blocked': false,
|
28
|
-
'favorites.
|
29
|
-
'favorites.
|
30
|
-
'favorites.
|
28
|
+
'favorites.favoritable_id': self.id,
|
29
|
+
'favorites.favoritable_type': parent_class_name(self),
|
30
|
+
'favorites.favoritor_type': favoritor_type)
|
31
31
|
if options.has_key? :limit
|
32
32
|
favorites = favorites.limit options[:limit]
|
33
33
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ActsAsFavoritor #:nodoc:
|
2
|
-
module
|
2
|
+
module Favoritor
|
3
3
|
|
4
4
|
def self.included base
|
5
5
|
base.extend ClassMethods
|
@@ -15,12 +15,12 @@ module ActsAsFavoritor #:nodoc:
|
|
15
15
|
|
16
16
|
module InstanceMethods
|
17
17
|
|
18
|
-
# Returns true if this instance
|
18
|
+
# Returns true if this instance has favorited the object passed as an argument.
|
19
19
|
def favorited? favoritable
|
20
20
|
0 < Favorite.unblocked.for_favoritor(self).for_favoritable(favoritable).count
|
21
21
|
end
|
22
22
|
|
23
|
-
# Returns the number of objects this instance
|
23
|
+
# Returns the number of objects this instance has favorited.
|
24
24
|
def favorites_count
|
25
25
|
Favorite.unblocked.for_favoritor(self).count
|
26
26
|
end
|
@@ -36,7 +36,7 @@ module ActsAsFavoritor #:nodoc:
|
|
36
36
|
|
37
37
|
# Deletes the favorite record if it exists.
|
38
38
|
def remove_favorite favoritable
|
39
|
-
if favorite = get_Favoritor
|
39
|
+
if favorite = get_Favoritor(favoritable)
|
40
40
|
favorite.destroy
|
41
41
|
end
|
42
42
|
end
|
@@ -47,7 +47,7 @@ module ActsAsFavoritor #:nodoc:
|
|
47
47
|
end
|
48
48
|
|
49
49
|
# Returns the favorite records related to this instance by type.
|
50
|
-
def favorites_by_type favoritable_type, options={}
|
50
|
+
def favorites_by_type favoritable_type, options = {}
|
51
51
|
favorites_scope = favorites_scoped.for_favoritable_type favoritable_type
|
52
52
|
favorites_scope = apply_options_to_scope favorites_scope, options
|
53
53
|
end
|
@@ -60,7 +60,7 @@ module ActsAsFavoritor #:nodoc:
|
|
60
60
|
|
61
61
|
# Returns the actual records which this instance has favorited.
|
62
62
|
def all_favorited options = {}
|
63
|
-
|
63
|
+
all_favorites(options).collect{ |f| f.favoritable }
|
64
64
|
end
|
65
65
|
|
66
66
|
# Returns the actual records of a particular type which this record has fovarited.
|
@@ -68,9 +68,9 @@ module ActsAsFavoritor #:nodoc:
|
|
68
68
|
favoritables = favoritable_type.constantize.
|
69
69
|
joins(:favorited).
|
70
70
|
where('favorites.blocked': false,
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
'favorites.favoritor_id': self.id,
|
72
|
+
'favorites.favoritor_type': parent_class_name(self),
|
73
|
+
'favorites.favoritable_type': favoritable_type)
|
74
74
|
if options.has_key? :limit
|
75
75
|
favoritables = favoritables.limit options[:limit]
|
76
76
|
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'rails'
|
2
2
|
|
3
3
|
module ActsAsFavoritor
|
4
|
-
|
5
4
|
class Railtie < Rails::Railtie
|
6
5
|
|
7
|
-
initializer 'acts_as_favoritor.active_record' do
|
6
|
+
initializer 'acts_as_favoritor.active_record' do
|
8
7
|
ActiveSupport.on_load :active_record do
|
9
8
|
include ActsAsFavoritor::Favoritor
|
10
9
|
include ActsAsFavoritor::Favoritable
|
@@ -12,5 +11,4 @@ module ActsAsFavoritor
|
|
12
11
|
end
|
13
12
|
|
14
13
|
end
|
15
|
-
|
16
14
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rails/generators'
|
2
2
|
require 'rails/generators/migration'
|
3
3
|
|
4
|
-
class
|
4
|
+
class ActsAsFavoritorGenerator < Rails::Generators::Base
|
5
5
|
|
6
6
|
include Rails::Generators::Migration
|
7
7
|
|
@@ -22,7 +22,7 @@ class ActsAsFollowerGenerator < Rails::Generators::Base
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def create_model
|
25
|
-
template 'model.rb', 'app/models/
|
25
|
+
template 'model.rb', 'app/models/favorite.rb'
|
26
26
|
end
|
27
27
|
|
28
28
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
class ActsAsFavoritorMigration < ActiveRecord::Migration<% if Rails::VERSION::MAJOR >= 5 %>[
|
1
|
+
class ActsAsFavoritorMigration < ActiveRecord::Migration<% if Rails::VERSION::MAJOR >= 5 %>[Rails::VERSION::STRING[0..2].to_f]<% end %>
|
2
2
|
def self.up
|
3
3
|
create_table :favorites, force: true do |t|
|
4
4
|
t.references :favoritable, polymorphic: true, null: false
|
5
5
|
t.references :favoritor, polymorphic: true, null: false
|
6
|
-
t.string :
|
6
|
+
t.string :lists, default: [:favorites].to_yaml, null: false
|
7
7
|
t.boolean :blocked, default: false, null: false
|
8
8
|
t.timestamps
|
9
9
|
end
|
@@ -3,9 +3,9 @@ class Favorite < ActiveRecord::Base
|
|
3
3
|
extend ActsAsFavoritor::FavoritorLib
|
4
4
|
extend ActsAsFavoritor::FavoriteScopes
|
5
5
|
|
6
|
-
serialize :
|
6
|
+
serialize :lists
|
7
7
|
|
8
|
-
# NOTE:
|
8
|
+
# NOTE: Favorites belong to the 'favoritable' and 'favoritor' interface
|
9
9
|
belongs_to :favoritable, polymorphic: true
|
10
10
|
belongs_to :favoritor, polymorphic: true
|
11
11
|
|
@@ -0,0 +1,283 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class ActsAsFavoritableTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
context 'instance methods' do
|
6
|
+
setup do
|
7
|
+
@sam = FactoryGirl.create :sam
|
8
|
+
end
|
9
|
+
|
10
|
+
should 'be defined' do
|
11
|
+
assert @sam.respond_to? :favoritors_count
|
12
|
+
assert @sam.respond_to? :favoritors
|
13
|
+
assert @sam.respond_to? :favorited_by?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'acts_as_favoritable' do
|
18
|
+
setup do
|
19
|
+
@sam = FactoryGirl.create :sam
|
20
|
+
@jon = FactoryGirl.create :jon
|
21
|
+
@oasis = FactoryGirl.create :oasis
|
22
|
+
@metallica = FactoryGirl.create :metallica
|
23
|
+
@green_day = FactoryGirl.create :green_day
|
24
|
+
@blink_182 = FactoryGirl.create :blink_182
|
25
|
+
@sam.favorite @jon
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'favoritors_count' do
|
29
|
+
should 'return the number of favoritors' do
|
30
|
+
assert_equal 0, @sam.favoritors_count
|
31
|
+
assert_equal 1, @jon.favoritors_count
|
32
|
+
end
|
33
|
+
|
34
|
+
should 'return the proper number of multiple favoritors' do
|
35
|
+
@bob = FactoryGirl.create :bob
|
36
|
+
@sam.favorite @bob
|
37
|
+
assert_equal 0, @sam.favoritors_count
|
38
|
+
assert_equal 1, @jon.favoritors_count
|
39
|
+
assert_equal 1, @bob.favoritors_count
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'favoritors' do
|
44
|
+
should 'return users' do
|
45
|
+
assert_equal [], @sam.favoritors
|
46
|
+
assert_equal [@sam], @jon.favoritors
|
47
|
+
end
|
48
|
+
|
49
|
+
should 'return users (multiple favoritors)' do
|
50
|
+
@bob = FactoryGirl.create :bob
|
51
|
+
@sam.favorite @bob
|
52
|
+
assert_equal [], @sam.favoritors
|
53
|
+
assert_equal [@sam], @jon.favoritors
|
54
|
+
assert_equal [@sam], @bob.favoritors
|
55
|
+
end
|
56
|
+
|
57
|
+
should 'return users (multiple favoritors, complex)' do
|
58
|
+
@bob = FactoryGirl.create :bob
|
59
|
+
@sam.favorite @bob
|
60
|
+
@jon.favorite @bob
|
61
|
+
assert_equal [], @sam.favoritors
|
62
|
+
assert_equal [@sam], @jon.favoritors
|
63
|
+
assert_equal [@sam, @jon], @bob.favoritors
|
64
|
+
end
|
65
|
+
|
66
|
+
should 'accept AR options' do
|
67
|
+
@bob = FactoryGirl.create :bob
|
68
|
+
@bob.favorite @jon
|
69
|
+
assert_equal 1, @jon.favoritors(limit: 1).count
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'favorited_by' do
|
74
|
+
should 'return_favoritor_status' do
|
75
|
+
assert_equal true, @jon.favorited_by?(@sam)
|
76
|
+
assert_equal false, @sam.favorited_by?(@jon)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'destroying a favoritable' do
|
81
|
+
setup do
|
82
|
+
@jon.destroy
|
83
|
+
end
|
84
|
+
|
85
|
+
should_change ('Favorite count', by: -1) { Favorite.count }
|
86
|
+
should_change ('@sam.all_favorited.size', by: -1) { @sam.all_favorited.size }
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'get favorite record' do
|
90
|
+
setup do
|
91
|
+
@bob = FactoryGirl.create :bob
|
92
|
+
@favorite = @bob.favorite @sam
|
93
|
+
end
|
94
|
+
|
95
|
+
should 'return favorite record' do
|
96
|
+
assert_equal @favorite, @sam.get_favorite_for(@bob)
|
97
|
+
end
|
98
|
+
|
99
|
+
should 'return nil' do
|
100
|
+
assert_nil @sam.get_favorite_for(@jon)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'blocks' do
|
105
|
+
setup do
|
106
|
+
@bob = FactoryGirl.create :bob
|
107
|
+
@jon.block @sam
|
108
|
+
@jon.block @bob
|
109
|
+
end
|
110
|
+
|
111
|
+
should 'accept AR options' do
|
112
|
+
assert_equal 1, @jon.blocks(limit: 1).count
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'blocking a favoritor' do
|
117
|
+
context 'in my favorited list' do
|
118
|
+
setup do
|
119
|
+
@jon.block @sam
|
120
|
+
end
|
121
|
+
|
122
|
+
should 'remove him from favoritors' do
|
123
|
+
assert_equal 0, @jon.favoritors_count
|
124
|
+
end
|
125
|
+
|
126
|
+
should 'add him to the blocked favoritors' do
|
127
|
+
assert_equal 1, @jon.blocked_favoritors_count
|
128
|
+
end
|
129
|
+
|
130
|
+
should 'not be able to favorite again' do
|
131
|
+
@jon.favorite @sam
|
132
|
+
assert_equal 0, @jon.favoritors_count
|
133
|
+
end
|
134
|
+
|
135
|
+
should 'not be present when listing favoritors' do
|
136
|
+
assert_equal [], @jon.favoritors
|
137
|
+
end
|
138
|
+
|
139
|
+
should 'be in the list of blocks' do
|
140
|
+
assert_equal [@sam], @jon.blocks
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'not in my favorited list' do
|
145
|
+
setup do
|
146
|
+
@sam.block @jon
|
147
|
+
end
|
148
|
+
|
149
|
+
should 'add him to the blocked favoritors' do
|
150
|
+
assert_equal 1, @sam.blocked_favoritors_count
|
151
|
+
end
|
152
|
+
|
153
|
+
should 'not be able to favorite again' do
|
154
|
+
@sam.favorite @jon
|
155
|
+
assert_equal 0, @sam.favoritors_count
|
156
|
+
end
|
157
|
+
|
158
|
+
should 'not be present when listing favoritors' do
|
159
|
+
assert_equal [], @sam.favoritors
|
160
|
+
end
|
161
|
+
|
162
|
+
should 'be in the list of blocks' do
|
163
|
+
assert_equal [@jon], @sam.blocks
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context 'unblocking a blocked favorite' do
|
169
|
+
setup do
|
170
|
+
@jon.block @sam
|
171
|
+
@jon.unblock @sam
|
172
|
+
end
|
173
|
+
|
174
|
+
should 'not include the unblocked user in the list of favoritors' do
|
175
|
+
assert_equal [], @jon.favoritors
|
176
|
+
end
|
177
|
+
|
178
|
+
should 'remove him from the blocked favoritors' do
|
179
|
+
assert_equal 0, @jon.blocked_favoritors_count
|
180
|
+
assert_equal [], @jon.blocks
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'unblock a non-existent favorite' do
|
185
|
+
setup do
|
186
|
+
@sam.remove_favorite @jon
|
187
|
+
@jon.unblock @sam
|
188
|
+
end
|
189
|
+
|
190
|
+
should 'not be in the list of favoritors' do
|
191
|
+
assert_equal [], @jon.favoritors
|
192
|
+
end
|
193
|
+
|
194
|
+
should 'not be in the blocked favoritors count' do
|
195
|
+
assert_equal 0, @jon.blocked_favoritors_count
|
196
|
+
end
|
197
|
+
|
198
|
+
should 'not be in the blocks list' do
|
199
|
+
assert_equal [], @jon.blocks
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
context 'favoritors_by_type' do
|
204
|
+
setup do
|
205
|
+
@sam.favorite @oasis
|
206
|
+
@jon.favorite @oasis
|
207
|
+
end
|
208
|
+
|
209
|
+
should 'return the favoritors for given type' do
|
210
|
+
assert_equal [@sam], @jon.favoritors_by_type('User')
|
211
|
+
assert_equal [@sam, @jon], @oasis.favoritors_by_type('User')
|
212
|
+
end
|
213
|
+
|
214
|
+
should 'not return block favoritors in the favoritors for a given type' do
|
215
|
+
@oasis.block @jon
|
216
|
+
assert_equal [@sam], @oasis.favoritors_by_type('User')
|
217
|
+
end
|
218
|
+
|
219
|
+
should 'return the count for favoritors_by_type_count for a given type' do
|
220
|
+
assert_equal 1, @jon.favoritors_by_type_count('User')
|
221
|
+
assert_equal 2, @oasis.favoritors_by_type_count('User')
|
222
|
+
end
|
223
|
+
|
224
|
+
should 'not count blocked favorites in the count' do
|
225
|
+
@oasis.block @sam
|
226
|
+
assert_equal 1, @oasis.favoritors_by_type_count('User')
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context 'favoritors_with_sti' do
|
231
|
+
setup do
|
232
|
+
@sam.favorite @green_day
|
233
|
+
@sam.favorite @blink_182
|
234
|
+
end
|
235
|
+
|
236
|
+
should 'return the favoritors for given type' do
|
237
|
+
assert_equal @sam.favorites_by_type('Band').first.favoritable, @green_day.becomes(Band)
|
238
|
+
assert_equal @sam.favorites_by_type('Band').second.favoritable, @blink_182.becomes(Band)
|
239
|
+
assert @green_day.favoritors_by_type('User').include?(@sam)
|
240
|
+
assert @blink_182.favoritors_by_type('User').include?(@sam)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
context 'method_missing' do
|
245
|
+
setup do
|
246
|
+
@sam.favorite @oasis
|
247
|
+
@jon.favorite @oasis
|
248
|
+
end
|
249
|
+
|
250
|
+
should 'return the favoritors for given type' do
|
251
|
+
assert_equal [@sam], @jon.user_favoritors
|
252
|
+
assert_equal [@sam, @jon], @oasis.user_favoritors
|
253
|
+
end
|
254
|
+
|
255
|
+
should 'not return block favoritors in the favoritors for a given type' do
|
256
|
+
@oasis.block @jon
|
257
|
+
assert_equal [@sam], @oasis.user_favoritors
|
258
|
+
end
|
259
|
+
|
260
|
+
should 'return the count for favoritors_by_type_count for a given type' do
|
261
|
+
assert_equal 1, @jon.count_user_favoritors
|
262
|
+
assert_equal 2, @oasis.count_user_favoritors
|
263
|
+
end
|
264
|
+
|
265
|
+
should 'not count blocked favorites in the count' do
|
266
|
+
@oasis.block @sam
|
267
|
+
assert_equal 1, @oasis.count_user_favoritors
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
context 'respond_to?' do
|
272
|
+
should 'advertise that it responds to favorited methods' do
|
273
|
+
assert @oasis.respond_to?(:user_favoritors)
|
274
|
+
assert @oasis.respond_to?(:user_favoritors_count)
|
275
|
+
end
|
276
|
+
|
277
|
+
should 'return false when called with a nonexistent method' do
|
278
|
+
assert (not @oasis.respond_to?(:foobar))
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
end
|
283
|
+
end
|