55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# 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)
result.concat(serializer._attributes.keys)
else
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|
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
|