bouch 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9d3a4f13ab472a43a9e8b40cbfe763c10966bdea
4
- data.tar.gz: 16fe655a734aa70473303c03244b9656c175be9e
2
+ SHA256:
3
+ metadata.gz: fb58a99429b5afdc33cb7f65053580cf742aca9da08f2461861429ceaa75325f
4
+ data.tar.gz: e15f9cab5a04bebd6ce4cd6f1aca42943ee82f18a8359911632709572559aabd
5
5
  SHA512:
6
- metadata.gz: 57f18fa8111bdba78c8a91db428c7d0f335c8f84862ceb2ff4efe07ac2d8985a0091eb195d1bb6c5d259d316df34e6100c1c8fe103fd0c5979df85b71def8c43
7
- data.tar.gz: e3a2f08b1fe37e449bd065eb6f6f70de9e8b446dbb8fd95410d5e9d763597cfc61c522d5206fbbc98a0c753c203a682deb9c3b1485420b431bbfd00176d97731
6
+ metadata.gz: 0a396b50771862a7ae3187f8da5ee6bd9e903b0c2e58a02b383541412bcc131c86f1ed0b0b79633e8cc92d711aa460bc7c1e4ac1f399e7050dd26b0505e297ec
7
+ data.tar.gz: b17ba90c8d8e9b4b090282c85accc8a6bcdaa3e9b0983c4b4122e9c72e01bdb2c673db304a2caeeb070a4dfebc829ea5a9bba348982703217a135ee68b6b13e5
@@ -1,34 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bouch (1.1.0)
4
+ bouch (1.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  ast (2.4.0)
10
10
  diff-lcs (1.3)
11
- docile (1.3.1)
12
- json (2.1.0)
13
- parallel (1.12.1)
14
- parser (2.5.1.0)
11
+ docile (1.3.2)
12
+ json (2.3.0)
13
+ parallel (1.19.1)
14
+ parser (2.7.0.1)
15
15
  ast (~> 2.4.0)
16
- powerpack (0.1.1)
16
+ powerpack (0.1.2)
17
17
  rainbow (3.0.0)
18
- rake (12.3.1)
19
- rspec (3.7.0)
20
- rspec-core (~> 3.7.0)
21
- rspec-expectations (~> 3.7.0)
22
- rspec-mocks (~> 3.7.0)
23
- rspec-core (3.7.1)
24
- rspec-support (~> 3.7.0)
25
- rspec-expectations (3.7.0)
18
+ rake (13.0.1)
19
+ rspec (3.9.0)
20
+ rspec-core (~> 3.9.0)
21
+ rspec-expectations (~> 3.9.0)
22
+ rspec-mocks (~> 3.9.0)
23
+ rspec-core (3.9.1)
24
+ rspec-support (~> 3.9.1)
25
+ rspec-expectations (3.9.0)
26
26
  diff-lcs (>= 1.2.0, < 2.0)
27
- rspec-support (~> 3.7.0)
28
- rspec-mocks (3.7.0)
27
+ rspec-support (~> 3.9.0)
28
+ rspec-mocks (3.9.0)
29
29
  diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.7.0)
31
- rspec-support (3.7.1)
30
+ rspec-support (~> 3.9.0)
31
+ rspec-support (3.9.2)
32
32
  rubocop (0.56.0)
33
33
  parallel (~> 1.10)
34
34
  parser (>= 2.5)
@@ -36,13 +36,13 @@ GEM
36
36
  rainbow (>= 2.2.2, < 4.0)
37
37
  ruby-progressbar (~> 1.7)
38
38
  unicode-display_width (~> 1.0, >= 1.0.1)
39
- ruby-progressbar (1.9.0)
40
- simplecov (0.16.1)
39
+ ruby-progressbar (1.10.1)
40
+ simplecov (0.17.1)
41
41
  docile (~> 1.1)
42
42
  json (>= 1.8, < 3)
43
43
  simplecov-html (~> 0.10.0)
44
44
  simplecov-html (0.10.2)
45
- unicode-display_width (1.4.0)
45
+ unicode-display_width (1.6.0)
46
46
 
47
47
  PLATFORMS
48
48
  ruby
@@ -59,4 +59,4 @@ RUBY VERSION
59
59
  ruby 2.5.0p0
60
60
 
61
61
  BUNDLED WITH
62
- 1.16.1
62
+ 1.17.3
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Bouch
2
- [![pipeline status](https://gitlab.com/ssofos/bouch/badges/master/pipeline.svg)](https://gitlab.com/ssofos/bouch/commits/master) [![coverage report](https://gitlab.com/ssofos/bouch/badges/master/coverage.svg)](https://gitlab.com/ssofos/bouch/commits/master)
2
+ [![Gem Version](https://badge.fury.io/rb/bouch.svg)](https://badge.fury.io/rb/bouch) [![pipeline status](https://gitlab.com/ssofos/bouch/badges/master/pipeline.svg)](https://gitlab.com/ssofos/bouch/commits/master) [![coverage report](https://gitlab.com/ssofos/bouch/badges/master/coverage.svg)](https://gitlab.com/ssofos/bouch/commits/master)
3
3
 
4
4
  `Bouch` is the budget pouch. A simple tool to calculate and project your annual personal budget based on fiscal quarter expenditures, income, assets, and debts.
5
5
 
@@ -44,7 +44,9 @@ Budget Annual Total: 12100.00
44
44
  Budget Annual Income: 28808.00
45
45
  Budget Income Percent: 42.00%
46
46
  ----------------------
47
- Assets Total: 1000.00
47
+ Assets Total: 500.00
48
+ Equity Total: 500.00
49
+ Net Worth: 1000.00
48
50
  ----------------------
49
51
  Debt Total: 420.00
50
52
  Debt Ratio: 0.4200
@@ -58,22 +60,23 @@ To use bouch to calculate your own budget you must create a customized budget po
58
60
 
59
61
  Budget pouch files are written in Ruby friendly YAML and currently use the following schema:
60
62
 
61
- * Deeply nested mappings, also know as hashes
62
- * Think of hashes as simple groupings of keys and values
63
+ * Nested mappings, also know as hashes in Ruby
64
+ * Think of hashes as simple groupings of keys value pairs
63
65
  * Primary hash keys:
64
66
  * **Budget**
65
67
  * **Salary**
66
68
  * **Assets**
69
+ * **Equity**
67
70
  * **Debts**
68
71
  * **Budget** nested keys and values:
69
72
  * **Q1**
70
73
  * foo
71
74
  * Value: Integer or Float
72
- * Equals a budget item's quarterly cost
75
+ * Equals a single budget item's quarterly cost
73
76
  * bar
74
77
  * **cost**
75
78
  * Value: Integer or Float
76
- * Equals the monthly cost of any repeated payment
79
+ * Equals the repeated budget item's monthly cost
77
80
  * **repeat**
78
81
  * Value: true
79
82
  * Enables quarterly auto-calculation of the repeat payment
@@ -94,8 +97,12 @@ Budget pouch files are written in Ruby friendly YAML and currently use the follo
94
97
  * foo
95
98
  * Value: Integer or Float
96
99
  * Equals an asset's total valued amount
97
- * **Debts** nested keys and values:
100
+ * **Equity** nested keys and values:
98
101
  * bar
102
+ * Value: Integer or Float
103
+ * Equals the total value of equity in a specific asset
104
+ * **Debts** nested keys and values:
105
+ * fizz
99
106
  * Value: Integer or Float
100
107
  * Equals a debt's total valued amount
101
108
  * All non-primary nested keys are case insensitive
@@ -134,6 +141,7 @@ Salary:
134
141
  frequency: 2
135
142
  Assets:
136
143
  foo: 500
144
+ Equity:
137
145
  bar: 500
138
146
  Debts:
139
147
  baz: 120
@@ -6,19 +6,21 @@ require 'bouch/calc'
6
6
  # Calculate and create simple financial budgets
7
7
  # by parsing a single YAML file as input
8
8
  class Bouch
9
- attr_accessor :assets, :debts, :pouch, :quarters
9
+ attr_accessor :assets, :debts, :equity, :net_worth, :pouch, :quarters
10
10
  include BouchCalculate
11
11
 
12
12
  def initialize(file)
13
13
  @assets = Array.new
14
14
  @debts = Array.new
15
+ @equity = Array.new
16
+ @net_worth = nil
15
17
  @pouch = YAML.safe_load(IO.read(file))
16
18
  @quarters = Hash.new
17
19
  end
18
20
 
19
21
  # Summarize and show aggregate asset totals
20
22
  def show_assets_total
21
- calc_assets(@pouch['Assets']) if @assets.empty?
23
+ calc_assets(@pouch['Assets'], 'assets') if @assets.empty?
22
24
  puts '----------------------'
23
25
  puts format('%-30s %.2f', 'Assets Total:', @assets.sum)
24
26
  end
@@ -33,14 +35,28 @@ class Bouch
33
35
  # Summarize and show debt ratio
34
36
  def show_debt_ratio
35
37
  calc_assets(@pouch['Assets']) if @assets.empty?
38
+ calc_assets(@pouch['Equity'], 'equity') if @equity.empty?
39
+ calc_net_worth(@assets, @equity) if @net_worth.nil?
36
40
  calc_debts(@pouch['Debts']) if @debts.empty?
37
- puts format('%-30s %.4f', 'Debt Ratio:', calc_debt_ratio(@debts.sum, @assets.sum))
41
+ puts format('%-30s %.4f', 'Debt Ratio:', calc_debt_ratio(@debts.sum, @net_worth))
38
42
  puts format('%-30s %.2f%s', 'Debt Ratio Percent:',
39
- calc_debt_ratio_percent(calc_debt_ratio(@debts.sum, @assets.sum)),
43
+ calc_debt_ratio_percent(calc_debt_ratio(@debts.sum, @net_worth)),
40
44
  '%')
41
45
  puts '----------------------'
42
46
  end
43
47
 
48
+ # Summarize and show aggregate equity totals
49
+ def show_equity_total
50
+ calc_assets(@pouch['Equity'], 'equity') if @equity.empty?
51
+ puts format('%-30s %.2f', 'Equity Total:', @equity.sum)
52
+ end
53
+
54
+ # Summarize and show Net Worth
55
+ def show_net_worth
56
+ calc_net_worth(@assets, @equity) if @net_worth.nil?
57
+ puts format('%-30s %.2f', 'Net Worth:', @net_worth)
58
+ end
59
+
44
60
  # Summarize and show all financial quarter budgets
45
61
  def show_quarters
46
62
  calc_quarters_raw(@pouch['Budget']) if @quarters.empty?
@@ -83,6 +99,8 @@ class Bouch
83
99
  show_annual_income
84
100
  show_budget_percentage
85
101
  show_assets_total
102
+ show_equity_total
103
+ show_net_worth
86
104
  show_debts_total
87
105
  show_debt_ratio
88
106
  end
@@ -3,9 +3,14 @@
3
3
  # Financial budget calculation and operations for Bouch
4
4
  module BouchCalculate
5
5
  # Calculate asset value aggregate amount
6
- def calc_assets(assets)
6
+ def calc_assets(assets, type = 'assets')
7
7
  assets.each_value do |value|
8
- @assets.push(value)
8
+ case type
9
+ when 'assets'
10
+ @assets.push(value)
11
+ when 'equity'
12
+ @equity.push(value)
13
+ end
9
14
  end
10
15
  end
11
16
 
@@ -31,6 +36,11 @@ module BouchCalculate
31
36
  (debt_ratio.to_f * 100).round(2)
32
37
  end
33
38
 
39
+ # Calcuate a Net Worth sum
40
+ def calc_net_worth(assets = [], equity = [])
41
+ @net_worth = (assets + equity).sum.to_f.round(2)
42
+ end
43
+
34
44
  # Calculate a quarterly repeating budget item amount
35
45
  def calc_repeating(item)
36
46
  (item.to_f * 3).round(2)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Bouch
4
- VERSION = '1.1.0'
4
+ VERSION = '1.2.0'
5
5
  end
@@ -29,6 +29,7 @@ Salary:
29
29
  frequency: 2
30
30
  Assets:
31
31
  foo: 500
32
+ Equity:
32
33
  bar: 500
33
34
  Debts:
34
35
  baz: 120
@@ -68,6 +68,17 @@ describe BouchCalculate do
68
68
  end
69
69
  end
70
70
 
71
+ describe '.calc_net_worth' do
72
+ context 'given an two Arrays of assets and equity' do
73
+ it 'returns a Float number' do
74
+ expect(@bouch.calc_net_worth([500], [500])).to be_a_kind_of(Float)
75
+ end
76
+ it 'returns a net worth sum of assets and equity' do
77
+ expect(@bouch.calc_net_worth([500], [500])).to eq(1000.00)
78
+ end
79
+ end
80
+ end
81
+
71
82
  describe '.calc_repeating' do
72
83
  context 'given a numerical cost amount' do
73
84
  it 'returns a Float number' do
@@ -9,7 +9,7 @@ describe 'Pouch YAML Schema' do
9
9
  end
10
10
 
11
11
  it 'has four major Hash keys' do
12
- expect(@pouch.keys.length).to eq(4)
12
+ expect(@pouch.keys.length).to eq(5)
13
13
  end
14
14
 
15
15
  it 'has a Hash key named Budget' do
@@ -24,6 +24,10 @@ describe 'Pouch YAML Schema' do
24
24
  expect(@pouch.key?('Assets')).to be_truthy
25
25
  end
26
26
 
27
+ it 'has a Hash key named Equity' do
28
+ expect(@pouch.key?('Equity')).to be_truthy
29
+ end
30
+
27
31
  it 'has a Hash key named Debts' do
28
32
  expect(@pouch.key?('Debts')).to be_truthy
29
33
  end
@@ -24,6 +24,18 @@ describe Bouch do
24
24
  end
25
25
  end
26
26
 
27
+ describe '#equity' do
28
+ it 'returns an empty Array of equity' do
29
+ expect(@bouch.equity).to be_empty
30
+ end
31
+ end
32
+
33
+ describe '#net_worth' do
34
+ it 'returns a Nil net_worth' do
35
+ expect(@bouch.net_worth).to be_nil
36
+ end
37
+ end
38
+
27
39
  describe '#pouch' do
28
40
  it 'loads the budget pouch YAML file' do
29
41
  expect(@bouch.pouch).to eq(YAML.safe_load(IO.read(@yaml)))
@@ -54,6 +66,18 @@ describe Bouch do
54
66
  end
55
67
  end
56
68
 
69
+ describe '.show_equity_total' do
70
+ it 'outputs financial budget equity sum' do
71
+ expect { @bouch.show_equity_total }.to output.to_stdout
72
+ end
73
+ end
74
+
75
+ describe '.show_net_worth' do
76
+ it 'outputs financial budget net worth' do
77
+ expect { @bouch.show_net_worth }.to output.to_stdout
78
+ end
79
+ end
80
+
57
81
  describe '.show_quarters' do
58
82
  it 'outputs financial budget quarters sums' do
59
83
  expect { @bouch.show_quarters }.to output.to_stdout
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bouch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane R. Sofos
@@ -131,8 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0'
133
133
  requirements: []
134
- rubyforge_project:
135
- rubygems_version: 2.6.14
134
+ rubygems_version: 3.0.3
136
135
  signing_key:
137
136
  specification_version: 4
138
137
  summary: A simple tool to calculate and project your annual personal budget based