double_double 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -2,6 +2,5 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.2
4
4
  - 1.9.3
5
- - rbx-19mode
6
5
  - ruby-head
7
- script: rake
6
+ script: rake
@@ -79,8 +79,9 @@ module DoubleDouble
79
79
  def side_balance(is_debit, hash)
80
80
  a = is_debit ? DoubleDouble::DebitAmount.scoped : DoubleDouble::CreditAmount.scoped
81
81
  a = a.where(account_id: self.id)
82
- a = a.by_context(hash[:context]) if hash.has_key? :context
83
- a = a.by_accountee(hash[:accountee]) if hash.has_key? :accountee
82
+ a = a.by_context(hash[:context]) if hash.has_key? :context
83
+ a = a.by_accountee(hash[:accountee]) if hash.has_key? :accountee
84
+ a = a.by_transaction_type(hash[:transaction_type]) if hash.has_key? :transaction_type
84
85
  Money.new(a.sum(:amount_cents))
85
86
  end
86
87
  # The balance method that derived Accounts utilize.
@@ -14,8 +14,9 @@ module DoubleDouble
14
14
  belongs_to :accountee, polymorphic: true
15
15
  belongs_to :context, polymorphic: true
16
16
 
17
- scope :by_accountee, ->(a) { where(accountee_id: a.id, accountee_type: a.class.base_class) }
18
- scope :by_context, ->(c) { where(context_id: c.id, context_type: c.class.base_class) }
17
+ scope :by_accountee, ->(a) { where(accountee_id: a.id, accountee_type: a.class.base_class) }
18
+ scope :by_context, ->(c) { where(context_id: c.id, context_type: c.class.base_class) }
19
+ scope :by_transaction_type, ->(t) { joins(:transaction).where(double_double_transactions: {transaction_type_id: t}) }
19
20
 
20
21
  validates_presence_of :type, :transaction, :account
21
22
  validates :amount_cents, numericality: {greater_than: 0}
@@ -1,3 +1,3 @@
1
1
  module DoubleDouble
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
@@ -114,6 +114,22 @@ module DoubleDouble
114
114
  t.errors['base'].should == ['The credit and debit amounts are not equal']
115
115
  end
116
116
 
117
+ describe 'transaction reversing' do
118
+ it "should negate the same non-reversed transaction" do
119
+ args_normal = {description: 'reverse test',
120
+ debits: [{account: 'Cash_11', amount: 10}],
121
+ credits: [{account: 'Loan_12', amount: 9},
122
+ {account: 'Loan_12', amount: 1}]}
123
+ args_reversed = args_normal.merge({reversed: true})
124
+ Transaction.create!(args_normal)
125
+ Account.named('Cash_11').balance.should eq(10)
126
+ Account.named('Loan_12').balance.should eq(10)
127
+ Transaction.create!(args_reversed)
128
+ Account.named('Cash_11').balance.should eq(0)
129
+ Account.named('Loan_12').balance.should eq(0)
130
+ end
131
+ end
132
+
117
133
  describe 'transaction_types' do
118
134
  it 'should create a Transaction with a TransactionType of Unassigned if none is passed in' do
119
135
  t = Transaction.build(
@@ -136,6 +152,29 @@ module DoubleDouble
136
152
  end
137
153
  end
138
154
 
155
+ describe 'transaction_types, when multiple types exist together' do
156
+ it 'should segment based on transaction type' do
157
+ DoubleDouble::Liability.create!(name:'hotdogs', number: 1015)
158
+ DoubleDouble::Liability.create!(name:'junk', number: 1016)
159
+ TransactionType.create!(description: 'ketchup')
160
+ TransactionType.create!(description: 'onions')
161
+ Transaction.create!(
162
+ description: 'processed ketchup',
163
+ transaction_type: TransactionType.of(:ketchup),
164
+ debits: [{account: 'junk', amount: 60, context: @campaign1, accountee: @user1}],
165
+ credits: [{account: 'hotdogs', amount: 60, context: @campaign1, accountee: @user1}])
166
+ DoubleDouble::Account.named('hotdogs').credits_balance({context: @campaign1, accountee: @user1, transaction_type: TransactionType.of(:ketchup)}).should == 60
167
+ DoubleDouble::Account.named('hotdogs').credits_balance({context: @campaign1, accountee: @user1, transaction_type: TransactionType.of(:onions)}).should == 0
168
+ Transaction.create!(
169
+ description: 'processed onions',
170
+ transaction_type: TransactionType.of(:onions),
171
+ debits: [{account: 'junk', amount: 5, context: @campaign1, accountee: @user1}],
172
+ credits: [{account: 'hotdogs', amount: 5, context: @campaign1, accountee: @user1}])
173
+ DoubleDouble::Account.named('hotdogs').credits_balance({context: @campaign1, accountee: @user1, transaction_type: TransactionType.of(:ketchup)}).should == 60
174
+ DoubleDouble::Account.named('hotdogs').credits_balance({context: @campaign1, accountee: @user1, transaction_type: TransactionType.of(:onions)}).should == 5
175
+ end
176
+ end
177
+
139
178
  describe 'amount accountee references' do
140
179
  it 'should allow a Transaction to be built describing the accountee in the hash' do
141
180
  Transaction.create!(
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: double_double
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-06 00:00:00.000000000 Z
12
+ date: 2013-02-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: money