-
Notifications
You must be signed in to change notification settings - Fork 34
/
convert.rb
100 lines (95 loc) · 3.11 KB
/
convert.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
require 'net/http'
require 'uri'
require 'json'
hasARGV = false
if !ARGV[0].empty?
hasARGV = true
end
output = Hash["items" => []]
data = JSON.parse(File.read('data.json'))
base = data['base']
units = data['units']
if hasARGV
str = ARGV[0].lstrip.gsub('$', 'usd').gsub('¥', 'cny').gsub('¥', 'jpy').gsub('£', 'gbp').gsub('€', 'eur')
to = str.match(/\sto\s/)
cy = nil
num = nil
target = nil
if to.nil?
num = str.match(/^\d+(.\d+)?/)
if !num.nil?
num = num[0]
end
cy = str.match(/\s*[a-zA-Z]{3}/)
if !cy.nil?
cy = cy[0].lstrip.upcase
end
else
matcher = str.match(/^(\d+(.\d+)?)\s*([a-zA-Z]{3})\sto\s([a-zA-Z]{3})/)
if !matcher.nil?
num = matcher[1]
cy = matcher[3].lstrip.upcase
target = matcher[4].lstrip.upcase
end
end
if str.empty? || num.nil? || cy.nil?
temp = Hash[
"title" => 'No result',
"icon" => Hash[
"path" => 'icon.png'
]
]
output["items"].push(temp)
else
if target.nil?
if units.include?(cy)
units.delete(cy)
end
uri = URI("https://api.exchangeratesapi.io/latest?base=#{cy}&symbols=#{units.join(',')}")
result = JSON.parse(Net::HTTP.get(uri))
result['rates'].each do |key, value|
temp = Hash[
"title" => "#{(num.to_f*value).round(2)} #{key}",
"subtitle" => "#{cy} : #{key} = 1 : #{value.round(4)} (Last Update: #{result["date"]})",
"icon" => Hash[
"path" => "flags/#{key}.png"
],
"arg" => "#{(num.to_f*value).round(2)}"
]
output["items"].push(temp)
end
else
uri = URI("https://api.exchangeratesapi.io/latest?base=#{cy}&symbols=#{target}")
result = JSON.parse(Net::HTTP.get(uri))
result['rates'].each do |key, value|
temp = Hash[
"title" => "#{(num.to_f*value).round(2)} #{key}",
"subtitle" => "#{cy} : #{key} = 1 : #{value.round(4)} (Last Update: #{result["date"]})",
"icon" => Hash[
"path" => "flags/#{key}.png"
],
"arg" => "#{(num.to_f*value).round(2)}"
]
output["items"].push(temp)
end
end
end
else
if units.include?(base)
units.delete(base)
end
uri = URI("https://api.exchangeratesapi.io/latest?base=#{base}&symbols=#{units.join(',')}")
result = JSON.parse(Net::HTTP.get(uri))
result['rates'].each do |key, value|
temp = Hash[
"title" => "#{base} : #{key} = 1 : #{value.round(4)} ",
"subtitle" => "Last Update: #{result["date"]}",
"icon" => Hash[
"path" => "flags/#{key}.png"
],
"arg" => "#{value.round(4)}"
]
output["items"].push(temp)
end
end
print output.to_json