class MoneyMove < ApplicationRecord belongs_to :homie def self.create_move(params) return false unless valid_money_move?(params) move_from = create_move_from(params) if double_money_move?(params) move_to = create_move_to(params) MoneyMove.transaction do move_from.save! if move_from.present? move_to.save! end end class << self private def valid_money_move?(params) params[:amount].present? && params[:to_homie_id].present? end def double_money_move?(params) params[:from_homie_id].present? && params[:to_homie_id].present? end def from_source_name(params) if double_money_move?(params) Homie.find(params[:from_homie_id]).name else 'External' end end def create_move_from(params) to_homie_name = Homie.find(params[:to_homie_id]).name new_desc = "[#{to_homie_name}] #{params[:description]}".lstrip MoneyMove.new( homie_id: params[:from_homie_id], amount: -params[:amount].to_d, description: new_desc ) end def create_move_to(params) new_desc = "[#{from_source_name(params)}] #{params[:description]}".lstrip MoneyMove.new( homie_id: params[:to_homie_id], amount: params[:amount].to_d, description: new_desc ) end end end