finance_math 1.0.2 → 1.0.6
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/.circleci/config.yml +61 -0
 - data/.gitlab-ci.yml +15 -0
 - data/.tool-versions +1 -0
 - data/LICENSE.txt +1 -1
 - data/README.md +26 -14
 - data/finance_math.gemspec +5 -5
 - data/lib/finance_math/loan.rb +19 -17
 - data/lib/finance_math.rb +0 -1
 - data/lib/version.rb +1 -1
 - metadata +17 -15
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 2 
     | 
    
         
            +
            SHA256:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 96f21dff1ebfa8772bbe2a251e2c24d55c6430ec8e9fc39ca6175aced2aa0e8e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 5e45af7a4f350de830406dd7caa762c5590cbf7e2f4d70e859a810926acd5429
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 305a7493c91b7a463d8d6543e4607f14dd403082fc044418f5ceac7b25ef9b911f643ac345e734f7b5ce58461ae6a46c5662209d62ba9a6052c1e48f0bfa3db4
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1e3fbdba12205a00495cdc030c8907afbdc57092b1b0be2b6c5ebbe5cead0091c3b93f16e01fa65ded5e6a7c21930e463d660fe2dc931971115c13f47f5ce4ec
         
     | 
| 
         @@ -0,0 +1,61 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Ruby CircleCI 2.0 configuration file
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Check https://circleci.com/docs/2.0/language-ruby/ for more details
         
     | 
| 
      
 4 
     | 
    
         
            +
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            version: 2
         
     | 
| 
      
 6 
     | 
    
         
            +
            jobs:
         
     | 
| 
      
 7 
     | 
    
         
            +
              build:
         
     | 
| 
      
 8 
     | 
    
         
            +
                docker:
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # specify the version you desire here
         
     | 
| 
      
 10 
     | 
    
         
            +
                   - image: circleci/ruby:2.4.1-node-browsers
         
     | 
| 
      
 11 
     | 
    
         
            +
                  
         
     | 
| 
      
 12 
     | 
    
         
            +
                  # Specify service dependencies here if necessary
         
     | 
| 
      
 13 
     | 
    
         
            +
                  # CircleCI maintains a library of pre-built images
         
     | 
| 
      
 14 
     | 
    
         
            +
                  # documented at https://circleci.com/docs/2.0/circleci-images/
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # - image: circleci/postgres:9.4
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                working_directory: ~/repo
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                steps:
         
     | 
| 
      
 20 
     | 
    
         
            +
                  - checkout
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  # Download and cache dependencies
         
     | 
| 
      
 23 
     | 
    
         
            +
                  - restore_cache:
         
     | 
| 
      
 24 
     | 
    
         
            +
                      keys:
         
     | 
| 
      
 25 
     | 
    
         
            +
                      - v1-dependencies-{{ checksum "Gemfile.lock" }}
         
     | 
| 
      
 26 
     | 
    
         
            +
                      # fallback to using the latest cache if no exact match is found
         
     | 
| 
      
 27 
     | 
    
         
            +
                      - v1-dependencies-
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  - run:
         
     | 
| 
      
 30 
     | 
    
         
            +
                      name: install dependencies
         
     | 
| 
      
 31 
     | 
    
         
            +
                      command: |
         
     | 
| 
      
 32 
     | 
    
         
            +
                        bundle install --jobs=4 --retry=3 --path vendor/bundle
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  - save_cache:
         
     | 
| 
      
 35 
     | 
    
         
            +
                      paths:
         
     | 
| 
      
 36 
     | 
    
         
            +
                        - ./vendor/bundle
         
     | 
| 
      
 37 
     | 
    
         
            +
                      key: v1-dependencies-{{ checksum "Gemfile.lock" }}
         
     | 
| 
      
 38 
     | 
    
         
            +
                    
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # Database setup
         
     | 
| 
      
 40 
     | 
    
         
            +
                  - run: bundle exec rake db:create
         
     | 
| 
      
 41 
     | 
    
         
            +
                  - run: bundle exec rake db:schema:load
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  # run tests!
         
     | 
| 
      
 44 
     | 
    
         
            +
                  - run:
         
     | 
| 
      
 45 
     | 
    
         
            +
                      name: run tests
         
     | 
| 
      
 46 
     | 
    
         
            +
                      command: |
         
     | 
| 
      
 47 
     | 
    
         
            +
                        mkdir /tmp/test-results
         
     | 
| 
      
 48 
     | 
    
         
            +
                        TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
         
     | 
| 
      
 49 
     | 
    
         
            +
                        
         
     | 
| 
      
 50 
     | 
    
         
            +
                        bundle exec rspec --format progress \
         
     | 
| 
      
 51 
     | 
    
         
            +
                                        --format RspecJunitFormatter \
         
     | 
| 
      
 52 
     | 
    
         
            +
                                        --out /tmp/test-results/rspec.xml \
         
     | 
| 
      
 53 
     | 
    
         
            +
                                        --format progress \
         
     | 
| 
      
 54 
     | 
    
         
            +
                                        $TEST_FILES
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  # collect reports
         
     | 
| 
      
 57 
     | 
    
         
            +
                  - store_test_results:
         
     | 
| 
      
 58 
     | 
    
         
            +
                      path: /tmp/test-results
         
     | 
| 
      
 59 
     | 
    
         
            +
                  - store_artifacts:
         
     | 
| 
      
 60 
     | 
    
         
            +
                      path: /tmp/test-results
         
     | 
| 
      
 61 
     | 
    
         
            +
                      destination: test-results
         
     | 
    
        data/.gitlab-ci.yml
    ADDED
    
    | 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            before_script:
         
     | 
| 
      
 2 
     | 
    
         
            +
              - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
         
     | 
| 
      
 3 
     | 
    
         
            +
              - ruby -v
         
     | 
| 
      
 4 
     | 
    
         
            +
              - which ruby
         
     | 
| 
      
 5 
     | 
    
         
            +
              - gem install bundler --no-ri --no-rdoc
         
     | 
| 
      
 6 
     | 
    
         
            +
              - bundle install --jobs $(nproc)  "${FLAGS[@]}"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            rspec:
         
     | 
| 
      
 9 
     | 
    
         
            +
              script:
         
     | 
| 
      
 10 
     | 
    
         
            +
                - bundle exec rspec
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            rubocop:
         
     | 
| 
      
 13 
     | 
    
         
            +
              script:
         
     | 
| 
      
 14 
     | 
    
         
            +
                - bundle exec rubocop
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
    
        data/.tool-versions
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ruby 3.3.0
         
     | 
    
        data/LICENSE.txt
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,11 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            [](http://badge.fury.io/rb/finance_math)
         
     | 
| 
       2 
     | 
    
         
            -
            [](https://semaphoreapp.com/kolosek/finance_math)
         
     | 
| 
       3 
2 
     | 
    
         
             
            [](https://codeclimate.com/github/kolosek/finance_math)
         
     | 
| 
       4 
3 
     | 
    
         | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
5 
     | 
    
         
             
            ## What is FinanceMath?
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
            FinanceMath is a Ruby library for mapping Loan based Exel functions. It deals with problem of calculating the PMT and APR functions. It implements advanced usage, taking into account bank fees, fee for for each payment and currency protection (if currency other than $ USD). Highly precise with high speed of execution. 
     | 
| 
      
 7 
     | 
    
         
            +
            FinanceMath is a Ruby library for mapping Loan based Exel functions. It deals with problem of calculating the PMT and APR functions. It implements advanced usage, taking into account bank fees, fee for for each payment and currency protection (if currency other than $ USD). Highly precise with high speed of execution.
         
     | 
| 
       9 
8 
     | 
    
         | 
| 
       10 
9 
     | 
    
         
             
            ## Installation
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
         @@ -19,6 +18,10 @@ If you're using Bundler, add the gem to Gemfile. 
     | 
|
| 
       19 
18 
     | 
    
         | 
| 
       20 
19 
     | 
    
         
             
            Run `bundle install`.
         
     | 
| 
       21 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
            ## Running tests
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                bundle exec rspec spec/
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       22 
25 
     | 
    
         
             
            ## Basic Usage
         
     | 
| 
       23 
26 
     | 
    
         | 
| 
       24 
27 
     | 
    
         
             
            Create an instance, and pass parameters for nominal annual rate, duration (in months), and amount of loan.
         
     | 
| 
         @@ -26,47 +29,47 @@ Defaults are structure_fee = 5, currency protection = 3, so please update if you 
     | 
|
| 
       26 
29 
     | 
    
         | 
| 
       27 
30 
     | 
    
         
             
            ```ruby
         
     | 
| 
       28 
31 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
            Loan.new(nominal_rate: 10.5, duration: 12, amount: 15000)
         
     | 
| 
      
 32 
     | 
    
         
            +
            FinanceMath::Loan.new(nominal_rate: 10.5, duration: 12, amount: 15000)
         
     | 
| 
       30 
33 
     | 
    
         
             
            ```
         
     | 
| 
       31 
34 
     | 
    
         | 
| 
       32 
35 
     | 
    
         
             
            ## Advanced Usage
         
     | 
| 
       33 
36 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
            Create an instance, and pass parameters for nominal annual rate, duration (in months), and amount of loan, and additional values such as bank fee, currency protection, and fee for each monthly payment. 
     | 
| 
      
 37 
     | 
    
         
            +
            Create an instance, and pass parameters for nominal annual rate, duration (in months), and amount of loan, and additional values such as bank fee, currency protection, and fee for each monthly payment.
         
     | 
| 
       35 
38 
     | 
    
         | 
| 
       36 
39 
     | 
    
         
             
            Defaults are structure_fee = 5, currency protection = 3, so please update if you need other values.
         
     | 
| 
       37 
40 
     | 
    
         | 
| 
       38 
41 
     | 
    
         
             
            ```ruby
         
     | 
| 
       39 
42 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
            Loan.new(nominal_rate: 10.5, duration: 12, amount: 15000, structure_fee: 5.1, currency_protection: 2.75, fee: 25)
         
     | 
| 
      
 43 
     | 
    
         
            +
            FinanceMath::Loan.new(nominal_rate: 10.5, duration: 12, amount: 15000, structure_fee: 5.1, currency_protection: 2.75, fee: 25)
         
     | 
| 
       41 
44 
     | 
    
         
             
            ```
         
     | 
| 
       42 
45 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
            ## Functions 
     | 
| 
      
 46 
     | 
    
         
            +
            ## Functions
         
     | 
| 
       44 
47 
     | 
    
         | 
| 
       45 
48 
     | 
    
         
             
            This is the list of available functions.
         
     | 
| 
       46 
49 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
            ### Loan.pmt
         
     | 
| 
      
 50 
     | 
    
         
            +
            ### FinanceMath::Loan.pmt
         
     | 
| 
       48 
51 
     | 
    
         | 
| 
       49 
52 
     | 
    
         
             
            Calculates the periodic payment for an annuity investment based on constant-amount periodic payments and a constant interest rate.
         
     | 
| 
       50 
53 
     | 
    
         | 
| 
       51 
54 
     | 
    
         
             
            ```ruby
         
     | 
| 
       52 
55 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
            loan = Loan.new(nominal_rate: 10, duration: 12, amount: 1000)
         
     | 
| 
      
 56 
     | 
    
         
            +
            loan = FinanceMath::Loan.new(nominal_rate: 10, duration: 12, amount: 1000)
         
     | 
| 
       54 
57 
     | 
    
         
             
            loan.pmt
         
     | 
| 
       55 
58 
     | 
    
         
             
            # 87.9158872300099
         
     | 
| 
       56 
59 
     | 
    
         | 
| 
       57 
60 
     | 
    
         
             
            ```
         
     | 
| 
       58 
61 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
            ### Loan.apr
         
     | 
| 
      
 62 
     | 
    
         
            +
            ### FinanceMath::Loan.apr
         
     | 
| 
       60 
63 
     | 
    
         | 
| 
       61 
64 
     | 
    
         
             
            Calculates the Annual Percentage Rate.
         
     | 
| 
       62 
65 
     | 
    
         | 
| 
       63 
66 
     | 
    
         
             
            ```ruby
         
     | 
| 
       64 
67 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
            loan = Loan.new(nominal_rate: 13, duration: 12, amount: 10000)
         
     | 
| 
      
 68 
     | 
    
         
            +
            loan = FinanceMath::Loan.new(nominal_rate: 13, duration: 12, amount: 10000)
         
     | 
| 
       66 
69 
     | 
    
         
             
            loan.apr
         
     | 
| 
       67 
70 
     | 
    
         
             
            #29.179538647635006
         
     | 
| 
       68 
71 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
            loan = Loan.new(nominal_rate: 15, duration: 36, amount: 10000, structure_fee: 5, currency_protection: 3, fee: 10)
         
     | 
| 
      
 72 
     | 
    
         
            +
            loan = FinanceMath::Loan.new(nominal_rate: 15, duration: 36, amount: 10000, structure_fee: 5, currency_protection: 3, fee: 10)
         
     | 
| 
       70 
73 
     | 
    
         
             
            loan.apr
         
     | 
| 
       71 
74 
     | 
    
         
             
            #23.964418264624054
         
     | 
| 
       72 
75 
     | 
    
         | 
| 
         @@ -84,11 +87,20 @@ loan.apr 
     | 
|
| 
       84 
87 
     | 
    
         | 
| 
       85 
88 
     | 
    
         
             
            Please cover with tests your pull requests
         
     | 
| 
       86 
89 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
            ##  
     | 
| 
      
 90 
     | 
    
         
            +
            ## Ruby versions
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
               Currently supported version of 2.x and 3.x
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            ## Credits
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            Finance Math is maintained and sponsored by
         
     | 
| 
      
 97 
     | 
    
         
            +
            [Kolosek] (http://kolosek.com).
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            
         
     | 
| 
       88 
100 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
      
 101 
     | 
    
         
            +
            Initially developed by Nesha Zoric
         
     | 
| 
       90 
102 
     | 
    
         | 
| 
       91 
     | 
    
         
            -
            ###Follow up @ 
     | 
| 
      
 103 
     | 
    
         
            +
            ###Follow up @kolosek
         
     | 
| 
       92 
104 
     | 
    
         | 
| 
       93 
105 
     | 
    
         | 
| 
       94 
106 
     | 
    
         
             
            ## License
         
     | 
    
        data/finance_math.gemspec
    CHANGED
    
    | 
         @@ -6,9 +6,9 @@ require 'version' 
     | 
|
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |spec|
         
     | 
| 
       7 
7 
     | 
    
         
             
              spec.name          = "finance_math"
         
     | 
| 
       8 
8 
     | 
    
         
             
              spec.version       = FinanceMath::VERSION
         
     | 
| 
       9 
     | 
    
         
            -
              spec.authors       = [" 
     | 
| 
       10 
     | 
    
         
            -
              spec.email         = [" 
     | 
| 
       11 
     | 
    
         
            -
              spec.summary       = %q{ 
     | 
| 
      
 9 
     | 
    
         
            +
              spec.authors       = ["Nesha Zoric"]
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.email         = ["nesha@kolosek.com"]
         
     | 
| 
      
 11 
     | 
    
         
            +
              spec.summary       = %q{Most accurate APR and PMT caluclator for Ruby.}
         
     | 
| 
       12 
12 
     | 
    
         
             
              spec.description   = %q{Implementation of Loan/Mortgage functions in Ruby language. APR function and PMT function. In calculations it includes implementation of bank fee, marketplace fee, fees for each payment to provide the most precise calculation at very high speed. }
         
     | 
| 
       13 
13 
     | 
    
         
             
              spec.homepage      = "http://kolosek.com"
         
     | 
| 
       14 
14 
     | 
    
         
             
              spec.license       = "MIT"
         
     | 
| 
         @@ -19,6 +19,6 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       19 
19 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 1.6"
         
     | 
| 
       22 
     | 
    
         
            -
              spec.add_development_dependency "rake"
         
     | 
| 
       23 
     | 
    
         
            -
              spec.add_development_dependency 'rspec'
         
     | 
| 
      
 22 
     | 
    
         
            +
              spec.add_development_dependency "rake", "~> 2.0"
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_development_dependency 'rspec', "~> 2.0"
         
     | 
| 
       24 
24 
     | 
    
         
             
            end
         
     | 
    
        data/lib/finance_math/loan.rb
    CHANGED
    
    | 
         @@ -13,18 +13,18 @@ module FinanceMath 
     | 
|
| 
       13 
13 
     | 
    
         
             
                # @return [Float] the nominal annual rate
         
     | 
| 
       14 
14 
     | 
    
         
             
                # @api public
         
     | 
| 
       15 
15 
     | 
    
         
             
                attr_accessor :nominal_rate
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       17 
17 
     | 
    
         
             
                # @return [DecNum] the monthly rate
         
     | 
| 
       18 
18 
     | 
    
         
             
                # @api public
         
     | 
| 
       19 
19 
     | 
    
         
             
                attr_reader :monthly_rate
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                # @return [DecNum] the currency protection
         
     | 
| 
       22 
22 
     | 
    
         
             
                # @api public
         
     | 
| 
       23 
     | 
    
         
            -
                attr_reader :currency_protection 
     | 
| 
      
 23 
     | 
    
         
            +
                attr_reader :currency_protection
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                # @return [DecNum] the fee for the bank/market
         
     | 
| 
       26 
26 
     | 
    
         
             
                # @api public
         
     | 
| 
       27 
     | 
    
         
            -
                attr_reader :structure_fee 
     | 
| 
      
 27 
     | 
    
         
            +
                attr_reader :structure_fee
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                # @return [DecNum] P principal
         
     | 
| 
       30 
30 
     | 
    
         
             
                # @api public
         
     | 
| 
         @@ -42,18 +42,11 @@ module FinanceMath 
     | 
|
| 
       42 
42 
     | 
    
         
             
                # @param [Float] structure fee - fee for the market in percentages
         
     | 
| 
       43 
43 
     | 
    
         
             
                # @param [Float] currency protection - Protection for currency changes - usually 3%, default to 0%
         
     | 
| 
       44 
44 
     | 
    
         
             
                # @example create a 10.5% Nominal rate
         
     | 
| 
       45 
     | 
    
         
            -
                #   Loan.new(10.5, 12, 1000)
         
     | 
| 
       46 
45 
     | 
    
         
             
                # @see http://en.wikipedia.org/wiki/Nominal_interest_rate
         
     | 
| 
       47 
46 
     | 
    
         
             
                # @api public
         
     | 
| 
       48 
47 
     | 
    
         | 
| 
       49 
48 
     | 
    
         
             
                def initialize(options = {})
         
     | 
| 
       50 
     | 
    
         
            -
                   
     | 
| 
       51 
     | 
    
         
            -
                  @duration = options.fetch(:duration).to_f
         
     | 
| 
       52 
     | 
    
         
            -
                  @amount = options.fetch(:amount).to_f
         
     | 
| 
       53 
     | 
    
         
            -
                  @structure_fee = options.fetch(:structure_fee, 5).to_f
         
     | 
| 
       54 
     | 
    
         
            -
                  @currency_protection = options.fetch(:currency_protection, 3).to_f
         
     | 
| 
       55 
     | 
    
         
            -
                  @fee = options.fetch(:fee, 0).to_f
         
     | 
| 
       56 
     | 
    
         
            -
                  @nominal_rate, @amount, @duration, @structure_fee, @currency_protection, @fee = nominal_rate.to_f, amount, duration, structure_fee.to_f, currency_protection.to_f, fee.to_f
         
     | 
| 
      
 49 
     | 
    
         
            +
                  initialize_options(options)
         
     | 
| 
       57 
50 
     | 
    
         
             
                  @principal = principal_calculation
         
     | 
| 
       58 
51 
     | 
    
         
             
                  @monthly_rate = @nominal_rate / 100 / 12
         
     | 
| 
       59 
52 
     | 
    
         
             
                end
         
     | 
| 
         @@ -73,21 +66,30 @@ module FinanceMath 
     | 
|
| 
       73 
66 
     | 
    
         
             
                  def pow1pm1(x, y)
         
     | 
| 
       74 
67 
     | 
    
         
             
                    (x <= -1) ? ((1 + x) ** y) - 1 : Math.exp(y * Math.log(1.0 + x)) - 1
         
     | 
| 
       75 
68 
     | 
    
         
             
                  end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
       77 
70 
     | 
    
         
             
                  def pow1p(x, y)
         
     | 
| 
       78 
71 
     | 
    
         
             
                    (x.abs > 0.5) ? ((1 + x) ** y) : Math.exp(y * Math.log(1.0 + x))
         
     | 
| 
       79 
72 
     | 
    
         
             
                  end
         
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
       81 
74 
     | 
    
         
             
                  def interest(monthly_rate, duration)
         
     | 
| 
       82 
75 
     | 
    
         
             
                    pow1p(monthly_rate, duration)
         
     | 
| 
       83 
76 
     | 
    
         
             
                  end
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
       85 
78 
     | 
    
         
             
                  def fvifa(monthly_rate, duration)
         
     | 
| 
       86 
79 
     | 
    
         
             
                    (monthly_rate == 0) ? duration : pow1pm1(monthly_rate, duration) / monthly_rate
         
     | 
| 
       87 
80 
     | 
    
         
             
                  end
         
     | 
| 
       88 
81 
     | 
    
         | 
| 
       89 
82 
     | 
    
         
             
                private
         
     | 
| 
       90 
83 
     | 
    
         | 
| 
      
 84 
     | 
    
         
            +
                  def initialize_options(options)
         
     | 
| 
      
 85 
     | 
    
         
            +
                    @nominal_rate = options.fetch(:nominal_rate).to_f
         
     | 
| 
      
 86 
     | 
    
         
            +
                    @duration = options.fetch(:duration).to_f
         
     | 
| 
      
 87 
     | 
    
         
            +
                    @amount = options.fetch(:amount).to_f
         
     | 
| 
      
 88 
     | 
    
         
            +
                    @structure_fee = options.fetch(:structure_fee, 5).to_f
         
     | 
| 
      
 89 
     | 
    
         
            +
                    @currency_protection = options.fetch(:currency_protection, 3).to_f
         
     | 
| 
      
 90 
     | 
    
         
            +
                    @fee = options.fetch(:fee, 0).to_f
         
     | 
| 
      
 91 
     | 
    
         
            +
                  end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
       91 
93 
     | 
    
         
             
                  def principal_calculation
         
     | 
| 
       92 
94 
     | 
    
         
             
                    amount * (1 - currency_protection/100 - structure_fee / 100 ) - fee * duration
         
     | 
| 
       93 
95 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -97,8 +99,8 @@ module FinanceMath 
     | 
|
| 
       97 
99 
     | 
    
         
             
                  # where a = APR/1200, N = duration, P = monthly payment, C = loan_amount
         
     | 
| 
       98 
100 
     | 
    
         
             
                  # Newton-Raphson finds root (the value for 'a' that makes f(a) = 0)
         
     | 
| 
       99 
101 
     | 
    
         
             
                  def calculate_apr
         
     | 
| 
       100 
     | 
    
         
            -
                    payment_ratio = pmt / principal_calculation 
     | 
| 
       101 
     | 
    
         
            -
                    duration = @duration 
     | 
| 
      
 102 
     | 
    
         
            +
                    payment_ratio = pmt / principal_calculation
         
     | 
| 
      
 103 
     | 
    
         
            +
                    duration = @duration
         
     | 
| 
       102 
104 
     | 
    
         
             
                    f = lambda {|k| (k**(duration + 1) - (k**duration * (payment_ratio + 1)) + payment_ratio)}
         
     | 
| 
       103 
105 
     | 
    
         
             
                    f_deriv = lambda { |k| ((duration + 1) * k**duration) - (duration * (payment_ratio + 1) * k**(duration - 1))}
         
     | 
| 
       104 
106 
     | 
    
         | 
| 
         @@ -121,4 +123,4 @@ module FinanceMath 
     | 
|
| 
       121 
123 
     | 
    
         
             
                    k_plus_one
         
     | 
| 
       122 
124 
     | 
    
         
             
                  end
         
     | 
| 
       123 
125 
     | 
    
         
             
              end
         
     | 
| 
       124 
     | 
    
         
            -
            end
         
     | 
| 
      
 126 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/finance_math.rb
    CHANGED
    
    
    
        data/lib/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: finance_math
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.6
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
     | 
    
         
            -
            -  
     | 
| 
      
 7 
     | 
    
         
            +
            - Nesha Zoric
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-07-19 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -28,41 +28,44 @@ dependencies: 
     | 
|
| 
       28 
28 
     | 
    
         
             
              name: rake
         
     | 
| 
       29 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       30 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       31 
     | 
    
         
            -
                - - " 
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       32 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       33 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
       34 
34 
     | 
    
         
             
              type: :development
         
     | 
| 
       35 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       36 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       37 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       38 
     | 
    
         
            -
                - - " 
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
       41 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
42 
     | 
    
         
             
              name: rspec
         
     | 
| 
       43 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       44 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
     | 
    
         
            -
                - - " 
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       46 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       47 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
       48 
48 
     | 
    
         
             
              type: :development
         
     | 
| 
       49 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
     | 
    
         
            -
                - - " 
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
       55 
55 
     | 
    
         
             
            description: 'Implementation of Loan/Mortgage functions in Ruby language. APR function
         
     | 
| 
       56 
56 
     | 
    
         
             
              and PMT function. In calculations it includes implementation of bank fee, marketplace
         
     | 
| 
       57 
57 
     | 
    
         
             
              fee, fees for each payment to provide the most precise calculation at very high
         
     | 
| 
       58 
58 
     | 
    
         
             
              speed. '
         
     | 
| 
       59 
59 
     | 
    
         
             
            email:
         
     | 
| 
       60 
     | 
    
         
            -
            -  
     | 
| 
      
 60 
     | 
    
         
            +
            - nesha@kolosek.com
         
     | 
| 
       61 
61 
     | 
    
         
             
            executables: []
         
     | 
| 
       62 
62 
     | 
    
         
             
            extensions: []
         
     | 
| 
       63 
63 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       64 
64 
     | 
    
         
             
            files:
         
     | 
| 
      
 65 
     | 
    
         
            +
            - ".circleci/config.yml"
         
     | 
| 
       65 
66 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
      
 67 
     | 
    
         
            +
            - ".gitlab-ci.yml"
         
     | 
| 
      
 68 
     | 
    
         
            +
            - ".tool-versions"
         
     | 
| 
       66 
69 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       67 
70 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       68 
71 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -92,11 +95,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       92 
95 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       93 
96 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       94 
97 
     | 
    
         
             
            requirements: []
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
            rubygems_version: 2.2.2
         
     | 
| 
      
 98 
     | 
    
         
            +
            rubygems_version: 3.5.3
         
     | 
| 
       97 
99 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       98 
100 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       99 
     | 
    
         
            -
            summary:  
     | 
| 
      
 101 
     | 
    
         
            +
            summary: Most accurate APR and PMT caluclator for Ruby.
         
     | 
| 
       100 
102 
     | 
    
         
             
            test_files:
         
     | 
| 
       101 
103 
     | 
    
         
             
            - spec/lib/loan_spec.rb
         
     | 
| 
       102 
104 
     | 
    
         
             
            - spec/spec_helper.rb
         
     |