money-currencylayer-bank 0.5.4 → 0.5.5
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 +4 -4
 - data/LICENSE +1 -1
 - data/README.md +8 -3
 - data/lib/money/bank/currencylayer_bank.rb +42 -39
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: bcc2d3fa0693e5f08c0368924439dfad9e36e744
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8d0d077b6c485208c35f49740e93054b7a5c8102
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 85105563870f9b83c96bc6e2e0a47ea8b6c3328d0ac7d7bfc709fe7f598996cd2cbf5eda05f2e96b34dad0520d793c42d862fc71f591f4f76ea2ab96989e52f8
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 60f70f3a63f6c96883e9e34bc274bc96d343f0458eaeeb59e8fb07f441041f424e1734c87ba2d7d86d49ba005d67606021c08fdf8cff08f6845ddf06226e2696
         
     | 
    
        data/LICENSE
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -40,6 +40,7 @@ See more about Currencylayer product plans on https://currencylayer.com/product. 
     | 
|
| 
       40 
40 
     | 
    
         
             
            * average response time < 20ms
         
     | 
| 
       41 
41 
     | 
    
         
             
            * supports caching currency rates
         
     | 
| 
       42 
42 
     | 
    
         
             
            * calculates every pair rate calculating inverse rate or using base currency rate
         
     | 
| 
      
 43 
     | 
    
         
            +
            * supports multi threading
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
            ## Installation
         
     | 
| 
       45 
46 
     | 
    
         | 
| 
         @@ -89,7 +90,7 @@ mclb.secure_connection = true 
     | 
|
| 
       89 
90 
     | 
    
         
             
            # Define cache (string or pathname)
         
     | 
| 
       90 
91 
     | 
    
         
             
            mclb.cache = 'path/to/file/cache'
         
     | 
| 
       91 
92 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
            # Set money default bank to  
     | 
| 
      
 93 
     | 
    
         
            +
            # Set money default bank to Currencylayer bank
         
     | 
| 
       93 
94 
     | 
    
         
             
            Money.default_bank = mclb
         
     | 
| 
       94 
95 
     | 
    
         
             
            ~~~
         
     | 
| 
       95 
96 
     | 
    
         | 
| 
         @@ -104,7 +105,7 @@ mclb.source 
     | 
|
| 
       104 
105 
     | 
    
         
             
            # Expires rates if the expiration time is reached.
         
     | 
| 
       105 
106 
     | 
    
         
             
            mclb.expire_rates!
         
     | 
| 
       106 
107 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
            #  
     | 
| 
      
 108 
     | 
    
         
            +
            # Returns true if the expiration time is reached.
         
     | 
| 
       108 
109 
     | 
    
         
             
            mclb.expired?
         
     | 
| 
       109 
110 
     | 
    
         | 
| 
       110 
111 
     | 
    
         
             
            # Get the API source url.
         
     | 
| 
         @@ -112,6 +113,9 @@ mclb.source_url 
     | 
|
| 
       112 
113 
     | 
    
         | 
| 
       113 
114 
     | 
    
         
             
            # Get the rates timestamp of the last API request.
         
     | 
| 
       114 
115 
     | 
    
         
             
            mclb.rates_timestamp
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
            # Get the rates timestamp of loaded rates in memory.
         
     | 
| 
      
 118 
     | 
    
         
            +
            moxb.rates_mem_timestamp
         
     | 
| 
       115 
119 
     | 
    
         
             
            ~~~
         
     | 
| 
       116 
120 
     | 
    
         | 
| 
       117 
121 
     | 
    
         
             
            ### How to exchange
         
     | 
| 
         @@ -184,6 +188,7 @@ bundle exec rake 
     | 
|
| 
       184 
188 
     | 
    
         
             
            ## Other Implementations
         
     | 
| 
       185 
189 
     | 
    
         | 
| 
       186 
190 
     | 
    
         
             
            * Gem [currencylayer](https://github.com/askuratovsky/currencylayer)
         
     | 
| 
      
 191 
     | 
    
         
            +
            * Gem [money-openexchangerates-bank](https://github.com/phlegx/money-openexchangerates-bank)
         
     | 
| 
       187 
192 
     | 
    
         
             
            * Gem [money-open-exchange-rates](https://github.com/spk/money-open-exchange-rates)
         
     | 
| 
       188 
193 
     | 
    
         
             
            * Gem [money-historical-bank](https://github.com/atwam/money-historical-bank)
         
     | 
| 
       189 
194 
     | 
    
         
             
            * Gem [eu_central_bank](https://github.com/RubyMoney/eu_central_bank)
         
     | 
| 
         @@ -207,4 +212,4 @@ bundle exec rake 
     | 
|
| 
       207 
212 
     | 
    
         | 
| 
       208 
213 
     | 
    
         
             
            The MIT License
         
     | 
| 
       209 
214 
     | 
    
         | 
| 
       210 
     | 
    
         
            -
            Copyright (c)  
     | 
| 
      
 215 
     | 
    
         
            +
            Copyright (c) 2017 Phlegx Systems OG
         
     | 
| 
         @@ -13,7 +13,6 @@ class Money 
     | 
|
| 
       13 
13 
     | 
    
         
             
                class Memory
         
     | 
| 
       14 
14 
     | 
    
         
             
                  # Add method to reset the build in memory store
         
     | 
| 
       15 
15 
     | 
    
         
             
                  # @param [Hash] rt Optional initial exchange rate data.
         
     | 
| 
       16 
     | 
    
         
            -
                  #
         
     | 
| 
       17 
16 
     | 
    
         
             
                  # @return [Object] store.
         
     | 
| 
       18 
17 
     | 
    
         
             
                  def reset!(rt = {})
         
     | 
| 
       19 
18 
     | 
    
         
             
                    transaction { @index = rt }
         
     | 
| 
         @@ -32,32 +31,29 @@ class Money 
     | 
|
| 
       32 
31 
     | 
    
         
             
                # CurrencylayerBank base class
         
     | 
| 
       33 
32 
     | 
    
         
             
                class CurrencylayerBank < Money::Bank::VariableExchange
         
     | 
| 
       34 
33 
     | 
    
         
             
                  # CurrencylayerBank url
         
     | 
| 
       35 
     | 
    
         
            -
                  CL_URL = 'http://apilayer.net/api/live'
         
     | 
| 
      
 34 
     | 
    
         
            +
                  CL_URL = 'http://apilayer.net/api/live'.freeze
         
     | 
| 
       36 
35 
     | 
    
         
             
                  # CurrencylayerBank secure url
         
     | 
| 
       37 
     | 
    
         
            -
                  CL_SECURE_URL = CL_URL. 
     | 
| 
      
 36 
     | 
    
         
            +
                  CL_SECURE_URL = CL_URL.sub('http:', 'https:')
         
     | 
| 
       38 
37 
     | 
    
         
             
                  # Default base currency
         
     | 
| 
       39 
     | 
    
         
            -
                  CL_SOURCE = 'USD'
         
     | 
| 
      
 38 
     | 
    
         
            +
                  CL_SOURCE = 'USD'.freeze
         
     | 
| 
       40 
39 
     | 
    
         | 
| 
       41 
40 
     | 
    
         
             
                  # Use https to fetch rates from CurrencylayerBank
         
     | 
| 
       42 
41 
     | 
    
         
             
                  # CurrencylayerBank only allows http as connection
         
     | 
| 
       43 
42 
     | 
    
         
             
                  # for the free plan users.
         
     | 
| 
       44 
43 
     | 
    
         
             
                  #
         
     | 
| 
       45 
44 
     | 
    
         
             
                  # @param value [Boolean] true for secure connection
         
     | 
| 
       46 
     | 
    
         
            -
                  #
         
     | 
| 
       47 
45 
     | 
    
         
             
                  # @return [Boolean] chosen secure connection
         
     | 
| 
       48 
46 
     | 
    
         
             
                  attr_accessor :secure_connection
         
     | 
| 
       49 
47 
     | 
    
         | 
| 
       50 
48 
     | 
    
         
             
                  # API must have a valid access_key
         
     | 
| 
       51 
49 
     | 
    
         
             
                  #
         
     | 
| 
       52 
50 
     | 
    
         
             
                  # @param value [String] API access key
         
     | 
| 
       53 
     | 
    
         
            -
                  #
         
     | 
| 
       54 
51 
     | 
    
         
             
                  # @return [String] chosen API access key
         
     | 
| 
       55 
52 
     | 
    
         
             
                  attr_accessor :access_key
         
     | 
| 
       56 
53 
     | 
    
         | 
| 
       57 
54 
     | 
    
         
             
                  # Cache accessor, can be a String or a Proc
         
     | 
| 
       58 
55 
     | 
    
         
             
                  #
         
     | 
| 
       59 
56 
     | 
    
         
             
                  # @param value [String,Pathname,Proc] cache system
         
     | 
| 
       60 
     | 
    
         
            -
                  #
         
     | 
| 
       61 
57 
     | 
    
         
             
                  # @return [String,Pathname,Proc] chosen cache system
         
     | 
| 
       62 
58 
     | 
    
         
             
                  attr_accessor :cache
         
     | 
| 
       63 
59 
     | 
    
         | 
| 
         @@ -75,7 +71,6 @@ class Money 
     | 
|
| 
       75 
71 
     | 
    
         
             
                  #   ttl_in_seconds = 86400 # will expire the rates in one day
         
     | 
| 
       76 
72 
     | 
    
         
             
                  #
         
     | 
| 
       77 
73 
     | 
    
         
             
                  # @param value [Integer] time to live in seconds
         
     | 
| 
       78 
     | 
    
         
            -
                  #
         
     | 
| 
       79 
74 
     | 
    
         
             
                  # @return [Integer] chosen time to live in seconds
         
     | 
| 
       80 
75 
     | 
    
         
             
                  attr_writer :ttl_in_seconds
         
     | 
| 
       81 
76 
     | 
    
         | 
| 
         @@ -87,7 +82,6 @@ class Money 
     | 
|
| 
       87 
82 
     | 
    
         
             
                  #   source = 'USD'
         
     | 
| 
       88 
83 
     | 
    
         
             
                  #
         
     | 
| 
       89 
84 
     | 
    
         
             
                  # @param value [String] Currency code, ISO 3166-1 alpha-3
         
     | 
| 
       90 
     | 
    
         
            -
                  #
         
     | 
| 
       91 
85 
     | 
    
         
             
                  # @return [String] chosen base currency
         
     | 
| 
       92 
86 
     | 
    
         
             
                  def source=(value)
         
     | 
| 
       93 
87 
     | 
    
         
             
                    @source = Money::Currency.find(value.to_s).try(:iso_code) || CL_SOURCE
         
     | 
| 
         @@ -124,47 +118,23 @@ class Money 
     | 
|
| 
       124 
118 
     | 
    
         
             
                  # @param [String] from_currency Currency ISO code. ex. 'USD'
         
     | 
| 
       125 
119 
     | 
    
         
             
                  # @param [String] to_currency Currency ISO code. ex. 'CAD'
         
     | 
| 
       126 
120 
     | 
    
         
             
                  # @param [Numeric] rate Rate to use when exchanging currencies.
         
     | 
| 
       127 
     | 
    
         
            -
                  #
         
     | 
| 
       128 
121 
     | 
    
         
             
                  # @return [Numeric] rate.
         
     | 
| 
       129 
122 
     | 
    
         
             
                  def add_rate(from_currency, to_currency, rate)
         
     | 
| 
       130 
123 
     | 
    
         
             
                    super
         
     | 
| 
       131 
124 
     | 
    
         
             
                  end
         
     | 
| 
       132 
125 
     | 
    
         | 
| 
      
 126 
     | 
    
         
            +
                  # Alias super method
         
     | 
| 
      
 127 
     | 
    
         
            +
                  alias super_get_rate get_rate
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
       133 
129 
     | 
    
         
             
                  # Override Money `get_rate` method for caching
         
     | 
| 
       134 
130 
     | 
    
         
             
                  # @param [String] from_currency Currency ISO code. ex. 'USD'
         
     | 
| 
       135 
131 
     | 
    
         
             
                  # @param [String] to_currency Currency ISO code. ex. 'CAD'
         
     | 
| 
       136 
132 
     | 
    
         
             
                  # @param [Hash] opts Options hash to set special parameters.
         
     | 
| 
       137 
     | 
    
         
            -
                  #
         
     | 
| 
       138 
133 
     | 
    
         
             
                  # @return [Numeric] rate.
         
     | 
| 
       139 
     | 
    
         
            -
                  def get_rate(from_currency, to_currency, opts = {}) 
     | 
| 
      
 134 
     | 
    
         
            +
                  def get_rate(from_currency, to_currency, opts = {})
         
     | 
| 
       140 
135 
     | 
    
         
             
                    expire_rates!
         
     | 
| 
       141 
     | 
    
         
            -
                    rate =  
     | 
| 
       142 
     | 
    
         
            -
                     
     | 
| 
       143 
     | 
    
         
            -
                      # Tries to calculate an inverse rate
         
     | 
| 
       144 
     | 
    
         
            -
                      inverse_rate = super(to_currency, from_currency, opts)
         
     | 
| 
       145 
     | 
    
         
            -
                      if inverse_rate
         
     | 
| 
       146 
     | 
    
         
            -
                        rate = 1.0 / inverse_rate
         
     | 
| 
       147 
     | 
    
         
            -
                        add_rate(from_currency, to_currency, rate)
         
     | 
| 
       148 
     | 
    
         
            -
                      end
         
     | 
| 
       149 
     | 
    
         
            -
                    end
         
     | 
| 
       150 
     | 
    
         
            -
                    unless rate
         
     | 
| 
       151 
     | 
    
         
            -
                      # Tries to calculate a pair rate using base currency rate
         
     | 
| 
       152 
     | 
    
         
            -
                      from_base_rate = super(source, from_currency, opts)
         
     | 
| 
       153 
     | 
    
         
            -
                      unless from_base_rate
         
     | 
| 
       154 
     | 
    
         
            -
                        from_inverse_rate = super(from_currency, source, opts)
         
     | 
| 
       155 
     | 
    
         
            -
                        from_base_rate = 1.0 / from_inverse_rate if from_inverse_rate
         
     | 
| 
       156 
     | 
    
         
            -
                      end
         
     | 
| 
       157 
     | 
    
         
            -
                      to_base_rate = super(source, to_currency, opts)
         
     | 
| 
       158 
     | 
    
         
            -
                      unless to_base_rate
         
     | 
| 
       159 
     | 
    
         
            -
                        to_inverse_rate = super(to_currency, source, opts)
         
     | 
| 
       160 
     | 
    
         
            -
                        to_base_rate = 1.0 / to_inverse_rate if to_inverse_rate
         
     | 
| 
       161 
     | 
    
         
            -
                      end
         
     | 
| 
       162 
     | 
    
         
            -
                      if to_base_rate && from_base_rate
         
     | 
| 
       163 
     | 
    
         
            -
                        rate = to_base_rate / from_base_rate
         
     | 
| 
       164 
     | 
    
         
            -
                        add_rate(from_currency, to_currency, rate)
         
     | 
| 
       165 
     | 
    
         
            -
                      end
         
     | 
| 
       166 
     | 
    
         
            -
                    end
         
     | 
| 
       167 
     | 
    
         
            -
                    rate
         
     | 
| 
      
 136 
     | 
    
         
            +
                    rate = get_rate_or_calc_inverse(from_currency, to_currency, opts)
         
     | 
| 
      
 137 
     | 
    
         
            +
                    rate || calc_pair_rate_using_base(from_currency, to_currency, opts)
         
     | 
| 
       168 
138 
     | 
    
         
             
                  end
         
     | 
| 
       169 
139 
     | 
    
         | 
| 
       170 
140 
     | 
    
         
             
                  # Fetch new rates if cached rates are expired or stale
         
     | 
| 
         @@ -305,6 +275,7 @@ class Money 
     | 
|
| 
       305 
275 
     | 
    
         
             
                  end
         
     | 
| 
       306 
276 
     | 
    
         | 
| 
       307 
277 
     | 
    
         
             
                  # Get raw exchange rates from cache and then from url
         
     | 
| 
      
 278 
     | 
    
         
            +
                  # @param rescue_straight [Boolean] true for rescue straight, default true
         
     | 
| 
       308 
279 
     | 
    
         
             
                  # @return [String] JSON content
         
     | 
| 
       309 
280 
     | 
    
         
             
                  def raw_rates_careful(rescue_straight = true)
         
     | 
| 
       310 
281 
     | 
    
         
             
                    JSON.parse(read_from_cache.to_s)
         
     | 
| 
         @@ -319,6 +290,38 @@ class Money 
     | 
|
| 
       319 
290 
     | 
    
         
             
                  rescue JSON::ParserError
         
     | 
| 
       320 
291 
     | 
    
         
             
                    raw_rates_careful(false)
         
     | 
| 
       321 
292 
     | 
    
         
             
                  end
         
     | 
| 
      
 293 
     | 
    
         
            +
             
     | 
| 
      
 294 
     | 
    
         
            +
                  # Get rate or calculate it as inverse rate
         
     | 
| 
      
 295 
     | 
    
         
            +
                  # @param [String] from_currency Currency ISO code. ex. 'USD'
         
     | 
| 
      
 296 
     | 
    
         
            +
                  # @param [String] to_currency Currency ISO code. ex. 'CAD'
         
     | 
| 
      
 297 
     | 
    
         
            +
                  # @return [Numeric] rate or rate calculated as inverse rate.
         
     | 
| 
      
 298 
     | 
    
         
            +
                  def get_rate_or_calc_inverse(from_currency, to_currency, opts = {})
         
     | 
| 
      
 299 
     | 
    
         
            +
                    rate = super_get_rate(from_currency, to_currency, opts)
         
     | 
| 
      
 300 
     | 
    
         
            +
                    unless rate
         
     | 
| 
      
 301 
     | 
    
         
            +
                      # Tries to calculate an inverse rate
         
     | 
| 
      
 302 
     | 
    
         
            +
                      inverse_rate = super_get_rate(to_currency, from_currency, opts)
         
     | 
| 
      
 303 
     | 
    
         
            +
                      if inverse_rate
         
     | 
| 
      
 304 
     | 
    
         
            +
                        rate = 1.0 / inverse_rate
         
     | 
| 
      
 305 
     | 
    
         
            +
                        add_rate(from_currency, to_currency, rate)
         
     | 
| 
      
 306 
     | 
    
         
            +
                      end
         
     | 
| 
      
 307 
     | 
    
         
            +
                    end
         
     | 
| 
      
 308 
     | 
    
         
            +
                    rate
         
     | 
| 
      
 309 
     | 
    
         
            +
                  end
         
     | 
| 
      
 310 
     | 
    
         
            +
             
     | 
| 
      
 311 
     | 
    
         
            +
                  # Tries to calculate a pair rate using base currency rate
         
     | 
| 
      
 312 
     | 
    
         
            +
                  # @param [String] from_currency Currency ISO code. ex. 'USD'
         
     | 
| 
      
 313 
     | 
    
         
            +
                  # @param [String] to_currency Currency ISO code. ex. 'CAD'
         
     | 
| 
      
 314 
     | 
    
         
            +
                  # @return [Numeric] rate or nil if cannot calculate rate.
         
     | 
| 
      
 315 
     | 
    
         
            +
                  def calc_pair_rate_using_base(from_currency, to_currency, opts = {})
         
     | 
| 
      
 316 
     | 
    
         
            +
                    from_base_rate = get_rate_or_calc_inverse(source, from_currency, opts)
         
     | 
| 
      
 317 
     | 
    
         
            +
                    to_base_rate   = get_rate_or_calc_inverse(source, to_currency, opts)
         
     | 
| 
      
 318 
     | 
    
         
            +
                    if to_base_rate && from_base_rate
         
     | 
| 
      
 319 
     | 
    
         
            +
                      rate = to_base_rate / from_base_rate
         
     | 
| 
      
 320 
     | 
    
         
            +
                      add_rate(from_currency, to_currency, rate)
         
     | 
| 
      
 321 
     | 
    
         
            +
                      return rate
         
     | 
| 
      
 322 
     | 
    
         
            +
                    end
         
     | 
| 
      
 323 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 324 
     | 
    
         
            +
                  end
         
     | 
| 
       322 
325 
     | 
    
         
             
                end
         
     | 
| 
       323 
326 
     | 
    
         
             
              end
         
     | 
| 
       324 
327 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: money-currencylayer-bank
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.5. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Egon Zemmer
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-05-25 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: money
         
     |