ledger_sync 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
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