Skip to content

Instantly share code, notes, and snippets.

@ramonsantos
Created November 23, 2024 02:04
Show Gist options
  • Save ramonsantos/2620ec4485df9bdeb59abce55ac40a22 to your computer and use it in GitHub Desktop.
Save ramonsantos/2620ec4485df9bdeb59abce55ac40a22 to your computer and use it in GitHub Desktop.
ams.rb
# frozen_string_literal: true
module ActiveModelSerializers
module Adapter
class Attributes < Base
def initialize(*)
super
instance_options[:fieldset] ||= ActiveModel::Serializer::Fieldset.new(fields_to_fieldset(instance_options.delete(:fields)))
end
def serializable_hash(options = nil)
options = serialization_options(options.dup)
options[:fields] ||= instance_options[:fields]
serialized_hash = serializer.serializable_hash(instance_options, options, self)
self.class.transform_key_casing!(serialized_hash, instance_options)
end
private
def fields_to_fieldset(fields)
return fields if fields.nil?
resource_fields = []
relationship_fields = {}
fields.each do |field|
case field
when Symbol, String then resource_fields << field
when Hash then relationship_fields.merge!(field)
else fail ArgumentError, "Unknown conversion of fields to fieldset: '#{field.inspect}' in '#{fields.inspect}'"
end
end
relationship_fields.merge!(serializer.json_key.to_sym => resource_fields)
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment