finapps 1.0.8 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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