I'm not sure if there's a standard view where the placement of a success result should be in a conditional that can return multiple statuses. The success condition of this function is in the middle of the conditional block:
def redeem(pin)
success = false
message = nil
if !self.date_claimed.nil?
message = 'Reward already claimed'
elsif self.reward.redemption_pin == pin
success = true
self.date_claimed = Time.zone.now
self.save
else
message = "Wrong pin"
end
return {:success => success, :message => message}
end
I could rewrite it to be at the end:
def redeem(pin)
success = false
message = nil
if !self.date_claimed.nil?
message = 'Reward already claimed'
elsif self.reward.redemption_pin != pin
message = "Wrong pin"
else
success = true
self.date_claimed = Time.zone.now
self.save
end
return {:success => success, :message => message}
end
or I could rewrite it to be at the top but conditions become slightly more complex:
def redeem(pin)
success = false
message = nil
if self.reward.redemption_pin == pin && self.date_claimed.nil?
success = true
self.date_claimed = Time.zone.now
self.save
elsif date_claimed
message = 'Reward already claimed'
else
message = "Wrong pin"
end
return {:success => success, :message => message}
end
I personally think I prefer it to be at the beginning or the end, but in this function the end seems to be the best place.