mongo_followable 0.2.2 → 0.2.3

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/.idea/workspace.xml CHANGED
@@ -4,10 +4,10 @@
4
4
  <list default="true" id="46dc3a6d-3a97-49f8-becd-2ccba8c07e42" name="Default" comment="">
5
5
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
6
6
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/README.rdoc" afterPath="$PROJECT_DIR$/README.rdoc" />
7
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/mongo_followable/followable.rb" afterPath="$PROJECT_DIR$/lib/mongo_followable/followable.rb" />
8
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/mongo_followable/follower.rb" afterPath="$PROJECT_DIR$/lib/mongo_followable/follower.rb" />
7
9
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/mongo_followable/version.rb" afterPath="$PROJECT_DIR$/lib/mongo_followable/version.rb" />
8
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/mongo_followable.gemspec" afterPath="$PROJECT_DIR$/mongo_followable.gemspec" />
9
10
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/spec/mongo/followable_spec.rb" afterPath="$PROJECT_DIR$/spec/mongo/followable_spec.rb" />
10
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/spec/spec_helper.rb" afterPath="$PROJECT_DIR$/spec/spec_helper.rb" />
11
11
  </list>
12
12
  <ignored path="mongo_followable.iws" />
13
13
  <ignored path=".idea/workspace.xml" />
@@ -31,10 +31,37 @@
31
31
  </component>
32
32
  <component name="FileEditorManager">
33
33
  <leaf>
34
- <file leaf-file-name="version.rb" pinned="false" current="true" current-in-tab="true">
35
- <entry file="file://$PROJECT_DIR$/lib/mongo_followable/version.rb">
34
+ <file leaf-file-name="followable.rb" pinned="false" current="false" current-in-tab="false">
35
+ <entry file="file://$PROJECT_DIR$/lib/mongo_followable/followable.rb">
36
36
  <provider selected="true" editor-type-id="text-editor">
37
- <state line="1" column="18" selection-start="41" selection-end="41" vertical-scroll-proportion="0.02173913">
37
+ <state line="127" column="36" selection-start="3865" selection-end="3865" vertical-scroll-proportion="0.0">
38
+ <folding />
39
+ </state>
40
+ </provider>
41
+ </entry>
42
+ </file>
43
+ <file leaf-file-name="README.rdoc" pinned="false" current="false" current-in-tab="false">
44
+ <entry file="file://$PROJECT_DIR$/README.rdoc">
45
+ <provider selected="true" editor-type-id="text-editor">
46
+ <state line="53" column="83" selection-start="1649" selection-end="1649" vertical-scroll-proportion="0.0">
47
+ <folding />
48
+ </state>
49
+ </provider>
50
+ </entry>
51
+ </file>
52
+ <file leaf-file-name="follower.rb" pinned="false" current="false" current-in-tab="false">
53
+ <entry file="file://$PROJECT_DIR$/lib/mongo_followable/follower.rb">
54
+ <provider selected="true" editor-type-id="text-editor">
55
+ <state line="160" column="34" selection-start="4901" selection-end="4901" vertical-scroll-proportion="0.0">
56
+ <folding />
57
+ </state>
58
+ </provider>
59
+ </entry>
60
+ </file>
61
+ <file leaf-file-name="followable_spec.rb" pinned="false" current="true" current-in-tab="true">
62
+ <entry file="file://$PROJECT_DIR$/spec/mongo/followable_spec.rb">
63
+ <provider selected="true" editor-type-id="text-editor">
64
+ <state line="216" column="9" selection-start="4887" selection-end="4887" vertical-scroll-proportion="0.7826087">
38
65
  <folding />
39
66
  </state>
40
67
  </provider>
@@ -60,13 +87,13 @@
60
87
  <option value="$PROJECT_DIR$/spec/mongoid/group.rb" />
61
88
  <option value="$PROJECT_DIR$/spec/mongoid/user.rb" />
62
89
  <option value="$PROJECT_DIR$/lib/mongo_followable.rb" />
63
- <option value="$PROJECT_DIR$/lib/mongo_followable/follower.rb" />
64
- <option value="$PROJECT_DIR$/spec/mongo/followable_spec.rb" />
65
90
  <option value="$PROJECT_DIR$/mongo_followable.gemspec" />
66
91
  <option value="$PROJECT_DIR$/spec/spec_helper.rb" />
67
- <option value="$PROJECT_DIR$/README.rdoc" />
68
- <option value="$PROJECT_DIR$/lib/mongo_followable/followable.rb" />
69
92
  <option value="$PROJECT_DIR$/lib/mongo_followable/version.rb" />
93
+ <option value="$PROJECT_DIR$/lib/mongo_followable/follower.rb" />
94
+ <option value="$PROJECT_DIR$/lib/mongo_followable/followable.rb" />
95
+ <option value="$PROJECT_DIR$/README.rdoc" />
96
+ <option value="$PROJECT_DIR$/spec/mongo/followable_spec.rb" />
70
97
  </list>
71
98
  </option>
72
99
  </component>
@@ -96,7 +123,7 @@
96
123
  <sortByType />
97
124
  </navigator>
98
125
  <panes>
99
- <pane id="Scope" />
126
+ <pane id="Favorites" />
100
127
  <pane id="ProjectPane">
101
128
  <subPane>
102
129
  <PATH>
@@ -147,6 +174,24 @@
147
174
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
148
175
  </PATH_ELEMENT>
149
176
  </PATH>
177
+ <PATH>
178
+ <PATH_ELEMENT>
179
+ <option name="myItemId" value="mongo_followable" />
180
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
181
+ </PATH_ELEMENT>
182
+ <PATH_ELEMENT>
183
+ <option name="myItemId" value="mongo_followable" />
184
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
185
+ </PATH_ELEMENT>
186
+ <PATH_ELEMENT>
187
+ <option name="myItemId" value="spec" />
188
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
189
+ </PATH_ELEMENT>
190
+ <PATH_ELEMENT>
191
+ <option name="myItemId" value="mongo_mapper" />
192
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
193
+ </PATH_ELEMENT>
194
+ </PATH>
150
195
  <PATH>
151
196
  <PATH_ELEMENT>
152
197
  <option name="myItemId" value="mongo_followable" />
@@ -199,7 +244,7 @@
199
244
  </PATH>
200
245
  </subPane>
201
246
  </pane>
202
- <pane id="Favorites" />
247
+ <pane id="Scope" />
203
248
  </panes>
204
249
  </component>
205
250
  <component name="RecentsManager">
@@ -208,6 +253,24 @@
208
253
  </key>
209
254
  </component>
210
255
  <component name="RunManager">
256
+ <configuration default="true" type="RubyRunConfigurationType" factoryName="Ruby">
257
+ <module name="" />
258
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
259
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="" />
260
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
261
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
262
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
263
+ <envs />
264
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
265
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" track_test_folders="true" runner="rcov">
266
+ <COVERAGE_PATTERN ENABLED="true">
267
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
268
+ </COVERAGE_PATTERN>
269
+ </EXTENSION>
270
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="" />
271
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
272
+ <method />
273
+ </configuration>
211
274
  <list size="0" />
212
275
  </component>
213
276
  <component name="ShelveChangesManager" show_recycled="false" />
@@ -333,51 +396,49 @@
333
396
  <state line="6" column="48" selection-start="301" selection-end="301" vertical-scroll-proportion="0.13043478" />
334
397
  </provider>
335
398
  </entry>
336
- <entry file="file://$PROJECT_DIR$/spec/mongo/followable_spec.rb">
399
+ <entry file="file://$PROJECT_DIR$/spec/spec_helper.rb">
337
400
  <provider selected="true" editor-type-id="text-editor">
338
- <state line="156" column="25" selection-start="3888" selection-end="3888" vertical-scroll-proportion="0.0">
339
- <folding />
340
- </state>
401
+ <state line="24" column="42" selection-start="786" selection-end="786" vertical-scroll-proportion="0.5217391" />
341
402
  </provider>
342
403
  </entry>
343
- <entry file="file://$PROJECT_DIR$/README.rdoc">
404
+ <entry file="file://$PROJECT_DIR$/mongo_followable.gemspec">
344
405
  <provider selected="true" editor-type-id="text-editor">
345
- <state line="32" column="20" selection-start="965" selection-end="965" vertical-scroll-proportion="0.02173913">
346
- <folding />
347
- </state>
406
+ <state line="10" column="48" selection-start="408" selection-end="408" vertical-scroll-proportion="0.2173913" />
348
407
  </provider>
349
408
  </entry>
350
- <entry file="file://$PROJECT_DIR$/spec/spec_helper.rb">
409
+ <entry file="file://$PROJECT_DIR$/lib/mongo_followable/version.rb">
351
410
  <provider selected="true" editor-type-id="text-editor">
352
- <state line="24" column="42" selection-start="786" selection-end="786" vertical-scroll-proportion="0.5217391">
411
+ <state line="1" column="18" selection-start="41" selection-end="41" vertical-scroll-proportion="0.02173913">
353
412
  <folding />
354
413
  </state>
355
414
  </provider>
356
415
  </entry>
357
- <entry file="file://$PROJECT_DIR$/mongo_followable.gemspec">
416
+ <entry file="file://$PROJECT_DIR$/lib/mongo_followable/follower.rb">
358
417
  <provider selected="true" editor-type-id="text-editor">
359
- <state line="10" column="48" selection-start="408" selection-end="408" vertical-scroll-proportion="0.2173913">
418
+ <state line="160" column="34" selection-start="4901" selection-end="4901" vertical-scroll-proportion="0.0">
360
419
  <folding />
361
420
  </state>
362
421
  </provider>
363
422
  </entry>
364
- <entry file="file://$PROJECT_DIR$/lib/mongo_followable/follower.rb">
423
+ <entry file="file://$PROJECT_DIR$/lib/mongo_followable/followable.rb">
365
424
  <provider selected="true" editor-type-id="text-editor">
366
- <state line="152" column="34" selection-start="4717" selection-end="4717" vertical-scroll-proportion="-0.5096012">
425
+ <state line="127" column="36" selection-start="3865" selection-end="3865" vertical-scroll-proportion="0.0">
367
426
  <folding />
368
427
  </state>
369
428
  </provider>
370
429
  </entry>
371
- <entry file="file://$PROJECT_DIR$/lib/mongo_followable/followable.rb">
430
+ <entry file="file://$PROJECT_DIR$/README.rdoc">
372
431
  <provider selected="true" editor-type-id="text-editor">
373
- <state line="81" column="0" selection-start="2647" selection-end="2662" vertical-scroll-proportion="0.044313148">
432
+ <state line="53" column="83" selection-start="1649" selection-end="1649" vertical-scroll-proportion="0.0">
374
433
  <folding />
375
434
  </state>
376
435
  </provider>
377
436
  </entry>
378
- <entry file="file://$PROJECT_DIR$/lib/mongo_followable/version.rb">
437
+ <entry file="file://$PROJECT_DIR$/spec/mongo/followable_spec.rb">
379
438
  <provider selected="true" editor-type-id="text-editor">
380
- <state line="1" column="18" selection-start="41" selection-end="41" vertical-scroll-proportion="0.02173913" />
439
+ <state line="216" column="9" selection-start="4887" selection-end="4887" vertical-scroll-proportion="0.7826087">
440
+ <folding />
441
+ </state>
381
442
  </provider>
382
443
  </entry>
383
444
  </component>
data/README.rdoc CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Now works for both Mongoid and Mongo_Mapper!
4
4
 
5
+ see http://www.thesika.info/articles/mongo_followable_update for details
6
+
5
7
  == Installation
6
8
 
7
9
  In console:
@@ -27,7 +29,7 @@ Now you can set authorization:
27
29
  current_user.set_authorization('user', 'game') # now current_user cannot follow User and Game model
28
30
  current_user.unset_authorization('User', 'Game')
29
31
 
30
- And then you can follow a model:
32
+ And then you can follow and unfollow:
31
33
 
32
34
  @group = Group.new
33
35
  @group.save
@@ -36,11 +38,21 @@ And then you can follow a model:
36
38
  current_user.unfollow(@group)
37
39
  current_user.unfollow_all
38
40
 
41
+ current_user.follow(*array_of_objects_to_follow) # follow an array of objects
42
+ current_user.unfollow(*array_of_objects_to_follow) # unfollow
43
+
39
44
  or,
40
45
 
41
46
  @group.unfollowed(current_user)
42
47
  @group.unfollowed_all
43
48
 
49
+ It's also possible to pass a block:
50
+
51
+ current_user.follow(u1, u2, u3, u4...) { |user| user.name == 'Jeremy Lin' }
52
+ current_user.unfollow(u1, u2, u3, u4...) { |user| user.followee_of? 'Kobe Bryant' }
53
+
54
+ @group.unfollowed(u1, u2, u3...) { |user| user.ever_follow.include @some_user }
55
+
44
56
  You can also judge whether a model is a follower of another model or a model is a followee of another model:
45
57
 
46
58
  current_user.follower_of?(@group)
@@ -109,7 +109,11 @@ module Mongo
109
109
  rebuild_instances(self.followers)
110
110
  end
111
111
 
112
- def unfollowed(*models)
112
+ def unfollowed(*models, &block)
113
+ if block_given?
114
+ models.delete_if { |model| !yield(model) }
115
+ end
116
+
113
117
  models.each do |model|
114
118
  unless model == self or !self.followee_of?(model) or !model.follower_of?(self) or self.cannot_followed.include?(model.class.name) or model.cannot_follow.include?(self.class.name)
115
119
  model.followees.by_model(self).first.destroy
@@ -123,7 +123,11 @@ module Mongo
123
123
 
124
124
  # follow some model
125
125
 
126
- def follow(*models)
126
+ def follow(*models, &block)
127
+ if block_given?
128
+ models.delete_if { |model| !yield(model) }
129
+ end
130
+
127
131
  models.each do |model|
128
132
  unless model == self or self.follower_of?(model) or model.followee_of?(self) or self.cannot_follow.include?(model.class.name) or model.cannot_followed.include?(self.class.name)
129
133
  model.followers.create!(:f_type => self.class.name, :f_id => self.id.to_s)
@@ -138,7 +142,11 @@ module Mongo
138
142
 
139
143
  # unfollow some model
140
144
 
141
- def unfollow(*models)
145
+ def unfollow(*models, &block)
146
+ if block_given?
147
+ models.delete_if { |model| !yield(model) }
148
+ end
149
+
142
150
  models.each do |model|
143
151
  unless model == self or !self.follower_of?(model) or !model.followee_of?(self) or self.cannot_follow.include?(model.class.name) or model.cannot_followed.include?(self.class.name)
144
152
  model.followers.by_model(self).first.destroy
@@ -1,3 +1,3 @@
1
1
  module MongoFollowable
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -183,4 +183,38 @@ describe Mongo::Followable do
183
183
 
184
184
  end
185
185
  end
186
+
187
+ describe User do
188
+
189
+ context "begins" do
190
+
191
+ before do
192
+ @u = User.new
193
+ @u.save
194
+
195
+ @v = User.new
196
+ @v.save
197
+
198
+ @w = User.new
199
+ @w.save
200
+
201
+ @g = Group.new
202
+ @g.save
203
+ end
204
+
205
+
206
+ it "block test" do
207
+ @u.follow(@v, @w, @g) {|m| m.class == User}
208
+
209
+ @u.all_followees.should =~ [@v, @w]
210
+
211
+ end
212
+
213
+ it "block test unfollow" do
214
+ @u.unfollow(@v, @w, @g) {|m| m.followee_of? @u}
215
+
216
+ @u.all_followees.should == []
217
+ end
218
+ end
219
+ end
186
220
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 2
9
- version: 0.2.2
8
+ - 3
9
+ version: 0.2.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jie Fan
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-02-02 00:00:00 -05:00
17
+ date: 2012-02-15 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency