mx-platform-ruby 0.1.0 → 0.1.1

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.
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
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MXPlatformRuby
4
+ class Statement
5
+ extend ::MXPlatformRuby::Pageable
6
+ include ::ActiveAttr::Model
7
+
8
+ attribute :account_guid
9
+ attribute :content_hash
10
+ attribute :created_at
11
+ attribute :guid
12
+ attribute :member_guid
13
+ attribute :updated_at
14
+ attribute :uri
15
+ attribute :user_guid
16
+
17
+ def self.download_statement_pdf(options = {})
18
+ download_statement_pdf_options = download_statement_pdf_options(options)
19
+ ::MXPlatformRuby.client.make_request(download_statement_pdf_options)
20
+ end
21
+
22
+ def self.list_statements_by_member(options = {})
23
+ options = list_statements_by_member_options(options)
24
+
25
+ paginate(options)
26
+ end
27
+
28
+ def self.read_statement_by_member(options = {})
29
+ read_statement_by_member_options = read_statement_by_member_options(options)
30
+ response = ::MXPlatformRuby.client.make_request(read_statement_by_member_options)
31
+
32
+ statement_params = response['statement']
33
+ ::MXPlatformRuby::Statement.new(statement_params)
34
+ end
35
+
36
+ # Private class methods
37
+
38
+ def self.download_statement_pdf_options(options)
39
+ {
40
+ endpoint: "/users/#{options[:user_guid]}/members/#{options[:member_guid]}/statements/#{options[:statement_guid]}.pdf",
41
+ headers: {
42
+ 'Accept': 'application/vnd.mx.api.v1+pdf'
43
+ },
44
+ http_method: :get
45
+ }
46
+ end
47
+ private_class_method :download_statement_pdf_options
48
+
49
+ def self.list_statements_by_member_options(options)
50
+ {
51
+ endpoint: "/users/#{options[:user_guid]}/members/#{options[:member_guid]}/statements",
52
+ http_method: :get,
53
+ query_params: {
54
+ page: options[:page],
55
+ records_per_page: options[:records_per_page]
56
+ }.compact,
57
+ resource: 'statements'
58
+ }
59
+ end
60
+ private_class_method :list_statements_by_member_options
61
+
62
+ def self.read_statement_by_member_options(options)
63
+ {
64
+ endpoint: "/users/#{options[:user_guid]}/members/#{options[:member_guid]}/statements/#{options[:statement_guid]}",
65
+ http_method: :get
66
+ }
67
+ end
68
+ private_class_method :read_statement_by_member_options
69
+ end
70
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MXPlatformRuby
4
+ class Tag
5
+ extend ::MXPlatformRuby::Pageable
6
+ include ::ActiveAttr::Model
7
+
8
+ attribute :guid
9
+ attribute :name
10
+ attribute :user_guid
11
+
12
+ def self.create_tag(options = {})
13
+ create_tag_options = create_tag_options(options)
14
+ response = ::MXPlatformRuby.client.make_request(create_tag_options)
15
+
16
+ tag_params = response['tag']
17
+ ::MXPlatformRuby::Tag.new(tag_params)
18
+ end
19
+
20
+ def self.delete_tag(options = {})
21
+ delete_tag_options = delete_tag_options(options)
22
+ ::MXPlatformRuby.client.make_request(delete_tag_options)
23
+ end
24
+
25
+ def self.list_tags(options = {})
26
+ options = list_tags_options(options)
27
+
28
+ paginate(options)
29
+ end
30
+
31
+ def self.read_tag(options = {})
32
+ read_tag_options = read_tag_options(options)
33
+ response = ::MXPlatformRuby.client.make_request(read_tag_options)
34
+
35
+ tag_params = response['tag']
36
+ ::MXPlatformRuby::Tag.new(tag_params)
37
+ end
38
+
39
+ def self.update_tag(options = {})
40
+ update_tag_options = update_tag_options(options)
41
+ response = ::MXPlatformRuby.client.make_request(update_tag_options)
42
+
43
+ tag_params = response['tag']
44
+ ::MXPlatformRuby::Tag.new(tag_params)
45
+ end
46
+
47
+ # Private class methods
48
+
49
+ def self.create_tag_options(options)
50
+ {
51
+ endpoint: "/users/#{options[:user_guid]}/tags",
52
+ http_method: :post,
53
+ request_body: {
54
+ tag: {
55
+ name: options[:name]
56
+ }.compact
57
+ }
58
+ }
59
+ end
60
+ private_class_method :create_tag_options
61
+
62
+ def self.delete_tag_options(options)
63
+ {
64
+ endpoint: "/users/#{options[:user_guid]}/tags/#{options[:tag_guid]}",
65
+ http_method: :delete
66
+ }
67
+ end
68
+ private_class_method :delete_tag_options
69
+
70
+ def self.list_tags_options(options)
71
+ {
72
+ endpoint: "/users/#{options[:user_guid]}/tags",
73
+ http_method: :get,
74
+ query_params: {
75
+ page: options[:page],
76
+ records_per_page: options[:records_per_page]
77
+ }.compact,
78
+ resource: 'tags'
79
+ }
80
+ end
81
+ private_class_method :list_tags_options
82
+
83
+ def self.read_tag_options(options)
84
+ {
85
+ endpoint: "/users/#{options[:user_guid]}/tags/#{options[:tag_guid]}",
86
+ http_method: :get
87
+ }
88
+ end
89
+ private_class_method :read_tag_options
90
+
91
+ def self.update_tag_options(options)
92
+ {
93
+ endpoint: "/users/#{options[:user_guid]}/tags/#{options[:tag_guid]}",
94
+ http_method: :put,
95
+ request_body: {
96
+ tag: {
97
+ name: options[:name]
98
+ }.compact
99
+ }
100
+ }
101
+ end
102
+ private_class_method :update_tag_options
103
+ end
104
+ end
@@ -0,0 +1,107 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MXPlatformRuby
4
+ class Tagging
5
+ extend ::MXPlatformRuby::Pageable
6
+ include ::ActiveAttr::Model
7
+
8
+ attribute :guid
9
+ attribute :member_is_managed_by_user
10
+ attribute :tag_guid
11
+ attribute :transaction_guid
12
+ attribute :user_guid
13
+
14
+ def self.create_tagging(options = {})
15
+ create_tagging_options = create_tagging_options(options)
16
+ response = ::MXPlatformRuby.client.make_request(create_tagging_options)
17
+
18
+ tagging_params = response['tagging']
19
+ ::MXPlatformRuby::Tagging.new(tagging_params)
20
+ end
21
+
22
+ def self.delete_tagging(options = {})
23
+ delete_tagging_options = delete_tagging_options(options)
24
+ ::MXPlatformRuby.client.make_request(delete_tagging_options)
25
+ end
26
+
27
+ def self.list_taggings(options = {})
28
+ options = list_taggings_options(options)
29
+
30
+ paginate(options)
31
+ end
32
+
33
+ def self.read_tagging(options = {})
34
+ read_tagging_options = read_tagging_options(options)
35
+ response = ::MXPlatformRuby.client.make_request(read_tagging_options)
36
+
37
+ tagging_params = response['tagging']
38
+ ::MXPlatformRuby::Tagging.new(tagging_params)
39
+ end
40
+
41
+ def self.update_tagging(options = {})
42
+ update_tagging_options = update_tagging_options(options)
43
+ response = ::MXPlatformRuby.client.make_request(update_tagging_options)
44
+
45
+ tagging_params = response['tagging']
46
+ ::MXPlatformRuby::Tagging.new(tagging_params)
47
+ end
48
+
49
+ # Private class methods
50
+
51
+ def self.create_tagging_options(options)
52
+ {
53
+ endpoint: "/users/#{options[:user_guid]}/taggings",
54
+ http_method: :post,
55
+ request_body: {
56
+ tagging: {
57
+ tag_guid: options[:tag_guid],
58
+ transaction_guid: options[:transaction_guid]
59
+ }.compact
60
+ }
61
+ }
62
+ end
63
+ private_class_method :create_tagging_options
64
+
65
+ def self.delete_tagging_options(options)
66
+ {
67
+ endpoint: "/users/#{options[:user_guid]}/taggings/#{options[:tagging_guid]}",
68
+ http_method: :delete
69
+ }
70
+ end
71
+ private_class_method :delete_tagging_options
72
+
73
+ def self.list_taggings_options(options)
74
+ {
75
+ endpoint: "/users/#{options[:user_guid]}/taggings",
76
+ http_method: :get,
77
+ query_params: {
78
+ page: options[:page],
79
+ records_per_page: options[:records_per_page]
80
+ }.compact,
81
+ resource: 'taggings'
82
+ }
83
+ end
84
+ private_class_method :list_taggings_options
85
+
86
+ def self.read_tagging_options(options)
87
+ {
88
+ endpoint: "/users/#{options[:user_guid]}/taggings/#{options[:tagging_guid]}",
89
+ http_method: :get
90
+ }
91
+ end
92
+ private_class_method :read_tagging_options
93
+
94
+ def self.update_tagging_options(options)
95
+ {
96
+ endpoint: "/users/#{options[:user_guid]}/taggings/#{options[:tagging_guid]}",
97
+ http_method: :put,
98
+ request_body: {
99
+ tagging: {
100
+ tag_guid: options[:tag_guid]
101
+ }.compact
102
+ }
103
+ }
104
+ end
105
+ private_class_method :update_tagging_options
106
+ end
107
+ end
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MXPlatformRuby
4
+ class Transaction
5
+ extend ::MXPlatformRuby::Pageable
6
+ include ::ActiveAttr::Model
7
+
8
+ attribute :account_guid
9
+ attribute :amount
10
+ attribute :category
11
+ attribute :check_number_string
12
+ attribute :created_at
13
+ attribute :currency_code
14
+ attribute :date
15
+ attribute :description
16
+ attribute :guid
17
+ attribute :id
18
+ attribute :is_bill_pay
19
+ attribute :is_direct_deposit
20
+ attribute :is_expense
21
+ attribute :is_fee
22
+ attribute :is_income
23
+ attribute :is_international
24
+ attribute :is_overdraft_fee
25
+ attribute :is_payroll_advance
26
+ attribute :is_recurring
27
+ attribute :is_subscription
28
+ attribute :latitude
29
+ attribute :localized_description
30
+ attribute :localized_memo
31
+ attribute :longitude
32
+ attribute :member_guid
33
+ attribute :memo
34
+ attribute :merchant_category_code
35
+ attribute :merchant_guid
36
+ attribute :original_description
37
+ attribute :posted_at
38
+ attribute :status
39
+ attribute :top_level_category
40
+ attribute :transacted_at
41
+ attribute :type
42
+ attribute :updated_at
43
+ attribute :user_guid
44
+
45
+ def self.list_transactions_by_account(options = {})
46
+ options = list_transactions_by_account_options(options)
47
+
48
+ paginate(options)
49
+ end
50
+
51
+ def self.list_transactions_by_member(options = {})
52
+ options = list_transactions_by_member_options(options)
53
+
54
+ paginate(options)
55
+ end
56
+
57
+ def self.list_transactions_by_tag(options = {})
58
+ options = list_transactions_by_tag_options(options)
59
+
60
+ paginate(options)
61
+ end
62
+
63
+ def self.list_transactions_by_user(options = {})
64
+ options = list_transactions_by_user_options(options)
65
+
66
+ paginate(options)
67
+ end
68
+
69
+ def self.read_transaction(options = {})
70
+ read_transaction_options = read_transaction_options(options)
71
+ response = ::MXPlatformRuby.client.make_request(read_transaction_options)
72
+
73
+ transaction_params = response['transaction']
74
+ ::MXPlatformRuby::Transaction.new(transaction_params)
75
+ end
76
+
77
+ def self.update_transaction(options = {})
78
+ update_transaction_options = update_transaction_options(options)
79
+ response = ::MXPlatformRuby.client.make_request(update_transaction_options)
80
+
81
+ transaction_params = response['transaction']
82
+ ::MXPlatformRuby::Transaction.new(transaction_params)
83
+ end
84
+
85
+ # Private class methods
86
+
87
+ def self.list_transactions_by_account_options(options)
88
+ {
89
+ endpoint: "/users/#{options[:user_guid]}/accounts/#{options[:account_guid]}/transactions",
90
+ http_method: :get,
91
+ query_params: {
92
+ from_date: options[:from_date],
93
+ page: options[:page],
94
+ records_per_page: options[:records_per_page],
95
+ to_date: options[:to_date]
96
+ }.compact,
97
+ resource: 'transactions'
98
+ }
99
+ end
100
+ private_class_method :list_transactions_by_account_options
101
+
102
+ def self.list_transactions_by_member_options(options)
103
+ {
104
+ endpoint: "/users/#{options[:user_guid]}/members/#{options[:member_guid]}/transactions",
105
+ http_method: :get,
106
+ query_params: {
107
+ from_date: options[:from_date],
108
+ page: options[:page],
109
+ records_per_page: options[:records_per_page],
110
+ to_date: options[:to_date]
111
+ }.compact,
112
+ resource: 'transactions'
113
+ }
114
+ end
115
+ private_class_method :list_transactions_by_member_options
116
+
117
+ def self.list_transactions_by_tag_options(options)
118
+ {
119
+ endpoint: "/users/#{options[:user_guid]}/tags/#{options[:tag_guid]}/transactions",
120
+ http_method: :get,
121
+ resource: 'transactions'
122
+ }
123
+ end
124
+ private_class_method :list_transactions_by_tag_options
125
+
126
+ def self.list_transactions_by_user_options(options)
127
+ {
128
+ endpoint: "/users/#{options[:user_guid]}/transactions",
129
+ http_method: :get,
130
+ query_params: {
131
+ from_date: options[:from_date],
132
+ page: options[:page],
133
+ records_per_page: options[:records_per_page],
134
+ to_date: options[:to_date]
135
+ }.compact,
136
+ resource: 'transactions'
137
+ }
138
+ end
139
+ private_class_method :list_transactions_by_user_options
140
+
141
+ def self.read_transaction_options(options)
142
+ {
143
+ endpoint: "/users/#{options[:user_guid]}/transactions/#{options[:transaction_guid]}",
144
+ http_method: :get
145
+ }
146
+ end
147
+ private_class_method :read_transaction_options
148
+
149
+ def self.update_transaction_options(options)
150
+ {
151
+ endpoint: "/users/#{options[:user_guid]}/transactions/#{options[:transaction_guid]}",
152
+ http_method: :put,
153
+ request_body: {
154
+ transaction: {
155
+ description: options[:description]
156
+ }.compact
157
+ }
158
+ }
159
+ end
160
+ private_class_method :update_transaction_options
161
+ end
162
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MXPlatformRuby
4
+ class TransactionRule
5
+ extend ::MXPlatformRuby::Pageable
6
+ include ::ActiveAttr::Model
7
+
8
+ attribute :category_guid
9
+ attribute :created_at
10
+ attribute :description
11
+ attribute :guid
12
+ attribute :match_description
13
+ attribute :updated_at
14
+ attribute :user_guid
15
+
16
+ def self.create_transaction_rule(options = {})
17
+ create_transaction_rule_options = create_transaction_rule_options(options)
18
+ response = ::MXPlatformRuby.client.make_request(create_transaction_rule_options)
19
+
20
+ transaction_rule_params = response['transaction_rule']
21
+ ::MXPlatformRuby::TransactionRule.new(transaction_rule_params)
22
+ end
23
+
24
+ def self.delete_transaction_rule(options = {})
25
+ delete_transaction_rule_options = delete_transaction_rule_options(options)
26
+ ::MXPlatformRuby.client.make_request(delete_transaction_rule_options)
27
+ end
28
+
29
+ def self.list_transaction_rules_by_user(options = {})
30
+ options = list_transaction_rules_by_user_options(options)
31
+
32
+ paginate(options)
33
+ end
34
+
35
+ def self.read_transaction_rule(options = {})
36
+ read_transaction_rule_options = read_transaction_rule_options(options)
37
+ response = ::MXPlatformRuby.client.make_request(read_transaction_rule_options)
38
+
39
+ transaction_rule_params = response['transaction_rule']
40
+ ::MXPlatformRuby::TransactionRule.new(transaction_rule_params)
41
+ end
42
+
43
+ def self.update_transaction_rule(options = {})
44
+ update_transaction_rule_options = update_transaction_rule_options(options)
45
+ response = ::MXPlatformRuby.client.make_request(update_transaction_rule_options)
46
+
47
+ transaction_rule_params = response['transaction_rule']
48
+ ::MXPlatformRuby::TransactionRule.new(transaction_rule_params)
49
+ end
50
+
51
+ # Private class methods
52
+
53
+ def self.create_transaction_rule_options(options)
54
+ {
55
+ endpoint: "/users/#{options[:user_guid]}/transaction_rules",
56
+ http_method: :post,
57
+ request_body: {
58
+ transaction_rule: {
59
+ category_guid: options[:category_guid],
60
+ description: options[:description],
61
+ match_description: options[:match_description]
62
+ }.compact
63
+ }
64
+ }
65
+ end
66
+ private_class_method :create_transaction_rule_options
67
+
68
+ def self.delete_transaction_rule_options(options)
69
+ {
70
+ endpoint: "/users/#{options[:user_guid]}/transaction_rules/#{options[:transaction_rule_guid]}",
71
+ http_method: :delete
72
+ }
73
+ end
74
+ private_class_method :delete_transaction_rule_options
75
+
76
+ def self.list_transaction_rules_by_user_options(options)
77
+ {
78
+ endpoint: "/users/#{options[:user_guid]}/transaction_rules",
79
+ http_method: :get,
80
+ query_params: {
81
+ page: options[:page],
82
+ records_per_page: options[:records_per_page]
83
+ }.compact,
84
+ resource: 'transaction_rules'
85
+ }
86
+ end
87
+ private_class_method :list_transaction_rules_by_user_options
88
+
89
+ def self.read_transaction_rule_options(options)
90
+ {
91
+ endpoint: "/users/#{options[:user_guid]}/transaction_rules/#{options[:transaction_rule_guid]}",
92
+ http_method: :get
93
+ }
94
+ end
95
+ private_class_method :read_transaction_rule_options
96
+
97
+ def self.update_transaction_rule_options(options)
98
+ {
99
+ endpoint: "/users/#{options[:user_guid]}/transaction_rules/#{options[:transaction_rule_guid]}",
100
+ http_method: :put,
101
+ request_body: {
102
+ transaction_rule: {
103
+ category_guid: options[:category_guid],
104
+ description: options[:description],
105
+ match_description: options[:match_description]
106
+ }.compact
107
+ }
108
+ }
109
+ end
110
+ private_class_method :update_transaction_rule_options
111
+ end
112
+ end