module ActiveLoaders::Adapters::ActiveModelSerializers
Public Instance Methods
get_serializer_for(klass, serializer_assoc = nil)
click to toggle source
# File lib/active_loaders/datasource_adapter.rb, line 44 def get_serializer_for(klass, serializer_assoc = nil) serializer = if serializer_assoc if serializer_assoc.kind_of?(Hash) serializer_assoc[:options].try(:[], :serializer) else serializer_assoc.options[:serializer] end end serializer || "#{klass.name}Serializer".constantize end
to_datasource_select(result, klass, serializer = nil, serializer_assoc = nil, adapter = nil, datasource = nil)
click to toggle source
# File lib/active_loaders/datasource_adapter.rb, line 55 def to_datasource_select(result, klass, serializer = nil, serializer_assoc = nil, adapter = nil, datasource = nil) adapter ||= Datasource::Base.default_adapter serializer ||= get_serializer_for(klass, serializer_assoc) if serializer._attributes.respond_to?(:keys) # AMS 0.8 result.concat(serializer._attributes.keys) else # AMS 0.9 result.concat(serializer._attributes) end result.concat(serializer.loaders_context.select) if serializer.loaders_context.skip_select.empty? result.unshift("*") else datasource_class = if datasource datasource.class else serializer.use_datasource || klass.default_datasource end result.concat(datasource_class._column_attribute_names - serializer.loaders_context.skip_select.map(&:to_s)) end result_assocs = serializer.loaders_context.includes.dup result.push(result_assocs) serializer._associations.each_pair do |name, serializer_assoc| # TODO: what if assoc is renamed in serializer? reflection = adapter.association_reflection(klass, name.to_sym) assoc_class = reflection[:klass] name = name.to_s result_assocs[name] = [] to_datasource_select(result_assocs[name], assoc_class, nil, serializer_assoc, adapter) end rescue Exception => ex if ex.is_a?(SystemStackError) || ex.is_a?(Datasource::RecursionError) fail Datasource::RecursionError, "recursive association (involving #{klass.name})" else raise end end