Class: Deb::Transaction
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Deb::Transaction
- Defined in:
- app/models/deb/transaction.rb
Class Method Summary collapse
Instance Method Summary collapse
- #credit_items_presence ⇒ Object
- #debit_items_presence ⇒ Object
- #proper_amounts ⇒ Object
- #rollback! ⇒ Object
Class Method Details
.start(&block) ⇒ Object
17 18 19 |
# File 'app/models/deb/transaction.rb', line 17 def self.start(&block) Docile.dsl_eval(Deb::Builder.new, &block).build end |
.start!(&block) ⇒ Object
31 32 33 34 35 36 37 |
# File 'app/models/deb/transaction.rb', line 31 def self.start!(&block) transaction do start(&block).tap do |t| t.save! end end end |
Instance Method Details
#credit_items_presence ⇒ Object
43 44 45 |
# File 'app/models/deb/transaction.rb', line 43 def credit_items_presence errors.add(:base, "no credit items") if credit_items.blank? end |
#debit_items_presence ⇒ Object
39 40 41 |
# File 'app/models/deb/transaction.rb', line 39 def debit_items_presence errors.add(:base, "no debit items") if debit_items.blank? end |
#proper_amounts ⇒ Object
47 48 49 |
# File 'app/models/deb/transaction.rb', line 47 def proper_amounts errors.add(:base, "wrong credit total is not equal debit total") unless credit_items.collect(&:amount).reduce(:+) == debit_items.collect(&:amount).reduce(:+) end |
#rollback! ⇒ Object
21 22 23 24 25 26 27 28 29 |
# File 'app/models/deb/transaction.rb', line 21 def rollback! tran = self self.class.start! do tran.debit_items.each { |di| credit(di.account, di.amount) } tran.credit_items.each { |ci| debit(ci.account, ci.amount) } reference(tran) description("Rollback of #{tran.description}") end end |