You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
1.4 KiB

  1. # frozen_string_literal: true
  2. class ActivityPub::ActorSerializer < ActiveModel::Serializer
  3. include RoutingHelper
  4. attributes :id, :type, :following, :followers,
  5. :inbox, :outbox, :preferred_username,
  6. :name, :summary, :url
  7. has_one :public_key, serializer: ActivityPub::PublicKeySerializer
  8. class ImageSerializer < ActiveModel::Serializer
  9. include RoutingHelper
  10. attributes :type, :url
  11. def type
  12. 'Image'
  13. end
  14. def url
  15. full_asset_url(object.url(:original))
  16. end
  17. end
  18. has_one :icon, serializer: ImageSerializer, if: :avatar_exists?
  19. has_one :image, serializer: ImageSerializer, if: :header_exists?
  20. def id
  21. account_url(object)
  22. end
  23. def type
  24. 'Person'
  25. end
  26. def following
  27. account_following_index_url(object)
  28. end
  29. def followers
  30. account_followers_url(object)
  31. end
  32. def inbox
  33. account_inbox_url(object)
  34. end
  35. def outbox
  36. account_outbox_url(object)
  37. end
  38. def preferred_username
  39. object.username
  40. end
  41. def name
  42. object.display_name
  43. end
  44. def summary
  45. Formatter.instance.simplified_format(object)
  46. end
  47. def icon
  48. object.avatar
  49. end
  50. def image
  51. object.header
  52. end
  53. def public_key
  54. object
  55. end
  56. def url
  57. short_account_url(object)
  58. end
  59. def avatar_exists?
  60. object.avatar.exists?
  61. end
  62. def header_exists?
  63. object.header.exists?
  64. end
  65. end