social_connections 0.0.16 → 0.0.17
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/Gemfile.lock +18 -1
- data/Guardfile +5 -0
- data/lib/social_connections/acts_as_connectable.rb +23 -2
- data/lib/social_connections/version.rb +1 -1
- data/run-tests.sh +2 -4
- data/social_connections.gemspec +1 -2
- data/spec/social_activities_spec.rb +34 -0
- data/test/schema.rb +4 -0
- metadata +43 -20
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
social_connections (0.0.
|
4
|
+
social_connections (0.0.17)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
@@ -41,7 +41,17 @@ GEM
|
|
41
41
|
factory_girl_rails (1.1.0)
|
42
42
|
factory_girl (~> 2.0.0)
|
43
43
|
railties (>= 3.0.0)
|
44
|
+
ffi (1.0.11)
|
45
|
+
guard (1.1.1)
|
46
|
+
listen (>= 0.4.2)
|
47
|
+
thor (>= 0.14.6)
|
48
|
+
guard-rspec (1.0.0)
|
49
|
+
guard (>= 1.1)
|
44
50
|
i18n (0.6.0)
|
51
|
+
listen (0.4.3)
|
52
|
+
rb-fchange (~> 0.0.5)
|
53
|
+
rb-fsevent (~> 0.9.1)
|
54
|
+
rb-inotify (~> 0.8.8)
|
45
55
|
mail (2.2.19)
|
46
56
|
activesupport (>= 2.3.6)
|
47
57
|
i18n (>= 0.4.0)
|
@@ -65,6 +75,11 @@ GEM
|
|
65
75
|
rake (>= 0.8.7)
|
66
76
|
thor (~> 0.14.4)
|
67
77
|
rake (0.9.2)
|
78
|
+
rb-fchange (0.0.5)
|
79
|
+
ffi
|
80
|
+
rb-fsevent (0.9.1)
|
81
|
+
rb-inotify (0.8.8)
|
82
|
+
ffi (>= 0.5.0)
|
68
83
|
rspec (2.6.0)
|
69
84
|
rspec-core (~> 2.6.0)
|
70
85
|
rspec-expectations (~> 2.6.0)
|
@@ -95,6 +110,8 @@ DEPENDENCIES
|
|
95
110
|
actionmailer
|
96
111
|
activerecord
|
97
112
|
factory_girl_rails
|
113
|
+
guard
|
114
|
+
guard-rspec
|
98
115
|
i18n
|
99
116
|
pry
|
100
117
|
rspec
|
data/Guardfile
ADDED
@@ -10,10 +10,12 @@ module SocialConnections
|
|
10
10
|
# * :verbs - specify a list of constants recognized as verbs.
|
11
11
|
# If none given, :likes is the only default verb.
|
12
12
|
def acts_as_connectable(options = {})
|
13
|
-
|
14
|
-
send :acts_as_connectable_options=, options
|
13
|
+
@options = options
|
15
14
|
send :include, InstanceMethods
|
16
15
|
end
|
16
|
+
def acts_as_connectable_options
|
17
|
+
@options
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
module InstanceMethods
|
@@ -47,6 +49,10 @@ module SocialConnections
|
|
47
49
|
self.id, self.class.base_class.name, other.id, other.class.base_class.name).exists?
|
48
50
|
end
|
49
51
|
|
52
|
+
def acts_as_connectable_options
|
53
|
+
self.class.acts_as_connectable_options
|
54
|
+
end
|
55
|
+
|
50
56
|
def acts_as_connectable_verbs
|
51
57
|
acts_as_connectable_options[:verbs] || [ :likes ]
|
52
58
|
end
|
@@ -57,9 +63,17 @@ module SocialConnections
|
|
57
63
|
|
58
64
|
def method_missing(name, *args)
|
59
65
|
if acts_as_connectable_verbs.include? name
|
66
|
+
|
60
67
|
verb = name
|
61
68
|
object = args[0]
|
62
69
|
options = args[1] || {}
|
70
|
+
|
71
|
+
# both the subject (us) and the object may have additional recipients,
|
72
|
+
# we add them here
|
73
|
+
options[:additional_recipients] ||= []
|
74
|
+
options[:additional_recipients].concat(additional_recipients)
|
75
|
+
options[:additional_recipients].concat(object.send(:additional_recipients)) if object.respond_to?( :additional_recipients, true )
|
76
|
+
|
63
77
|
create_activity(verb, object, options)
|
64
78
|
elsif acts_as_connectable_verb_questions.include? name
|
65
79
|
verb = name[0..-2]
|
@@ -81,6 +95,13 @@ module SocialConnections
|
|
81
95
|
SocialActivity.create_activities(self, verb, object, options)
|
82
96
|
end
|
83
97
|
|
98
|
+
def additional_recipients
|
99
|
+
additional_recipients = acts_as_connectable_options[:additional_recipients]
|
100
|
+
return [] unless additional_recipients
|
101
|
+
return self.send(additional_recipients) if self.respond_to?(additional_recipients)
|
102
|
+
return additional_recipients
|
103
|
+
end
|
104
|
+
|
84
105
|
def verbs
|
85
106
|
acts_as_connectable_verbs
|
86
107
|
end
|
data/run-tests.sh
CHANGED
data/social_connections.gemspec
CHANGED
@@ -19,8 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
# s.test_files.reject! { |fn| fn.include? ".swp" }
|
20
20
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
21
|
s.require_paths = ["lib"]
|
22
|
-
|
23
|
-
[ 'sqlite3', 'rspec-rails', 'turn', 'factory_girl_rails', 'activerecord', 'actionmailer', 'i18n', 'pry' ].each do |d|
|
22
|
+
[ 'rspec', 'sqlite3', 'rspec-rails', 'turn', 'factory_girl_rails', 'activerecord', 'actionmailer', 'i18n', 'pry', 'guard', 'guard-rspec' ].each do |d|
|
24
23
|
s.add_development_dependency d
|
25
24
|
end
|
26
25
|
end
|
@@ -74,6 +74,40 @@ describe "Social Activities" do
|
|
74
74
|
activities.select {|a| a.owner == @obj}.should_not be_empty # ... and one owned by the object
|
75
75
|
end
|
76
76
|
|
77
|
+
describe "additional recipients" do
|
78
|
+
|
79
|
+
class ConnectableWithAdditionalRecipients < ActiveRecord::Base
|
80
|
+
acts_as_connectable :additional_recipients => :determine_additional_recipients
|
81
|
+
|
82
|
+
def initialize(params = {})
|
83
|
+
super(params)
|
84
|
+
@ar1 = Connectable.create(:name => "additional recipient 1")
|
85
|
+
@ar2 = Connectable.create(:name => "additional recipient 2")
|
86
|
+
end
|
87
|
+
|
88
|
+
def determine_additional_recipients
|
89
|
+
[ @ar1, @ar2 ]
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
before(:each) do
|
94
|
+
@c1 = ConnectableWithAdditionalRecipients.create(:name => "Anne")
|
95
|
+
@c2 = Connectable.create(:name => "Bob")
|
96
|
+
end
|
97
|
+
it "queries additional_recipients of the subject and sends them activities" do
|
98
|
+
activities = @c1.likes(@c2)
|
99
|
+
# both 'additional recipients' get an activity
|
100
|
+
activities.select{|a| a.owner == @c1.determine_additional_recipients[0] }.count.should eq(1)
|
101
|
+
activities.select{|a| a.owner == @c1.determine_additional_recipients[1] }.count.should eq(1)
|
102
|
+
end
|
103
|
+
it "queries additional_recipients of the object and sends activities" do
|
104
|
+
activities = @c2.likes(@c1)
|
105
|
+
# both 'additional recipients' get an activity
|
106
|
+
activities.select{|a| a.owner == @c1.determine_additional_recipients[0] }.count.should eq(1)
|
107
|
+
activities.select{|a| a.owner == @c1.determine_additional_recipients[1] }.count.should eq(1)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
77
111
|
it "create activities for those connected to the subject" do
|
78
112
|
mary = Connectable.create(:name => 'Mary')
|
79
113
|
mary.connect_to(@sub) # mary is now connected to Tim
|
data/test/schema.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social_connections
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.17
|
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-
|
12
|
+
date: 2012-06-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70142545995920 !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: *
|
24
|
+
version_requirements: *70142545995920
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &70142545995420 !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: *
|
35
|
+
version_requirements: *70142545995420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &70142545994700 !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: *
|
46
|
+
version_requirements: *70142545994700
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: turn
|
49
|
-
requirement: &
|
49
|
+
requirement: &70142545993900 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70142545993900
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: factory_girl_rails
|
60
|
-
requirement: &
|
60
|
+
requirement: &70142545992860 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70142545992860
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: activerecord
|
71
|
-
requirement: &
|
71
|
+
requirement: &70142545992260 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70142545992260
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: actionmailer
|
82
|
-
requirement: &
|
82
|
+
requirement: &70142545991720 !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: *
|
90
|
+
version_requirements: *70142545991720
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: i18n
|
93
|
-
requirement: &
|
93
|
+
requirement: &70142545991100 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70142545991100
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: pry
|
104
|
-
requirement: &
|
104
|
+
requirement: &70142545990320 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,29 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70142545990320
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: guard
|
115
|
+
requirement: &70142545989700 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *70142545989700
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: guard-rspec
|
126
|
+
requirement: &70142545989120 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *70142545989120
|
113
135
|
description: The idea is to provide pluggable social connections, activities and a
|
114
136
|
method to digest those activities (e.g. in daily emails).
|
115
137
|
email:
|
@@ -122,6 +144,7 @@ files:
|
|
122
144
|
- .yardopts
|
123
145
|
- Gemfile
|
124
146
|
- Gemfile.lock
|
147
|
+
- Guardfile
|
125
148
|
- MIT-LICENSE
|
126
149
|
- README.md
|
127
150
|
- Rakefile
|