module RDF::Serializers

Public Class Methods

config() click to toggle source
# File lib/rdf/serializers/config.rb, line 9
def self.config
  @config
end
configure() { |config ||= configuration| ... } click to toggle source
# File lib/rdf/serializers/config.rb, line 5
def self.configure
  yield @config ||= RDF::Serializers::Configuration.new
end
serializer_for(resource_or_class, options = {}) click to toggle source

Extracted from active_model_serializers @param resource [ActiveRecord::Base, ActiveModelSerializers::Model] @return [ActiveModel::Serializer]

Preferentially returns
1. resource.serializer_class
2. ArraySerializer when resource is a collection
3. options[:serializer]
4. lookup serializer when resource is a Class
# File lib/rdf/serializers.rb, line 29
def serializer_for(resource_or_class, options = {})
  if resource_or_class.respond_to?(:serializer_class)
    resource_or_class.serializer_class
  elsif resource_or_class.respond_to?(:to_ary)
    unless resource_or_class.all? { |resource| resource.is_a?(resource_or_class.first.class) }
      return ListSerializer
    end

    serializer_for(resource_or_class.first)
  else
    resource_class = resource_or_class.class == Class ? resource_or_class : resource_or_class.class
    options.fetch(:serializer) { get_serializer_for(resource_class, options[:namespace]) }
  end
end

Private Class Methods

get_serializer_for(klass, namespace = nil) click to toggle source

Extracted from active_model_serializers Find a serializer from a class and caches the lookup. Preferentially returns:

1. class name appended with "Serializer"
2. try again with superclass, if present
3. nil
# File lib/rdf/serializers.rb, line 52
def get_serializer_for(klass, namespace = nil)
  return nil unless config.serializer_lookup_enabled

  return NilSerializer if klass == NilClass

  cache_key = ActiveSupport::Cache.expand_cache_key(klass, namespace)
  serializers_cache.fetch_or_store(cache_key) do
    # NOTE(beauby): When we drop 1.9.3 support we can lazify the map for perfs.
    lookup_chain = serializer_lookup_chain_for(klass, namespace)
    serializer_class = lookup_chain.map(&:safe_constantize).find do |x|
      x&.include?(FastJsonapi::SerializationCore)
    end

    if serializer_class
      serializer_class
    elsif klass.superclass
      get_serializer_for(klass.superclass, namespace)
    end
  end
end
serializer_lookup_chain_for(klass, namespace = nil) click to toggle source
# File lib/rdf/serializers.rb, line 80
def serializer_lookup_chain_for(klass, namespace = nil)
  lookups = config.serializer_lookup_chain
  Array[*lookups].flat_map do |lookup|
    lookup.call(klass, namespace)
  end.compact
end
serializers_cache() click to toggle source

Extracted from active_model_serializers Used to cache serializer name => serializer class when looked up by Serializer.get_serializer_for.

# File lib/rdf/serializers.rb, line 76
def serializers_cache
  @serializers_cache ||= Concurrent::Map.new
end