mongo_followable 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
4
+ </project>
5
+
data/.idea/misc.xml ADDED
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-1.9.3-p125" project-jdk-type="RUBY_SDK" />
4
+ </project>
5
+
data/.idea/modules.xml ADDED
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/mongo_followable.iml" filepath="$PROJECT_DIR$/.idea/mongo_followable.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
9
+
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="inheritedJdk" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ <orderEntry type="library" scope="PROVIDED" name="builder (v3.0.0, RVM: ruby-1.9.3-p125) [gem]" level="application" />
8
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v1.1.3, RVM: ruby-1.9.3-p125) [gem]" level="application" />
9
+ <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.1.3, RVM: ruby-1.9.3-p125) [gem]" level="application" />
10
+ <orderEntry type="library" scope="PROVIDED" name="i18n (v0.6.0, RVM: ruby-1.9.3-p125) [gem]" level="application" />
11
+ <orderEntry type="library" scope="PROVIDED" name="mongo (v1.5.2, RVM: ruby-1.9.3-p125) [gem]" level="application" />
12
+ <orderEntry type="library" scope="PROVIDED" name="mongoid (v2.4.7, RVM: ruby-1.9.3-p125) [gem]" level="application" />
13
+ <orderEntry type="library" scope="PROVIDED" name="multi_json (v1.0.4, RVM: ruby-1.9.3-p125) [gem]" level="application" />
14
+ <orderEntry type="library" scope="PROVIDED" name="rspec (v2.7.0, RVM: ruby-1.9.3-p125) [gem]" level="application" />
15
+ </component>
16
+ </module>
17
+
data/.idea/vcs.xml ADDED
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
7
+
data/README.rdoc CHANGED
@@ -2,8 +2,6 @@
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
-
7
5
  == Installation
8
6
 
9
7
  In console:
@@ -25,6 +23,12 @@ To make model followable you need to include Mongo::Followable into your model;
25
23
  include Mongo::Followable
26
24
  end
27
25
 
26
+ Now you can set configuration for mongo_followable in environment/*.rb:
27
+
28
+ # Note: for current version, you can only set the config once(first time the application is created).
29
+ # This should be fixed in next version.
30
+ config.mongo_followable = { :authorization => false, :history => false } # this is default value
31
+
28
32
  Now you can set authorization:
29
33
  current_user.set_authorization('user', 'game') # now current_user cannot follow User and Game model
30
34
  current_user.unset_authorization('User', 'Game')
@@ -81,8 +85,10 @@ Getting a model's followers/followees by type is also possible:
81
85
  @group.followers_by_type("user")
82
86
  @user.followees_by_type("group")
83
87
 
84
- For inherited model:
88
+ Dealing with model names:
85
89
 
90
+ @group.followers_by_type("user")
91
+ @group.followers_by_type("User")
86
92
  @group.followers_by_type("user_post") # both are fine
87
93
  @user.followees_by_type("GroupPost")
88
94
 
@@ -4,12 +4,24 @@ module Mongo
4
4
 
5
5
  included do |base|
6
6
  if defined?(Mongoid)
7
- base.field :cannot_followed, :type => Array, :default => []
8
- base.field :followed_history, :type => Array, :default => []
7
+ if CONFIG[:authorization]
8
+ base.field :cannot_followed, :type => Array, :default => []
9
+ end
10
+
11
+ if CONFIG[:history]
12
+ base.field :followed_history, :type => Array, :default => []
13
+ end
14
+
9
15
  base.has_many :followers, :class_name => "Follow", :as => :followable, :dependent => :destroy
10
16
  elsif defined?(MongoMapper)
11
- base.key :cannot_followed, :type => Array, :default => []
12
- base.key :followed_history, :type => Array, :default => []
17
+ if CONFIG[:authorization]
18
+ base.key :cannot_followed, :type => Array, :default => []
19
+ end
20
+
21
+ if CONFIG[:history]
22
+ base.key :followed_history, :type => Array, :default => []
23
+ end
24
+
13
25
  base.many :followers, :class_name => "Follow", :as => :followable, :dependent => :destroy
14
26
  end
15
27
  end
@@ -89,19 +101,21 @@ module Mongo
89
101
  # >> @ruby.set_authorization('user')
90
102
  # => true
91
103
 
92
- def set_authorization(*models)
93
- models.each do |model|
104
+ if CONFIG[:authorization]
105
+ define_method(:set_authorization) do |*models|
106
+ models.each do |model|
94
107
 
95
- self.cannot_followed << model.safe_capitalize
108
+ self.cannot_followed << model.safe_capitalize
109
+ end
110
+ self.save
96
111
  end
97
- self.save
98
- end
99
112
 
100
- def unset_authorization(*models)
101
- models.each do |model|
102
- self.cannot_followed -= [model.safe_capitalize]
113
+ define_method(:unset_authorization) do |*models|
114
+ models.each do |model|
115
+ self.cannot_followed -= [model.safe_capitalize]
116
+ end
117
+ self.save
103
118
  end
104
- self.save
105
119
  end
106
120
 
107
121
  # see if this model is followee of some model
@@ -140,7 +154,9 @@ module Mongo
140
154
  end
141
155
 
142
156
  models.each do |model|
143
- 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)
157
+ term = CONFIG[:authorization] ? (self.cannot_followed.include?(model.class.name) or model.cannot_follow.include?(self.class.name)) : false
158
+
159
+ unless model == self or !self.followee_of?(model) or !model.follower_of?(self) or term
144
160
  model.followees.by_model(self).first.destroy
145
161
  self.followers.by_model(model).first.destroy
146
162
  end
@@ -189,12 +205,14 @@ module Mongo
189
205
  # >> @ruby.ever_followed
190
206
  # => [@jim]
191
207
 
192
- def ever_followed
193
- follow = []
194
- self.followed_history.each do |h|
195
- follow << h.split('_')[0].constantize.find(h.split('_')[1])
208
+ if CONFIG[:history]
209
+ define_method(:ever_followed) do
210
+ follow = []
211
+ self.followed_history.each do |h|
212
+ follow << h.split('_')[0].constantize.find(h.split('_')[1])
213
+ end
214
+ follow
196
215
  end
197
- follow
198
216
  end
199
217
 
200
218
  # return if there is any common followers
@@ -4,12 +4,24 @@ module Mongo
4
4
 
5
5
  included do |base|
6
6
  if defined?(Mongoid)
7
- base.field :cannot_follow, :type => Array, :default => []
8
- base.field :follow_history, :type => Array, :default => []
7
+ if CONFIG[:authorization]
8
+ base.field :cannot_follow, :type => Array, :default => []
9
+ end
10
+
11
+ if CONFIG[:history]
12
+ base.field :follow_history, :type => Array, :default => []
13
+ end
14
+
9
15
  base.has_many :followees, :class_name => "Follow", :as => :following, :dependent => :destroy
10
16
  elsif defined?(MongoMapper)
11
- base.key :cannot_follow, :type => Array, :default => []
12
- base.key :follow_history, :type => Array, :default => []
17
+ if CONFIG[:authorization]
18
+ base.key :cannot_follow, :type => Array, :default => []
19
+ end
20
+
21
+ if CONFIG[:history]
22
+ base.key :follow_history, :type => Array, :default => []
23
+ end
24
+
13
25
  base.many :followees, :class_name => "Follow", :as => :following, :dependent => :destroy
14
26
  end
15
27
  end
@@ -89,20 +101,22 @@ module Mongo
89
101
  # >> @jim.set_authorization('group', 'user')
90
102
  # => true
91
103
 
92
- def set_authorization(*models)
93
- models.each do |model|
94
- self.cannot_follow << model.safe_capitalize
104
+ if CONFIG[:authorization]
105
+ define_method(:set_authorization) do |*models|
106
+ models.each do |model|
107
+ self.cannot_follow << model.safe_capitalize
108
+ end
109
+ self.save
95
110
  end
96
- self.save
97
- end
98
111
 
99
- #unset which mongoid user cannot follow
112
+ #unset which mongoid user cannot follow
100
113
 
101
- def unset_authorization(*models)
102
- models.each do |model|
103
- self.cannot_follow -= [model.safe_capitalize]
114
+ define_method(:unset_authorization) do |*models|
115
+ models.each do |model|
116
+ self.cannot_follow -= [model.safe_capitalize]
117
+ end
118
+ self.save
104
119
  end
105
- self.save
106
120
  end
107
121
 
108
122
  # see if this model is follower of some model
@@ -153,12 +167,18 @@ module Mongo
153
167
  end
154
168
 
155
169
  models.each do |model|
156
- 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)
170
+ term = CONFIG[:authorization] ? (self.cannot_follow.include?(model.class.name) or model.cannot_followed.include?(self.class.name)) : false
171
+
172
+ unless model == self or self.follower_of?(model) or model.followee_of?(self) or term
157
173
  model.followers.create!(:f_type => self.class.name, :f_id => self.id.to_s)
158
- model.followed_history << self.class.name + '_' + self.id.to_s
159
- model.save
160
174
  self.followees.create!(:f_type => model.class.name, :f_id => model.id.to_s)
161
- self.follow_history << model.class.name + '_' + model.id.to_s
175
+
176
+ if CONFIG[:history]
177
+ model.followed_history << self.class.name + '_' + self.id.to_s
178
+ self.follow_history << model.class.name + '_' + model.id.to_s
179
+ end
180
+
181
+ model.save
162
182
  self.save
163
183
  end
164
184
  end
@@ -211,12 +231,14 @@ module Mongo
211
231
  # >> @jim.ever_follow
212
232
  # => [@ruby]
213
233
 
214
- def ever_follow
215
- follow = []
216
- self.follow_history.each do |h|
217
- follow << h.split('_')[0].constantize.find(h.split('_')[1])
234
+ if CONFIG[:history]
235
+ define_method(:ever_follow) do
236
+ follow = []
237
+ self.follow_history.each do |h|
238
+ follow << h.split('_')[0].constantize.find(h.split('_')[1])
239
+ end
240
+ follow
218
241
  end
219
- follow
220
242
  end
221
243
 
222
244
  # return if there is any common followees
@@ -0,0 +1,9 @@
1
+ module Mongo
2
+ CONFIG = { :authorization => false, :history => false }
3
+
4
+ class Railtie < Rails::Railtie
5
+ config.after_initialize do
6
+ CONFIG.merge!(Rails.application.config.mongo_followable) if Rails.application.config.respond_to?(:mongo_followable)
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module MongoFollowable
2
- VERSION = "0.2.5"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,12 +1,5 @@
1
- module Mongo
2
- class FollowableError < StandardError
3
- def initialize(msg, info)
4
- @info = info
5
- super(msg)
6
- end
7
- end
8
-
9
- class NoMongoidOrMongoMapperError < FollowableError; end
1
+ if defined?(Rails)
2
+ require File.join(File.dirname(__FILE__), "mongo_followable/railtie")
10
3
  end
11
4
 
12
5
  if defined?(Mongoid) or defined?(MongoMapper)
metadata CHANGED
@@ -1,83 +1,109 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mongo_followable
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
4
5
  prerelease:
5
- version: 0.2.5
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Jie Fan
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-03-24 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-05-31 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: rspec
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 2.7.0
24
22
  type: :development
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: mongoid
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
30
25
  none: false
31
- requirements:
26
+ requirements:
32
27
  - - ~>
33
- - !ruby/object:Gem::Version
28
+ - !ruby/object:Gem::Version
29
+ version: 2.7.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: mongoid
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
34
37
  version: 2.4.0
35
38
  type: :development
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: mongo_mapper
39
39
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
- requirements:
42
+ requirements:
43
43
  - - ~>
44
- - !ruby/object:Gem::Version
44
+ - !ruby/object:Gem::Version
45
+ version: 2.4.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: mongo_mapper
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
45
53
  version: 0.10.0
46
54
  type: :development
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: bson_ext
50
55
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
52
57
  none: false
53
- requirements:
58
+ requirements:
54
59
  - - ~>
55
- - !ruby/object:Gem::Version
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: bson_ext
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
56
69
  version: 1.5.0
57
70
  type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: database_cleaner
61
71
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.5.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: database_cleaner
80
+ requirement: !ruby/object:Gem::Requirement
63
81
  none: false
64
- requirements:
82
+ requirements:
65
83
  - - ~>
66
- - !ruby/object:Gem::Version
84
+ - !ruby/object:Gem::Version
67
85
  version: 0.7.0
68
86
  type: :development
69
- version_requirements: *id005
70
- description: " Mongo Followable adds following feature to mongoid/mongo_mapper "
71
- email:
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.7.0
94
+ description: ! ' Mongo Followable adds following feature to mongoid/mongo_mapper '
95
+ email:
72
96
  - ustc.flyingfox@gmail.com
73
97
  executables: []
74
-
75
98
  extensions: []
76
-
77
99
  extra_rdoc_files: []
78
-
79
- files:
100
+ files:
80
101
  - .gitignore
102
+ - .idea/encodings.xml
103
+ - .idea/misc.xml
104
+ - .idea/modules.xml
105
+ - .idea/mongo_followable.iml
106
+ - .idea/vcs.xml
81
107
  - .rakeTasks
82
108
  - Gemfile
83
109
  - LICENSE.txt
@@ -88,6 +114,7 @@ files:
88
114
  - lib/mongo_followable/core_ext/string.rb
89
115
  - lib/mongo_followable/followable.rb
90
116
  - lib/mongo_followable/follower.rb
117
+ - lib/mongo_followable/railtie.rb
91
118
  - lib/mongo_followable/version.rb
92
119
  - mongo_followable.gemspec
93
120
  - spec/mongo/followable_spec.rb
@@ -100,30 +127,26 @@ files:
100
127
  - spec/spec_helper.rb
101
128
  homepage: https://github.com/lastomato/mongo_followable
102
129
  licenses: []
103
-
104
130
  post_install_message:
105
131
  rdoc_options: []
106
-
107
- require_paths:
132
+ require_paths:
108
133
  - lib
109
- required_ruby_version: !ruby/object:Gem::Requirement
134
+ required_ruby_version: !ruby/object:Gem::Requirement
110
135
  none: false
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- version: "0"
115
- required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
141
  none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- version: "0"
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
121
146
  requirements: []
122
-
123
147
  rubyforge_project: mongo_followable
124
- rubygems_version: 1.8.17
148
+ rubygems_version: 1.8.22
125
149
  signing_key:
126
150
  specification_version: 3
127
151
  summary: adds following feature to mongoid/mongo_mapper
128
152
  test_files: []
129
-