From fd1f896d170f558d6cb5f7ad4ea2fb4100c42612 Mon Sep 17 00:00:00 2001 From: cmrd Senya Date: Fri, 13 Nov 2015 16:43:36 +0300 Subject: [PATCH 1/2] Introduce the "Relayable" entity, which encapsulates common properties of entities that are inherited from Relayable class in the Diaspora source code - "parent_guid", "parent_author_signature", "author_signature". --- lib/diaspora_federation/entities.rb | 1 + lib/diaspora_federation/entities/comment.rb | 4 +-- lib/diaspora_federation/entities/like.rb | 4 +-- lib/diaspora_federation/entities/message.rb | 4 +-- .../entities/participation.rb | 4 +-- .../entities/poll_participation.rb | 3 +- lib/diaspora_federation/entities/relayable.rb | 13 ++++++++ spec/factories.rb | 32 ++++++++----------- .../entities/conversation_spec.rb | 21 +----------- .../entities/poll_participation_spec.rb | 1 + 10 files changed, 34 insertions(+), 53 deletions(-) create mode 100644 lib/diaspora_federation/entities/relayable.rb diff --git a/lib/diaspora_federation/entities.rb b/lib/diaspora_federation/entities.rb index c053164..1b6c09c 100644 --- a/lib/diaspora_federation/entities.rb +++ b/lib/diaspora_federation/entities.rb @@ -8,6 +8,7 @@ module DiasporaFederation end end +require "diaspora_federation/entities/relayable" require "diaspora_federation/entities/profile" require "diaspora_federation/entities/person" require "diaspora_federation/entities/location" diff --git a/lib/diaspora_federation/entities/comment.rb b/lib/diaspora_federation/entities/comment.rb index 543930e..86496a8 100644 --- a/lib/diaspora_federation/entities/comment.rb +++ b/lib/diaspora_federation/entities/comment.rb @@ -2,9 +2,7 @@ module DiasporaFederation module Entities class Comment < Entity property :guid - property :parent_guid - property :parent_author_signature - property :author_signature + include Relayable property :text property :diaspora_id, xml_name: :diaspora_handle end diff --git a/lib/diaspora_federation/entities/like.rb b/lib/diaspora_federation/entities/like.rb index 5d76188..c14ba8e 100644 --- a/lib/diaspora_federation/entities/like.rb +++ b/lib/diaspora_federation/entities/like.rb @@ -4,9 +4,7 @@ module DiasporaFederation property :positive property :guid property :target_type - property :parent_guid - property :parent_author_signature - property :author_signature + include Relayable property :diaspora_id, xml_name: :diaspora_handle end end diff --git a/lib/diaspora_federation/entities/message.rb b/lib/diaspora_federation/entities/message.rb index 5eadac7..d1ef159 100644 --- a/lib/diaspora_federation/entities/message.rb +++ b/lib/diaspora_federation/entities/message.rb @@ -2,9 +2,7 @@ module DiasporaFederation module Entities class Message < Entity property :guid - property :parent_guid - property :parent_author_signature - property :author_signature + include Relayable property :text property :created_at, default: -> { Time.now.utc } property :diaspora_id, xml_name: :diaspora_handle diff --git a/lib/diaspora_federation/entities/participation.rb b/lib/diaspora_federation/entities/participation.rb index a7f99ce..8e8dd5f 100644 --- a/lib/diaspora_federation/entities/participation.rb +++ b/lib/diaspora_federation/entities/participation.rb @@ -3,9 +3,7 @@ module DiasporaFederation class Participation < Entity property :guid property :target_type - property :parent_guid - property :parent_author_signature - property :author_signature + include Relayable property :diaspora_id, xml_name: :diaspora_handle end end diff --git a/lib/diaspora_federation/entities/poll_participation.rb b/lib/diaspora_federation/entities/poll_participation.rb index 8d671ab..d1b11c8 100644 --- a/lib/diaspora_federation/entities/poll_participation.rb +++ b/lib/diaspora_federation/entities/poll_participation.rb @@ -2,8 +2,7 @@ module DiasporaFederation module Entities class PollParticipation < Entity property :guid - property :parent_guid - property :parent_author_signature + include Relayable property :diaspora_id, xml_name: :diaspora_handle property :poll_answer_guid end diff --git a/lib/diaspora_federation/entities/relayable.rb b/lib/diaspora_federation/entities/relayable.rb new file mode 100644 index 0000000..3144b9a --- /dev/null +++ b/lib/diaspora_federation/entities/relayable.rb @@ -0,0 +1,13 @@ +module DiasporaFederation + module Entities + module Relayable + def self.included(model) + model.class_eval do + property :parent_guid + property :parent_author_signature + property :author_signature + end + end + end + end +end diff --git a/spec/factories.rb b/spec/factories.rb index d20ada5..b80e37e 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -93,15 +93,18 @@ FactoryGirl.define do width 800 end - factory :participation_entity, class: DiasporaFederation::Entities::Participation do - guid - target_type "StatusMessage" + factory :relayable_entity, class: DiasporaFederation::Entities::Relayable do parent_guid { generate(:guid) } - diaspora_id parent_author_signature { generate(:signature) } author_signature { generate(:signature) } end + factory :participation_entity, class: DiasporaFederation::Entities::Participation, parent: :relayable_entity do + guid + target_type "StatusMessage" + diaspora_id + end + factory :status_message_entity, class: DiasporaFederation::Entities::StatusMessage do raw_message "i am a very interesting status update" guid @@ -115,22 +118,16 @@ FactoryGirl.define do recipient_id { generate(:diaspora_id) } end - factory :comment_entity, class: DiasporaFederation::Entities::Comment do + factory :comment_entity, class: DiasporaFederation::Entities::Comment, parent: :relayable_entity do guid - parent_guid { generate(:guid) } - parent_author_signature { generate(:signature) } - author_signature { generate(:signature) } text "this is a very informative comment" diaspora_id end - factory :like_entity, class: DiasporaFederation::Entities::Like do + factory :like_entity, class: DiasporaFederation::Entities::Like, parent: :relayable_entity do positive 1 guid target_type "StatusMessage" - parent_guid { generate(:guid) } - parent_author_signature { generate(:signature) } - author_signature { generate(:signature) } diaspora_id end @@ -147,11 +144,8 @@ FactoryGirl.define do participant_ids { 3.times.map { generate(:diaspora_id) }.join(";") } end - factory :message_entity, class: DiasporaFederation::Entities::Message do + factory :message_entity, class: DiasporaFederation::Entities::Message, parent: :relayable_entity do guid - parent_guid { generate(:guid) } - parent_author_signature { generate(:signature) } - author_signature { generate(:signature) } text "this is a very informative text" created_at { DateTime.now.utc } diaspora_id @@ -200,11 +194,11 @@ FactoryGirl.define do poll_answers { 3.times.map { FactoryGirl.build(:poll_answer_entity) } } end - factory :poll_participation_entity, class: DiasporaFederation::Entities::PollParticipation do + factory :poll_participation_entity, + class: DiasporaFederation::Entities::PollParticipation, + parent: :relayable_entity do guid - parent_guid { generate(:guid) } diaspora_id - parent_author_signature { generate(:signature) } poll_answer_guid { generate(:guid) } end end diff --git a/spec/lib/diaspora_federation/entities/conversation_spec.rb b/spec/lib/diaspora_federation/entities/conversation_spec.rb index 585971f..487baea 100644 --- a/spec/lib/diaspora_federation/entities/conversation_spec.rb +++ b/spec/lib/diaspora_federation/entities/conversation_spec.rb @@ -15,26 +15,7 @@ module DiasporaFederation #{data[:guid]} #{data[:subject]} #{data[:created_at]} - - #{msg1.guid} - #{msg1.parent_guid} - #{msg1.parent_author_signature} - #{msg1.author_signature} - #{msg1.text} - #{msg1.created_at} - #{msg1.diaspora_id} - #{msg1.conversation_guid} - - - #{msg2.guid} - #{msg2.parent_guid} - #{msg2.parent_author_signature} - #{msg2.author_signature} - #{msg2.text} - #{msg2.created_at} - #{msg2.diaspora_id} - #{msg2.conversation_guid} - +#{data[:messages].map {|a| a.to_xml.to_s.indent(2) }.join("\n")} #{data[:diaspora_id]} #{data[:participant_ids]} diff --git a/spec/lib/diaspora_federation/entities/poll_participation_spec.rb b/spec/lib/diaspora_federation/entities/poll_participation_spec.rb index ac6dda7..e711293 100644 --- a/spec/lib/diaspora_federation/entities/poll_participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/poll_participation_spec.rb @@ -8,6 +8,7 @@ module DiasporaFederation #{data[:guid]} #{data[:parent_guid]} #{data[:parent_author_signature]} + #{data[:author_signature]} #{data[:diaspora_id]} #{data[:poll_answer_guid]} From b9b5ee6f7d4f08318c20f07cbdc8ba2ee3de928c Mon Sep 17 00:00:00 2001 From: cmrd Senya Date: Fri, 13 Nov 2015 17:02:41 +0300 Subject: [PATCH 2/2] Do the same generalization for Relayable for validators taking into account that "author_signature" and "parent_author_signature" are allowed to be empty, actually. --- lib/diaspora_federation/validators.rb | 1 + .../validators/comment_validator.rb | 6 +----- .../validators/like_validator.rb | 6 +----- .../validators/message_validator.rb | 6 +----- .../validators/participation_validator.rb | 6 +----- .../validators/poll_participation_validator.rb | 4 +--- .../validators/relayable_validator.rb | 11 +++++++++++ .../validators/comment_validator_spec.rb | 14 ++++---------- .../validators/like_validator_spec.rb | 14 ++++---------- .../validators/message_validator_spec.rb | 12 +++--------- .../validators/participation_validator_spec.rb | 18 ++++++++---------- .../poll_participation_validator_spec.rb | 10 +++------- spec/support/shared_validator_specs.rb | 8 ++++++++ 13 files changed, 47 insertions(+), 69 deletions(-) create mode 100644 lib/diaspora_federation/validators/relayable_validator.rb diff --git a/lib/diaspora_federation/validators.rb b/lib/diaspora_federation/validators.rb index 2f5a985..57e7ace 100644 --- a/lib/diaspora_federation/validators.rb +++ b/lib/diaspora_federation/validators.rb @@ -34,6 +34,7 @@ module DiasporaFederation end end +require "diaspora_federation/validators/relayable_validator" require "diaspora_federation/validators/h_card_validator" require "diaspora_federation/validators/person_validator" require "diaspora_federation/validators/profile_validator" diff --git a/lib/diaspora_federation/validators/comment_validator.rb b/lib/diaspora_federation/validators/comment_validator.rb index 9609dfb..da346e5 100644 --- a/lib/diaspora_federation/validators/comment_validator.rb +++ b/lib/diaspora_federation/validators/comment_validator.rb @@ -5,11 +5,7 @@ module DiasporaFederation rule :guid, :guid - rule :parent_guid, :guid - - rule :parent_author_signature, :not_empty - - rule :author_signature, :not_empty + include RelayableValidator rule :text, [:not_empty, length: {maximum: 65_535}] diff --git a/lib/diaspora_federation/validators/like_validator.rb b/lib/diaspora_federation/validators/like_validator.rb index 78b2a95..9f4d319 100644 --- a/lib/diaspora_federation/validators/like_validator.rb +++ b/lib/diaspora_federation/validators/like_validator.rb @@ -5,11 +5,7 @@ module DiasporaFederation rule :guid, :guid - rule :parent_guid, :guid - - rule :parent_author_signature, :not_empty - - rule :author_signature, :not_empty + include RelayableValidator rule :diaspora_id, %i(not_empty diaspora_id) end diff --git a/lib/diaspora_federation/validators/message_validator.rb b/lib/diaspora_federation/validators/message_validator.rb index 0e9f244..bf7b853 100644 --- a/lib/diaspora_federation/validators/message_validator.rb +++ b/lib/diaspora_federation/validators/message_validator.rb @@ -5,11 +5,7 @@ module DiasporaFederation rule :guid, :guid - rule :parent_guid, :guid - - rule :parent_author_signature, :not_empty - - rule :author_signature, :not_empty + include RelayableValidator rule :diaspora_id, %i(not_empty diaspora_id) diff --git a/lib/diaspora_federation/validators/participation_validator.rb b/lib/diaspora_federation/validators/participation_validator.rb index e51739b..28d96f7 100644 --- a/lib/diaspora_federation/validators/participation_validator.rb +++ b/lib/diaspora_federation/validators/participation_validator.rb @@ -7,11 +7,7 @@ module DiasporaFederation rule :target_type, :not_empty - rule :parent_guid, :guid - - rule :parent_author_signature, :not_empty - - rule :author_signature, :not_empty + include RelayableValidator rule :diaspora_id, %i(not_empty diaspora_id) end diff --git a/lib/diaspora_federation/validators/poll_participation_validator.rb b/lib/diaspora_federation/validators/poll_participation_validator.rb index d3b9306..44e5063 100644 --- a/lib/diaspora_federation/validators/poll_participation_validator.rb +++ b/lib/diaspora_federation/validators/poll_participation_validator.rb @@ -5,9 +5,7 @@ module DiasporaFederation rule :guid, :guid - rule :parent_guid, :guid - - rule :parent_author_signature, :not_empty + include RelayableValidator rule :diaspora_id, %i(not_empty diaspora_id) diff --git a/lib/diaspora_federation/validators/relayable_validator.rb b/lib/diaspora_federation/validators/relayable_validator.rb new file mode 100644 index 0000000..1f44781 --- /dev/null +++ b/lib/diaspora_federation/validators/relayable_validator.rb @@ -0,0 +1,11 @@ +module DiasporaFederation + module Validators + module RelayableValidator + def self.included(model) + model.class_eval do + rule :parent_guid, :guid + end + end + end + end +end diff --git a/spec/lib/diaspora_federation/validators/comment_validator_spec.rb b/spec/lib/diaspora_federation/validators/comment_validator_spec.rb index cad4627..755afcf 100644 --- a/spec/lib/diaspora_federation/validators/comment_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/comment_validator_spec.rb @@ -4,22 +4,16 @@ module DiasporaFederation it_behaves_like "a common validator" + it_behaves_like "a relayable validator" + it_behaves_like "a diaspora id validator" do let(:property) { :diaspora_id } let(:mandatory) { true } end - %i(guid parent_guid).each do |prop| + describe "#guid" do it_behaves_like "a guid validator" do - let(:property) { prop } - end - end - - %i(author_signature parent_author_signature).each do |prop| - describe "##{prop}" do - it_behaves_like "a property that mustn't be empty" do - let(:property) { prop } - end + let(:property) { :guid } end end diff --git a/spec/lib/diaspora_federation/validators/like_validator_spec.rb b/spec/lib/diaspora_federation/validators/like_validator_spec.rb index 798138b..c6fcb11 100644 --- a/spec/lib/diaspora_federation/validators/like_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/like_validator_spec.rb @@ -3,17 +3,11 @@ module DiasporaFederation let(:entity) { :like_entity } it_behaves_like "a common validator" - %i(guid parent_guid).each do |prop| - it_behaves_like "a guid validator" do - let(:property) { prop } - end - end + it_behaves_like "a relayable validator" - %i(author_signature parent_author_signature).each do |prop| - describe "##{prop}" do - it_behaves_like "a property that mustn't be empty" do - let(:property) { prop } - end + describe "#guid" do + it_behaves_like "a guid validator" do + let(:property) { :guid } end end diff --git a/spec/lib/diaspora_federation/validators/message_validator_spec.rb b/spec/lib/diaspora_federation/validators/message_validator_spec.rb index ea530b2..3cd6389 100644 --- a/spec/lib/diaspora_federation/validators/message_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/message_validator_spec.rb @@ -3,25 +3,19 @@ module DiasporaFederation let(:entity) { :message_entity } it_behaves_like "a common validator" + it_behaves_like "a relayable validator" + it_behaves_like "a diaspora id validator" do let(:property) { :diaspora_id } let(:mandatory) { true } end - %i(guid parent_guid conversation_guid).each do |prop| + %i(guid conversation_guid).each do |prop| describe "##{prop}" do it_behaves_like "a guid validator" do let(:property) { prop } end end end - - %i(author_signature parent_author_signature).each do |prop| - describe "##{prop}" do - it_behaves_like "a property that mustn't be empty" do - let(:property) { prop } - end - end - end end end diff --git a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb index 285889b..0a1f451 100644 --- a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb @@ -4,24 +4,22 @@ module DiasporaFederation it_behaves_like "a common validator" + it_behaves_like "a relayable validator" + it_behaves_like "a diaspora id validator" do let(:property) { :diaspora_id } let(:mandatory) { true } end - %i(guid parent_guid).each do |prop| - describe "##{prop}" do - it_behaves_like "a guid validator" do - let(:property) { prop } - end + describe "#guid" do + it_behaves_like "a guid validator" do + let(:property) { :guid } end end - %i(target_type author_signature parent_author_signature).each do |prop| - describe "##{prop}" do - it_behaves_like "a property that mustn't be empty" do - let(:property) { prop } - end + describe "#target_type" do + it_behaves_like "a property that mustn't be empty" do + let(:property) { :target_type } end end end diff --git a/spec/lib/diaspora_federation/validators/poll_participation_validator_spec.rb b/spec/lib/diaspora_federation/validators/poll_participation_validator_spec.rb index 1ab876d..233bc5c 100644 --- a/spec/lib/diaspora_federation/validators/poll_participation_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/poll_participation_validator_spec.rb @@ -4,23 +4,19 @@ module DiasporaFederation it_behaves_like "a common validator" + it_behaves_like "a relayable validator" + it_behaves_like "a diaspora id validator" do let(:property) { :diaspora_id } let(:mandatory) { true } end - %i(guid parent_guid poll_answer_guid).each do |prop| + %i(guid poll_answer_guid).each do |prop| describe "##{prop}" do it_behaves_like "a guid validator" do let(:property) { prop } end end end - - describe "#parent_author_signature" do - it_behaves_like "a property that mustn't be empty" do - let(:property) { :parent_author_signature } - end - end end end diff --git a/spec/support/shared_validator_specs.rb b/spec/support/shared_validator_specs.rb index 579beb5..d075d0f 100644 --- a/spec/support/shared_validator_specs.rb +++ b/spec/support/shared_validator_specs.rb @@ -16,6 +16,14 @@ shared_examples "a common validator" do end end +shared_examples "a relayable validator" do + describe "#parent_guid" do + it_behaves_like "a guid validator" do + let(:property) { :parent_guid } + end + end +end + shared_examples "a property with a value validation/restriction" do it "fails if a wrong value is supplied" do wrong_values.each do |val|