finapps 1.0.8 → 2.0.2
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/.gitignore +1 -1
- data/.rspec +1 -2
- data/.rubocop.yml +102 -0
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/Rakefile +1 -1
- data/finapps.gemspec +10 -10
- data/lib/finapps/core_extensions/hash/compact.rb +22 -0
- data/lib/finapps/core_extensions/integerable.rb +14 -0
- data/lib/finapps/core_extensions/object/blank.rb +145 -0
- data/lib/finapps/error.rb +7 -0
- data/lib/finapps/hash_constructable.rb +9 -0
- data/lib/finapps/middleware/raise_error.rb +46 -0
- data/lib/finapps/middleware/tenant_authentication.rb +19 -0
- data/lib/finapps/rest/base_client.rb +96 -0
- data/lib/finapps/rest/client.rb +11 -199
- data/lib/finapps/rest/configuration.rb +55 -0
- data/lib/finapps/rest/connection.rb +14 -33
- data/lib/finapps/rest/defaults.rb +55 -64
- data/lib/finapps/rest/resource.rb +3 -6
- data/lib/finapps/rest/resources.rb +11 -6
- data/lib/finapps/rest/users.rb +17 -57
- data/lib/finapps/utils/loggeable.rb +13 -0
- data/lib/finapps/version.rb +1 -1
- data/lib/finapps.rb +11 -23
- data/lib/tasks/releaser.rake +2 -2
- data/spec/middleware/tenant_authentication_spec.rb +29 -0
- data/spec/rest/base_client_spec.rb +89 -0
- data/spec/rest/client_spec.rb +16 -102
- data/spec/rest/configuration_spec.rb +75 -0
- data/spec/spec_helper.rb +10 -7
- data/spec/support/fake_api.rb +9 -2
- data/spec/support/fixtures/error.json +5 -0
- data/spec/support/fixtures/relevance_ruleset_names.json +47 -0
- metadata +49 -57
- data/lib/finapps/middleware/api_token.rb +0 -26
- data/lib/finapps/middleware/raise_http_exceptions.rb +0 -92
- data/lib/finapps/middleware/response_logger.rb +0 -37
- data/lib/finapps/rest/alert.rb +0 -62
- data/lib/finapps/rest/alert_definition.rb +0 -40
- data/lib/finapps/rest/alert_preferences.rb +0 -40
- data/lib/finapps/rest/alert_settings.rb +0 -40
- data/lib/finapps/rest/budget_calculation.rb +0 -45
- data/lib/finapps/rest/budget_models.rb +0 -42
- data/lib/finapps/rest/budgets.rb +0 -103
- data/lib/finapps/rest/cashflows.rb +0 -87
- data/lib/finapps/rest/categories.rb +0 -21
- data/lib/finapps/rest/errors.rb +0 -155
- data/lib/finapps/rest/institutions.rb +0 -47
- data/lib/finapps/rest/relevance/rulesets.rb +0 -64
- data/lib/finapps/rest/transactions.rb +0 -45
- data/lib/finapps/rest/user_institutions.rb +0 -138
- data/lib/finapps/utils/logging.rb +0 -95
- data/lib/finapps/utils/utils.rb +0 -57
- data/spec/middleware/api_token_spec.rb +0 -32
- data/spec/rest/connection_spec.rb +0 -40
- data/spec/rest/users_spec.rb +0 -24
- data/spec/utils/logging_spec.rb +0 -28
data/lib/finapps/rest/client.rb
CHANGED
@@ -1,214 +1,26 @@
|
|
1
1
|
module FinApps
|
2
2
|
module REST
|
3
|
-
class Client
|
3
|
+
class Client < BaseClient # :nodoc:
|
4
4
|
include FinApps::REST::Defaults
|
5
|
-
include FinApps::Logging
|
6
|
-
include FinApps::REST::Connection
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
# @param [String] company_identifier
|
11
|
-
# @param [String] company_token
|
6
|
+
# @param [String] tenant_identifier
|
7
|
+
# @param [String] tenant_token
|
12
8
|
# @param [Hash] options
|
13
9
|
# @return [FinApps::REST::Client]
|
14
|
-
def initialize(
|
15
|
-
|
16
|
-
|
10
|
+
def initialize(tenant_identifier, tenant_token, logger=nil, options={})
|
11
|
+
raise FinApps::MissingArgumentsError.new 'Invalid company_identifier.' if tenant_identifier.blank?
|
12
|
+
raise FinApps::MissingArgumentsError.new 'Invalid company_token.' if tenant_token.blank?
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
merged_options = FinApps::REST::Defaults::DEFAULTS.merge options
|
15
|
+
merged_options[:tenant_credentials] = {identifier: tenant_identifier,
|
16
|
+
token: tenant_token}
|
21
17
|
|
22
|
-
|
23
|
-
@connection ||= set_up_connection(self.company_credentials, @config)
|
18
|
+
super(merged_options, logger)
|
24
19
|
end
|
25
20
|
|
26
21
|
def users
|
27
22
|
@users ||= FinApps::REST::Users.new self
|
28
23
|
end
|
29
|
-
|
30
|
-
def institutions
|
31
|
-
@institutions ||= FinApps::REST::Institutions.new self
|
32
|
-
end
|
33
|
-
|
34
|
-
def user_institutions
|
35
|
-
@user_institutions ||= FinApps::REST::UserInstitutions.new self
|
36
|
-
end
|
37
|
-
|
38
|
-
def transactions
|
39
|
-
@transactions ||= FinApps::REST::Transactions.new self
|
40
|
-
end
|
41
|
-
|
42
|
-
def categories
|
43
|
-
@categories ||= FinApps::REST::Categories.new self
|
44
|
-
end
|
45
|
-
|
46
|
-
def budget_models
|
47
|
-
@budget_models ||= FinApps::REST::BudgetModels.new self
|
48
|
-
end
|
49
|
-
|
50
|
-
def budget_calculation
|
51
|
-
@budget_calculation ||= FinApps::REST::BudgetCalculation.new self
|
52
|
-
end
|
53
|
-
|
54
|
-
def budgets
|
55
|
-
@budgets ||= FinApps::REST::Budgets.new self
|
56
|
-
end
|
57
|
-
|
58
|
-
def cashflows
|
59
|
-
@cashflows ||= FinApps::REST::Cashflows.new self
|
60
|
-
end
|
61
|
-
|
62
|
-
def alert
|
63
|
-
@alert ||= FinApps::REST::Alert.new self
|
64
|
-
end
|
65
|
-
|
66
|
-
def alert_definition
|
67
|
-
@alert_definition ||= FinApps::REST::AlertDefinition.new self
|
68
|
-
end
|
69
|
-
|
70
|
-
def alert_settings
|
71
|
-
@alert_settings ||= FinApps::REST::AlertSettings.new self
|
72
|
-
end
|
73
|
-
|
74
|
-
def alert_preferences
|
75
|
-
@alert_preferences ||= FinApps::REST::AlertPreferences.new self
|
76
|
-
end
|
77
|
-
|
78
|
-
def rule_sets
|
79
|
-
@rule_sets ||= FinApps::REST::Relevance::Rulesets.new self
|
80
|
-
end
|
81
|
-
|
82
|
-
# Performs HTTP GET, POST, UPDATE and DELETE requests.
|
83
|
-
# You shouldn't need to use this method directly, but it can be useful for debugging.
|
84
|
-
# Returns a hash obtained from parsing the JSON object in the response body.
|
85
|
-
#
|
86
|
-
# @param [String] path
|
87
|
-
# @param [String] method
|
88
|
-
# @param [Proc] proc
|
89
|
-
# @return [Hash,Array<String>]
|
90
|
-
def send_request(path, method, params = {}, &proc)
|
91
|
-
raise FinApps::REST::MissingArgumentsError.new 'Missing argument: path.' if path.blank?
|
92
|
-
raise FinApps::REST::MissingArgumentsError.new 'Missing argument: method.' if method.blank?
|
93
|
-
|
94
|
-
result, error_messages = nil, []
|
95
|
-
|
96
|
-
begin
|
97
|
-
case method
|
98
|
-
when :get
|
99
|
-
response = get(path)
|
100
|
-
when :post
|
101
|
-
response = post(path, params)
|
102
|
-
when :put
|
103
|
-
response = put(path, params)
|
104
|
-
when :delete
|
105
|
-
response = delete(path, params)
|
106
|
-
else
|
107
|
-
raise FinApps::REST::InvalidArgumentsError.new "Method not supported: #{method}."
|
108
|
-
end
|
109
|
-
|
110
|
-
if response.present?
|
111
|
-
result = block_given? ? proc.call(response) : response.body
|
112
|
-
else
|
113
|
-
logger.error "##{__method__} => Null response found. Unable to process it."
|
114
|
-
end
|
115
|
-
|
116
|
-
rescue FinApps::REST::InvalidArgumentsError => error
|
117
|
-
raise error
|
118
|
-
rescue FinApps::REST::Error => error
|
119
|
-
error_messages = error.error_messages
|
120
|
-
rescue Faraday::ParsingError => error
|
121
|
-
error_messages << 'Unable to parse the server response.'
|
122
|
-
logger.error "##{__method__} => Faraday::ParsingError, #{error.to_s}"
|
123
|
-
rescue Exception => error
|
124
|
-
error_messages << 'Unexpected error.'
|
125
|
-
logger.fatal "##{__method__} => Exception, #{error.to_s}"
|
126
|
-
logger.fatal error
|
127
|
-
ensure
|
128
|
-
logger.debug "##{__method__} => Failed, error_messages: #{error_messages.pretty_inspect}" if error_messages.present?
|
129
|
-
end
|
130
|
-
|
131
|
-
return result, error_messages
|
132
|
-
end
|
133
|
-
|
134
|
-
# @param [String] user_identifier
|
135
|
-
# @param [String] user_token
|
136
|
-
def user_credentials!(user_identifier, user_token)
|
137
|
-
{:user_identifier => user_identifier, :user_token => user_token}.validate_required_strings!
|
138
|
-
|
139
|
-
@config[:user_identifier] = user_identifier
|
140
|
-
@config[:user_token] = user_token
|
141
|
-
|
142
|
-
logger.debug "##{__method__} => Attempting to set user credentials on current connection."
|
143
|
-
@connection = set_up_connection(company_credentials, config)
|
144
|
-
end
|
145
|
-
|
146
|
-
private
|
147
|
-
|
148
|
-
# Performs an HTTP GET request.
|
149
|
-
# Returns a hash obtained from parsing
|
150
|
-
# the JSON object in the response body.
|
151
|
-
#
|
152
|
-
# @param [String] path
|
153
|
-
# @return [Hash,Array<String>]
|
154
|
-
def get(path)
|
155
|
-
raise MissingArgumentsError.new 'Missing argument: path.' if path.blank?
|
156
|
-
|
157
|
-
logger.debug "##{__method__} => GET path:#{path}"
|
158
|
-
connection.get { |req| req.url path }
|
159
|
-
end
|
160
|
-
|
161
|
-
# Performs an HTTP POST request.
|
162
|
-
# Returns a hash obtained from parsing
|
163
|
-
# the JSON object in the response body.
|
164
|
-
#
|
165
|
-
# @param [String] path
|
166
|
-
# @param [Hash] params
|
167
|
-
# @return [Hash,Array<String>]
|
168
|
-
def post(path, params = {})
|
169
|
-
raise MissingArgumentsError.new 'Missing argument: path.' if path.blank?
|
170
|
-
|
171
|
-
logger.debug "##{__method__} => POST path:#{path} params:#{skip_sensitive_data params }"
|
172
|
-
connection.post do |req|
|
173
|
-
req.url path
|
174
|
-
req.body = params
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
# Performs an HTTP PUT request.
|
179
|
-
# Returns a hash obtained from parsing
|
180
|
-
# the JSON object in the response body.
|
181
|
-
#
|
182
|
-
# @param [String] path
|
183
|
-
# @param [Hash] params
|
184
|
-
# @return [Hash,Array<String>]
|
185
|
-
def put(path, params = {})
|
186
|
-
raise MissingArgumentsError.new 'Missing argument: path.' if path.blank?
|
187
|
-
|
188
|
-
logger.debug "##{__method__} => PUT path:#{path} params:#{skip_sensitive_data(params)}"
|
189
|
-
connection.put do |req|
|
190
|
-
req.url path
|
191
|
-
req.body = params
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
# Performs an HTTP DELETE request.
|
196
|
-
# Returns a hash obtained from parsing
|
197
|
-
# the JSON object in the response body.
|
198
|
-
#
|
199
|
-
# @param [String] path
|
200
|
-
# @param [Hash] params
|
201
|
-
# @return [Hash,Array<String>]
|
202
|
-
def delete(path, params = {})
|
203
|
-
raise MissingArgumentsError.new 'Missing argument: path.' if path.blank?
|
204
|
-
|
205
|
-
logger.debug "##{__method__} => DELETE path:#{path} params:#{skip_sensitive_data(params)}"
|
206
|
-
connection.delete do |req|
|
207
|
-
req.url path
|
208
|
-
req.body = params
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
24
|
end
|
213
25
|
end
|
214
|
-
end
|
26
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module FinApps
|
2
|
+
module REST
|
3
|
+
class Configuration # :nodoc:
|
4
|
+
include FinApps::HashConstructable
|
5
|
+
|
6
|
+
using CoreExtensions::Integerable
|
7
|
+
|
8
|
+
RUBY = "#{RUBY_ENGINE}/#{RUBY_PLATFORM} #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}".freeze
|
9
|
+
HEADERS = {
|
10
|
+
accept: 'application/json',
|
11
|
+
user_agent: "finapps-ruby/#{FinApps::VERSION} (#{RUBY})"
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
attr_accessor :host, :timeout, :tenant_credentials, :user_credentials, :url,
|
15
|
+
:proxy_addr, :proxy_port, :proxy_user, :proxy_pass,
|
16
|
+
:retry_limit, :log_level
|
17
|
+
|
18
|
+
def initialize(options)
|
19
|
+
super(options, FinApps::REST::Defaults::DEFAULTS)
|
20
|
+
validate
|
21
|
+
@url = "#{host}/v#{FinApps::REST::Defaults::API_VERSION}/"
|
22
|
+
end
|
23
|
+
|
24
|
+
def connection_options
|
25
|
+
{url: url,
|
26
|
+
request: {open_timeout: timeout, timeout: timeout},
|
27
|
+
headers: {accept: HEADERS[:accept], user_agent: HEADERS[:user_agent]}}
|
28
|
+
end
|
29
|
+
|
30
|
+
def valid_user_credentials?
|
31
|
+
valid_credentials? user_credentials
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def validate
|
37
|
+
raise FinApps::MissingArgumentsError.new 'Missing tenant_credentials.' unless valid_tenant_credentials?
|
38
|
+
raise FinApps::InvalidArgumentsError.new "Invalid argument. {host: #{host}}" unless valid_host?
|
39
|
+
raise FinApps::InvalidArgumentsError.new "Invalid argument. {timeout: #{timeout}}" unless timeout.integer?
|
40
|
+
end
|
41
|
+
|
42
|
+
def valid_tenant_credentials?
|
43
|
+
valid_credentials? tenant_credentials
|
44
|
+
end
|
45
|
+
|
46
|
+
def valid_credentials?(h)
|
47
|
+
h.is_a?(Hash) && %i(identifier token).all? {|x| h.key? x } && h.values.all?(&:present?)
|
48
|
+
end
|
49
|
+
|
50
|
+
def valid_host?
|
51
|
+
host.start_with?('http://', 'https://')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,50 +1,31 @@
|
|
1
|
-
require 'pp'
|
2
|
-
|
3
1
|
module FinApps
|
4
2
|
module REST
|
5
|
-
module Connection
|
6
|
-
|
7
|
-
|
8
|
-
# @param [Hash] company_credentials
|
9
|
-
# @param [Hash] config
|
10
|
-
# @return [Faraday::Connection]
|
11
|
-
def set_up_connection(company_credentials, config)
|
12
|
-
host_url = config[:host].blank? ? DEFAULTS[:host] : config[:host]
|
13
|
-
raise InvalidArgumentsError.new "Invalid argument: host_url: #{host_url}" unless host_url.start_with?('http://', 'https://')
|
14
|
-
|
15
|
-
base_url = "#{host_url}/v#{API_VERSION}"
|
16
|
-
timeout = config[:timeout].blank? ? DEFAULTS[:timeout] : config[:timeout]
|
3
|
+
module Connection # :nodoc:
|
4
|
+
module_function
|
17
5
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
:headers => {
|
23
|
-
:accept => HEADERS[:accept],
|
24
|
-
:user_agent => HEADERS[:user_agent]}) do |conn|
|
6
|
+
def faraday(config, logger)
|
7
|
+
Faraday.new(config.connection_options) do |conn|
|
8
|
+
# tenant level authentication
|
9
|
+
conn.use FinApps::Middleware::TenantAuthentication, config.tenant_credentials
|
25
10
|
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# company level authentication
|
32
|
-
conn.use FinApps::Middleware::ApiToken, company_credentials
|
11
|
+
# user level authentication
|
12
|
+
if config.valid_user_credentials?
|
13
|
+
conn.request :basic_auth, config.user_credentials[:identifier], config.user_credentials[:token]
|
14
|
+
end
|
33
15
|
|
34
16
|
conn.request :json
|
35
17
|
conn.request :retry
|
36
18
|
conn.request :multipart
|
37
19
|
conn.request :url_encoded
|
38
|
-
conn.use FinApps::Middleware::
|
20
|
+
conn.use FinApps::Middleware::RaiseError
|
39
21
|
conn.response :rashify
|
40
|
-
conn.response :json, :
|
41
|
-
conn.
|
22
|
+
conn.response :json, content_type: /\bjson$/
|
23
|
+
conn.response :logger, logger # , bodies: true
|
42
24
|
|
43
25
|
# Adapter (ensure that the adapter is always last.)
|
44
26
|
conn.adapter :typhoeus
|
45
27
|
end
|
46
28
|
end
|
47
|
-
|
48
29
|
end
|
49
30
|
end
|
50
|
-
end
|
31
|
+
end
|
@@ -1,89 +1,80 @@
|
|
1
1
|
module FinApps
|
2
2
|
module REST
|
3
3
|
module Defaults
|
4
|
-
|
5
|
-
API_VERSION = '1'
|
6
|
-
|
7
|
-
HEADERS = {
|
8
|
-
:accept => 'application/json',
|
9
|
-
:user_agent => "finapps-ruby/#{FinApps::VERSION} (#{RUBY_ENGINE}/#{RUBY_PLATFORM} #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL})"
|
10
|
-
}.freeze
|
4
|
+
API_VERSION = '2'.freeze
|
11
5
|
|
12
6
|
# noinspection SpellCheckingInspection
|
13
7
|
DEFAULTS = {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
}
|
23
|
-
|
8
|
+
host: 'https://dev.financialapps.com',
|
9
|
+
timeout: 30,
|
10
|
+
proxy_addr: nil,
|
11
|
+
proxy_port: nil,
|
12
|
+
proxy_user: nil,
|
13
|
+
proxy_pass: nil,
|
14
|
+
retry_limit: 1,
|
15
|
+
log_level: Logger::INFO
|
16
|
+
}.freeze
|
24
17
|
|
25
18
|
END_POINTS = {
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
:relevance_rulesets_list => 'relevance/ruleset/names',
|
34
|
-
:relevance_rulesets_show => 'relevance/ruleset/:ruleset_name',
|
35
|
-
:relevance_rulesets_run => 'relevance/run',
|
19
|
+
users_create: 'users/new',
|
20
|
+
users_update: 'user',
|
21
|
+
users_update_password: 'user/password',
|
22
|
+
users_delete: 'users/:public_id',
|
23
|
+
users_show: 'users/:public_id',
|
24
|
+
users_login: 'users/login',
|
36
25
|
|
37
|
-
|
38
|
-
|
26
|
+
relevance_rulesets_list: 'relevance/ruleset/names',
|
27
|
+
relevance_rulesets_show: 'relevance/ruleset/:ruleset_name',
|
28
|
+
relevance_rulesets_run: 'relevance/run',
|
39
29
|
|
40
|
-
|
41
|
-
|
42
|
-
:user_institutions_show => 'institutions/user/:user_institution_id',
|
43
|
-
:user_institutions_update => 'institutions/user/:user_institution_id/credentials',
|
44
|
-
:user_institutions_delete => 'institutions/user/:user_institution_id',
|
45
|
-
:user_institutions_status => 'institutions/user/:user_institution_id/status',
|
46
|
-
:user_institutions_mfa => 'institutions/user/:user_institution_id/mfa',
|
47
|
-
:user_institutions_refresh => 'institutions/user/refresh',
|
48
|
-
:user_institutions_form => 'institutions/user/:user_institution_id/form',
|
30
|
+
institutions_list: 'institutions/:search_term/search',
|
31
|
+
institutions_form: 'institutions/:site_id/form',
|
49
32
|
|
50
|
-
|
51
|
-
|
52
|
-
|
33
|
+
user_institutions_list: 'institutions/user',
|
34
|
+
user_institutions_add: 'institutions/:site_id/add',
|
35
|
+
user_institutions_show: 'institutions/user/:user_institution_id',
|
36
|
+
user_institutions_update: 'institutions/user/:user_institution_id/credentials',
|
37
|
+
user_institutions_delete: 'institutions/user/:user_institution_id',
|
38
|
+
user_institutions_status: 'institutions/user/:user_institution_id/status',
|
39
|
+
user_institutions_mfa: 'institutions/user/:user_institution_id/mfa',
|
40
|
+
user_institutions_refresh: 'institutions/user/refresh',
|
41
|
+
user_institutions_form: 'institutions/user/:user_institution_id/form',
|
53
42
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
:categories_show => 'categories/:category_id',
|
58
|
-
:categories_delete => 'categories/:category_id',
|
43
|
+
transactions_show: 'transaction/:transaction_id',
|
44
|
+
transactions_list: 'transactions/search',
|
45
|
+
transactions_update: 'transactions/edit',
|
59
46
|
|
60
|
-
|
61
|
-
|
47
|
+
categories_list: 'categories',
|
48
|
+
categories_new: 'categories',
|
49
|
+
categories_update: 'categories',
|
50
|
+
categories_show: 'categories/:category_id',
|
51
|
+
categories_delete: 'categories/:category_id',
|
62
52
|
|
63
|
-
|
64
|
-
|
53
|
+
budget_models_list: 'budget/templates',
|
54
|
+
budget_models_show: 'budget/template/:budget_model_id',
|
65
55
|
|
66
|
-
|
67
|
-
|
56
|
+
budget_calculation_create: 'budget/template/:budget_model_id/:income',
|
57
|
+
budget_calculation_show: 'categories',
|
68
58
|
|
69
|
-
|
59
|
+
budget_update: 'budget',
|
60
|
+
budget_show: 'budget/:start_date/:end_date',
|
70
61
|
|
71
|
-
|
72
|
-
:alert_update => 'alerts/:alert_id/:read',
|
73
|
-
:alert_delete => 'alerts/:alert_id',
|
62
|
+
cashflow_show: 'cashflow/:start_date/:end_date',
|
74
63
|
|
75
|
-
|
76
|
-
|
64
|
+
alert_list: 'alerts/:page/:requested/:sort/:asc/:read',
|
65
|
+
alert_update: 'alerts/:alert_id/:read',
|
66
|
+
alert_delete: 'alerts/:alert_id',
|
77
67
|
|
78
|
-
|
79
|
-
|
68
|
+
alert_definition_list: 'alerts/definitions',
|
69
|
+
alert_definition_show: 'alerts/definitions/:alert_name',
|
80
70
|
|
81
|
-
|
82
|
-
|
71
|
+
alert_settings_show: 'alerts/settings',
|
72
|
+
alert_settings_update: 'alerts/settings',
|
83
73
|
|
74
|
+
alert_preferences_show: 'alerts/preferences',
|
75
|
+
alert_preferences_update: 'alerts/preferences'
|
84
76
|
|
85
77
|
}.freeze
|
86
|
-
|
87
78
|
end
|
88
79
|
end
|
89
|
-
end
|
80
|
+
end
|
@@ -1,14 +1,11 @@
|
|
1
1
|
module FinApps
|
2
2
|
module REST
|
3
|
-
class Resource
|
4
|
-
include FinApps::Logging
|
5
|
-
|
3
|
+
class Resource # :nodoc:
|
6
4
|
# @param [Hash] hash
|
7
5
|
def initialize(hash)
|
8
|
-
hash.each {
|
6
|
+
hash.each {|k, v| instance_variable_set("@#{k}", v) unless v.nil? } if hash.present?
|
9
7
|
self
|
10
8
|
end
|
11
|
-
|
12
9
|
end
|
13
10
|
end
|
14
|
-
end
|
11
|
+
end
|
@@ -1,10 +1,6 @@
|
|
1
1
|
module FinApps
|
2
2
|
module REST
|
3
|
-
class Resources
|
4
|
-
|
5
|
-
include FinApps::REST::Defaults
|
6
|
-
include FinApps::Logging
|
7
|
-
|
3
|
+
class Resources # :nodoc:
|
8
4
|
attr_reader :client
|
9
5
|
|
10
6
|
# @param [FinApps::REST::Client] client
|
@@ -13,6 +9,15 @@ module FinApps
|
|
13
9
|
@client = client
|
14
10
|
end
|
15
11
|
|
12
|
+
def create(params, endpoint)
|
13
|
+
raise MissingArgumentsError.new 'Missing argument: params.' if params.blank?
|
14
|
+
|
15
|
+
path = Defaults::END_POINTS[endpoint]
|
16
|
+
logger.debug "#{name}##{__method__} => path: #{path} params: #{params}"
|
17
|
+
|
18
|
+
results, error_messages = client.send_request(path, :post, params)
|
19
|
+
[results, error_messages]
|
20
|
+
end
|
16
21
|
end
|
17
22
|
end
|
18
|
-
end
|
23
|
+
end
|
data/lib/finapps/rest/users.rb
CHANGED
@@ -1,76 +1,42 @@
|
|
1
1
|
module FinApps
|
2
2
|
module REST
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
class Users < FinApps::REST::Resources
|
7
|
-
include FinApps::Logging
|
3
|
+
class Users < FinApps::REST::Resources # :nodoc:
|
4
|
+
require 'erb'
|
8
5
|
include FinApps::REST::Defaults
|
9
6
|
|
10
7
|
# @param [String] public_id
|
11
8
|
# @return [FinApps::REST::User, Array<String>]
|
12
9
|
def show(public_id)
|
13
10
|
raise MissingArgumentsError.new 'Missing argument: public_id.' if public_id.blank?
|
14
|
-
logger.debug "##{__method__} => public_id: #{public_id}"
|
15
11
|
|
16
12
|
end_point = Defaults::END_POINTS[:users_show]
|
17
|
-
logger.debug "##{__method__} => end_point: #{end_point}"
|
18
|
-
|
19
13
|
path = end_point.sub ':public_id', ERB::Util.url_encode(public_id)
|
14
|
+
|
20
15
|
logger.debug "##{__method__} => path: #{path}"
|
21
16
|
|
22
|
-
|
23
|
-
|
17
|
+
results, error_messages = client.send_request(path, :get)
|
18
|
+
[results, error_messages]
|
24
19
|
end
|
25
20
|
|
26
21
|
# @param [Hash] params
|
27
22
|
# @return [FinApps::REST::User, Array<String>]
|
28
|
-
def create(params
|
29
|
-
|
30
|
-
logger.debug "##{__method__} => params: #{skip_sensitive_data params}"
|
31
|
-
|
32
|
-
end_point = Defaults::END_POINTS[:users_create]
|
33
|
-
logger.debug "##{__method__} => end_point: #{end_point}"
|
34
|
-
|
35
|
-
user, error_messages = client.send_request(end_point, :post, params) { |r| User.new(r.body) }
|
36
|
-
return user, error_messages
|
23
|
+
def create(params)
|
24
|
+
super(params, :users_create)
|
37
25
|
end
|
38
26
|
|
39
27
|
# @param [Hash] params
|
40
28
|
# @return [Array<String>]
|
41
|
-
def update(params
|
42
|
-
|
43
|
-
|
44
|
-
path = Defaults::END_POINTS[:users_update]
|
45
|
-
logger.debug "##{__method__} => path: #{path}"
|
29
|
+
def update(params)
|
30
|
+
raise MissingArgumentsError.new 'Missing argument: params.' if params.blank?
|
31
|
+
logger.debug "##{__method__} => params: #{params}"
|
46
32
|
|
47
|
-
|
48
|
-
|
49
|
-
end
|
33
|
+
end_point = Defaults::END_POINTS[:users_update]
|
34
|
+
path = end_point
|
50
35
|
|
51
|
-
# @param [Hash] params
|
52
|
-
# @return [FinApps::REST::User, Array<String>]
|
53
|
-
def update_password(params = {})
|
54
|
-
logger.debug "##{__method__} => params: #{skip_sensitive_data params}"
|
55
|
-
|
56
|
-
path = Defaults::END_POINTS[:users_update_password]
|
57
36
|
logger.debug "##{__method__} => path: #{path}"
|
58
37
|
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
# @param [Hash] params
|
64
|
-
# @return [FinApps::REST::User, Array<String>]
|
65
|
-
def login(params = {})
|
66
|
-
raise MissingArgumentsError.new 'Missing argument: params.' if params.blank?
|
67
|
-
logger.debug "##{__method__} => params: #{skip_sensitive_data params}"
|
68
|
-
|
69
|
-
end_point = Defaults::END_POINTS[:users_login]
|
70
|
-
logger.debug "##{__method__} => end_point: #{end_point}"
|
71
|
-
|
72
|
-
user, error_messages = client.send_request(end_point, :post, params) { |r| User.new(r.body) }
|
73
|
-
return user, error_messages
|
38
|
+
results, error_messages = client.send_request(path, :put, params.compact)
|
39
|
+
[results, error_messages]
|
74
40
|
end
|
75
41
|
|
76
42
|
# @param [String] public_id
|
@@ -85,15 +51,9 @@ module FinApps
|
|
85
51
|
path = end_point.sub ':public_id', ERB::Util.url_encode(public_id)
|
86
52
|
logger.debug "##{__method__} => path: #{path}"
|
87
53
|
|
88
|
-
|
89
|
-
error_messages
|
54
|
+
results, error_messages = client.send_request(path, :delete)
|
55
|
+
[results, error_messages]
|
90
56
|
end
|
91
|
-
|
92
57
|
end
|
93
|
-
|
94
|
-
class User < FinApps::REST::Resource
|
95
|
-
attr_accessor :public_id, :token, :email, :first_name, :last_name, :postal_code
|
96
|
-
end
|
97
|
-
|
98
58
|
end
|
99
|
-
end
|
59
|
+
end
|
data/lib/finapps/version.rb
CHANGED