finapps 0.15.2.pre → 0.16.0.pre
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.
- checksums.yaml +4 -4
- data/bin/finapps +1 -0
- data/lib/finapps/cli/cashflows.rb +37 -0
- data/lib/finapps/rest/budgets.rb +42 -35
- data/lib/finapps/rest/cashflows.rb +97 -0
- data/lib/finapps/rest/client.rb +2 -2
- data/lib/finapps/version.rb +1 -1
- data/lib/finapps.rb +1 -1
- metadata +3 -2
- data/lib/finapps/rest/cashflow.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb3b3440f5bca209610fcf02bbc8e0bac6f92ca6
|
4
|
+
data.tar.gz: 799674cd7b7444eeef4b05d5856cf442b90c65d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d287bb0bd73efd04435de7374b8293d03bc2507caaec0926b696dcfbc47a5231e4f6517cdcbd30edcdeb01f2e74c238eeea18f2496e4740da5c7a3083e64cd54
|
7
|
+
data.tar.gz: d3176f06cf949c9d010963e63f70b469cfe14f5d9475ba9771d10b9c7602d9c70450fa327c0f1d4aa2919376089b67a9822f28ae5891c867fc898b9457a0a5a7
|
data/bin/finapps
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'finapps'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
module FinApps
|
6
|
+
class CLI < Thor
|
7
|
+
|
8
|
+
desc 'cashflows', 'show'
|
9
|
+
|
10
|
+
def cashflows_show
|
11
|
+
|
12
|
+
begin
|
13
|
+
|
14
|
+
user_identifier = '53d17daf-909d-45d2-6fb6-d43b74d364cb'
|
15
|
+
user_token = '4JZmhcHVf3ODRJ9TMKF7N/1sHDY3M5Q49A9ToAy+TDE='
|
16
|
+
|
17
|
+
client.user_credentials!(user_identifier, user_token)
|
18
|
+
budget, error_messages = client.cashflows.show('2015-01-01T00:00:00Z', '2015-01-31T00:00:00Z')
|
19
|
+
if budget.present?
|
20
|
+
puts
|
21
|
+
puts 'cashflow results:'
|
22
|
+
pp budget
|
23
|
+
else
|
24
|
+
puts
|
25
|
+
puts 'unable to get cashflow'
|
26
|
+
error_messages.each { |m| puts m } if error_messages.present?
|
27
|
+
end
|
28
|
+
puts
|
29
|
+
|
30
|
+
rescue StandardError => error
|
31
|
+
rescue_standard_error(error)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
data/lib/finapps/rest/budgets.rb
CHANGED
@@ -27,42 +27,14 @@ module FinApps
|
|
27
27
|
|
28
28
|
result, error_messages = @client.send(path, :get)
|
29
29
|
if result.present? && error_messages.blank?
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
categories
|
35
|
-
logger.debug categories.pretty_inspect
|
36
|
-
|
37
|
-
raise 'Category results set for budget is not an array.' unless categories.respond_to?(:each)
|
38
|
-
categories['cats'].each do |c|
|
39
|
-
logger.debug "---------------------------------------------"
|
40
|
-
raise 'Unable to locate category id for current category record.' unless c.key?('cat_id')
|
41
|
-
category_id = c['cat_id']
|
42
|
-
logger.debug "category_id: #{category_id}"
|
43
|
-
|
44
|
-
raise 'Unable to locate category name for current category record.' unless c.key?('name')
|
45
|
-
category_name = c['name']
|
46
|
-
logger.debug "category_name: #{category_name}"
|
47
|
-
|
48
|
-
raise 'Unable to locate budget_amount for current category record.' unless c.key?('budget_amount')
|
49
|
-
budget_amount = c['budget_amount']
|
50
|
-
logger.debug "daily_budget_amount: #{budget_amount}"
|
51
|
-
|
52
|
-
raise 'Unable to locate number of days for current category record.' unless c.key?('days')
|
53
|
-
days = c['days']
|
54
|
-
logger.debug "days: #{days}"
|
55
|
-
|
56
|
-
date_range_budget_amount = budget_amount.to_f * days.to_i
|
57
|
-
logger.debug "budget_amount for #{days} days: #{date_range_budget_amount}"
|
58
|
-
|
59
|
-
budget.details << BudgetDetail.new({:category_id => category_id,
|
60
|
-
:category_name => category_name,
|
61
|
-
:budget_amount => date_range_budget_amount,
|
62
|
-
:expense_amount => expense_amount(category_id, transactions)})
|
63
|
-
end
|
64
|
-
end
|
30
|
+
categories = result_categories(result)
|
31
|
+
raise 'Category results-set for budget is not an array.' unless categories.respond_to?(:each)
|
32
|
+
|
33
|
+
transactions = result_transactions(result)
|
34
|
+
categories.each { |category| budget.details << result_category_to_budget_detail(category, transactions) }
|
65
35
|
|
36
|
+
logger.debug budget.pretty_inspect
|
37
|
+
end
|
66
38
|
|
67
39
|
logger.debug "##{__method__.to_s} => Completed"
|
68
40
|
return budget, error_messages
|
@@ -85,6 +57,41 @@ module FinApps
|
|
85
57
|
end
|
86
58
|
|
87
59
|
private
|
60
|
+
|
61
|
+
def result_categories(result)
|
62
|
+
extract_array(result, 'cats')
|
63
|
+
end
|
64
|
+
|
65
|
+
def result_category_to_budget_detail(category, transactions)
|
66
|
+
raise 'Unable to locate category id for current category record.' unless category.key?('cat_id')
|
67
|
+
category_id = category['cat_id']
|
68
|
+
|
69
|
+
raise 'Unable to locate category name for current category record.' unless category.key?('name')
|
70
|
+
category_name = category['name']
|
71
|
+
|
72
|
+
raise 'Unable to locate budget_amount for current category record.' unless category.key?('budget_amount')
|
73
|
+
budget_amount = category['budget_amount']
|
74
|
+
|
75
|
+
raise 'Unable to locate number of days for current category record.' unless category.key?('days')
|
76
|
+
days = category['days']
|
77
|
+
|
78
|
+
date_range_budget_amount = budget_amount.to_f * days.to_i
|
79
|
+
|
80
|
+
BudgetDetail.new({:category_id => category_id,
|
81
|
+
:category_name => category_name,
|
82
|
+
:budget_amount => date_range_budget_amount,
|
83
|
+
:expense_amount => expense_amount(category_id, transactions)})
|
84
|
+
end
|
85
|
+
|
86
|
+
def result_transactions(result)
|
87
|
+
extract_array(result, 'trans')
|
88
|
+
end
|
89
|
+
|
90
|
+
def extract_array(result, array_identifier)
|
91
|
+
array_container = result.find { |r| r.has_key?(array_identifier) }
|
92
|
+
array_container.present? ? array_container[array_identifier] : nil
|
93
|
+
end
|
94
|
+
|
88
95
|
def expense_amount(category_id, transactions = [])
|
89
96
|
amount = 0
|
90
97
|
if category_id.present? && transactions.respond_to?(:find)
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module FinApps
|
2
|
+
module REST
|
3
|
+
|
4
|
+
require 'erb'
|
5
|
+
|
6
|
+
class Cashflows < FinApps::REST::Resources
|
7
|
+
include FinApps::REST::Defaults
|
8
|
+
|
9
|
+
# @param [Date] start_date
|
10
|
+
# @param [Date] end_date
|
11
|
+
# @return [Hash, Array<String>]
|
12
|
+
def show(start_date, end_date)
|
13
|
+
logger.debug "##{__method__.to_s} => Started"
|
14
|
+
|
15
|
+
raise MissingArgumentsError.new 'Missing argument: start_date.' if start_date.blank?
|
16
|
+
logger.debug "##{__method__.to_s} => start_date: #{start_date}"
|
17
|
+
raise MissingArgumentsError.new 'Missing argument: end_date.' if end_date.blank?
|
18
|
+
logger.debug "##{__method__.to_s} => end_date: #{end_date}"
|
19
|
+
|
20
|
+
cashflow = Cashflow.new({:start_date => start_date,
|
21
|
+
:end_date => end_date,
|
22
|
+
:total_inflow_amount => 0,
|
23
|
+
:total_outflow_amount => 0,
|
24
|
+
:total_leftover_amount => 0,
|
25
|
+
:details => []})
|
26
|
+
|
27
|
+
end_point = Defaults::END_POINTS[:cashflow_show]
|
28
|
+
logger.debug "##{__method__.to_s} => end_point: #{end_point}"
|
29
|
+
|
30
|
+
path = end_point.sub(':start_date', ERB::Util.url_encode(start_date)).sub(':end_date', ERB::Util.url_encode(end_date))
|
31
|
+
logger.debug "##{__method__.to_s} => path: #{path}"
|
32
|
+
|
33
|
+
result, error_messages = @client.send(path, :get)
|
34
|
+
if result.present? && error_messages.blank?
|
35
|
+
|
36
|
+
summary = extract_value(result, 'summary')
|
37
|
+
raise 'Summary result-set for cashflow is not present.' if summary.nil?
|
38
|
+
raise 'Summary result-set for cashflow is not a hash.' unless summary.respond_to?(:key?)
|
39
|
+
|
40
|
+
raise 'Total in-flow value for cashflow is not present.' unless summary.key?('inflow')
|
41
|
+
cashflow.total_inflow_amount = summary['inflow']
|
42
|
+
|
43
|
+
raise 'Total out-flow value for cashflow is not present.' unless summary.key?('outflow')
|
44
|
+
cashflow.total_outflow_amount = summary['outflow']
|
45
|
+
|
46
|
+
raise 'Total left-over value for cashflow is not present.' unless summary.key?('diff')
|
47
|
+
cashflow.total_leftover_amount = summary['diff']
|
48
|
+
|
49
|
+
categories = extract_value(result, 'details')
|
50
|
+
raise 'Category results-set for cashflow is not an array.' unless categories.respond_to?(:each)
|
51
|
+
|
52
|
+
categories.each { |category| cashflow.details << result_category_to_cashflow_detail(category) }
|
53
|
+
end
|
54
|
+
|
55
|
+
logger.debug "##{__method__.to_s} => Completed"
|
56
|
+
return cashflow, error_messages
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def extract_value(result, array_identifier)
|
62
|
+
array_container = result.find { |r| r.has_key?(array_identifier) }
|
63
|
+
array_container.present? ? array_container[array_identifier] : nil
|
64
|
+
end
|
65
|
+
|
66
|
+
def result_category_to_cashflow_detail(category)
|
67
|
+
raise 'Unable to locate category id for current category record.' unless category.key?('cat')
|
68
|
+
category_id = category['cat']
|
69
|
+
|
70
|
+
raise 'Unable to locate inflow amount for current category record.' unless category.key?('inflow')
|
71
|
+
inflow_amount = category['inflow']
|
72
|
+
|
73
|
+
raise 'Unable to locate outflow amount for current category record.' unless category.key?('outflow')
|
74
|
+
outflow_amount = category['outflow']
|
75
|
+
|
76
|
+
raise 'Unable to locate left over amount for current category record.' unless category.key?('diff')
|
77
|
+
leftover_amount = category['diff']
|
78
|
+
|
79
|
+
BudgetDetail.new({:category_id => category_id,
|
80
|
+
:inflow_amount => inflow_amount,
|
81
|
+
:outflow_amount => outflow_amount,
|
82
|
+
:leftover_amount => leftover_amount})
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
class Cashflow < FinApps::REST::Resource
|
88
|
+
attr_accessor :start_date, :end_date,
|
89
|
+
:total_inflow_amount, :total_outflow_amount, :total_leftover_amount, :details
|
90
|
+
end
|
91
|
+
|
92
|
+
class CashflowDetail < FinApps::REST::Resource
|
93
|
+
attr_accessor :category_id, :inflow_amount, :outflow_amount, :leftover_amount
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
data/lib/finapps/rest/client.rb
CHANGED
@@ -7,7 +7,7 @@ module FinApps
|
|
7
7
|
|
8
8
|
attr_reader :connection, :users, :institutions, :user_institutions,
|
9
9
|
:transactions, :categories,
|
10
|
-
:budget_models, :budget_calculation, :budgets, :
|
10
|
+
:budget_models, :budget_calculation, :budgets, :cashflows,
|
11
11
|
:alert, :alert_definition, :alert_setting,
|
12
12
|
:rule_sets
|
13
13
|
|
@@ -202,7 +202,7 @@ module FinApps
|
|
202
202
|
@budget_models ||= FinApps::REST::BudgetModels.new self
|
203
203
|
@budget_calculation ||= FinApps::REST::BudgetCalculation.new self
|
204
204
|
@budgets ||= FinApps::REST::Budgets.new self
|
205
|
-
@
|
205
|
+
@cashflows ||= FinApps::REST::Cashflows.new self
|
206
206
|
@alert ||= FinApps::REST::Alert.new self
|
207
207
|
@alert_definition ||= FinApps::REST::AlertDefinition.new self
|
208
208
|
@alert_setting ||= FinApps::REST::AlertSetting.new self
|
data/lib/finapps/version.rb
CHANGED
data/lib/finapps.rb
CHANGED
@@ -27,7 +27,7 @@ require 'finapps/rest/categories'
|
|
27
27
|
require 'finapps/rest/budget_models'
|
28
28
|
require 'finapps/rest/budget_calculation'
|
29
29
|
require 'finapps/rest/budgets'
|
30
|
-
require 'finapps/rest/
|
30
|
+
require 'finapps/rest/cashflows'
|
31
31
|
require 'finapps/rest/alert'
|
32
32
|
require 'finapps/rest/alert_definition'
|
33
33
|
require 'finapps/rest/alert_setting'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: finapps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erich Quintero
|
@@ -192,6 +192,7 @@ files:
|
|
192
192
|
- finapps.gemspec
|
193
193
|
- lib/finapps.rb
|
194
194
|
- lib/finapps/cli/budgets.rb
|
195
|
+
- lib/finapps/cli/cashflows.rb
|
195
196
|
- lib/finapps/cli/common.rb
|
196
197
|
- lib/finapps/cli/institutions.rb
|
197
198
|
- lib/finapps/cli/users.rb
|
@@ -204,7 +205,7 @@ files:
|
|
204
205
|
- lib/finapps/rest/budget_calculation.rb
|
205
206
|
- lib/finapps/rest/budget_models.rb
|
206
207
|
- lib/finapps/rest/budgets.rb
|
207
|
-
- lib/finapps/rest/
|
208
|
+
- lib/finapps/rest/cashflows.rb
|
208
209
|
- lib/finapps/rest/categories.rb
|
209
210
|
- lib/finapps/rest/client.rb
|
210
211
|
- lib/finapps/rest/connection.rb
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module FinApps
|
2
|
-
module REST
|
3
|
-
|
4
|
-
require 'erb'
|
5
|
-
|
6
|
-
class Cashflow < FinApps::REST::Resources
|
7
|
-
include FinApps::REST::Defaults
|
8
|
-
|
9
|
-
# @param [Date] start_date
|
10
|
-
# @param [Date] end_date
|
11
|
-
# @return [Hash, Array<String>]
|
12
|
-
def show(start_date, end_date)
|
13
|
-
logger.debug "##{__method__.to_s} => Started"
|
14
|
-
|
15
|
-
raise MissingArgumentsError.new 'Missing argument: start_date.' if start_date.blank?
|
16
|
-
logger.debug "##{__method__.to_s} => start_date: #{start_date}"
|
17
|
-
raise MissingArgumentsError.new 'Missing argument: end_date.' if end_date.blank?
|
18
|
-
logger.debug "##{__method__.to_s} => end_date: #{end_date}"
|
19
|
-
|
20
|
-
end_point = Defaults::END_POINTS[:cashflow_show]
|
21
|
-
logger.debug "##{__method__.to_s} => end_point: #{end_point}"
|
22
|
-
|
23
|
-
path = end_point.sub(':start_date', ERB::Util.url_encode(start_date)).sub(':end_date', ERB::Util.url_encode(end_date))
|
24
|
-
logger.debug "##{__method__.to_s} => path: #{path}"
|
25
|
-
|
26
|
-
budget, error_messages = @client.send(path, :get)
|
27
|
-
|
28
|
-
logger.debug "##{__method__.to_s} => Completed"
|
29
|
-
return budget, error_messages
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|