money-joshm1 5.1.2

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.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2005 Tobias Lutke
2
+ Copyright (c) 2008 Phusion
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,257 @@
1
+ # RubyMoney - Money
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/money.png)](http://badge.fury.io/rb/money) [![Build Status](https://travis-ci.org/RubyMoney/money.png?branch=master)](https://travis-ci.org/RubyMoney/money) [![Code Climate](https://codeclimate.com/github/RubyMoney/money.png)](https://codeclimate.com/github/RubyMoney/money)
4
+
5
+ ## Contributing
6
+
7
+ See the [Contribution Guidelines](https://github.com/RubyMoney/money/blob/master/CONTRIBUTING.md)
8
+
9
+ ## Introduction
10
+
11
+ This library aids one in handling money and different currencies.
12
+
13
+ ### Features
14
+
15
+ - Provides a `Money` class which encapsulates all information about an certain
16
+ amount of money, such as its value and its currency.
17
+ - Provides a `Money::Currency` class which encapsulates all information about
18
+ a monetary unit.
19
+ - Represents monetary values as integers, in cents. This avoids floating point
20
+ rounding errors.
21
+ - Represents currency as `Money::Currency` instances providing an high level of
22
+ flexibility.
23
+ - Provides APIs for exchanging money from one currency to another.
24
+ - Has the ability to parse a money and currency strings
25
+ into the corresponding Money/Currency object.
26
+
27
+ ### Resources
28
+
29
+ - [Website](http://rubymoney.github.com/money)
30
+ - [API Documentation](http://rubydoc.info/gems/money/frames)
31
+ - [Git Repository](http://github.com/RubyMoney/money)
32
+
33
+ ### Notes
34
+
35
+ - Your app must use UTF-8 to function with this library. There are a
36
+ number of non-ASCII currency attributes.
37
+ - This app requires Ruby 1.9 and JSON. If you're using JRuby < 1.7.0
38
+ you'll need to add `gem "json"` to your Gemfile or similar.
39
+
40
+ ## Downloading
41
+
42
+ Install stable releases with the following command:
43
+
44
+ gem install money
45
+
46
+ The development version (hosted on Github) can be installed with:
47
+
48
+ git clone git://github.com/RubyMoney/money.git
49
+ cd money
50
+ rake install
51
+
52
+ ## Usage
53
+
54
+ ``` ruby
55
+ require 'money'
56
+
57
+ # 10.00 USD
58
+ money = Money.new(1000, "USD")
59
+ money.cents #=> 1000
60
+ money.currency #=> Currency.new("USD")
61
+
62
+ # Comparisons
63
+ Money.new(1000, "USD") == Money.new(1000, "USD") #=> true
64
+ Money.new(1000, "USD") == Money.new(100, "USD") #=> false
65
+ Money.new(1000, "USD") == Money.new(1000, "EUR") #=> false
66
+ Money.new(1000, "USD") != Money.new(1000, "EUR") #=> true
67
+
68
+ # Arithmetic
69
+ Money.new(1000, "USD") + Money.new(500, "USD") == Money.new(1500, "USD")
70
+ Money.new(1000, "USD") - Money.new(200, "USD") == Money.new(800, "USD")
71
+ Money.new(1000, "USD") / 5 == Money.new(200, "USD")
72
+ Money.new(1000, "USD") * 5 == Money.new(5000, "USD")
73
+
74
+ # Assumptive Currencies
75
+ Money.assume_from_symbol = true
76
+ Money.parse("$100") == Money.new(10000, "USD")
77
+ Money.parse("€100") == Money.new(10000, "EUR")
78
+ Money.parse("£100") == Money.new(10000, "GBP")
79
+
80
+ # Currency conversions
81
+ some_code_to_setup_exchange_rates
82
+ Money.new(1000, "USD").exchange_to("EUR") == Money.new(some_value, "EUR")
83
+ ```
84
+
85
+ ## Currency
86
+
87
+ Currencies are consistently represented as instances of `Money::Currency`.
88
+ The most part of `Money` APIs allows you to supply either a `String` or a
89
+ `Money::Currency`.
90
+
91
+ ``` ruby
92
+ Money.new(1000, "USD") == Money.new(1000, Currency.new("USD"))
93
+ Money.new(1000, "EUR").currency == Currency.new("EUR")
94
+ ```
95
+
96
+ A `Money::Currency` instance holds all the information about the currency,
97
+ including the currency symbol, name and much more.
98
+
99
+ ``` ruby
100
+ currency = Money.new(1000, "USD").currency
101
+ currency.iso_code #=> "USD"
102
+ currency.name #=> "United States Dollar"
103
+ ```
104
+
105
+ To define a new `Money::Currency` use `Money::Currency.register` as shown
106
+ below.
107
+
108
+ ``` ruby
109
+ curr = {
110
+ :priority => 1,
111
+ :iso_code => "USD",
112
+ :iso_numeric => "840",
113
+ :name => "United States Dollar",
114
+ :symbol => "$",
115
+ :subunit => "Cent",
116
+ :subunit_to_unit => 100,
117
+ :separator => ".",
118
+ :delimiter => ","
119
+ }
120
+
121
+ Money::Currency.register(curr)
122
+ ```
123
+
124
+ The pre-defined set of attributes includes:
125
+
126
+ - `:priority` a numerical value you can use to sort/group the currency list
127
+ - `:iso_code` the international 3-letter code as defined by the ISO 4217 standard
128
+ - `:iso_numeric` the international 3-digit code as defined by the ISO 4217 standard
129
+ - `:name` the currency name
130
+ - `:symbol` the currency symbol (UTF-8 encoded)
131
+ - `:subunit` the name of the fractional monetary unit
132
+ - `:subunit_to_unit` the proportion between the unit and the subunit
133
+ - `:separator` character between the whole and fraction amounts
134
+ - `:delimiter` character between each thousands place
135
+
136
+ All attributes are optional. Some attributes, such as `:symbol`, are used by
137
+ the Money class to print out a representation of the object. Other attributes,
138
+ such as `:name` or `:priority`, exist to provide a basic API you can take
139
+ advantage of to build your application.
140
+
141
+ ### :priority
142
+
143
+ The priority attribute is an arbitrary numerical value you can assign to the
144
+ `Money::Currency` and use in sorting/grouping operation.
145
+
146
+ For instance, let's assume your Rails application needs to render a currency
147
+ selector like the one available
148
+ [here](http://finance.yahoo.com/currency-converter/). You can create a couple of
149
+ custom methods to return the list of major currencies and all currencies as
150
+ follows:
151
+
152
+ ``` ruby
153
+ # Returns an array of currency id where
154
+ # priority < 10
155
+ def major_currencies(hash)
156
+ hash.inject([]) do |array, (id, attributes)|
157
+ priority = attributes[:priority]
158
+ if priority && priority < 10
159
+ array[priority] ||= []
160
+ array[priority] << id
161
+ end
162
+ array
163
+ end.compact.flatten
164
+ end
165
+
166
+ # Returns an array of all currency id
167
+ def all_currencies(hash)
168
+ hash.keys
169
+ end
170
+
171
+ major_currencies(Money::Currency.table)
172
+ # => [ :usd, :eur, :bgp, :cad ]
173
+
174
+ all_currencies(Money::Currency.table)
175
+ # => [ :aed, :afn, all, ... ]
176
+ ```
177
+
178
+ ### Default Currency
179
+
180
+ By default `Money` defaults to USD as its currency. This can be overwritten
181
+ using:
182
+
183
+ ``` ruby
184
+ Money.default_currency = Money::Currency.new("CAD")
185
+ ```
186
+
187
+ If you use Rails, then `environment.rb` is a very good place to put this.
188
+
189
+ ### Currency Exponent
190
+
191
+ The exponent of a money value is the number of digits after the decimal
192
+ separator (which separates the major unit from the minor unit). See e.g.
193
+ [Wikipedia on ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) for more
194
+ information. You can find the exponent (as a `Float`) by
195
+
196
+ ``` ruby
197
+ Money::Currency.new("USD").exponent # => 2.0
198
+ Money::Currency.new("JPY").exponent # => 0.0
199
+ Money::Currency.new("MGA").exponent # => 0.6989700043360189
200
+ ```
201
+
202
+ ### Currency Lookup
203
+
204
+ To find a given currency by ISO 4217 numeric code (three digits) you can do
205
+
206
+ ``` ruby
207
+ Money::Currency.find_by_iso_numeric(978) #=> Money::Currency.new(:eur)
208
+ ```
209
+
210
+ ## Currency Exchange
211
+
212
+ Exchanging money is performed through an exchange bank object. The default
213
+ exchange bank object requires one to manually specify the exchange rate. Here's
214
+ an example of how it works:
215
+
216
+ ``` ruby
217
+ Money.add_rate("USD", "CAD", 1.24515)
218
+ Money.add_rate("CAD", "USD", 0.803115)
219
+
220
+ Money.us_dollar(100).exchange_to("CAD") # => Money.new(124, "CAD")
221
+ Money.ca_dollar(100).exchange_to("USD") # => Money.new(80, "USD")
222
+ ```
223
+
224
+ Comparison and arithmetic operations work as expected:
225
+
226
+ ``` ruby
227
+ Money.new(1000, "USD") <=> Money.new(900, "USD") # => 1; 9.00 USD is smaller
228
+ Money.new(1000, "EUR") + Money.new(10, "EUR") == Money.new(1010, "EUR")
229
+
230
+ Money.add_rate("USD", "EUR", 0.5)
231
+ Money.new(1000, "EUR") + Money.new(1000, "USD") == Money.new(1500, "EUR")
232
+ ```
233
+
234
+ There is nothing stopping you from creating bank objects which scrapes
235
+ [XE](http://www.xe.com) for the current rates or just returns `rand(2)`:
236
+
237
+ ``` ruby
238
+ Money.default_bank = ExchangeBankWhichScrapesXeDotCom.new
239
+ ```
240
+
241
+ ### Implementations
242
+
243
+ The following is a list of Money.gem compatible currency exchange rate
244
+ implementations.
245
+
246
+ - [eu_central_bank](http://github.com/RubyMoney/eu_central_bank)
247
+ - [google_currency](http://github.com/RubyMoney/google_currency)
248
+ - [nordea](https://github.com/k33l0r/nordea)
249
+ - [nbrb_currency](https://github.com/slbug/nbrb_currency)
250
+ - [money-open-exchange-rates](https://github.com/spk/money-open-exchange-rates)
251
+ - [money-historical-bank](https://github.com/atwam/money-historical-bank)
252
+
253
+ ## Ruby on Rails
254
+
255
+ To integrate money in a Rails application use [money-rails](http://github.com/RubyMoney/money-rails).
256
+
257
+ For deprecated methods of integrating with Rails, check [the wiki](https://github.com/RubyMoney/money/wiki).
data/Rakefile ADDED
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'rake/clean'
3
+
4
+ CLOBBER.include('doc', '.yardoc')
5
+
6
+ def gemspec
7
+ @gemspec ||= begin
8
+ file = File.expand_path("../money.gemspec", __FILE__)
9
+ eval(File.read(file), binding, file)
10
+ end
11
+ end
12
+
13
+
14
+ task :default => :spec
15
+ task :test => :spec
16
+
17
+
18
+ require 'rspec/core/rake_task'
19
+
20
+ RSpec::Core::RakeTask.new
21
+
22
+
23
+ require 'yard'
24
+
25
+ YARD::Rake::YardocTask.new do |t|
26
+ t.options << "--files" << "CHANGELOG.md,LICENSE"
27
+ end
28
+
29
+
30
+ require 'rubygems/package_task'
31
+
32
+ Gem::PackageTask.new(gemspec) do |pkg|
33
+ pkg.gem_spec = gemspec
34
+ end
35
+
36
+ task :gem => :gemspec
37
+
38
+ desc "Install the gem locally"
39
+ task :install => :gem do
40
+ sh "gem install pkg/#{gemspec.full_name}.gem"
41
+ end
42
+
43
+ desc "Validate the gemspec"
44
+ task :gemspec do
45
+ gemspec.validate
46
+ end
47
+
48
+
49
+ desc "Open an irb session preloaded with this library"
50
+ task :console do
51
+ sh "irb -rubygems -I lib -r money.rb"
52
+ end
@@ -0,0 +1,128 @@
1
+ {
2
+ "eek": {
3
+ "priority": 100,
4
+ "iso_code": "EEK",
5
+ "name": "Estonian Kroon",
6
+ "symbol": "KR",
7
+ "alternate_symbols": [],
8
+ "subunit": "Sent",
9
+ "subunit_to_unit": 100,
10
+ "symbol_first": false,
11
+ "html_entity": "",
12
+ "decimal_mark": ".",
13
+ "thousands_separator": ",",
14
+ "iso_numeric": "233"
15
+ },
16
+ "ghc": {
17
+ "priority": 100,
18
+ "iso_code": "GHS",
19
+ "name": "Ghanaian Cedi",
20
+ "symbol": "₵",
21
+ "alternate_symbols": ["GH₵"],
22
+ "subunit": "Pesewa",
23
+ "subunit_to_unit": 100,
24
+ "symbol_first": true,
25
+ "html_entity": "&#x20B5;",
26
+ "decimal_mark": ".",
27
+ "thousands_separator": ",",
28
+ "iso_numeric": "288"
29
+ },
30
+ "mtl": {
31
+ "priority": 100,
32
+ "iso_code": "MTL",
33
+ "name": "Maltese Lira",
34
+ "symbol": "₤",
35
+ "alternate_symbols": ["Lm"],
36
+ "subunit": "Cent",
37
+ "subunit_to_unit": 100,
38
+ "symbol_first": true,
39
+ "html_entity": "&#x00A3;",
40
+ "decimal_mark": ".",
41
+ "thousands_separator": ",",
42
+ "iso_numeric": "470"
43
+ },
44
+ "tmm": {
45
+ "priority": 100,
46
+ "iso_code": "TMM",
47
+ "name": "Turkmenistani Manat",
48
+ "symbol": "m",
49
+ "alternate_symbols": [],
50
+ "subunit": "Tennesi",
51
+ "subunit_to_unit": 100,
52
+ "symbol_first": false,
53
+ "html_entity": "",
54
+ "decimal_mark": ".",
55
+ "thousands_separator": ",",
56
+ "iso_numeric": "795"
57
+ },
58
+ "yen": {
59
+ "priority": 100,
60
+ "iso_code": "JPY",
61
+ "name": "Japanese Yen",
62
+ "symbol": "¥",
63
+ "alternate_symbols": ["円", "圓"],
64
+ "subunit": "Sen",
65
+ "subunit_to_unit": 100,
66
+ "symbol_first": true,
67
+ "html_entity": "&#x00A5;",
68
+ "decimal_mark": ".",
69
+ "thousands_separator": ",",
70
+ "iso_numeric": ""
71
+ },
72
+ "zwd": {
73
+ "priority": 100,
74
+ "iso_code": "ZWD",
75
+ "name": "Zimbabwean Dollar",
76
+ "symbol": "$",
77
+ "alternate_symbols": ["Z$"],
78
+ "subunit": "Cent",
79
+ "subunit_to_unit": 100,
80
+ "symbol_first": true,
81
+ "html_entity": "$",
82
+ "decimal_mark": ".",
83
+ "thousands_separator": ",",
84
+ "iso_numeric": "716"
85
+ },
86
+ "zwl": {
87
+ "priority": 100,
88
+ "iso_code": "ZWL",
89
+ "name": "Zimbabwean Dollar",
90
+ "symbol": "$",
91
+ "alternate_symbols": ["Z$"],
92
+ "subunit": "Cent",
93
+ "subunit_to_unit": 100,
94
+ "symbol_first": true,
95
+ "html_entity": "$",
96
+ "decimal_mark": ".",
97
+ "thousands_separator": ",",
98
+ "iso_numeric": "932"
99
+ },
100
+ "zwn": {
101
+ "priority": 100,
102
+ "iso_code": "ZWN",
103
+ "name": "Zimbabwean Dollar",
104
+ "symbol": "$",
105
+ "alternate_symbols": ["Z$"],
106
+ "subunit": "Cent",
107
+ "subunit_to_unit": 100,
108
+ "symbol_first": true,
109
+ "html_entity": "$",
110
+ "decimal_mark": ".",
111
+ "thousands_separator": ",",
112
+ "iso_numeric": "942"
113
+ },
114
+ "zwr": {
115
+ "priority": 100,
116
+ "iso_code": "ZWR",
117
+ "name": "Zimbabwean Dollar",
118
+ "symbol": "$",
119
+ "alternate_symbols": ["Z$"],
120
+ "subunit": "Cent",
121
+ "subunit_to_unit": 100,
122
+ "symbol_first": true,
123
+ "html_entity": "$",
124
+ "decimal_mark": ".",
125
+ "thousands_separator": ",",
126
+ "iso_numeric": "935"
127
+ }
128
+ }