currency_converter_CIS 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/country_data.rb +22 -0
- data/lib/currencies_code.rb +124 -0
- data/lib/currency.rb +46 -0
- data/lib/currency_converter_cis.rb +27 -0
- data/lib/data/countries.yaml +7128 -0
- data/lib/geo_request.rb +6 -0
- metadata +79 -0
data/lib/country_data.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "geo_request.rb")
|
2
|
+
module CountryData
|
3
|
+
|
4
|
+
class Country
|
5
|
+
def initialize(hashs={})
|
6
|
+
hashs.each do |k,v|
|
7
|
+
self.instance_variable_set("@#{k}", v)
|
8
|
+
self.class.send(:define_method, k, proc{self.instance_variable_get("@#{k}")})
|
9
|
+
self.class.send(:define_method, "#{k}=", proc{|v| self.instance_variable_set("@#{k}", v)})
|
10
|
+
end
|
11
|
+
end
|
12
|
+
def self.country_by_id(str)
|
13
|
+
data = YAML.load(File.read(File.join(File.dirname(__FILE__), 'data', 'countries.yaml')).to_s)
|
14
|
+
data[str].nil? ? nil : self.new(data[str])
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.country_by_ip(ip)
|
18
|
+
self.country_by_id(GeoRequest.location(ip))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
class CurrencyCode
|
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
|
data/lib/currency.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Currency
|
2
|
+
|
3
|
+
# CURRENCIES = {:dzd => "Algerian Dinar",:ars => "Argentine Peso",:amd => "Armenian Dram",:aud => "Australian Dollar",:bsd => "Bahamian Dollar",:bhd => "Bahraini Dinar",:bdt => "Bangladeshi Taka",:bbd => "Barbados Dollar",:byr => "Belarusian Ruble",:bzd => "Belize Dollar",:bmd => "Bermudian Dollar",:bob => "Bolivian Boliviano",:bwp => "Botswana Pula",:brl => "Brazilian Real",:gbp => "British Pound",:bnd => "Brunei Dollar",:bgn => "Bulgarian Lev",:bif => "Burundi Franc",:khr => "Cambodian Riel",:cad => "Canadian Dollar",:cve => "Cape Verde Escudo",:kyd => "Cayman Islands Dollar",:xof => "CFA BCEAO Franc",:xaf => "CFA BEAC Franc",:xpf => "CFP Franc",:clp => "Chilean Peso",:cny => "Chinese Yuan Renminbi",:cop => "Colombian Peso",:crc => "Costa Rican Colon",:hrk => "Croatian Kuna",:cup => "Cuban Peso",:czk => "Czech Koruna",:dkk => "Danish Krone",:djf => "Djibouti Franc",:dop => "Dominican Peso",:xcd => "East Caribbean Dollar",:egp => "Egyptian Pound",:eek => "Estonian Kroon",:etb => "Ethiopian Birr",:eur => "Euro",:fjd => "Fiji Dollar",:gmd => "Gambian Dalasi",:ghs => "Ghanaian Cedi",:gtq => "Guatemalan Quetzal",:htg => "Haitian Gourde",:hnl => "Honduran Lempira",:hkd => "Hong Kong Dollar",:huf => "Hungarian Forint",:isk => "Iceland Krona",:inr => "Indian Rupee",:idr => "Indonesian Rupiah",:irr => "Iranian Rial",:iqd => "Iraqi Dinar",:ils => "Israeli New Shekel",:jmd => "Jamaican Dollar",:jpy => "Japanese Yen",:jod => "Jordanian Dinar",:kzt => "Kazakhstan Tenge",:kes => "Kenyan Shilling",:krw => "Korean Won",:kwd => "Kuwaiti Dinar",:lak => "Lao Kip",:lvl => "Latvian Lats",:lbp => "Lebanese Pound",:lsl => "Lesotho Loti",:lyd => "Libyan Dinar",:ltl => "Lithuanian Litas",:mop => "Macau Pataca",:mwk => "Malawi Kwacha",:myr => "Malaysian Ringgit",:mur => "Mauritius Rupee",:mxn => "Mexican Peso",:mdl => "Moldovan Leu",:mad => "Moroccan Dirham",:mmk => "Myanmar Kyat",:npr => "Nepalese Rupee",:ang => "Netherlands Antillian Guilder",:nzd => "New Zealand Dollar",:nio => "Nicaraguan Cordoba Oro",:ngn => "Nigerian Naira",:nok => "Norwegian Krone",:omr => "Omani Rial",:pkr => "Pakistan Rupee",:pab => "Panamanian Balboa",:pyg => "Paraguay Guarani",:pen => "Peruvian Nuevo Sol",:php => "Philippine Peso",:pln => "Polish Zloty",:qar => "Qatari Rial",:ron => "Romanian Leu",:rub => "Russian Ruble",:rwf => "Rwanda Franc",:sar => "Saudi Riyal",:rsd => "Serbian Dinar",:scr => "Seychelles Rupee",:sgd => "Singapore Dollar",:sos => "Somali Shilling",:zar => "South African Rand",:lkr => "Sri Lanka Rupee",:sdd => "Sudanese Dinar",:szl => "Swaziland Lilangeni",:sek => "Swedish Krona",:chf => "Swiss Franc",:syp => "Syrian Pound",:twd => "Taiwan Dollar",:tzs => "Tanzanian Shilling",:thb => "Thai Baht",:ttd => "Trinidad and Tobago Dollar",:tnd => "Tunisian Dinar",:try => "Turkish Lira",:ugx => "Uganda Shilling",:uah => "Ukraine Hryvnia",:aed => "United Arab Emirates Dirham",:uyu => "Uruguay Peso",:usd => "US Dollar",:vef => "Venezuelan Bolivar",:vnd => "Vietnamese Dong",:zmk => "Zambian Kwacha",:zwd => "Zimbabwe Dollar"}
|
4
|
+
URL = "http://exchange-rates.org/converter"
|
5
|
+
def self.exchange(money, from, to)
|
6
|
+
@from_currency = from.downcase.to_sym
|
7
|
+
@to_currency = to.downcase.to_sym
|
8
|
+
|
9
|
+
raise StandardError, "From currency #{@from_currency} is invalid" unless self.from_currency_is_valid?
|
10
|
+
raise StandardError, "To currency #{@to_currency} is invalid" unless self.to_currency_is_valid?
|
11
|
+
|
12
|
+
self.calculate(money)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.calculate(money)
|
16
|
+
ex_rate = exchange_rate
|
17
|
+
raise StandardError, "Could not find out the result" if ex_rate.nil?
|
18
|
+
|
19
|
+
result = "%.2f" % (ex_rate * money)
|
20
|
+
result.to_f
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.exchange_rate
|
24
|
+
begin
|
25
|
+
doc = Nokogiri::HTML(open(url), nil, 'UTF-8')
|
26
|
+
doc.css('#ctl00_M_lblToAmount').text.to_f
|
27
|
+
rescue
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.url
|
33
|
+
"#{URL}/#{@from_currency.to_s.upcase}/#{@to_currency.to_s.upcase}/1"
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def self.from_currency_is_valid?
|
40
|
+
CurrencyCode::CURRENCIES.has_key?(@from_currency)
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.to_currency_is_valid?
|
44
|
+
CurrencyCode::CURRENCIES.has_key?(@to_currency)
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'geocoder'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'open-uri'
|
4
|
+
require 'yaml'
|
5
|
+
require File.join(File.dirname(__FILE__), "currencies_code.rb")
|
6
|
+
require File.join(File.dirname(__FILE__), "country_data.rb")
|
7
|
+
require File.join(File.dirname(__FILE__), "currency.rb")
|
8
|
+
module CurrencyConverterCis
|
9
|
+
|
10
|
+
def self.country_by_code(str)
|
11
|
+
CountryData::Country.country_by_id(str)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.country_by_ip(str)
|
15
|
+
CountryData::Country.country_by_ip(str)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.exchange(money, from, to)
|
19
|
+
Currency.exchange(money, from, to)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|