pacioli 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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