changelogs.md


envato/double_entry

Repository  -  API  -  Source

2.0.0

November 14, 2019

Fixed

  • Remove duplicate detail columns in double_entry_lines table migration, (#173).

2.0.0

January 27, 2019

Removed

  • 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

2.0.0

December 31, 2018

Added

  • 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!

Changed

  • Replaced Machinist with Factory Bot in test suite.

  • Implement DoubleEntry::Transfer::Set and DoubleEntry::Account::Set with Hashes rather than Arrays 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

  • 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

  • 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.

1.0.1

January 6, 2018

Removed

  • Removed Rubocop checks and build step.

Fixed

  • Use Money#positive? and Money#negative? rather than comparing to zero. Resolves issues when dealing with multiple currencies.

  • Fixed typo in jack_hammer documentation.

1.0.0

August 4, 2015

Added

  • 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

Changed

  • Raise DoubleEntry::Locking::LockWaitTimeout for lock wait timeouts.

Fixed

  • Ensure that a range is specified when performing an aggregate function over lines.

0.10.3

July 15, 2015

Added

  • Check code format with Rubocop as part of the CI build.

Fixed

  • More Rubocop code formatting issues fixed.

0.10.2

July 10, 2015

Fixed

  • DoubleEntry::Reporting::AggregateArray correctly retreives previously calculated aggregates.

0.10.1

July 6, 2015

Added

  • Run CI build against Ruby 2.2.0.

  • Added Rubocop and resolved code formatting issues.

Changed

  • 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.

Fixed

  • Addressed Ruby warnings.

  • Fixed circular arg reference.

0.10.0

January 9, 2015

Added

  • 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

0.9.0

December 8, 2014

Changed

  • DoubleEntry::Reporting::Agregate#formated_amount no longer accepts currency argument.

0.8.0

November 19, 2014

Added

  • Log when we encounter deadlocks causing restart/retry.

0.7.2

November 18, 2014

Removed

  • Removed DoubleEntry::currency method.

0.7.1

November 17, 2014

Fixed

  • 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.

0.7.0

November 12, 2014

Added

  • Added support for currency. :money_with_wings:

Changed

  • Require at least version 6.0 of Money gem.

0.6.1

October 10, 2014

Changed

  • Removed use of Active Record callbacks in DoubleEntry::Line.

  • Changed DoubleEntry::Reporting::WeekRange calculation to use Date#cweek.

0.6.0

August 23, 2014

Fixed

  • Fixed defect preventing locking a scoped and a non scoped account.

0.5.0

August 1, 2014

Added

  • 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.

Removed

  • Removed errors: DoubleEntry::RequiredMetaMissing and DoubleEntry::UserAccountNotLocked.

Fixed

  • Fixed Reporting::reconciled? support for account scopes.

0.4.0

July 17, 2014

Added

  • Added Yardoc documention to the DoubleEntry::balance method.

Changed

  • Changed Line#debit? to Line#increase? and Line#credit? to Line#decrease?.

Removed

  • Removed the DoubleEntry::Line#meta attribute.

0.3.1

July 11, 2014

Fixed

  • Obtain a year range array without prioviding a start date.

0.3.0

July 11, 2014

Added

  • Add Yardoc to Reporting module.
  • Allow reporting month and year time ranges without a start date.

Changed

  • Use ruby18 hash syntax for configuration example in README.

Removed

  • Removed DoubleEntry::describe and DoubleEntry::Line#description methods.

0.2.0

June 28, 2014

Added

  • 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

Changed

  • Move reporting classes into the DoubleEntry::Reporting namespace. Mark this module as @api private: internal use only.

0.1.0

June 20, 2014

Added

  • Library released as Open Source!