socialization-cassandra 0.0.1.pre.alpha
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 +7 -0
- data/.gitignore +13 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +144 -0
- data/Rakefile +10 -0
- data/init.rb +1 -0
- data/lib/generators/socialization/socialization_generator.rb +17 -0
- data/lib/generators/socialization/templates/cassandra/model_comment.rb +2 -0
- data/lib/generators/socialization/templates/cassandra/model_follow.rb +2 -0
- data/lib/generators/socialization/templates/cassandra/model_like.rb +2 -0
- data/lib/generators/socialization/templates/cassandra/model_share.rb +2 -0
- data/lib/generators/socialization/templates/socialization_cassandra_migrations.rake +141 -0
- data/lib/socialization/actors/commenter.rb +79 -0
- data/lib/socialization/actors/follower.rb +79 -0
- data/lib/socialization/actors/liker.rb +79 -0
- data/lib/socialization/actors/mentioner.rb +79 -0
- data/lib/socialization/actors/sharer.rb +79 -0
- data/lib/socialization/config/config.rb +51 -0
- data/lib/socialization/helpers/acts_as_helpers.rb +49 -0
- data/lib/socialization/helpers/string.rb +17 -0
- data/lib/socialization/lib/exceptions.rb +3 -0
- data/lib/socialization/stores/cassandra/base.rb +149 -0
- data/lib/socialization/stores/cassandra/comment.rb +28 -0
- data/lib/socialization/stores/cassandra/config.rb +29 -0
- data/lib/socialization/stores/cassandra/follow.rb +36 -0
- data/lib/socialization/stores/cassandra/like.rb +35 -0
- data/lib/socialization/stores/cassandra/mixins/base.rb +8 -0
- data/lib/socialization/stores/cassandra/share.rb +28 -0
- data/lib/socialization/stores/mixins/base.rb +22 -0
- data/lib/socialization/stores/mixins/follow.rb +39 -0
- data/lib/socialization/stores/mixins/like.rb +40 -0
- data/lib/socialization/stores/mixins/mention.rb +40 -0
- data/lib/socialization/version.rb +3 -0
- data/lib/socialization/victims/commentable.rb +51 -0
- data/lib/socialization/victims/followable.rb +50 -0
- data/lib/socialization/victims/likeable.rb +51 -0
- data/lib/socialization/victims/shareable.rb +51 -0
- data/lib/socialization.rb +17 -0
- data/socialization-cassandra.gemspec +30 -0
- data/test/actors/follower_test.rb +129 -0
- data/test/actors/liker_test.rb +121 -0
- data/test/stores/cassandra/base_test.rb +186 -0
- data/test/stores/cassandra/config_test.rb +36 -0
- data/test/stores/cassandra/follow_store_test.rb +28 -0
- data/test/stores/cassandra/like_store_test.rb +26 -0
- data/test/string_test.rb +13 -0
- data/test/test_helper.rb +259 -0
- data/test/victims/followable_test.rb +65 -0
- data/test/victims/likeable_test.rb +67 -0
- data/test/world_test.rb +107 -0
- metadata +209 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
module Socialization
|
2
|
+
module Stores
|
3
|
+
module Mixins
|
4
|
+
module Like
|
5
|
+
|
6
|
+
public
|
7
|
+
def touch(what = nil)
|
8
|
+
if what.nil?
|
9
|
+
@touch || false
|
10
|
+
else
|
11
|
+
raise Socialization::ArgumentError unless [:all, :liker, :likeable, false, nil].include?(what)
|
12
|
+
@touch = what
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def after_like(method)
|
17
|
+
raise Socialization::ArgumentError unless method.is_a?(Symbol) || method.nil?
|
18
|
+
@after_create_hook = method
|
19
|
+
end
|
20
|
+
|
21
|
+
def after_unlike(method)
|
22
|
+
raise Socialization::ArgumentError unless method.is_a?(Symbol) || method.nil?
|
23
|
+
@after_destroy_hook = method
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
def call_after_create_hooks(liker, likeable)
|
28
|
+
self.send(@after_create_hook, liker, likeable) if @after_create_hook
|
29
|
+
touch_dependents(liker, likeable)
|
30
|
+
end
|
31
|
+
|
32
|
+
def call_after_destroy_hooks(liker, likeable)
|
33
|
+
self.send(@after_destroy_hook, liker, likeable) if @after_destroy_hook
|
34
|
+
touch_dependents(liker, likeable)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Socialization
|
2
|
+
module Stores
|
3
|
+
module Mixins
|
4
|
+
module Mention
|
5
|
+
|
6
|
+
public
|
7
|
+
def touch(what = nil)
|
8
|
+
if what.nil?
|
9
|
+
@touch || false
|
10
|
+
else
|
11
|
+
raise Socialization::ArgumentError unless [:all, :mentioner, :mentionable, false, nil].include?(what)
|
12
|
+
@touch = what
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def after_mention(method)
|
17
|
+
raise Socialization::ArgumentError unless method.is_a?(Symbol) || method.nil?
|
18
|
+
@after_create_hook = method
|
19
|
+
end
|
20
|
+
|
21
|
+
def after_unmention(method)
|
22
|
+
raise Socialization::ArgumentError unless method.is_a?(Symbol) || method.nil?
|
23
|
+
@after_destroy_hook = method
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
def call_after_create_hooks(mentioner, mentionable)
|
28
|
+
self.send(@after_create_hook, mentioner, mentionable) if @after_create_hook
|
29
|
+
touch_dependents(mentioner, mentionable)
|
30
|
+
end
|
31
|
+
|
32
|
+
def call_after_destroy_hooks(mentioner, mentionable)
|
33
|
+
self.send(@after_destroy_hook, mentioner, mentionable) if @after_destroy_hook
|
34
|
+
touch_dependents(mentioner, mentionable)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
class Base
|
3
|
+
def is_commentable?
|
4
|
+
false
|
5
|
+
end
|
6
|
+
alias commentable? is_commentable?
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Socialization
|
11
|
+
module Commentable
|
12
|
+
extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
included do
|
15
|
+
after_destroy { Socialization.comment_model.remove_commenters(self) }
|
16
|
+
|
17
|
+
# Specifies if self can be commented.
|
18
|
+
#
|
19
|
+
# @return [Boolean]
|
20
|
+
def is_commentable?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
alias commentable? is_commentable?
|
24
|
+
|
25
|
+
# Specifies if self is commented by a {commenter} object.
|
26
|
+
#
|
27
|
+
# @return [Boolean]
|
28
|
+
def commented_by?(commenter)
|
29
|
+
raise Socialization::ArgumentError, "#{commenter} is not commenter!" unless commenter.respond_to?(:is_commenter?) && commenter.is_commenter?
|
30
|
+
Socialization.comment_model.comments?(commenter, self)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns an array of {commenter}s commenting self.
|
34
|
+
#
|
35
|
+
# @param [Class] klass the {commenter} class to be included. e.g. `User`
|
36
|
+
# @return [Array<commenter, Numeric>] An array of commenter objects or IDs
|
37
|
+
def commenters(klass, opts = {})
|
38
|
+
Socialization.comment_model.commenters(self, klass, opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns a scope of the {commenter}s commenting self.
|
42
|
+
#
|
43
|
+
# @param [Class] klass the {commenter} class to be included in the scope. e.g. `User`
|
44
|
+
# @return ActiveRecord::Relation
|
45
|
+
def commenters_relation(klass, opts = {})
|
46
|
+
Socialization.comment_model.commenters_relation(self, klass, opts)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
class Base
|
3
|
+
def is_followable?
|
4
|
+
false
|
5
|
+
end
|
6
|
+
alias followable? is_followable?
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Socialization
|
11
|
+
module Followable
|
12
|
+
extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
included do
|
15
|
+
after_destroy { Socialization.follow_model.remove_followers(self) }
|
16
|
+
|
17
|
+
# Specifies if self can be followed.
|
18
|
+
#
|
19
|
+
# @return [Boolean]
|
20
|
+
def is_followable?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
alias followable? is_followable?
|
24
|
+
|
25
|
+
# Specifies if self is followed by a {Follower} object.
|
26
|
+
#
|
27
|
+
# @return [Boolean]
|
28
|
+
def followed_by?(follower)
|
29
|
+
raise Socialization::ArgumentError, "#{follower} is not follower!" unless follower.respond_to?(:is_follower?) && follower.is_follower?
|
30
|
+
Socialization.follow_model.follows?(follower, self)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns an array of {Follower}s following self.
|
34
|
+
#
|
35
|
+
# @param [Class] klass the {Follower} class to be included. e.g. `User`
|
36
|
+
# @return [Array<Follower, Numeric>] An array of Follower objects or IDs
|
37
|
+
def followers(klass, opts = {})
|
38
|
+
Socialization.follow_model.followers(self, klass, opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns a scope of the {Follower}s following self.
|
42
|
+
#
|
43
|
+
# @param [Class] klass the {Follower} class to be included in the scope. e.g. `User`
|
44
|
+
# @return ActiveRecord::Relation
|
45
|
+
def followers_relation(klass, opts = {})
|
46
|
+
Socialization.follow_model.followers_relation(self, klass, opts)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
class Base
|
3
|
+
def is_likeable?
|
4
|
+
false
|
5
|
+
end
|
6
|
+
alias likeable? is_likeable?
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Socialization
|
11
|
+
module Likeable
|
12
|
+
extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
included do
|
15
|
+
after_destroy { Socialization.like_model.remove_likers(self) }
|
16
|
+
|
17
|
+
# Specifies if self can be liked.
|
18
|
+
#
|
19
|
+
# @return [Boolean]
|
20
|
+
def is_likeable?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
alias likeable? is_likeable?
|
24
|
+
|
25
|
+
# Specifies if self is liked by a {Liker} object.
|
26
|
+
#
|
27
|
+
# @return [Boolean]
|
28
|
+
def liked_by?(liker)
|
29
|
+
raise Socialization::ArgumentError, "#{liker} is not liker!" unless liker.respond_to?(:is_liker?) && liker.is_liker?
|
30
|
+
Socialization.like_model.likes?(liker, self)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns an array of {Liker}s liking self.
|
34
|
+
#
|
35
|
+
# @param [Class] klass the {Liker} class to be included. e.g. `User`
|
36
|
+
# @return [Array<Liker, Numeric>] An array of Liker objects or IDs
|
37
|
+
def likers(klass, opts = {})
|
38
|
+
Socialization.like_model.likers(self, klass, opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns a scope of the {Liker}s liking self.
|
42
|
+
#
|
43
|
+
# @param [Class] klass the {Liker} class to be included in the scope. e.g. `User`
|
44
|
+
# @return ActiveRecord::Relation
|
45
|
+
def likers_relation(klass, opts = {})
|
46
|
+
Socialization.like_model.likers_relation(self, klass, opts)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
class Base
|
3
|
+
def is_shareable?
|
4
|
+
false
|
5
|
+
end
|
6
|
+
alias shareable? is_shareable?
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Socialization
|
11
|
+
module Shareable
|
12
|
+
extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
included do
|
15
|
+
after_destroy { Socialization.share_model.remove_sharers(self) }
|
16
|
+
|
17
|
+
# Specifies if self can be shared.
|
18
|
+
#
|
19
|
+
# @return [Boolean]
|
20
|
+
def is_shareable?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
alias shareable? is_shareable?
|
24
|
+
|
25
|
+
# Specifies if self is shared by a {sharer} object.
|
26
|
+
#
|
27
|
+
# @return [Boolean]
|
28
|
+
def shared_by?(sharer)
|
29
|
+
raise Socialization::ArgumentError, "#{sharer} is not sharer!" unless sharer.respond_to?(:is_sharer?) && sharer.is_sharer?
|
30
|
+
Socialization.share_model.shares?(sharer, self)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns an array of {sharer}s shareing self.
|
34
|
+
#
|
35
|
+
# @param [Class] klass the {sharer} class to be included. e.g. `User`
|
36
|
+
# @return [Array<sharer, Numeric>] An array of sharer objects or IDs
|
37
|
+
def sharers(klass, opts = {})
|
38
|
+
Socialization.share_model.sharers(self, klass, opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns a scope of the {sharer}s sharing self.
|
42
|
+
#
|
43
|
+
# @param [Class] klass the {sharer} class to be included in the scope. e.g. `User`
|
44
|
+
# @return ActiveRecord::Relation
|
45
|
+
def sharers_relation(klass, opts = {})
|
46
|
+
Socialization.share_model.sharers_relation(self, klass, opts)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
%w(
|
2
|
+
lib/*.rb
|
3
|
+
stores/mixins/base.rb
|
4
|
+
stores/mixins/**/*.rb
|
5
|
+
stores/cassandra/mixins/base.rb
|
6
|
+
stores/cassandra/mixins/**/*.rb
|
7
|
+
stores/cassandra/base.rb
|
8
|
+
stores/cassandra/**/*.rb
|
9
|
+
actors/**/*.rb
|
10
|
+
victims/**/*.rb
|
11
|
+
helpers/**/*.rb
|
12
|
+
config/**/*.rb
|
13
|
+
).each do |path|
|
14
|
+
Dir["#{File.dirname(__FILE__)}/socialization/#{path}"].each { |f| require(f) }
|
15
|
+
end
|
16
|
+
|
17
|
+
ActiveRecord::Base.send :include, Socialization::ActsAsHelpers
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "socialization/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "socialization-cassandra"
|
7
|
+
s.version = Socialization::VERSION
|
8
|
+
s.authors = ["Amrit Singh"]
|
9
|
+
s.email = "amrit0403@gmail.com"
|
10
|
+
s.homepage = "https://github.com/amritsingh/socialization-cassandra"
|
11
|
+
s.summary = "Easily socialize your app with Likes and Follows"
|
12
|
+
s.description = "Socialization allows any model to Follow and/or Like any other model. This is accomplished through a double polymorphic relationship on the Follow and Like models. But you don't need to know that since all the complexity is hidden from you."
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.has_rdoc = false
|
20
|
+
|
21
|
+
s.add_runtime_dependency "activerecord"
|
22
|
+
s.add_runtime_dependency "cassandra-driver"
|
23
|
+
|
24
|
+
s.add_development_dependency "logger"
|
25
|
+
s.add_development_dependency "mocha"
|
26
|
+
s.add_development_dependency "shoulda"
|
27
|
+
s.add_development_dependency "sqlite3"
|
28
|
+
s.add_development_dependency "yard"
|
29
|
+
s.add_development_dependency "minitest", "~> 4.0"
|
30
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__))+'/../test_helper'
|
2
|
+
|
3
|
+
class FollowerTest < TestCase
|
4
|
+
include Assertions
|
5
|
+
context "Follower" do
|
6
|
+
setup do
|
7
|
+
# @follower = ImAFollower.new
|
8
|
+
@follower = ImAFollower.create
|
9
|
+
@followable = ImAFollowable.create
|
10
|
+
end
|
11
|
+
|
12
|
+
context "#is_follower?" do
|
13
|
+
should "return true" do
|
14
|
+
assert_true @follower.is_follower?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "#follower?" do
|
19
|
+
should "return true" do
|
20
|
+
assert_true @follower.follower?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "#follow!" do
|
25
|
+
should "not accept non-followables" do
|
26
|
+
assert_raises(Socialization::ArgumentError) { @follower.follow!(:foo) }
|
27
|
+
end
|
28
|
+
|
29
|
+
should "call $Follow.follow!" do
|
30
|
+
assert_send([$Follow, :follow!, *[@follower, @followable]])
|
31
|
+
@follower.follow!(@followable)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "#unfollow!" do
|
36
|
+
should "not accept non-followables" do
|
37
|
+
assert_raises(Socialization::ArgumentError) { @follower.unfollow!(:foo) }
|
38
|
+
end
|
39
|
+
|
40
|
+
should "call $Follow.follow!" do
|
41
|
+
Minitest::Mock.new.expect(:check, true) do
|
42
|
+
$Follow.unfollows!(@follower, @followable)
|
43
|
+
end
|
44
|
+
@follower.unfollow!(@followable)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "#toggle_follow!" do
|
49
|
+
should "not accept non-followables" do
|
50
|
+
assert_raises(Socialization::ArgumentError) { @follower.unfollow!(:foo) }
|
51
|
+
end
|
52
|
+
|
53
|
+
should "unfollow when following" do
|
54
|
+
@follower.follow!(@followable)
|
55
|
+
Minitest::Mock.new.expect(:check, true) do
|
56
|
+
@follower.follows?(@followable)
|
57
|
+
end
|
58
|
+
# @follower.expect :follows?, true, *[@followable]
|
59
|
+
# assert_send([@follower, :follows?, *[@followable]])
|
60
|
+
assert_send([@follower, :unfollow!, *[@followable]])
|
61
|
+
@follower.toggle_follow!(@followable)
|
62
|
+
end
|
63
|
+
|
64
|
+
should "follow when not following" do
|
65
|
+
Minitest::Mock.new.expect(:check, false) do
|
66
|
+
@follower.follows?(@followable)
|
67
|
+
end
|
68
|
+
# !assert_send([@follower, :follows?, *[@followable]])
|
69
|
+
# assert_send([@follower, :follows?, *[@followable]])
|
70
|
+
@follower.toggle_follow!(@followable)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "#follows?" do
|
75
|
+
should "not accept non-followables" do
|
76
|
+
assert_raises(Socialization::ArgumentError) { @follower.unfollow!(:foo) }
|
77
|
+
end
|
78
|
+
|
79
|
+
should "call $Follow.follows?" do
|
80
|
+
Minitest::Mock.new.expect(:check, false) do
|
81
|
+
$Follow.follows?(@follower, @followable)
|
82
|
+
end
|
83
|
+
# assert_send([$Follow, :follows?, *[@follower, @followable]])
|
84
|
+
@follower.follows?(@followable)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "#followables" do
|
89
|
+
should "call $Follow.followables" do
|
90
|
+
assert_send([$Follow, :followables, *[@follower, @followable.class, { :foo => :bar }]])
|
91
|
+
@follower.followables(@followable.class, { :foo => :bar })
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context "#followees" do
|
96
|
+
should "call $Follow.followables" do
|
97
|
+
assert_send([$Follow, :followables, *[@follower, @followable.class, { :foo => :bar }]])
|
98
|
+
@follower.followees(@followable.class, { :foo => :bar })
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "#followables_relation" do
|
103
|
+
should "call $Follow.followables_relation" do
|
104
|
+
assert_send([$Follow, :followables_relation, *[@follower, @followable.class, { :foo => :bar }]])
|
105
|
+
@follower.followables_relation(@followable.class, { :foo => :bar })
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context "#followees_relation" do
|
110
|
+
should "call $Follow.followables_relation" do
|
111
|
+
assert_send([$Follow, :followables_relation, *[@follower, @followable.class, { :foo => :bar }]])
|
112
|
+
@follower.followees_relation(@followable.class, { :foo => :bar })
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context "deleting a follower" do
|
117
|
+
setup do
|
118
|
+
@follower = ImAFollower.create
|
119
|
+
@follower.follow!(@followable)
|
120
|
+
end
|
121
|
+
|
122
|
+
should "remove follow relationships" do
|
123
|
+
assert_send([Socialization.follow_model, :remove_followables, *[@follower]])
|
124
|
+
@follower.destroy
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__))+'/../test_helper'
|
2
|
+
|
3
|
+
class LikerTest < TestCase
|
4
|
+
include Assertions
|
5
|
+
context "Liker" do
|
6
|
+
setup do
|
7
|
+
# @liker = ImALiker.new
|
8
|
+
@liker = ImALiker.create
|
9
|
+
@likeable = ImALikeable.create
|
10
|
+
end
|
11
|
+
|
12
|
+
context "#is_liker?" do
|
13
|
+
should "return true" do
|
14
|
+
assert_true @liker.is_liker?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "#liker?" do
|
19
|
+
should "return true" do
|
20
|
+
assert_true @liker.liker?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "#like!" do
|
25
|
+
should "not accept non-likeables" do
|
26
|
+
assert_raises(Socialization::ArgumentError) { @liker.like!(:foo) }
|
27
|
+
end
|
28
|
+
|
29
|
+
should "call $Like.like!" do
|
30
|
+
assert_send([$Like, :like!, *[@liker, @likeable]])
|
31
|
+
@liker.like!(@likeable)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "#unlike!" do
|
36
|
+
should "not accept non-likeables" do
|
37
|
+
assert_raises(Socialization::ArgumentError) { @liker.unlike!(:foo) }
|
38
|
+
end
|
39
|
+
|
40
|
+
should "call $Like.like!" do
|
41
|
+
Minitest::Mock.new.expect(:check, false) do
|
42
|
+
$Like.unlike!(@liker, @likeables)
|
43
|
+
end
|
44
|
+
@liker.unlike!(@likeable)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "#toggle_like!" do
|
49
|
+
should "not accept non-likeables" do
|
50
|
+
assert_raises(Socialization::ArgumentError) { @liker.unlike!(:foo) }
|
51
|
+
end
|
52
|
+
|
53
|
+
should "unlike when likeing" do
|
54
|
+
@liker.like!(@likeable)
|
55
|
+
Minitest::Mock.new.expect(:check, true) do
|
56
|
+
@liker.likes?(@likeables)
|
57
|
+
end
|
58
|
+
Minitest::Mock.new.expect(:check, true) do
|
59
|
+
@liker.unlike!(@likeables)
|
60
|
+
end
|
61
|
+
# assert_send([@liker, :unlike!, *[@likeable]])
|
62
|
+
@liker.toggle_like!(@likeable)
|
63
|
+
end
|
64
|
+
|
65
|
+
should "like when not likeing" do
|
66
|
+
Minitest::Mock.new.expect(:check, false) do
|
67
|
+
@liker.likes?(@likeables)
|
68
|
+
end
|
69
|
+
assert_send([@liker, :like!, *[@likeable]])
|
70
|
+
@liker.toggle_like!(@likeable)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "#likes?" do
|
75
|
+
should "not accept non-likeables" do
|
76
|
+
assert_raises(Socialization::ArgumentError) { @liker.unlike!(:foo) }
|
77
|
+
end
|
78
|
+
|
79
|
+
should "call $Like.likes?" do
|
80
|
+
Minitest::Mock.new.expect(:check, false) do
|
81
|
+
$Like.likes?(@liker, @likeables)
|
82
|
+
end
|
83
|
+
# assert_send([$Like, :likes?, *[@liker, @likeable]])
|
84
|
+
@liker.likes?(@likeable)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "#likeables" do
|
89
|
+
should "call $Like.likeables" do
|
90
|
+
assert_send([$Like, :likeables, *[@liker, @likeable.class, { :foo => :bar }]])
|
91
|
+
@liker.likeables(@likeable.class, { :foo => :bar })
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context "#likees" do
|
96
|
+
should "call $Like.likeables" do
|
97
|
+
assert_send([$Like, :likeables, *[@liker, @likeable.class, { :foo => :bar }]])
|
98
|
+
@liker.likees(@likeable.class, { :foo => :bar })
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "#likeables_relation" do
|
103
|
+
should "call $Follow.likeables_relation" do
|
104
|
+
assert_send([$Like, :likeables_relation, *[@liker, @likeable.class, { :foo => :bar }]])
|
105
|
+
@liker.likeables_relation(@likeable.class, { :foo => :bar })
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context "#likees_relation" do
|
110
|
+
should "call $Follow.likeables_relation" do
|
111
|
+
assert_send([$Like, :likeables_relation, *[@liker, @likeable.class, { :foo => :bar }]])
|
112
|
+
@liker.likees_relation(@likeable.class, { :foo => :bar })
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
should "remove like relationships" do
|
117
|
+
assert_send([Socialization.like_model, :remove_likeables, *[@liker]])
|
118
|
+
@liker.destroy
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|