finapps 0.22.4.pre → 1.0.0

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.
@@ -0,0 +1,40 @@
1
+ require 'base64'
2
+
3
+ RSpec.describe FinApps::REST::Connection do
4
+
5
+ let(:dummy_class) { Class.new { extend FinApps::REST::Connection } }
6
+ let(:valid_credentials) { {:company_identifier => 'id', :company_token => 'token'} }
7
+ let(:user_credentials) { {:user_identifier => 'user_id', :user_token => 'user_token'} }
8
+
9
+ it { expect(dummy_class).to respond_to(:set_up_connection) }
10
+
11
+ describe '#set_up_connection' do
12
+
13
+ context 'when using valid company credentials' do
14
+ subject(:set_up_connection) { dummy_class.set_up_connection(valid_credentials, {}) }
15
+ it { expect(set_up_connection).to be_an_instance_of(Faraday::Connection) }
16
+ it { expect(set_up_connection.headers).to include({'Accept' => FinApps::REST::Defaults::HEADERS[:accept]}) }
17
+ it { expect(set_up_connection.headers).to include({'User-Agent' => FinApps::REST::Defaults::HEADERS[:user_agent]}) }
18
+ context 'when NOT providing user credentials' do
19
+ it { expect(set_up_connection.builder.handlers).not_to include(Faraday::Request::BasicAuthentication) }
20
+ end
21
+ end
22
+
23
+ context 'when using valid user credentials' do
24
+ subject(:set_up_connection) { dummy_class.set_up_connection(valid_credentials, user_credentials) }
25
+ let(:header) { Faraday::Request::BasicAuthentication.header(user_credentials[:user_identifier], user_credentials[:user_token]) }
26
+
27
+ it { expect(set_up_connection.builder.handlers).to include(Faraday::Request::BasicAuthentication) }
28
+ it 'sets a proper authorization header' do
29
+ stub_request(:get, "#{FinApps::REST::Defaults::DEFAULTS[:host]}/auth-echo").to_return(:status => 200)
30
+ expect(set_up_connection.get('/auth-echo').env.request_headers).to include({:authorization => header})
31
+ end
32
+ end
33
+
34
+ context 'using an invalid host_url parameter' do
35
+ subject(:set_up_connection) { dummy_class.set_up_connection(valid_credentials, {:host => 'yahoo.com'}) }
36
+ it { expect { set_up_connection }.to raise_error(FinApps::REST::InvalidArgumentsError) }
37
+ end
38
+
39
+ end
40
+ end
@@ -19,68 +19,20 @@ require 'finapps'
19
19
  #
20
20
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
21
21
  RSpec.configure do |config|
22
-
23
- # These two settings work together to allow you to limit a spec run
24
- # to individual examples or groups you care about by tagging them with
25
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
26
- # get run.
22
+ config.expect_with(:rspec) do |expectations|
23
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
24
+ expectations.syntax = :expect
25
+ end
26
+ config.mock_with(:rspec) { |mocks| mocks.verify_partial_doubles = true }
27
27
  config.filter_run :focus
28
28
  config.run_all_when_everything_filtered = true
29
-
30
- # Many RSpec users commonly either run the entire suite or an individual
31
- # file, and it's useful to allow more verbose output when running an
32
- # individual spec file.
33
- if config.files_to_run.one?
34
- # Use the documentation formatter for detailed output,
35
- # unless a formatter has already been configured
36
- # (e.g. via a command-line flag).
37
- config.default_formatter = 'doc'
38
- end
39
-
40
- # Run specs in random order to surface order dependencies. If you find an
41
- # order dependency and want to debug it, you can fix the order by providing
42
- # the seed, which is printed after each run.
43
- # --seed 1234
29
+ config.default_formatter = 'doc' if config.files_to_run.one?
44
30
  config.order = :random
45
-
46
- # The settings below are suggested to provide a good initial experience
47
- # with RSpec, but feel free to customize to your heart's content.
48
- =begin
49
-
50
- # Print the 10 slowest examples and example groups at the
51
- # end of the spec run, to help surface which specs are running
52
- # particularly slow.
53
- config.profile_examples = 10
54
-
55
- # Seed global randomization in this process using the `--seed` CLI option.
56
- # Setting this allows you to use `--seed` to deterministically reproduce
57
- # test failures related to randomization by passing the same `--seed` value
58
- # as the one that triggered the failure.
31
+ config.example_status_persistence_file_path = 'spec/examples.txt'
32
+ #config.disable_monkey_patching!
33
+ config.warnings = true
34
+ config.profile_examples = 5
59
35
  Kernel.srand config.seed
60
-
61
- # rspec-expectations config goes here. You can use an alternate
62
- # assertion/expectation library such as wrong or the stdlib/minitest
63
- # assertions if you prefer.
64
- config.expect_with :rspec do |expectations|
65
- # Enable only the newer, non-monkey-patching expect syntax.
66
- # For more details, see:
67
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
68
- expectations.syntax = :expect
69
- end
70
-
71
- # rspec-mocks config goes here. You can use an alternate test double
72
- # library (such as bogus or mocha) by changing the `mock_with` option here.
73
- config.mock_with :rspec do |mocks|
74
- # Enable only the newer, non-monkey-patching expect syntax.
75
- # For more details, see:
76
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
77
- mocks.syntax = :expect
78
-
79
- # Prevents you from mocking or stubbing a method that does not exist on
80
- # a real object. This is generally recommended.
81
- mocks.verify_partial_doubles = true
82
- end
83
- =end
84
-
85
-
86
36
  end
37
+
38
+ require 'webmock/rspec'
@@ -6,7 +6,8 @@ RSpec.describe FinApps::Logging do
6
6
  let(:simple_hash) { {:login => 'login', :password => 'secret'} }
7
7
  let(:deep_hash) { {:parameters => {:login => 'login', :password => 'secret'}} }
8
8
  let(:array_of_hashes) { {:parameters => [{:login => 'login', :password => 'secret'},
9
- {:login => 'login', :password => 'secret'}]} }
9
+ {:login1 => 'login1', :password1 => 'secret1'},
10
+ {:user => 'user', :token => 'secret'}]} }
10
11
 
11
12
  it 'should redact protected keys on a simple Hash' do
12
13
  redacted = dummy_class.skip_sensitive_data simple_hash
@@ -21,12 +22,7 @@ RSpec.describe FinApps::Logging do
21
22
  it 'should redact protected keys on an array of Hashes' do
22
23
  redacted = dummy_class.skip_sensitive_data array_of_hashes
23
24
  expect(redacted[:parameters][0][:password]).to eq('[REDACTED]')
24
- expect(redacted[:parameters][1][:password]).to eq('[REDACTED]')
25
+ expect(redacted[:parameters][1][:password1]).to eq('[REDACTED]')
26
+ expect(redacted[:parameters][2][:token]).to eq('[REDACTED]')
25
27
  end
26
28
  end
27
-
28
-
29
- =begin
30
- params : {:parameters => {"LOGIN1" => "MoneyMatch.site16441.1", "PASSWORD1" => "site16441.1"}}
31
- params : {:email => "erich@example.com", :password => "[REDACTED]"}
32
- =end
metadata CHANGED
@@ -1,180 +1,199 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: finapps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.4.pre
4
+ version: 1.0.0
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-03-04 00:00:00.000000000 Z
11
+ date: 2016-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: thor
14
+ name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.19'
19
+ version: '0.9'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.19.1
22
+ version: 0.9.2
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '0.19'
29
+ version: '0.9'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.19.1
32
+ version: 0.9.2
33
33
  - !ruby/object:Gem::Dependency
34
- name: faraday
34
+ name: faraday_middleware
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0.9'
39
+ version: '0.10'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.9.0
42
+ version: 0.10.0
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '0.9'
49
+ version: '0.10'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 0.9.0
52
+ version: 0.10.0
53
53
  - !ruby/object:Gem::Dependency
54
- name: faraday_middleware
54
+ name: typhoeus
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '0.9'
59
+ version: '1.0'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 0.9.1
62
+ version: 1.0.1
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0.9'
69
+ version: '1.0'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 0.9.1
72
+ version: 1.0.1
73
73
  - !ruby/object:Gem::Dependency
74
- name: typhoeus
74
+ name: rash
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '0.6'
79
+ version: '0.4'
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 0.6.8
82
+ version: 0.4.0
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.6'
89
+ version: '0.4'
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 0.6.8
92
+ version: 0.4.0
93
93
  - !ruby/object:Gem::Dependency
94
- name: rash
94
+ name: bundler
95
95
  requirement: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: '0.4'
99
+ version: '1.11'
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 0.4.0
103
- type: :runtime
102
+ version: 1.11.2
103
+ type: :development
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0.4'
109
+ version: '1.11'
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 0.4.0
112
+ version: 1.11.2
113
113
  - !ruby/object:Gem::Dependency
114
- name: bundler
114
+ name: rake
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: '1.6'
119
+ version: '11.1'
120
120
  - - ">="
121
121
  - !ruby/object:Gem::Version
122
- version: 1.6.2
122
+ version: 11.1.2
123
123
  type: :development
124
124
  prerelease: false
125
125
  version_requirements: !ruby/object:Gem::Requirement
126
126
  requirements:
127
127
  - - "~>"
128
128
  - !ruby/object:Gem::Version
129
- version: '1.6'
129
+ version: '11.1'
130
130
  - - ">="
131
131
  - !ruby/object:Gem::Version
132
- version: 1.6.2
132
+ version: 11.1.2
133
133
  - !ruby/object:Gem::Dependency
134
- name: rake
134
+ name: fuubar
135
135
  requirement: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: '0.9'
139
+ version: '2.0'
140
140
  - - ">="
141
141
  - !ruby/object:Gem::Version
142
- version: 0.9.6
142
+ version: 2.0.0
143
143
  type: :development
144
144
  prerelease: false
145
145
  version_requirements: !ruby/object:Gem::Requirement
146
146
  requirements:
147
147
  - - "~>"
148
148
  - !ruby/object:Gem::Version
149
- version: '0.9'
149
+ version: '2.0'
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: 0.9.6
152
+ version: 2.0.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rspec
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '3.0'
159
+ version: '3.4'
160
160
  - - ">="
161
161
  - !ruby/object:Gem::Version
162
- version: 3.0.0
162
+ version: 3.4.0
163
163
  type: :development
164
164
  prerelease: false
165
165
  version_requirements: !ruby/object:Gem::Requirement
166
166
  requirements:
167
167
  - - "~>"
168
168
  - !ruby/object:Gem::Version
169
- version: '3.0'
169
+ version: '3.4'
170
170
  - - ">="
171
171
  - !ruby/object:Gem::Version
172
- version: 3.0.0
172
+ version: 3.4.0
173
+ - !ruby/object:Gem::Dependency
174
+ name: webmock
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '1.24'
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: 1.24.2
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '1.24'
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 1.24.2
173
193
  description: A simple library for communicating with the FinApps REST API.
174
194
  email:
175
195
  - erich@financialapps.com
176
- executables:
177
- - finapps
196
+ executables: []
178
197
  extensions: []
179
198
  extra_rdoc_files:
180
199
  - README.md
@@ -188,15 +207,8 @@ files:
188
207
  - LICENSE.txt
189
208
  - README.md
190
209
  - Rakefile
191
- - bin/finapps
192
210
  - finapps.gemspec
193
211
  - lib/finapps.rb
194
- - lib/finapps/cli/alert_preferences.rb
195
- - lib/finapps/cli/budgets.rb
196
- - lib/finapps/cli/cashflows.rb
197
- - lib/finapps/cli/common.rb
198
- - lib/finapps/cli/institutions.rb
199
- - lib/finapps/cli/users.rb
200
212
  - lib/finapps/middleware/api_token.rb
201
213
  - lib/finapps/middleware/raise_http_exceptions.rb
202
214
  - lib/finapps/middleware/response_logger.rb
@@ -223,7 +235,9 @@ files:
223
235
  - lib/finapps/utils/logging.rb
224
236
  - lib/finapps/utils/utils.rb
225
237
  - lib/finapps/version.rb
238
+ - spec/middleware/api_token_spec.rb
226
239
  - spec/rest/client_spec.rb
240
+ - spec/rest/connection_spec.rb
227
241
  - spec/spec_helper.rb
228
242
  - spec/utils/logging_spec.rb
229
243
  homepage: http://github.com/finapps/finapps-ruby
@@ -247,16 +261,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
247
261
  version: '0'
248
262
  required_rubygems_version: !ruby/object:Gem::Requirement
249
263
  requirements:
250
- - - ">"
264
+ - - ">="
251
265
  - !ruby/object:Gem::Version
252
- version: 1.3.1
266
+ version: '0'
253
267
  requirements: []
254
268
  rubyforge_project:
255
- rubygems_version: 2.6.1
269
+ rubygems_version: 2.6.2
256
270
  signing_key:
257
271
  specification_version: 4
258
272
  summary: FinApps REST API ruby client.
259
273
  test_files:
260
274
  - spec/spec_helper.rb
275
+ - spec/rest/connection_spec.rb
261
276
  - spec/rest/client_spec.rb
262
277
  - spec/utils/logging_spec.rb
278
+ - spec/middleware/api_token_spec.rb
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'finapps/cli/common'
3
- require 'finapps/cli/users'
4
- require 'finapps/cli/institutions'
5
- require 'finapps/cli/budgets'
6
- require 'finapps/cli/cashflows'
7
- require 'finapps/cli/alert_preferences'
8
-
9
- FinApps::CLI.start
@@ -1,65 +0,0 @@
1
- require 'thor'
2
- require 'finapps'
3
- require 'pp'
4
-
5
- module FinApps
6
- class CLI < Thor
7
-
8
- desc 'alert_preferences', 'show'
9
-
10
- def alert_preferences_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
- alert_preferences, error_messages = client.alert_preferences.show
19
- if alert_preferences.present?
20
- puts
21
- puts 'alert preferences results:'
22
- pp alert_preferences
23
- else
24
- puts
25
- puts 'unable to get alert preferences'
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
- desc 'alert_preferences_update', 'update'
37
-
38
- def alert_preferences_update
39
-
40
- begin
41
-
42
- user_identifier = '53d17daf-909d-45d2-6fb6-d43b74d364cb'
43
- user_token = '4JZmhcHVf3ODRJ9TMKF7N/1sHDY3M5Q49A9ToAy+TDE='
44
-
45
- client.user_credentials!(user_identifier, user_token)
46
- alert_preferences, error_messages = client.alert_preferences.update({:emails => ['user@domain.com'], :phones => []})
47
- if alert_preferences.present?
48
- puts
49
- puts 'alert preferences results:'
50
- pp alert_preferences
51
- else
52
- puts
53
- puts 'unable to get alert preferences'
54
- error_messages.each { |m| puts m } if error_messages.present?
55
- end
56
- puts
57
-
58
- rescue StandardError => error
59
- rescue_standard_error(error)
60
- end
61
-
62
- end
63
-
64
- end
65
- end