mx-platform-ruby 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +20 -0
  3. data/.gitignore +13 -0
  4. data/.rubocop.yml +44 -0
  5. data/Gemfile +5 -0
  6. data/LICENSE +21 -0
  7. data/README.md +60 -0
  8. data/Rakefile +11 -0
  9. data/lib/mx-platform-ruby.rb +44 -0
  10. data/lib/mx-platform-ruby/account.rb +107 -0
  11. data/lib/mx-platform-ruby/account_number.rb +57 -0
  12. data/lib/mx-platform-ruby/account_owner.rb +42 -0
  13. data/lib/mx-platform-ruby/category.rb +127 -0
  14. data/lib/mx-platform-ruby/challenge.rb +37 -0
  15. data/lib/mx-platform-ruby/client.rb +59 -0
  16. data/lib/mx-platform-ruby/connect_widget.rb +43 -0
  17. data/lib/mx-platform-ruby/credential.rb +54 -0
  18. data/lib/mx-platform-ruby/enhanced_transaction.rb +44 -0
  19. data/lib/mx-platform-ruby/error.rb +6 -0
  20. data/lib/mx-platform-ruby/holding.rb +87 -0
  21. data/lib/mx-platform-ruby/institution.rb +78 -0
  22. data/lib/mx-platform-ruby/member.rb +242 -0
  23. data/lib/mx-platform-ruby/member_status.rb +35 -0
  24. data/lib/mx-platform-ruby/merchant.rb +52 -0
  25. data/lib/mx-platform-ruby/oauth_window.rb +32 -0
  26. data/lib/mx-platform-ruby/pageable.rb +29 -0
  27. data/lib/mx-platform-ruby/statement.rb +70 -0
  28. data/lib/mx-platform-ruby/tag.rb +104 -0
  29. data/lib/mx-platform-ruby/tagging.rb +107 -0
  30. data/lib/mx-platform-ruby/transaction.rb +162 -0
  31. data/lib/mx-platform-ruby/transaction_rule.rb +112 -0
  32. data/lib/mx-platform-ruby/user.rb +112 -0
  33. data/lib/mx-platform-ruby/version.rb +5 -0
  34. data/lib/mx-platform-ruby/widget.rb +49 -0
  35. data/mx-platform-ruby.gemspec +31 -0
  36. data/spec/lib/mx-platform-ruby/account_number_spec.rb +100 -0
  37. data/spec/lib/mx-platform-ruby/account_owner_spec.rb +71 -0
  38. data/spec/lib/mx-platform-ruby/account_spec.rb +267 -0
  39. data/spec/lib/mx-platform-ruby/category_spec.rb +244 -0
  40. data/spec/lib/mx-platform-ruby/challenge_spec.rb +72 -0
  41. data/spec/lib/mx-platform-ruby/client_spec.rb +101 -0
  42. data/spec/lib/mx-platform-ruby/connect_widget_spec.rb +66 -0
  43. data/spec/lib/mx-platform-ruby/credential_spec.rb +90 -0
  44. data/spec/lib/mx-platform-ruby/enhanced_transaction_spec.rb +89 -0
  45. data/spec/lib/mx-platform-ruby/holding_spec.rb +178 -0
  46. data/spec/lib/mx-platform-ruby/institution_spec.rb +141 -0
  47. data/spec/lib/mx-platform-ruby/member_spec.rb +557 -0
  48. data/spec/lib/mx-platform-ruby/member_status_spec.rb +76 -0
  49. data/spec/lib/mx-platform-ruby/merchant_spec.rb +89 -0
  50. data/spec/lib/mx-platform-ruby/oauth_window_spec.rb +47 -0
  51. data/spec/lib/mx-platform-ruby/pageable_spec.rb +75 -0
  52. data/spec/lib/mx-platform-ruby/statement_spec.rb +130 -0
  53. data/spec/lib/mx-platform-ruby/tag_spec.rb +179 -0
  54. data/spec/lib/mx-platform-ruby/tagging_spec.rb +191 -0
  55. data/spec/lib/mx-platform-ruby/transaction_rule_spec.rb +207 -0
  56. data/spec/lib/mx-platform-ruby/transaction_spec.rb +449 -0
  57. data/spec/lib/mx-platform-ruby/user_spec.rb +196 -0
  58. data/spec/lib/mx-platform-ruby/widget_spec.rb +76 -0
  59. data/spec/lib/mx-platform-ruby_spec.rb +15 -0
  60. data/spec/sample.pdf +0 -0
  61. data/spec/spec_helper.rb +24 -0
  62. metadata +63 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3acaf995ec3a1e178a0971383e20d718ed30b92fe4f9ac4a4dd188e7f3e7b744
4
- data.tar.gz: 12aa93dd4985d7928cc04d1ba1272005cb425c46f45d1e5b79ae9e29fab6f2a6
3
+ metadata.gz: 9c37bb296e94c8e9931a9446fb80593f48d9e7b87ac3fb71d1d29cebb58c8723
4
+ data.tar.gz: 5d60ba2b693ffeecdd49348c0a0a444f1e202367a263f4385f3a61ab1e34fafd
5
5
  SHA512:
6
- metadata.gz: ba9bc8ffd71e4e04f5748a155b16f686816a40e82455173a6c57b49d8d06f7ba48ab96ca7bf80b93406ac7157d2024987547428f4ac2af693a40b7588c53c28e
7
- data.tar.gz: 31e8b3fc197cc6e4f3bd6dd97b8f54113093bdcfee7331eade8172c00dadf56bfba41c5a365442751d22a0bb6709a51e3790a60977bae4842330bd1960015017
6
+ metadata.gz: 9a245730b4ba64a0a5bc1d21a25b1834ed18951371fb4bcef008e5a8c84a5f78351b82f4ceab2cff914249d5cf4ed1e80f4ff06e36dcacecfc706b490cb818ff
7
+ data.tar.gz: ec13d47c295fff12ec888c527f3e4dfc81a401bb10c0169fb31bcdfd826b2f18d7d8091d40cd0fbefbe348dda13047b98e055ee4f3c153f89c4c2e270a86338e
@@ -0,0 +1,20 @@
1
+ name: Test
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ Test:
7
+
8
+ runs-on: ubuntu-latest
9
+
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - name: Set up Ruby
13
+ uses: ruby/setup-ruby@v1
14
+ with:
15
+ bundler-cache: true
16
+ ruby-version: 2.6
17
+ - name: Install dependencies
18
+ run: bundle install
19
+ - name: Run RuboCop and RSpec
20
+ run: bundle exec rake
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ *.gem
2
+ *.swp
3
+ .bundle
4
+ .config
5
+ .DS_Store
6
+ .idea
7
+ .ruby-*
8
+ .rvmrc
9
+ .yardoc
10
+ coverage
11
+ Gemfile.lock
12
+ pkg/*
13
+ tmp
data/.rubocop.yml ADDED
@@ -0,0 +1,44 @@
1
+ AllCops:
2
+ NewCops: disable # Disabling pending cops
3
+ SuggestExtensions: false # Disabling extension suggestions
4
+ TargetRubyVersion: 2.6
5
+
6
+ Layout/LineLength:
7
+ Description: Checks the length of lines in the source code
8
+ Exclude:
9
+ - 'spec/lib/**/*.rb' # Excluding to avoid multiline expect statements
10
+ IgnoredPatterns: ['^ endpoint: ".*'] # Excluding since the endpoints may require longer lines
11
+ Max: 120
12
+
13
+ Metrics/AbcSize:
14
+ Description: Checks that the ABC size of methods is not higher than the configured maximum
15
+ Exclude:
16
+ - 'lib/mx-platform-ruby/pageable.rb' # Disabling because clarity > brevity
17
+
18
+ Metrics/BlockLength:
19
+ Description: Checks if the length of a block exceeds some maximum value
20
+ Exclude:
21
+ - 'spec/**/*' # Excluding to allow rspec tests to grow with number of attributes
22
+
23
+ Metrics/ClassLength:
24
+ Description: Checks if the length a class exceeds some maximum value
25
+ Enabled: false # Disabling because clarity > brevity
26
+
27
+ Metrics/MethodLength:
28
+ Description: Checks if the length a method exceeds some maximum value
29
+ Enabled: false # Disabling to allow class methods to grow with number of attributes
30
+
31
+ Naming/FileName:
32
+ Description: Checks that Ruby source files have snake_case names
33
+ Exclude:
34
+ - 'spec/lib/mx-platform-ruby_spec.rb' # Excluding since gems may have `-` in their name
35
+ - 'lib/mx-platform-ruby.rb' # Excluding since gems may have `-` in their name
36
+
37
+ Style/Documentation:
38
+ Description: Checks for missing top-level documentation of classes and modules
39
+ Enabled: false # Disabling because Rails models should be self-explanatory
40
+
41
+ Style/SignalException:
42
+ Description: Checks for uses of fail and raise
43
+ Exclude:
44
+ - 'lib/mx-platform-ruby/pageable.rb' # Allow fail if block isn't provided
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 MX
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,60 @@
1
+ *This project is currently in **Beta**. Please open up an issue [here](https://github.com/mxenabled/mx-platform-ruby/issues) to report issues using the MX Platform API Ruby Library.*
2
+
3
+ # MX Platform API Ruby Library
4
+ #### Version 0.1.1
5
+
6
+ A Ruby library for the [MX Platform API](https://www.mx.com/products/platform-api).
7
+
8
+ ## Documentation
9
+
10
+ See the [MX Platform API docs](https://docs.mx.com/api).
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ gem 'mx-platform-ruby'
18
+ ```
19
+
20
+ And then execute:
21
+ ```shell
22
+ $ bundle
23
+ ```
24
+ Or install it yourself with:
25
+ ```shell
26
+ $ gem install mx-platform-ruby
27
+ ```
28
+
29
+ ## Configuration
30
+
31
+ In order to make API requests, you will need to [sign up for the MX Platform API](https://dashboard.mx.com/sign_up) and get a `Client ID` and `API Key`.
32
+ ```ruby
33
+ ::MXPlatformRuby.configure do |config|
34
+ config.username = 'Client ID'
35
+ config.password = 'API Key'
36
+ config.base_url = 'https://int-api.mx.com' # in production, use 'https://api.mx.com'
37
+ end
38
+ ```
39
+
40
+ ## Paginated endpoints
41
+
42
+ For paginated endpoints, the pagination values can be accessed through the returned `::MXPlatformRuby::Page` array as follows
43
+
44
+ ```ruby
45
+ institutions = ::MXPlatformRuby::Institution.list_institutions(options)
46
+
47
+ puts "Current page: #{institutions.current_page}"
48
+ puts "Per page: #{institutions.per_page}"
49
+ puts "Total entries: #{institutions.total_entries}"
50
+ puts "Total pages: #{institutions.total_pages}"
51
+
52
+ institutions.each do |institution|
53
+ p institution
54
+ end
55
+ ```
56
+
57
+
58
+ ## Contributing
59
+
60
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/mxenabled/mx-platform-ruby).
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
6
+
7
+ ::RSpec::Core::RakeTask.new(:spec)
8
+ ::RuboCop::RakeTask.new(:rubocop)
9
+
10
+ desc 'Run RuboCop and RSpec'
11
+ task default: %i[rubocop spec]
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_attr'
4
+ require 'base64'
5
+ require 'httpclient'
6
+ require 'json'
7
+
8
+ require 'mx-platform-ruby/client'
9
+ require 'mx-platform-ruby/error'
10
+ require 'mx-platform-ruby/pageable'
11
+ require 'mx-platform-ruby/version'
12
+
13
+ require 'mx-platform-ruby/account'
14
+ require 'mx-platform-ruby/account_number'
15
+ require 'mx-platform-ruby/account_owner'
16
+ require 'mx-platform-ruby/category'
17
+ require 'mx-platform-ruby/challenge'
18
+ require 'mx-platform-ruby/connect_widget'
19
+ require 'mx-platform-ruby/credential'
20
+ require 'mx-platform-ruby/enhanced_transaction'
21
+ require 'mx-platform-ruby/holding'
22
+ require 'mx-platform-ruby/institution'
23
+ require 'mx-platform-ruby/member'
24
+ require 'mx-platform-ruby/member_status'
25
+ require 'mx-platform-ruby/merchant'
26
+ require 'mx-platform-ruby/oauth_window'
27
+ require 'mx-platform-ruby/statement'
28
+ require 'mx-platform-ruby/tag'
29
+ require 'mx-platform-ruby/tagging'
30
+ require 'mx-platform-ruby/transaction'
31
+ require 'mx-platform-ruby/transaction_rule'
32
+ require 'mx-platform-ruby/user'
33
+ require 'mx-platform-ruby/widget'
34
+
35
+ module MXPlatformRuby
36
+ class << self
37
+ attr_reader :client
38
+
39
+ def configure
40
+ @client = ::MXPlatformRuby::Client.new
41
+ yield @client
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,107 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MXPlatformRuby
4
+ class Account
5
+ extend ::MXPlatformRuby::Pageable
6
+ include ::ActiveAttr::Model
7
+
8
+ attribute :account_number
9
+ attribute :apr
10
+ attribute :apy
11
+ attribute :available_balance
12
+ attribute :available_credit
13
+ attribute :balance
14
+ attribute :cash_balance
15
+ attribute :cash_surrender_value
16
+ attribute :created_at
17
+ attribute :credit_limit
18
+ attribute :currency_code
19
+ attribute :day_payment_is_due
20
+ attribute :death_benefit
21
+ attribute :guid
22
+ attribute :holdings_value
23
+ attribute :id
24
+ attribute :institution_code
25
+ attribute :insured_name
26
+ attribute :interest_rate
27
+ attribute :is_closed
28
+ attribute :is_hidden
29
+ attribute :last_payment
30
+ attribute :last_payment_at
31
+ attribute :loan_amount
32
+ attribute :matures_on
33
+ attribute :member_guid
34
+ attribute :minimum_balance
35
+ attribute :minimum_payment
36
+ attribute :name
37
+ attribute :original_balance
38
+ attribute :pay_out_amount
39
+ attribute :payment_due_at
40
+ attribute :payoff_balance
41
+ attribute :premium_amount
42
+ attribute :started_on
43
+ attribute :subtype
44
+ attribute :total_account_value
45
+ attribute :type
46
+ attribute :updated_at
47
+ attribute :user_guid
48
+
49
+ def self.list_user_accounts(options = {})
50
+ options = list_user_accounts_options(options)
51
+
52
+ paginate(options)
53
+ end
54
+
55
+ def self.read_account(options = {})
56
+ read_account_options = read_account_options(options)
57
+ response = ::MXPlatformRuby.client.make_request(read_account_options)
58
+
59
+ account_params = response['account']
60
+ ::MXPlatformRuby::Account.new(account_params)
61
+ end
62
+
63
+ def self.update_account(options = {})
64
+ update_account_options = update_account_options(options)
65
+ response = ::MXPlatformRuby.client.make_request(update_account_options)
66
+
67
+ account_params = response['account']
68
+ ::MXPlatformRuby::Account.new(account_params)
69
+ end
70
+
71
+ # Private class methods
72
+
73
+ def self.list_user_accounts_options(options)
74
+ {
75
+ endpoint: "/users/#{options[:user_guid]}/accounts",
76
+ http_method: :get,
77
+ query_params: {
78
+ page: options[:page],
79
+ records_per_page: options[:records_per_page]
80
+ }.compact,
81
+ resource: 'accounts'
82
+ }
83
+ end
84
+ private_class_method :list_user_accounts_options
85
+
86
+ def self.read_account_options(options)
87
+ {
88
+ endpoint: "/users/#{options[:user_guid]}/accounts/#{options[:account_guid]}",
89
+ http_method: :get
90
+ }
91
+ end
92
+ private_class_method :read_account_options
93
+
94
+ def self.update_account_options(options)
95
+ {
96
+ endpoint: "/users/#{options[:user_guid]}/members/#{options[:member_guid]}/accounts/#{options[:account_guid]}",
97
+ http_method: :put,
98
+ request_body: {
99
+ account: {
100
+ is_hidden: options[:is_hidden]
101
+ }.compact
102
+ }
103
+ }
104
+ end
105
+ private_class_method :update_account_options
106
+ end
107
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MXPlatformRuby
4
+ class AccountNumber
5
+ extend ::MXPlatformRuby::Pageable
6
+ include ::ActiveAttr::Model
7
+
8
+ attribute :account_guid
9
+ attribute :account_number
10
+ attribute :guid
11
+ attribute :institution_number
12
+ attribute :member_guid
13
+ attribute :routing_number
14
+ attribute :transit_number
15
+ attribute :user_guid
16
+
17
+ def self.list_account_numbers_by_account(options = {})
18
+ options = list_account_numbers_by_account_options(options)
19
+
20
+ paginate(options)
21
+ end
22
+
23
+ def self.list_account_numbers_by_member(options = {})
24
+ options = list_account_numbers_by_member_options(options)
25
+
26
+ paginate(options)
27
+ end
28
+
29
+ # Private class methods
30
+
31
+ def self.list_account_numbers_by_account_options(options)
32
+ {
33
+ endpoint: "/users/#{options[:user_guid]}/accounts/#{options[:account_guid]}/account_numbers",
34
+ http_method: :get,
35
+ query_params: {
36
+ page: options[:page],
37
+ records_per_page: options[:records_per_page]
38
+ }.compact,
39
+ resource: 'account_numbers'
40
+ }
41
+ end
42
+ private_class_method :list_account_numbers_by_account_options
43
+
44
+ def self.list_account_numbers_by_member_options(options)
45
+ {
46
+ endpoint: "/users/#{options[:user_guid]}/members/#{options[:member_guid]}/account_numbers",
47
+ http_method: :get,
48
+ query_params: {
49
+ page: options[:page],
50
+ records_per_page: options[:records_per_page]
51
+ }.compact,
52
+ resource: 'account_numbers'
53
+ }
54
+ end
55
+ private_class_method :list_account_numbers_by_member_options
56
+ end
57
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MXPlatformRuby
4
+ class AccountOwner
5
+ extend ::MXPlatformRuby::Pageable
6
+ include ::ActiveAttr::Model
7
+
8
+ attribute :account_guid
9
+ attribute :address
10
+ attribute :city
11
+ attribute :country
12
+ attribute :email
13
+ attribute :guid
14
+ attribute :member_guid
15
+ attribute :owner_name
16
+ attribute :phone
17
+ attribute :postal_code
18
+ attribute :state
19
+ attribute :user_guid
20
+
21
+ def self.list_account_owners(options = {})
22
+ options = list_account_owners_options(options)
23
+
24
+ paginate(options)
25
+ end
26
+
27
+ # Private class methods
28
+
29
+ def self.list_account_owners_options(options)
30
+ {
31
+ endpoint: "/users/#{options[:user_guid]}/members/#{options[:member_guid]}/account_owners",
32
+ http_method: :get,
33
+ query_params: {
34
+ page: options[:page],
35
+ records_per_page: options[:records_per_page]
36
+ }.compact,
37
+ resource: 'account_owners'
38
+ }
39
+ end
40
+ private_class_method :list_account_owners_options
41
+ end
42
+ end