currency_switcher 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +2 -0
- data/Manifest +10 -0
- data/README.md +143 -0
- data/Rakefile +12 -0
- data/currency_switcher.gemspec +33 -0
- data/lib/currency_switcher.rb +101 -0
- data/lib/currency_switcher/currencies.rb +124 -0
- data/lib/currency_switcher/ext/fixnum.rb +23 -0
- data/test/helper.rb +26 -0
- data/test/html/eur_to_usd.html +413 -0
- data/test/html/usd_to_gbp.html +413 -0
- data/test/test_currency_switcher.rb +68 -0
- metadata +104 -0
- metadata.gz.sig +0 -0
data.tar.gz.sig
ADDED
data/Manifest
ADDED
data/README.md
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
# Currency Switcher
|
2
|
+
|
3
|
+
## Description
|
4
|
+
|
5
|
+
This is a small library that converts currencies using exchange rates from http://exchange-rates.org web site.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
$ gem install currency_switcher
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
From the available list of currencies you can create methods in a format specified below and call them on Fixnums:
|
14
|
+
|
15
|
+
'from_currency'_to_'to_currency'
|
16
|
+
|
17
|
+
For example:
|
18
|
+
|
19
|
+
require 'currency_switcher'
|
20
|
+
3.usd_to_gbp # => converts 3 USD to GBP and returns 1.94
|
21
|
+
15.eur_to_aud # => converts 15 EURO to Australian Dollar and returns 19.61
|
22
|
+
|
23
|
+
## Available Currencies
|
24
|
+
|
25
|
+
aed => United Arab Emirates Dirham
|
26
|
+
amd => Armenian Dram
|
27
|
+
ang => Netherlands Antillian Guilder
|
28
|
+
ars => Argentine Peso
|
29
|
+
aud => Australian Dollar
|
30
|
+
bbd => Barbados Dollar
|
31
|
+
bdt => Bangladeshi Taka
|
32
|
+
bgn => Bulgarian Lev
|
33
|
+
bhd => Bahraini Dinar
|
34
|
+
bif => Burundi Franc
|
35
|
+
bmd => Bermudian Dollar
|
36
|
+
bnd => Brunei Dollar
|
37
|
+
bob => Bolivian Boliviano
|
38
|
+
brl => Brazilian Real
|
39
|
+
bsd => Bahamian Dollar
|
40
|
+
bwp => Botswana Pula
|
41
|
+
byr => Belarusian Ruble
|
42
|
+
bzd => Belize Dollar
|
43
|
+
cad => Canadian Dollar
|
44
|
+
chf => Swiss Franc
|
45
|
+
clp => Chilean Peso
|
46
|
+
cny => Chinese Yuan Renminbi
|
47
|
+
cop => Colombian Peso
|
48
|
+
crc => Costa Rican Colon
|
49
|
+
cup => Cuban Peso
|
50
|
+
cve => Cape Verde Escudo
|
51
|
+
czk => Czech Koruna
|
52
|
+
djf => Djibouti Franc
|
53
|
+
dkk => Danish Krone
|
54
|
+
dop => Dominican Peso
|
55
|
+
dzd => Algerian Dinar
|
56
|
+
eek => Estonian Kroon
|
57
|
+
egp => Egyptian Pound
|
58
|
+
etb => Ethiopian Birr
|
59
|
+
eur => Euro
|
60
|
+
fjd => Fiji Dollar
|
61
|
+
gbp => British Pound
|
62
|
+
ghs => Ghanaian Cedi
|
63
|
+
gmd => Gambian Dalasi
|
64
|
+
gtq => Guatemalan Quetzal
|
65
|
+
hkd => Hong Kong Dollar
|
66
|
+
hnl => Honduran Lempira
|
67
|
+
hrk => Croatian Kuna
|
68
|
+
htg => Haitian Gourde
|
69
|
+
huf => Hungarian Forint
|
70
|
+
idr => Indonesian Rupiah
|
71
|
+
ils => Israeli New Shekel
|
72
|
+
inr => Indian Rupee
|
73
|
+
iqd => Iraqi Dinar
|
74
|
+
irr => Iranian Rial
|
75
|
+
isk => Iceland Krona
|
76
|
+
jmd => Jamaican Dollar
|
77
|
+
jod => Jordanian Dinar
|
78
|
+
jpy => Japanese Yen
|
79
|
+
kes => Kenyan Shilling
|
80
|
+
khr => Cambodian Riel
|
81
|
+
krw => Korean Won
|
82
|
+
kwd => Kuwaiti Dinar
|
83
|
+
kyd => Cayman Islands Dollar
|
84
|
+
kzt => Kazakhstan Tenge
|
85
|
+
lak => Lao Kip
|
86
|
+
lbp => Lebanese Pound
|
87
|
+
lkr => Sri Lanka Rupee
|
88
|
+
lsl => Lesotho Loti
|
89
|
+
ltl => Lithuanian Litas
|
90
|
+
lvl => Latvian Lats
|
91
|
+
lyd => Libyan Dinar
|
92
|
+
mad => Moroccan Dirham
|
93
|
+
mdl => Moldovan Leu
|
94
|
+
mmk => Myanmar Kyat
|
95
|
+
mop => Macau Pataca
|
96
|
+
mur => Mauritius Rupee
|
97
|
+
mwk => Malawi Kwacha
|
98
|
+
mxn => Mexican Peso
|
99
|
+
myr => Malaysian Ringgit
|
100
|
+
ngn => Nigerian Naira
|
101
|
+
nio => Nicaraguan Cordoba Oro
|
102
|
+
nok => Norwegian Krone
|
103
|
+
npr => Nepalese Rupee
|
104
|
+
nzd => New Zealand Dollar
|
105
|
+
omr => Omani Rial
|
106
|
+
pab => Panamanian Balboa
|
107
|
+
pen => Peruvian Nuevo Sol
|
108
|
+
php => Philippine Peso
|
109
|
+
pkr => Pakistan Rupee
|
110
|
+
pln => Polish Zloty
|
111
|
+
pyg => Paraguay Guarani
|
112
|
+
qar => Qatari Rial
|
113
|
+
ron => Romanian Leu
|
114
|
+
rsd => Serbian Dinar
|
115
|
+
rub => Russian Ruble
|
116
|
+
rwf => Rwanda Franc
|
117
|
+
sar => Saudi Riyal
|
118
|
+
scr => Seychelles Rupee
|
119
|
+
sdd => Sudanese Dinar
|
120
|
+
sek => Swedish Krona
|
121
|
+
sgd => Singapore Dollar
|
122
|
+
sos => Somali Shilling
|
123
|
+
syp => Syrian Pound
|
124
|
+
szl => Swaziland Lilangeni
|
125
|
+
thb => Thai Baht
|
126
|
+
tnd => Tunisian Dinar
|
127
|
+
try => Turkish Lira
|
128
|
+
ttd => Trinidad and Tobago Dollar
|
129
|
+
twd => Taiwan Dollar
|
130
|
+
tzs => Tanzanian Shilling
|
131
|
+
uah => Ukraine Hryvnia
|
132
|
+
ugx => Uganda Shilling
|
133
|
+
usd => US Dollar
|
134
|
+
uyu => Uruguay Peso
|
135
|
+
vef => Venezuelan Bolivar
|
136
|
+
vnd => Vietnamese Dong
|
137
|
+
xaf => CFA BEAC Franc
|
138
|
+
xcd => East Caribbean Dollar
|
139
|
+
xof => CFA BCEAO Franc
|
140
|
+
xpf => CFP Franc
|
141
|
+
zar => South African Rand
|
142
|
+
zmk => Zambian Kwacha
|
143
|
+
zwd => Zimbabwe Dollar
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('currency_switcher', '0.0.1') do |p|
|
6
|
+
p.description = "Convert currencies using exchange rates from http://exchange-rates.org"
|
7
|
+
p.url = "http://github.com/staskie/currency_switcher"
|
8
|
+
p.author = "Dominik Staskiewicz"
|
9
|
+
p.email = "stadominik@gmail.com"
|
10
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
|
+
p.development_dependencies = []
|
12
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{currency_switcher}
|
5
|
+
s.version = "0.0.1"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Dominik Staskiewicz"]
|
9
|
+
s.cert_chain = ["/Users/dominik/Documents/keys/gem-public_cert.pem"]
|
10
|
+
s.date = %q{2011-01-07}
|
11
|
+
s.description = %q{Convert currencies using exchange rates from http://exchange-rates.org}
|
12
|
+
s.email = %q{stadominik@gmail.com}
|
13
|
+
s.extra_rdoc_files = ["README.md", "lib/currency_switcher.rb", "lib/currency_switcher/currencies.rb", "lib/currency_switcher/ext/fixnum.rb"]
|
14
|
+
s.files = ["README.md", "Rakefile", "lib/currency_switcher.rb", "lib/currency_switcher/currencies.rb", "lib/currency_switcher/ext/fixnum.rb", "test/helper.rb", "test/html/eur_to_usd.html", "test/html/usd_to_gbp.html", "test/test_currency_switcher.rb", "Manifest", "currency_switcher.gemspec"]
|
15
|
+
s.homepage = %q{http://github.com/staskie/currency_switcher}
|
16
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Currency_switcher", "--main", "README.md"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubyforge_project = %q{currency_switcher}
|
19
|
+
s.rubygems_version = %q{1.3.7}
|
20
|
+
s.signing_key = %q{/Users/dominik/Documents/keys/gem-private_key.pem}
|
21
|
+
s.summary = %q{Convert currencies using exchange rates from http://exchange-rates.org}
|
22
|
+
s.test_files = ["test/test_currency_switcher.rb"]
|
23
|
+
|
24
|
+
if s.respond_to? :specification_version then
|
25
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
26
|
+
s.specification_version = 3
|
27
|
+
|
28
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
29
|
+
else
|
30
|
+
end
|
31
|
+
else
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
$:.unshift(File.join(File.dirname(__FILE__), 'currency_switcher'))
|
5
|
+
|
6
|
+
require 'currencies'
|
7
|
+
require 'ext/fixnum'
|
8
|
+
|
9
|
+
module CurrencySwitcher
|
10
|
+
|
11
|
+
# URL for working out the exchange rate
|
12
|
+
URL = "http://exchange-rates.org/converter"
|
13
|
+
|
14
|
+
class << self
|
15
|
+
# Get 'from' currency
|
16
|
+
#
|
17
|
+
# Returns the Symbol of 'from' currency
|
18
|
+
attr_reader :from_currency
|
19
|
+
|
20
|
+
# Get 'to' currency
|
21
|
+
#
|
22
|
+
# Returns the Symbol of 'to' currency
|
23
|
+
attr_reader :to_currency
|
24
|
+
end
|
25
|
+
|
26
|
+
# Validates if a method called on Fixnum is a currency
|
27
|
+
# exchange method
|
28
|
+
#
|
29
|
+
# method - The String representing the method's name
|
30
|
+
#
|
31
|
+
# Examples
|
32
|
+
#
|
33
|
+
# CurrencySwitcher.valid_exchange_method?(usd_to_eur)
|
34
|
+
# # => true
|
35
|
+
#
|
36
|
+
# CurrencySwitcher.valid_exchange_method?(usd_to_fakecurrency)
|
37
|
+
# # => false
|
38
|
+
#
|
39
|
+
# Returns true if a method is valid or false if the method is invalid
|
40
|
+
def self.valid_exchange_method?(method)
|
41
|
+
if method =~ /(.+)_to_(.+)/
|
42
|
+
@from_currency = $1.to_sym
|
43
|
+
@to_currency = $2.to_sym
|
44
|
+
@method = method
|
45
|
+
|
46
|
+
both_currencies_valid? ? true : false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Check if 'from' and 'to' currencies are valid. They have to be defined
|
51
|
+
# in CURRENCIES hash
|
52
|
+
#
|
53
|
+
# Returns true if botch currencies are valid or false if one of them is invalid
|
54
|
+
def self.both_currencies_valid?
|
55
|
+
CURRENCIES.has_key?(from_currency) && CURRENCIES.has_key?(to_currency)
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
# Calculate the value from fixnum and exchange rate
|
60
|
+
#
|
61
|
+
# fixnum - The Fixnum representing how much should be converted
|
62
|
+
#
|
63
|
+
# Examples
|
64
|
+
#
|
65
|
+
# CurrencySwitcher.calculate_value(3)
|
66
|
+
# # => 5.23
|
67
|
+
#
|
68
|
+
# Returns float value of fixnum multiplied by exchange rate
|
69
|
+
# Raises StandardError if exchange rate is nil
|
70
|
+
def self.calculate_value(fixnum)
|
71
|
+
ex_rate = exchange_rate
|
72
|
+
raise StandardError, "Could not work out the result" if ex_rate.nil?
|
73
|
+
|
74
|
+
value = "%.2f" % (ex_rate * fixnum)
|
75
|
+
value.to_f
|
76
|
+
end
|
77
|
+
|
78
|
+
# Work out the exchange rate for a given URL.
|
79
|
+
# Parse the response and extract the value
|
80
|
+
#
|
81
|
+
# Returns the Float value of exchange rate or nil
|
82
|
+
def self.exchange_rate
|
83
|
+
doc = Nokogiri::HTML(open(self.link), nil, 'UTF-8')
|
84
|
+
doc.css('#ctl00_M_lblToAmount').text.to_f
|
85
|
+
rescue
|
86
|
+
end
|
87
|
+
|
88
|
+
# Create a customized URL for 'from' and 'to' currencies
|
89
|
+
#
|
90
|
+
# Returns the String representing a valid URL
|
91
|
+
def self.link
|
92
|
+
"#{URL}/#{from_currency.to_s.upcase}/#{to_currency.to_s.upcase}/1"
|
93
|
+
end
|
94
|
+
|
95
|
+
# Print the available list of currencies
|
96
|
+
#
|
97
|
+
# Returns the String with all the currencies
|
98
|
+
def self.currencies
|
99
|
+
CURRENCIES.keys.sort.each { |symbol| puts "#{symbol} => #{CURRENCIES[symbol]}"}
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module CurrencySwitcher
|
2
|
+
# Available currencies with descriptions
|
3
|
+
CURRENCIES = {
|
4
|
+
:dzd => "Algerian Dinar",
|
5
|
+
:ars => "Argentine Peso",
|
6
|
+
:amd => "Armenian Dram",
|
7
|
+
:aud => "Australian Dollar",
|
8
|
+
:bsd => "Bahamian Dollar",
|
9
|
+
:bhd => "Bahraini Dinar",
|
10
|
+
:bdt => "Bangladeshi Taka",
|
11
|
+
:bbd => "Barbados Dollar",
|
12
|
+
:byr => "Belarusian Ruble",
|
13
|
+
:bzd => "Belize Dollar",
|
14
|
+
:bmd => "Bermudian Dollar",
|
15
|
+
:bob => "Bolivian Boliviano",
|
16
|
+
:bwp => "Botswana Pula",
|
17
|
+
:brl => "Brazilian Real",
|
18
|
+
:gbp => "British Pound",
|
19
|
+
:bnd => "Brunei Dollar",
|
20
|
+
:bgn => "Bulgarian Lev",
|
21
|
+
:bif => "Burundi Franc",
|
22
|
+
:khr => "Cambodian Riel",
|
23
|
+
:cad => "Canadian Dollar",
|
24
|
+
:cve => "Cape Verde Escudo",
|
25
|
+
:kyd => "Cayman Islands Dollar",
|
26
|
+
:xof => "CFA BCEAO Franc",
|
27
|
+
:xaf => "CFA BEAC Franc",
|
28
|
+
:xpf => "CFP Franc",
|
29
|
+
:clp => "Chilean Peso",
|
30
|
+
:cny => "Chinese Yuan Renminbi",
|
31
|
+
:cop => "Colombian Peso",
|
32
|
+
:crc => "Costa Rican Colon",
|
33
|
+
:hrk => "Croatian Kuna",
|
34
|
+
:cup => "Cuban Peso",
|
35
|
+
:czk => "Czech Koruna",
|
36
|
+
:dkk => "Danish Krone",
|
37
|
+
:djf => "Djibouti Franc",
|
38
|
+
:dop => "Dominican Peso",
|
39
|
+
:xcd => "East Caribbean Dollar",
|
40
|
+
:egp => "Egyptian Pound",
|
41
|
+
:eek => "Estonian Kroon",
|
42
|
+
:etb => "Ethiopian Birr",
|
43
|
+
:eur => "Euro",
|
44
|
+
:fjd => "Fiji Dollar",
|
45
|
+
:gmd => "Gambian Dalasi",
|
46
|
+
:ghs => "Ghanaian Cedi",
|
47
|
+
:gtq => "Guatemalan Quetzal",
|
48
|
+
:htg => "Haitian Gourde",
|
49
|
+
:hnl => "Honduran Lempira",
|
50
|
+
:hkd => "Hong Kong Dollar",
|
51
|
+
:huf => "Hungarian Forint",
|
52
|
+
:isk => "Iceland Krona",
|
53
|
+
:inr => "Indian Rupee",
|
54
|
+
:idr => "Indonesian Rupiah",
|
55
|
+
:irr => "Iranian Rial",
|
56
|
+
:iqd => "Iraqi Dinar",
|
57
|
+
:ils => "Israeli New Shekel",
|
58
|
+
:jmd => "Jamaican Dollar",
|
59
|
+
:jpy => "Japanese Yen",
|
60
|
+
:jod => "Jordanian Dinar",
|
61
|
+
:kzt => "Kazakhstan Tenge",
|
62
|
+
:kes => "Kenyan Shilling",
|
63
|
+
:krw => "Korean Won",
|
64
|
+
:kwd => "Kuwaiti Dinar",
|
65
|
+
:lak => "Lao Kip",
|
66
|
+
:lvl => "Latvian Lats",
|
67
|
+
:lbp => "Lebanese Pound",
|
68
|
+
:lsl => "Lesotho Loti",
|
69
|
+
:lyd => "Libyan Dinar",
|
70
|
+
:ltl => "Lithuanian Litas",
|
71
|
+
:mop => "Macau Pataca",
|
72
|
+
:mwk => "Malawi Kwacha",
|
73
|
+
:myr => "Malaysian Ringgit",
|
74
|
+
:mur => "Mauritius Rupee",
|
75
|
+
:mxn => "Mexican Peso",
|
76
|
+
:mdl => "Moldovan Leu",
|
77
|
+
:mad => "Moroccan Dirham",
|
78
|
+
:mmk => "Myanmar Kyat",
|
79
|
+
:npr => "Nepalese Rupee",
|
80
|
+
:ang => "Netherlands Antillian Guilder",
|
81
|
+
:nzd => "New Zealand Dollar",
|
82
|
+
:nio => "Nicaraguan Cordoba Oro",
|
83
|
+
:ngn => "Nigerian Naira",
|
84
|
+
:nok => "Norwegian Krone",
|
85
|
+
:omr => "Omani Rial",
|
86
|
+
:pkr => "Pakistan Rupee",
|
87
|
+
:pab => "Panamanian Balboa",
|
88
|
+
:pyg => "Paraguay Guarani",
|
89
|
+
:pen => "Peruvian Nuevo Sol",
|
90
|
+
:php => "Philippine Peso",
|
91
|
+
:pln => "Polish Zloty",
|
92
|
+
:qar => "Qatari Rial",
|
93
|
+
:ron => "Romanian Leu",
|
94
|
+
:rub => "Russian Ruble",
|
95
|
+
:rwf => "Rwanda Franc",
|
96
|
+
:sar => "Saudi Riyal",
|
97
|
+
:rsd => "Serbian Dinar",
|
98
|
+
:scr => "Seychelles Rupee",
|
99
|
+
:sgd => "Singapore Dollar",
|
100
|
+
:sos => "Somali Shilling",
|
101
|
+
:zar => "South African Rand",
|
102
|
+
:lkr => "Sri Lanka Rupee",
|
103
|
+
:sdd => "Sudanese Dinar",
|
104
|
+
:szl => "Swaziland Lilangeni",
|
105
|
+
:sek => "Swedish Krona",
|
106
|
+
:chf => "Swiss Franc",
|
107
|
+
:syp => "Syrian Pound",
|
108
|
+
:twd => "Taiwan Dollar",
|
109
|
+
:tzs => "Tanzanian Shilling",
|
110
|
+
:thb => "Thai Baht",
|
111
|
+
:ttd => "Trinidad and Tobago Dollar",
|
112
|
+
:tnd => "Tunisian Dinar",
|
113
|
+
:try => "Turkish Lira",
|
114
|
+
:ugx => "Uganda Shilling",
|
115
|
+
:uah => "Ukraine Hryvnia",
|
116
|
+
:aed => "United Arab Emirates Dirham",
|
117
|
+
:uyu => "Uruguay Peso",
|
118
|
+
:usd => "US Dollar",
|
119
|
+
:vef => "Venezuelan Bolivar",
|
120
|
+
:vnd => "Vietnamese Dong",
|
121
|
+
:zmk => "Zambian Kwacha",
|
122
|
+
:zwd => "Zimbabwe Dollar"
|
123
|
+
}
|
124
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Numeric
|
2
|
+
# Overriding method_missing to add CurrencySwitcher methods
|
3
|
+
#
|
4
|
+
# sym - standard method_missing argument
|
5
|
+
# *args - standard method_missing argument
|
6
|
+
# &block - standard method_missing argument
|
7
|
+
#
|
8
|
+
# Examples
|
9
|
+
#
|
10
|
+
# 3.usd_to_eur
|
11
|
+
# 1200.gbp_to_pln
|
12
|
+
#
|
13
|
+
# Returns Float value of currency exchange result
|
14
|
+
# Raises NoMethodError if couldn't find a method
|
15
|
+
def method_missing(sym, *args, &block)
|
16
|
+
# Check if the missing method applies to CurrencySwitcher module
|
17
|
+
if CurrencySwitcher.valid_exchange_method?(sym)
|
18
|
+
return CurrencySwitcher.calculate_value(self)
|
19
|
+
else
|
20
|
+
super.method_missing(sym, *args, &block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|