mongoid_followable 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.idea/misc.xml CHANGED
@@ -3,6 +3,6 @@
3
3
  <component name="DependencyValidationManager">
4
4
  <option name="SKIP_IMPORT_STATEMENTS" value="false" />
5
5
  </component>
6
- <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-1.9.2-p136" project-jdk-type="RUBY_SDK" />
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="ruby-1.9.2-p0" project-jdk-type="RUBY_SDK" />
7
7
  </project>
8
8
 
@@ -1,10 +1,35 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <module type="RUBY_MODULE" version="4">
3
+ <component name="GemRequirementsHolder" version="3">
4
+ <requirement>
5
+ <requirement>
6
+ <dependency name="bson_ext" version="1.3.0" bound="LATEST_IN_BRANCH" git="false" path="false" doRequire="true" />
7
+ </requirement>
8
+ <source from="Gemfile" />
9
+ </requirement>
10
+ <requirement>
11
+ <requirement>
12
+ <dependency name="mongoid" version="2.0.1" bound="LATEST_IN_BRANCH" git="false" path="false" doRequire="true" />
13
+ </requirement>
14
+ <source from="Gemfile" />
15
+ </requirement>
16
+ </component>
3
17
  <component name="NewModuleRootManager">
4
18
  <content url="file://$MODULE_DIR$" />
5
19
  <orderEntry type="inheritedJdk" />
6
20
  <orderEntry type="sourceFolder" forTests="false" />
7
21
  <orderEntry type="library" scope="PROVIDED" name="[gem] bundler (v1.0.7, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.7)" level="application" />
22
+ <orderEntry type="library" scope="PROVIDED" name="[gem] mongoid (v2.0.1, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/mongoid-2.0.1)" level="application" />
23
+ <orderEntry type="library" scope="PROVIDED" name="[gem] bson_ext (v1.3.1, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/bson_ext-1.3.1)" level="application" />
24
+ <orderEntry type="library" scope="PROVIDED" name="[gem] activesupport (v3.0.7, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.7)" level="application" />
25
+ <orderEntry type="library" scope="PROVIDED" name="[gem] builder (v2.1.2, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/builder-2.1.2)" level="application" />
26
+ <orderEntry type="library" scope="PROVIDED" name="[gem] bson (v1.3.1, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/bson-1.3.1)" level="application" />
27
+ <orderEntry type="library" scope="PROVIDED" name="[gem] tzinfo (v0.3.27, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/tzinfo-0.3.27)" level="application" />
28
+ <orderEntry type="library" scope="PROVIDED" name="[gem] i18n (v0.5.0, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/i18n-0.5.0)" level="application" />
29
+ <orderEntry type="library" scope="PROVIDED" name="[gem] activemodel (v3.0.7, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/activemodel-3.0.7)" level="application" />
30
+ <orderEntry type="library" scope="PROVIDED" name="[gem] will_paginate (v3.0.pre2, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/will_paginate-3.0.pre2)" level="application" />
31
+ <orderEntry type="library" scope="PROVIDED" name="[gem] mongo (v1.3.1, /home/tomato/.rvm/gems/ruby-1.9.2-p136/gems/mongo-1.3.1)" level="application" />
32
+ <orderEntry type="library" scope="PROVIDED" name="[gem] bundler (v1.0.13, /home/tomato/.gem/ruby/1.9.1/gems/bundler-1.0.13)" level="application" />
8
33
  </component>
9
34
  </module>
10
35
 
data/.idea/workspace.xml CHANGED
@@ -2,15 +2,17 @@
2
2
  <project version="4">
3
3
  <component name="ChangeListManager">
4
4
  <list default="true" id="90bdec60-890b-4083-b05d-2f665a1f4d70" name="Default" comment="">
5
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.gitignore" />
6
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/Gemfile" />
7
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/Rakefile" />
8
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/lib/mongoid_followable.rb" />
9
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/lib/mongoid_followable/version.rb" />
10
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/mongoid_followable.gemspec" />
11
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/spec/models/user.rb" />
12
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/spec/mongoid/followable_spec.rb" />
13
- <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/spec/spec_helper.rb" />
5
+ <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/models/follow.rb" />
6
+ <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/lib/mongoid_followable/followable.rb" />
7
+ <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/spec/models/group.rb" />
8
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/mongoid_followable.iml" afterPath="$PROJECT_DIR$/.idea/mongoid_followable.iml" />
9
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
10
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
11
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/mongoid_followable.rb" afterPath="$PROJECT_DIR$/lib/mongoid_followable.rb" />
12
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/mongoid_followable/version.rb" afterPath="$PROJECT_DIR$/lib/mongoid_followable/version.rb" />
13
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/mongoid_followable.gemspec" afterPath="$PROJECT_DIR$/mongoid_followable.gemspec" />
14
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/spec/mongoid/followable_spec.rb" afterPath="$PROJECT_DIR$/spec/mongoid/followable_spec.rb" />
15
+ <change type="MODIFICATION" beforePath="$PROJECT_DIR$/spec/spec_helper.rb" afterPath="$PROJECT_DIR$/spec/spec_helper.rb" />
14
16
  </list>
15
17
  <ignored path="mongoid_followable.iws" />
16
18
  <ignored path=".idea/workspace.xml" />
@@ -33,26 +35,7 @@
33
35
  <favorites_list name="mongoid_followable" />
34
36
  </component>
35
37
  <component name="FileEditorManager">
36
- <leaf>
37
- <file leaf-file-name="followable_spec.rb" pinned="false" current="false" current-in-tab="false">
38
- <entry file="file://$PROJECT_DIR$/spec/mongoid/followable_spec.rb">
39
- <provider selected="true" editor-type-id="text-editor">
40
- <state line="42" column="33" selection-start="1138" selection-end="1138" vertical-scroll-proportion="0.0">
41
- <folding />
42
- </state>
43
- </provider>
44
- </entry>
45
- </file>
46
- <file leaf-file-name="mongoid_followable.rb" pinned="false" current="true" current-in-tab="true">
47
- <entry file="file://$PROJECT_DIR$/lib/mongoid_followable.rb">
48
- <provider selected="true" editor-type-id="text-editor">
49
- <state line="11" column="23" selection-start="297" selection-end="297" vertical-scroll-proportion="0.23878437">
50
- <folding />
51
- </state>
52
- </provider>
53
- </entry>
54
- </file>
55
- </leaf>
38
+ <leaf />
56
39
  </component>
57
40
  <component name="FindManager">
58
41
  <FindUsagesManager>
@@ -66,12 +49,19 @@
66
49
  <component name="IdeDocumentHistory">
67
50
  <option name="changedFiles">
68
51
  <list>
69
- <option value="$PROJECT_DIR$/mongoid_followable.gemspec" />
52
+ <option value="$PROJECT_DIR$/spec/models/user.rb" />
53
+ <option value="$PROJECT_DIR$/app/models/followee.rb" />
54
+ <option value="$PROJECT_DIR$/app/models/follower.rb" />
55
+ <option value="$PROJECT_DIR$/spec/models/group.rb" />
70
56
  <option value="$PROJECT_DIR$/lib/mongoid_followable/version.rb" />
57
+ <option value="$PROJECT_DIR$/lib/mongoid_followable/follow.rb" />
58
+ <option value="$PROJECT_DIR$/lib/generators/mongoid_followable/install_generator.rb" />
71
59
  <option value="$PROJECT_DIR$/spec/spec_helper.rb" />
72
- <option value="$PROJECT_DIR$/spec/models/user.rb" />
73
- <option value="$PROJECT_DIR$/spec/mongoid/followable_spec.rb" />
74
60
  <option value="$PROJECT_DIR$/lib/mongoid_followable.rb" />
61
+ <option value="$PROJECT_DIR$/app/models/follow.rb" />
62
+ <option value="$PROJECT_DIR$/spec/mongoid/followable_spec.rb" />
63
+ <option value="$PROJECT_DIR$/lib/mongoid_followable/followable.rb" />
64
+ <option value="$PROJECT_DIR$/mongoid_followable.gemspec" />
75
65
  </list>
76
66
  </option>
77
67
  </component>
@@ -101,7 +91,6 @@
101
91
  <sortByType />
102
92
  </navigator>
103
93
  <panes>
104
- <pane id="Scope" />
105
94
  <pane id="Favorites" />
106
95
  <pane id="ProjectPane">
107
96
  <subPane>
@@ -185,10 +174,53 @@
185
174
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
186
175
  </PATH_ELEMENT>
187
176
  </PATH>
177
+ <PATH>
178
+ <PATH_ELEMENT>
179
+ <option name="myItemId" value="mongoid_followable" />
180
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
181
+ </PATH_ELEMENT>
182
+ <PATH_ELEMENT>
183
+ <option name="myItemId" value="mongoid_followable" />
184
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
185
+ </PATH_ELEMENT>
186
+ <PATH_ELEMENT>
187
+ <option name="myItemId" value="lib" />
188
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
189
+ </PATH_ELEMENT>
190
+ <PATH_ELEMENT>
191
+ <option name="myItemId" value="mongoid_followable" />
192
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
193
+ </PATH_ELEMENT>
194
+ </PATH>
195
+ <PATH>
196
+ <PATH_ELEMENT>
197
+ <option name="myItemId" value="mongoid_followable" />
198
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
199
+ </PATH_ELEMENT>
200
+ <PATH_ELEMENT>
201
+ <option name="myItemId" value="mongoid_followable" />
202
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
203
+ </PATH_ELEMENT>
204
+ <PATH_ELEMENT>
205
+ <option name="myItemId" value="app" />
206
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
207
+ </PATH_ELEMENT>
208
+ <PATH_ELEMENT>
209
+ <option name="myItemId" value="models" />
210
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
211
+ </PATH_ELEMENT>
212
+ </PATH>
188
213
  </subPane>
189
214
  </pane>
215
+ <pane id="Scope" />
190
216
  </panes>
191
217
  </component>
218
+ <component name="RecentsManager">
219
+ <key name="CopyFile.RECENT_KEYS">
220
+ <recent name="$PROJECT_DIR$/spec/mongoid" />
221
+ <recent name="$PROJECT_DIR$/spec/models" />
222
+ </key>
223
+ </component>
192
224
  <component name="RunManager">
193
225
  <configuration default="true" type="RubyRunConfigurationType" factoryName="Ruby">
194
226
  <module name="" />
@@ -228,30 +260,31 @@
228
260
  </component>
229
261
  <component name="TaskManager">
230
262
  <task active="true" id="Default" summary="Default task">
263
+ <changelist id="90bdec60-890b-4083-b05d-2f665a1f4d70" name="Default" comment="" />
231
264
  <created>1308618686031</created>
232
265
  <updated>1308618686031</updated>
233
266
  </task>
234
267
  <servers />
235
268
  </component>
236
269
  <component name="ToolWindowManager">
237
- <frame x="1" y="24" width="1598" height="851" extended-state="3" />
238
- <editor active="true" />
270
+ <frame x="0" y="24" width="1280" height="752" extended-state="1" />
271
+ <editor active="false" />
239
272
  <layout>
240
- <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
273
+ <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
241
274
  <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
242
- <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32963988" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
243
275
  <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
244
- <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
245
- <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.17811705" sideWeight="0.6703601" order="0" side_tool="false" content_ui="tabs" />
276
+ <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
277
+ <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1770335" sideWeight="0.67128986" order="0" side_tool="false" content_ui="tabs" />
246
278
  <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
247
279
  <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
248
- <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
280
+ <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
249
281
  <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
250
282
  <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
251
283
  <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
284
+ <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32871014" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
252
285
  <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
253
- <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
254
286
  <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
287
+ <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
255
288
  </layout>
256
289
  </component>
257
290
  <component name="VcsManagerConfiguration">
@@ -287,58 +320,78 @@
287
320
  <breakpoint-manager />
288
321
  </component>
289
322
  <component name="editorHistoryManager">
290
- <entry file="file://$PROJECT_DIR$/mongoid_followable.gemspec">
323
+ <entry file="file://$PROJECT_DIR$/Rakefile">
291
324
  <provider selected="true" editor-type-id="text-editor">
292
- <state line="6" column="27" selection-start="205" selection-end="205" vertical-scroll-proportion="0.1300578">
293
- <folding />
294
- </state>
325
+ <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
295
326
  </provider>
296
327
  </entry>
297
- <entry file="file://$PROJECT_DIR$/Rakefile">
328
+ <entry file="file://$PROJECT_DIR$/Gemfile">
298
329
  <provider selected="true" editor-type-id="text-editor">
299
- <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
330
+ <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
331
+ </provider>
332
+ </entry>
333
+ <entry file="file://$PROJECT_DIR$/LICENSE.txt">
334
+ <provider selected="true" editor-type-id="text-editor">
335
+ <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
336
+ </provider>
337
+ </entry>
338
+ <entry file="file://$PROJECT_DIR$/spec/models/group.rb">
339
+ <provider selected="true" editor-type-id="text-editor">
340
+ <state line="2" column="29" selection-start="69" selection-end="69" vertical-scroll-proportion="0.0">
300
341
  <folding />
301
342
  </state>
302
343
  </provider>
303
344
  </entry>
304
345
  <entry file="file://$PROJECT_DIR$/spec/models/user.rb">
305
346
  <provider selected="true" editor-type-id="text-editor">
306
- <state line="2" column="29" selection-start="68" selection-end="68" vertical-scroll-proportion="0.04341534">
347
+ <state line="3" column="9" selection-start="72" selection-end="72" vertical-scroll-proportion="0.0">
307
348
  <folding />
308
349
  </state>
309
350
  </provider>
310
351
  </entry>
311
- <entry file="file://$PROJECT_DIR$/lib/mongoid_followable/version.rb">
352
+ <entry file="file://$PROJECT_DIR$/lib/mongoid_followable.rb">
312
353
  <provider selected="true" editor-type-id="text-editor">
313
- <state line="2" column="4" selection-start="39" selection-end="39" vertical-scroll-proportion="0.0">
354
+ <state line="1" column="21" selection-start="96" selection-end="96" vertical-scroll-proportion="0.02529511">
314
355
  <folding />
315
356
  </state>
316
357
  </provider>
317
358
  </entry>
318
359
  <entry file="file://$PROJECT_DIR$/spec/spec_helper.rb">
319
360
  <provider selected="true" editor-type-id="text-editor">
320
- <state line="17" column="54" selection-start="439" selection-end="439" vertical-scroll-proportion="0.5629139">
361
+ <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
321
362
  <folding />
322
363
  </state>
323
364
  </provider>
324
365
  </entry>
325
- <entry file="file://$PROJECT_DIR$/Gemfile">
366
+ <entry file="file://$PROJECT_DIR$/spec/mongoid/followable_spec.rb">
326
367
  <provider selected="true" editor-type-id="text-editor">
327
- <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
368
+ <state line="71" column="31" selection-start="1675" selection-end="1675" vertical-scroll-proportion="1.7959528">
328
369
  <folding />
329
370
  </state>
330
371
  </provider>
331
372
  </entry>
332
- <entry file="file://$PROJECT_DIR$/spec/mongoid/followable_spec.rb">
373
+ <entry file="file://$PROJECT_DIR$/app/models/follow.rb">
333
374
  <provider selected="true" editor-type-id="text-editor">
334
- <state line="42" column="33" selection-start="1138" selection-end="1138" vertical-scroll-proportion="0.0">
375
+ <state line="10" column="44" selection-start="315" selection-end="315" vertical-scroll-proportion="0.2529511">
335
376
  <folding />
336
377
  </state>
337
378
  </provider>
338
379
  </entry>
339
- <entry file="file://$PROJECT_DIR$/lib/mongoid_followable.rb">
380
+ <entry file="file://$PROJECT_DIR$/lib/mongoid_followable/version.rb">
381
+ <provider selected="true" editor-type-id="text-editor">
382
+ <state line="2" column="20" selection-start="55" selection-end="55" vertical-scroll-proportion="0.05059022" />
383
+ </provider>
384
+ </entry>
385
+ <entry file="file://$PROJECT_DIR$/mongoid_followable.gemspec">
386
+ <provider selected="true" editor-type-id="text-editor">
387
+ <state line="11" column="66" selection-start="437" selection-end="437" vertical-scroll-proportion="0.2782462">
388
+ <folding />
389
+ </state>
390
+ </provider>
391
+ </entry>
392
+ <entry file="file://$PROJECT_DIR$/lib/mongoid_followable/followable.rb">
340
393
  <provider selected="true" editor-type-id="text-editor">
341
- <state line="11" column="23" selection-start="297" selection-end="297" vertical-scroll-proportion="0.23878437">
394
+ <state line="158" column="46" selection-start="3816" selection-end="3816" vertical-scroll-proportion="3.9966273">
342
395
  <folding />
343
396
  </state>
344
397
  </provider>
data/README.rdoc CHANGED
@@ -1,38 +1,46 @@
1
- ###mongoid_followable###
2
- * * *
3
- ### Installation###
1
+ = mongoid_followable
2
+
3
+ == Installation
4
+
4
5
  In console:
5
- gem install mongoid_followable
6
+ gem install mongoid_followable
6
7
  or in Gemfile:
7
- gem 'mongoid_followable'
8
- * * *
9
- ###Usage###
8
+ gem 'mongoid_followable'
9
+
10
+ == Usage
11
+
10
12
  To make model followable you need to include Mongoid::Followable into your document:
11
- class User
12
- include Mongoid::Document
13
- include Mongoid::Followable
14
- end
13
+ class User
14
+ include Mongoid::Document
15
+ include Mongoid::Followable
16
+ end
15
17
  Now you can follow others in your controller:
16
- ...
17
- @user = some_other_user
18
- current_user.follow(@user)
18
+ ...
19
+ @user = some_other_user
20
+ current_user.follow(@user)
19
21
 
20
- current_user.unfollow(@user)
22
+ current_user.unfollow(@user)
21
23
 
22
- current_user.follower_of?(@user)
23
- current_user.followee_of?(@user)
24
+ current_user.follower_of?(@user)
25
+ current_user.followee_of?(@user)
24
26
 
25
- current_user.follower_count
26
- current_user.followee_count
27
+ current_user.follower_count
28
+ current_user.followee_count
27
29
 
28
- User.followers_of(current_user)
29
- User.followees_of(current_user)
30
- ...
30
+ User.followers_of(current_user)
31
+ User.followees_of(current_user)
32
+ ...
31
33
 
32
- **In current version, only following the same model is allowed**
34
+ * In current version, only following the same model is allowed
35
+
36
+ == TODO
37
+
38
+ * inter-models followable
39
+ * divide into two parts: followable(being followed) and follower(following others)
40
+ * following history/followed history
41
+ * most/least followed/following
42
+ * follow part of user like only names etc(is this necessary?)
33
43
 
34
- ###TODO###
35
- inter-models followable
44
+ == Copyright
36
45
 
37
- ###Copyright###
38
- Copyright &copy; Jie Fan. See LICENSE.txt for further details.
46
+ Copyright (c) Jie Fan. See LICENSE.txt for further details.
@@ -0,0 +1,12 @@
1
+ class Follow
2
+ include Mongoid::Document
3
+
4
+ field :f_type, :type => String
5
+ field :f_id, :type => String
6
+
7
+ belongs_to :followable, :polymorphic => true
8
+ belongs_to :following, :polymorphic => true
9
+
10
+ scope :by_type, lambda { |type| where(:f_type => type.capitalize) }
11
+ scope :by_model, lambda { |model| where(:f_id => model.id.to_s).by_type(model.class.name) }
12
+ end
@@ -1,151 +1,2 @@
1
- module Mongoid
2
- module Followable
3
- extend ActiveSupport::Concern
4
-
5
- included do |base|
6
- base.field :follower, :type => Array, :default => []
7
- base.field :followee, :type => Array, :default => []
8
- end
9
-
10
- module ClassMethods
11
- # get a list of followers of certain model
12
- #
13
- # Example:
14
- # >> @Jim = User.new
15
- # >> @Tom = User.new
16
- # >> @Jim.save
17
- # >> @Tom.save
18
- # >> @Jim.follow(@Tom)
19
- # >> User.followers_of(@Tom)
20
- # => [@Jim]
21
- #
22
- # Arguments:
23
- # model: (instance of model(like User, Group))
24
- def followers_of(model)
25
- self.any_in(:_id => model.follower)
26
- end
27
-
28
- # get a list of followees of certain model
29
- #
30
- # Example:
31
- # >> @Jim = User.new
32
- # >> @Tom = User.new
33
- # >> @Jim.save
34
- # >> @Tom.save
35
- # >> @Jim.follow(@Tom)
36
- # >> User.followees_of(@Jim)
37
- # => [@Tom]
38
- #
39
- # Arguments:
40
- # model: (instance of model(like User, Group))
41
- def followees_of(model)
42
- self.any_in(:_id => model.followee)
43
- end
44
- end
45
-
46
- # judge whether a model is follower of another model
47
- #
48
- # Example:
49
- # >> @Jim = User.new
50
- # >> @Tom = User.new
51
- # >> @Jim.save
52
- # >> @Tom.save
53
- # >> @Jim.follow(@Tom)
54
- # >> @Jim.follower_of?(@Tom)
55
- # => true
56
- #
57
- # Arguments:
58
- # model: (instance of model(like User, Group))
59
- def follower_of?(model)
60
- return true if model.follower.include?(self.id) and self.followee.include?(model.id)
61
- end
62
-
63
- # judge whether a model is followee of another model
64
- #
65
- # Example:
66
- # >> @Jim = User.new
67
- # >> @Tom = User.new
68
- # >> @Jim.save
69
- # >> @Tom.save
70
- # >> @Jim.follow(@Tom)
71
- # >> @Tom.followee_of?(@Jim)
72
- # => true
73
- #
74
- # Arguments:
75
- # model: (instance of model(like User, Group))
76
- def followee_of?(model)
77
- return true if model.followee.include?(self.id) and self.follower.include?(model.id)
78
- end
79
-
80
- # follow a model
81
- #
82
- # Example:
83
- # >> @Jim = User.new
84
- # >> @Tom = User.new
85
- # >> @Jim.save
86
- # >> @Tom.save
87
- # >> @Jim.follow(@Tom)
88
- #
89
- # Arguments:
90
- # model: (instance of model(like User, Group))
91
- def follow(model)
92
- unless model == self
93
- model.follower |= [self.id]
94
- self.followee |= [model.id]
95
- end
96
- end
97
-
98
- # cancel following a model
99
- #
100
- # Example:
101
- # >> @Jim = User.new
102
- # >> @Tom = User.new
103
- # >> @Jim.save
104
- # >> @Tom.save
105
- # >> @Jim.follow(@Tom)
106
- # >> @Jim.unfollow(@Tom)
107
- #
108
- # Arguments:
109
- # model: (instance of model(like User, Group))
110
- def unfollow(model)
111
- unless model == self
112
- model.follower -= [self.id]
113
- self.followee -= [model.id]
114
- end
115
- end
116
-
117
- # count followers of a model
118
- #
119
- # Example:
120
- # >> @Jim = User.new
121
- # >> @Tom = User.new
122
- # >> @Jim.save
123
- # >> @Tom.save
124
- # >> @Jim.follow(@Tom)
125
- # >> @Tom.follower_count
126
- # => 1
127
- #
128
- # Arguments:
129
- # none
130
- def follower_count
131
- self.follower.length
132
- end
133
-
134
- # count followees of a model
135
- #
136
- # Example:
137
- # >> @Jim = User.new
138
- # >> @Tom = User.new
139
- # >> @Jim.save
140
- # >> @Tom.save
141
- # >> @Jim.follow(@Tom)
142
- # >> @Jim.followee_count
143
- # => 1
144
- #
145
- # Arguments:
146
- # none
147
- def followee_count
148
- self.followee.length
149
- end
150
- end
151
- end
1
+ require File.join(File.dirname(__FILE__), "mongoid_followable/followable")
2
+ require File.join(File.dirname(__FILE__), "../app/models/follow")
@@ -0,0 +1,175 @@
1
+ module Mongoid
2
+ module Followable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do |base|
6
+ base.has_many :followers, :class_name => "Follow", :as => :followable, :dependent => :destroy
7
+ base.has_many :followees, :class_name => "Follow", :as => :following, :dependent => :destroy
8
+ end
9
+
10
+ module ClassMethods
11
+
12
+ # get certain model's followers of this type
13
+ #
14
+ # Example:
15
+ # >> @jim = User.new
16
+ # >> @ruby = Group.new
17
+ # >> @jim.save
18
+ # >> @ruby.save
19
+ #
20
+ # >> @jim.follow(@ruby)
21
+ # >> User.followers_of(@ruby)
22
+ # => [@jim]
23
+ #
24
+ # Arguments:
25
+ # model: instance of some followable model
26
+
27
+ def followers_of(model)
28
+ model.followers_by_type(self.name)
29
+ end
30
+
31
+ # get certain model's followees of this type
32
+ #
33
+ # Example:
34
+ # >> @jim.follow(@ruby)
35
+ # >> Group.followees_of(@jim)
36
+ # => [@ruby]
37
+
38
+ def followees_of(model)
39
+ model.followees_by_type(self.name)
40
+ end
41
+
42
+ end
43
+
44
+ # see if this model is follower of some model
45
+ #
46
+ # Example:
47
+ # >> @jim.follower_of?(@ruby)
48
+ # => true
49
+
50
+ def follower_of?(model)
51
+ 0 < self.followees.by_model(model).limit(1).count * model.followers.by_model(self).limit(1).count
52
+ end
53
+
54
+ # see if this model is followee of some model
55
+ #
56
+ # Example:
57
+ # >> @ruby.followee_of?(@jim)
58
+ # => true
59
+
60
+ def followee_of?(model)
61
+ 0 < self.followers.by_model(model).limit(1).count * model.followees.by_model(self).limit(1).count
62
+ end
63
+
64
+ # get all the followers of this model, same with classmethod followers_of
65
+ #
66
+ # Example:
67
+ # >> @ruby.all_followers
68
+ # => [@jim]
69
+
70
+ def all_followers
71
+ rebuild_instances(self.followers)
72
+ end
73
+
74
+ # get all the followees of this model, same with classmethod followees_of
75
+ #
76
+ # Example:
77
+ # >> @jim.all_followees
78
+ # => [@ruby]
79
+
80
+ def all_followees
81
+ rebuild_instances(self.followees)
82
+ end
83
+
84
+ # get all the followers of this model in certain type
85
+ #
86
+ # Example:
87
+ # >> @ruby.followers_by_type("user")
88
+ # => [@jim]
89
+
90
+ def followers_by_type(type)
91
+ rebuild_instances(self.followers.by_type(type))
92
+ end
93
+
94
+ # get all the followees of this model in certain type
95
+ #
96
+ # Example:
97
+ # >> @ruby.followees_by_type("group")
98
+ # => [@ruby]
99
+
100
+ def followees_by_type(type)
101
+ rebuild_instances(self.followees.by_type(type))
102
+ end
103
+
104
+ # follow some model
105
+
106
+ def follow(*models)
107
+ models.each do |model|
108
+ unless model == self or self.follower_of?(model) or model.followee_of?(self)
109
+ model.followers.create!(:f_type => self.class.name, :f_id => self.id.to_s)
110
+ self.followees.create!(:f_type => model.class.name, :f_id => model.id.to_s)
111
+ end
112
+ end
113
+ end
114
+
115
+ # unfollow some model
116
+
117
+ def unfollow(*models)
118
+ models.each do |model|
119
+ unless model == self or !self.follower_of?(model) or !model.followee_of?(self)
120
+ model.followers.by_model(self).first.destroy
121
+ self.followees.by_model(model).first.destroy
122
+ end
123
+ end
124
+ end
125
+
126
+ # get the number of followers
127
+ #
128
+ # Example:
129
+ # >> @ruby.followers_count
130
+ # => 1
131
+
132
+ def followers_count
133
+ self.followers.count
134
+ end
135
+
136
+ # get the number of followees
137
+ #
138
+ # Example:
139
+ # >> @jim.followers_count
140
+ # => 1
141
+
142
+ def followees_count
143
+ self.followees.count
144
+ end
145
+
146
+ # get the number of followers in certain type
147
+ #
148
+ # Example:
149
+ # >> @ruby.followers_count_by_type("user")
150
+ # => 1
151
+
152
+ def followers_count_by_type(type)
153
+ self.followers.by_type(type).count
154
+ end
155
+
156
+ # get the number of followees in certain type
157
+ #
158
+ # Example:
159
+ # >> @jim.followees_count_by_type("group")
160
+ # => 1
161
+
162
+ def followees_count_by_type(type)
163
+ self.followees.by_type(type).count
164
+ end
165
+
166
+ private
167
+ def rebuild_instances(follows)
168
+ follow_list = []
169
+ follows.each do |follow|
170
+ follow_list << follow.f_type.capitalize.constantize.find(follow.f_id)
171
+ end
172
+ follow_list
173
+ end
174
+ end
175
+ end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Followable
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
6
6
  s.name = "mongoid_followable"
7
7
  s.version = Mongoid::Followable::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.date = "2011-06-21"
9
+ s.date = "2011-06-22"
10
10
  s.authors = ["Jie Fan"]
11
11
  s.email = ["ustc.flyingfox@gmail.com"]
12
12
  s.homepage = "https://github.com/lastomato/mongoid_followable"
@@ -0,0 +1,4 @@
1
+ class Group
2
+ include Mongoid::Document
3
+ include Mongoid::Followable
4
+ end
@@ -1,70 +1,98 @@
1
1
  require 'spec_helper'
2
2
 
3
- module Mongoid
3
+ describe Mongoid::Followable do
4
+
4
5
  describe User do
5
6
 
6
7
  let!(:u) { User.new }
7
8
 
8
- context "certain user" do
9
+ context "begins" do
9
10
 
10
11
  before do
11
12
  u.save
13
+
12
14
  @v = User.new
13
15
  @v.save
16
+
17
+ @g = Group.new
18
+ @g.save
14
19
  end
15
20
 
16
- it "follows a user" do
21
+ it "following a user" do
17
22
  u.follow(@v)
18
- u.followee.include?(@v.id).should be_true
19
- @v.follower.include?(u.id).should be_true
20
23
 
21
24
  u.follower_of?(@v).should be_true
22
- u.followee_of?(@v).should be_false
23
- @v.follower_of?(u).should be_false
24
25
  @v.followee_of?(u).should be_true
25
26
 
26
- u.follower_of?(u).should be_false
27
- @v.followee_of?(@v).should be_false
28
- @v.follower_of?(@v).should be_false
29
- u.followee_of?(u).should be_false
27
+ u.all_followees.should == [@v]
28
+ @v.all_followers.should == [u]
30
29
 
31
- u.follower_count.should == 0
32
- @v.follower_count.should == 1
33
- u.followee_count.should == 1
34
- @v.followee_count.should == 0
30
+ u.followees_by_type("user").should == [@v]
31
+ @v.followers_by_type("user").should == [u]
35
32
 
36
- User.followers_of(@v).should == [u]
37
- User.followees_of(@v).should == []
38
- User.followers_of(u).should == []
39
- User.followees_of(u).should == [@v]
33
+ u.followees_count.should == 1
34
+ @v.followers_count.should == 1
35
+
36
+ u.followees_count_by_type("user").should == 1
37
+ @v.followers_count_by_type("user").should == 1
40
38
  end
41
39
 
42
- it "unfollows a user" do
40
+ it "unfollowing a user" do
43
41
  u.unfollow(@v)
44
- u.followee.include?(@v.id).should be_false
45
- @v.follower.include?(u.id).should be_false
46
42
 
47
43
  u.follower_of?(@v).should be_false
48
- u.followee_of?(@v).should be_false
49
- @v.follower_of?(u).should be_false
50
44
  @v.followee_of?(u).should be_false
51
45
 
52
- u.follower_of?(u).should be_false
53
- @v.followee_of?(@v).should be_false
54
- @v.follower_of?(@v).should be_false
55
- u.followee_of?(u).should be_false
46
+ u.all_followees.should == []
47
+ @v.all_followers.should == []
48
+
49
+ u.followees_by_type("user").should == []
50
+ @v.followers_by_type("user").should == []
51
+
52
+ u.followees_count.should == 0
53
+ @v.followers_count.should == 0
54
+
55
+ u.followees_count_by_type("user").should == 0
56
+ @v.followers_count_by_type("user").should == 0
57
+ end
58
+
59
+ it "following a group" do
60
+ u.follow(@g)
56
61
 
57
- u.follower_count.should == 0
58
- @v.follower_count.should == 0
59
- u.followee_count.should == 0
60
- @v.followee_count.should == 0
62
+ u.follower_of?(@g).should be_true
63
+ @g.followee_of?(u).should be_true
61
64
 
62
- User.followers_of(u).should == []
63
- User.followees_of(u).should == []
64
- User.followers_of(@v).should == []
65
- User.followees_of(@v).should == []
65
+ u.all_followees.should == [@g]
66
+ @g.all_followers.should == [u]
67
+
68
+ u.followees_by_type("group").should == [@g]
69
+ @g.followers_by_type("user").should == [u]
70
+
71
+ u.followees_count.should == 1
72
+ @g.followers_count.should == 1
73
+
74
+ u.followees_count_by_type("group").should == 1
75
+ @g.followers_count_by_type("user").should == 1
66
76
  end
67
77
 
78
+ it "unfollowing a group" do
79
+ u.unfollow(@g)
80
+
81
+ u.follower_of?(@g).should be_false
82
+ @g.followee_of?(u).should be_false
83
+
84
+ u.all_followees.should == []
85
+ @g.all_followers.should == []
86
+
87
+ u.followees_by_type("group").should == []
88
+ @g.followers_by_type("group").should == []
89
+
90
+ u.followees_count.should == 0
91
+ @g.followers_count.should == 0
92
+
93
+ u.followees_count_by_type("group").should == 0
94
+ @g.followers_count_by_type("group").should == 0
95
+ end
68
96
  end
69
97
  end
70
98
  end
data/spec/spec_helper.rb CHANGED
@@ -11,8 +11,8 @@ Mongoid.configure do |config|
11
11
  end
12
12
 
13
13
  require File.expand_path("../../lib/mongoid_followable", __FILE__)
14
-
15
- Dir["#{File.dirname(__FILE__)}/models/*.rb"].each { |f| require f }
14
+ require File.expand_path("../models/user", __FILE__)
15
+ require File.expand_path("../models/group", __FILE__)
16
16
 
17
17
  RSpec.configure do |c|
18
18
  c.before(:all) { DatabaseCleaner.strategy = :truncation }
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: mongoid_followable
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jie Fan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-21 00:00:00 -04:00
13
+ date: 2011-06-22 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -81,9 +81,12 @@ files:
81
81
  - README
82
82
  - README.rdoc
83
83
  - Rakefile
84
+ - app/models/follow.rb
84
85
  - lib/mongoid_followable.rb
86
+ - lib/mongoid_followable/followable.rb
85
87
  - lib/mongoid_followable/version.rb
86
88
  - mongoid_followable.gemspec
89
+ - spec/models/group.rb
87
90
  - spec/models/user.rb
88
91
  - spec/mongoid/followable_spec.rb
89
92
  - spec/spec_helper.rb