Update
Thanks for SQB's answer. I've been refactored my code into this (I also update the nil checking before insert an array element into groups array):
sample_serializer_selector =
if own_collection
lambda { |s| SampleSerializer::Level10.new(s, 10).serializable_hash }
else
lambda { |s| ElementPermissionProxy.new(current_user, s, user_ids).serialized }
end
samples.each do |sample|
sample_name = get_name(sample)
serialized_sample = sample_serializer_selector.call(sample)
groups[sample_name] = (groups[sample_name] || []).push(serialized_sample)
end
Much more better :)