diaspora/app/models/reference.rb
cmrd Senya 6f812a5b8f
Add LinksController
LinksController redirects requests for provided diaspora:// links to
respective entities urls.
2018-07-11 01:24:28 +02:00

39 lines
1.2 KiB
Ruby

# frozen_string_literal: true
class Reference < ApplicationRecord
belongs_to :source, polymorphic: true
belongs_to :target, polymorphic: true
validates :target_id, uniqueness: {scope: %i[target_type source_id source_type]}
module Source
extend ActiveSupport::Concern
included do
after_create :create_references
has_many :references, as: :source, dependent: :destroy
end
def create_references
text&.scan(DiasporaFederation::Federation::DiasporaUrlParser::DIASPORA_URL_REGEX)&.each do |author, type, guid|
add_reference(author, type, guid)
end
end
private
def add_reference(author, type, guid)
entity = Diaspora::EntityFinder.new(type, guid).find
references.find_or_create_by(target: entity) if entity&.diaspora_handle == author
rescue => e # rubocop:disable Lint/RescueWithoutErrorClass
logger.warn "ignoring invalid diaspora-url: diaspora://#{author}/#{type}/#{guid}: #{e.class}: #{e.message}"
end
end
module Target
extend ActiveSupport::Concern
included do
has_many :referenced_by, as: :target, class_name: "Reference", dependent: :destroy
end
end
end