double_entry 1.0.1 → 2.0.0.beta5

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 (79) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +497 -0
  3. data/README.md +107 -44
  4. data/double_entry.gemspec +22 -49
  5. data/lib/active_record/locking_extensions.rb +3 -3
  6. data/lib/active_record/locking_extensions/log_subscriber.rb +1 -1
  7. data/lib/double_entry.rb +29 -21
  8. data/lib/double_entry/account.rb +39 -46
  9. data/lib/double_entry/account_balance.rb +20 -3
  10. data/lib/double_entry/balance_calculator.rb +5 -5
  11. data/lib/double_entry/configurable.rb +1 -0
  12. data/lib/double_entry/configuration.rb +8 -2
  13. data/lib/double_entry/errors.rb +13 -13
  14. data/lib/double_entry/line.rb +7 -6
  15. data/lib/double_entry/locking.rb +5 -5
  16. data/lib/double_entry/transfer.rb +37 -30
  17. data/lib/double_entry/validation.rb +1 -0
  18. data/lib/double_entry/validation/account_fixer.rb +36 -0
  19. data/lib/double_entry/validation/line_check.rb +25 -43
  20. data/lib/double_entry/version.rb +1 -1
  21. data/lib/generators/double_entry/install/install_generator.rb +22 -1
  22. data/lib/generators/double_entry/install/templates/initializer.rb +20 -0
  23. data/lib/generators/double_entry/install/templates/migration.rb +45 -55
  24. metadata +35 -256
  25. data/.gitignore +0 -32
  26. data/.rspec +0 -2
  27. data/.travis.yml +0 -29
  28. data/.yardopts +0 -2
  29. data/Gemfile +0 -2
  30. data/Rakefile +0 -15
  31. data/lib/double_entry/reporting.rb +0 -181
  32. data/lib/double_entry/reporting/aggregate.rb +0 -110
  33. data/lib/double_entry/reporting/aggregate_array.rb +0 -76
  34. data/lib/double_entry/reporting/day_range.rb +0 -42
  35. data/lib/double_entry/reporting/hour_range.rb +0 -45
  36. data/lib/double_entry/reporting/line_aggregate.rb +0 -16
  37. data/lib/double_entry/reporting/line_aggregate_filter.rb +0 -79
  38. data/lib/double_entry/reporting/month_range.rb +0 -94
  39. data/lib/double_entry/reporting/time_range.rb +0 -59
  40. data/lib/double_entry/reporting/time_range_array.rb +0 -49
  41. data/lib/double_entry/reporting/week_range.rb +0 -107
  42. data/lib/double_entry/reporting/year_range.rb +0 -40
  43. data/script/jack_hammer +0 -210
  44. data/script/setup.sh +0 -8
  45. data/spec/active_record/locking_extensions_spec.rb +0 -110
  46. data/spec/double_entry/account_balance_spec.rb +0 -7
  47. data/spec/double_entry/account_spec.rb +0 -130
  48. data/spec/double_entry/balance_calculator_spec.rb +0 -88
  49. data/spec/double_entry/configuration_spec.rb +0 -50
  50. data/spec/double_entry/line_spec.rb +0 -80
  51. data/spec/double_entry/locking_spec.rb +0 -214
  52. data/spec/double_entry/performance/double_entry_performance_spec.rb +0 -32
  53. data/spec/double_entry/performance/reporting/aggregate_performance_spec.rb +0 -50
  54. data/spec/double_entry/reporting/aggregate_array_spec.rb +0 -123
  55. data/spec/double_entry/reporting/aggregate_spec.rb +0 -205
  56. data/spec/double_entry/reporting/line_aggregate_filter_spec.rb +0 -90
  57. data/spec/double_entry/reporting/line_aggregate_spec.rb +0 -39
  58. data/spec/double_entry/reporting/month_range_spec.rb +0 -139
  59. data/spec/double_entry/reporting/time_range_array_spec.rb +0 -169
  60. data/spec/double_entry/reporting/time_range_spec.rb +0 -45
  61. data/spec/double_entry/reporting/week_range_spec.rb +0 -103
  62. data/spec/double_entry/reporting_spec.rb +0 -181
  63. data/spec/double_entry/transfer_spec.rb +0 -93
  64. data/spec/double_entry/validation/line_check_spec.rb +0 -99
  65. data/spec/double_entry_spec.rb +0 -428
  66. data/spec/generators/double_entry/install/install_generator_spec.rb +0 -30
  67. data/spec/spec_helper.rb +0 -118
  68. data/spec/support/accounts.rb +0 -21
  69. data/spec/support/blueprints.rb +0 -43
  70. data/spec/support/database.example.yml +0 -21
  71. data/spec/support/database.travis.yml +0 -24
  72. data/spec/support/double_entry_spec_helper.rb +0 -27
  73. data/spec/support/gemfiles/Gemfile.rails-3.2.x +0 -8
  74. data/spec/support/gemfiles/Gemfile.rails-4.1.x +0 -6
  75. data/spec/support/gemfiles/Gemfile.rails-4.2.x +0 -5
  76. data/spec/support/gemfiles/Gemfile.rails-5.0.x +0 -5
  77. data/spec/support/performance_helper.rb +0 -26
  78. data/spec/support/reporting_configuration.rb +0 -6
  79. data/spec/support/schema.rb +0 -74
@@ -1 +1,2 @@
1
+ require 'double_entry/validation/account_fixer'
1
2
  require 'double_entry/validation/line_check'
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DoubleEntry
4
+ module Validation
5
+ class AccountFixer
6
+ def recalculate_account(account)
7
+ DoubleEntry.lock_accounts(account) do
8
+ recalculated_balance = Money.zero(account.currency)
9
+
10
+ lines_for_account(account).each do |line|
11
+ recalculated_balance += line.amount
12
+ if line.balance != recalculated_balance
13
+ line.update_attribute(:balance, recalculated_balance)
14
+ end
15
+ end
16
+
17
+ update_balance_for_account(account, recalculated_balance)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def lines_for_account(account)
24
+ Line.where(
25
+ account: account.identifier.to_s,
26
+ scope: account.scope_identity.to_s
27
+ ).order(:id)
28
+ end
29
+
30
+ def update_balance_for_account(account, balance)
31
+ account_balance = Locking.balance_for_locked_account(account)
32
+ account_balance.update_attribute(:balance, balance)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -4,13 +4,16 @@ require 'set'
4
4
  module DoubleEntry
5
5
  module Validation
6
6
  class LineCheck < ActiveRecord::Base
7
- default_scope -> { order('created_at') }
8
7
 
9
- def self.perform!
10
- new.perform
8
+ def self.last_line_id_checked
9
+ order('created_at DESC').limit(1).pluck(:last_line_id).first || 0
11
10
  end
12
11
 
13
- def perform
12
+ def self.perform!(fixer: nil)
13
+ new.perform(fixer: fixer)
14
+ end
15
+
16
+ def perform(fixer: nil)
14
17
  log = ''
15
18
  current_line_id = nil
16
19
 
@@ -24,29 +27,24 @@ module DoubleEntry
24
27
  end
25
28
 
26
29
  active_accounts.each do |account|
27
- incorrect_accounts << account unless cached_balance_correct?(account)
30
+ incorrect_accounts << account unless cached_balance_correct?(account, log)
28
31
  end
29
32
 
30
- incorrect_accounts.each { |account| recalculate_account(account) }
33
+ incorrect_accounts.each(&fixer.method(:recalculate_account)) if fixer
31
34
 
32
35
  unless active_accounts.empty?
33
36
  LineCheck.create!(
34
- :errors_found => incorrect_accounts.any?,
35
- :last_line_id => current_line_id,
36
- :log => log,
37
+ errors_found: incorrect_accounts.any?,
38
+ last_line_id: current_line_id,
39
+ log: log,
37
40
  )
38
41
  end
39
42
  end
40
43
 
41
44
  private
42
45
 
43
- def last_run_line_id
44
- latest = LineCheck.last
45
- latest ? latest.last_line_id : 0
46
- end
47
-
48
46
  def new_lines_since_last_run
49
- Line.where('id > ?', last_run_line_id)
47
+ Line.with_id_greater_than(LineCheck.last_line_id_checked)
50
48
  end
51
49
 
52
50
  def running_balance_correct?(line, log)
@@ -88,39 +86,23 @@ module DoubleEntry
88
86
  #{previous_line.inspect}
89
87
  #{line.inspect}
90
88
 
91
- END_OF_MESSAGE
92
- end
93
-
94
- def cached_balance_correct?(account)
95
- DoubleEntry.lock_accounts(account) do
96
- return AccountBalance.find_by_account(account).balance == account.balance
97
- end
89
+ END_OF_MESSAGE
98
90
  end
99
91
 
100
- def recalculate_account(account)
92
+ def cached_balance_correct?(account, log)
101
93
  DoubleEntry.lock_accounts(account) do
102
- recalculated_balance = Money.zero(account.currency)
103
-
104
- lines_for_account(account).each do |line|
105
- recalculated_balance += line.amount
106
- line.update_attribute(:balance, recalculated_balance) if line.balance != recalculated_balance
107
- end
108
-
109
- update_balance_for_account(account, recalculated_balance)
94
+ cached_balance = AccountBalance.find_by_account(account).balance
95
+ running_balance = account.balance
96
+ correct = (cached_balance == running_balance)
97
+ log << <<~MESSAGE unless correct
98
+ *********************************
99
+ Error on account #{account}: #{cached_balance} (cached balance) != #{running_balance} (running balance)
100
+ *********************************
101
+
102
+ MESSAGE
103
+ return correct
110
104
  end
111
105
  end
112
-
113
- def lines_for_account(account)
114
- Line.where(
115
- :account => account.identifier.to_s,
116
- :scope => account.scope_identity.to_s,
117
- ).order(:id)
118
- end
119
-
120
- def update_balance_for_account(account, balance)
121
- account_balance = Locking.balance_for_locked_account(account)
122
- account_balance.update_attribute(:balance, balance)
123
- end
124
106
  end
125
107
  end
126
108
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module DoubleEntry
4
- VERSION = '1.0.1'
4
+ VERSION = '2.0.0.beta5'
5
5
  end
@@ -7,6 +7,8 @@ module DoubleEntry
7
7
  class InstallGenerator < Rails::Generators::Base
8
8
  include Rails::Generators::Migration
9
9
 
10
+ class_option :json_metadata, type: :boolean, default: true
11
+
10
12
  source_root File.expand_path('../templates', __FILE__)
11
13
 
12
14
  def self.next_migration_number(path)
@@ -14,7 +16,26 @@ module DoubleEntry
14
16
  end
15
17
 
16
18
  def copy_migrations
17
- migration_template 'migration.rb', 'db/migrate/create_double_entry_tables.rb'
19
+ migration_template 'migration.rb', 'db/migrate/create_double_entry_tables.rb', migration_version: migration_version
20
+ end
21
+
22
+ def create_initializer
23
+ template 'initializer.rb', 'config/initializers/double_entry.rb'
24
+ end
25
+
26
+ def json_metadata
27
+ # MySQL JSON support added to AR 5.0
28
+ if ActiveRecord.version.version < '5'
29
+ false
30
+ else
31
+ options[:json_metadata]
32
+ end
33
+ end
34
+
35
+ def migration_version
36
+ if ActiveRecord.version.version > '5'
37
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
38
+ end
18
39
  end
19
40
  end
20
41
  end
@@ -0,0 +1,20 @@
1
+ require 'double_entry'
2
+
3
+ DoubleEntry.configure do |config|
4
+ # Use json(b) column in double_entry_lines table to store metadata instead of separate metadata table
5
+ config.json_metadata = <%= json_metadata %>
6
+
7
+ # config.define_accounts do |accounts|
8
+ # user_scope = ->(user) do
9
+ # raise 'not a User' unless user.class.name == 'User'
10
+ # user.id
11
+ # end
12
+ # accounts.define(identifier: :savings, scope_identifier: user_scope, positive_only: true)
13
+ # accounts.define(identifier: :checking, scope_identifier: user_scope)
14
+ # end
15
+ #
16
+ # config.define_transfers do |transfers|
17
+ # transfers.define(from: :checking, to: :savings, code: :deposit)
18
+ # transfers.define(from: :savings, to: :checking, code: :withdraw)
19
+ # end
20
+ end
@@ -1,74 +1,64 @@
1
- class CreateDoubleEntryTables < ActiveRecord::Migration
2
-
1
+ class CreateDoubleEntryTables < ActiveRecord::Migration<%= migration_version %>
3
2
  def self.up
4
- create_table "double_entry_account_balances", :force => true do |t|
5
- t.string "account", :limit => 31, :null => false
6
- t.string "scope", :limit => 23
7
- t.integer "balance", :null => false
8
- t.timestamps :null => false
3
+ create_table "double_entry_account_balances" do |t|
4
+ t.string "account", null: false
5
+ t.string "scope"
6
+ t.bigint "balance", null: false
7
+ t.timestamps null: false
9
8
  end
10
9
 
11
- add_index "double_entry_account_balances", ["account"], :name => "index_account_balances_on_account"
12
- add_index "double_entry_account_balances", ["scope", "account"], :name => "index_account_balances_on_scope_and_account", :unique => true
10
+ add_index "double_entry_account_balances", ["account"], name: "index_account_balances_on_account"
11
+ add_index "double_entry_account_balances", ["scope", "account"], name: "index_account_balances_on_scope_and_account", unique: true
13
12
 
14
- create_table "double_entry_lines", :force => true do |t|
15
- t.string "account", :limit => 31, :null => false
16
- t.string "scope", :limit => 23
17
- t.string "code", :limit => 47, :null => false
18
- t.integer "amount", :null => false
19
- t.integer "balance", :null => false
20
- t.integer "partner_id"
21
- t.string "partner_account", :limit => 31, :null => false
22
- t.string "partner_scope", :limit => 23
23
- t.integer "detail_id"
24
- t.string "detail_type"
25
- t.timestamps :null => false
13
+ create_table "double_entry_lines" do |t|
14
+ t.string "account", null: false
15
+ t.string "scope"
16
+ t.string "code", null: false
17
+ t.bigint "amount", null: false
18
+ t.bigint "balance", null: false
19
+ t.references "partner", index: false
20
+ t.string "partner_account", null: false
21
+ t.string "partner_scope"
22
+ t.references "detail", index: false, polymorphic: true
23
+ <%- if json_metadata -%>
24
+ if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
25
+ t.jsonb "metadata"
26
+ else
27
+ t.json "metadata"
28
+ end
29
+ <%- end -%>
30
+ t.timestamps null: false
26
31
  end
27
32
 
28
- add_index "double_entry_lines", ["account", "code", "created_at"], :name => "lines_account_code_created_at_idx"
29
- add_index "double_entry_lines", ["account", "created_at"], :name => "lines_account_created_at_idx"
30
- add_index "double_entry_lines", ["scope", "account", "created_at"], :name => "lines_scope_account_created_at_idx"
31
- add_index "double_entry_lines", ["scope", "account", "id"], :name => "lines_scope_account_id_idx"
32
-
33
- create_table "double_entry_line_aggregates", :force => true do |t|
34
- t.string "function", :limit => 15, :null => false
35
- t.string "account", :limit => 31, :null => false
36
- t.string "code", :limit => 47
37
- t.string "scope", :limit => 23
38
- t.integer "year"
39
- t.integer "month"
40
- t.integer "week"
41
- t.integer "day"
42
- t.integer "hour"
43
- t.integer "amount", :null => false
44
- t.string "filter"
45
- t.string "range_type", :limit => 15, :null => false
46
- t.timestamps :null => false
47
- end
33
+ add_index "double_entry_lines", ["account", "code", "created_at"], name: "lines_account_code_created_at_idx"
34
+ add_index "double_entry_lines", ["account", "created_at"], name: "lines_account_created_at_idx"
35
+ add_index "double_entry_lines", ["scope", "account", "created_at"], name: "lines_scope_account_created_at_idx"
36
+ add_index "double_entry_lines", ["scope", "account", "id"], name: "lines_scope_account_id_idx"
48
37
 
49
- add_index "double_entry_line_aggregates", ["function", "account", "code", "year", "month", "week", "day"], :name => "line_aggregate_idx"
50
-
51
- create_table "double_entry_line_checks", :force => true do |t|
52
- t.integer "last_line_id", :null => false
53
- t.boolean "errors_found", :null => false
38
+ create_table "double_entry_line_checks" do |t|
39
+ t.references "last_line", null: false, index: false
40
+ t.boolean "errors_found", null: false
54
41
  t.text "log"
55
- t.timestamps :null => false
42
+ t.timestamps null: false
56
43
  end
57
44
 
58
- create_table "double_entry_line_metadata", :force => true do |t|
59
- t.integer "line_id", :null => false
60
- t.string "key", :limit => 48, :null => false
61
- t.string "value", :limit => 64, :null => false
62
- t.timestamps :null => false
45
+ add_index "double_entry_line_checks", ["created_at", "last_line_id"], name: "line_checks_created_at_last_line_id_idx"
46
+ <%- unless json_metadata -%>
47
+
48
+ create_table "double_entry_line_metadata" do |t|
49
+ t.references "line", null: false, index: false
50
+ t.string "key", null: false
51
+ t.string "value", null: false
52
+ t.timestamps null: false
63
53
  end
64
54
 
65
- add_index "double_entry_line_metadata", ["line_id", "key", "value"], :name => "lines_meta_line_id_key_value_idx"
55
+ add_index "double_entry_line_metadata", ["line_id", "key", "value"], name: "lines_meta_line_id_key_value_idx"
56
+ <%- end -%>
66
57
  end
67
58
 
68
59
  def self.down
69
- drop_table "double_entry_line_metadata"
60
+ drop_table "double_entry_line_metadata" if table_exists?("double_entry_line_metadata")
70
61
  drop_table "double_entry_line_checks"
71
- drop_table "double_entry_line_aggregates"
72
62
  drop_table "double_entry_lines"
73
63
  drop_table "double_entry_account_balances"
74
64
  end
metadata CHANGED
@@ -1,37 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: double_entry
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0.beta5
5
5
  platform: ruby
6
6
  authors:
7
- - Anthony Sellitti
8
- - Keith Pitt
9
- - Martin Jagusch
10
- - Martin Spickermann
11
- - Mark Turnley
12
- - Orien Madgwick
13
- - Pete Yandall
14
- - Stephanie Staub
15
- - Giancarlo Salamanca
7
+ - Envato
16
8
  autorequire:
17
9
  bindir: bin
18
10
  cert_chain: []
19
- date: 2018-01-06 00:00:00.000000000 Z
11
+ date: 2021-02-24 00:00:00.000000000 Z
20
12
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: money
23
- requirement: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- version: 6.0.0
28
- type: :runtime
29
- prerelease: false
30
- version_requirements: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: 6.0.0
35
13
  - !ruby/object:Gem::Dependency
36
14
  name: activerecord
37
15
  requirement: !ruby/object:Gem::Requirement
@@ -61,33 +39,33 @@ dependencies:
61
39
  - !ruby/object:Gem::Version
62
40
  version: 3.2.0
63
41
  - !ruby/object:Gem::Dependency
64
- name: railties
42
+ name: money
65
43
  requirement: !ruby/object:Gem::Requirement
66
44
  requirements:
67
45
  - - ">="
68
46
  - !ruby/object:Gem::Version
69
- version: 3.2.0
47
+ version: 6.0.0
70
48
  type: :runtime
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
51
  requirements:
74
52
  - - ">="
75
53
  - !ruby/object:Gem::Version
76
- version: 3.2.0
54
+ version: 6.0.0
77
55
  - !ruby/object:Gem::Dependency
78
- name: rake
56
+ name: railties
79
57
  requirement: !ruby/object:Gem::Requirement
80
58
  requirements:
81
59
  - - ">="
82
60
  - !ruby/object:Gem::Version
83
- version: '0'
84
- type: :development
61
+ version: 3.2.0
62
+ type: :runtime
85
63
  prerelease: false
86
64
  version_requirements: !ruby/object:Gem::Requirement
87
65
  requirements:
88
66
  - - ">="
89
67
  - !ruby/object:Gem::Version
90
- version: '0'
68
+ version: 3.2.0
91
69
  - !ruby/object:Gem::Dependency
92
70
  name: mysql2
93
71
  requirement: !ruby/object:Gem::Requirement
@@ -117,35 +95,7 @@ dependencies:
117
95
  - !ruby/object:Gem::Version
118
96
  version: '0'
119
97
  - !ruby/object:Gem::Dependency
120
- name: sqlite3
121
- requirement: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- type: :development
127
- prerelease: false
128
- version_requirements: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: '0'
133
- - !ruby/object:Gem::Dependency
134
- name: rspec
135
- requirement: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: '0'
140
- type: :development
141
- prerelease: false
142
- version_requirements: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- version: '0'
147
- - !ruby/object:Gem::Dependency
148
- name: rspec-its
98
+ name: rake
149
99
  requirement: !ruby/object:Gem::Requirement
150
100
  requirements:
151
101
  - - ">="
@@ -159,7 +109,7 @@ dependencies:
159
109
  - !ruby/object:Gem::Version
160
110
  version: '0'
161
111
  - !ruby/object:Gem::Dependency
162
- name: rspec-instafail
112
+ name: sqlite3
163
113
  requirement: !ruby/object:Gem::Requirement
164
114
  requirements:
165
115
  - - ">="
@@ -187,63 +137,7 @@ dependencies:
187
137
  - !ruby/object:Gem::Version
188
138
  version: '0'
189
139
  - !ruby/object:Gem::Dependency
190
- name: generator_spec
191
- requirement: !ruby/object:Gem::Requirement
192
- requirements:
193
- - - ">="
194
- - !ruby/object:Gem::Version
195
- version: '0'
196
- type: :development
197
- prerelease: false
198
- version_requirements: !ruby/object:Gem::Requirement
199
- requirements:
200
- - - ">="
201
- - !ruby/object:Gem::Version
202
- version: '0'
203
- - !ruby/object:Gem::Dependency
204
- name: machinist
205
- requirement: !ruby/object:Gem::Requirement
206
- requirements:
207
- - - ">="
208
- - !ruby/object:Gem::Version
209
- version: '0'
210
- type: :development
211
- prerelease: false
212
- version_requirements: !ruby/object:Gem::Requirement
213
- requirements:
214
- - - ">="
215
- - !ruby/object:Gem::Version
216
- version: '0'
217
- - !ruby/object:Gem::Dependency
218
- name: timecop
219
- requirement: !ruby/object:Gem::Requirement
220
- requirements:
221
- - - ">="
222
- - !ruby/object:Gem::Version
223
- version: '0'
224
- type: :development
225
- prerelease: false
226
- version_requirements: !ruby/object:Gem::Requirement
227
- requirements:
228
- - - ">="
229
- - !ruby/object:Gem::Version
230
- version: '0'
231
- - !ruby/object:Gem::Dependency
232
- name: test-unit
233
- requirement: !ruby/object:Gem::Requirement
234
- requirements:
235
- - - ">="
236
- - !ruby/object:Gem::Version
237
- version: '0'
238
- type: :development
239
- prerelease: false
240
- version_requirements: !ruby/object:Gem::Requirement
241
- requirements:
242
- - - ">="
243
- - !ruby/object:Gem::Version
244
- version: '0'
245
- - !ruby/object:Gem::Dependency
246
- name: pry
140
+ name: factory_bot
247
141
  requirement: !ruby/object:Gem::Requirement
248
142
  requirements:
249
143
  - - ">="
@@ -257,7 +151,7 @@ dependencies:
257
151
  - !ruby/object:Gem::Version
258
152
  version: '0'
259
153
  - !ruby/object:Gem::Dependency
260
- name: pry-doc
154
+ name: generator_spec
261
155
  requirement: !ruby/object:Gem::Requirement
262
156
  requirements:
263
157
  - - ">="
@@ -271,7 +165,7 @@ dependencies:
271
165
  - !ruby/object:Gem::Version
272
166
  version: '0'
273
167
  - !ruby/object:Gem::Dependency
274
- name: pry-byebug
168
+ name: rspec
275
169
  requirement: !ruby/object:Gem::Requirement
276
170
  requirements:
277
171
  - - ">="
@@ -285,7 +179,7 @@ dependencies:
285
179
  - !ruby/object:Gem::Version
286
180
  version: '0'
287
181
  - !ruby/object:Gem::Dependency
288
- name: pry-stack_explorer
182
+ name: rspec-its
289
183
  requirement: !ruby/object:Gem::Requirement
290
184
  requirements:
291
185
  - - ">="
@@ -299,7 +193,7 @@ dependencies:
299
193
  - !ruby/object:Gem::Version
300
194
  version: '0'
301
195
  - !ruby/object:Gem::Dependency
302
- name: awesome_print
196
+ name: ruby-prof
303
197
  requirement: !ruby/object:Gem::Requirement
304
198
  requirements:
305
199
  - - ">="
@@ -313,7 +207,7 @@ dependencies:
313
207
  - !ruby/object:Gem::Version
314
208
  version: '0'
315
209
  - !ruby/object:Gem::Dependency
316
- name: ruby-prof
210
+ name: timecop
317
211
  requirement: !ruby/object:Gem::Requirement
318
212
  requirements:
319
213
  - - ">="
@@ -328,27 +222,14 @@ dependencies:
328
222
  version: '0'
329
223
  description:
330
224
  email:
331
- - anthony.sellitti@envato.com
332
- - me@keithpitt.com
333
- - _@mj.io
334
- - spickemann@gmail.com
335
- - mark@envato.com
336
- - _@orien.io
337
- - pete@envato.com
338
- - staub.steph@gmail.com
339
- - giancarlo@salamanca.net.au
225
+ - rubygems@envato.com
340
226
  executables: []
341
227
  extensions: []
342
228
  extra_rdoc_files: []
343
229
  files:
344
- - ".gitignore"
345
- - ".rspec"
346
- - ".travis.yml"
347
- - ".yardopts"
348
- - Gemfile
230
+ - CHANGELOG.md
349
231
  - LICENSE.md
350
232
  - README.md
351
- - Rakefile
352
233
  - double_entry.gemspec
353
234
  - lib/active_record/locking_extensions.rb
354
235
  - lib/active_record/locking_extensions/log_subscriber.rb
@@ -362,90 +243,23 @@ files:
362
243
  - lib/double_entry/line.rb
363
244
  - lib/double_entry/line_metadata.rb
364
245
  - lib/double_entry/locking.rb
365
- - lib/double_entry/reporting.rb
366
- - lib/double_entry/reporting/aggregate.rb
367
- - lib/double_entry/reporting/aggregate_array.rb
368
- - lib/double_entry/reporting/day_range.rb
369
- - lib/double_entry/reporting/hour_range.rb
370
- - lib/double_entry/reporting/line_aggregate.rb
371
- - lib/double_entry/reporting/line_aggregate_filter.rb
372
- - lib/double_entry/reporting/month_range.rb
373
- - lib/double_entry/reporting/time_range.rb
374
- - lib/double_entry/reporting/time_range_array.rb
375
- - lib/double_entry/reporting/week_range.rb
376
- - lib/double_entry/reporting/year_range.rb
377
246
  - lib/double_entry/transfer.rb
378
247
  - lib/double_entry/validation.rb
248
+ - lib/double_entry/validation/account_fixer.rb
379
249
  - lib/double_entry/validation/line_check.rb
380
250
  - lib/double_entry/version.rb
381
251
  - lib/generators/double_entry/install/install_generator.rb
252
+ - lib/generators/double_entry/install/templates/initializer.rb
382
253
  - lib/generators/double_entry/install/templates/migration.rb
383
- - script/jack_hammer
384
- - script/setup.sh
385
- - spec/active_record/locking_extensions_spec.rb
386
- - spec/double_entry/account_balance_spec.rb
387
- - spec/double_entry/account_spec.rb
388
- - spec/double_entry/balance_calculator_spec.rb
389
- - spec/double_entry/configuration_spec.rb
390
- - spec/double_entry/line_spec.rb
391
- - spec/double_entry/locking_spec.rb
392
- - spec/double_entry/performance/double_entry_performance_spec.rb
393
- - spec/double_entry/performance/reporting/aggregate_performance_spec.rb
394
- - spec/double_entry/reporting/aggregate_array_spec.rb
395
- - spec/double_entry/reporting/aggregate_spec.rb
396
- - spec/double_entry/reporting/line_aggregate_filter_spec.rb
397
- - spec/double_entry/reporting/line_aggregate_spec.rb
398
- - spec/double_entry/reporting/month_range_spec.rb
399
- - spec/double_entry/reporting/time_range_array_spec.rb
400
- - spec/double_entry/reporting/time_range_spec.rb
401
- - spec/double_entry/reporting/week_range_spec.rb
402
- - spec/double_entry/reporting_spec.rb
403
- - spec/double_entry/transfer_spec.rb
404
- - spec/double_entry/validation/line_check_spec.rb
405
- - spec/double_entry_spec.rb
406
- - spec/generators/double_entry/install/install_generator_spec.rb
407
- - spec/spec_helper.rb
408
- - spec/support/accounts.rb
409
- - spec/support/blueprints.rb
410
- - spec/support/database.example.yml
411
- - spec/support/database.travis.yml
412
- - spec/support/double_entry_spec_helper.rb
413
- - spec/support/gemfiles/Gemfile.rails-3.2.x
414
- - spec/support/gemfiles/Gemfile.rails-4.1.x
415
- - spec/support/gemfiles/Gemfile.rails-4.2.x
416
- - spec/support/gemfiles/Gemfile.rails-5.0.x
417
- - spec/support/performance_helper.rb
418
- - spec/support/reporting_configuration.rb
419
- - spec/support/schema.rb
420
254
  homepage: https://github.com/envato/double_entry
421
- licenses: []
422
- metadata: {}
423
- post_install_message: |
424
- Please note the following changes in DoubleEntry:
425
- - New table `double_entry_line_metadata` has been introduced and is *required* for
426
- aggregate reporting filtering to work. Existing applications must manually manage
427
- this change via a migration similar to the following:
428
-
429
- class CreateDoubleEntryLineMetadata < ActiveRecord::Migration
430
- def self.up
431
- create_table "#{DoubleEntry.table_name_prefix}line_metadata", :force => true do |t|
432
- t.integer "line_id", :null => false
433
- t.string "key", :limit => 48, :null => false
434
- t.string "value", :limit => 64, :null => false
435
- t.timestamps :null => false
436
- end
437
-
438
- add_index "#{DoubleEntry.table_name_prefix}line_metadata",
439
- ["line_id", "key", "value"],
440
- :name => "lines_meta_line_id_key_value_idx"
441
- end
442
-
443
- def self.down
444
- drop_table "#{DoubleEntry.table_name_prefix}line_metadata"
445
- end
446
- end
447
-
448
- Please ensure that you update your database accordingly.
255
+ licenses:
256
+ - MIT
257
+ metadata:
258
+ bug_tracker_uri: https://github.com/envato/double_entry/issues
259
+ changelog_uri: https://github.com/envato/double_entry/blob/v2.0.0.beta5/CHANGELOG.md
260
+ documentation_uri: https://www.rubydoc.info/gems/double_entry/2.0.0.beta5
261
+ source_code_uri: https://github.com/envato/double_entry/tree/v2.0.0.beta5
262
+ post_install_message:
449
263
  rdoc_options: []
450
264
  require_paths:
451
265
  - lib
@@ -453,51 +267,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
453
267
  requirements:
454
268
  - - ">="
455
269
  - !ruby/object:Gem::Version
456
- version: '0'
270
+ version: 2.3.0
457
271
  required_rubygems_version: !ruby/object:Gem::Requirement
458
272
  requirements:
459
- - - ">="
273
+ - - ">"
460
274
  - !ruby/object:Gem::Version
461
- version: '0'
275
+ version: 1.3.1
462
276
  requirements: []
463
277
  rubyforge_project:
464
- rubygems_version: 2.5.2
278
+ rubygems_version: 2.7.3
465
279
  signing_key:
466
280
  specification_version: 4
467
281
  summary: Tools to build your double entry financial ledger
468
- test_files:
469
- - spec/active_record/locking_extensions_spec.rb
470
- - spec/double_entry/account_balance_spec.rb
471
- - spec/double_entry/account_spec.rb
472
- - spec/double_entry/balance_calculator_spec.rb
473
- - spec/double_entry/configuration_spec.rb
474
- - spec/double_entry/line_spec.rb
475
- - spec/double_entry/locking_spec.rb
476
- - spec/double_entry/performance/double_entry_performance_spec.rb
477
- - spec/double_entry/performance/reporting/aggregate_performance_spec.rb
478
- - spec/double_entry/reporting/aggregate_array_spec.rb
479
- - spec/double_entry/reporting/aggregate_spec.rb
480
- - spec/double_entry/reporting/line_aggregate_filter_spec.rb
481
- - spec/double_entry/reporting/line_aggregate_spec.rb
482
- - spec/double_entry/reporting/month_range_spec.rb
483
- - spec/double_entry/reporting/time_range_array_spec.rb
484
- - spec/double_entry/reporting/time_range_spec.rb
485
- - spec/double_entry/reporting/week_range_spec.rb
486
- - spec/double_entry/reporting_spec.rb
487
- - spec/double_entry/transfer_spec.rb
488
- - spec/double_entry/validation/line_check_spec.rb
489
- - spec/double_entry_spec.rb
490
- - spec/generators/double_entry/install/install_generator_spec.rb
491
- - spec/spec_helper.rb
492
- - spec/support/accounts.rb
493
- - spec/support/blueprints.rb
494
- - spec/support/database.example.yml
495
- - spec/support/database.travis.yml
496
- - spec/support/double_entry_spec_helper.rb
497
- - spec/support/gemfiles/Gemfile.rails-3.2.x
498
- - spec/support/gemfiles/Gemfile.rails-4.1.x
499
- - spec/support/gemfiles/Gemfile.rails-4.2.x
500
- - spec/support/gemfiles/Gemfile.rails-5.0.x
501
- - spec/support/performance_helper.rb
502
- - spec/support/reporting_configuration.rb
503
- - spec/support/schema.rb
282
+ test_files: []