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
@@ -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