class WolfCore::ApplicationSerializer
def self._attributes
def self._attributes @_attributes ||= [] end
def self._relationships
def self._relationships @_relationships ||= {} end
def self.attributes(*attrs)
def self.attributes(*attrs) _attributes.concat(attrs.map(&:to_sym)) end
def self.has_many(relationship, serializer:) # rubocop:disable Naming/PredicateName
def self.has_many(relationship, serializer:) # rubocop:disable Naming/PredicateName _relationships[relationship.to_sym] = serializer end
def self.has_one(relationship, serializer:) # rubocop:disable Naming/PredicateName
def self.has_one(relationship, serializer:) # rubocop:disable Naming/PredicateName _relationships[relationship.to_sym] = serializer end
def self.serialize(entity, options = {})
def self.serialize(entity, options = {}) new(entity, options).as_json.with_indifferent_access end
def self.serialize_all(collection, options = {})
def self.serialize_all(collection, options = {}) collection.map { |item| serialize(item, options) } end
def as_json(*)
def as_json(*) attributes = serialized_attributes relationships = serialized_relationships attributes.merge(relationships) end
def initialize(object, options = {})
def initialize(object, options = {}) @object = object @options = options end
def serialized_attributes
def serialized_attributes self.class._attributes.each_with_object({}) do |attribute, hash| hash[attribute] = if respond_to?(attribute, true) send(attribute) elsif object.respond_to?(attribute) object.public_send(attribute) end end end
def serialized_relationships
def serialized_relationships self.class._relationships.each_with_object({}) do |(key, serializer_class), hash| related_object = object.public_send(key) hash[key] = if related_object.is_a?(Enumerable) serializer_class.serialize_all(related_object, options) else serializer_class.serialize(related_object, options).as_json end end end