I've got below implementation for my controller and show action which implements MiniMagick
gem. I've just wondering is there any better way to write it down? If block in a separate, private method maybe?
def show
identification_document = IdentificationDocument.find(params[:id])
authorize identification_document
return unless identification_document
if params.has_key?(:thumbnail)
document = identification_document.id_document
image = MiniMagick::Image.read(document.file.read)
image.resize("50x60")
scaled_image_bytes = image.to_blob
send_data(scaled_image_bytes, filename: identification_document.file_name)
else
send_data(identification_document.id_document.file.read, filename: identification_document.file_name)
end
end
1 Answer 1
Rubocop Report
Conventions
Prefer key?
over has_key?
(PreferredHashMethods).
if params.has_key?(:thumbnail)
if params.key?(:thumbnail)
Prefer single quoted over double quoted string literals if you don't need interpolation or special symbols (StringLiterals).
image.resize("50x60")
image.resize('50x60')
Complexity
If block in a separate, private method maybe?
The AbcSize complexity of your method is too high. [19.65/15] So your suggestion to put the following code in a private method, is justified.
document = identification_document.id_document image = MiniMagick::Image.read(document.file.read) image.resize("50x60") scaled_image_bytes = image.to_blob
Readability
Keep line sizes below 80 characters:
send_data(identification_document.id_document.file.read, filename: identification_document.file_name)
-
\$\begingroup\$ The under 80 chars rule is outdated. Screens have gotten significantly bigger and more pixels are available. There should definitely be a max char length enforced, but it can easily be 120 or 150 depending on the developers setups in an organization. \$\endgroup\$ekampp– ekampp2019年08月04日 06:54:41 +00:00Commented Aug 4, 2019 at 6:54
-
\$\begingroup\$ Single quote vs double quote is against the rails convention. Rails convention is double quotes all around, so I would suggest keeping the double quotes. \$\endgroup\$ekampp– ekampp2019年08月04日 06:56:01 +00:00Commented Aug 4, 2019 at 6:56
-
\$\begingroup\$ @ekampp Thanks for the feedback, you have a link to more recent guidelines, or are you talking out of personal experience? \$\endgroup\$dfhwze– dfhwze2019年08月04日 08:11:35 +00:00Commented Aug 4, 2019 at 8:11
-
\$\begingroup\$ regarding the 80 char rule, that's from experience. The Rails convention if from reading the Rails documentation and source code. \$\endgroup\$ekampp– ekampp2019年08月05日 08:46:18 +00:00Commented Aug 5, 2019 at 8:46