inkwell 1.0.5 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/app/models/inkwell/blog_item.rb +1 -1
- data/app/models/inkwell/comment.rb +22 -24
- data/app/models/inkwell/favorite_item.rb +1 -2
- data/app/models/inkwell/timeline_item.rb +1 -2
- data/db/migrate/20130202130030_change_is_comment_to_item_type.rb +18 -0
- data/db/migrate/20130202130040_add_owner_type_to_lines.rb +16 -0
- data/db/migrate/20130212130858_refactor_comment_table.rb +7 -0
- data/db/migrate/20130212130868_rename_parent_id_to_parent_comment_id_in_comment_table.rb +5 -0
- data/lib/acts_as_inkwell_community/base.rb +16 -16
- data/lib/acts_as_inkwell_post/base.rb +15 -14
- data/lib/acts_as_inkwell_user/base.rb +41 -34
- data/lib/common/base.rb +28 -4
- data/lib/inkwell/version.rb +1 -1
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20130210231424_change_is_comment_to_item_type.inkwell.rb +19 -0
- data/test/dummy/db/migrate/20130212130848_add_owner_type_to_lines.inkwell.rb +17 -0
- data/test/dummy/db/migrate/20130213101736_refactor_comment_table.inkwell.rb +8 -0
- data/test/dummy/db/migrate/20130213121414_rename_parent_id_to_parent_comment_id_in_comment_table.inkwell.rb +6 -0
- data/test/dummy/db/schema.rb +14 -11
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +699 -0
- data/test/dummy/log/test.log +0 -0
- data/test/dummy/spec/functional/blogline_spec.rb +7 -7
- data/test/dummy/spec/functional/comments_spec.rb +129 -132
- data/test/dummy/spec/functional/community_spec.rb +119 -120
- data/test/dummy/spec/functional/favorite_spec.rb +27 -27
- data/test/dummy/spec/functional/following_spec.rb +26 -26
- data/test/dummy/spec/functional/reblog_spec.rb +32 -32
- data/test/dummy/spec/functional/timeline_spec.rb +1 -1
- data/test/dummy_without_community/db/development.sqlite3 +0 -0
- data/test/dummy_without_community/db/migrate/20130213115833_change_is_comment_to_item_type.inkwell.rb +19 -0
- data/test/dummy_without_community/db/migrate/20130213115834_add_owner_type_to_lines.inkwell.rb +17 -0
- data/test/dummy_without_community/db/migrate/20130213115835_refactor_comment_table.inkwell.rb +8 -0
- data/test/dummy_without_community/db/schema.rb +13 -10
- data/test/dummy_without_community/db/test.sqlite3 +0 -0
- data/test/dummy_without_community/log/development.log +111 -0
- data/test/dummy_without_community/log/test.log +11393 -0
- data/test/dummy_without_community/spec/functional/blogline_spec.rb +7 -7
- data/test/dummy_without_community/spec/functional/comments_spec.rb +128 -131
- data/test/dummy_without_community/spec/functional/favorite_spec.rb +27 -27
- data/test/dummy_without_community/spec/functional/following_spec.rb +26 -26
- data/test/dummy_without_community/spec/functional/reblog_spec.rb +32 -32
- data/test/dummy_without_community/spec/functional/timeline_spec.rb +1 -1
- metadata +32 -14
@@ -1,5 +1,5 @@
|
|
1
1
|
module Inkwell
|
2
2
|
class BlogItem < ActiveRecord::Base
|
3
|
-
attr_accessible :item_id, :owner_id, :is_reblog, :
|
3
|
+
attr_accessible :item_id, :owner_id, :is_reblog, :item_type, :created_at, :updated_at, :owner_type
|
4
4
|
end
|
5
5
|
end
|
@@ -1,13 +1,16 @@
|
|
1
1
|
module Inkwell
|
2
2
|
class Comment < ActiveRecord::Base
|
3
|
-
|
3
|
+
require_relative '../../../lib/common/base.rb'
|
4
|
+
include ::Inkwell::Constants
|
5
|
+
include ::Inkwell::Common
|
6
|
+
|
7
|
+
attr_accessible :body, :parent_comment_id, :topmost_obj_id, :topmost_obj_type
|
4
8
|
attr_accessor :is_reblogged
|
5
9
|
attr_accessor :is_favorited
|
6
10
|
attr_accessor :item_id_in_line
|
7
11
|
attr_accessor :is_reblog_in_blogline
|
8
12
|
attr_accessor :from_sources_in_timeline
|
9
13
|
|
10
|
-
validates :"#{::Inkwell::Engine::config.post_table.to_s.singularize}_id", :presence => true
|
11
14
|
validates :"#{::Inkwell::Engine::config.user_table.to_s.singularize}_id", :presence => true
|
12
15
|
validates :body, :presence => true
|
13
16
|
|
@@ -15,7 +18,6 @@ module Inkwell
|
|
15
18
|
before_destroy :destroy_comment_processing
|
16
19
|
|
17
20
|
belongs_to ::Inkwell::Engine::config.user_table.to_s.singularize
|
18
|
-
belongs_to ::Inkwell::Engine::config.post_table.to_s.singularize
|
19
21
|
|
20
22
|
def commentline(options = {})
|
21
23
|
options.symbolize_keys!
|
@@ -63,9 +65,9 @@ module Inkwell
|
|
63
65
|
protected
|
64
66
|
|
65
67
|
def remove_info_from_upper_comments(comments_info)
|
66
|
-
return unless self.
|
67
|
-
parent_comment = ::Inkwell::Comment.find self.
|
68
|
-
raise "There is no comment with id = #{self.
|
68
|
+
return unless self.parent_comment_id
|
69
|
+
parent_comment = ::Inkwell::Comment.find self.parent_comment_id
|
70
|
+
raise "There is no comment with id = #{self.parent_comment_id}" unless parent_comment
|
69
71
|
users_ids_who_comment_it = ActiveSupport::JSON.decode parent_comment.users_ids_who_comment_it
|
70
72
|
users_ids_who_comment_it -= comments_info
|
71
73
|
parent_comment.users_ids_who_comment_it = ActiveSupport::JSON.encode users_ids_who_comment_it
|
@@ -84,40 +86,36 @@ module Inkwell
|
|
84
86
|
::Inkwell::Comment.delete child_comments_ids_to_deleted
|
85
87
|
|
86
88
|
comment_with_child_comments_ids_to_deleted = child_comments_ids_to_deleted << self.id
|
87
|
-
::Inkwell::TimelineItem.delete_all :item_id => comment_with_child_comments_ids_to_deleted, :
|
88
|
-
::Inkwell::FavoriteItem.delete_all :item_id => comment_with_child_comments_ids_to_deleted, :
|
89
|
-
::Inkwell::BlogItem.delete_all :item_id => comment_with_child_comments_ids_to_deleted, :
|
89
|
+
::Inkwell::TimelineItem.delete_all :item_id => comment_with_child_comments_ids_to_deleted, :item_type => ItemTypes::COMMENT
|
90
|
+
::Inkwell::FavoriteItem.delete_all :item_id => comment_with_child_comments_ids_to_deleted, :item_type => ItemTypes::COMMENT
|
91
|
+
::Inkwell::BlogItem.delete_all :item_id => comment_with_child_comments_ids_to_deleted, :item_type => ItemTypes::COMMENT
|
90
92
|
|
91
93
|
user_id = self.send("#{::Inkwell::Engine::config.user_table.to_s.singularize}_id")
|
92
94
|
comment_with_child_comments_info = child_comments << Hash['user_id' => user_id, 'comment_id' => self.id]
|
93
95
|
remove_info_from_upper_comments comment_with_child_comments_info
|
94
96
|
|
95
|
-
|
96
|
-
|
97
|
-
parent_post = post_class.find self.send post_id_attr
|
98
|
-
users_ids_who_comment_it = ActiveSupport::JSON.decode parent_post.users_ids_who_comment_it
|
97
|
+
parent_obj = get_class_for_item_type(self.topmost_obj_type).find self.topmost_obj_id
|
98
|
+
users_ids_who_comment_it = ActiveSupport::JSON.decode parent_obj.users_ids_who_comment_it
|
99
99
|
users_ids_who_comment_it -= comment_with_child_comments_info
|
100
|
-
|
101
|
-
|
100
|
+
parent_obj.users_ids_who_comment_it = ActiveSupport::JSON.encode users_ids_who_comment_it
|
101
|
+
parent_obj.save
|
102
102
|
end
|
103
103
|
|
104
104
|
def processing_a_comment
|
105
|
-
|
106
|
-
post_id_attr = "#{::Inkwell::Engine::config.post_table.to_s.singularize}_id"
|
107
|
-
parent_post = post_class.find self.send post_id_attr
|
105
|
+
parent_obj = get_class_for_item_type(self.topmost_obj_type).find self.topmost_obj_id
|
108
106
|
user_id = self.send "#{::Inkwell::Engine::config.user_table.to_s.singularize}_id"
|
109
|
-
users_ids_who_comment_it = ActiveSupport::JSON.decode
|
107
|
+
users_ids_who_comment_it = ActiveSupport::JSON.decode parent_obj.users_ids_who_comment_it
|
110
108
|
users_ids_who_comment_it << Hash['user_id' => user_id, 'comment_id' => self.id]
|
111
|
-
|
112
|
-
|
109
|
+
parent_obj.users_ids_who_comment_it = ActiveSupport::JSON.encode users_ids_who_comment_it
|
110
|
+
parent_obj.save
|
113
111
|
|
114
112
|
add_user_info_to_upper_comments
|
115
113
|
end
|
116
114
|
|
117
115
|
def add_user_info_to_upper_comments
|
118
|
-
if self.
|
119
|
-
parent_comment = ::Inkwell::Comment.find self.
|
120
|
-
raise "Comment with id #{comment.
|
116
|
+
if self.parent_comment_id
|
117
|
+
parent_comment = ::Inkwell::Comment.find self.parent_comment_id
|
118
|
+
raise "Comment with id #{comment.parent_comment_id} is not found" unless parent_comment
|
121
119
|
parent_upper_comments_tree = ActiveSupport::JSON.decode parent_comment.upper_comments_tree
|
122
120
|
self_upper_comments_tree = parent_upper_comments_tree << parent_comment.id
|
123
121
|
self.upper_comments_tree = ActiveSupport::JSON.encode self_upper_comments_tree
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Inkwell
|
2
2
|
class FavoriteItem < ActiveRecord::Base
|
3
|
-
attr_accessible :item_id, :
|
4
|
-
belongs_to ::Inkwell::Engine::config.user_table.to_s.singularize
|
3
|
+
attr_accessible :item_id, :owner_id, :item_type, :created_at, :updated_at, :owner_type
|
5
4
|
end
|
6
5
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Inkwell
|
2
2
|
class TimelineItem < ActiveRecord::Base
|
3
|
-
attr_accessible :item_id, :
|
4
|
-
belongs_to ::Inkwell::Engine::config.user_table.to_s.singularize
|
3
|
+
attr_accessible :item_id, :owner_id, :from_source, :has_many_sources, :item_type, :created_at, :updated_at, :owner_type
|
5
4
|
end
|
6
5
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class ChangeIsCommentToItemType < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_column :inkwell_blog_items, :item_type, :string
|
4
|
+
::Inkwell::BlogItem.where(:is_comment => true).update_all(:item_type => 'c')
|
5
|
+
::Inkwell::BlogItem.where(:is_comment => false).update_all(:item_type => 'p')
|
6
|
+
remove_column :inkwell_blog_items, :is_comment
|
7
|
+
|
8
|
+
add_column :inkwell_favorite_items, :item_type, :string
|
9
|
+
::Inkwell::FavoriteItem.where(:is_comment => true).update_all(:item_type => 'c')
|
10
|
+
::Inkwell::FavoriteItem.where(:is_comment => false).update_all(:item_type => 'p')
|
11
|
+
remove_column :inkwell_favorite_items, :is_comment
|
12
|
+
|
13
|
+
add_column :inkwell_timeline_items, :item_type, :string
|
14
|
+
::Inkwell::TimelineItem.where(:is_comment => true).update_all(:item_type => 'c')
|
15
|
+
::Inkwell::TimelineItem.where(:is_comment => false).update_all(:item_type => 'p')
|
16
|
+
remove_column :inkwell_timeline_items, :is_comment
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class AddOwnerTypeToLines < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_column :inkwell_blog_items, :owner_type, :string
|
4
|
+
::Inkwell::BlogItem.where(:is_owner_user => true).update_all(:owner_type => 'u')
|
5
|
+
::Inkwell::BlogItem.where(:is_owner_user => false).update_all(:owner_type => 'c')
|
6
|
+
remove_column :inkwell_blog_items, :is_owner_user
|
7
|
+
|
8
|
+
add_column :inkwell_favorite_items, :owner_type, :string
|
9
|
+
::Inkwell::FavoriteItem.update_all(:owner_type => 'u')
|
10
|
+
rename_column :inkwell_favorite_items, "#{::Inkwell::Engine::config.user_table.to_s.singularize}_id", :owner_id
|
11
|
+
|
12
|
+
add_column :inkwell_timeline_items, :owner_type, :string
|
13
|
+
::Inkwell::TimelineItem.update_all(:owner_type => 'u')
|
14
|
+
rename_column :inkwell_timeline_items, "#{::Inkwell::Engine::config.user_table.to_s.singularize}_id", :owner_id
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class RefactorCommentTable < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
rename_column :inkwell_comments, "#{::Inkwell::Engine::config.post_table.to_s.singularize}_id", :topmost_obj_id
|
4
|
+
add_column :inkwell_comments, :topmost_obj_type, :string
|
5
|
+
::Inkwell::Comment.update_all :topmost_obj_type => 'p'
|
6
|
+
end
|
7
|
+
end
|
@@ -16,11 +16,13 @@ module Inkwell
|
|
16
16
|
before_destroy :destroy_community_processing
|
17
17
|
|
18
18
|
include ::Inkwell::ActsAsInkwellCommunity::InstanceMethods
|
19
|
-
include ::Inkwell::Common
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
23
22
|
module InstanceMethods
|
23
|
+
require_relative '../common/base.rb'
|
24
|
+
include ::Inkwell::Constants
|
25
|
+
include ::Inkwell::Common
|
24
26
|
|
25
27
|
def add_user(options = {})
|
26
28
|
options.symbolize_keys!
|
@@ -39,10 +41,10 @@ module Inkwell
|
|
39
41
|
|
40
42
|
post_class = Object.const_get ::Inkwell::Engine::config.post_table.to_s.singularize.capitalize
|
41
43
|
user_id_attr = "#{::Inkwell::Engine::config.user_table.to_s.singularize}_id"
|
42
|
-
::Inkwell::BlogItem.where(:owner_id => self.id, :
|
44
|
+
::Inkwell::BlogItem.where(:owner_id => self.id, :owner_type => OwnerTypes::COMMUNITY).order("created_at DESC").limit(10).each do |blog_item|
|
43
45
|
next if post_class.find(blog_item.item_id).send(user_id_attr) == user.id
|
44
46
|
|
45
|
-
item = ::Inkwell::TimelineItem.
|
47
|
+
item = ::Inkwell::TimelineItem.where(:item_id => blog_item.item_id, :item_type => blog_item.item_type, :owner_id => user.id, :owner_type => OwnerTypes::USER).first
|
46
48
|
if item
|
47
49
|
item.has_many_sources = true unless item.has_many_sources
|
48
50
|
sources = ActiveSupport::JSON.decode item.from_source
|
@@ -51,7 +53,7 @@ module Inkwell
|
|
51
53
|
item.save
|
52
54
|
else
|
53
55
|
sources = [Hash['community_id' => self.id]]
|
54
|
-
::Inkwell::TimelineItem.create :item_id => blog_item.item_id, :
|
56
|
+
::Inkwell::TimelineItem.create :item_id => blog_item.item_id, :item_type => blog_item.item_type, :owner_id => user.id, :owner_type => OwnerTypes::USER,
|
55
57
|
:from_source => ActiveSupport::JSON.encode(sources), :created_at => blog_item.created_at
|
56
58
|
end
|
57
59
|
end
|
@@ -78,9 +80,7 @@ module Inkwell
|
|
78
80
|
user.communities_ids = ActiveSupport::JSON.encode communities_ids
|
79
81
|
user.save
|
80
82
|
|
81
|
-
|
82
|
-
|
83
|
-
timeline_items = ::Inkwell::TimelineItem.where "from_source like '%{\"community_id\":#{self.id}%' and #{user_id_attr} = #{user.id}"
|
83
|
+
timeline_items = ::Inkwell::TimelineItem.where(:owner_id => user.id, :owner_type => OwnerTypes::USER).where "from_source like '%{\"community_id\":#{self.id}%'"
|
84
84
|
timeline_items.delete_all :has_many_sources => false
|
85
85
|
timeline_items.each do |item|
|
86
86
|
from_source = ActiveSupport::JSON.decode item.from_source
|
@@ -166,15 +166,15 @@ module Inkwell
|
|
166
166
|
raise "user tried to add post of another user" unless post.send(user_id_attr) == user.id
|
167
167
|
raise "post is already added to this community" if post.communities_row.include? self.id
|
168
168
|
|
169
|
-
::Inkwell::BlogItem.create :owner_id => self.id, :
|
169
|
+
::Inkwell::BlogItem.create :owner_id => self.id, :owner_type => OwnerTypes::COMMUNITY, :item_id => post.id, :item_type => ItemTypes::POST
|
170
170
|
communities_ids = ActiveSupport::JSON.decode post.communities_ids
|
171
171
|
communities_ids << self.id
|
172
172
|
post.communities_ids = ActiveSupport::JSON.encode communities_ids
|
173
173
|
post.save
|
174
174
|
|
175
175
|
users_with_existing_items = [user.id]
|
176
|
-
::Inkwell::TimelineItem.where(:item_id => post.id, :
|
177
|
-
users_with_existing_items << item.
|
176
|
+
::Inkwell::TimelineItem.where(:item_id => post.id, :item_type => ItemTypes::POST).each do |item|
|
177
|
+
users_with_existing_items << item.owner_id
|
178
178
|
item.has_many_sources = true
|
179
179
|
from_source = ActiveSupport::JSON.decode item.from_source
|
180
180
|
from_source << Hash['community_id' => self.id]
|
@@ -184,7 +184,7 @@ module Inkwell
|
|
184
184
|
|
185
185
|
self.users_row.each do |user_id|
|
186
186
|
next if users_with_existing_items.include? user_id
|
187
|
-
::Inkwell::TimelineItem.create :item_id => post.id,
|
187
|
+
::Inkwell::TimelineItem.create :item_id => post.id, :owner_id => user_id, :owner_type => OwnerTypes::USER, :item_type => ItemTypes::POST,
|
188
188
|
:from_source => ActiveSupport::JSON.encode([Hash['community_id' => self.id]])
|
189
189
|
end
|
190
190
|
end
|
@@ -208,13 +208,13 @@ module Inkwell
|
|
208
208
|
end
|
209
209
|
raise "post isn't in community" unless post.communities_row.include? self.id
|
210
210
|
|
211
|
-
::Inkwell::BlogItem.delete_all :owner_id => self.id, :
|
211
|
+
::Inkwell::BlogItem.delete_all :owner_id => self.id, :owner_type => OwnerTypes::COMMUNITY, :item_id => post.id, :item_type => ItemTypes::POST
|
212
212
|
communities_ids = ActiveSupport::JSON.decode post.communities_ids
|
213
213
|
communities_ids.delete self.id
|
214
214
|
post.communities_ids = ActiveSupport::JSON.encode communities_ids
|
215
215
|
post.save
|
216
216
|
|
217
|
-
items = ::Inkwell::TimelineItem.where(:item_id => post.id, :
|
217
|
+
items = ::Inkwell::TimelineItem.where(:item_id => post.id, :item_type => ItemTypes::POST).where("from_source like '%{\"community_id\":#{self.id}%'")
|
218
218
|
items.where(:has_many_sources => false).delete_all
|
219
219
|
items.where(:has_many_sources => true).each do |item|
|
220
220
|
from_source = ActiveSupport::JSON.decode item.from_source
|
@@ -232,9 +232,9 @@ module Inkwell
|
|
232
232
|
for_user = options[:for_user]
|
233
233
|
|
234
234
|
if last_shown_obj_id
|
235
|
-
blog_items = ::Inkwell::BlogItem.where(:owner_id => self.id, :
|
235
|
+
blog_items = ::Inkwell::BlogItem.where(:owner_id => self.id, :owner_type => OwnerTypes::COMMUNITY).where("created_at < ?", Inkwell::BlogItem.find(last_shown_obj_id).created_at).order("created_at DESC").limit(limit)
|
236
236
|
else
|
237
|
-
blog_items = ::Inkwell::BlogItem.where(:owner_id => self.id, :
|
237
|
+
blog_items = ::Inkwell::BlogItem.where(:owner_id => self.id, :owner_type => OwnerTypes::COMMUNITY).order("created_at DESC").limit(limit)
|
238
238
|
end
|
239
239
|
|
240
240
|
post_class = Object.const_get ::Inkwell::Engine::config.post_table.to_s.singularize.capitalize
|
@@ -306,7 +306,7 @@ module Inkwell
|
|
306
306
|
item.save
|
307
307
|
end
|
308
308
|
|
309
|
-
::Inkwell::BlogItem.delete_all :owner_id => self.id, :
|
309
|
+
::Inkwell::BlogItem.delete_all :owner_id => self.id, :owner_type => OwnerTypes::COMMUNITY
|
310
310
|
|
311
311
|
end
|
312
312
|
end
|
@@ -19,13 +19,15 @@ module Inkwell
|
|
19
19
|
after_create :processing_a_post
|
20
20
|
before_destroy :destroy_post_processing
|
21
21
|
|
22
|
-
has_many :comments, :class_name => 'Inkwell::Comment'
|
23
|
-
|
24
22
|
include ::Inkwell::ActsAsInkwellPost::InstanceMethods
|
23
|
+
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
28
27
|
module InstanceMethods
|
28
|
+
require_relative '../common/base.rb'
|
29
|
+
include ::Inkwell::Constants
|
30
|
+
|
29
31
|
def commentline(options = {})
|
30
32
|
options.symbolize_keys!
|
31
33
|
last_shown_comment_id = options[:last_shown_comment_id]
|
@@ -33,9 +35,9 @@ module Inkwell
|
|
33
35
|
for_user = options[:for_user]
|
34
36
|
|
35
37
|
if last_shown_comment_id
|
36
|
-
comments = self.
|
38
|
+
comments = ::Inkwell::Comment.where(:topmost_obj_id => self.id, :topmost_obj_type => ItemTypes::POST).where("created_at < ?", Inkwell::Comment.find(last_shown_comment_id).created_at).order("created_at DESC").limit(limit)
|
37
39
|
else
|
38
|
-
comments = self.
|
40
|
+
comments = ::Inkwell::Comment.where(:topmost_obj_id => self.id, :topmost_obj_type => ItemTypes::POST).order("created_at DESC").limit(limit)
|
39
41
|
end
|
40
42
|
|
41
43
|
if for_user
|
@@ -75,24 +77,23 @@ module Inkwell
|
|
75
77
|
user_class = Object.const_get ::Inkwell::Engine::config.user_table.to_s.singularize.capitalize
|
76
78
|
user_id_attr = "#{::Inkwell::Engine::config.user_table.to_s.singularize}_id"
|
77
79
|
user = user_class.find self.send(user_id_attr)
|
78
|
-
::Inkwell::BlogItem.create :item_id => self.id, :is_reblog => false, :owner_id => self.send(user_id_attr), :
|
79
|
-
|
80
|
+
::Inkwell::BlogItem.create :item_id => self.id, :is_reblog => false, :owner_id => self.send(user_id_attr), :owner_type => OwnerTypes::USER, :item_type => ItemTypes::POST
|
80
81
|
user.followers_row.each do |user_id|
|
81
82
|
encode_sources = [ Hash['user_id' => user.id, 'type' => 'following'] ]
|
82
|
-
::Inkwell::TimelineItem.create :item_id => self.id,
|
83
|
+
::Inkwell::TimelineItem.create :item_id => self.id, :owner_id => user_id, :owner_type => OwnerTypes::USER, :item_type => ItemTypes::POST,
|
83
84
|
:from_source => ActiveSupport::JSON.encode(encode_sources)
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
87
88
|
def destroy_post_processing
|
88
|
-
::Inkwell::TimelineItem.delete_all :item_id => self.id, :
|
89
|
-
::Inkwell::FavoriteItem.delete_all :item_id => self.id, :
|
90
|
-
::Inkwell::BlogItem.delete_all :item_id => self.id, :
|
91
|
-
comments = self.
|
89
|
+
::Inkwell::TimelineItem.delete_all :item_id => self.id, :item_type => ItemTypes::POST
|
90
|
+
::Inkwell::FavoriteItem.delete_all :item_id => self.id, :item_type => ItemTypes::POST
|
91
|
+
::Inkwell::BlogItem.delete_all :item_id => self.id, :item_type => ItemTypes::POST
|
92
|
+
comments = ::Inkwell::Comment.where(:topmost_obj_id => self.id, :topmost_obj_type => ItemTypes::POST)
|
92
93
|
comments.each do |comment|
|
93
|
-
::Inkwell::TimelineItem.delete_all :item_id => comment.id, :
|
94
|
-
::Inkwell::FavoriteItem.delete_all :item_id => comment.id, :
|
95
|
-
::Inkwell::BlogItem.delete_all :item_id => comment.id, :
|
94
|
+
::Inkwell::TimelineItem.delete_all :item_id => comment.id, :item_type => ItemTypes::COMMENT
|
95
|
+
::Inkwell::FavoriteItem.delete_all :item_id => comment.id, :item_type => ItemTypes::COMMENT
|
96
|
+
::Inkwell::BlogItem.delete_all :item_id => comment.id, :item_type => ItemTypes::COMMENT
|
96
97
|
::Inkwell::Comment.delete comment
|
97
98
|
end
|
98
99
|
end
|
@@ -11,14 +11,15 @@ module Inkwell
|
|
11
11
|
module Config
|
12
12
|
def acts_as_inkwell_user
|
13
13
|
has_many :comments, :class_name => 'Inkwell::Comment'
|
14
|
-
has_many :favorite_items, :class_name => 'Inkwell::FavoriteItem'
|
15
|
-
has_many :timeline_items, :class_name => 'Inkwell::TimelineItem'
|
16
14
|
include ::Inkwell::ActsAsInkwellUser::InstanceMethods
|
17
|
-
include ::Inkwell::Common
|
18
15
|
end
|
19
16
|
end
|
20
17
|
|
21
18
|
module InstanceMethods
|
19
|
+
require_relative '../common/base.rb'
|
20
|
+
include ::Inkwell::Constants
|
21
|
+
include ::Inkwell::Common
|
22
|
+
|
22
23
|
def blogline(options = {})
|
23
24
|
options.symbolize_keys!
|
24
25
|
last_shown_obj_id = options[:last_shown_obj_id]
|
@@ -26,15 +27,15 @@ module Inkwell
|
|
26
27
|
for_user = options[:for_user]
|
27
28
|
|
28
29
|
if last_shown_obj_id
|
29
|
-
blog_items = ::Inkwell::BlogItem.where(:owner_id => self.id, :
|
30
|
+
blog_items = ::Inkwell::BlogItem.where(:owner_id => self.id, :owner_type => OwnerTypes::USER).where("created_at < ?", Inkwell::BlogItem.find(last_shown_obj_id).created_at).order("created_at DESC").limit(limit)
|
30
31
|
else
|
31
|
-
blog_items = ::Inkwell::BlogItem.where(:owner_id => self.id, :
|
32
|
+
blog_items = ::Inkwell::BlogItem.where(:owner_id => self.id, :owner_type => OwnerTypes::USER).order("created_at DESC").limit(limit)
|
32
33
|
end
|
33
34
|
|
34
35
|
post_class = Object.const_get ::Inkwell::Engine::config.post_table.to_s.singularize.capitalize
|
35
36
|
result = []
|
36
37
|
blog_items.each do |item|
|
37
|
-
if item.
|
38
|
+
if item.item_type == ItemTypes::COMMENT
|
38
39
|
blog_obj = ::Inkwell::Comment.find item.item_id
|
39
40
|
else
|
40
41
|
blog_obj = post_class.find item.item_id
|
@@ -53,6 +54,17 @@ module Inkwell
|
|
53
54
|
result
|
54
55
|
end
|
55
56
|
|
57
|
+
def create_comment(options={})
|
58
|
+
options.symbolize_keys!
|
59
|
+
raise "for_object should be passed" unless options[:for_object]
|
60
|
+
raise "comment body should be passed" unless options[:body]
|
61
|
+
for_object = options[:for_object]
|
62
|
+
options[:topmost_obj_id] = for_object.id
|
63
|
+
options[:topmost_obj_type] = get_item_type for_object
|
64
|
+
options.delete :for_object
|
65
|
+
self.comments.create options
|
66
|
+
end
|
67
|
+
|
56
68
|
def communities_row
|
57
69
|
ActiveSupport::JSON.decode self.communities_ids
|
58
70
|
end
|
@@ -60,7 +72,7 @@ module Inkwell
|
|
60
72
|
def favorite(obj)
|
61
73
|
return if self.favorite? obj
|
62
74
|
|
63
|
-
FavoriteItem.create :item_id => obj.id, :
|
75
|
+
FavoriteItem.create :item_id => obj.id, :owner_id => self.id, :owner_type => OwnerTypes::USER, :item_type => get_item_type(obj)
|
64
76
|
|
65
77
|
users_ids_who_favorite_it = ActiveSupport::JSON.decode obj.users_ids_who_favorite_it
|
66
78
|
users_ids_who_favorite_it << self.id
|
@@ -69,16 +81,13 @@ module Inkwell
|
|
69
81
|
end
|
70
82
|
|
71
83
|
def favorite?(obj)
|
72
|
-
|
73
|
-
(FavoriteItem.send("find_by_item_id_and_is_comment_and_#{user_id_attr}", obj.id, is_comment(obj), self.id)) ? true : false
|
84
|
+
FavoriteItem.where(:item_id => obj.id, :item_type => get_item_type(obj), :owner_id => self.id, :owner_type => OwnerTypes::USER).first ? true : false
|
74
85
|
end
|
75
86
|
|
76
87
|
def unfavorite(obj)
|
77
88
|
return unless self.favorite? obj
|
78
89
|
|
79
|
-
|
80
|
-
record = FavoriteItem.send "find_by_item_id_and_is_comment_and_#{user_id_attr}", obj.id, is_comment(obj), self.id
|
81
|
-
record.destroy
|
90
|
+
::Inkwell::FavoriteItem.where(:item_id => obj.id, :item_type => get_item_type(obj), :owner_id => self.id, :owner_type => OwnerTypes::USER).destroy_all
|
82
91
|
|
83
92
|
users_ids_who_favorite_it = ActiveSupport::JSON.decode obj.users_ids_who_favorite_it
|
84
93
|
users_ids_who_favorite_it.delete self.id
|
@@ -93,15 +102,15 @@ module Inkwell
|
|
93
102
|
for_user = options[:for_user]
|
94
103
|
|
95
104
|
if last_shown_obj_id
|
96
|
-
favorites = self.
|
105
|
+
favorites = ::Inkwell::FavoriteItem.where(:owner_id => self.id, :owner_type => OwnerTypes::USER).where("created_at < ?", Inkwell::FavoriteItem.find(last_shown_obj_id).created_at).order("created_at DESC").limit(limit)
|
97
106
|
else
|
98
|
-
favorites = self.
|
107
|
+
favorites = ::Inkwell::FavoriteItem.where(:owner_id => self.id, :owner_type => OwnerTypes::USER).order("created_at DESC").limit(limit)
|
99
108
|
end
|
100
109
|
|
101
110
|
post_class = Object.const_get ::Inkwell::Engine::config.post_table.to_s.singularize.capitalize
|
102
111
|
result = []
|
103
112
|
favorites.each do |item|
|
104
|
-
if item.
|
113
|
+
if item.item_type == ItemTypes::COMMENT
|
105
114
|
favorited_obj = ::Inkwell::Comment.find item.item_id
|
106
115
|
else
|
107
116
|
favorited_obj = post_class.find item.item_id
|
@@ -135,13 +144,13 @@ module Inkwell
|
|
135
144
|
|
136
145
|
post_class = Object.const_get ::Inkwell::Engine::config.post_table.to_s.singularize.capitalize
|
137
146
|
user_id_attr = "#{::Inkwell::Engine::config.user_table.to_s.singularize}_id"
|
138
|
-
::Inkwell::BlogItem.where(:owner_id => user.id, :
|
147
|
+
::Inkwell::BlogItem.where(:owner_id => user.id, :owner_type => OwnerTypes::USER).order("created_at DESC").limit(10).each do |blog_item|
|
139
148
|
if blog_item.is_reblog
|
140
|
-
item_class = blog_item.
|
149
|
+
item_class = blog_item.item_type == ItemTypes::COMMENT ? ::Inkwell::Comment : post_class
|
141
150
|
next if item_class.find(blog_item.item_id).send(user_id_attr) == self.id
|
142
151
|
end
|
143
152
|
|
144
|
-
item =
|
153
|
+
item = TimelineItem.where(:item_id => blog_item.item_id, :owner_id => self.id, :owner_type => OwnerTypes::USER, :item_type => blog_item.item_type).first
|
145
154
|
if item
|
146
155
|
item.has_many_sources = true unless item.has_many_sources
|
147
156
|
sources = ActiveSupport::JSON.decode item.from_source
|
@@ -159,7 +168,7 @@ module Inkwell
|
|
159
168
|
else
|
160
169
|
sources << Hash['user_id' => user.id, 'type' => 'following']
|
161
170
|
end
|
162
|
-
::Inkwell::TimelineItem.create :item_id => blog_item.item_id, :
|
171
|
+
::Inkwell::TimelineItem.create :item_id => blog_item.item_id, :item_type => blog_item.item_type, :owner_id => self.id, :owner_type => OwnerTypes::USER,
|
163
172
|
:from_source => ActiveSupport::JSON.encode(sources), :created_at => blog_item.created_at
|
164
173
|
end
|
165
174
|
end
|
@@ -179,9 +188,7 @@ module Inkwell
|
|
179
188
|
self.followings_ids = ActiveSupport::JSON.encode followings
|
180
189
|
self.save
|
181
190
|
|
182
|
-
|
183
|
-
|
184
|
-
timeline_items = ::Inkwell::TimelineItem.where "from_source like '%{\"user_id\":#{user.id}%' and #{user_id_attr} = #{self.id}"
|
191
|
+
timeline_items = ::Inkwell::TimelineItem.where(:owner_id => self.id, :owner_type => OwnerTypes::USER).where "from_source like '%{\"user_id\":#{user.id}%'"
|
185
192
|
timeline_items.delete_all :has_many_sources => false
|
186
193
|
timeline_items.each do |item|
|
187
194
|
from_source = ActiveSupport::JSON.decode item.from_source
|
@@ -209,10 +216,10 @@ module Inkwell
|
|
209
216
|
return if self.reblog? obj
|
210
217
|
raise "User tries to reblog his post." if self.id == obj.user_id
|
211
218
|
|
212
|
-
|
219
|
+
item_type = get_item_type(obj)
|
213
220
|
|
214
221
|
user_id_attr = "#{::Inkwell::Engine::config.user_table.to_s.singularize}_id"
|
215
|
-
BlogItem.create :item_id => obj.id, :is_reblog => true, :owner_id => self.id, :
|
222
|
+
BlogItem.create :item_id => obj.id, :is_reblog => true, :owner_id => self.id, :owner_type => OwnerTypes::USER, :item_type => item_type
|
216
223
|
|
217
224
|
users_ids_who_reblog_it = ActiveSupport::JSON.decode obj.users_ids_who_reblog_it
|
218
225
|
users_ids_who_reblog_it << self.id
|
@@ -221,7 +228,7 @@ module Inkwell
|
|
221
228
|
|
222
229
|
self.followers_row.each do |user_id|
|
223
230
|
next if obj.send(user_id_attr) == user_id
|
224
|
-
item = TimelineItem.
|
231
|
+
item = TimelineItem.where(:item_id => obj.id, :owner_id => user_id, :owner_type => OwnerTypes::USER, :item_type => item_type).first
|
225
232
|
if item
|
226
233
|
item.has_many_sources = true unless item.has_many_sources
|
227
234
|
sources = ActiveSupport::JSON.decode item.from_source
|
@@ -230,30 +237,30 @@ module Inkwell
|
|
230
237
|
item.save
|
231
238
|
else
|
232
239
|
encode_sources = ActiveSupport::JSON.encode [Hash['user_id' => self.id, 'type' => 'reblog']]
|
233
|
-
TimelineItem.create :item_id => obj.id, :created_at => obj.created_at,
|
240
|
+
TimelineItem.create :item_id => obj.id, :created_at => obj.created_at, :owner_id => user_id, :owner_type => OwnerTypes::USER, :from_source => encode_sources, :item_type => item_type
|
234
241
|
end
|
235
242
|
end
|
236
243
|
end
|
237
244
|
|
238
245
|
def reblog?(obj)
|
239
|
-
BlogItem.exists? :item_id => obj.id, :owner_id => self.id, :
|
246
|
+
BlogItem.exists? :item_id => obj.id, :owner_id => self.id, :owner_type => OwnerTypes::USER, :is_reblog => true, :item_type => get_item_type(obj)
|
240
247
|
end
|
241
248
|
|
242
249
|
def unreblog(obj)
|
243
250
|
return unless self.reblog? obj
|
244
251
|
raise "User tries to unreblog his post." if self.id == obj.user_id
|
245
252
|
|
246
|
-
|
253
|
+
item_type = get_item_type(obj)
|
247
254
|
|
248
255
|
users_ids_who_reblog_it = ActiveSupport::JSON.decode obj.users_ids_who_reblog_it
|
249
256
|
users_ids_who_reblog_it.delete self.id
|
250
257
|
obj.users_ids_who_reblog_it = ActiveSupport::JSON.encode users_ids_who_reblog_it
|
251
258
|
obj.save
|
252
259
|
|
253
|
-
::Inkwell::BlogItem.delete_all :owner_id => self.id, :
|
260
|
+
::Inkwell::BlogItem.delete_all :owner_id => self.id, :owner_type => OwnerTypes::USER, :item_id => obj.id, :is_reblog => true, :item_type => item_type
|
254
261
|
|
255
|
-
TimelineItem.delete_all :
|
256
|
-
TimelineItem.where(:
|
262
|
+
TimelineItem.delete_all :owner_id => self.followers_row, :owner_type => OwnerTypes::USER, :has_many_sources => false, :item_id => obj.id, :item_type => item_type
|
263
|
+
TimelineItem.where(:owner_id => self.followers_row, :owner_type => OwnerTypes::USER, :item_id => obj.id, :item_type => item_type).each do |item|
|
257
264
|
sources = ActiveSupport::JSON.decode item.from_source
|
258
265
|
sources.delete Hash['user_id' => self.id, 'type' => 'reblog']
|
259
266
|
item.has_many_sources = false if sources.size < 2
|
@@ -269,15 +276,15 @@ module Inkwell
|
|
269
276
|
for_user = options[:for_user]
|
270
277
|
|
271
278
|
if last_shown_obj_id
|
272
|
-
timeline_items = self.
|
279
|
+
timeline_items = ::Inkwell::TimelineItem.where(:owner_id => self.id, :owner_type => OwnerTypes::USER).where("created_at < ?", Inkwell::TimelineItem.find(last_shown_obj_id).created_at).order("created_at DESC").limit(limit)
|
273
280
|
else
|
274
|
-
timeline_items = self.
|
281
|
+
timeline_items = ::Inkwell::TimelineItem.where(:owner_id => self.id, :owner_type => OwnerTypes::USER).order("created_at DESC").limit(limit)
|
275
282
|
end
|
276
283
|
|
277
284
|
post_class = Object.const_get ::Inkwell::Engine::config.post_table.to_s.singularize.capitalize
|
278
285
|
result = []
|
279
286
|
timeline_items.each do |item|
|
280
|
-
if item.
|
287
|
+
if item.item_type == ItemTypes::COMMENT
|
281
288
|
timeline_obj = ::Inkwell::Comment.find item.item_id
|
282
289
|
else
|
283
290
|
timeline_obj = post_class.find item.item_id
|