fast_jsonapi icon indicating copy to clipboard operation
fast_jsonapi copied to clipboard

allow multiple meta blocks and merge them if present

Open doits opened this issue 6 years ago • 1 comments

Useful for includes and inheritance:

module SomeModule
  extend ActiveSupport::Concern

  included do
    meta do
      {
        module_meta: true
      }
    end
  end
end

class UserSerializer
  include FastJsonapi::ObjectSerializer
  include SomeModule

  meta do
    {
      user_meta: true
    }
  end
end

class EmployeeSerializer < UserSerializer
  meta do
    {
      employee_meta: true
    }
  end
end

EmployeeSerializer.new(employee).serializable_hash

{
  data: {
    [...]
    meta: {
      module_meta: true,
      user_meta: true,
      employee_meta: true
    }
  }
}

doits avatar Jun 07 '19 11:06 doits

One thing to discuss is whether deep_merge or merge should be used. Only makes a difference in the exotic case of different meta blocks returning same keys though.

Otherwise I think this change makes composing serializers out of different modules and/or inheritance much more simpler, because each module or class can have meta blocks.

doits avatar Jun 07 '19 11:06 doits