ledger_sync 1.0.10 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +36 -20
  3. data/README.md +105 -66
  4. data/ledger_sync.gemspec +1 -0
  5. data/lib/ledger_sync.rb +23 -4
  6. data/lib/ledger_sync/adaptors/operation.rb +28 -28
  7. data/lib/ledger_sync/adaptors/quickbooks_online/account/mapping.rb +325 -0
  8. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/create.rb +54 -0
  9. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/find.rb +38 -0
  10. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/update.rb +61 -0
  11. data/lib/ledger_sync/adaptors/quickbooks_online/account/searcher.rb +67 -0
  12. data/lib/ledger_sync/adaptors/quickbooks_online/adaptor.rb +18 -16
  13. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/create.rb +65 -0
  14. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/find.rb +37 -0
  15. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/update.rb +69 -0
  16. data/lib/ledger_sync/adaptors/quickbooks_online/bill/searcher.rb +28 -0
  17. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/create.rb +6 -6
  18. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/find.rb +1 -3
  19. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/update.rb +6 -9
  20. data/lib/ledger_sync/adaptors/quickbooks_online/customer/searcher.rb +2 -38
  21. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/create.rb +61 -0
  22. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/find.rb +36 -0
  23. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/update.rb +65 -0
  24. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/searcher.rb +28 -0
  25. data/lib/ledger_sync/adaptors/quickbooks_online/expense/mapping.rb +15 -0
  26. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/create.rb +68 -0
  27. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/find.rb +39 -0
  28. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/update.rb +72 -0
  29. data/lib/ledger_sync/adaptors/quickbooks_online/expense/searcher.rb +28 -0
  30. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/mapping.rb +14 -0
  31. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/create.rb +56 -0
  32. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/find.rb +34 -0
  33. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/update.rb +60 -0
  34. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/searcher.rb +28 -0
  35. data/lib/ledger_sync/adaptors/quickbooks_online/operation.rb +30 -0
  36. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/create.rb +8 -22
  37. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/find.rb +0 -2
  38. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/update.rb +6 -22
  39. data/lib/ledger_sync/adaptors/quickbooks_online/searcher.rb +45 -0
  40. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/create.rb +52 -0
  41. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/find.rb +36 -0
  42. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/update.rb +57 -0
  43. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/create.rb +46 -0
  44. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/find.rb +36 -0
  45. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/update.rb +51 -0
  46. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/searcher.rb +64 -0
  47. data/lib/ledger_sync/adaptors/searcher.rb +3 -1
  48. data/lib/ledger_sync/adaptors/test/account/operations/create.rb +53 -0
  49. data/lib/ledger_sync/adaptors/test/account/operations/find.rb +38 -0
  50. data/lib/ledger_sync/adaptors/test/account/operations/invalid.rb +25 -0
  51. data/lib/ledger_sync/adaptors/test/account/operations/update.rb +50 -0
  52. data/lib/ledger_sync/adaptors/test/account/operations/valid.rb +31 -0
  53. data/lib/ledger_sync/adaptors/test/account/searcher.rb +40 -0
  54. data/lib/ledger_sync/adaptors/test/adaptor.rb +4 -4
  55. data/lib/ledger_sync/adaptors/test/customer/operations/create.rb +4 -6
  56. data/lib/ledger_sync/adaptors/test/customer/operations/find.rb +0 -2
  57. data/lib/ledger_sync/adaptors/test/customer/operations/update.rb +4 -6
  58. data/lib/ledger_sync/adaptors/test/customer/searcher.rb +2 -2
  59. data/lib/ledger_sync/adaptors/test/expense/operations/create.rb +54 -0
  60. data/lib/ledger_sync/adaptors/test/expense/operations/find.rb +39 -0
  61. data/lib/ledger_sync/adaptors/test/expense/operations/update.rb +57 -0
  62. data/lib/ledger_sync/adaptors/test/payment/operations/create.rb +4 -20
  63. data/lib/ledger_sync/adaptors/test/payment/operations/find.rb +0 -2
  64. data/lib/ledger_sync/adaptors/test/payment/operations/update.rb +4 -20
  65. data/lib/ledger_sync/adaptors/test/transfer/operations/create.rb +45 -0
  66. data/lib/ledger_sync/adaptors/test/transfer/operations/find.rb +36 -0
  67. data/lib/ledger_sync/adaptors/test/transfer/operations/update.rb +48 -0
  68. data/lib/ledger_sync/adaptors/test/vendor/operations/create.rb +47 -0
  69. data/lib/ledger_sync/adaptors/test/vendor/operations/find.rb +34 -0
  70. data/lib/ledger_sync/adaptors/test/vendor/operations/invalid.rb +21 -0
  71. data/lib/ledger_sync/adaptors/test/vendor/operations/update.rb +44 -0
  72. data/lib/ledger_sync/adaptors/test/vendor/operations/valid.rb +27 -0
  73. data/lib/ledger_sync/adaptors/test/vendor/searcher.rb +41 -0
  74. data/lib/ledger_sync/error/resource_errors.rb +24 -0
  75. data/lib/ledger_sync/resource.rb +24 -64
  76. data/lib/ledger_sync/resource_attribute.rb +50 -0
  77. data/lib/ledger_sync/resource_attribute/dirty_mixin.rb +49 -0
  78. data/lib/ledger_sync/resource_attribute/mixin.rb +90 -0
  79. data/lib/ledger_sync/resource_attribute/reference.rb +9 -0
  80. data/lib/ledger_sync/resource_attribute/reference/many.rb +34 -0
  81. data/lib/ledger_sync/resource_attribute/reference/one.rb +33 -0
  82. data/lib/ledger_sync/resource_attribute_set.rb +58 -0
  83. data/lib/ledger_sync/resources/account.rb +14 -0
  84. data/lib/ledger_sync/resources/bill.rb +17 -0
  85. data/lib/ledger_sync/resources/bill_line_item.rb +11 -0
  86. data/lib/ledger_sync/resources/customer.rb +5 -4
  87. data/lib/ledger_sync/resources/deposit.rb +16 -0
  88. data/lib/ledger_sync/resources/deposit_line_item.rb +11 -0
  89. data/lib/ledger_sync/resources/expense.rb +19 -0
  90. data/lib/ledger_sync/resources/expense_line_item.rb +11 -0
  91. data/lib/ledger_sync/resources/journal_entry.rb +13 -0
  92. data/lib/ledger_sync/resources/journal_entry_line_item.rb +12 -0
  93. data/lib/ledger_sync/resources/payment.rb +5 -3
  94. data/lib/ledger_sync/resources/transfer.rb +15 -0
  95. data/lib/ledger_sync/resources/vendor.rb +12 -0
  96. data/lib/ledger_sync/result.rb +0 -24
  97. data/lib/ledger_sync/type/boolean.rb +17 -0
  98. data/lib/ledger_sync/type/date.rb +17 -0
  99. data/lib/ledger_sync/type/float.rb +17 -0
  100. data/lib/ledger_sync/type/integer.rb +17 -0
  101. data/lib/ledger_sync/type/reference_many.rb +27 -0
  102. data/lib/ledger_sync/type/reference_one.rb +26 -0
  103. data/lib/ledger_sync/type/string.rb +17 -0
  104. data/lib/ledger_sync/type/value.rb +12 -0
  105. data/lib/ledger_sync/type/value_mixin.rb +19 -0
  106. data/lib/ledger_sync/util/hash_helpers.rb +16 -1
  107. data/lib/ledger_sync/util/resources_builder.rb +36 -9
  108. data/lib/ledger_sync/version.rb +1 -1
  109. metadata +92 -7
  110. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/upsert.rb +0 -42
  111. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/upsert.rb +0 -53
  112. data/lib/ledger_sync/adaptors/test/customer/operations/upsert.rb +0 -42
  113. data/lib/ledger_sync/adaptors/test/payment/operations/upsert.rb +0 -53
  114. data/lib/ledger_sync/sync.rb +0 -108
  115. data/lib/ledger_sync/util/coordinator.rb +0 -72
@@ -0,0 +1,13 @@
1
+ module LedgerSync
2
+ class JournalEntry < LedgerSync::Resource
3
+ attribute :currency, type: Type::String
4
+ attribute :memo, type: Type::String
5
+ attribute :transaction_date, type: Type::Date
6
+
7
+ references_many :line_items, to: JournalEntryLineItem
8
+
9
+ def name
10
+ "JournalEntry: #{transaction_date.to_s}"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module LedgerSync
2
+ class JournalEntryLineItem < LedgerSync::Resource
3
+ references_one :account, to: Account
4
+ attribute :amount, type: Type::Integer
5
+ attribute :description, type: Type::String
6
+ attribute :entry_type, type: Type::String
7
+
8
+ def name
9
+ description
10
+ end
11
+ end
12
+ end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  class Payment < LedgerSync::Resource
3
- attribute :currency
4
- reference :customer, Customer
5
- attribute :amount
5
+ attribute :amount, type: Type::Integer
6
+ attribute :currency, type: Type::String
7
+ references_one :customer, to: Customer
6
8
 
7
9
  def name
8
10
  "Payment: #{amount} #{currency}"
@@ -0,0 +1,15 @@
1
+ module LedgerSync
2
+ class Transfer < LedgerSync::Resource
3
+ attribute :currency, type: Type::String
4
+ attribute :amount, type: Type::Integer
5
+ attribute :memo, type: Type::String
6
+ attribute :transaction_date, type: Type::Date
7
+
8
+ references_one :from_account, to: Account
9
+ references_one :to_account, to: Account
10
+
11
+ def name
12
+ "Transaction: #{amount} #{currency}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module LedgerSync
2
+ class Vendor < LedgerSync::Resource
3
+ attribute :email, type: Type::String
4
+ attribute :first_name, type: Type::String
5
+ attribute :last_name, type: Type::String
6
+ attribute :display_name, type: Type::String
7
+
8
+ def name
9
+ "#{display_name}"
10
+ end
11
+ end
12
+ end
@@ -45,30 +45,6 @@ module LedgerSync
45
45
  include ResultBase
46
46
  end
47
47
 
48
- class SyncResult
49
- module ResultTypeBase
50
- attr_reader :sync
51
-
52
- def self.included(base)
53
- base.class_eval do
54
- serialize only: %i[sync]
55
- end
56
- end
57
-
58
- def initialize(*args, sync:, **keywords)
59
- @sync = sync
60
- super(*args, **keywords)
61
- end
62
-
63
- def operations
64
- @operations ||= sync.operations
65
- end
66
- end
67
-
68
- include ResultBase
69
- end
70
-
71
-
72
48
  class SearchResult
73
49
  module ResultTypeBase
74
50
  attr_reader :resources, :searcher
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Type
5
+ class Boolean < ActiveModel::Type::Boolean # :nodoc:
6
+ include ValueMixin
7
+
8
+ def type
9
+ :boolean
10
+ end
11
+
12
+ def valid_classes
13
+ [FalseClass, TrueClass]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Type
5
+ class Date < ActiveModel::Type::Date # :nodoc:
6
+ include ValueMixin
7
+
8
+ def type
9
+ :date
10
+ end
11
+
12
+ def valid_classes
13
+ [::Date]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Type
5
+ class Float < ActiveModel::Type::Float # :nodoc:
6
+ include ValueMixin
7
+
8
+ def type
9
+ :float
10
+ end
11
+
12
+ def valid_classes
13
+ [::Float]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Type
5
+ class Integer < ActiveModel::Type::Integer # :nodoc:
6
+ include ValueMixin
7
+
8
+ def type
9
+ :integer
10
+ end
11
+
12
+ def valid_classes
13
+ [::Integer]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Type
5
+ class ReferenceMany < Value # :nodoc:
6
+ include ValueMixin
7
+
8
+ attr_reader :resource_class
9
+
10
+ def initialize(resource_class:)
11
+ @resource_class = resource_class
12
+ super()
13
+ end
14
+
15
+ def type
16
+ :reference_many
17
+ end
18
+
19
+ def valid_without_casting?(value:)
20
+ return false unless value.is_a?(Array)
21
+ return true if value.reject { |e| e.is_a?(resource_class) }.empty?
22
+
23
+ false
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Type
5
+ class ReferenceOne < Value # :nodoc:
6
+ include ValueMixin
7
+
8
+ attr_reader :resource_class
9
+
10
+ def initialize(resource_class:)
11
+ @resource_class = resource_class
12
+ super()
13
+ end
14
+
15
+ def type
16
+ :reference_one
17
+ end
18
+
19
+ def valid_without_casting?(value:)
20
+ return true if value.is_a?(resource_class)
21
+
22
+ false
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Type
5
+ class String < ActiveModel::Type::String # :nodoc:
6
+ include ValueMixin
7
+
8
+ def type
9
+ :string
10
+ end
11
+
12
+ def valid_classes
13
+ [::String]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'value_mixin'
4
+
5
+ # Mixin for lib-specific Type functions
6
+ module LedgerSync
7
+ module Type
8
+ class Value < ActiveModel::Type::Value
9
+ include ValueMixin
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Mixin for lib-specific Type functions
4
+ module LedgerSync
5
+ module Type
6
+ module ValueMixin
7
+ def valid_classes
8
+ raise NotImplementedError
9
+ end
10
+
11
+ def valid_without_casting?(value:)
12
+ return true if value.nil?
13
+ return true if valid_classes.select { |e| value.is_a?(e) }.any?
14
+
15
+ false
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,4 +1,6 @@
1
1
  require 'json'
2
+ # Inspired by
3
+ # https://github.com/rails/rails/blob/v6.0.0/activesupport/lib/active_support/core_ext/hash/keys.rb#L116
2
4
 
3
5
  module LedgerSync
4
6
  module Util
@@ -6,7 +8,20 @@ module LedgerSync
6
8
  module_function
7
9
 
8
10
  def deep_symbolize_keys(hash)
9
- JSON.parse(JSON[hash], symbolize_names: true)
11
+ deep_transform_keys_in_object(hash) { |key| key.to_sym rescue key }
12
+ end
13
+
14
+ def deep_transform_keys_in_object(object, &block)
15
+ case object
16
+ when Hash
17
+ object.each_with_object({}) do |(key, value), result|
18
+ result[yield(key)] = deep_transform_keys_in_object(value, &block)
19
+ end
20
+ when Array
21
+ object.map { |e| deep_transform_keys_in_object(e, &block) }
22
+ else
23
+ object
24
+ end
10
25
  end
11
26
  end
12
27
  end
@@ -3,13 +3,17 @@
3
3
  module LedgerSync
4
4
  module Util
5
5
  class ResourcesBuilder
6
- attr_reader :data,
6
+ attr_reader :cast,
7
+ :data,
8
+ :ignore_unrecognized_attributes,
7
9
  :root_resource_external_id,
8
10
  :root_resource_type
9
11
 
10
- def initialize(data:, root_resource_external_id:, root_resource_type:)
12
+ def initialize(cast: true, data:, ignore_unrecognized_attributes: false, root_resource_external_id:, root_resource_type:)
11
13
  @all_resources = {}
14
+ @cast = cast
12
15
  @data = Util::HashHelpers.deep_symbolize_keys(data)
16
+ @ignore_unrecognized_attributes = ignore_unrecognized_attributes
13
17
  @root_resource_external_id = root_resource_external_id
14
18
  @root_resource_type = root_resource_type
15
19
  end
@@ -38,16 +42,39 @@ module LedgerSync
38
42
  current_data = @data.dig(type, external_id, :data)
39
43
  raise "No data provided for #{type} (ID: #{external_id})" if current_data.nil?
40
44
 
41
- resource_klass = LedgerSync.resources[type]
42
- raise "#{type} is an invalid resource type" if resource_klass.nil?
45
+ resource_class = LedgerSync.resources[type]
46
+ raise "#{type} is an invalid resource type" if resource_class.nil?
43
47
 
44
- provided_references = resource_klass.references.select { |k, _v| current_data.key?(k) }
48
+ current_data = Hash[
49
+ current_data.map do |k, v|
50
+ k = k.to_sym
45
51
 
46
- provided_references.each do |reference, reference_klass|
47
- current_data[reference] = resource_or_build(external_id: current_data[reference], type: reference_klass.resource_type)
48
- end
52
+ attribute = resource_class.resource_attributes[k]
53
+ raise "Unrecognized attribute for #{resource_class.name}: #{k}" if attribute.nil? && !ignore_unrecognized_attributes
54
+
55
+ v = if attribute.is_a?(ResourceAttribute::Reference::One)
56
+ resource_or_build(
57
+ external_id: current_data[k],
58
+ type: attribute.type.resource_class.resource_type
59
+ )
60
+ elsif attribute.is_a?(ResourceAttribute::Reference::Many)
61
+ current_data[k].map do |many_reference|
62
+ resource_or_build(
63
+ external_id: many_reference,
64
+ type: attribute.type.resource_class.resource_type
65
+ )
66
+ end
67
+ elsif cast
68
+ attribute.type.cast(v)
69
+ else
70
+ v
71
+ end
72
+
73
+ [k, v]
74
+ end
75
+ ]
49
76
 
50
- @all_resources[resource_key(external_id: external_id, type: type)] = resource_klass.new(
77
+ @all_resources[resource_key(external_id: external_id, type: type)] ||= resource_class.new(
51
78
  external_id: external_id,
52
79
  ledger_id: ledger_id,
53
80
  **current_data
@@ -1,3 +1,3 @@
1
1
  module LedgerSync
2
- VERSION = '1.0.10'.freeze
2
+ VERSION = '1.1.1'.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.0.10
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Jackson
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: activemodel
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: colorize
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -336,36 +350,82 @@ files:
336
350
  - lib/ledger_sync/adaptors/adaptor.rb
337
351
  - lib/ledger_sync/adaptors/contract.rb
338
352
  - lib/ledger_sync/adaptors/operation.rb
353
+ - lib/ledger_sync/adaptors/quickbooks_online/account/mapping.rb
354
+ - lib/ledger_sync/adaptors/quickbooks_online/account/operations/create.rb
355
+ - lib/ledger_sync/adaptors/quickbooks_online/account/operations/find.rb
356
+ - lib/ledger_sync/adaptors/quickbooks_online/account/operations/update.rb
357
+ - lib/ledger_sync/adaptors/quickbooks_online/account/searcher.rb
339
358
  - lib/ledger_sync/adaptors/quickbooks_online/adaptor.rb
359
+ - lib/ledger_sync/adaptors/quickbooks_online/bill/operations/create.rb
360
+ - lib/ledger_sync/adaptors/quickbooks_online/bill/operations/find.rb
361
+ - lib/ledger_sync/adaptors/quickbooks_online/bill/operations/update.rb
362
+ - lib/ledger_sync/adaptors/quickbooks_online/bill/searcher.rb
340
363
  - lib/ledger_sync/adaptors/quickbooks_online/config.rb
341
364
  - lib/ledger_sync/adaptors/quickbooks_online/customer/operations/create.rb
342
365
  - lib/ledger_sync/adaptors/quickbooks_online/customer/operations/find.rb
343
366
  - lib/ledger_sync/adaptors/quickbooks_online/customer/operations/update.rb
344
- - lib/ledger_sync/adaptors/quickbooks_online/customer/operations/upsert.rb
345
367
  - lib/ledger_sync/adaptors/quickbooks_online/customer/searcher.rb
368
+ - lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/create.rb
369
+ - lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/find.rb
370
+ - lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/update.rb
371
+ - lib/ledger_sync/adaptors/quickbooks_online/deposit/searcher.rb
372
+ - lib/ledger_sync/adaptors/quickbooks_online/expense/mapping.rb
373
+ - lib/ledger_sync/adaptors/quickbooks_online/expense/operations/create.rb
374
+ - lib/ledger_sync/adaptors/quickbooks_online/expense/operations/find.rb
375
+ - lib/ledger_sync/adaptors/quickbooks_online/expense/operations/update.rb
376
+ - lib/ledger_sync/adaptors/quickbooks_online/expense/searcher.rb
377
+ - lib/ledger_sync/adaptors/quickbooks_online/journal_entry/mapping.rb
378
+ - lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/create.rb
379
+ - lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/find.rb
380
+ - lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/update.rb
381
+ - lib/ledger_sync/adaptors/quickbooks_online/journal_entry/searcher.rb
382
+ - lib/ledger_sync/adaptors/quickbooks_online/operation.rb
346
383
  - lib/ledger_sync/adaptors/quickbooks_online/payment/operations/create.rb
347
384
  - lib/ledger_sync/adaptors/quickbooks_online/payment/operations/find.rb
348
385
  - lib/ledger_sync/adaptors/quickbooks_online/payment/operations/update.rb
349
- - lib/ledger_sync/adaptors/quickbooks_online/payment/operations/upsert.rb
386
+ - lib/ledger_sync/adaptors/quickbooks_online/searcher.rb
387
+ - lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/create.rb
388
+ - lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/find.rb
389
+ - lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/update.rb
350
390
  - lib/ledger_sync/adaptors/quickbooks_online/util/adaptor_error_parser.rb
351
391
  - lib/ledger_sync/adaptors/quickbooks_online/util/error_matcher.rb
352
392
  - lib/ledger_sync/adaptors/quickbooks_online/util/error_parser.rb
353
393
  - lib/ledger_sync/adaptors/quickbooks_online/util/operation_error_parser.rb
394
+ - lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/create.rb
395
+ - lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/find.rb
396
+ - lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/update.rb
397
+ - lib/ledger_sync/adaptors/quickbooks_online/vendor/searcher.rb
354
398
  - lib/ledger_sync/adaptors/searcher.rb
399
+ - lib/ledger_sync/adaptors/test/account/operations/create.rb
400
+ - lib/ledger_sync/adaptors/test/account/operations/find.rb
401
+ - lib/ledger_sync/adaptors/test/account/operations/invalid.rb
402
+ - lib/ledger_sync/adaptors/test/account/operations/update.rb
403
+ - lib/ledger_sync/adaptors/test/account/operations/valid.rb
404
+ - lib/ledger_sync/adaptors/test/account/searcher.rb
355
405
  - lib/ledger_sync/adaptors/test/adaptor.rb
356
406
  - lib/ledger_sync/adaptors/test/config.rb
357
407
  - lib/ledger_sync/adaptors/test/customer/operations/create.rb
358
408
  - lib/ledger_sync/adaptors/test/customer/operations/find.rb
359
409
  - lib/ledger_sync/adaptors/test/customer/operations/invalid.rb
360
410
  - lib/ledger_sync/adaptors/test/customer/operations/update.rb
361
- - lib/ledger_sync/adaptors/test/customer/operations/upsert.rb
362
411
  - lib/ledger_sync/adaptors/test/customer/operations/valid.rb
363
412
  - lib/ledger_sync/adaptors/test/customer/searcher.rb
364
413
  - lib/ledger_sync/adaptors/test/error/adaptor_error/operations/throttle_error.rb
414
+ - lib/ledger_sync/adaptors/test/expense/operations/create.rb
415
+ - lib/ledger_sync/adaptors/test/expense/operations/find.rb
416
+ - lib/ledger_sync/adaptors/test/expense/operations/update.rb
365
417
  - lib/ledger_sync/adaptors/test/payment/operations/create.rb
366
418
  - lib/ledger_sync/adaptors/test/payment/operations/find.rb
367
419
  - lib/ledger_sync/adaptors/test/payment/operations/update.rb
368
- - lib/ledger_sync/adaptors/test/payment/operations/upsert.rb
420
+ - lib/ledger_sync/adaptors/test/transfer/operations/create.rb
421
+ - lib/ledger_sync/adaptors/test/transfer/operations/find.rb
422
+ - lib/ledger_sync/adaptors/test/transfer/operations/update.rb
423
+ - lib/ledger_sync/adaptors/test/vendor/operations/create.rb
424
+ - lib/ledger_sync/adaptors/test/vendor/operations/find.rb
425
+ - lib/ledger_sync/adaptors/test/vendor/operations/invalid.rb
426
+ - lib/ledger_sync/adaptors/test/vendor/operations/update.rb
427
+ - lib/ledger_sync/adaptors/test/vendor/operations/valid.rb
428
+ - lib/ledger_sync/adaptors/test/vendor/searcher.rb
369
429
  - lib/ledger_sync/concerns/validatable.rb
370
430
  - lib/ledger_sync/core_ext/resonad.rb
371
431
  - lib/ledger_sync/error.rb
@@ -374,11 +434,36 @@ files:
374
434
  - lib/ledger_sync/error/resource_errors.rb
375
435
  - lib/ledger_sync/error/sync_errors.rb
376
436
  - lib/ledger_sync/resource.rb
437
+ - lib/ledger_sync/resource_attribute.rb
438
+ - lib/ledger_sync/resource_attribute/dirty_mixin.rb
439
+ - lib/ledger_sync/resource_attribute/mixin.rb
440
+ - lib/ledger_sync/resource_attribute/reference.rb
441
+ - lib/ledger_sync/resource_attribute/reference/many.rb
442
+ - lib/ledger_sync/resource_attribute/reference/one.rb
443
+ - lib/ledger_sync/resource_attribute_set.rb
444
+ - lib/ledger_sync/resources/account.rb
445
+ - lib/ledger_sync/resources/bill.rb
446
+ - lib/ledger_sync/resources/bill_line_item.rb
377
447
  - lib/ledger_sync/resources/customer.rb
448
+ - lib/ledger_sync/resources/deposit.rb
449
+ - lib/ledger_sync/resources/deposit_line_item.rb
450
+ - lib/ledger_sync/resources/expense.rb
451
+ - lib/ledger_sync/resources/expense_line_item.rb
452
+ - lib/ledger_sync/resources/journal_entry.rb
453
+ - lib/ledger_sync/resources/journal_entry_line_item.rb
378
454
  - lib/ledger_sync/resources/payment.rb
455
+ - lib/ledger_sync/resources/transfer.rb
456
+ - lib/ledger_sync/resources/vendor.rb
379
457
  - lib/ledger_sync/result.rb
380
- - lib/ledger_sync/sync.rb
381
- - lib/ledger_sync/util/coordinator.rb
458
+ - lib/ledger_sync/type/boolean.rb
459
+ - lib/ledger_sync/type/date.rb
460
+ - lib/ledger_sync/type/float.rb
461
+ - lib/ledger_sync/type/integer.rb
462
+ - lib/ledger_sync/type/reference_many.rb
463
+ - lib/ledger_sync/type/reference_one.rb
464
+ - lib/ledger_sync/type/string.rb
465
+ - lib/ledger_sync/type/value.rb
466
+ - lib/ledger_sync/type/value_mixin.rb
382
467
  - lib/ledger_sync/util/debug.rb
383
468
  - lib/ledger_sync/util/hash_helpers.rb
384
469
  - lib/ledger_sync/util/performer.rb