Security News
Supply Chain Attack Detected in Solana's web3.js Library
A supply chain attack has been detected in versions 1.95.6 and 1.95.7 of the popular @solana/web3.js library.
= Introduction
This library aids one in handling money and different currencies. Features:
Resources:
== Download
Install stable releases with the following command:
gem install money
The development version (hosted on Github) can be installed with:
gem sources -a http://gems.github.com gem install FooBarWidget-money
== Usage
=== Synopsis
require 'money'
money = Money.new(1000, "USD") money.cents # => 1000 money.currency # => "USD"
Money.new(1000, "USD") == Money.new(1000, "USD") # => true Money.new(1000, "USD") == Money.new(100, "USD") # => false Money.new(1000, "USD") == Money.new(1000, "EUR") # => false
=== Currency Exchange
Exchanging money is performed through an exchange bank object. The default exchange bank object requires one to manually specify the exchange rate. Here's an example of how it works:
Money.add_rate("USD", "CAD", 1.24515) Money.add_rate("CAD", "USD", 0.803115)
Money.us_dollar(100).exchange_to("CAD") # => Money.new(124, "CAD") Money.ca_dollar(100).exchange_to("USD") # => Money.new(80, "USD")
Comparison and arithmetic operations work as expected:
Money.new(1000, "USD") <=> Money.new(900, "USD") # => 1; 9.00 USD is smaller Money.new(1000, "EUR") + Money.new(10, "EUR") == Money.new(1010, "EUR")
Money.add_rate("USD", "EUR", 0.5) Money.new(1000, "EUR") + Money.new(1000, "USD") == Money.new(1500, "EUR")
There is nothing stopping you from creating bank objects which scrapes www.xe.com for the current rates or just returns rand(2):
Money.default_bank = ExchangeBankWhichScrapesXeDotCom.new
=== Ruby on Rails
Use the +compose_of+ helper to let Active Record deal with embedding the money object in your models. The following example requires a +cents+ and a +currency+ field.
class ProductUnit < ActiveRecord::Base belongs_to :product composed_of :price, :class_name => "Money", :mapping => [%w(cents cents), %w(currency currency)]
private
validate :cents_not_zero
def cents_not_zero
errors.add("cents", "cannot be zero or less") unless cents > 0
end
validates_presence_of :sku, :currency
validates_uniqueness_of :sku
end
=== Default Currency
By default Money defaults to USD as its currency. This can be overwritten using
Money.default_currency = "CAD"
If you use Rails, then environment.rb is a very good place to put this.
FAQs
Unknown package
We found that carlosbrando-money demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A supply chain attack has been detected in versions 1.95.6 and 1.95.7 of the popular @solana/web3.js library.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.