inkwell 1.0.5 → 1.1.1
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/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
|