finapps 4.0.6 → 4.0.7

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/lib/finapps.rb +8 -0
  4. data/lib/finapps/rest/alert_definitions.rb +24 -0
  5. data/lib/finapps/rest/alert_occurrences.rb +25 -0
  6. data/lib/finapps/rest/client.rb +8 -0
  7. data/lib/finapps/rest/consumers_portfolios.rb +20 -0
  8. data/lib/finapps/rest/portfolio_reports.rb +18 -0
  9. data/lib/finapps/rest/portfolios.rb +43 -0
  10. data/lib/finapps/rest/portfolios_alerts.rb +34 -0
  11. data/lib/finapps/rest/portfolios_available_consumers.rb +20 -0
  12. data/lib/finapps/rest/portfolios_consumers.rb +45 -0
  13. data/lib/finapps/utils/query_builder.rb +5 -0
  14. data/lib/finapps/version.rb +1 -1
  15. data/spec/rest/alert_definitions_spec.rb +78 -0
  16. data/spec/rest/alert_occurrences_spec.rb +44 -0
  17. data/spec/rest/client_spec.rb +34 -0
  18. data/spec/rest/consumers_portfolios_spec.rb +54 -0
  19. data/spec/rest/portfolio_reports_spec.rb +44 -0
  20. data/spec/rest/portfolios_alerts_spec.rb +125 -0
  21. data/spec/rest/portfolios_available_consumers_spec.rb +54 -0
  22. data/spec/rest/portfolios_consumers_spec.rb +183 -0
  23. data/spec/rest/portfolios_spec.rb +181 -0
  24. data/spec/support/fake_api.rb +54 -0
  25. data/spec/support/fixtures/alert_definition.json +17 -0
  26. data/spec/support/fixtures/alert_definitions.json +24 -0
  27. data/spec/support/fixtures/alert_occurrences.json +32 -0
  28. data/spec/support/fixtures/multiple_consumer_subscribe_error.json +7 -0
  29. data/spec/support/fixtures/portfolio.json +9 -0
  30. data/spec/support/fixtures/portfolio_reports.json +38 -0
  31. data/spec/support/fixtures/portfolios.json +16 -0
  32. data/spec/support/fixtures/portfolios_alerts.json +19 -0
  33. data/spec/support/fixtures/portfolios_available_consumers.json +20 -0
  34. data/spec/support/fixtures/portfolios_consumers.json +14 -0
  35. data/spec/support/fixtures/single_consumer_subscribe_error.json +5 -0
  36. metadata +58 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1e6ff1a8379127a67c120835e11aa5d02b4a250341583e6bb31d340b9eb6527
4
- data.tar.gz: a0599c41a38248aaa2180a005cc6020666280e1b92137744d3143691fa39c1e9
3
+ metadata.gz: d3374db10baa1952267135d60010f5a68566349af848c02675b56f5690ae73fd
4
+ data.tar.gz: 9bdd765359d184a02c2d52a55f2a270c7ca1a3060ef0633bb50c2034c4f1a45e
5
5
  SHA512:
6
- metadata.gz: a728f579cc44d56586cb0fd05e4949c38305791687dd6e9e231021477809cab9f5896f2e67974c82a6460f6d9f66b7a6b5ab5c235980a0a0c8fb4a6c0828ea95
7
- data.tar.gz: 6a4721575df2270662974814db05af130ed69038ce6acfcccbd9841b47bbbba787d05b5d15ec603277e3adf81614a8b89939e8e4a7388aa772dcfe52e5443458
6
+ metadata.gz: a4bfa0fd0777d1f3c28537a13cf16f0ff4d57a3a849406fc7b51ddc76a3afe0e24f72632bf5c5e2393c932bf12d2fc12798eb1b6940a439a24b207cc8899f6f1
7
+ data.tar.gz: fd8d2d0168f5c559d3eae6b0f1a5411f18c500e2f43ffb8be7370af406fb680a65703aa9e1be8457d39bb07914541ccb649675990433bc541b2418aeacf89803
data/.travis.yml CHANGED
@@ -5,7 +5,7 @@ rvm:
5
5
  before_install:
6
6
  - "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
7
7
  - gem update --system
8
- - gem install bundler
8
+ - gem install bundler -v "~>1.0"
9
9
  script:
10
10
  - bundle exec rspec
11
11
  notifications:
data/lib/finapps.rb CHANGED
@@ -28,6 +28,14 @@ require 'finapps/rest/order_refreshes'
28
28
  require 'finapps/rest/statements'
29
29
  require 'finapps/rest/tenant_settings'
30
30
  require 'finapps/rest/tenant_app_settings'
31
+ require 'finapps/rest/portfolios'
32
+ require 'finapps/rest/alert_definitions'
33
+ require 'finapps/rest/alert_occurrences'
34
+ require 'finapps/rest/portfolios_available_consumers'
35
+ require 'finapps/rest/portfolios_alerts'
36
+ require 'finapps/rest/portfolios_consumers'
37
+ require 'finapps/rest/consumers_portfolios'
38
+ require 'finapps/rest/portfolio_reports'
31
39
 
32
40
  require 'finapps/utils/query_builder'
33
41
  require 'finapps/version' unless defined?(FinApps::VERSION)
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class AlertDefinitions < FinAppsCore::REST::Resources
6
+ include FinApps::Utils::QueryBuilder
7
+ END_POINT = 'portfolio/alerts/definitions'
8
+
9
+ def list(params = nil)
10
+ return super END_POINT if params.nil?
11
+ raise FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
12
+
13
+ super build_query_path(END_POINT, params)
14
+ end
15
+
16
+ def show(id)
17
+ not_blank(id, :id)
18
+ path = "#{END_POINT}/#{ERB::Util.url_encode(id)}"
19
+
20
+ super nil, path
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class AlertOccurrences < FinAppsCore::REST::Resources
6
+ include FinApps::Utils::QueryBuilder
7
+ END_POINT = 'portfolio/alerts/occurrences'
8
+
9
+ def list(params = nil)
10
+ return super END_POINT if params.nil?
11
+ raise FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
12
+
13
+ super build_query_path(END_POINT, params)
14
+ end
15
+
16
+ private
17
+
18
+ def build_filter(params)
19
+ filter = {}
20
+ filter[:"portfolio.id"] = params[:portfolio_id] if params[:portfolio_id]
21
+ filter
22
+ end
23
+ end
24
+ end
25
+ end
@@ -7,6 +7,9 @@ module FinApps
7
7
  module REST
8
8
  class Client < FinAppsCore::REST::BaseClient # :nodoc:
9
9
  RESOURCES = %i[
10
+ alert_definitions
11
+ alert_occurrences
12
+ consumers_portfolios
10
13
  institutions
11
14
  institutions_forms
12
15
  orders
@@ -20,6 +23,11 @@ module FinApps
20
23
  operators_password_resets
21
24
  password_resets
22
25
  products
26
+ portfolios
27
+ portfolios_alerts
28
+ portfolios_available_consumers
29
+ portfolios_consumers
30
+ portfolio_reports
23
31
  sessions
24
32
  statements
25
33
  consumers
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class ConsumersPortfolios < FinAppsCore::REST::Resources
6
+ include FinApps::Utils::QueryBuilder
7
+
8
+ def list(id, params = nil)
9
+ not_blank(id)
10
+
11
+ path = "consumers/#{ERB::Util.url_encode(id)}/portfolios"
12
+ return super path if params.nil?
13
+
14
+ raise FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
15
+
16
+ super build_query_path(path, params)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class PortfolioReports < FinAppsCore::REST::Resources
6
+ include FinApps::Utils::QueryBuilder
7
+
8
+ def list(params = nil)
9
+ path = 'portfolio/reports'
10
+
11
+ return super path if params.nil?
12
+ raise FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
13
+
14
+ super build_query_path(path, params)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class Portfolios < FinAppsCore::REST::Resources
6
+ include FinApps::Utils::QueryBuilder
7
+
8
+ def list(params = nil)
9
+ return super if params.nil?
10
+ raise FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
11
+
12
+ super build_query_path(end_point, params)
13
+ end
14
+
15
+ def show(id)
16
+ not_blank(id, :id)
17
+ super
18
+ end
19
+
20
+ def create(params)
21
+ not_blank(params, :params)
22
+ super params
23
+ end
24
+
25
+ def update(id, params)
26
+ not_blank(id, :id)
27
+ not_blank(params, :params)
28
+
29
+ path = "#{end_point}/#{ERB::Util.url_encode(id)}"
30
+
31
+ super params, path
32
+ end
33
+
34
+ def destroy(id)
35
+ not_blank(id, :id)
36
+
37
+ super
38
+ end
39
+
40
+ # need to populate build_filter method
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class PortfoliosAlerts < FinAppsCore::REST::Resources
6
+ def list(portfolio_id)
7
+ not_blank(portfolio_id, :portfolio_id)
8
+
9
+ super build_path(portfolio_id)
10
+ end
11
+
12
+ def create(portfolio_id, alert_id, params = nil)
13
+ not_blank(portfolio_id, :portfolio_id)
14
+ not_blank(alert_id, :alert_id)
15
+
16
+ update params, build_path(portfolio_id, alert_id)
17
+ end
18
+
19
+ def destroy(portfolio_id, alert_id)
20
+ not_blank(portfolio_id, :portfolio_id)
21
+ not_blank(alert_id, :alert_id)
22
+
23
+ super nil, build_path(portfolio_id, alert_id)
24
+ end
25
+
26
+ private
27
+
28
+ def build_path(portfolio_id, alert_id = nil)
29
+ alert_path = alert_id ? "alerts/#{ERB::Util.url_encode(alert_id)}" : 'alerts'
30
+ "portfolios/#{ERB::Util.url_encode(portfolio_id)}/" + alert_path
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class PortfoliosAvailableConsumers < FinAppsCore::REST::Resources
6
+ include FinApps::Utils::QueryBuilder
7
+
8
+ def list(portfolio_id, params = nil)
9
+ not_blank(portfolio_id, :portfolio_id)
10
+
11
+ path = "portfolios/#{ERB::Util.url_encode(portfolio_id)}/consumers/available"
12
+ return super path if params.nil?
13
+
14
+ raise FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
15
+
16
+ super build_query_path(path, params)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class PortfoliosConsumers < FinAppsCore::REST::Resources
6
+ include FinApps::Utils::QueryBuilder
7
+
8
+ def list(portfolio_id, params = nil)
9
+ not_blank(portfolio_id, :portfolio_id)
10
+
11
+ path = build_path(portfolio_id)
12
+ return super path if params.nil?
13
+
14
+ raise FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
15
+
16
+ super build_query_path(path, params)
17
+ end
18
+
19
+ def create(portfolio_id, params)
20
+ not_blank(portfolio_id, :portfolio_id)
21
+ not_blank(params, :params)
22
+
23
+ return super nil, build_path(portfolio_id, params) if params.is_a?(String) # Single Consumer Subscribe
24
+
25
+ # Array Consumer Subscribe
26
+ super params, build_path(portfolio_id)
27
+ end
28
+
29
+ def destroy(portfolio_id, consumer_id)
30
+ not_blank(portfolio_id, :portfolio_id)
31
+ not_blank(consumer_id, :consumer_id)
32
+
33
+ # Single Consumer Unsubscribe Only
34
+ super nil, build_path(portfolio_id, consumer_id)
35
+ end
36
+
37
+ private
38
+
39
+ def build_path(portfolio_id, consumer_id = nil)
40
+ consumer_path = consumer_id ? "consumers/#{ERB::Util.url_encode(consumer_id)}" : 'consumers'
41
+ "portfolios/#{ERB::Util.url_encode(portfolio_id)}/" + consumer_path
42
+ end
43
+ end
44
+ end
45
+ end
@@ -18,6 +18,11 @@ module FinApps
18
18
  query_string = params_array.compact.join('&')
19
19
  !query_string.empty? ? [root_url, query_string].join('?') : nil
20
20
  end
21
+
22
+ def build_filter(_params)
23
+ # stub, to be overwritten by classes that include this module
24
+ {}
25
+ end
21
26
  end
22
27
  end
23
28
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FinApps
4
- VERSION = '4.0.7'
4
+ VERSION = '4.0.8'
5
5
  end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helpers/client'
4
+
5
+ RSpec.describe FinApps::REST::AlertDefinitions do
6
+ include SpecHelpers::Client
7
+ subject { FinApps::REST::AlertDefinitions.new(client) }
8
+
9
+ describe '#list' do
10
+ let(:list) { subject.list(params) }
11
+ let(:results) { list[RESULTS] }
12
+ let(:errors) { list[ERROR_MESSAGES] }
13
+
14
+ context 'when missing params' do
15
+ let(:params) { nil }
16
+
17
+ it { expect { list }.not_to raise_error }
18
+ it('returns an array') { expect(list).to be_a(Array) }
19
+ it('performs a get and returns the response') { expect(results).to respond_to(:records) }
20
+ it('returns no error messages') { expect(errors).to be_empty }
21
+ end
22
+
23
+ context 'when invalid params are provided' do
24
+ let(:params) { %w[this is an array] }
25
+
26
+ it { expect { list }.to raise_error(FinAppsCore::InvalidArgumentsError) }
27
+ end
28
+
29
+ context 'when including valid params' do
30
+ let(:params) { { page: 2, sort: '-created_date', requested: 25 } }
31
+
32
+ it { expect { list }.not_to raise_error }
33
+ it('returns an array') { expect(list).to be_a(Array) }
34
+ it('performs a get and returns the response') { expect(results).to respond_to(:records) }
35
+ it('returns no error messages') { expect(errors).to be_empty }
36
+ it 'builds query and sends proper request' do
37
+ list
38
+ url = "#{FinAppsCore::REST::Defaults::DEFAULTS[:host]}/v3/portfolio/alerts/definitions?page=2&requested=25&" \
39
+ 'sort=-created_date'
40
+ expect(WebMock).to have_requested(:get, url)
41
+ end
42
+ end
43
+ end
44
+
45
+ describe '#show' do
46
+ let(:show) { subject.show(id) }
47
+ let(:results) { show[RESULTS] }
48
+ let(:errors) { show[ERROR_MESSAGES] }
49
+
50
+ context 'when missing params' do
51
+ let(:id) { nil }
52
+
53
+ it { expect { show }.to raise_error(FinAppsCore::MissingArgumentsError) }
54
+ end
55
+
56
+ context 'when valid id is provided' do
57
+ let(:id) { 'valid_id' }
58
+
59
+ it { expect { show }.not_to raise_error(FinAppsCore::MissingArgumentsError) }
60
+ it('returns an array') { expect(show).to be_a(Array) }
61
+ it('performs a get and returns the response') do
62
+ expect(results).to respond_to(:_id)
63
+ expect(results).to respond_to(:rule_name)
64
+ end
65
+ it('returns no error messages') { expect(errors).to be_empty }
66
+ end
67
+
68
+ context 'when invalid id is provided' do
69
+ let(:id) { 'invalid_id' }
70
+
71
+ it { expect { show }.not_to raise_error }
72
+ it('results is nil') { expect(results).to be_nil }
73
+ it('error messages array is populated') do
74
+ expect(errors.first.downcase).to eq('resource not found')
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helpers/client'
4
+
5
+ RSpec.describe FinApps::REST::AlertOccurrences do
6
+ include SpecHelpers::Client
7
+ subject { FinApps::REST::AlertOccurrences.new(client) }
8
+
9
+ describe '#list' do
10
+ let(:list) { subject.list(params) }
11
+ let(:results) { list[RESULTS] }
12
+ let(:errors) { list[ERROR_MESSAGES] }
13
+
14
+ context 'when missing params' do
15
+ let(:params) { nil }
16
+
17
+ it { expect { list }.not_to raise_error }
18
+ it('returns an array') { expect(list).to be_a(Array) }
19
+ it('performs a get and returns the response') { expect(results).to respond_to(:records) }
20
+ it('returns no error messages') { expect(errors).to be_empty }
21
+ end
22
+
23
+ context 'when invalid params are provided' do
24
+ let(:params) { %w[this is an array] }
25
+
26
+ it { expect { list }.to raise_error(FinAppsCore::InvalidArgumentsError) }
27
+ end
28
+
29
+ context 'when including valid params' do
30
+ let(:params) { { page: 2, sort: '-created_date', requested: 25, portfolio_id: 'valid_id' } }
31
+
32
+ it { expect { list }.not_to raise_error }
33
+ it('returns an array') { expect(list).to be_a(Array) }
34
+ it('performs a get and returns the response') { expect(results).to respond_to(:records) }
35
+ it('returns no error messages') { expect(errors).to be_empty }
36
+ it 'builds query and sends proper request' do
37
+ list
38
+ url = "#{FinAppsCore::REST::Defaults::DEFAULTS[:host]}/v3/portfolio/alerts/occurrences?" \
39
+ 'filter=%7B%22portfolio.id%22:%22valid_id%22%7D&page=2&requested=25&sort=-created_date'
40
+ expect(WebMock).to have_requested(:get, url)
41
+ end
42
+ end
43
+ end
44
+ end