Repository - API - Source
double_entry_lines
table migration, (#173).Extract DoubleEntry::Reporting
module to a separate gem:
double_entry-reporting
.
If this module is in use in your project add the double_entry-reporting
gem
and checkout the
changelog
for more updates.
If not in use, one can delete the double_entry_line_aggregates
table using
the following migration:
drop_table :double_entry_line_aggregates
Added contributor credits to README.
Added support for Ruby 2.3, 2.4, 2.5 and 2.6.
Added support for Rails 5.0, 5.1 and 5.2
Support passing an array of metadata values.
DoubleEntry.transfer(
Money.new(20_00),
:from => one_account,
:to => another_account,
:code => :a_business_code_for_this_type_of_transfer,
:metadata => { :key1 => ['value 1', 'value 2'], :key2 => 'value 3' },
)
Allow partner account to be specified for aggregates.
Allow filtering aggregates by multiple metadata key/value pairs.
Add index on the double_entry_line_checks
table. This covers the query to
obtain the last line check.
Add this index to your database via a migration like:
def up
add_index "double_entry_line_checks", ["created_at", "last_line_id"], :name => "line_checks_created_at_last_line_id_idx"
end
Log account balance cache errors to the database when performing the line check:
DoubleEntry::Validation::LineCheck::perform!
Replaced Machinist with Factory Bot in test suite.
Implement DoubleEntry::Transfer::Set
and DoubleEntry::Account::Set
with
Hash
es rather than Array
s for performance.
Reporting API now uses keyword arguments. Note these reporting classes are marked API private: their interface is not considered stable.
DoubleEntry::Reporting::aggregate
DoubleEntry::Reporting::aggregate_array
DoubleEntry::Reporting::Aggregate::new
DoubleEntry::Reporting::Aggregate::formatted_amount
DoubleEntry::Reporting::AggregateArray::new
DoubleEntry::Reporting::LineAggregateFilter::new
Loosened database string column contstraints to the default (255 characters). Engineering teams can choose to apply this change, or apply their own column length constraints specific to their needs. (#152)
Removed default values for the length checks on code
, account
and scope
(#152). These checks will now only be performed when configured with a value:
DoubleEntry.configure do |config|
config.code_max_length = 47
config.account_identifier_max_length = 31
config.scope_identifier_max_length = 23
end
Use bigint
for monetary values in the database to avoid integer overflow
(#154). Apply changes via this migration:
change_column :double_entry_account_balances, :balance, :bigint, null: false
change_column :double_entry_line_aggregates, :amount, :bigint, null: false
change_column :double_entry_lines, :amount, :bigint, null: false
change_column :double_entry_lines, :balance, :bigint, null: false
On Rails version 5.1 and above, use bigint
for foreign key values in the
database to avoid integer overflow (#154). Apply changes via this
migration:
change_column :double_entry_line_checks, :last_line_id, :bigint, null: false
change_column :double_entry_line_metadata, :line_id, :bigint, null: false
change_column :double_entry_lines, :partner_id, :bigint, null: true
change_column :double_entry_lines, :detail_id, :bigint, null: true
Line check validation no-longer performs corrections by default. The
DoubleEntry::Validation::LineCheck::perform!
method will only log validation
failures in the database. To perform auto-correction pass the fixer
option:
LineCheck.perform!(fixer: DoubleEntry::Validation::AccountFixer.new)
Removed support for Ruby 1.9, 2.0, 2.1 and 2.2.
Removed support for Rails 3.2, 4.0, and 4.1.
Removed unneeded development dependencies from Gemspec.
Removed spec and script files from gem package.
Removed the active_record_scope_identifier
method for configuring scoped accounts.
user_scope = accounts.active_record_scope_identifier(User)
As a replacement, please define your own with a lambda:
user_scope = ->(user) do
raise 'not a User' unless user.class.name == 'User'
user.id
end
Fixed more Ruby warnings.
Use double_entry
namespace when publishing to
ActiveSupport::Notifications
.
Fixed problem of Rails version number not being set in migration template for apps using Rails 5 or higher.
Use Money#positive?
and Money#negative?
rather than comparing to zero.
Resolves issues when dealing with multiple currencies.
Fixed typo in jack_hammer documentation.
Record meta-data against transfers.
DoubleEntry.transfer(
Money.new(20_00),
:from => one_account,
:to => another_account,
:code => :a_business_code_for_this_type_of_transfer,
:metadata => { :key1 => 'value 1', :key2 => 'value 2' },
)
This feature requires a new DB table. Please add a migration similar to:
class CreateDoubleEntryLineMetadata < ActiveRecord::Migration
def self.up
create_table "#{DoubleEntry.table_name_prefix}line_metadata", :force => true do |t|
t.integer "line_id", :null => false
t.string "key", :limit => 48, :null => false
t.string "value", :limit => 64, :null => false
t.timestamps :null => false
end
add_index "#{DoubleEntry.table_name_prefix}line_metadata",
["line_id", "key", "value"],
:name => "lines_meta_line_id_key_value_idx"
end
def self.down
drop_table "#{DoubleEntry.table_name_prefix}line_metadata"
end
end
DoubleEntry::Locking::LockWaitTimeout
for lock wait timeouts.DoubleEntry::Reporting::AggregateArray
correctly retreives previously
calculated aggregates.Run CI build against Ruby 2.2.0.
Added Rubocop and resolved code formatting issues.
Reduced permutations of DB, Ruby and Rails in CI build.
Build status badge displayed in README reports on just the master branch.
Update RSpec configuration with latest recommended options.
Addressed Ruby warnings.
Fixed circular arg reference.
Define accounts that can be negative only.
DoubleEntry.configure do |config|
config.define_accounts do |accounts|
accounts.define(
:identifier => :my_account_that_never_goes_positive,
:negative_only => true
)
end
end
Run CI build against Rails 4.2
DoubleEntry::Reporting::Agregate#formated_amount
no longer accepts
currency
argument.DoubleEntry::currency
method.DoubleEntry::balance
and DoubleEntry::account
now raise
DoubleEntry::AccountScopeMismatchError
if the scope provided is not of
the same type in the account definition.
Speed up CI build.
Removed use of Active Record callbacks in DoubleEntry::Line
.
Changed DoubleEntry::Reporting::WeekRange
calculation to use
Date#cweek
.
Added a convenience method for defining active record scope identifiers.
DoubleEntry.configure do |config|
config.define_accounts do |accounts|
user_scope = accounts.active_record_scope_identifier(User)
accounts.define(:identifier => :checking, :scope_identifier => user_scope)
end
end
Added support for SQLite.
DoubleEntry::RequiredMetaMissing
and
DoubleEntry::UserAccountNotLocked
.Reporting::reconciled?
support for account scopes.DoubleEntry::balance
method.Line#debit?
to Line#increase?
and Line#credit?
to
Line#decrease?
.DoubleEntry::Line#meta
attribute.Reporting
module.DoubleEntry::describe
and DoubleEntry::Line#description
methods.Added a configuration class to define valid accounts and transfers.
DoubleEntry.configure do |config|
config.define_accounts do |accounts|
accounts.define(identifier: :savings, positive_only: true)
accounts.define(identifier: :checking)
end
config.define_transfers do |transfers|
transfers.define(from: :checking, to: :savings, code: :deposit)
transfers.define(from: :savings, to: :checking, code: :withdraw)
end
end
DoubleEntry::Reporting
namespace. Mark
this module as @api private
: internal use only.