ledger_sync 1.3.1 → 1.3.2

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/ledger_sync/adaptors/ledger_serializer.rb +36 -6
  4. data/lib/ledger_sync/adaptors/ledger_serializer_attribute.rb +33 -3
  5. data/lib/ledger_sync/adaptors/ledger_serializer_attribute_set.rb +7 -0
  6. data/lib/ledger_sync/adaptors/ledger_serializer_type/references_one_type.rb +22 -0
  7. data/lib/ledger_sync/adaptors/mixins/infer_ledger_serializer_mixin.rb +1 -1
  8. data/lib/ledger_sync/adaptors/netsuite/account/operations/create.rb +1 -1
  9. data/lib/ledger_sync/adaptors/netsuite/account/operations/find.rb +1 -1
  10. data/lib/ledger_sync/adaptors/quickbooks_online/account/ledger_serializer.rb +25 -9
  11. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/create.rb +1 -1
  12. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/find.rb +1 -1
  13. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/update.rb +1 -1
  14. data/lib/ledger_sync/adaptors/quickbooks_online/adaptor.rb +1 -1
  15. data/lib/ledger_sync/adaptors/quickbooks_online/bill/ledger_serializer.rb +4 -1
  16. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/create.rb +1 -1
  17. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/find.rb +1 -1
  18. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/update.rb +1 -1
  19. data/lib/ledger_sync/adaptors/quickbooks_online/currency/ledger_serializer.rb +17 -0
  20. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/ledger_serializer.rb +4 -2
  21. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/create.rb +1 -1
  22. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/find.rb +1 -1
  23. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/update.rb +1 -1
  24. data/lib/ledger_sync/adaptors/quickbooks_online/expense/ledger_serializer.rb +4 -2
  25. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/create.rb +1 -1
  26. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/find.rb +1 -1
  27. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/update.rb +1 -1
  28. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/ledger_serializer.rb +3 -2
  29. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/create.rb +1 -1
  30. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/find.rb +1 -1
  31. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/update.rb +1 -1
  32. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/ledger_serializer.rb +4 -2
  33. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/create.rb +1 -1
  34. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/find.rb +1 -1
  35. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/update.rb +1 -1
  36. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer.rb +1 -1
  37. data/lib/ledger_sync/adaptors/quickbooks_online/payment/ledger_serializer.rb +6 -4
  38. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/create.rb +1 -1
  39. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/find.rb +1 -1
  40. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/update.rb +1 -1
  41. data/lib/ledger_sync/adaptors/quickbooks_online/request.rb +1 -1
  42. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/ledger_serializer.rb +5 -2
  43. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/create.rb +1 -1
  44. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/find.rb +1 -1
  45. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/update.rb +1 -1
  46. data/lib/ledger_sync/adaptors/test/account/operations/create.rb +1 -1
  47. data/lib/ledger_sync/adaptors/test/account/operations/find.rb +1 -1
  48. data/lib/ledger_sync/adaptors/test/account/operations/invalid.rb +1 -1
  49. data/lib/ledger_sync/adaptors/test/account/operations/update.rb +1 -1
  50. data/lib/ledger_sync/adaptors/test/account/operations/valid.rb +1 -1
  51. data/lib/ledger_sync/adaptors/test/expense/operations/create.rb +1 -1
  52. data/lib/ledger_sync/adaptors/test/expense/operations/find.rb +1 -1
  53. data/lib/ledger_sync/adaptors/test/expense/operations/update.rb +1 -1
  54. data/lib/ledger_sync/adaptors/test/payment/operations/create.rb +1 -1
  55. data/lib/ledger_sync/adaptors/test/payment/operations/find.rb +1 -1
  56. data/lib/ledger_sync/adaptors/test/payment/operations/update.rb +1 -1
  57. data/lib/ledger_sync/adaptors/test/transfer/operations/create.rb +1 -1
  58. data/lib/ledger_sync/adaptors/test/transfer/operations/find.rb +1 -1
  59. data/lib/ledger_sync/adaptors/test/transfer/operations/update.rb +1 -1
  60. data/lib/ledger_sync/resources/account.rb +4 -1
  61. data/lib/ledger_sync/resources/bill.rb +2 -1
  62. data/lib/ledger_sync/resources/deposit.rb +2 -1
  63. data/lib/ledger_sync/resources/expense.rb +3 -2
  64. data/lib/ledger_sync/resources/invoice.rb +2 -1
  65. data/lib/ledger_sync/resources/journal_entry.rb +3 -1
  66. data/lib/ledger_sync/resources/payment.rb +2 -1
  67. data/lib/ledger_sync/resources/transfer.rb +2 -1
  68. data/lib/ledger_sync/version.rb +1 -1
  69. metadata +3 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8aeb1fb1722b3457692a3a513ecd3dc419a3a489d00a24aa2839dfae6e5f203f
4
- data.tar.gz: 66e5e8415a1c2bfb6c1c04f8210e046f3510390a0bf0768932d6120a1453bf8b
3
+ metadata.gz: 05667fe1a37dc8edfcb33121d2eb5f08ad076b8b635ecaaf33809b663c830f68
4
+ data.tar.gz: 3b3a6c68af8ecf2ce04a8f789854fb1002b3d90d5e747e71d398aa1b1b8b4c9f
5
5
  SHA512:
6
- metadata.gz: 87bc80cc850ac858e3d448098d2acd8b1f7a502ec7e51126c1d9a52560aedc02dcd968069fbf9a9de0a86ebbc7b6c52f64ccf0a6c3cdc4fbe5bf390fdd4373af
7
- data.tar.gz: 3b5e0d36361a0910acd74c4ae3de805c09ad14838cfc02eb458c8fc93069190f0633f4738fb549d1e3de0f92e1f6dd74110317f20d36c718d1352e3c1ba5f861
6
+ metadata.gz: 14cdebe2e5342838d44202fbe9b11c28e09a6e18ccbb4827145d0b098833c1549c9e922bd8760555708358058df74ff5574a46b91aa67d48f347a99d2e5a0129
7
+ data.tar.gz: 8a48a4251273a4aa7a2cca65cc1eaed38c87d385caa2aeb1c3eaf63c76f0d67bf5af3099dcb16a1c4df82517e79c3bd35c8b41584a1a5197a584bce5c951ca5f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ledger_sync (1.3.1)
4
+ ledger_sync (1.3.2)
5
5
  activemodel
6
6
  colorize
7
7
  coveralls
@@ -12,9 +12,9 @@ module LedgerSync
12
12
 
13
13
  attr_reader :resource
14
14
 
15
- def initialize(resource:)
15
+ def initialize(ensure_inferred_resource_class: true, resource:)
16
16
  @resource = resource
17
- ensure_inferred_resource_class!
17
+ ensure_inferred_resource_class! if ensure_inferred_resource_class
18
18
  end
19
19
 
20
20
  def attribute_value_from_ledger(hash:, ledger_serializer_attribute:, resource:)
@@ -28,7 +28,7 @@ module LedgerSync
28
28
  deserialize_into = resource.dup # Do not overwrite values in the resource
29
29
  hash = Util::HashHelpers.deep_stringify_keys(hash)
30
30
 
31
- self.class.attributes.each do |ledger_serializer_attribute|
31
+ self.class.attributes.deserializable_attributes.each do |ledger_serializer_attribute|
32
32
  next unless ledger_serializer_attribute.resource_attribute?
33
33
 
34
34
  value = attribute_value_from_ledger(
@@ -49,7 +49,7 @@ module LedgerSync
49
49
  def to_ledger_hash(only_changes: false)
50
50
  ret = {}
51
51
 
52
- self.class.attributes.each do |ledger_serializer_attribute|
52
+ self.class.attributes.serializable_attributes.each do |ledger_serializer_attribute|
53
53
  next if only_changes && !resource.attribute_changed?(ledger_serializer_attribute.resource_attribute)
54
54
 
55
55
  ret = Util::HashHelpers.deep_merge(
@@ -61,11 +61,20 @@ module LedgerSync
61
61
  ret
62
62
  end
63
63
 
64
- def self.attribute(ledger_attribute:, resource_attribute: nil, type: LedgerSerializerType::ValueType, &block)
64
+ def self.attribute(
65
+ deserialize: true,
66
+ ledger_attribute:,
67
+ resource_attribute: nil,
68
+ serialize: true,
69
+ type: LedgerSerializerType::ValueType,
70
+ &block
71
+ )
65
72
  _attribute(
66
73
  block: (block if block_given?),
74
+ deserialize: deserialize,
67
75
  ledger_attribute: ledger_attribute,
68
76
  resource_attribute: resource_attribute,
77
+ serialize: serialize,
69
78
  type: type
70
79
  )
71
80
  end
@@ -83,6 +92,15 @@ module LedgerSync
83
92
  )
84
93
  end
85
94
 
95
+ def self.references_one(ledger_attribute:, resource_attribute:, serializer:)
96
+ _attribute(
97
+ ledger_attribute: ledger_attribute,
98
+ resource_attribute: resource_attribute,
99
+ serializer: serializer,
100
+ type: LedgerSerializerType::ReferencesOneType
101
+ )
102
+ end
103
+
86
104
  def self.id(ledger_attribute:, resource_attribute:, &block)
87
105
  @id ||= _attribute(
88
106
  block: (block if block_given?),
@@ -98,13 +116,25 @@ module LedgerSync
98
116
  )
99
117
  end
100
118
 
101
- private_class_method def self._build_attribute(block: nil, id: false, ledger_attribute:, resource_attribute: nil, resource_class: nil, serializer: nil, type: LedgerSerializerType::ValueType)
119
+ private_class_method def self._build_attribute(
120
+ block: nil,
121
+ deserialize: true,
122
+ id: false,
123
+ ledger_attribute:,
124
+ resource_attribute: nil,
125
+ resource_class: nil,
126
+ serialize: true,
127
+ serializer: nil,
128
+ type: LedgerSerializerType::ValueType
129
+ )
102
130
  LedgerSerializerAttribute.new(
103
131
  id: id,
104
132
  block: block,
133
+ deserialize: deserialize,
105
134
  ledger_attribute: ledger_attribute,
106
135
  resource_attribute: resource_attribute,
107
136
  resource_class: resource_class,
137
+ serialize: serialize,
108
138
  serializer: serializer,
109
139
  type: type
110
140
  )
@@ -7,21 +7,35 @@ module LedgerSync
7
7
  module Adaptors
8
8
  class LedgerSerializerAttribute
9
9
  attr_reader :block,
10
+ :deserialize,
10
11
  :id,
11
12
  :ledger_attribute,
12
13
  :resource_attribute,
13
14
  :resource_class,
15
+ :serialize,
14
16
  :serializer,
15
17
  :type
16
18
 
17
- def initialize(block: nil, id: false, ledger_attribute:, resource_attribute: nil, resource_class: nil, serializer: nil, type: LedgerSerializerType::ValueType)
19
+ def initialize(
20
+ block: nil,
21
+ deserialize: true,
22
+ id: false,
23
+ ledger_attribute:,
24
+ resource_attribute: nil,
25
+ resource_class: nil,
26
+ serialize: true,
27
+ serializer: nil,
28
+ type: LedgerSerializerType::ValueType
29
+ )
18
30
  raise 'block and resource_attribute cannot both be present' unless block.nil? || resource_attribute.nil?
19
31
 
20
32
  @block = block
33
+ @deserialize = deserialize
21
34
  @id = id
22
35
  @ledger_attribute = ledger_attribute.to_s
23
36
  @resource_attribute = resource_attribute.to_s
24
37
  @resource_class = resource_class
38
+ @serialize = serialize
25
39
  @serializer = serializer
26
40
  @type = type.new
27
41
  end
@@ -30,6 +44,10 @@ module LedgerSync
30
44
  block.call(resource)
31
45
  end
32
46
 
47
+ def deserialize?
48
+ deserialize
49
+ end
50
+
33
51
  # Make nested/dot calls (e.g. `vendor.ledger_id`)
34
52
  def dot_value_for(resource:)
35
53
  resource_attribute_dot_parts.inject(resource) { |r, dot_method| r&.send(dot_method) }
@@ -59,10 +77,18 @@ module LedgerSync
59
77
  ledger_attribute_dot_parts.reverse.inject(value) { |a, n| { n => a } }
60
78
  end
61
79
 
80
+ def reference?
81
+ references_many? || references_one?
82
+ end
83
+
62
84
  def references_many?
63
85
  type.is_a?(LedgerSerializerType::ReferencesManyType)
64
86
  end
65
87
 
88
+ def references_one?
89
+ type.is_a?(LedgerSerializerType::ReferencesOneType)
90
+ end
91
+
66
92
  def resource_attribute?
67
93
  resource_attribute.present?
68
94
  end
@@ -71,6 +97,10 @@ module LedgerSync
71
97
  @resource_attribute_dot_parts ||= resource_attribute.split('.')
72
98
  end
73
99
 
100
+ def serialize?
101
+ serialize
102
+ end
103
+
74
104
  def value_from_local(resource:)
75
105
  value = if block.nil?
76
106
  dot_value_for(resource: resource)
@@ -78,7 +108,7 @@ module LedgerSync
78
108
  block_value_for(resource: resource)
79
109
  end
80
110
 
81
- if references_many?
111
+ if reference?
82
112
  type.convert_from_local(
83
113
  serializer: serializer,
84
114
  value: value
@@ -93,7 +123,7 @@ module LedgerSync
93
123
  def value_from_ledger(hash:, resource:)
94
124
  value = hash.dig(*ledger_attribute_dot_parts)
95
125
 
96
- value = if references_many?
126
+ value = if reference?
97
127
  type.convert_from_ledger(
98
128
  resource_class: resource_class,
99
129
  serializer: serializer,
@@ -4,9 +4,11 @@ module LedgerSync
4
4
  module Adaptors
5
5
  class LedgerSerializerAttributeSet
6
6
  attr_reader :attributes,
7
+ :deserializable_attributes,
7
8
  :id_attribute,
8
9
  :ledger_attribute_keyed_hash,
9
10
  :resource_attribute_keyed_hash,
11
+ :serializable_attributes,
10
12
  :serializer_class
11
13
 
12
14
  delegate :[],
@@ -17,8 +19,10 @@ module LedgerSync
17
19
 
18
20
  def initialize(serializer_class:)
19
21
  @attributes = []
22
+ @deserializable_attributes = []
20
23
  @ledger_attribute_keyed_hash = {}
21
24
  @resource_attribute_keyed_hash = {}
25
+ @serializable_attributes = []
22
26
  @serializer_class = serializer_class
23
27
  end
24
28
 
@@ -37,6 +41,9 @@ module LedgerSync
37
41
  resource_attribute_keyed_hash[attribute.resource_attribute.to_s] = attribute
38
42
  end
39
43
 
44
+ serializable_attributes << attribute if attribute.serialize?
45
+ deserializable_attributes << attribute if attribute.deserialize?
46
+
40
47
  # TODO: Can make this validate something like `expense.vendor.id`
41
48
  # raise "#{resource_attribute} is not an attribute of the resource #{_inferred_resource_class}" if !resource_attribute.nil? && !_inferred_resource_class.serialize_attribute?(resource_attribute)
42
49
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module LedgerSerializerType
6
+ class ReferencesOneType < ValueType
7
+ def convert_from_ledger(resource_class: nil, serializer:, value:)
8
+ return if value.nil?
9
+
10
+ resource_class ||= serializer.inferred_resource_class
11
+ serializer.new(resource: resource_class.new).deserialize(hash: value)
12
+ end
13
+
14
+ def convert_from_local(serializer:, value:)
15
+ return if value.nil?
16
+
17
+ serializer.new(resource: value).to_ledger_hash
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -6,7 +6,7 @@ module LedgerSync
6
6
  module InferLedgerSerializerMixin
7
7
  module ClassMethods
8
8
  def inferred_ledger_serializer(resource:)
9
- @inferred_ledger_serializer ||= inferred_ledger_serializer_class.new(
9
+ inferred_ledger_serializer_class.new(
10
10
  resource: resource
11
11
  )
12
12
  end
@@ -15,7 +15,7 @@ module LedgerSync
15
15
  required(:account_type).maybe(:string)
16
16
  required(:account_sub_type).maybe(:string)
17
17
  required(:number).filled(:integer)
18
- required(:currency).filled(:string)
18
+ required(:currency).filled(:hash, Types::Reference)
19
19
  required(:description).maybe(:string)
20
20
  required(:active).maybe(:bool)
21
21
  end
@@ -15,7 +15,7 @@ module LedgerSync
15
15
  required(:account_type).maybe(:string)
16
16
  required(:account_sub_type).maybe(:string)
17
17
  required(:number).maybe(:integer)
18
- required(:currency).maybe(:string)
18
+ required(:currency).maybe(:hash, Types::Reference)
19
19
  required(:description).maybe(:string)
20
20
  required(:active).maybe(:bool)
21
21
  end
@@ -1,19 +1,35 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../currency/ledger_serializer'
4
+
3
5
  module LedgerSync
4
6
  module Adaptors
5
7
  module QuickBooksOnline
6
8
  module Account
7
9
  class LedgerSerializer < QuickBooksOnline::LedgerSerializer
8
- attribute ledger_attribute: 'Id', resource_attribute: :ledger_id
9
- attribute ledger_attribute: 'Name', resource_attribute: :name
10
- attribute ledger_attribute: 'AccountType', resource_attribute: :account_type, type: LedgerSerializerType::AccountType
11
- attribute ledger_attribute: 'AccountSubType', resource_attribute: :account_sub_type, type: LedgerSerializerType::AccountSubType
12
- attribute ledger_attribute: 'AcctNum', resource_attribute: :number
13
- attribute ledger_attribute: 'CurrencyRef.value', resource_attribute: :currency
14
- attribute ledger_attribute: 'Classification', resource_attribute: :classification, type: LedgerSerializerType::ClassificationType
15
- attribute ledger_attribute: 'Description', resource_attribute: :description
16
- attribute ledger_attribute: 'Active', resource_attribute: :active
10
+ attribute ledger_attribute: 'Id',
11
+ resource_attribute: :ledger_id
12
+ attribute ledger_attribute: 'Name',
13
+ resource_attribute: :name
14
+ attribute ledger_attribute: 'AccountType',
15
+ resource_attribute: :account_type,
16
+ type: LedgerSerializerType::AccountType
17
+ attribute ledger_attribute: 'AccountSubType',
18
+ resource_attribute: :account_sub_type,
19
+ type: LedgerSerializerType::AccountSubType
20
+ attribute ledger_attribute: 'AcctNum',
21
+ resource_attribute: :number
22
+ attribute ledger_attribute: 'Classification',
23
+ resource_attribute: :classification,
24
+ type: LedgerSerializerType::ClassificationType
25
+ attribute ledger_attribute: 'Description',
26
+ resource_attribute: :description
27
+ attribute ledger_attribute: 'Active',
28
+ resource_attribute: :active
29
+
30
+ references_one ledger_attribute: :CurrencyRef,
31
+ resource_attribute: :currency,
32
+ serializer: Currency::LedgerSerializer
17
33
  end
18
34
  end
19
35
  end
@@ -11,7 +11,7 @@ module LedgerSync
11
11
  required(:account_type).filled(:string)
12
12
  required(:active).maybe(:bool)
13
13
  required(:classification).filled(:string)
14
- required(:currency).maybe(:string)
14
+ required(:currency).maybe(:hash, Types::Reference)
15
15
  required(:description).maybe(:string)
16
16
  required(:ledger_id).value(:nil)
17
17
  required(:name).filled(:string)
@@ -13,7 +13,7 @@ module LedgerSync
13
13
  required(:account_type).maybe(:string)
14
14
  required(:account_sub_type).maybe(:string)
15
15
  required(:number).maybe(:integer)
16
- required(:currency).maybe(:string)
16
+ required(:currency).maybe(:hash, Types::Reference)
17
17
  required(:description).maybe(:string)
18
18
  required(:active).maybe(:bool)
19
19
  end
@@ -17,7 +17,7 @@ module LedgerSync
17
17
  required(:account_type).filled(:string)
18
18
  required(:account_sub_type).filled(:string)
19
19
  required(:number).maybe(:integer)
20
- required(:currency).maybe(:string)
20
+ required(:currency).maybe(:hash, Types::Reference)
21
21
  required(:description).maybe(:string)
22
22
  required(:active).maybe(:bool)
23
23
  end
@@ -90,7 +90,7 @@ module LedgerSync
90
90
  request(
91
91
  headers: OAUTH_HEADERS.dup,
92
92
  method: :post,
93
- body: payload.to_json,
93
+ body: payload,
94
94
  url: url
95
95
  )
96
96
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../bill_line_item/ledger_serializer'
4
+ require_relative '../currency/ledger_serializer'
4
5
 
5
6
  module LedgerSync
6
7
  module Adaptors
@@ -9,7 +10,9 @@ module LedgerSync
9
10
  class LedgerSerializer < QuickBooksOnline::LedgerSerializer
10
11
  id
11
12
 
12
- attribute ledger_attribute: 'CurrencyRef.value', resource_attribute: :currency
13
+ references_one ledger_attribute: :CurrencyRef,
14
+ resource_attribute: :currency,
15
+ serializer: Currency::LedgerSerializer
13
16
 
14
17
  attribute ledger_attribute: 'DueDate',
15
18
  resource_attribute: :due_date,
@@ -8,7 +8,7 @@ module LedgerSync
8
8
  params do
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
- optional(:currency).filled(:string)
11
+ optional(:currency).hash(Types::Reference)
12
12
  optional(:due_date).maybe(:date?)
13
13
  optional(:ledger_id).value(:nil)
14
14
  required(:line_items).array(Types::Reference)
@@ -8,7 +8,7 @@ module LedgerSync
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
- optional(:currency).maybe(:string)
11
+ required(:currency).maybe(:hash, Types::Reference)
12
12
  optional(:due_date).maybe(:date?)
13
13
  optional(:line_items).array(Types::Reference)
14
14
  required(:ledger_id).filled(:string)
@@ -8,7 +8,7 @@ module LedgerSync
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
- optional(:currency).filled(:string)
11
+ optional(:currency).hash(Types::Reference)
12
12
  optional(:due_date).maybe(:date?)
13
13
  required(:line_items).array(Types::Reference)
14
14
  required(:ledger_id).filled(:string)
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module QuickBooksOnline
6
+ module Currency
7
+ class LedgerSerializer < QuickBooksOnline::LedgerSerializer
8
+ attribute ledger_attribute: :value,
9
+ resource_attribute: :symbol
10
+
11
+ attribute ledger_attribute: :name,
12
+ resource_attribute: :name
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../deposit_line_item/ledger_serializer'
4
+ require_relative '../currency/ledger_serializer'
4
5
 
5
6
  module LedgerSync
6
7
  module Adaptors
@@ -9,8 +10,9 @@ module LedgerSync
9
10
  class LedgerSerializer < QuickBooksOnline::LedgerSerializer
10
11
  id
11
12
 
12
- attribute ledger_attribute: 'CurrencyRef.value',
13
- resource_attribute: :currency
13
+ references_one ledger_attribute: :CurrencyRef,
14
+ resource_attribute: :currency,
15
+ serializer: Currency::LedgerSerializer
14
16
 
15
17
  attribute ledger_attribute: 'TxnDate',
16
18
  resource_attribute: :transaction_date,
@@ -9,7 +9,7 @@ module LedgerSync
9
9
  required(:external_id).maybe(:string)
10
10
  required(:ledger_id).value(:nil)
11
11
  required(:account).hash(Types::Reference)
12
- required(:currency).filled(:string)
12
+ required(:currency).filled(:hash, Types::Reference)
13
13
  required(:department).hash(Types::Reference)
14
14
  required(:memo).filled(:string)
15
15
  required(:transaction_date).filled(:date?)
@@ -9,7 +9,7 @@ module LedgerSync
9
9
  required(:external_id).maybe(:string)
10
10
  required(:ledger_id).filled(:string)
11
11
  required(:account).hash(Types::Reference)
12
- required(:currency).maybe(:string)
12
+ required(:currency).maybe(:hash, Types::Reference)
13
13
  required(:department).hash(Types::Reference)
14
14
  required(:memo).maybe(:string)
15
15
  required(:transaction_date).filled(:date?)
@@ -11,7 +11,7 @@ module LedgerSync
11
11
  required(:external_id).maybe(:string)
12
12
  required(:ledger_id).filled(:string)
13
13
  required(:account).hash(Types::Reference)
14
- required(:currency).filled(:string)
14
+ required(:currency).filled(:hash, Types::Reference)
15
15
  required(:department).hash(Types::Reference)
16
16
  required(:memo).filled(:string)
17
17
  required(:transaction_date).filled(:date?)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../expense_line_item/ledger_serializer'
4
+ require_relative '../currency/ledger_serializer'
4
5
 
5
6
  module LedgerSync
6
7
  module Adaptors
@@ -10,8 +11,9 @@ module LedgerSync
10
11
  id ledger_attribute: 'Id',
11
12
  resource_attribute: :ledger_id
12
13
 
13
- attribute ledger_attribute: 'CurrencyRef.value',
14
- resource_attribute: :currency
14
+ references_one ledger_attribute: :CurrencyRef,
15
+ resource_attribute: :currency,
16
+ serializer: Currency::LedgerSerializer
15
17
 
16
18
  attribute ledger_attribute: 'PaymentType',
17
19
  resource_attribute: :payment_type,
@@ -8,7 +8,7 @@ module LedgerSync
8
8
  params do
9
9
  required(:external_id).maybe(:string)
10
10
  required(:account).hash(Types::Reference)
11
- optional(:currency).filled(:string)
11
+ optional(:currency).hash(Types::Reference)
12
12
  optional(:exchange_rate).maybe(:float)
13
13
  optional(:ledger_id).value(:nil)
14
14
  required(:line_items).array(Types::Reference)
@@ -8,7 +8,7 @@ module LedgerSync
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
- optional(:currency).maybe(:string)
11
+ required(:currency).maybe(:hash, Types::Reference)
12
12
  optional(:exchange_rate).maybe(:float)
13
13
  required(:ledger_id).filled(:string)
14
14
  optional(:line_items).array(Types::Reference)
@@ -8,7 +8,7 @@ module LedgerSync
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
10
  required(:account).hash(Types::Reference)
11
- optional(:currency).filled(:string)
11
+ optional(:currency).hash(Types::Reference)
12
12
  optional(:exchange_rate).maybe(:float)
13
13
  required(:ledger_id).filled(:string)
14
14
  required(:line_items).array(Types::Reference)
@@ -9,8 +9,9 @@ module LedgerSync
9
9
  class LedgerSerializer < QuickBooksOnline::LedgerSerializer
10
10
  id
11
11
 
12
- attribute ledger_attribute: 'CurrencyRef.value',
13
- resource_attribute: :currency
12
+ references_one ledger_attribute: :CurrencyRef,
13
+ resource_attribute: :currency,
14
+ serializer: Currency::LedgerSerializer
14
15
 
15
16
  attribute ledger_attribute: 'TxnDate',
16
17
  resource_attribute: :transaction_date,
@@ -10,7 +10,7 @@ module LedgerSync
10
10
  params do
11
11
  required(:external_id).maybe(:string)
12
12
  optional(:account).hash(Types::Reference)
13
- required(:currency).filled(:string)
13
+ required(:currency).filled(:hash, Types::Reference)
14
14
  required(:customer).hash(Types::Reference)
15
15
  optional(:deposit).maybe(:integer)
16
16
  required(:ledger_id).value(:nil)
@@ -8,7 +8,7 @@ module LedgerSync
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
- optional(:currency).maybe(:string)
11
+ required(:currency).maybe(:hash, Types::Reference)
12
12
  optional(:customer).hash(Types::Reference)
13
13
  optional(:deposit).maybe(:integer)
14
14
  required(:ledger_id).filled(:string)
@@ -8,7 +8,7 @@ module LedgerSync
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
- required(:currency).filled(:string)
11
+ required(:currency).filled(:hash, Types::Reference)
12
12
  required(:customer).hash(Types::Reference)
13
13
  optional(:deposit).maybe(:integer)
14
14
  required(:ledger_id).filled(:string)
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../currency/ledger_serializer'
3
4
  require_relative '../journal_entry_line_item/ledger_serializer'
4
5
 
5
6
  module LedgerSync
@@ -9,8 +10,9 @@ module LedgerSync
9
10
  class LedgerSerializer < QuickBooksOnline::LedgerSerializer
10
11
  id
11
12
 
12
- attribute ledger_attribute: 'CurrencyRef.value',
13
- resource_attribute: :currency
13
+ references_one ledger_attribute: :CurrencyRef,
14
+ resource_attribute: :currency,
15
+ serializer: Currency::LedgerSerializer
14
16
 
15
17
  attribute ledger_attribute: 'TxnDate',
16
18
  resource_attribute: :transaction_date,
@@ -7,7 +7,7 @@ module LedgerSync
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  params do
9
9
  required(:external_id).maybe(:string)
10
- optional(:currency).filled(:string)
10
+ optional(:currency).hash(Types::Reference)
11
11
  required(:ledger_id).value(:nil)
12
12
  optional(:line_items).array(Types::Reference)
13
13
  optional(:memo).filled(:string)
@@ -7,7 +7,7 @@ module LedgerSync
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
- optional(:currency).maybe(:string)
10
+ required(:currency).maybe(:hash, Types::Reference)
11
11
  required(:ledger_id).filled(:string)
12
12
  optional(:line_items).array(Types::Reference)
13
13
  optional(:memo).maybe(:string)
@@ -7,7 +7,7 @@ module LedgerSync
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
- optional(:currency).filled(:string)
10
+ optional(:currency).hash(Types::Reference)
11
11
  required(:ledger_id).filled(:string)
12
12
  optional(:line_items).array(Types::Reference)
13
13
  optional(:memo).filled(:string)
@@ -25,7 +25,7 @@ module LedgerSync
25
25
  def merge_resources_for_full_update(hash:, ledger_resource:)
26
26
  merged_resource = resource.dup
27
27
 
28
- self.class.attributes.each do |ledger_serializer_attribute|
28
+ self.class.attributes.deserializable_attributes.each do |ledger_serializer_attribute|
29
29
  next unless ledger_serializer_attribute.references_many?
30
30
 
31
31
  resources_from_ledger = attribute_value_from_ledger(
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../currency/ledger_serializer'
3
4
  require_relative '../payment_line_item/ledger_serializer'
4
5
 
5
6
  module LedgerSync
@@ -13,8 +14,9 @@ module LedgerSync
13
14
  resource_attribute: :amount,
14
15
  type: LedgerSerializerType::AmountType
15
16
 
16
- attribute ledger_attribute: 'CurrencyRef.value',
17
- resource_attribute: :currency
17
+ references_one ledger_attribute: :CurrencyRef,
18
+ resource_attribute: :currency,
19
+ serializer: Currency::LedgerSerializer
18
20
 
19
21
  attribute ledger_attribute: 'CustomerRef.value',
20
22
  resource_attribute: 'customer.ledger_id'
@@ -39,8 +41,8 @@ module LedgerSync
39
41
  type: LedgerSerializerType::DateType
40
42
 
41
43
  references_many ledger_attribute: 'Line',
42
- resource_attribute: :line_items,
43
- serializer: PaymentLineItem::LedgerSerializer
44
+ resource_attribute: :line_items,
45
+ serializer: PaymentLineItem::LedgerSerializer
44
46
  end
45
47
  end
46
48
  end
@@ -11,7 +11,7 @@ module LedgerSync
11
11
  required(:external_id).maybe(:string)
12
12
  optional(:account).hash(Types::Reference)
13
13
  required(:amount).filled(:integer)
14
- required(:currency).filled(:string)
14
+ required(:currency).filled(:hash, Types::Reference)
15
15
  required(:customer).hash(Types::Reference)
16
16
  optional(:deposit_account).hash(Types::Reference)
17
17
  optional(:exchange_rate).maybe(:float)
@@ -9,7 +9,7 @@ module LedgerSync
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
11
  optional(:amount).maybe(:integer)
12
- optional(:currency).maybe(:string)
12
+ required(:currency).maybe(:hash, Types::Reference)
13
13
  optional(:customer).hash(Types::Reference)
14
14
  optional(:deposit_account).hash(Types::Reference)
15
15
  optional(:exchange_rate).maybe(:float)
@@ -9,7 +9,7 @@ module LedgerSync
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
11
  required(:amount).filled(:integer)
12
- required(:currency).filled(:string)
12
+ required(:currency).filled(:hash, Types::Reference)
13
13
  required(:customer).hash(Types::Reference)
14
14
  optional(:deposit_account).hash(Types::Reference)
15
15
  optional(:exchange_rate).maybe(:float)
@@ -53,7 +53,7 @@ module LedgerSync
53
53
  oauth_response = oauth.send(
54
54
  method,
55
55
  url,
56
- body: body,
56
+ body: (body.to_json unless body.nil?),
57
57
  headers: headers
58
58
  )
59
59
  ret = Response.new_from_oauth_response(
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../currency/ledger_serializer'
4
+
3
5
  module LedgerSync
4
6
  module Adaptors
5
7
  module QuickBooksOnline
@@ -24,8 +26,9 @@ module LedgerSync
24
26
  resource_attribute: :transaction_date,
25
27
  type: LedgerSerializerType::DateType
26
28
 
27
- attribute ledger_attribute: 'CurrencyRef.value',
28
- resource_attribute: 'currency'
29
+ references_one ledger_attribute: :CurrencyRef,
30
+ resource_attribute: :currency,
31
+ serializer: Currency::LedgerSerializer
29
32
  end
30
33
  end
31
34
  end
@@ -11,7 +11,7 @@ module LedgerSync
11
11
  required(:from_account).hash(Types::Reference)
12
12
  required(:to_account).hash(Types::Reference)
13
13
  required(:amount).filled(:integer)
14
- required(:currency).filled(:string)
14
+ required(:currency).filled(:hash, Types::Reference)
15
15
  required(:memo).filled(:string)
16
16
  required(:transaction_date).filled(:date?)
17
17
  end
@@ -11,7 +11,7 @@ module LedgerSync
11
11
  required(:from_account).hash(Types::Reference)
12
12
  required(:to_account).hash(Types::Reference)
13
13
  required(:amount).maybe(:integer)
14
- required(:currency).maybe(:string)
14
+ required(:currency).maybe(:hash, Types::Reference)
15
15
  required(:memo).maybe(:string)
16
16
  required(:transaction_date).maybe(:date?)
17
17
  end
@@ -13,7 +13,7 @@ module LedgerSync
13
13
  required(:from_account).hash(Types::Reference)
14
14
  required(:to_account).hash(Types::Reference)
15
15
  required(:amount).filled(:integer)
16
- required(:currency).filled(:string)
16
+ required(:currency).filled(:hash, Types::Reference)
17
17
  required(:memo).filled(:string)
18
18
  required(:transaction_date).filled(:date?)
19
19
  end
@@ -13,7 +13,7 @@ module LedgerSync
13
13
  required(:account_type).filled(:string)
14
14
  required(:account_sub_type).filled(:string)
15
15
  required(:number).maybe(:integer)
16
- required(:currency).maybe(:string)
16
+ required(:currency).maybe(:hash, Types::Reference)
17
17
  required(:description).maybe(:string)
18
18
  required(:active).maybe(:bool)
19
19
  end
@@ -13,7 +13,7 @@ module LedgerSync
13
13
  required(:account_type).maybe(:string)
14
14
  required(:account_sub_type).maybe(:string)
15
15
  required(:number).maybe(:integer)
16
- required(:currency).maybe(:string)
16
+ required(:currency).maybe(:hash, Types::Reference)
17
17
  required(:description).maybe(:string)
18
18
  required(:active).maybe(:bool)
19
19
  end
@@ -13,7 +13,7 @@ module LedgerSync
13
13
  required(:account_type).maybe(:string)
14
14
  required(:account_sub_type).maybe(:string)
15
15
  required(:number).maybe(:integer)
16
- required(:currency).maybe(:string)
16
+ required(:currency).maybe(:hash, Types::Reference)
17
17
  required(:description).maybe(:string)
18
18
  required(:active).maybe(:bool)
19
19
  end
@@ -13,7 +13,7 @@ module LedgerSync
13
13
  required(:account_type).filled(:string)
14
14
  required(:account_sub_type).filled(:string)
15
15
  required(:number).maybe(:integer)
16
- required(:currency).maybe(:string)
16
+ required(:currency).maybe(:hash, Types::Reference)
17
17
  required(:description).maybe(:string)
18
18
  required(:active).maybe(:bool)
19
19
  end
@@ -13,7 +13,7 @@ module LedgerSync
13
13
  required(:account_type).filled(:string)
14
14
  required(:account_sub_type).filled(:string)
15
15
  required(:number).maybe(:integer)
16
- required(:currency).maybe(:string)
16
+ required(:currency).maybe(:hash, Types::Reference)
17
17
  required(:description).maybe(:string)
18
18
  required(:active).maybe(:bool)
19
19
  end
@@ -12,7 +12,7 @@ module LedgerSync
12
12
  required(:ledger_id).value(:nil)
13
13
  required(:account).hash(Types::Reference)
14
14
  required(:entity).hash(Types::Reference)
15
- required(:currency).filled(:string)
15
+ required(:currency).filled(:hash, Types::Reference)
16
16
  required(:memo).filled(:string)
17
17
  required(:payment_type).filled(:string)
18
18
  required(:transaction_date).filled(:date?)
@@ -12,7 +12,7 @@ module LedgerSync
12
12
  required(:ledger_id).filled(:string)
13
13
  required(:account).hash(Types::Reference)
14
14
  required(:entity).hash(Types::Reference)
15
- required(:currency).maybe(:string)
15
+ required(:currency).maybe(:hash, Types::Reference)
16
16
  required(:memo).maybe(:string)
17
17
  required(:payment_type).maybe(:string)
18
18
  required(:transaction_date).maybe(:date?)
@@ -10,7 +10,7 @@ module LedgerSync
10
10
  required(:ledger_id).filled(:string)
11
11
  required(:account).hash(Types::Reference)
12
12
  required(:entity).hash(Types::Reference)
13
- required(:currency).filled(:string)
13
+ required(:currency).filled(:hash, Types::Reference)
14
14
  required(:memo).filled(:string)
15
15
  required(:payment_type).filled(:string)
16
16
  required(:transaction_date).filled(:date?)
@@ -9,7 +9,7 @@ module LedgerSync
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
11
  required(:amount).filled(:integer)
12
- required(:currency).filled(:string)
12
+ required(:currency).filled(:hash, Types::Reference)
13
13
  required(:customer).hash(Types::Reference)
14
14
  optional(:deposit_account).hash(Types::Reference)
15
15
  optional(:exchange_rate).maybe(:float)
@@ -9,7 +9,7 @@ module LedgerSync
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
11
  optional(:amount).maybe(:integer)
12
- optional(:currency).maybe(:string)
12
+ required(:currency).maybe(:hash, Types::Reference)
13
13
  optional(:customer).hash(Types::Reference)
14
14
  optional(:deposit_account).hash(Types::Reference)
15
15
  optional(:exchange_rate).maybe(:float)
@@ -9,7 +9,7 @@ module LedgerSync
9
9
  required(:external_id).maybe(:string)
10
10
  optional(:account).hash(Types::Reference)
11
11
  required(:amount).filled(:integer)
12
- required(:currency).filled(:string)
12
+ required(:currency).filled(:hash, Types::Reference)
13
13
  required(:customer).hash(Types::Reference)
14
14
  optional(:deposit_account).hash(Types::Reference)
15
15
  optional(:exchange_rate).maybe(:float)
@@ -11,7 +11,7 @@ module LedgerSync
11
11
  required(:from_account).hash(Types::Reference)
12
12
  required(:to_account).hash(Types::Reference)
13
13
  required(:amount).filled(:integer)
14
- required(:currency).filled(:string)
14
+ required(:currency).filled(:hash, Types::Reference)
15
15
  required(:memo).filled(:string)
16
16
  required(:transaction_date).filled(:date?)
17
17
  end
@@ -11,7 +11,7 @@ module LedgerSync
11
11
  required(:from_account).hash(Types::Reference)
12
12
  required(:to_account).hash(Types::Reference)
13
13
  required(:amount).maybe(:integer)
14
- required(:currency).maybe(:string)
14
+ required(:currency).maybe(:hash, Types::Reference)
15
15
  required(:memo).maybe(:string)
16
16
  required(:transaction_date).maybe(:date?)
17
17
  end
@@ -11,7 +11,7 @@ module LedgerSync
11
11
  required(:from_account).hash(Types::Reference)
12
12
  required(:to_account).hash(Types::Reference)
13
13
  required(:amount).filled(:integer)
14
- required(:currency).filled(:string)
14
+ required(:currency).filled(:hash, Types::Reference)
15
15
  required(:memo).filled(:string)
16
16
  required(:transaction_date).filled(:date?)
17
17
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'currency'
4
+
3
5
  module LedgerSync
4
6
  class Account < LedgerSync::Resource
5
7
  attribute :name, type: Type::String
@@ -7,8 +9,9 @@ module LedgerSync
7
9
  attribute :account_type, type: Type::String
8
10
  attribute :account_sub_type, type: Type::String
9
11
  attribute :number, type: Type::String
10
- attribute :currency, type: Type::String
11
12
  attribute :description, type: Type::String
12
13
  attribute :active, type: Type::Boolean
14
+
15
+ references_one :currency, to: Currency
13
16
  end
14
17
  end
@@ -2,11 +2,11 @@
2
2
 
3
3
  require_relative 'account'
4
4
  require_relative 'bill_line_item'
5
+ require_relative 'currency'
5
6
  require_relative 'vendor'
6
7
 
7
8
  module LedgerSync
8
9
  class Bill < LedgerSync::Resource
9
- attribute :currency, type: Type::String
10
10
  attribute :memo, type: Type::String
11
11
  attribute :transaction_date, type: Type::Date
12
12
  attribute :due_date, type: Type::Date
@@ -14,6 +14,7 @@ module LedgerSync
14
14
 
15
15
  references_one :vendor, to: Vendor
16
16
  references_one :account, to: Account
17
+ references_one :currency, to: Currency
17
18
 
18
19
  references_many :line_items, to: BillLineItem
19
20
 
@@ -1,18 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'account'
4
+ require_relative 'currency'
4
5
  require_relative 'department'
5
6
  require_relative 'deposit_line_item'
6
7
 
7
8
  module LedgerSync
8
9
  class Deposit < LedgerSync::Resource
9
- attribute :currency, type: Type::String
10
10
  attribute :memo, type: Type::String
11
11
  attribute :transaction_date, type: Type::Date
12
12
  attribute :exchange_rate, type: Type::Float
13
13
 
14
14
  references_one :account, to: Account
15
15
  references_one :department, to: Department
16
+ references_one :currency, to: Currency
16
17
 
17
18
  references_many :line_items, to: DepositLineItem
18
19
 
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'account'
4
+ require_relative 'currency'
4
5
  require_relative 'customer'
5
6
  require_relative 'expense_line_item'
6
7
  require_relative 'vendor'
7
8
 
8
9
  module LedgerSync
9
10
  class Expense < LedgerSync::Resource
10
- attribute :currency, type: Type::String
11
11
  attribute :memo, type: Type::String
12
12
  attribute :payment_type, type: Type::String
13
13
  attribute :transaction_date, type: Type::Date
@@ -16,6 +16,7 @@ module LedgerSync
16
16
 
17
17
  references_one :entity, to: [Customer, Vendor]
18
18
  references_one :account, to: Account
19
+ references_one :currency, to: Currency
19
20
 
20
21
  references_many :line_items, to: ExpenseLineItem
21
22
 
@@ -24,7 +25,7 @@ module LedgerSync
24
25
  end
25
26
 
26
27
  def name
27
- "Purchase: #{amount} #{currency}"
28
+ "Purchase: #{amount} #{currency.try(:symbol)}"
28
29
  end
29
30
  end
30
31
  end
@@ -1,18 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'account'
4
+ require_relative 'currency'
4
5
  require_relative 'customer'
5
6
  require_relative 'invoice_sales_line_item'
6
7
 
7
8
  module LedgerSync
8
9
  class Invoice < LedgerSync::Resource
9
- attribute :currency, type: Type::String
10
10
  attribute :memo, type: Type::String
11
11
  attribute :transaction_date, type: Type::Date
12
12
  attribute :deposit, type: Type::Integer
13
13
 
14
14
  references_one :customer, to: Customer
15
15
  references_one :account, to: Account
16
+ references_one :currency, to: Currency
16
17
 
17
18
  references_many :line_items, to: InvoiceSalesLineItem
18
19
 
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'currency'
3
4
  require_relative 'journal_entry_line_item'
4
5
 
5
6
  module LedgerSync
6
7
  class JournalEntry < LedgerSync::Resource
7
- attribute :currency, type: Type::String
8
8
  attribute :memo, type: Type::String
9
9
  attribute :transaction_date, type: Type::Date
10
10
  attribute :reference_number, type: Type::String
11
11
 
12
+ references_one :currency, to: Currency
13
+
12
14
  references_many :line_items, to: JournalEntryLineItem
13
15
 
14
16
  def name
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'account'
4
+ require_relative 'currency'
4
5
  require_relative 'customer'
5
6
  require_relative 'payment_line_item'
6
7
 
7
8
  module LedgerSync
8
9
  class Payment < LedgerSync::Resource
9
10
  attribute :amount, type: Type::Integer
10
- attribute :currency, type: Type::String
11
11
  attribute :memo, type: Type::String
12
12
  attribute :transaction_date, type: Type::Date
13
13
  attribute :exchange_rate, type: Type::Float
@@ -16,6 +16,7 @@ module LedgerSync
16
16
  references_one :customer, to: Customer
17
17
  references_one :deposit_account, to: Account
18
18
  references_one :account, to: Account
19
+ references_one :currency, to: Currency
19
20
 
20
21
  references_many :line_items, to: PaymentLineItem
21
22
 
@@ -1,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'account'
4
+ require_relative 'currency'
4
5
 
5
6
  module LedgerSync
6
7
  class Transfer < LedgerSync::Resource
7
- attribute :currency, type: Type::String
8
8
  attribute :amount, type: Type::Integer
9
9
  attribute :memo, type: Type::String
10
10
  attribute :transaction_date, type: Type::Date
11
11
 
12
12
  references_one :from_account, to: Account
13
13
  references_one :to_account, to: Account
14
+ references_one :currency, to: Currency
14
15
 
15
16
  def name
16
17
  "Transaction: #{amount} #{currency}"
@@ -1,3 +1,3 @@
1
1
  module LedgerSync
2
- VERSION = '1.3.1'.freeze
2
+ VERSION = '1.3.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ledger_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Jackson
@@ -413,6 +413,7 @@ files:
413
413
  - lib/ledger_sync/adaptors/ledger_serializer_attribute_set.rb
414
414
  - lib/ledger_sync/adaptors/ledger_serializer_type/mapping_type.rb
415
415
  - lib/ledger_sync/adaptors/ledger_serializer_type/references_many_type.rb
416
+ - lib/ledger_sync/adaptors/ledger_serializer_type/references_one_type.rb
416
417
  - lib/ledger_sync/adaptors/ledger_serializer_type/value_type.rb
417
418
  - lib/ledger_sync/adaptors/mixins/infer_adaptor_class_mixin.rb
418
419
  - lib/ledger_sync/adaptors/mixins/infer_ledger_serializer_mixin.rb
@@ -481,6 +482,7 @@ files:
481
482
  - lib/ledger_sync/adaptors/quickbooks_online/bill/searcher.rb
482
483
  - lib/ledger_sync/adaptors/quickbooks_online/bill_line_item/ledger_serializer.rb
483
484
  - lib/ledger_sync/adaptors/quickbooks_online/config.rb
485
+ - lib/ledger_sync/adaptors/quickbooks_online/currency/ledger_serializer.rb
484
486
  - lib/ledger_sync/adaptors/quickbooks_online/customer/ledger_serializer.rb
485
487
  - lib/ledger_sync/adaptors/quickbooks_online/customer/operations/create.rb
486
488
  - lib/ledger_sync/adaptors/quickbooks_online/customer/operations/find.rb