# frozen_string_literal: true
class PermittedParams < Struct.new(:params)
  %w(map synapse topic mapping token).each do |kind|
    define_method(kind) do
      permitted_attributes = send("#{kind}_attributes")
      params.require(kind).permit(*permitted_attributes)
    end
    alias_method :"api_#{kind}", kind.to_sym
  end

  alias read_attribute_for_serialization send

  def token_attributes
    [:description]
  end

  def map_attributes
    [:name, :desc, :permission, :arranged]
  end

  def synapse_attributes
    [:desc, :category, :weight, :permission, :topic1_id, :topic2_id]
  end

  def topic_attributes
    [:name, :desc, :link, :permission, :metacode_id]
  end

  def mapping_attributes
    [:xloc, :yloc, :map_id, :mappable_type, :mappable_id]
  end
end
