finapps 2.0.16 → 2.0.17
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/README.md +1 -0
- data/lib/finapps/rest/base_client.rb +4 -4
- data/lib/finapps/rest/client.rb +4 -0
- data/lib/finapps/rest/resources.rb +16 -18
- data/lib/finapps/rest/sessions.rb +25 -0
- data/lib/finapps/version.rb +1 -1
- data/lib/finapps.rb +1 -0
- data/spec/middleware/{accept_json_spec.rb → request/accept_json_spec.rb} +0 -0
- data/spec/middleware/{tenant_authentication_spec.rb → request/tenant_authentication_spec.rb} +0 -0
- data/spec/middleware/{user_agent_spec.rb → request/user_agent_spec.rb} +0 -0
- data/spec/middleware/response/raise_error_spec.rb +24 -0
- data/spec/rest/base_client_spec.rb +7 -2
- data/spec/rest/client_spec.rb +6 -2
- data/spec/rest/sessions_spec.rb +42 -0
- data/spec/rest/users_spec.rb +4 -1
- data/spec/spec_helpers/client.rb +8 -0
- data/spec/support/fake_api.rb +13 -2
- metadata +25 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d92b2ccd2cbe3f2d7088938232d1c73f0c0c95b4
|
4
|
+
data.tar.gz: 5b0f6965de1b07f36ce1f0584e475a7a8e8d1461
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a909e96ebb509f0f975b2892355343ba890d1cf85eaca4d0b368f01b3d7a8a6054521c0ad93327128e0484fc0a1eae2bed91f596c0c18f987c0d7ecdcd9bdd3
|
7
|
+
data.tar.gz: 6156ca6318427f8f0c8557182d8b965a58a7aedee84ba8c06c121f90adf4ba81d0c43972fd8ac846eca42c74356ea93b29e356216dd2dbe66e9c8af6b880984a
|
data/README.md
CHANGED
@@ -5,6 +5,7 @@ FinApps Ruby-Client
|
|
5
5
|
[](https://badge.fury.io/rb/finapps)
|
6
6
|
[](https://travis-ci.org/finapps/ruby-client)
|
7
7
|
[](https://codeclimate.com/github/finapps/ruby-client)
|
8
|
+
[](https://codeclimate.com/github/finapps/ruby-client/coverage)
|
8
9
|
[](https://gemnasium.com/github.com/finapps/ruby-client)
|
9
10
|
[](http://finapps.mit-license.org)
|
10
11
|
|
@@ -38,7 +38,7 @@ module FinApps
|
|
38
38
|
raise FinApps::MissingArgumentsError.new 'Missing argument: path.' if path.blank?
|
39
39
|
raise FinApps::MissingArgumentsError.new 'Missing argument: method.' if method.blank?
|
40
40
|
|
41
|
-
response, error_messages = execute_request(method, params
|
41
|
+
response, error_messages = execute_request(path, method, params)
|
42
42
|
result = if empty?(response)
|
43
43
|
nil
|
44
44
|
else
|
@@ -54,10 +54,10 @@ module FinApps
|
|
54
54
|
response.blank? || (response.respond_to?(:body) && response.body.blank?)
|
55
55
|
end
|
56
56
|
|
57
|
-
def execute_request(method, params
|
57
|
+
def execute_request(path, method, params)
|
58
58
|
error_messages = []
|
59
59
|
begin
|
60
|
-
response = execute_method method, params
|
60
|
+
response = execute_method path, method, params
|
61
61
|
rescue FinApps::InvalidArgumentsError,
|
62
62
|
FinApps::MissingArgumentsError,
|
63
63
|
Faraday::Error::ConnectionFailed => error
|
@@ -86,7 +86,7 @@ module FinApps
|
|
86
86
|
['Unexpected error.']
|
87
87
|
end
|
88
88
|
|
89
|
-
def execute_method(method, params
|
89
|
+
def execute_method(path, method, params)
|
90
90
|
case method
|
91
91
|
when :get
|
92
92
|
get(path)
|
data/lib/finapps/rest/client.rb
CHANGED
@@ -11,39 +11,37 @@ module FinApps
|
|
11
11
|
def initialize(client)
|
12
12
|
raise MissingArgumentsError.new 'Missing argument: client.' if client.nil?
|
13
13
|
raise InvalidArgumentsError.new 'Invalid argument: client.' unless client.is_a?(FinApps::REST::Client)
|
14
|
+
|
14
15
|
@client = client
|
15
16
|
end
|
16
17
|
|
17
18
|
def create(params={}, path=nil)
|
18
|
-
path
|
19
|
-
logger.debug "#{self.class.name}##{__method__} => path: #{path} params: #{params}"
|
20
|
-
results, error_messages = client.send_request(path, :post, params)
|
21
|
-
[results, error_messages]
|
19
|
+
request_with_body(path, :post, params)
|
22
20
|
end
|
23
21
|
|
24
22
|
def update(params={}, path=nil)
|
25
|
-
path
|
26
|
-
logger.debug "#{self.class.name}##{__method__} => path: #{path} params: #{params}"
|
27
|
-
results, error_messages = client.send_request(path, :put, params)
|
28
|
-
[results, error_messages]
|
23
|
+
request_with_body(path, :put, params)
|
29
24
|
end
|
30
25
|
|
31
26
|
def show(id=nil, path=nil)
|
32
|
-
|
33
|
-
|
34
|
-
path = "#{end_point}/:id".sub ':id', ERB::Util.url_encode(id) if path.nil?
|
35
|
-
logger.debug "#{self.class.name}##{__method__} => path: #{path}"
|
36
|
-
results, error_messages = client.send_request(path, :get)
|
37
|
-
[results, error_messages]
|
27
|
+
request_without_body(path, :get, id)
|
38
28
|
end
|
39
29
|
|
40
30
|
def destroy(id=nil, path=nil)
|
41
|
-
|
31
|
+
request_without_body(path, :delete, id)
|
32
|
+
end
|
42
33
|
|
34
|
+
def request_without_body(path, method, id)
|
35
|
+
raise MissingArgumentsError.new 'Missing argument: id.' if id.nil? && path.nil?
|
43
36
|
path = "#{end_point}/:id".sub ':id', ERB::Util.url_encode(id) if path.nil?
|
44
|
-
|
45
|
-
|
46
|
-
|
37
|
+
request_with_body path, method, {}
|
38
|
+
end
|
39
|
+
|
40
|
+
def request_with_body(path, method, params)
|
41
|
+
path = end_point if path.nil?
|
42
|
+
logger.debug "#{self.class.name}##{__method__} => path: #{path} params: #{params}"
|
43
|
+
|
44
|
+
client.send_request path, method, params
|
47
45
|
end
|
48
46
|
|
49
47
|
protected
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module FinApps
|
3
|
+
module REST
|
4
|
+
class Sessions < FinApps::REST::Resources # :nodoc:
|
5
|
+
require 'erb'
|
6
|
+
|
7
|
+
using ObjectExtensions
|
8
|
+
using StringExtensions
|
9
|
+
|
10
|
+
# @param [Hash] params
|
11
|
+
# @return [Array<String>]
|
12
|
+
def create(params)
|
13
|
+
raise InvalidArgumentsError.new 'Invalid argument: params.' unless validates params
|
14
|
+
|
15
|
+
super params, 'login'
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def validates(params)
|
21
|
+
params.key?(:email) && params[:email].present? && params.key?(:password) && params[:password].present?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/finapps/version.rb
CHANGED
data/lib/finapps.rb
CHANGED
File without changes
|
data/spec/middleware/{tenant_authentication_spec.rb → request/tenant_authentication_spec.rb}
RENAMED
File without changes
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
RSpec.describe FinApps::Middleware::RaiseError do
|
3
|
+
let(:fake_app) { proc {|env| env } }
|
4
|
+
Env = Struct.new(:status, :response_headers, :body)
|
5
|
+
|
6
|
+
describe '#on_complete' do
|
7
|
+
subject { FinApps::Middleware::RaiseError.new(fake_app) }
|
8
|
+
|
9
|
+
context 'for succesful requests' do
|
10
|
+
let(:env) { Env.new(200) }
|
11
|
+
it { expect { subject.on_complete(env) }.not_to raise_error }
|
12
|
+
end
|
13
|
+
context 'for client errors' do
|
14
|
+
let(:env) { Env.new(401, {}, '{"messages":["Invalid User Identifier or Credentials"]}') }
|
15
|
+
error_message = 'the server responded with status 401'
|
16
|
+
it { expect { subject.on_complete(env) }.to raise_error(Faraday::Error::ClientError, error_message) }
|
17
|
+
end
|
18
|
+
context 'for connection failed error' do
|
19
|
+
let(:env) { Env.new(407) }
|
20
|
+
error_message = '407 "Proxy Authentication Required"'
|
21
|
+
it { expect { subject.on_complete(env) }.to raise_error(Faraday::Error::ConnectionFailed, error_message) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -69,9 +69,8 @@ RSpec.describe FinApps::REST::BaseClient do
|
|
69
69
|
subject { FinApps::REST::BaseClient.new(valid_tenant_options).send_request('client_error', :get) }
|
70
70
|
|
71
71
|
it('result is null') { expect(subject[RESPONSE]).to be_nil }
|
72
|
-
it('error_messages is not null') { expect(subject[ERROR_MESSAGES]).not_to be_nil }
|
73
72
|
it('error_messages is an array') { expect(subject[ERROR_MESSAGES]).to be_a(Array) }
|
74
|
-
it('
|
73
|
+
it('error_messages gets populated'){expect(subject[ERROR_MESSAGES].first).to eq 'Password Minimum size is 8'}
|
75
74
|
end
|
76
75
|
|
77
76
|
context 'for server errors' do
|
@@ -97,4 +96,10 @@ RSpec.describe FinApps::REST::BaseClient do
|
|
97
96
|
end
|
98
97
|
end
|
99
98
|
end
|
99
|
+
|
100
|
+
describe '#method_missing' do
|
101
|
+
context 'for unsupported methods' do
|
102
|
+
it { expect { subject.unsupported }.to raise_error(NoMethodError) }
|
103
|
+
end
|
104
|
+
end
|
100
105
|
end
|
data/spec/rest/client_spec.rb
CHANGED
@@ -13,7 +13,7 @@ RSpec.describe FinApps::REST::Client do
|
|
13
13
|
context 'an instance of Client' do
|
14
14
|
subject { FinApps::REST::Client.new(:company_identifier, :company_token) }
|
15
15
|
|
16
|
-
%i(users orders order_tokens).each do |method|
|
16
|
+
%i(users sessions orders order_tokens).each do |method|
|
17
17
|
it "responds to #{method}" do
|
18
18
|
expect(subject).to respond_to(method)
|
19
19
|
end
|
@@ -23,6 +23,10 @@ RSpec.describe FinApps::REST::Client do
|
|
23
23
|
it { expect(subject.users).to be_an_instance_of(FinApps::REST::Users) }
|
24
24
|
end
|
25
25
|
|
26
|
+
describe '#sessions' do
|
27
|
+
it { expect(subject.sessions).to be_an_instance_of(FinApps::REST::Sessions) }
|
28
|
+
end
|
29
|
+
|
26
30
|
describe '#order_tokens' do
|
27
31
|
it { expect(subject.order_tokens).to be_an_instance_of(FinApps::REST::OrderTokens) }
|
28
32
|
end
|
@@ -34,7 +38,7 @@ RSpec.describe FinApps::REST::Client do
|
|
34
38
|
# [:users, :institutions, :user_institutions, :transactions, :categories,
|
35
39
|
# :budget_models, :budget_calculation, :budgets, :cashflows,
|
36
40
|
# :alert, :alert_definition, :alert_preferences, :alert_settings, :rule_sets]
|
37
|
-
%i(users orders order_tokens).each do |method|
|
41
|
+
%i(users sessions orders order_tokens).each do |method|
|
38
42
|
it "memoizes the result of #{method}" do
|
39
43
|
first = subject.send(method)
|
40
44
|
second = subject.send(method)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helpers/client'
|
3
|
+
|
4
|
+
RSpec.describe FinApps::REST::Sessions, 'initialized with valid FinApps::Client object' do
|
5
|
+
include SpecHelpers::Client
|
6
|
+
|
7
|
+
describe '#create' do
|
8
|
+
subject { FinApps::REST::Sessions.new(client) }
|
9
|
+
let(:create) { subject.create(credentials) }
|
10
|
+
let(:results) { create[0] }
|
11
|
+
let(:error_messages) { create[1] }
|
12
|
+
|
13
|
+
context 'when missing email or password' do
|
14
|
+
message = 'Invalid argument: params.'
|
15
|
+
it do
|
16
|
+
expect { subject.create(email: nil, password: 'password') }
|
17
|
+
.to raise_error(FinApps::InvalidArgumentsError, message)
|
18
|
+
end
|
19
|
+
it do
|
20
|
+
expect { subject.create(email: 'email', password: nil) }
|
21
|
+
.to raise_error(FinApps::InvalidArgumentsError, message)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'for invalid credentials' do
|
26
|
+
let(:credentials) { {email: 'email@domain.com', password: 'invalid_password'} }
|
27
|
+
|
28
|
+
it { expect { create }.not_to raise_error }
|
29
|
+
it('results is nil') { expect(results).to be_nil }
|
30
|
+
error_message = 'Invalid User Identifier or Credentials'
|
31
|
+
it('error_messages are populated') { expect(error_messages.first).to eq(error_message) }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'for valid credentials' do
|
35
|
+
let(:credentials) { {email: 'email@domain.com', password: 'valid_password'} }
|
36
|
+
|
37
|
+
it('results is a Hashie::Rash') { expect(results).to be_a(Hashie::Rash) }
|
38
|
+
it('token value is in the result') { expect(results).to respond_to(:token) }
|
39
|
+
it('error_messages is empty') { expect(error_messages).to be_empty }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/rest/users_spec.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require 'spec_helpers/client'
|
3
|
+
|
2
4
|
RSpec.describe FinApps::REST::Users, 'initialized with valid FinApps::Client object' do
|
5
|
+
include SpecHelpers::Client
|
6
|
+
|
3
7
|
missing_public_id = 'Missing argument: public_id.'
|
4
|
-
client = FinApps::REST::Client.new :company_identifier, :company_token
|
5
8
|
|
6
9
|
describe '#show' do
|
7
10
|
subject(:users) { FinApps::REST::Users.new(client) }
|
data/spec/support/fake_api.rb
CHANGED
@@ -18,8 +18,19 @@ class FakeApi < Sinatra::Base
|
|
18
18
|
get('/v2/users/valid_public_id') { json_response 200, 'user.json' }
|
19
19
|
get('/v2/users/invalid_public_id') { json_response 404, 'resource_not_found.json' }
|
20
20
|
put('/v2/users/valid_public_id') { status 204 }
|
21
|
-
put('/v2/users/valid_public_id/password'){ json_response 200, 'user.json'}
|
22
|
-
put('/v2/users/invalid_public_id/password'){ json_response 404, 'resource_not_found.json' }
|
21
|
+
put('/v2/users/valid_public_id/password') { json_response 200, 'user.json' }
|
22
|
+
put('/v2/users/invalid_public_id/password') { json_response 404, 'resource_not_found.json' }
|
23
|
+
|
24
|
+
# session
|
25
|
+
post('/v2/login') do
|
26
|
+
request.body.rewind
|
27
|
+
request_payload = JSON.parse request.body.read
|
28
|
+
if request_payload['password'] == 'valid_password'
|
29
|
+
json_response(200, 'user.json')
|
30
|
+
else
|
31
|
+
json_response(401, 'unauthorized.json')
|
32
|
+
end
|
33
|
+
end
|
23
34
|
|
24
35
|
# relevance
|
25
36
|
get('/v2/relevance/ruleset/names') { json_response 200, 'relevance_ruleset_names.json' }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: finapps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erich Quintero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -264,15 +264,17 @@ files:
|
|
264
264
|
- lib/finapps/rest/order_tokens.rb
|
265
265
|
- lib/finapps/rest/orders.rb
|
266
266
|
- lib/finapps/rest/resources.rb
|
267
|
+
- lib/finapps/rest/sessions.rb
|
267
268
|
- lib/finapps/rest/users.rb
|
268
269
|
- lib/finapps/utils/loggeable.rb
|
269
270
|
- lib/finapps/version.rb
|
270
271
|
- lib/tasks/releaser.rake
|
271
272
|
- spec/core_extensions/hash/compact_spec.rb
|
272
273
|
- spec/core_extensions/object/is_integer_spec.rb
|
273
|
-
- spec/middleware/accept_json_spec.rb
|
274
|
-
- spec/middleware/tenant_authentication_spec.rb
|
275
|
-
- spec/middleware/user_agent_spec.rb
|
274
|
+
- spec/middleware/request/accept_json_spec.rb
|
275
|
+
- spec/middleware/request/tenant_authentication_spec.rb
|
276
|
+
- spec/middleware/request/user_agent_spec.rb
|
277
|
+
- spec/middleware/response/raise_error_spec.rb
|
276
278
|
- spec/rest/base_client_spec.rb
|
277
279
|
- spec/rest/client_spec.rb
|
278
280
|
- spec/rest/configuration_spec.rb
|
@@ -280,8 +282,10 @@ files:
|
|
280
282
|
- spec/rest/order_tokens_spec.rb
|
281
283
|
- spec/rest/orders_spec.rb
|
282
284
|
- spec/rest/resources_spec.rb
|
285
|
+
- spec/rest/sessions_spec.rb
|
283
286
|
- spec/rest/users_spec.rb
|
284
287
|
- spec/spec_helper.rb
|
288
|
+
- spec/spec_helpers/client.rb
|
285
289
|
- spec/support/fake_api.rb
|
286
290
|
- spec/support/fixtures/error.json
|
287
291
|
- spec/support/fixtures/order_token.json
|
@@ -316,23 +320,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
316
320
|
version: '0'
|
317
321
|
requirements: []
|
318
322
|
rubyforge_project:
|
319
|
-
rubygems_version: 2.
|
323
|
+
rubygems_version: 2.6.6
|
320
324
|
signing_key:
|
321
325
|
specification_version: 4
|
322
326
|
summary: FinApps REST API ruby client.
|
323
327
|
test_files:
|
324
|
-
- spec/
|
325
|
-
- spec/
|
326
|
-
- spec/
|
327
|
-
- spec/middleware/
|
328
|
-
- spec/middleware/
|
329
|
-
- spec/
|
330
|
-
- spec/
|
331
|
-
- spec/rest/configuration_spec.rb
|
328
|
+
- spec/spec_helper.rb
|
329
|
+
- spec/support/fake_api.rb
|
330
|
+
- spec/spec_helpers/client.rb
|
331
|
+
- spec/middleware/request/user_agent_spec.rb
|
332
|
+
- spec/middleware/request/tenant_authentication_spec.rb
|
333
|
+
- spec/middleware/request/accept_json_spec.rb
|
334
|
+
- spec/middleware/response/raise_error_spec.rb
|
332
335
|
- spec/rest/credentials_spec.rb
|
333
|
-
- spec/rest/order_tokens_spec.rb
|
334
|
-
- spec/rest/orders_spec.rb
|
335
336
|
- spec/rest/resources_spec.rb
|
337
|
+
- spec/rest/sessions_spec.rb
|
338
|
+
- spec/rest/client_spec.rb
|
339
|
+
- spec/rest/orders_spec.rb
|
340
|
+
- spec/rest/order_tokens_spec.rb
|
341
|
+
- spec/rest/base_client_spec.rb
|
342
|
+
- spec/rest/configuration_spec.rb
|
336
343
|
- spec/rest/users_spec.rb
|
337
|
-
- spec/
|
338
|
-
- spec/
|
344
|
+
- spec/core_extensions/object/is_integer_spec.rb
|
345
|
+
- spec/core_extensions/hash/compact_spec.rb
|