pacioli 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -43,34 +43,30 @@ module Pacioli
43
43
  self.companyable = companyable_object
44
44
  end
45
45
 
46
- def add_asset_account(options={})
47
- account = AssetAccount.create!(options)
46
+ def add_account(account)
48
47
  self.accounts << account
48
+ CompanyValidator.for(self).execute
49
49
  account
50
50
  end
51
51
 
52
+ def add_asset_account(options={})
53
+ add_account AssetAccount.new(options)
54
+ end
55
+
52
56
  def add_equity_account(options={})
53
- account = EquityAccount.create!(options)
54
- self.accounts << account
55
- account
57
+ add_account EquityAccount.new(options)
56
58
  end
57
59
 
58
60
  def add_liability_account(options={})
59
- account = LiabilityAccount.create!(options)
60
- self.accounts << account
61
- account
61
+ add_account LiabilityAccount.new(options)
62
62
  end
63
63
 
64
64
  def add_income_account(options={})
65
- account = IncomeAccount.create!(options)
66
- self.accounts << account
67
- account
65
+ add_account IncomeAccount.new(options)
68
66
  end
69
67
 
70
68
  def add_expense_account(options={})
71
- account = ExpenseAccount.create!(options)
72
- self.accounts << account
73
- account
69
+ add_account ExpenseAccount.new(options)
74
70
  end
75
71
 
76
72
  def record_journal_entry(&block)
@@ -1,4 +1,5 @@
1
1
  module Pacioli
2
2
  class AccountsNotBalancedException < Exception; end
3
3
  class PostingRuleNotBalancedException < Exception; end
4
+ class CompanyAccountException < Exception; end
4
5
  end
@@ -0,0 +1,20 @@
1
+ module Pacioli
2
+ class CompanyValidator
3
+ attr_accessor :company
4
+
5
+ def self.for(company)
6
+ validator = new
7
+ validator.company = company
8
+ validator
9
+ end
10
+
11
+ def execute
12
+ validate_accounts
13
+ end
14
+
15
+ def validate_accounts
16
+ accounts = self.company.accounts.map(&:name)
17
+ raise Pacioli::CompanyAccountException, "The company has multiple accounts with the same name: '#{accounts.detect{ |e| accounts.count(e) > 1 }}' already exists" unless accounts.detect{ |e| accounts.count(e) > 1 }.nil?
18
+ end
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Pacioli
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/lib/pacioli.rb CHANGED
@@ -32,3 +32,4 @@ require "pacioli/exception"
32
32
 
33
33
  require "pacioli/validations/journal_entry_validator"
34
34
  require "pacioli/validations/posting_rule_validator"
35
+ require "pacioli/validations/company_validator"
@@ -38,6 +38,14 @@ describe Pacioli::Account do
38
38
  account.should be_income
39
39
  end
40
40
 
41
+ it "should raise an error when trying to add multiple accounts with the same name" do
42
+ @company.add_income_account name: "Sales"
43
+ lambda {
44
+ @company.add_income_account name: "Sales"
45
+ }.should raise_error(Pacioli::CompanyAccountException, "The company has multiple accounts with the same name: 'Sales' already exists")
46
+
47
+ end
48
+
41
49
  end
42
50
 
43
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pacioli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2013-01-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70108660640340 !ruby/object:Gem::Requirement
16
+ requirement: &70282124011920 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70108660640340
24
+ version_requirements: *70282124011920
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activerecord
27
- requirement: &70108660639840 !ruby/object:Gem::Requirement
27
+ requirement: &70282124011420 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70108660639840
35
+ version_requirements: *70282124011420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: i18n
38
- requirement: &70108660639420 !ruby/object:Gem::Requirement
38
+ requirement: &70282124011000 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70108660639420
46
+ version_requirements: *70282124011000
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: combustion
49
- requirement: &70108660638880 !ruby/object:Gem::Requirement
49
+ requirement: &70282124010460 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 0.3.1
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70108660638880
57
+ version_requirements: *70282124010460
58
58
  description: A double-entry bookkeeping system for Ruby on Rails
59
59
  email:
60
60
  - jeffmess@gmail.com
@@ -86,6 +86,7 @@ files:
86
86
  - lib/pacioli/liability_account.rb
87
87
  - lib/pacioli/posting_rule.rb
88
88
  - lib/pacioli/transaction.rb
89
+ - lib/pacioli/validations/company_validator.rb
89
90
  - lib/pacioli/validations/journal_entry_validator.rb
90
91
  - lib/pacioli/validations/posting_rule_validator.rb
91
92
  - lib/pacioli/version.rb