diaspora_federation/lib/diaspora_federation/entities/participation.rb
Benjamin Neff 68df3cf555
Remove support for ruby 2.1, 2.2, 2.3 and 2.4, add 2.6 instead
all older than 2.3 are already EOL and 2.4 will be EOL soon and the next
diaspora major version will already depend on newer versions, so we can
already remove it now.
2019-10-21 03:11:12 +02:00

54 lines
1.7 KiB
Ruby

module DiasporaFederation
module Entities
# Participation is sent to subscribe a user on updates for some post.
#
# @see Validators::Participation
class Participation < Entity
# @!attribute [r] author
# The diaspora* ID of the author
# @see Person#author
# @return [String] diaspora* ID
property :author, :string, xml_name: :diaspora_handle
# @!attribute [r] guid
# A random string of at least 16 chars
# @see Validation::Rule::Guid
# @return [String] guid
property :guid, :string
# @!attribute [r] parent_guid
# @see StatusMessage#guid
# @return [String] parent guid
property :parent_guid, :string
# @!attribute [r] parent_type
# A string describing a type of the target to subscribe on
# Currently only "Post" is supported.
# @return [String] parent type
property :parent_type, :string, xml_name: :target_type
# @return [String] string representation of this object
def to_s
"#{super}:#{parent_type}:#{parent_guid}"
end
# Validates that the parent exists and the parent author is local
def validate_parent
parent = DiasporaFederation.callbacks.trigger(:fetch_related_entity, parent_type, parent_guid)
raise ParentNotLocal, "obj=#{self}" unless parent&.local
end
# Validate that the parent is local.
# @see Entity.from_hash
# @param [Hash] hash entity initialization hash
# @return [Entity] instance
def self.from_hash(hash)
super.tap(&:validate_parent)
end
# Raised, if the parent is not owned by the receiving pod.
class ParentNotLocal < RuntimeError
end
end
end
end