diff --git a/lib/diaspora_federation.rb b/lib/diaspora_federation.rb index be82a20..7b89b6f 100644 --- a/lib/diaspora_federation.rb +++ b/lib/diaspora_federation.rb @@ -267,7 +267,7 @@ module DiasporaFederation end end - # raised, if the engine is not configured correctly + # Raised, if the engine is not configured correctly class ConfigurationError < RuntimeError end end diff --git a/lib/diaspora_federation/entities.rb b/lib/diaspora_federation/entities.rb index d932167..dee3313 100644 --- a/lib/diaspora_federation/entities.rb +++ b/lib/diaspora_federation/entities.rb @@ -8,6 +8,8 @@ module DiasporaFederation end end +require "diaspora_federation/entities/related_entity" + # abstract types require "diaspora_federation/entities/post" require "diaspora_federation/entities/relayable" diff --git a/lib/diaspora_federation/entities/related_entity.rb b/lib/diaspora_federation/entities/related_entity.rb new file mode 100644 index 0000000..eb69012 --- /dev/null +++ b/lib/diaspora_federation/entities/related_entity.rb @@ -0,0 +1,28 @@ +module DiasporaFederation + module Entities + # Entity meta informations for a related entity (parent or target of + # another entity). + class RelatedEntity < Entity + # @!attribute [r] author + # The diaspora ID of the author. + # @see Person#author + # @return [String] diaspora ID + property :author + + # @!attribute [r] local + # +true+ if the owner of the entity is local on the pod + # @return [Boolean] is it a like or a dislike + property :local + + # @!attribute [r] public + # shows whether the entity is visible to everyone or only to some aspects + # @return [Boolean] is it public + property :public, default: false + + # @!attribute [r] parent + # if the entity also have a parent (Comment or Like), +nil+ if it has no parent + # @return [RelatedEntity] parent entity + entity :parent, Entities::RelatedEntity, default: nil + end + end +end diff --git a/lib/diaspora_federation/entities/relayable.rb b/lib/diaspora_federation/entities/relayable.rb index 2360690..948d638 100644 --- a/lib/diaspora_federation/entities/relayable.rb +++ b/lib/diaspora_federation/entities/relayable.rb @@ -201,15 +201,15 @@ module DiasporaFederation end end - # Exception raised when creating the author_signature failes, because the private key was not found + # Raised, if creating the author_signature failes, because the private key was not found class AuthorPrivateKeyNotFound < RuntimeError end - # Exception raised when verify_signatures fails to verify signatures (no public key found) + # Raised, if verify_signatures fails to verify signatures (no public key found) class PublicKeyNotFound < RuntimeError end - # Exception raised when verify_signatures fails to verify signatures (signatures are wrong) + # Raised, if verify_signatures fails to verify signatures (signatures are wrong) class SignatureVerificationFailed < RuntimeError end end diff --git a/lib/diaspora_federation/salmon/exceptions.rb b/lib/diaspora_federation/salmon/exceptions.rb index 4de9a45..349c7b2 100644 --- a/lib/diaspora_federation/salmon/exceptions.rb +++ b/lib/diaspora_federation/salmon/exceptions.rb @@ -15,7 +15,7 @@ module DiasporaFederation class MissingHeader < RuntimeError end - # Raised if the decrypted header has an unexpected XML structure + # Raised, if the decrypted header has an unexpected XML structure # @deprecated class InvalidHeader < RuntimeError end diff --git a/lib/diaspora_federation/test/factories.rb b/lib/diaspora_federation/test/factories.rb index 8ebee42..c14946e 100644 --- a/lib/diaspora_federation/test/factories.rb +++ b/lib/diaspora_federation/test/factories.rb @@ -195,6 +195,13 @@ module DiasporaFederation guid poll_answer_guid { generate(:guid) } end + + factory :related_entity, class: DiasporaFederation::Entities::RelatedEntity do + author { generate(:diaspora_id) } + local true + public false + parent nil + end end end end diff --git a/lib/diaspora_federation/validators.rb b/lib/diaspora_federation/validators.rb index 3a88845..a2de867 100644 --- a/lib/diaspora_federation/validators.rb +++ b/lib/diaspora_federation/validators.rb @@ -34,6 +34,8 @@ module DiasporaFederation end end +require "diaspora_federation/validators/related_entity_validator" + # abstract types require "diaspora_federation/validators/relayable_validator" diff --git a/lib/diaspora_federation/validators/related_entity_validator.rb b/lib/diaspora_federation/validators/related_entity_validator.rb new file mode 100644 index 0000000..064564c --- /dev/null +++ b/lib/diaspora_federation/validators/related_entity_validator.rb @@ -0,0 +1,12 @@ +module DiasporaFederation + module Validators + # This validates a {Entities::RelatedEntity} + class RelatedEntityValidator < Validation::Validator + include Validation + + rule :author, %i(not_empty diaspora_id) + rule :local, :boolean + rule :public, :boolean + end + end +end diff --git a/spec/lib/diaspora_federation/entities/related_entity_spec.rb b/spec/lib/diaspora_federation/entities/related_entity_spec.rb new file mode 100644 index 0000000..6a00c0f --- /dev/null +++ b/spec/lib/diaspora_federation/entities/related_entity_spec.rb @@ -0,0 +1,7 @@ +module DiasporaFederation + describe Entities::RelatedEntity do + let(:data) { FactoryGirl.attributes_for(:related_entity) } + + it_behaves_like "an Entity subclass" + end +end diff --git a/spec/lib/diaspora_federation/validators/related_entity_validator_spec.rb b/spec/lib/diaspora_federation/validators/related_entity_validator_spec.rb new file mode 100644 index 0000000..8807a35 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/related_entity_validator_spec.rb @@ -0,0 +1,18 @@ +module DiasporaFederation + describe Validators::RelatedEntityValidator do + let(:entity) { :related_entity } + + it_behaves_like "a common validator" + + it_behaves_like "a diaspora id validator" do + let(:property) { :author } + let(:mandatory) { true } + end + + %i(local public).each do |prop| + it_behaves_like "a boolean validator" do + let(:property) { prop } + end + end + end +end