xirr 0.5.4 → 0.6.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.
- checksums.yaml +5 -5
- data/.gitignore +0 -0
- data/.ruby-version +1 -1
- data/.travis.yml +6 -3
- data/README.md +33 -22
- data/Rakefile +0 -1
- data/lib/xirr.rb +0 -2
- data/lib/xirr/base.rb +2 -3
- data/lib/xirr/bisection.rb +10 -20
- data/lib/xirr/cashflow.rb +2 -2
- data/lib/xirr/newton_method.rb +4 -3
- data/lib/xirr/transaction.rb +1 -1
- data/lib/xirr/version.rb +1 -1
- data/test/test_cashflow.rb +2 -13
- data/test/test_transactions.rb +3 -1
- data/xirr.gemspec +7 -6
- metadata +45 -25
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 9a197c0e93de7a844fed9d1ecd9b60b7f9c2ddab3dccc47a1e775e885ab1a898
         | 
| 4 | 
            +
              data.tar.gz: 6b85b7d8eae45afc6c80fc141f2b1899d225b22917225566ca1748cbac499bc2
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4950571f7b684a33a4cd09831d91d5a8b712a71bdc4d103c1f8ceaea741682664581ee29a0505258b5951a2eec1bf1ff71d87bd96c2045dc872b15c4fb128290
         | 
| 7 | 
            +
              data.tar.gz: 43d07f86b53b51d495d6642667f12cd41b41f24f850b77fef9c270a9998039d862ff1a479c675ca0f6047bdbff02f546ccd65c6d66e679b96ee3afb4c656014e
         | 
    
        data/.gitignore
    CHANGED
    
    | Binary file | 
    
        data/.ruby-version
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            2.6.2
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,5 @@ | |
| 1 1 | 
             
            # Xirr
         | 
| 2 | 
            -
            [](https://travis-ci.org/tubedude/xirr)[](https://coveralls.io/r/tubedude/xirr?branch=master)[](https://codeclimate.com/github/tubedude/xirr)[](https://travis-ci.org/tubedude/xirr)[](https://coveralls.io/r/tubedude/xirr?branch=master)[](https://codeclimate.com/github/tubedude/xirr)[](https://ebertapp.io/github/tubedude/xirr)
         | 
| 4 3 |  | 
| 5 4 | 
             
            This is a gem to calculate XIRR on Bisection Method or Newton Method.
         | 
| 6 5 |  | 
| @@ -20,24 +19,24 @@ Or install it yourself as: | |
| 20 19 |  | 
| 21 20 | 
             
            ## Usage
         | 
| 22 21 |  | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 22 | 
            +
            ```rb
         | 
| 23 | 
            +
            include Xirr
         | 
| 25 24 |  | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 25 | 
            +
            cf = Xirr::Cashflow.new
         | 
| 26 | 
            +
            cf << Xirr::Transaction.new(-1000,  date: '2014-01-01'.to_date)
         | 
| 27 | 
            +
            cf << Xirr::Transaction.new(-2000,  date: '2014-03-01'.to_date)
         | 
| 28 | 
            +
            cf << Xirr::Transaction.new( 4500, date: '2015-12-01'.to_date)
         | 
| 29 | 
            +
            cf.xirr
         | 
| 30 | 
            +
            # 0.25159694345042327 # [BigDecimal]
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            flow = []
         | 
| 33 | 
            +
            flow << Xirr::Transaction.new(-1000,  date: '2014-01-01'.to_date)
         | 
| 34 | 
            +
            flow << Xirr::Transaction.new(-2000,  date: '2014-03-01'.to_date)
         | 
| 35 | 
            +
            flow << Xirr::Transaction.new( 4500, date: '2015-12-01'.to_date)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            cf = Xirr::Cashflow.new(flow: flow)
         | 
| 38 | 
            +
            cf.xirr
         | 
| 39 | 
            +
            ```    
         | 
| 41 40 |  | 
| 42 41 | 
             
            ## Configuration
         | 
| 43 42 |  | 
| @@ -53,6 +52,17 @@ Or install it yourself as: | |
| 53 52 |  | 
| 54 53 | 
             
            http://rubydoc.info/github/tubedude/xirr/master/frames
         | 
| 55 54 |  | 
| 55 | 
            +
            ## Supported versions
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                Ruby:
         | 
| 58 | 
            +
                 - 2.2.1
         | 
| 59 | 
            +
                 - 2.3
         | 
| 60 | 
            +
                 - 2.4
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                ActiveSupport:
         | 
| 63 | 
            +
                 - 4.2
         | 
| 64 | 
            +
                 - 5
         | 
| 65 | 
            +
             | 
| 56 66 | 
             
            ## Thanks
         | 
| 57 67 |  | 
| 58 68 | 
             
            http://puneinvestor.wordpress.com/2013/10/01/calculate-xirr-in-ruby-bisection-method/
         | 
| @@ -62,6 +72,7 @@ https://github.com/wkranec/finance | |
| 62 72 |  | 
| 63 73 | 
             
            1. Fork it ( https://github.com/tubedude/xirr/fork )
         | 
| 64 74 | 
             
            2. Create your feature branch (`git checkout -b my-new-feature`)
         | 
| 65 | 
            -
            3.  | 
| 66 | 
            -
            4.  | 
| 67 | 
            -
            5.  | 
| 75 | 
            +
            3. Run specs (`rake default`)
         | 
| 76 | 
            +
            4. Commit your changes (`git commit -am 'Add some feature'`)
         | 
| 77 | 
            +
            5. Push to the branch (`git push origin my-new-feature`)
         | 
| 78 | 
            +
            6. Create a new Pull Request
         | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/lib/xirr.rb
    CHANGED
    
    | @@ -10,8 +10,6 @@ require 'xirr/newton_method' | |
| 10 10 | 
             
            # @abstract adds a {Xirr::Cashflow} and {Xirr::Transaction} classes to calculate IRR of irregular transactions.
         | 
| 11 11 | 
             
            # Calculates Xirr
         | 
| 12 12 | 
             
            module Xirr
         | 
| 13 | 
            -
             | 
| 14 13 | 
             
              autoload :Transaction, 'xirr/transaction'
         | 
| 15 14 | 
             
              autoload :Cashflow, 'xirr/cashflow'
         | 
| 16 | 
            -
             | 
| 17 15 | 
             
            end
         | 
    
        data/lib/xirr/base.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            module Xirr
         | 
| 2 | 
            -
             | 
| 3 3 | 
             
              #  Base module for XIRR calculation Methods
         | 
| 4 4 | 
             
              module Base
         | 
| 5 5 | 
             
                extend ActiveSupport::Concern
         | 
| @@ -24,7 +24,7 @@ module Xirr | |
| 24 24 | 
             
                # @return [BigDecimal]
         | 
| 25 25 | 
             
                def xnpv(rate)
         | 
| 26 26 | 
             
                  cf.inject(0) do |sum, t|
         | 
| 27 | 
            -
                    sum  | 
| 27 | 
            +
                    sum + (xnpv_c rate, t.amount, periods_from_start(t.date))
         | 
| 28 28 | 
             
                  end
         | 
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| @@ -35,6 +35,5 @@ module Xirr | |
| 35 35 | 
             
                      return amount / pow(1 + rate, period);
         | 
| 36 36 | 
             
                    }'
         | 
| 37 37 | 
             
                }
         | 
| 38 | 
            -
             | 
| 39 38 | 
             
              end
         | 
| 40 39 | 
             
            end
         | 
    
        data/lib/xirr/bisection.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            module Xirr
         | 
| 2 | 
            -
             | 
| 3 3 | 
             
              # Methods that will be included in Cashflow to calculate XIRR
         | 
| 4 4 | 
             
              class Bisection
         | 
| 5 5 | 
             
                include Base
         | 
| @@ -8,11 +8,11 @@ module Xirr | |
| 8 8 | 
             
                # @return [BigDecimal]
         | 
| 9 9 | 
             
                # @param midpoint [Float]
         | 
| 10 10 | 
             
                # An initial guess rate will override the {Cashflow#irr_guess}
         | 
| 11 | 
            -
                def xirr | 
| 11 | 
            +
                def xirr(midpoint, options)
         | 
| 12 12 |  | 
| 13 13 | 
             
                  # Initial values
         | 
| 14 | 
            -
                  left  = [BigDecimal | 
| 15 | 
            -
                  right = [BigDecimal | 
| 14 | 
            +
                  left  = [BigDecimal(-0.99999999, Xirr::PRECISION), cf.irr_guess].min
         | 
| 15 | 
            +
                  right = [BigDecimal(9.99999999, Xirr::PRECISION), cf.irr_guess + 1].max
         | 
| 16 16 | 
             
                  @original_right = right
         | 
| 17 17 | 
             
                  midpoint ||= cf.irr_guess
         | 
| 18 18 |  | 
| @@ -38,9 +38,10 @@ module Xirr | |
| 38 38 | 
             
                # @return [Array]
         | 
| 39 39 | 
             
                # Calculates the Bisections
         | 
| 40 40 | 
             
                def bisection(left, midpoint, right)
         | 
| 41 | 
            -
                  _left | 
| 41 | 
            +
                  _left = xnpv(left).positive?
         | 
| 42 | 
            +
                  _mid = xnpv(midpoint).positive?
         | 
| 42 43 | 
             
                  if _left && _mid
         | 
| 43 | 
            -
                    return left, left, left, true if  | 
| 44 | 
            +
                    return left, left, left, true if xnpv(right).positive? # Not Enough Precision in the left to find the IRR
         | 
| 44 45 | 
             
                  end
         | 
| 45 46 | 
             
                  if _left == _mid
         | 
| 46 47 | 
             
                    return midpoint, format_irr(midpoint, right), right, false # Result is to the Right
         | 
| @@ -49,13 +50,6 @@ module Xirr | |
| 49 50 | 
             
                  end
         | 
| 50 51 | 
             
                end
         | 
| 51 52 |  | 
| 52 | 
            -
                # @param midpoint [Float]
         | 
| 53 | 
            -
                # @return [Bolean]
         | 
| 54 | 
            -
                # Returns true if result is to the right ot the range
         | 
| 55 | 
            -
                def npv_positive?(midpoint)
         | 
| 56 | 
            -
                  xnpv(midpoint) > 0
         | 
| 57 | 
            -
                end
         | 
| 58 | 
            -
             | 
| 59 53 | 
             
                # @param left [Float]
         | 
| 60 54 | 
             
                # @param right [Float]
         | 
| 61 55 | 
             
                # @return [Float] IRR of the Cashflow
         | 
| @@ -78,19 +72,15 @@ module Xirr | |
| 78 72 | 
             
                def loop_rates(left, midpoint, right, iteration_limit)
         | 
| 79 73 | 
             
                  runs = 0
         | 
| 80 74 | 
             
                  while (right - left).abs > Xirr::EPS && runs < iteration_limit do
         | 
| 81 | 
            -
                    runs | 
| 75 | 
            +
                    runs += 1
         | 
| 82 76 | 
             
                    left, midpoint, right, should_stop = bisection(left, midpoint, right)
         | 
| 83 77 | 
             
                    break if should_stop
         | 
| 84 78 | 
             
                    if right_limit_reached?(midpoint)
         | 
| 85 | 
            -
                      right            | 
| 86 | 
            -
                      @original_right  | 
| 79 | 
            +
                      right           *= 2
         | 
| 80 | 
            +
                      @original_right *= 2
         | 
| 87 81 | 
             
                    end
         | 
| 88 82 | 
             
                  end
         | 
| 89 83 | 
             
                  return midpoint, runs
         | 
| 90 84 | 
             
                end
         | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 85 | 
             
              end
         | 
| 94 | 
            -
             | 
| 95 86 | 
             
            end
         | 
| 96 | 
            -
             | 
    
        data/lib/xirr/cashflow.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            module Xirr
         | 
| 2 | 
            -
             | 
| 3 3 | 
             
              # Expands [Array] to store a set of transactions which will be used to calculate the XIRR
         | 
| 4 4 | 
             
              # @note A Cashflow should consist of at least two transactions, one positive and one negative.
         | 
| 5 5 | 
             
              class Cashflow < Array
         | 
| @@ -59,7 +59,7 @@ module Xirr | |
| 59 59 | 
             
                  method, options = process_options(method, options)
         | 
| 60 60 | 
             
                  if invalid?
         | 
| 61 61 | 
             
                    raise ArgumentError, invalid_message if options[:raise_exception]
         | 
| 62 | 
            -
                    BigDecimal | 
| 62 | 
            +
                    BigDecimal(0, Xirr::PRECISION)
         | 
| 63 63 | 
             
                  else
         | 
| 64 64 | 
             
                    xirr = choose_(method).send :xirr, guess, options
         | 
| 65 65 | 
             
                    xirr = choose_(other_calculation_method(method)).send(:xirr, guess, options) if (xirr.nil? || xirr.nan?) && fallback
         | 
    
        data/lib/xirr/newton_method.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            require 'bigdecimal/newton'
         | 
| 2 3 | 
             
            include Newton
         | 
| 3 4 |  | 
| @@ -20,7 +21,7 @@ module Xirr | |
| 20 21 | 
             
                  # define default values
         | 
| 21 22 | 
             
                  values.each do |key, value|
         | 
| 22 23 | 
             
                    define_method key do
         | 
| 23 | 
            -
                      BigDecimal | 
| 24 | 
            +
                      BigDecimal(value, Xirr::PRECISION)
         | 
| 24 25 | 
             
                    end
         | 
| 25 26 | 
             
                  end
         | 
| 26 27 |  | 
| @@ -35,8 +36,8 @@ module Xirr | |
| 35 36 | 
             
                  # Necessary for #nlsolve
         | 
| 36 37 | 
             
                  # @param x [BigDecimal]
         | 
| 37 38 | 
             
                  def values(x)
         | 
| 38 | 
            -
                    value = @transactions.send(@function, BigDecimal | 
| 39 | 
            -
                    [BigDecimal | 
| 39 | 
            +
                    value = @transactions.send(@function, BigDecimal(x[0].to_s, Xirr::PRECISION))
         | 
| 40 | 
            +
                    [BigDecimal(value.to_s, Xirr::PRECISION)]
         | 
| 40 41 | 
             
                  end
         | 
| 41 42 | 
             
                end
         | 
| 42 43 |  | 
    
        data/lib/xirr/transaction.rb
    CHANGED
    
    
    
        data/lib/xirr/version.rb
    CHANGED
    
    
    
        data/test/test_cashflow.rb
    CHANGED
    
    | @@ -1,7 +1,6 @@ | |
| 1 1 | 
             
            require_relative 'test_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe 'Cashflows' do
         | 
| 4 | 
            -
             | 
| 5 4 | 
             
              describe 'of an ok investment' do
         | 
| 6 5 | 
             
                before(:all) do
         | 
| 7 6 | 
             
                  @cf = Cashflow.new
         | 
| @@ -39,7 +38,6 @@ describe 'Cashflows' do | |
| 39 38 | 
             
                end
         | 
| 40 39 | 
             
              end
         | 
| 41 40 |  | 
| 42 | 
            -
             | 
| 43 41 | 
             
              describe 'of an inverted ok investment' do
         | 
| 44 42 | 
             
                before(:all) do
         | 
| 45 43 | 
             
                  @cf = Cashflow.new
         | 
| @@ -136,10 +134,9 @@ describe 'Cashflows' do | |
| 136 134 | 
             
                end
         | 
| 137 135 |  | 
| 138 136 | 
             
                it 'returns 0 instead of exception ' do
         | 
| 139 | 
            -
                  assert_equal BigDecimal | 
| 137 | 
            +
                  assert_equal BigDecimal(0, 6), @cf.xirr
         | 
| 140 138 | 
             
                end
         | 
| 141 139 |  | 
| 142 | 
            -
             | 
| 143 140 | 
             
                it 'with a wrong method is invalid' do
         | 
| 144 141 | 
             
                  assert_raises(ArgumentError) { @cf.xirr raise_exception: true, method: :no_method }
         | 
| 145 142 | 
             
                end
         | 
| @@ -151,7 +148,6 @@ describe 'Cashflows' do | |
| 151 148 | 
             
                it 'raises error when xirr is called' do
         | 
| 152 149 | 
             
                  assert true, !@cf.irr_guess
         | 
| 153 150 | 
             
                end
         | 
| 154 | 
            -
             | 
| 155 151 | 
             
              end
         | 
| 156 152 |  | 
| 157 153 | 
             
              describe 'an all-positive Cashflow' do
         | 
| @@ -194,7 +190,6 @@ describe 'Cashflows' do | |
| 194 190 | 
             
                it 'has an educated guess' do
         | 
| 195 191 | 
             
                  assert_equal -0.022, @cf.irr_guess
         | 
| 196 192 | 
             
                end
         | 
| 197 | 
            -
             | 
| 198 193 | 
             
              end
         | 
| 199 194 |  | 
| 200 195 | 
             
              describe 'of a long investment' do
         | 
| @@ -213,7 +208,6 @@ describe 'Cashflows' do | |
| 213 208 | 
             
                it 'has an educated guess' do
         | 
| 214 209 | 
             
                  assert_equal 0.112, @cf.irr_guess.round(6)
         | 
| 215 210 | 
             
                end
         | 
| 216 | 
            -
             | 
| 217 211 | 
             
              end
         | 
| 218 212 |  | 
| 219 213 | 
             
              describe 'reapeated cashflow' do
         | 
| @@ -232,7 +226,6 @@ describe 'Cashflows' do | |
| 232 226 | 
             
                it 'sums all transactions' do
         | 
| 233 227 | 
             
                  assert_equal -3000.0, @cf.compact_cf.map(&:amount).inject(&:+)
         | 
| 234 228 | 
             
                end
         | 
| 235 | 
            -
             | 
| 236 229 | 
             
              end
         | 
| 237 230 |  | 
| 238 231 | 
             
              describe 'of a real case' do
         | 
| @@ -278,7 +271,6 @@ describe 'Cashflows' do | |
| 278 271 | 
             
                it 'is a long and bad investment and newton generates an error' do
         | 
| 279 272 | 
             
                  assert_equal '-1.0'.to_f, @cf.xirr #(method: :newton_method)
         | 
| 280 273 | 
             
                end
         | 
| 281 | 
            -
             | 
| 282 274 | 
             
              end
         | 
| 283 275 |  | 
| 284 276 | 
             
              describe 'xichen27' do
         | 
| @@ -290,8 +282,8 @@ describe 'Cashflows' do | |
| 290 282 | 
             
                  assert_equal '-0.996814607'.to_f.round(3), cf.xirr.to_f.round(3)
         | 
| 291 283 | 
             
                end
         | 
| 292 284 | 
             
              end
         | 
| 293 | 
            -
              describe 'marano' do
         | 
| 294 285 |  | 
| 286 | 
            +
              describe 'marano' do
         | 
| 295 287 | 
             
                it 'it matchs Excel' do
         | 
| 296 288 | 
             
                  cf = Cashflow.new
         | 
| 297 289 | 
             
                  cf << Transaction.new(900.0, date: '2014-11-07'.to_date)
         | 
| @@ -301,7 +293,6 @@ describe 'Cashflows' do | |
| 301 293 | 
             
              end
         | 
| 302 294 |  | 
| 303 295 | 
             
              describe 'period' do
         | 
| 304 | 
            -
             | 
| 305 296 | 
             
                it 'has zero for years of investment' do
         | 
| 306 297 | 
             
                  cf = Cashflow.new flow: [Transaction.new(105187.06, date: '2011-12-07'.to_date), Transaction.new(-105187.06 * 1.0697668105671994, date: '2011-12-07'.to_date)]
         | 
| 307 298 | 
             
                  assert_equal 0.0, cf.irr_guess
         | 
| @@ -317,7 +308,5 @@ describe 'Cashflows' do | |
| 317 308 | 
             
                  cf = Cashflow.new period: 100, flow: [Transaction.new(-1000, date: Date.new(1957, 1, 1)), Transaction.new(390000, date: Date.new(2013, 1, 1))]
         | 
| 318 309 | 
             
                  assert_equal 0.112339, cf.xirr(period: 365.0)
         | 
| 319 310 | 
             
                end
         | 
| 320 | 
            -
             | 
| 321 311 | 
             
              end
         | 
| 322 | 
            -
             | 
| 323 312 | 
             
            end
         | 
    
        data/test/test_transactions.rb
    CHANGED
    
    | @@ -4,14 +4,16 @@ describe 'Transaction' do | |
| 4 4 | 
             
              before(:all) do
         | 
| 5 5 | 
             
                @t = Transaction.new(1000, date: Date.today)
         | 
| 6 6 | 
             
              end
         | 
| 7 | 
            +
             | 
| 7 8 | 
             
              it 'converts amount to float' do
         | 
| 8 9 | 
             
                assert true, @t.amount.kind_of?(Float)
         | 
| 9 10 | 
             
              end
         | 
| 11 | 
            +
             | 
| 10 12 | 
             
              it 'retreives the date' do
         | 
| 11 13 | 
             
                assert_equal Date.today, @t.date
         | 
| 12 14 | 
             
              end
         | 
| 15 | 
            +
             | 
| 13 16 | 
             
              it 'has inspect' do
         | 
| 14 17 | 
             
                assert_equal "T(1000.0,#{Date.today})", @t.inspect
         | 
| 15 18 | 
             
              end
         | 
| 16 | 
            -
             | 
| 17 19 | 
             
            end
         | 
    
        data/xirr.gemspec
    CHANGED
    
    | @@ -18,13 +18,14 @@ Gem::Specification.new do |spec| | |
| 18 18 | 
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 19 19 | 
             
              spec.require_paths = ['lib']
         | 
| 20 20 |  | 
| 21 | 
            -
              spec. | 
| 22 | 
            -
              spec.add_development_dependency 'rake', '~> 10'
         | 
| 21 | 
            +
              spec.required_ruby_version = '>=2.2.2'
         | 
| 23 22 |  | 
| 24 | 
            -
              spec. | 
| 25 | 
            -
              spec.add_dependency 'activesupport', '~> 4'
         | 
| 23 | 
            +
              spec.add_dependency 'activesupport', '>= 4.1', '<= 5.3'
         | 
| 26 24 | 
             
              spec.add_dependency 'RubyInline', '~> 3'
         | 
| 27 | 
            -
              spec.add_development_dependency 'minitest', '~> 5.4'
         | 
| 28 | 
            -
              spec.add_development_dependency 'coveralls', '~> 0'
         | 
| 29 25 |  | 
| 26 | 
            +
              spec.add_development_dependency 'activesupport', '~> 4.1.0'
         | 
| 27 | 
            +
              spec.add_development_dependency 'minitest', '~> 5.11'
         | 
| 28 | 
            +
              spec.add_development_dependency 'coveralls', '~> 0'
         | 
| 29 | 
            +
              spec.add_development_dependency 'bundler', '~> 1.6'
         | 
| 30 | 
            +
              spec.add_development_dependency 'rake', '~> 10'
         | 
| 30 31 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,99 +1,119 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: xirr
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - tubedude
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2019-06-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              name:  | 
| 14 | 
            +
              name: activesupport
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '4.1'
         | 
| 20 | 
            +
                - - "<="
         | 
| 21 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            +
                    version: '5.3'
         | 
| 23 | 
            +
              type: :runtime
         | 
| 24 | 
            +
              prerelease: false
         | 
| 25 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 | 
            +
                requirements:
         | 
| 27 | 
            +
                - - ">="
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            +
                    version: '4.1'
         | 
| 30 | 
            +
                - - "<="
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: '5.3'
         | 
| 33 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 34 | 
            +
              name: RubyInline
         | 
| 15 35 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 36 | 
             
                requirements:
         | 
| 17 37 | 
             
                - - "~>"
         | 
| 18 38 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: ' | 
| 20 | 
            -
              type: : | 
| 39 | 
            +
                    version: '3'
         | 
| 40 | 
            +
              type: :runtime
         | 
| 21 41 | 
             
              prerelease: false
         | 
| 22 42 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 43 | 
             
                requirements:
         | 
| 24 44 | 
             
                - - "~>"
         | 
| 25 45 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: ' | 
| 46 | 
            +
                    version: '3'
         | 
| 27 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              name:  | 
| 48 | 
            +
              name: activesupport
         | 
| 29 49 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 50 | 
             
                requirements:
         | 
| 31 51 | 
             
                - - "~>"
         | 
| 32 52 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 53 | 
            +
                    version: 4.1.0
         | 
| 34 54 | 
             
              type: :development
         | 
| 35 55 | 
             
              prerelease: false
         | 
| 36 56 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 57 | 
             
                requirements:
         | 
| 38 58 | 
             
                - - "~>"
         | 
| 39 59 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version:  | 
| 60 | 
            +
                    version: 4.1.0
         | 
| 41 61 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            -
              name:  | 
| 62 | 
            +
              name: minitest
         | 
| 43 63 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 64 | 
             
                requirements:
         | 
| 45 65 | 
             
                - - "~>"
         | 
| 46 66 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: ' | 
| 48 | 
            -
              type: : | 
| 67 | 
            +
                    version: '5.11'
         | 
| 68 | 
            +
              type: :development
         | 
| 49 69 | 
             
              prerelease: false
         | 
| 50 70 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 71 | 
             
                requirements:
         | 
| 52 72 | 
             
                - - "~>"
         | 
| 53 73 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: ' | 
| 74 | 
            +
                    version: '5.11'
         | 
| 55 75 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name:  | 
| 76 | 
            +
              name: coveralls
         | 
| 57 77 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 78 | 
             
                requirements:
         | 
| 59 79 | 
             
                - - "~>"
         | 
| 60 80 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: ' | 
| 62 | 
            -
              type: : | 
| 81 | 
            +
                    version: '0'
         | 
| 82 | 
            +
              type: :development
         | 
| 63 83 | 
             
              prerelease: false
         | 
| 64 84 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 85 | 
             
                requirements:
         | 
| 66 86 | 
             
                - - "~>"
         | 
| 67 87 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version: ' | 
| 88 | 
            +
                    version: '0'
         | 
| 69 89 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            -
              name:  | 
| 90 | 
            +
              name: bundler
         | 
| 71 91 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 92 | 
             
                requirements:
         | 
| 73 93 | 
             
                - - "~>"
         | 
| 74 94 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: ' | 
| 95 | 
            +
                    version: '1.6'
         | 
| 76 96 | 
             
              type: :development
         | 
| 77 97 | 
             
              prerelease: false
         | 
| 78 98 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 99 | 
             
                requirements:
         | 
| 80 100 | 
             
                - - "~>"
         | 
| 81 101 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: ' | 
| 102 | 
            +
                    version: '1.6'
         | 
| 83 103 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            -
              name:  | 
| 104 | 
            +
              name: rake
         | 
| 85 105 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 106 | 
             
                requirements:
         | 
| 87 107 | 
             
                - - "~>"
         | 
| 88 108 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version: ' | 
| 109 | 
            +
                    version: '10'
         | 
| 90 110 | 
             
              type: :development
         | 
| 91 111 | 
             
              prerelease: false
         | 
| 92 112 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 113 | 
             
                requirements:
         | 
| 94 114 | 
             
                - - "~>"
         | 
| 95 115 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version: ' | 
| 116 | 
            +
                    version: '10'
         | 
| 97 117 | 
             
            description: Calculates IRR of a Cashflow, similar to Excel's, XIRR formula. It defaults
         | 
| 98 118 | 
             
              to Newton Method, but will calculate Bisection as well.
         | 
| 99 119 | 
             
            email:
         | 
| @@ -136,7 +156,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 136 156 | 
             
              requirements:
         | 
| 137 157 | 
             
              - - ">="
         | 
| 138 158 | 
             
                - !ruby/object:Gem::Version
         | 
| 139 | 
            -
                  version:  | 
| 159 | 
            +
                  version: 2.2.2
         | 
| 140 160 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 141 161 | 
             
              requirements:
         | 
| 142 162 | 
             
              - - ">="
         | 
| @@ -144,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 144 164 | 
             
                  version: '0'
         | 
| 145 165 | 
             
            requirements: []
         | 
| 146 166 | 
             
            rubyforge_project: 
         | 
| 147 | 
            -
            rubygems_version: 2. | 
| 167 | 
            +
            rubygems_version: 2.7.7
         | 
| 148 168 | 
             
            signing_key: 
         | 
| 149 169 | 
             
            specification_version: 4
         | 
| 150 170 | 
             
            summary: Calculates XIRR (Bisection and Newton method) of a cashflow
         |