socialization 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/.travis.yml +2 -1
  4. data/Appraisals +13 -1
  5. data/CHANGELOG.md +12 -0
  6. data/Guardfile +12 -0
  7. data/LICENSE +2 -2
  8. data/README.md +46 -1
  9. data/Rakefile +8 -10
  10. data/lib/socialization/stores/active_record/follow.rb +4 -0
  11. data/lib/socialization/stores/active_record/like.rb +4 -0
  12. data/lib/socialization/stores/active_record/mention.rb +4 -0
  13. data/lib/socialization/stores/active_record/mixins/base.rb +4 -0
  14. data/lib/socialization/stores/mixins/follow.rb +1 -1
  15. data/lib/socialization/version.rb +1 -1
  16. data/socialization.gemspec +5 -3
  17. data/spec/actors/follower_spec.rb +113 -0
  18. data/spec/actors/liker_spec.rb +105 -0
  19. data/spec/actors/mentioner_spec.rb +105 -0
  20. data/spec/spec_helper.rb +21 -0
  21. data/{test/test_helper.rb → spec/spec_support/data_stores.rb} +76 -81
  22. data/spec/spec_support/matchers.rb +54 -0
  23. data/spec/stores/active_record/follow_store_spec.rb +147 -0
  24. data/spec/stores/active_record/like_store_spec.rb +146 -0
  25. data/spec/stores/active_record/mention_store_spec.rb +148 -0
  26. data/spec/stores/active_record/mixins/base_spec.rb +25 -0
  27. data/spec/stores/redis/base_spec.rb +195 -0
  28. data/spec/stores/redis/config_spec.rb +28 -0
  29. data/spec/stores/redis/follow_store_spec.rb +26 -0
  30. data/spec/stores/redis/like_store_spec.rb +23 -0
  31. data/spec/stores/redis/mention_store_spec.rb +23 -0
  32. data/spec/string_spec.rb +13 -0
  33. data/spec/victims/followable_spec.rb +59 -0
  34. data/spec/victims/likeable_spec.rb +58 -0
  35. data/spec/victims/mentionable_spec.rb +59 -0
  36. data/spec/world_spec.rb +107 -0
  37. metadata +79 -42
  38. data/test/actors/follower_test.rb +0 -114
  39. data/test/actors/liker_test.rb +0 -106
  40. data/test/actors/mentioner_test.rb +0 -106
  41. data/test/stores/active_record/follow_store_test.rb +0 -138
  42. data/test/stores/active_record/like_store_test.rb +0 -139
  43. data/test/stores/active_record/mention_store_test.rb +0 -138
  44. data/test/stores/redis/base_test.rb +0 -203
  45. data/test/stores/redis/config_test.rb +0 -30
  46. data/test/stores/redis/follow_store_test.rb +0 -27
  47. data/test/stores/redis/like_store_test.rb +0 -25
  48. data/test/stores/redis/mention_store_test.rb +0 -25
  49. data/test/string_test.rb +0 -13
  50. data/test/victims/followable_test.rb +0 -60
  51. data/test/victims/likeable_test.rb +0 -60
  52. data/test/victims/mentionable_test.rb +0 -60
  53. data/test/world_test.rb +0 -112
@@ -1,114 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__))+'/../test_helper'
2
-
3
- class FollowerTest < Test::Unit::TestCase
4
- context "Follower" do
5
- setup do
6
- @follower = ImAFollower.new
7
- @followable = ImAFollowable.create
8
- end
9
-
10
- context "#is_follower?" do
11
- should "return true" do
12
- assert_true @follower.is_follower?
13
- end
14
- end
15
-
16
- context "#follower?" do
17
- should "return true" do
18
- assert_true @follower.follower?
19
- end
20
- end
21
-
22
- context "#follow!" do
23
- should "not accept non-followables" do
24
- assert_raise(Socialization::ArgumentError) { @follower.follow!(:foo) }
25
- end
26
-
27
- should "call $Follow.follow!" do
28
- $Follow.expects(:follow!).with(@follower, @followable).once
29
- @follower.follow!(@followable)
30
- end
31
- end
32
-
33
- context "#unfollow!" do
34
- should "not accept non-followables" do
35
- assert_raise(Socialization::ArgumentError) { @follower.unfollow!(:foo) }
36
- end
37
-
38
- should "call $Follow.follow!" do
39
- $Follow.expects(:unfollow!).with(@follower, @followable).once
40
- @follower.unfollow!(@followable)
41
- end
42
- end
43
-
44
- context "#toggle_follow!" do
45
- should "not accept non-followables" do
46
- assert_raise(Socialization::ArgumentError) { @follower.unfollow!(:foo) }
47
- end
48
-
49
- should "unfollow when following" do
50
- @follower.expects(:follows?).with(@followable).once.returns(true)
51
- @follower.expects(:unfollow!).with(@followable).once
52
- @follower.toggle_follow!(@followable)
53
- end
54
-
55
- should "follow when not following" do
56
- @follower.expects(:follows?).with(@followable).once.returns(false)
57
- @follower.expects(:follow!).with(@followable).once
58
- @follower.toggle_follow!(@followable)
59
- end
60
- end
61
-
62
- context "#follows?" do
63
- should "not accept non-followables" do
64
- assert_raise(Socialization::ArgumentError) { @follower.unfollow!(:foo) }
65
- end
66
-
67
- should "call $Follow.follows?" do
68
- $Follow.expects(:follows?).with(@follower, @followable).once
69
- @follower.follows?(@followable)
70
- end
71
- end
72
-
73
- context "#followables" do
74
- should "call $Follow.followables" do
75
- $Follow.expects(:followables).with(@follower, @followable.class, { :foo => :bar })
76
- @follower.followables(@followable.class, { :foo => :bar })
77
- end
78
- end
79
-
80
- context "#followees" do
81
- should "call $Follow.followables" do
82
- $Follow.expects(:followables).with(@follower, @followable.class, { :foo => :bar })
83
- @follower.followees(@followable.class, { :foo => :bar })
84
- end
85
- end
86
-
87
- context "#followables_relation" do
88
- should "call $Follow.followables_relation" do
89
- $Follow.expects(:followables_relation).with(@follower, @followable.class, { :foo => :bar })
90
- @follower.followables_relation(@followable.class, { :foo => :bar })
91
- end
92
- end
93
-
94
- context "#followees_relation" do
95
- should "call $Follow.followables_relation" do
96
- $Follow.expects(:followables_relation).with(@follower, @followable.class, { :foo => :bar })
97
- @follower.followees_relation(@followable.class, { :foo => :bar })
98
- end
99
- end
100
-
101
- context "deleting a follower" do
102
- setup do
103
- @follower = ImAFollower.create
104
- @follower.follow!(@followable)
105
- end
106
-
107
- should "remove follow relationships" do
108
- Socialization.follow_model.expects(:remove_followables).with(@follower)
109
- @follower.destroy
110
- end
111
- end
112
-
113
- end
114
- end
@@ -1,106 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__))+'/../test_helper'
2
-
3
- class LikerTest < Test::Unit::TestCase
4
- context "Liker" do
5
- setup do
6
- @liker = ImALiker.new
7
- @likeable = ImALikeable.create
8
- end
9
-
10
- context "#is_liker?" do
11
- should "return true" do
12
- assert_true @liker.is_liker?
13
- end
14
- end
15
-
16
- context "#liker?" do
17
- should "return true" do
18
- assert_true @liker.liker?
19
- end
20
- end
21
-
22
- context "#like!" do
23
- should "not accept non-likeables" do
24
- assert_raise(Socialization::ArgumentError) { @liker.like!(:foo) }
25
- end
26
-
27
- should "call $Like.like!" do
28
- $Like.expects(:like!).with(@liker, @likeable).once
29
- @liker.like!(@likeable)
30
- end
31
- end
32
-
33
- context "#unlike!" do
34
- should "not accept non-likeables" do
35
- assert_raise(Socialization::ArgumentError) { @liker.unlike!(:foo) }
36
- end
37
-
38
- should "call $Like.like!" do
39
- $Like.expects(:unlike!).with(@liker, @likeable).once
40
- @liker.unlike!(@likeable)
41
- end
42
- end
43
-
44
- context "#toggle_like!" do
45
- should "not accept non-likeables" do
46
- assert_raise(Socialization::ArgumentError) { @liker.unlike!(:foo) }
47
- end
48
-
49
- should "unlike when likeing" do
50
- @liker.expects(:likes?).with(@likeable).once.returns(true)
51
- @liker.expects(:unlike!).with(@likeable).once
52
- @liker.toggle_like!(@likeable)
53
- end
54
-
55
- should "like when not likeing" do
56
- @liker.expects(:likes?).with(@likeable).once.returns(false)
57
- @liker.expects(:like!).with(@likeable).once
58
- @liker.toggle_like!(@likeable)
59
- end
60
- end
61
-
62
- context "#likes?" do
63
- should "not accept non-likeables" do
64
- assert_raise(Socialization::ArgumentError) { @liker.unlike!(:foo) }
65
- end
66
-
67
- should "call $Like.likes?" do
68
- $Like.expects(:likes?).with(@liker, @likeable).once
69
- @liker.likes?(@likeable)
70
- end
71
- end
72
-
73
- context "#likeables" do
74
- should "call $Like.likeables" do
75
- $Like.expects(:likeables).with(@liker, @likeable.class, { :foo => :bar })
76
- @liker.likeables(@likeable.class, { :foo => :bar })
77
- end
78
- end
79
-
80
- context "#likees" do
81
- should "call $Like.likeables" do
82
- $Like.expects(:likeables).with(@liker, @likeable.class, { :foo => :bar })
83
- @liker.likees(@likeable.class, { :foo => :bar })
84
- end
85
- end
86
-
87
- context "#likeables_relation" do
88
- should "call $Follow.likeables_relation" do
89
- $Like.expects(:likeables_relation).with(@liker, @likeable.class, { :foo => :bar })
90
- @liker.likeables_relation(@likeable.class, { :foo => :bar })
91
- end
92
- end
93
-
94
- context "#likees_relation" do
95
- should "call $Follow.likeables_relation" do
96
- $Like.expects(:likeables_relation).with(@liker, @likeable.class, { :foo => :bar })
97
- @liker.likees_relation(@likeable.class, { :foo => :bar })
98
- end
99
- end
100
-
101
- should "remove like relationships" do
102
- Socialization.like_model.expects(:remove_likeables).with(@liker)
103
- @liker.destroy
104
- end
105
- end
106
- end
@@ -1,106 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__))+'/../test_helper'
2
-
3
- class MentionerTest < Test::Unit::TestCase
4
- context "Mentioner" do
5
- setup do
6
- @mentioner = ImAMentioner.new
7
- @mentionable = ImAMentionable.create
8
- end
9
-
10
- context "#is_mentioner?" do
11
- should "return true" do
12
- assert_true @mentioner.is_mentioner?
13
- end
14
- end
15
-
16
- context "#mentioner?" do
17
- should "return true" do
18
- assert_true @mentioner.mentioner?
19
- end
20
- end
21
-
22
- context "#mention!" do
23
- should "not accept non-mentionables" do
24
- assert_raise(Socialization::ArgumentError) { @mentioner.mention!(:foo) }
25
- end
26
-
27
- should "call $Mention.mention!" do
28
- $Mention.expects(:mention!).with(@mentioner, @mentionable).once
29
- @mentioner.mention!(@mentionable)
30
- end
31
- end
32
-
33
- context "#unmention!" do
34
- should "not accept non-mentionables" do
35
- assert_raise(Socialization::ArgumentError) { @mentioner.unmention!(:foo) }
36
- end
37
-
38
- should "call $Mention.mention!" do
39
- $Mention.expects(:unmention!).with(@mentioner, @mentionable).once
40
- @mentioner.unmention!(@mentionable)
41
- end
42
- end
43
-
44
- context "#toggle_mention!" do
45
- should "not accept non-mentionables" do
46
- assert_raise(Socialization::ArgumentError) { @mentioner.unmention!(:foo) }
47
- end
48
-
49
- should "unmention when mentioning" do
50
- @mentioner.expects(:mentions?).with(@mentionable).once.returns(true)
51
- @mentioner.expects(:unmention!).with(@mentionable).once
52
- @mentioner.toggle_mention!(@mentionable)
53
- end
54
-
55
- should "mention when not mentioning" do
56
- @mentioner.expects(:mentions?).with(@mentionable).once.returns(false)
57
- @mentioner.expects(:mention!).with(@mentionable).once
58
- @mentioner.toggle_mention!(@mentionable)
59
- end
60
- end
61
-
62
- context "#mentions?" do
63
- should "not accept non-mentionables" do
64
- assert_raise(Socialization::ArgumentError) { @mentioner.unmention!(:foo) }
65
- end
66
-
67
- should "call $Mention.mentions?" do
68
- $Mention.expects(:mentions?).with(@mentioner, @mentionable).once
69
- @mentioner.mentions?(@mentionable)
70
- end
71
- end
72
-
73
- context "#mentionables" do
74
- should "call $Mention.mentionables" do
75
- $Mention.expects(:mentionables).with(@mentioner, @mentionable.class, { :foo => :bar })
76
- @mentioner.mentionables(@mentionable.class, { :foo => :bar })
77
- end
78
- end
79
-
80
- context "#mentionees" do
81
- should "call $Mention.mentionables" do
82
- $Mention.expects(:mentionables).with(@mentioner, @mentionable.class, { :foo => :bar })
83
- @mentioner.mentionees(@mentionable.class, { :foo => :bar })
84
- end
85
- end
86
-
87
- context "#mentionables_relation" do
88
- should "call $Mention.mentionables_relation" do
89
- $Mention.expects(:mentionables_relation).with(@mentioner, @mentionable.class, { :foo => :bar })
90
- @mentioner.mentionables_relation(@mentionable.class, { :foo => :bar })
91
- end
92
- end
93
-
94
- context "#mentionees_relation" do
95
- should "call $Mention.mentionables_relation" do
96
- $Mention.expects(:mentionables_relation).with(@mentioner, @mentionable.class, { :foo => :bar })
97
- @mentioner.mentionees_relation(@mentionable.class, { :foo => :bar })
98
- end
99
- end
100
-
101
- should "remove mention relationships" do
102
- Socialization.mention_model.expects(:remove_mentionables).with(@mentioner)
103
- @mentioner.destroy
104
- end
105
- end
106
- end
@@ -1,138 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__))+'/../../test_helper'
2
-
3
- class ActiveRecordFollowStoreTest < Test::Unit::TestCase
4
- context "ActiveRecordStores::FollowStoreTest" do
5
- setup do
6
- @klass = Socialization::ActiveRecordStores::Follow
7
- @klass.touch nil
8
- @klass.after_follow nil
9
- @klass.after_unfollow nil
10
- @follower = ImAFollower.create
11
- @followable = ImAFollowable.create
12
- end
13
-
14
- context "data store" do
15
- should "inherit Socialization::ActiveRecordStores::Follow" do
16
- assert_equal Socialization::ActiveRecordStores::Follow, Socialization.follow_model
17
- end
18
- end
19
-
20
- context "#follow!" do
21
- should "create a Follow record" do
22
- @klass.follow!(@follower, @followable)
23
- assert_match_follower @klass.last, @follower
24
- assert_match_followable @klass.last, @followable
25
- end
26
-
27
- should "touch follower when instructed" do
28
- @klass.touch :follower
29
- @follower.expects(:touch).once
30
- @followable.expects(:touch).never
31
- @klass.follow!(@follower, @followable)
32
- end
33
-
34
- should "touch followable when instructed" do
35
- @klass.touch :followable
36
- @follower.expects(:touch).never
37
- @followable.expects(:touch).once
38
- @klass.follow!(@follower, @followable)
39
- end
40
-
41
- should "touch all when instructed" do
42
- @klass.touch :all
43
- @follower.expects(:touch).once
44
- @followable.expects(:touch).once
45
- @klass.follow!(@follower, @followable)
46
- end
47
-
48
- should "call after follow hook" do
49
- @klass.after_follow :after_follow
50
- @klass.expects(:after_follow).once
51
- @klass.follow!(@follower, @followable)
52
- end
53
-
54
- should "call after unfollow hook" do
55
- @klass.after_follow :after_unfollow
56
- @klass.expects(:after_unfollow).once
57
- @klass.follow!(@follower, @followable)
58
- end
59
- end
60
-
61
- context "#follows?" do
62
- should "return true when follow exists" do
63
- @klass.create! do |f|
64
- f.follower = @follower
65
- f.followable = @followable
66
- end
67
- assert_true @klass.follows?(@follower, @followable)
68
- end
69
-
70
- should "return false when follow doesn't exist" do
71
- assert_false @klass.follows?(@follower, @followable)
72
- end
73
- end
74
-
75
- context "#followers" do
76
- should "return an array of followers" do
77
- follower1 = ImAFollower.create
78
- follower2 = ImAFollower.create
79
- follower1.follow!(@followable)
80
- follower2.follow!(@followable)
81
- assert_equal [follower1, follower2], @klass.followers(@followable, follower1.class)
82
- end
83
-
84
- should "return an array of follower ids when plucking" do
85
- follower1 = ImAFollower.create
86
- follower2 = ImAFollower.create
87
- follower1.follow!(@followable)
88
- follower2.follow!(@followable)
89
- assert_equal [follower1.id, follower2.id], @klass.followers(@followable, follower1.class, :pluck => :id)
90
- end
91
- end
92
-
93
- context "#followables" do
94
- should "return an array of followers" do
95
- followable1 = ImAFollowable.create
96
- followable2 = ImAFollowable.create
97
- @follower.follow!(followable1)
98
- @follower.follow!(followable2)
99
- assert_equal [followable1, followable2], @klass.followables(@follower, followable1.class)
100
- end
101
-
102
- should "return an array of follower ids when plucking" do
103
- followable1 = ImAFollowable.create
104
- followable2 = ImAFollowable.create
105
- @follower.follow!(followable1)
106
- @follower.follow!(followable2)
107
- assert_equal [followable1.id, followable2.id], @klass.followables(@follower, followable1.class, :pluck => :id)
108
- end
109
- end
110
-
111
- context "#remove_followers" do
112
- should "delete all followers relationships for a followable" do
113
- @follower.follow!(@followable)
114
- assert_equal 1, @followable.followers(@follower.class).count
115
- @klass.remove_followers(@followable)
116
- assert_equal 0, @followable.followers(@follower.class).count
117
- end
118
- end
119
-
120
- context "#remove_followables" do
121
- should "delete all followables relationships for a follower" do
122
- @follower.follow!(@followable)
123
- assert_equal 1, @follower.followables(@followable.class).count
124
- @klass.remove_followables(@follower)
125
- assert_equal 0, @follower.followables(@followable.class).count
126
- end
127
- end
128
- end
129
-
130
- # Helpers
131
- def assert_match_follower(follow_record, follower)
132
- assert follow_record.follower_type == follower.class.to_s && follow_record.follower_id == follower.id
133
- end
134
-
135
- def assert_match_followable(follow_record, followable)
136
- assert follow_record.followable_type == followable.class.to_s && follow_record.followable_id == followable.id
137
- end
138
- end