ambito 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -1
- data/config/dollars.yml +16 -0
- data/exe/ambito +1 -1
- data/lib/ambito/cli.rb +23 -1
- data/lib/ambito/dollar.rb +30 -28
- data/lib/ambito/gateway.rb +30 -0
- data/lib/ambito/rate.rb +42 -0
- data/lib/ambito/version.rb +1 -1
- data/lib/ambito.rb +6 -19
- metadata +5 -3
- data/sig/ambito.rbs +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9108ecf4cec0a17c75f766b42d6aab71e970927c6d853cdd7bcaee2b57d0c49a
|
4
|
+
data.tar.gz: 4289936f867c7f384282f695a1a256acf237cf7eb24abd1206a64d9054a58959
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c0f57262a90b245b8ff3f54ab60f0d35a24fd3b746948a0d06b199885fbbd0f757f5f0297896a4eeba74b42afd8b31101b5f9b57adfd067238f469756152f27
|
7
|
+
data.tar.gz: 2d080b8844e91cea05c546cdd9c9684fb385617ada3a85f6689b0c28c9447653c6da15a4d944fe35b3eeba72c5719464c0ecfc7505c144cb14e6e9f54ce33f0a
|
data/CHANGELOG.md
CHANGED
data/config/dollars.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
- !ruby/object:Ambito::Dollar
|
2
|
+
name: oficial
|
3
|
+
display: Oficial
|
4
|
+
endpoint: /dolar/oficial/variacion
|
5
|
+
- !ruby/object:Ambito::Dollar
|
6
|
+
name: informal
|
7
|
+
display: Informal
|
8
|
+
endpoint: /dolar/informal/variacion
|
9
|
+
- !ruby/object:Ambito::Dollar
|
10
|
+
name: mep
|
11
|
+
display: MEP
|
12
|
+
endpoint: /dolarrava/mep/variacion
|
13
|
+
- !ruby/object:Ambito::Dollar
|
14
|
+
name: cripto
|
15
|
+
display: Cripto
|
16
|
+
endpoint: /dolarcripto/variacion
|
data/exe/ambito
CHANGED
data/lib/ambito/cli.rb
CHANGED
@@ -1,7 +1,29 @@
|
|
1
|
+
require "optparse"
|
2
|
+
|
1
3
|
module Ambito
|
2
4
|
class CLI
|
5
|
+
def initialize(argv)
|
6
|
+
@argv = argv
|
7
|
+
end
|
8
|
+
|
3
9
|
def run
|
4
|
-
|
10
|
+
if options.any?
|
11
|
+
puts Ambito.rate(*options)
|
12
|
+
else
|
13
|
+
puts Ambito.rates
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def options
|
20
|
+
[].tap do |parsed_options|
|
21
|
+
OptionParser.new do |options|
|
22
|
+
options.on("-d", "--dollar DOLLAR", "Select the rate") do |dollar|
|
23
|
+
parsed_options << dollar
|
24
|
+
end
|
25
|
+
end.parse(@argv)
|
26
|
+
end
|
5
27
|
end
|
6
28
|
end
|
7
29
|
end
|
data/lib/ambito/dollar.rb
CHANGED
@@ -1,43 +1,45 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
1
3
|
module Ambito
|
2
4
|
class Dollar
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
LIST = YAML.safe_load_file(
|
6
|
+
"./config/dollars.yml",
|
7
|
+
permitted_classes: [Ambito::Dollar]
|
8
|
+
).freeze
|
9
|
+
|
10
|
+
attr_reader :name, :display, :endpoint
|
11
|
+
|
12
|
+
def initialize(name:, display:, endpoint:)
|
13
|
+
@name = name
|
14
|
+
@display = display
|
15
|
+
@endpoint = endpoint
|
11
16
|
end
|
12
17
|
|
13
|
-
def
|
14
|
-
|
18
|
+
def rate
|
19
|
+
gateway = Gateway.new(endpoint:)
|
20
|
+
buy, sell, variation = gateway.get("compra", "venta", "variacion")
|
21
|
+
|
22
|
+
Rate.new(dollar: self, buy:, sell:, variation:)
|
15
23
|
end
|
16
24
|
|
17
25
|
def to_s
|
18
|
-
|
26
|
+
display
|
19
27
|
end
|
20
28
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
def emoji
|
26
|
-
if variation.positive?
|
27
|
-
EMOJI[:up]
|
28
|
-
elsif variation.negative?
|
29
|
-
EMOJI[:down]
|
30
|
-
else
|
31
|
-
EMOJI[:equal]
|
29
|
+
class << self
|
30
|
+
def all
|
31
|
+
LIST
|
32
32
|
end
|
33
|
-
end
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
def find(name)
|
35
|
+
LIST.find do |dollar|
|
36
|
+
dollar.name == String(name)
|
37
|
+
end
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
40
|
+
def where(name: nil)
|
41
|
+
name && find(name) || all
|
42
|
+
end
|
41
43
|
end
|
42
44
|
end
|
43
45
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "net/http"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
module Ambito
|
7
|
+
class Gateway
|
8
|
+
BASE_URL = "https://mercados.ambito.com"
|
9
|
+
|
10
|
+
def initialize(endpoint:)
|
11
|
+
@endpoint = endpoint
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(*)
|
15
|
+
JSON.parse(request).values_at(*)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
attr_reader :endpoint
|
21
|
+
|
22
|
+
def request
|
23
|
+
Net::HTTP.get(uri)
|
24
|
+
end
|
25
|
+
|
26
|
+
def uri
|
27
|
+
URI.join(BASE_URL, endpoint)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/ambito/rate.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Ambito
|
2
|
+
class Rate
|
3
|
+
TRENDS = {up: "📈", down: "📉", equal: "📊"}.freeze
|
4
|
+
|
5
|
+
def initialize(dollar:, buy:, sell:, variation:)
|
6
|
+
@dollar = dollar
|
7
|
+
@buy = float(buy)
|
8
|
+
@sell = float(sell)
|
9
|
+
@variation = float(variation)
|
10
|
+
end
|
11
|
+
|
12
|
+
def average
|
13
|
+
(buy + sell) / 2
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s
|
17
|
+
"#{dollar}: $ #{format(average)} #{trend} #{format(variation)}%"
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
attr_reader :dollar, :buy, :sell, :variation
|
23
|
+
|
24
|
+
def trend
|
25
|
+
if variation.positive?
|
26
|
+
TRENDS[:up]
|
27
|
+
elsif variation.negative?
|
28
|
+
TRENDS[:down]
|
29
|
+
else
|
30
|
+
TRENDS[:equal]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def float(value)
|
35
|
+
value.tr(",", ".").to_f
|
36
|
+
end
|
37
|
+
|
38
|
+
def format(number)
|
39
|
+
sprintf("%.2f" % number)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/ambito/version.rb
CHANGED
data/lib/ambito.rb
CHANGED
@@ -1,32 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "net/http"
|
4
|
-
require "json"
|
5
3
|
require_relative "ambito/cli"
|
6
4
|
require_relative "ambito/dollar"
|
5
|
+
require_relative "ambito/gateway"
|
6
|
+
require_relative "ambito/rate"
|
7
7
|
require_relative "ambito/version"
|
8
8
|
|
9
9
|
module Ambito
|
10
|
-
class Error < StandardError; end
|
11
|
-
|
12
|
-
DOLLARS = %w[
|
13
|
-
dolar/oficial
|
14
|
-
dolar/informal
|
15
|
-
dolarrava/mep
|
16
|
-
].freeze
|
17
|
-
|
18
10
|
class << self
|
19
|
-
def
|
20
|
-
|
21
|
-
res = JSON.parse(Net::HTTP.get(uri(dollar)))
|
22
|
-
type = dollar.split("/").last
|
23
|
-
buy, sell, variation = res.values_at("compra", "venta", "variacion")
|
24
|
-
Dollar.new(type:, buy:, sell:, variation:)
|
25
|
-
end
|
11
|
+
def rates
|
12
|
+
Dollar.all.map(&:rate)
|
26
13
|
end
|
27
14
|
|
28
|
-
def
|
29
|
-
|
15
|
+
def rate(dollar)
|
16
|
+
Dollar.find(dollar).rate
|
30
17
|
end
|
31
18
|
end
|
32
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ambito
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ariel Rzezak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A Ruby gem for retrieving real-time USD exchange rates and financial
|
14
14
|
data.
|
@@ -25,12 +25,14 @@ files:
|
|
25
25
|
- README.md
|
26
26
|
- Rakefile
|
27
27
|
- ambito.gemspec
|
28
|
+
- config/dollars.yml
|
28
29
|
- exe/ambito
|
29
30
|
- lib/ambito.rb
|
30
31
|
- lib/ambito/cli.rb
|
31
32
|
- lib/ambito/dollar.rb
|
33
|
+
- lib/ambito/gateway.rb
|
34
|
+
- lib/ambito/rate.rb
|
32
35
|
- lib/ambito/version.rb
|
33
|
-
- sig/ambito.rbs
|
34
36
|
homepage: https://github.com/arzezak/ambito
|
35
37
|
licenses:
|
36
38
|
- MIT
|
data/sig/ambito.rbs
DELETED