Are you inside a loop? Here is a possible way of doing it
def check(td, tt, trigger, key, ticket_changes)
if td.send(trigger)
unless tt.changes.key?(key)
@run = 0
return true
end
unless tt.changes[key][1] == ticket_changes
@run = 0
return true
end
end
return false
end
def metacheck(td, tt)
[[:tt_closed, :status, "Closed"],
[:tt_assignee, :assigned_to, td.tt_assignee]].each do |k|
return if check(td, tt, k[0], k[1], k[2])
end
end
metacheck(trigger_data, trouble_ticket)
I have used an array of triplets to check the conditions. The check can further be simplified as
def check(td, tt, trigger, key, ticket_changes)
return false unless td.send(trigger)
if !tt.changes.key?(key) or (tt.changes[key][1] != ticket_changes)
@run = 0
return true
end
return false
end
We can join all the conditions together. But I think this captures the original intension best.