add uniqueness check for feeds; does not send notifications to author; use autosave
This commit is contained in:
Родитель
47c2e04a03
Коммит
71fe495b5e
|
@ -10,8 +10,8 @@ class Comment
|
|||
field :course_id, type: String
|
||||
field :endorsed, type: Boolean, default: false
|
||||
|
||||
belongs_to :author, class_name: "User", index: true
|
||||
belongs_to :comment_thread, index: true
|
||||
belongs_to :author, class_name: "User", index: true, autosave: true
|
||||
belongs_to :comment_thread, index: true, autosave: true
|
||||
|
||||
attr_accessible :body, :course_id, :endorsed
|
||||
|
||||
|
@ -63,8 +63,7 @@ class Comment
|
|||
)
|
||||
feed.actor = author
|
||||
feed.target = self
|
||||
feed.subscribers << get_comment_thread.watchers
|
||||
feed.subscribers << author.followers
|
||||
feed.subscribers << (get_comment_thread.watchers + author.followers).uniq_by(&:id).delete(author) # doesn't send notification to author
|
||||
feed.save!
|
||||
end
|
||||
|
||||
|
|
|
@ -9,10 +9,10 @@ class CommentThread
|
|||
field :body, type: String
|
||||
field :course_id, type: String, index: true
|
||||
|
||||
belongs_to :author, class_name: "User", inverse_of: :comment_threads, index: true
|
||||
belongs_to :commentable, index: true
|
||||
belongs_to :author, class_name: "User", inverse_of: :comment_threads, index: true, autosave: true
|
||||
belongs_to :commentable, index: true, autosave: true
|
||||
has_many :comments, dependent: :destroy # Use destroy to envoke callback on the top-level comments TODO async
|
||||
has_and_belongs_to_many :watchers, class_name: "User", inverse_of: :watched_comment_threads
|
||||
has_and_belongs_to_many :watchers, class_name: "User", inverse_of: :watched_comment_threads, autosave: true
|
||||
|
||||
attr_accessible :title, :body, :course_id
|
||||
|
||||
|
@ -45,8 +45,7 @@ class CommentThread
|
|||
)
|
||||
feed.actor = author
|
||||
feed.target = self
|
||||
feed.subscribers << commentable.watchers
|
||||
feed.subscribers << author.followers
|
||||
feed.subscribers << (commentable.watchers + author.followers).uniq_by(&:id).delete(author) # doesn't send notification to author
|
||||
feed.save!
|
||||
end
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ class Commentable
|
|||
field :commentable_id, type: String
|
||||
|
||||
has_many :comment_threads, dependent: :destroy
|
||||
has_and_belongs_to_many :watchers, class_name: "User", inverse_of: :watched_commentables
|
||||
has_and_belongs_to_many :watchers, class_name: "User", inverse_of: :watched_commentables, autosave: true
|
||||
|
||||
attr_accessible :commentable_type, :commentable_id
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@ class Feed
|
|||
field :feed_type, type: String
|
||||
field :info, type: Hash
|
||||
|
||||
belongs_to :actor, class_name: "User", inverse_of: :activities, index: true
|
||||
belongs_to :target, inverse_of: :activities, polymorphic: true
|
||||
belongs_to :actor, class_name: "User", inverse_of: :activities, index: true, autosave: true
|
||||
belongs_to :target, inverse_of: :activities, polymorphic: true, autosave: true
|
||||
|
||||
attr_accessible :feed_type, :info
|
||||
|
||||
|
@ -14,7 +14,7 @@ class Feed
|
|||
validates_presence_of :actor
|
||||
validates_presence_of :target
|
||||
|
||||
has_and_belongs_to_many :subscribers, class_name: "User", inverse_of: :subscribed_feeds
|
||||
has_and_belongs_to_many :subscribers, class_name: "User", inverse_of: :subscribed_feeds, autosave: true
|
||||
|
||||
def to_hash(params={})
|
||||
as_document.slice(*%w[_id feed_type info actor target])
|
||||
|
|
|
@ -7,9 +7,9 @@ class User
|
|||
has_many :comments
|
||||
has_many :comment_threads, inverse_of: :author
|
||||
has_many :activities, class_name: "Feed", inverse_of: :actor
|
||||
has_and_belongs_to_many :subscribed_feeds, class_name: "Feed", inverse_of: :subscribers
|
||||
has_and_belongs_to_many :followers, class_name: "User", inverse_of: :followings
|
||||
has_and_belongs_to_many :followings, class_name: "User", inverse_of: :followers
|
||||
has_and_belongs_to_many :subscribed_feeds, class_name: "Feed", inverse_of: :subscribers, autosave: true
|
||||
has_and_belongs_to_many :followers, class_name: "User", inverse_of: :followings, autosave: true
|
||||
has_and_belongs_to_many :followings, class_name: "User", inverse_of: :followers, autosave: true
|
||||
|
||||
def to_hash(params={})
|
||||
as_document.slice(*%w[_id])
|
||||
|
@ -18,13 +18,11 @@ class User
|
|||
def follow(user)
|
||||
if id != user.id and not following.include? user
|
||||
following << user
|
||||
save!
|
||||
end
|
||||
end
|
||||
|
||||
def unfollow(user)
|
||||
following.delete(user)
|
||||
save!
|
||||
end
|
||||
|
||||
def self.watching(class_plural_sym)
|
||||
|
@ -39,13 +37,11 @@ class User
|
|||
def watch_#{class_single}(watching_object)
|
||||
if not watched_#{class_plural}.include? watching_object
|
||||
watched_#{class_plural} << watching_object
|
||||
save!
|
||||
end
|
||||
end
|
||||
|
||||
def unwatch_#{class_single}(watching_object)
|
||||
watched_#{class_plural}.delete(watching_object)
|
||||
save!
|
||||
end
|
||||
END
|
||||
end
|
||||
|
|
|
@ -71,6 +71,43 @@ def init_without_feeds
|
|||
end
|
||||
end
|
||||
|
||||
def init_with_feeds
|
||||
Comment.delete_all
|
||||
CommentThread.delete_all
|
||||
Commentable.delete_all
|
||||
User.delete_all
|
||||
Feed.delete_all
|
||||
|
||||
user1 = User.create!(id: "1")
|
||||
user2 = User.create!(id: "2")
|
||||
|
||||
user1.followers << user2
|
||||
|
||||
commentable = Commentable.new(commentable_type: "questions", commentable_id: "1")
|
||||
commentable.watchers << [user1, user2]
|
||||
commentable.save!
|
||||
|
||||
comment_thread = commentable.comment_threads.new(title: "I can't solve this problem", body: "can anyone help me?", course_id: "1")
|
||||
comment_thread.author = user1
|
||||
comment_thread.watchers << user1
|
||||
comment_thread.save!
|
||||
|
||||
comment = comment_thread.comments.new(body: "this problem is so easy", course_id: "1")
|
||||
comment.author = user1
|
||||
comment.save!
|
||||
comment1 = comment.children.new(body: "not for me!", course_id: "1")
|
||||
comment1.author = user1
|
||||
comment1.save!
|
||||
comment2 = comment1.children.new(body: "not for me neither!", course_id: "1")
|
||||
comment2.author = user1
|
||||
comment2.save!
|
||||
|
||||
comment_thread = commentable.comment_threads.new(title: "This problem is wrong", body: "it is unsolvable", course_id: "2")
|
||||
comment_thread.author = user
|
||||
comment_thread.save!
|
||||
|
||||
end
|
||||
|
||||
describe "app" do
|
||||
describe "commentables" do
|
||||
before(:each) { init_without_feeds }
|
||||
|
@ -295,9 +332,9 @@ describe "app" do
|
|||
end
|
||||
end
|
||||
describe "feeds" do
|
||||
#before(:each) { init_with_feeds }
|
||||
describe "GET /api/v1/users/:user_id/feeds" do
|
||||
it "get all subscribed feeds for the user" do
|
||||
|
||||
end
|
||||
end
|
||||
describe "POST /api/v1/users/:user_id/follow" do
|
||||
|
|
Загрузка…
Ссылка в новой задаче