I have snippet that really look ugly but I don't know how to refactor it:
if owner
samples.each do |sample|
sample_name = get_name(sample) # logical to get correct name
serialized_sample = SampleSerializer::Level10.new(sample, 10).serializable_hash
groups[sample_name] = groups[sample_name] == nil
? [].push(serialized_sample)
: groups[sample_name].push(serialized_sample)
end
else
samples.each do |sample|
sample_name = get_name(sample) # logical to get correct name
serialized_sample = ElementPermissionProxy.new(current_user, sample, user_ids).serialized
groups[sample_name] = groups[sample_name] == nil
? [].push(serialized_sample)
: groups[sample_name].push(serialized_sample)
end
end
As you can see the code block inside if .. else is mostly the same except I need to use 2 difference class on each case (SampleSerializer and ElementPermissionProxy).
I can change into:
samples.each do |sample|
sample_name = get_name(sample) # logical to get correct name
serialized_sample = owner
? SampleSerializer::Level10.new(sample, 10).serializable_hash
: ElementPermissionProxy.new(current_user, sample, user_ids).serialized
groups[sample_name] = groups[sample_name] == nil
? [].push(serialized_sample)
: groups[sample_name].push(serialized_sample)
end
However, the samples contains a few thousands of element, so that I have check the condition with every sample element. And I don't like this way of optimization.
In addition, I would really appreciate if someone help me with this block also:
groups[sample_name] = groups[sample_name] == nil
? [].push(serialized_sample)
: groups[sample_name].push(serialized_sample)