lunchmoney 1.0.0 → 1.1.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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/publish_gem.yml +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/lib/lunchmoney/api.rb +34 -34
  5. data/lib/lunchmoney/calls/assets.rb +98 -0
  6. data/lib/lunchmoney/calls/base.rb +112 -0
  7. data/lib/lunchmoney/calls/budgets.rb +84 -0
  8. data/lib/lunchmoney/calls/categories.rb +196 -0
  9. data/lib/lunchmoney/calls/crypto.rb +50 -0
  10. data/lib/lunchmoney/calls/plaid_accounts.rb +40 -0
  11. data/lib/lunchmoney/calls/recurring_expenses.rb +29 -0
  12. data/lib/lunchmoney/calls/tags.rb +21 -0
  13. data/lib/lunchmoney/calls/transactions.rb +220 -0
  14. data/lib/lunchmoney/calls/users.rb +21 -0
  15. data/lib/lunchmoney/objects/asset.rb +91 -0
  16. data/lib/lunchmoney/objects/budget.rb +76 -0
  17. data/lib/lunchmoney/objects/category.rb +55 -0
  18. data/lib/lunchmoney/objects/child_category.rb +44 -0
  19. data/lib/lunchmoney/objects/child_transaction.rb +35 -0
  20. data/lib/lunchmoney/objects/config.rb +40 -0
  21. data/lib/lunchmoney/objects/crypto.rb +46 -0
  22. data/lib/lunchmoney/objects/crypto_base.rb +67 -0
  23. data/lib/lunchmoney/objects/data.rb +44 -0
  24. data/lib/lunchmoney/objects/object.rb +28 -0
  25. data/lib/lunchmoney/objects/plaid_account.rb +75 -0
  26. data/lib/lunchmoney/objects/recurring_expense.rb +68 -0
  27. data/lib/lunchmoney/objects/recurring_expense_base.rb +31 -0
  28. data/lib/lunchmoney/objects/split.rb +28 -0
  29. data/lib/lunchmoney/objects/tag.rb +24 -0
  30. data/lib/lunchmoney/objects/tag_base.rb +23 -0
  31. data/lib/lunchmoney/objects/transaction.rb +160 -0
  32. data/lib/lunchmoney/objects/transaction_base.rb +54 -0
  33. data/lib/lunchmoney/objects/transaction_modification_base.rb +32 -0
  34. data/lib/lunchmoney/objects/update_transaction.rb +47 -0
  35. data/lib/lunchmoney/objects/user.rb +38 -0
  36. data/lib/lunchmoney/version.rb +1 -1
  37. metadata +32 -32
  38. data/lib/lunchmoney/api_call.rb +0 -109
  39. data/lib/lunchmoney/assets/asset.rb +0 -89
  40. data/lib/lunchmoney/assets/asset_calls.rb +0 -96
  41. data/lib/lunchmoney/budget/budget.rb +0 -74
  42. data/lib/lunchmoney/budget/budget_calls.rb +0 -82
  43. data/lib/lunchmoney/budget/config.rb +0 -38
  44. data/lib/lunchmoney/budget/data.rb +0 -42
  45. data/lib/lunchmoney/categories/category/category.rb +0 -52
  46. data/lib/lunchmoney/categories/category/child_category.rb +0 -42
  47. data/lib/lunchmoney/categories/category_calls.rb +0 -195
  48. data/lib/lunchmoney/crypto/crypto/crypto.rb +0 -43
  49. data/lib/lunchmoney/crypto/crypto/crypto_base.rb +0 -65
  50. data/lib/lunchmoney/crypto/crypto_calls.rb +0 -49
  51. data/lib/lunchmoney/data_object.rb +0 -25
  52. data/lib/lunchmoney/plaid_accounts/plaid_account.rb +0 -73
  53. data/lib/lunchmoney/plaid_accounts/plaid_account_calls.rb +0 -38
  54. data/lib/lunchmoney/recurring_expenses/recurring_expense/recurring_expense.rb +0 -65
  55. data/lib/lunchmoney/recurring_expenses/recurring_expense/recurring_expense_base.rb +0 -29
  56. data/lib/lunchmoney/recurring_expenses/recurring_expense_calls.rb +0 -28
  57. data/lib/lunchmoney/tags/tag/tag.rb +0 -20
  58. data/lib/lunchmoney/tags/tag/tag_base.rb +0 -21
  59. data/lib/lunchmoney/tags/tag_calls.rb +0 -20
  60. data/lib/lunchmoney/transactions/transaction/child_transaction.rb +0 -31
  61. data/lib/lunchmoney/transactions/transaction/split.rb +0 -24
  62. data/lib/lunchmoney/transactions/transaction/transaction.rb +0 -156
  63. data/lib/lunchmoney/transactions/transaction/transaction_base.rb +0 -52
  64. data/lib/lunchmoney/transactions/transaction/transaction_modification_base.rb +0 -30
  65. data/lib/lunchmoney/transactions/transaction/update_transaction.rb +0 -43
  66. data/lib/lunchmoney/transactions/transaction_calls.rb +0 -218
  67. data/lib/lunchmoney/user/user.rb +0 -36
  68. data/lib/lunchmoney/user/user_calls.rb +0 -19
@@ -0,0 +1,40 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module LunchMoney
5
+ module Objects
6
+ # https://lunchmoney.dev/#config-object
7
+ class Config < LunchMoney::Objects::Object
8
+ # API object reference documentation: https://lunchmoney.dev/#config-object
9
+
10
+ sig { returns(Integer) }
11
+ attr_accessor :config_id
12
+
13
+ sig { returns(Number) }
14
+ attr_accessor :amount, :to_base
15
+
16
+ sig { returns(String) }
17
+ attr_accessor :cadence, :currency, :auto_suggest
18
+
19
+ sig do
20
+ params(
21
+ config_id: Integer,
22
+ cadence: String,
23
+ amount: Number,
24
+ currency: String,
25
+ to_base: Number,
26
+ auto_suggest: String,
27
+ ).void
28
+ end
29
+ def initialize(config_id:, cadence:, amount:, currency:, to_base:, auto_suggest:)
30
+ super()
31
+ @config_id = config_id
32
+ @cadence = cadence
33
+ @amount = amount
34
+ @currency = currency
35
+ @to_base = to_base
36
+ @auto_suggest = auto_suggest
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,46 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "crypto_base"
5
+ module LunchMoney
6
+ module Objects
7
+ # https://lunchmoney.dev/#crypto-object
8
+ class Crypto < CryptoBase
9
+ include LunchMoney::Validators
10
+
11
+ sig { returns(String) }
12
+ attr_reader :balance_as_of
13
+
14
+ sig { returns(String) }
15
+ attr_accessor :currency, :status
16
+
17
+ sig do
18
+ params(
19
+ created_at: String,
20
+ source: String,
21
+ name: String,
22
+ balance: String,
23
+ balance_as_of: String,
24
+ currency: String,
25
+ status: String,
26
+ institution_name: T.nilable(String),
27
+ id: T.nilable(Integer),
28
+ zabo_account_id: T.nilable(Integer),
29
+ display_name: T.nilable(String),
30
+ ).void
31
+ end
32
+ def initialize(created_at:, source:, name:, balance:, balance_as_of:, currency:,
33
+ status:, institution_name: nil, id: nil, zabo_account_id: nil, display_name: nil)
34
+ super(created_at:, source:, name:, balance:, institution_name:, id:, zabo_account_id:, display_name:)
35
+ @balance_as_of = T.let(validate_iso8601!(balance_as_of), String)
36
+ @currency = currency
37
+ @status = status
38
+ end
39
+
40
+ sig { params(time: String).void }
41
+ def balance_as_of=(time)
42
+ @balance_as_of = validate_iso8601!(time)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,67 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module LunchMoney
5
+ module Objects
6
+ # https://lunchmoney.dev/#crypto-object
7
+ class CryptoBase < LunchMoney::Objects::Object
8
+ include LunchMoney::Validators
9
+
10
+ sig { returns(T.nilable(Integer)) }
11
+ attr_accessor :id, :zabo_account_id
12
+
13
+ sig { returns(String) }
14
+ attr_reader :source, :created_at
15
+
16
+ sig { returns(String) }
17
+ attr_accessor :name, :balance
18
+
19
+ sig { returns(T.nilable(String)) }
20
+ attr_accessor :display_name, :institution_name
21
+
22
+ # Valid crypto source types
23
+ VALID_SOURCES = T.let(
24
+ [
25
+ "synced",
26
+ "manual",
27
+ ],
28
+ T::Array[String],
29
+ )
30
+
31
+ sig do
32
+ params(
33
+ created_at: String,
34
+ source: String,
35
+ name: String,
36
+ balance: String,
37
+ institution_name: T.nilable(String),
38
+ id: T.nilable(Integer),
39
+ zabo_account_id: T.nilable(Integer),
40
+ display_name: T.nilable(String),
41
+ ).void
42
+ end
43
+ def initialize(created_at:, source:, name:, balance:, institution_name: nil, id: nil, zabo_account_id: nil,
44
+ display_name: nil)
45
+ super()
46
+ @created_at = T.let(validate_iso8601!(created_at), String)
47
+ @source = T.let(validate_one_of!(source, VALID_SOURCES), String)
48
+ @name = name
49
+ @balance = balance
50
+ @institution_name = institution_name
51
+ @id = id
52
+ @zabo_account_id = zabo_account_id
53
+ @display_name = display_name
54
+ end
55
+
56
+ sig { params(name: String).void }
57
+ def source=(name)
58
+ @source = validate_one_of!(name, VALID_SOURCES)
59
+ end
60
+
61
+ sig { params(time: String).void }
62
+ def created_at=(time)
63
+ @created_at = validate_iso8601!(time)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,44 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module LunchMoney
5
+ module Objects
6
+ # https://lunchmoney.dev/#data-object
7
+ class Data < LunchMoney::Objects::Object
8
+ # API object reference documentation: https://lunchmoney.dev/#data-object
9
+
10
+ sig { returns(T.nilable(Integer)) }
11
+ attr_accessor :num_transactions
12
+
13
+ sig { returns(T.nilable(Number)) }
14
+ attr_accessor :budget_amount, :budget_to_base, :spending_to_base
15
+
16
+ sig { returns(T.nilable(String)) }
17
+ attr_accessor :budget_currency
18
+
19
+ sig { returns(T.nilable(T::Boolean)) }
20
+ attr_accessor :is_automated
21
+
22
+ sig do
23
+ params(
24
+ spending_to_base: T.nilable(Number),
25
+ num_transactions: T.nilable(Integer),
26
+ budget_amount: T.nilable(Number),
27
+ budget_currency: T.nilable(String),
28
+ budget_to_base: T.nilable(Number),
29
+ is_automated: T.nilable(T::Boolean),
30
+ ).void
31
+ end
32
+ def initialize(spending_to_base: nil, num_transactions: nil, budget_amount: nil, budget_currency: nil,
33
+ budget_to_base: nil, is_automated: nil)
34
+ super()
35
+ @budget_amount = budget_amount
36
+ @budget_currency = budget_currency
37
+ @budget_to_base = budget_to_base
38
+ @spending_to_base = spending_to_base
39
+ @num_transactions = num_transactions
40
+ @is_automated = is_automated
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,28 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module LunchMoney
5
+ # Namespace for data objects that represent objects returned from the API
6
+ module Objects
7
+ # Base data object for the objects returned and used when calling the LunchMoney API
8
+ class Object
9
+ sig { params(symbolize_keys: T::Boolean).returns(T::Hash[String, T.untyped]) }
10
+ def serialize(symbolize_keys: false)
11
+ ivars = instance_variables
12
+
13
+ output = {}
14
+
15
+ ivars.each do |ivar|
16
+ key = ivar.to_s.gsub("@", "")
17
+ key = key.to_sym if symbolize_keys
18
+
19
+ value = instance_variable_get(ivar)
20
+
21
+ output[key] = value
22
+ end
23
+
24
+ output
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,75 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module LunchMoney
5
+ module Objects
6
+ # https://lunchmoney.dev/#plaid-accounts-object
7
+ class PlaidAccount < LunchMoney::Objects::Object
8
+ sig { returns(Integer) }
9
+ attr_accessor :id
10
+
11
+ sig { returns(String) }
12
+ attr_accessor :date_linked,
13
+ :name,
14
+ :type,
15
+ :mask,
16
+ :institution_name,
17
+ :status,
18
+ :balance,
19
+ :currency,
20
+ :balance_last_update,
21
+ :display_name,
22
+ :plaid_last_successful_update
23
+
24
+ sig { returns(T.nilable(String)) }
25
+ attr_accessor :subtype, :import_start_date, :last_fetch, :last_import
26
+
27
+ sig { returns(T.nilable(Integer)) }
28
+ attr_accessor :limit
29
+
30
+ sig do
31
+ params(
32
+ date_linked: String,
33
+ name: String,
34
+ type: String,
35
+ mask: String,
36
+ institution_name: String,
37
+ status: String,
38
+ balance: String,
39
+ currency: String,
40
+ balance_last_update: String,
41
+ display_name: String,
42
+ id: Integer,
43
+ plaid_last_successful_update: String,
44
+ last_import: T.nilable(String),
45
+ limit: T.nilable(Integer),
46
+ subtype: T.nilable(String),
47
+ import_start_date: T.nilable(String),
48
+ last_fetch: T.nilable(String),
49
+ ).void
50
+ end
51
+ def initialize(date_linked:, name:, type:, mask:, institution_name:, status:, balance:, currency:,
52
+ balance_last_update:, display_name:, id:, plaid_last_successful_update:, last_import: nil, limit: nil,
53
+ subtype: nil, import_start_date: nil, last_fetch: nil)
54
+ super()
55
+ @id = id
56
+ @date_linked = date_linked
57
+ @name = name
58
+ @display_name = display_name
59
+ @type = type
60
+ @subtype = subtype
61
+ @mask = mask
62
+ @institution_name = institution_name
63
+ @status = status
64
+ @limit = limit
65
+ @balance = balance
66
+ @currency = currency
67
+ @balance_last_update = balance_last_update
68
+ @import_start_date = import_start_date
69
+ @last_import = last_import
70
+ @last_fetch = last_fetch
71
+ @plaid_last_successful_update = plaid_last_successful_update
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,68 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "recurring_expense_base"
5
+ module LunchMoney
6
+ module Objects
7
+ # https://lunchmoney.dev/#recurring-expenses-object
8
+ class RecurringExpense < RecurringExpenseBase
9
+ sig { returns(Integer) }
10
+ attr_accessor :id
11
+
12
+ sig { returns(T.nilable(String)) }
13
+ attr_accessor :start_date, :end_date, :description, :original_name
14
+
15
+ sig { returns(String) }
16
+ attr_accessor :cadence, :billing_date, :type, :source, :created_at
17
+
18
+ sig { returns(T.nilable(Integer)) }
19
+ attr_accessor :plaid_account_id, :asset_id, :transaction_id, :category_id
20
+
21
+ sig do
22
+ params(
23
+ cadence: String,
24
+ payee: String,
25
+ amount: String,
26
+ currency: String,
27
+ billing_date: String,
28
+ type: String,
29
+ source: String,
30
+ id: Integer,
31
+ created_at: String,
32
+ category_id: T.nilable(Integer),
33
+ start_date: T.nilable(String),
34
+ end_date: T.nilable(String),
35
+ description: T.nilable(String),
36
+ original_name: T.nilable(String),
37
+ plaid_account_id: T.nilable(Integer),
38
+ asset_id: T.nilable(Integer),
39
+ transaction_id: T.nilable(Integer),
40
+ to_base: T.nilable(Number),
41
+ ).void
42
+ end
43
+ def initialize(cadence:, payee:, amount:, currency:, billing_date:, type:, source:, id:, created_at:,
44
+ category_id: nil, start_date: nil, end_date: nil, description: nil, original_name: nil, plaid_account_id: nil,
45
+ asset_id: nil, transaction_id: nil, to_base: nil)
46
+ super(payee:, amount:, currency:, to_base:)
47
+ @cadence = cadence
48
+ @payee = payee
49
+ @amount = amount
50
+ @currency = currency
51
+ @billing_date = billing_date
52
+ @type = type
53
+ @source = source
54
+ @id = id
55
+ @category_id = category_id
56
+ @created_at = created_at
57
+ @start_date = start_date
58
+ @end_date = end_date
59
+ @description = description
60
+ @original_name = original_name
61
+ @plaid_account_id = plaid_account_id
62
+ @asset_id = asset_id
63
+ @transaction_id = transaction_id
64
+ @to_base = to_base
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,31 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module LunchMoney
5
+ module Objects
6
+ # https://lunchmoney.dev/#recurring-expenses-object
7
+ class RecurringExpenseBase < LunchMoney::Objects::Object
8
+ sig { returns(String) }
9
+ attr_accessor :payee, :currency, :amount
10
+
11
+ sig { returns(T.nilable(Number)) }
12
+ attr_accessor :to_base
13
+
14
+ sig do
15
+ params(
16
+ payee: String,
17
+ amount: String,
18
+ currency: String,
19
+ to_base: T.nilable(Number),
20
+ ).void
21
+ end
22
+ def initialize(payee:, amount:, currency:, to_base:)
23
+ super()
24
+ @payee = payee
25
+ @amount = amount
26
+ @currency = currency
27
+ @to_base = to_base
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "transaction_modification_base"
5
+
6
+ module LunchMoney
7
+ module Objects
8
+ # Object used to split a transaction when updating https://lunchmoney.dev/#update-transaction
9
+ class Split < TransactionModificationBase
10
+ sig { returns(T.any(Number, String)) }
11
+ attr_accessor :amount
12
+
13
+ sig do
14
+ params(
15
+ amount: T.any(Number, String),
16
+ payee: T.nilable(String),
17
+ date: T.nilable(String),
18
+ category_id: T.nilable(Integer),
19
+ notes: T.nilable(String),
20
+ ).void
21
+ end
22
+ def initialize(amount:, payee: nil, date: nil, category_id: nil, notes: nil)
23
+ super(payee:, date:, category_id:, notes:)
24
+ @amount = amount
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "tag_base"
5
+
6
+ module LunchMoney
7
+ module Objects
8
+ # https://lunchmoney.dev/#tags-object
9
+ class Tag < TagBase
10
+ sig { returns(T.nilable(String)) }
11
+ attr_accessor :description
12
+
13
+ sig { returns(T::Boolean) }
14
+ attr_accessor :archived
15
+
16
+ sig { params(id: Integer, name: String, archived: T::Boolean, description: T.nilable(String)).void }
17
+ def initialize(id:, name:, archived:, description: nil)
18
+ super(id:, name:)
19
+ @archived = archived
20
+ @description = description
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module LunchMoney
5
+ module Objects
6
+ # https://lunchmoney.dev/#tags-object without some fields. This is used within field returns of other objects like
7
+ # field returns of other objects like transactions
8
+ class TagBase < LunchMoney::Objects::Object
9
+ sig { returns(Integer) }
10
+ attr_accessor :id
11
+
12
+ sig { returns(String) }
13
+ attr_accessor :name
14
+
15
+ sig { params(id: Integer, name: String).void }
16
+ def initialize(id:, name:)
17
+ super()
18
+ @id = id
19
+ @name = name
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,160 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "transaction_base"
5
+
6
+ module LunchMoney
7
+ module Objects
8
+ # https://lunchmoney.dev/#transaction-object
9
+ class Transaction < TransactionBase
10
+ sig { returns(T.nilable(Integer)) }
11
+ attr_accessor :category_id,
12
+ :category_group_id,
13
+ :recurring_id,
14
+ :parent_id,
15
+ :group_id,
16
+ :external_id
17
+
18
+ sig { returns(String) }
19
+ attr_accessor :created_at,
20
+ :updated_at,
21
+ :status,
22
+ :source,
23
+ :display_name,
24
+ :account_display_name
25
+
26
+ sig { returns(T.nilable(String)) }
27
+ attr_accessor :category_name,
28
+ :category_group_name,
29
+ :original_name,
30
+ :recurring_payee,
31
+ :recurring_description,
32
+ :recurring_cadence,
33
+ :recurring_type,
34
+ :recurring_amount,
35
+ :recurring_currency,
36
+ :asset_institution_name,
37
+ :asset_name,
38
+ :asset_display_name,
39
+ :asset_status,
40
+ :plaid_account_name,
41
+ :plaid_account_mask,
42
+ :institution_name,
43
+ :plaid_account_display_name,
44
+ :plaid_metadata,
45
+ :display_notes
46
+
47
+ sig { returns(T::Boolean) }
48
+ attr_accessor :is_income, :exclude_from_budget, :exclude_from_totals, :is_pending, :has_children, :is_group
49
+
50
+ sig { returns(T::Array[LunchMoney::Objects::TagBase]) }
51
+ attr_accessor :tags
52
+
53
+ sig { returns(T.nilable(T::Array[LunchMoney::Objects::ChildTransaction])) }
54
+ attr_accessor :children
55
+
56
+ sig do
57
+ params(
58
+ id: Integer,
59
+ date: String,
60
+ amount: String,
61
+ currency: String,
62
+ to_base: Number,
63
+ payee: String,
64
+ is_income: T::Boolean,
65
+ exclude_from_budget: T::Boolean,
66
+ exclude_from_totals: T::Boolean,
67
+ created_at: String,
68
+ updated_at: String,
69
+ status: String,
70
+ is_pending: T::Boolean,
71
+ has_children: T::Boolean,
72
+ is_group: T::Boolean,
73
+ source: String,
74
+ display_name: String,
75
+ account_display_name: String,
76
+ tags: T::Array[LunchMoney::Objects::TagBase],
77
+ category_id: T.nilable(Integer),
78
+ category_name: T.nilable(String),
79
+ category_group_id: T.nilable(Integer),
80
+ category_group_name: T.nilable(String),
81
+ notes: T.nilable(String),
82
+ original_name: T.nilable(String),
83
+ recurring_id: T.nilable(Integer),
84
+ recurring_payee: T.nilable(String),
85
+ recurring_description: T.nilable(String),
86
+ recurring_cadence: T.nilable(String),
87
+ recurring_type: T.nilable(String),
88
+ recurring_amount: T.nilable(String),
89
+ recurring_currency: T.nilable(String),
90
+ parent_id: T.nilable(Integer),
91
+ group_id: T.nilable(Integer),
92
+ asset_id: T.nilable(Integer),
93
+ asset_institution_name: T.nilable(String),
94
+ asset_name: T.nilable(String),
95
+ asset_display_name: T.nilable(String),
96
+ asset_status: T.nilable(String),
97
+ plaid_account_id: T.nilable(Integer),
98
+ plaid_account_name: T.nilable(String),
99
+ plaid_account_mask: T.nilable(String),
100
+ institution_name: T.nilable(String),
101
+ plaid_account_display_name: T.nilable(String),
102
+ plaid_metadata: T.nilable(String),
103
+ display_notes: T.nilable(String),
104
+ external_id: T.nilable(Integer),
105
+ children: T.nilable(T::Array[LunchMoney::Objects::ChildTransaction]),
106
+ ).void
107
+ end
108
+ def initialize(id:, date:, amount:, currency:, to_base:, payee:, is_income:, exclude_from_budget:,
109
+ exclude_from_totals:, created_at:, updated_at:, status:, is_pending:, has_children:, is_group:, source:,
110
+ display_name:, account_display_name:, tags:, category_id: nil, category_name: nil, category_group_id: nil,
111
+ category_group_name: nil, notes: nil, original_name: nil, recurring_id: nil, recurring_payee: nil,
112
+ recurring_description: nil, recurring_cadence: nil, recurring_type: nil, recurring_amount: nil,
113
+ recurring_currency: nil, parent_id: nil, group_id: nil, asset_id: nil, asset_institution_name: nil,
114
+ asset_name: nil, asset_display_name: nil, asset_status: nil, plaid_account_id: nil, plaid_account_name: nil,
115
+ plaid_account_mask: nil, institution_name: nil, plaid_account_display_name: nil, plaid_metadata: nil,
116
+ display_notes: nil, external_id: nil, children: nil)
117
+ super(id:, date:, amount:, currency:, to_base:, payee:, notes:, asset_id:, plaid_account_id:)
118
+ @is_income = is_income
119
+ @exclude_from_budget = exclude_from_budget
120
+ @exclude_from_totals = exclude_from_totals
121
+ @created_at = created_at
122
+ @updated_at = updated_at
123
+ @status = status
124
+ @is_pending = is_pending
125
+ @has_children = has_children
126
+ @is_group = is_group
127
+ @source = source
128
+ @display_name = display_name
129
+ @account_display_name = account_display_name
130
+ @tags = tags
131
+ @category_id = category_id
132
+ @category_name = category_name
133
+ @category_group_id = category_group_id
134
+ @category_group_name = category_group_name
135
+ @original_name = original_name
136
+ @recurring_id = recurring_id
137
+ @recurring_payee = recurring_payee
138
+ @recurring_description = recurring_description
139
+ @recurring_cadence = recurring_cadence
140
+ @recurring_type = recurring_type
141
+ @recurring_amount = recurring_amount
142
+ @recurring_currency = recurring_currency
143
+ @parent_id = parent_id
144
+ @group_id = group_id
145
+ @asset_institution_name = asset_institution_name
146
+ @asset_name = asset_name
147
+ @asset_display_name = asset_display_name
148
+ @asset_status = asset_status
149
+ @plaid_account_name = plaid_account_name
150
+ @plaid_account_mask = plaid_account_mask
151
+ @institution_name = institution_name
152
+ @plaid_account_display_name = plaid_account_display_name
153
+ @plaid_metadata = plaid_metadata
154
+ @display_notes = display_notes
155
+ @children = children
156
+ @external_id = external_id
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,54 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module LunchMoney
5
+ module Objects
6
+ # Slimmed down version of https://lunchmoney.dev/#transaction-object used as a base for other transaction objects
7
+ class TransactionBase < LunchMoney::Objects::Object
8
+ sig { returns(Integer) }
9
+ attr_accessor :id
10
+
11
+ sig { returns(Number) }
12
+ attr_accessor :to_base
13
+
14
+ sig { returns(T.nilable(Integer)) }
15
+ attr_accessor :asset_id, :plaid_account_id
16
+
17
+ sig { returns(String) }
18
+ attr_accessor :date,
19
+ :amount,
20
+ :currency,
21
+ :payee
22
+
23
+ sig { returns(T.nilable(String)) }
24
+ attr_accessor :notes
25
+
26
+ sig do
27
+ params(
28
+ id: Integer,
29
+ date: String,
30
+ amount: String,
31
+ currency: String,
32
+ to_base: Number,
33
+ payee: String,
34
+ notes: T.nilable(String),
35
+ asset_id: T.nilable(Integer),
36
+ plaid_account_id: T.nilable(Integer),
37
+ ).void
38
+ end
39
+ def initialize(id:, date:, amount:, currency:, to_base:, payee:, notes: nil, asset_id: nil,
40
+ plaid_account_id: nil)
41
+ super()
42
+ @id = id
43
+ @date = date
44
+ @amount = amount
45
+ @currency = currency
46
+ @to_base = to_base
47
+ @payee = payee
48
+ @notes = notes
49
+ @asset_id = asset_id
50
+ @plaid_account_id = plaid_account_id
51
+ end
52
+ end
53
+ end
54
+ end