create new Contact entity
* replaces Request entity (better name) * with following/sharing state * should also be used as retraction-type see #32
This commit is contained in:
parent
20675b941a
commit
ef43104880
10 changed files with 168 additions and 27 deletions
|
|
@ -15,20 +15,27 @@ require "diaspora_federation/entities/relayable"
|
||||||
# types
|
# types
|
||||||
require "diaspora_federation/entities/profile"
|
require "diaspora_federation/entities/profile"
|
||||||
require "diaspora_federation/entities/person"
|
require "diaspora_federation/entities/person"
|
||||||
require "diaspora_federation/entities/location"
|
require "diaspora_federation/entities/contact"
|
||||||
require "diaspora_federation/entities/photo"
|
require "diaspora_federation/entities/account_deletion"
|
||||||
require "diaspora_federation/entities/poll_answer"
|
|
||||||
require "diaspora_federation/entities/poll"
|
|
||||||
require "diaspora_federation/entities/status_message"
|
|
||||||
require "diaspora_federation/entities/request"
|
|
||||||
require "diaspora_federation/entities/participation"
|
require "diaspora_federation/entities/participation"
|
||||||
require "diaspora_federation/entities/like"
|
require "diaspora_federation/entities/like"
|
||||||
require "diaspora_federation/entities/comment"
|
require "diaspora_federation/entities/comment"
|
||||||
require "diaspora_federation/entities/account_deletion"
|
require "diaspora_federation/entities/poll_answer"
|
||||||
|
require "diaspora_federation/entities/poll"
|
||||||
|
require "diaspora_federation/entities/poll_participation"
|
||||||
|
|
||||||
|
require "diaspora_federation/entities/location"
|
||||||
|
require "diaspora_federation/entities/photo"
|
||||||
|
require "diaspora_federation/entities/status_message"
|
||||||
|
require "diaspora_federation/entities/reshare"
|
||||||
|
|
||||||
require "diaspora_federation/entities/message"
|
require "diaspora_federation/entities/message"
|
||||||
require "diaspora_federation/entities/conversation"
|
require "diaspora_federation/entities/conversation"
|
||||||
require "diaspora_federation/entities/relayable_retraction"
|
|
||||||
require "diaspora_federation/entities/reshare"
|
|
||||||
require "diaspora_federation/entities/retraction"
|
require "diaspora_federation/entities/retraction"
|
||||||
|
|
||||||
|
# deprecated
|
||||||
|
require "diaspora_federation/entities/request"
|
||||||
require "diaspora_federation/entities/signed_retraction"
|
require "diaspora_federation/entities/signed_retraction"
|
||||||
require "diaspora_federation/entities/poll_participation"
|
require "diaspora_federation/entities/relayable_retraction"
|
||||||
|
|
|
||||||
29
lib/diaspora_federation/entities/contact.rb
Normal file
29
lib/diaspora_federation/entities/contact.rb
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
module DiasporaFederation
|
||||||
|
module Entities
|
||||||
|
# this entity represents a contact with another person. A user issues it
|
||||||
|
# when he starts sharing/following with another user.
|
||||||
|
#
|
||||||
|
# @see Validators::ContactValidator
|
||||||
|
class Contact < Entity
|
||||||
|
# @!attribute [r] author
|
||||||
|
# The diaspora ID of the person who shares his profile
|
||||||
|
# @see Person#author
|
||||||
|
# @return [String] sender ID
|
||||||
|
property :author
|
||||||
|
|
||||||
|
# @!attribute [r] recipient
|
||||||
|
# The diaspora ID of the person who will be shared with
|
||||||
|
# @see Validation::Rule::DiasporaId
|
||||||
|
# @return [String] recipient ID
|
||||||
|
property :recipient
|
||||||
|
|
||||||
|
# @!attribute [r] following
|
||||||
|
# @return [Boolean] if the author is following the person
|
||||||
|
property :following, default: true
|
||||||
|
|
||||||
|
# @!attribute [r] sharing
|
||||||
|
# @return [Boolean] if the author is sharing with the person
|
||||||
|
property :sharing, default: true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -4,6 +4,7 @@ module DiasporaFederation
|
||||||
# when he starts sharing with another user.
|
# when he starts sharing with another user.
|
||||||
#
|
#
|
||||||
# @see Validators::RequestValidator
|
# @see Validators::RequestValidator
|
||||||
|
# @deprecated will be replaced with {Contact}
|
||||||
class Request < Entity
|
class Request < Entity
|
||||||
# @!attribute [r] author
|
# @!attribute [r] author
|
||||||
# The diaspora ID of the person who shares his profile
|
# The diaspora ID of the person who shares his profile
|
||||||
|
|
@ -16,6 +17,19 @@ module DiasporaFederation
|
||||||
# @see Validation::Rule::DiasporaId
|
# @see Validation::Rule::DiasporaId
|
||||||
# @return [String] recipient ID
|
# @return [String] recipient ID
|
||||||
property :recipient, xml_name: :recipient_handle
|
property :recipient, xml_name: :recipient_handle
|
||||||
|
|
||||||
|
# use only {Contact} for receive
|
||||||
|
# @return [Contact] instance as contact
|
||||||
|
def to_contact
|
||||||
|
Contact.new(author: author, recipient: recipient)
|
||||||
|
end
|
||||||
|
|
||||||
|
# @param [Nokogiri::XML::Element] root_node xml nodes
|
||||||
|
# @return [Retraction] instance
|
||||||
|
def self.populate_entity(root_node)
|
||||||
|
super(root_node).to_contact
|
||||||
|
end
|
||||||
|
private_class_method :populate_entity
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,13 @@ module DiasporaFederation
|
||||||
recipient { generate(:diaspora_id) }
|
recipient { generate(:diaspora_id) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
factory :contact_entity, class: DiasporaFederation::Entities::Contact do
|
||||||
|
author { generate(:diaspora_id) }
|
||||||
|
recipient { generate(:diaspora_id) }
|
||||||
|
following true
|
||||||
|
sharing true
|
||||||
|
end
|
||||||
|
|
||||||
factory :comment_entity, class: DiasporaFederation::Entities::Comment, parent: :relayable_entity do
|
factory :comment_entity, class: DiasporaFederation::Entities::Comment, parent: :relayable_entity do
|
||||||
author { generate(:diaspora_id) }
|
author { generate(:diaspora_id) }
|
||||||
guid
|
guid
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,11 @@ end
|
||||||
require "diaspora_federation/validators/rules/birthday"
|
require "diaspora_federation/validators/rules/birthday"
|
||||||
require "diaspora_federation/validators/rules/boolean"
|
require "diaspora_federation/validators/rules/boolean"
|
||||||
require "diaspora_federation/validators/rules/diaspora_id"
|
require "diaspora_federation/validators/rules/diaspora_id"
|
||||||
|
require "diaspora_federation/validators/rules/diaspora_id_count"
|
||||||
require "diaspora_federation/validators/rules/guid"
|
require "diaspora_federation/validators/rules/guid"
|
||||||
require "diaspora_federation/validators/rules/not_nil"
|
require "diaspora_federation/validators/rules/not_nil"
|
||||||
require "diaspora_federation/validators/rules/public_key"
|
require "diaspora_federation/validators/rules/public_key"
|
||||||
require "diaspora_federation/validators/rules/tag_count"
|
require "diaspora_federation/validators/rules/tag_count"
|
||||||
require "diaspora_federation/validators/rules/diaspora_id_count"
|
|
||||||
|
|
||||||
module DiasporaFederation
|
module DiasporaFederation
|
||||||
# Validators to perform basic sanity-checks on {DiasporaFederation::Entities federation entities}.
|
# Validators to perform basic sanity-checks on {DiasporaFederation::Entities federation entities}.
|
||||||
|
|
@ -34,25 +34,31 @@ module DiasporaFederation
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# abstract types
|
||||||
require "diaspora_federation/validators/relayable_validator"
|
require "diaspora_federation/validators/relayable_validator"
|
||||||
require "diaspora_federation/validators/h_card_validator"
|
|
||||||
require "diaspora_federation/validators/person_validator"
|
# types
|
||||||
require "diaspora_federation/validators/profile_validator"
|
|
||||||
require "diaspora_federation/validators/web_finger_validator"
|
|
||||||
require "diaspora_federation/validators/request_validator"
|
|
||||||
require "diaspora_federation/validators/photo_validator"
|
|
||||||
require "diaspora_federation/validators/location_validator"
|
|
||||||
require "diaspora_federation/validators/status_message_validator"
|
|
||||||
require "diaspora_federation/validators/participation_validator"
|
|
||||||
require "diaspora_federation/validators/like_validator"
|
|
||||||
require "diaspora_federation/validators/comment_validator"
|
|
||||||
require "diaspora_federation/validators/account_deletion_validator"
|
require "diaspora_federation/validators/account_deletion_validator"
|
||||||
require "diaspora_federation/validators/message_validator"
|
require "diaspora_federation/validators/comment_validator"
|
||||||
|
require "diaspora_federation/validators/contact_validator"
|
||||||
require "diaspora_federation/validators/conversation_validator"
|
require "diaspora_federation/validators/conversation_validator"
|
||||||
require "diaspora_federation/validators/relayable_retraction_validator"
|
require "diaspora_federation/validators/h_card_validator"
|
||||||
|
require "diaspora_federation/validators/like_validator"
|
||||||
|
require "diaspora_federation/validators/location_validator"
|
||||||
|
require "diaspora_federation/validators/message_validator"
|
||||||
|
require "diaspora_federation/validators/participation_validator"
|
||||||
|
require "diaspora_federation/validators/person_validator"
|
||||||
|
require "diaspora_federation/validators/photo_validator"
|
||||||
|
require "diaspora_federation/validators/poll_answer_validator"
|
||||||
|
require "diaspora_federation/validators/poll_participation_validator"
|
||||||
|
require "diaspora_federation/validators/poll_validator"
|
||||||
|
require "diaspora_federation/validators/profile_validator"
|
||||||
require "diaspora_federation/validators/reshare_validator"
|
require "diaspora_federation/validators/reshare_validator"
|
||||||
require "diaspora_federation/validators/retraction_validator"
|
require "diaspora_federation/validators/retraction_validator"
|
||||||
|
require "diaspora_federation/validators/status_message_validator"
|
||||||
|
require "diaspora_federation/validators/web_finger_validator"
|
||||||
|
|
||||||
|
# deprecated
|
||||||
|
require "diaspora_federation/validators/relayable_retraction_validator"
|
||||||
|
require "diaspora_federation/validators/request_validator"
|
||||||
require "diaspora_federation/validators/signed_retraction_validator"
|
require "diaspora_federation/validators/signed_retraction_validator"
|
||||||
require "diaspora_federation/validators/poll_answer_validator"
|
|
||||||
require "diaspora_federation/validators/poll_validator"
|
|
||||||
require "diaspora_federation/validators/poll_participation_validator"
|
|
||||||
|
|
|
||||||
13
lib/diaspora_federation/validators/contact_validator.rb
Normal file
13
lib/diaspora_federation/validators/contact_validator.rb
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
module DiasporaFederation
|
||||||
|
module Validators
|
||||||
|
# This validates a {Entities::Contact}
|
||||||
|
class ContactValidator < Validation::Validator
|
||||||
|
include Validation
|
||||||
|
|
||||||
|
rule :author, %i(not_empty diaspora_id)
|
||||||
|
rule :recipient, %i(not_empty diaspora_id)
|
||||||
|
rule :following, :boolean
|
||||||
|
rule :sharing, :boolean
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
module DiasporaFederation
|
module DiasporaFederation
|
||||||
module Validators
|
module Validators
|
||||||
# This validates a {Entities::Request}
|
# This validates a {Entities::Request}
|
||||||
|
# @deprecated the {Entities::Request} will be replaced with {Entities::Contact}
|
||||||
class RequestValidator < Validation::Validator
|
class RequestValidator < Validation::Validator
|
||||||
include Validation
|
include Validation
|
||||||
|
|
||||||
|
|
|
||||||
20
spec/lib/diaspora_federation/entities/contact_spec.rb
Normal file
20
spec/lib/diaspora_federation/entities/contact_spec.rb
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
module DiasporaFederation
|
||||||
|
describe Entities::Contact do
|
||||||
|
let(:data) { FactoryGirl.attributes_for(:contact_entity) }
|
||||||
|
|
||||||
|
let(:xml) {
|
||||||
|
<<-XML
|
||||||
|
<contact>
|
||||||
|
<author>#{data[:author]}</author>
|
||||||
|
<recipient>#{data[:recipient]}</recipient>
|
||||||
|
<following>#{data[:following]}</following>
|
||||||
|
<sharing>#{data[:sharing]}</sharing>
|
||||||
|
</contact>
|
||||||
|
XML
|
||||||
|
}
|
||||||
|
|
||||||
|
it_behaves_like "an Entity subclass"
|
||||||
|
|
||||||
|
it_behaves_like "an XML Entity"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -14,5 +14,25 @@ XML
|
||||||
it_behaves_like "an Entity subclass"
|
it_behaves_like "an Entity subclass"
|
||||||
|
|
||||||
it_behaves_like "an XML Entity"
|
it_behaves_like "an XML Entity"
|
||||||
|
|
||||||
|
describe "#to_contact" do
|
||||||
|
it "copies the attributes to a Contact" do
|
||||||
|
request = FactoryGirl.build(:request_entity)
|
||||||
|
contact = request.to_contact
|
||||||
|
|
||||||
|
expect(contact).to be_a(Entities::Contact)
|
||||||
|
expect(contact.author).to eq(request.author)
|
||||||
|
expect(contact.recipient).to eq(request.recipient)
|
||||||
|
expect(contact.following).to be_truthy
|
||||||
|
expect(contact.sharing).to be_truthy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "parse contact" do
|
||||||
|
it "parses the xml as a contact" do
|
||||||
|
contact = Entities::Request.from_xml(Nokogiri::XML::Document.parse(xml).root)
|
||||||
|
expect(contact).to be_a(Entities::Contact)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
module DiasporaFederation
|
||||||
|
describe Validators::ContactValidator do
|
||||||
|
let(:entity) { :contact_entity }
|
||||||
|
|
||||||
|
it_behaves_like "a common validator"
|
||||||
|
|
||||||
|
%i(author recipient).each do |prop|
|
||||||
|
describe "##{prop}" do
|
||||||
|
it_behaves_like "a diaspora id validator" do
|
||||||
|
let(:property) { prop }
|
||||||
|
let(:mandatory) { true }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
%i(following sharing).each do |prop|
|
||||||
|
describe "##{prop}" do
|
||||||
|
it_behaves_like "a boolean validator" do
|
||||||
|
let(:property) { prop }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Reference in a new issue