about summary refs log tree commit diff
path: root/app/serializers
diff options
context:
space:
mode:
authoraschmitz <andy.schmitz@gmail.com>2017-12-06 09:10:54 -0600
committerEugen Rochko <eugen@zeonfederated.com>2017-12-06 16:10:54 +0100
commit4de211b80abe7ea5578988040f004ea1f78d4628 (patch)
tree814edc2f576206ec42782911943e0d45ff9838df /app/serializers
parent063a1c2a8bfaa76215537a8ce7d433cda5ce9755 (diff)
Break out nested relationship API keys (#5887)
* Break out nested relationship API keys

This closes #5856 by restoring the existing behavior of the `muting`
and `following` keys (returning booleans rather than truthy or false).
It adds `showing_reblogs` and `muting_notifications` keys:

* `showing_reblogs` returns true if:
  1. You've requested to follow the user, with reblogs shown, or
  2. You are following the user, with reblogs shown.
* `muting_notifications` returns true if you have muted the user and
  their notifications as well.

* Rubocop fix

* Fix pulling reblog/mute status from relationships

I could swear this had passed tests before, but apparently not.
Works now.

* More test fixes

Really, you'd expect this to be more straightforward.
Diffstat (limited to 'app/serializers')
-rw-r--r--app/serializers/rest/relationship_serializer.rb20
1 files changed, 15 insertions, 5 deletions
diff --git a/app/serializers/rest/relationship_serializer.rb b/app/serializers/rest/relationship_serializer.rb
index 998727e37..45bfd4d6e 100644
--- a/app/serializers/rest/relationship_serializer.rb
+++ b/app/serializers/rest/relationship_serializer.rb
@@ -1,15 +1,21 @@
 # frozen_string_literal: true
 
 class REST::RelationshipSerializer < ActiveModel::Serializer
-  attributes :id, :following, :followed_by, :blocking,
-             :muting, :requested, :domain_blocking
+  attributes :id, :following, :showing_reblogs, :followed_by, :blocking,
+             :muting, :muting_notifications, :requested, :domain_blocking
 
   def id
     object.id.to_s
   end
 
   def following
-    instance_options[:relationships].following[object.id] || false
+    instance_options[:relationships].following[object.id] ? true : false
+  end
+
+  def showing_reblogs
+    (instance_options[:relationships].following[object.id] || {})[:reblogs] ||
+      (instance_options[:relationships].requested[object.id] || {})[:reblogs] ||
+      false
   end
 
   def followed_by
@@ -21,11 +27,15 @@ class REST::RelationshipSerializer < ActiveModel::Serializer
   end
 
   def muting
-    instance_options[:relationships].muting[object.id] || false
+    instance_options[:relationships].muting[object.id] ? true : false
+  end
+
+  def muting_notifications
+    (instance_options[:relationships].muting[object.id] || {})[:notifications] || false
   end
 
   def requested
-    instance_options[:relationships].requested[object.id] || false
+    instance_options[:relationships].requested[object.id] ? true : false
   end
 
   def domain_blocking