Module: Datasource::ConsumerAdapters::ActiveModelSerializers

Defined in:
lib/datasource/consumer_adapters/active_model_serializers.rb

Defined Under Namespace

Modules: ArraySerializer

Class Method Summary collapse

Class Method Details

.get_serializer_for(klass, serializer_assoc = nil) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/datasource/consumer_adapters/active_model_serializers.rb', line 36

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) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/datasource/consumer_adapters/active_model_serializers.rb', line 47

def to_datasource_select(result, klass, serializer = nil, serializer_assoc = nil, adapter = nil)
  adapter ||= Datasource::Base.default_adapter
  serializer ||= get_serializer_for(klass, serializer_assoc)
  result.unshift("*") if Datasource.config.simple_mode
  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.datasource_select)
  result_assocs = serializer.datasource_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