New Exporter::NonContactAuthors class
This class is capable of quering a list of people from authors of given posts that are non-contacts of a given user.
This commit is contained in:
parent
c985af1f85
commit
c63493b0d1
2 changed files with 61 additions and 0 deletions
36
lib/diaspora/exporter/non_contact_authors.rb
Normal file
36
lib/diaspora/exporter/non_contact_authors.rb
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
module Diaspora
|
||||||
|
class Exporter
|
||||||
|
# This class is capable of quering a list of people from authors of given posts that are non-contacts of a given
|
||||||
|
# user.
|
||||||
|
class NonContactAuthors
|
||||||
|
# @param posts [Post::ActiveRecord_Relation] posts that we fetch authors from to make authors list
|
||||||
|
# @param user [User] a user we fetch a contact list from
|
||||||
|
def initialize(posts, user)
|
||||||
|
@posts = posts
|
||||||
|
@user = user
|
||||||
|
end
|
||||||
|
|
||||||
|
# Create a request of non-contact authors of the posts for the user
|
||||||
|
# @return [Post::ActiveRecord_Relation]
|
||||||
|
def query
|
||||||
|
Person.where(id: non_contact_authors_ids)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def non_contact_authors_ids
|
||||||
|
posts_authors_ids - contacts_ids
|
||||||
|
end
|
||||||
|
|
||||||
|
def posts_authors_ids
|
||||||
|
posts.pluck(:author_id).uniq
|
||||||
|
end
|
||||||
|
|
||||||
|
def contacts_ids
|
||||||
|
user.contacts.pluck(:person_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
attr_reader :posts, :user
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
25
spec/lib/diaspora/exporter/non_contact_authors_spec.rb
Normal file
25
spec/lib/diaspora/exporter/non_contact_authors_spec.rb
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
describe Diaspora::Exporter::NonContactAuthors do
|
||||||
|
describe "#query" do
|
||||||
|
let(:user) { FactoryGirl.create(:user_with_aspect) }
|
||||||
|
let(:post) { FactoryGirl.create(:status_message) }
|
||||||
|
let(:instance) {
|
||||||
|
Diaspora::Exporter::NonContactAuthors.new(Post.where(id: post.id), user)
|
||||||
|
}
|
||||||
|
|
||||||
|
context "without contact relationship" do
|
||||||
|
it "includes post author to the result set" do
|
||||||
|
expect(instance.query).to eq([post.author])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with contact relationship" do
|
||||||
|
before do
|
||||||
|
user.share_with(post.author, user.aspects.first)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't include post author to the result set" do
|
||||||
|
expect(instance.query).to be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Reference in a new issue