Class: ManyfoldApi::V0::GroupDeserializer

Inherits:
BaseDeserializer show all
Defined in:
app/deserializers/manyfold_api/v0/group_deserializer.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseDeserializer

#dereference, #initialize, schema_ref, schema_ref_name

Constructor Details

This class inherits a constructor from ManyfoldApi::V0::BaseDeserializer

Class Method Details

.schema ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'app/deserializers/manyfold_api/v0/group_deserializer.rb', line 28

def self.schema
  {
    type: :object,
    properties: {
      name: {type: :string, example: "Patrons"},
      description: {type: :string, example: "My subscribers"},
      add_members: {type: :array, items: {type: :string, example: "username / email / fediverse address"}},
      remove_members: {type: :array, items: {type: :string, example: "username / email / fediverse address"}}
    }
  }
end

Instance Method Details

#deserialize ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/deserializers/manyfold_api/v0/group_deserializer.rb', line 3

def deserialize
  return unless @object
  members = []
  if @object["add_members"]
    members += @object["add_members"].filter_map do
      {user: User.match!(identifier: it, invite: true)}
    rescue ActiveRecord::RecordNotFound
      nil
    end
  end
  if @object["remove_members"] && @record
    members += @object["remove_members"].filter_map do
      {id: @record.memberships.find_by(user: User.match!(identifier: it))&.id, _destroy: "1"}
    rescue ActiveRecord::RecordNotFound
      nil
    end
  end
  memberships_attributes = (0...members.count).map(&:to_s).zip(members).to_h
  {
    name: @object["name"],
    description: @object["description"],
    memberships_attributes: memberships_attributes
  }.compact
end