social_connections 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- social_connections (0.0.13)
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
@@ -0,0 +1,5 @@
1
+ guard 'rspec', :cli => "--color", :version => 2, :all_on_start => true, :all_after_pass => true do
2
+ watch %r{^spec/.+_spec\.rb$}
3
+ watch(%r{^lib/.+\.rb$}) { "spec" }
4
+
5
+ end
@@ -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
- cattr_accessor :acts_as_connectable_options
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
@@ -1,3 +1,3 @@
1
1
  module SocialConnections
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
3
3
  end
data/run-tests.sh CHANGED
@@ -1,6 +1,4 @@
1
1
  #!/bin/bash -ex
2
2
 
3
- # Idea is to run all automated tests from a single script
4
-
5
- rake test
6
- rspec spec -f d
3
+ echo "Rather use 'bundle exec guard' instead of this script..."
4
+ rspec spec --color
@@ -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
- s.add_development_dependency('rspec')
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
@@ -32,4 +32,8 @@ ActiveRecord::Schema.define(:version => 0) do
32
32
  t.string :name
33
33
  t.string :email
34
34
  end
35
+ create_table :connectable_with_additional_recipients, :force => true do |t|
36
+ t.string :name
37
+ t.string :email
38
+ end
35
39
  end
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.16
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-05-30 00:00:00.000000000 Z
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: &70190868020460 !ruby/object:Gem::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: *70190868020460
24
+ version_requirements: *70142545995920
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sqlite3
27
- requirement: &70190868019140 !ruby/object:Gem::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: *70190868019140
35
+ version_requirements: *70142545995420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec-rails
38
- requirement: &70190868015740 !ruby/object:Gem::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: *70190868015740
46
+ version_requirements: *70142545994700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: turn
49
- requirement: &70190868014500 !ruby/object:Gem::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: *70190868014500
57
+ version_requirements: *70142545993900
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: factory_girl_rails
60
- requirement: &70190859703320 !ruby/object:Gem::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: *70190859703320
68
+ version_requirements: *70142545992860
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activerecord
71
- requirement: &70190859701520 !ruby/object:Gem::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: *70190859701520
79
+ version_requirements: *70142545992260
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: actionmailer
82
- requirement: &70190859700520 !ruby/object:Gem::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: *70190859700520
90
+ version_requirements: *70142545991720
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: i18n
93
- requirement: &70190859698900 !ruby/object:Gem::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: *70190859698900
101
+ version_requirements: *70142545991100
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: pry
104
- requirement: &70190859698160 !ruby/object:Gem::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: *70190859698160
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