ambito 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9108ecf4cec0a17c75f766b42d6aab71e970927c6d853cdd7bcaee2b57d0c49a
4
- data.tar.gz: 4289936f867c7f384282f695a1a256acf237cf7eb24abd1206a64d9054a58959
3
+ metadata.gz: 626b627c3f3718bde249aa3d225720dcf255d7533409f0b5fa099a1f5152edb5
4
+ data.tar.gz: cd38318ce750b2c7e594e79cad1aba342dc8dac0b89519a2bf1464d8ac464fd1
5
5
  SHA512:
6
- metadata.gz: 5c0f57262a90b245b8ff3f54ab60f0d35a24fd3b746948a0d06b199885fbbd0f757f5f0297896a4eeba74b42afd8b31101b5f9b57adfd067238f469756152f27
7
- data.tar.gz: 2d080b8844e91cea05c546cdd9c9684fb385617ada3a85f6689b0c28c9447653c6da15a4d944fe35b3eeba72c5719464c0ecfc7505c144cb14e6e9f54ce33f0a
6
+ metadata.gz: 2860ca43c23793ca8b82463dd326e7ff4a1bdbdd40ae67c085b843635d4cc40a4ffc25616e1279abde3ec34bbe5edf03e262aa7e3e27508bb5d4828b96517e13
7
+ data.tar.gz: abcbe303761efed98fc3924fb0865eee13a58c819c51a350698a345c3e0d025678a5a92f4f2e169c30ebd96ee05f68ba7e43816cb5443e02b944cf5c636dc912
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.0] - 2023-11-27
4
+
5
+ ### Added
6
+
7
+ - Multi-threaded requests
8
+
9
+ ## [0.2.1] - 2023-11-27
10
+
11
+ ### Fixed
12
+
13
+ - Correct path when loading configuration
14
+
3
15
  ## [0.2.0] - 2023-11-24
4
16
 
5
17
  ### Added
data/config/dollars.yml CHANGED
@@ -1,7 +1,11 @@
1
1
  - !ruby/object:Ambito::Dollar
2
- name: oficial
3
- display: Oficial
4
- endpoint: /dolar/oficial/variacion
2
+ name: ccl
3
+ display: CCL
4
+ endpoint: /dolarrava/cl/variacion
5
+ - !ruby/object:Ambito::Dollar
6
+ name: cripto
7
+ display: Cripto
8
+ endpoint: /dolarcripto/variacion
5
9
  - !ruby/object:Ambito::Dollar
6
10
  name: informal
7
11
  display: Informal
@@ -11,6 +15,10 @@
11
15
  display: MEP
12
16
  endpoint: /dolarrava/mep/variacion
13
17
  - !ruby/object:Ambito::Dollar
14
- name: cripto
15
- display: Cripto
16
- endpoint: /dolarcripto/variacion
18
+ name: oficial
19
+ display: Oficial
20
+ endpoint: /dolar/oficial/variacion
21
+ - !ruby/object:Ambito::Dollar
22
+ name: turista
23
+ display: Turista
24
+ endpoint: /dolarturista/variacion
data/lib/ambito/cli.rb CHANGED
@@ -7,8 +7,11 @@ module Ambito
7
7
  end
8
8
 
9
9
  def run
10
- if options.any?
11
- puts Ambito.rate(*options)
10
+ case options
11
+ in {dollar:}
12
+ puts Ambito.rate(dollar)
13
+ in {version: true}
14
+ puts Ambito::VERSION
12
15
  else
13
16
  puts Ambito.rates
14
17
  end
@@ -17,10 +20,13 @@ module Ambito
17
20
  private
18
21
 
19
22
  def options
20
- [].tap do |parsed_options|
23
+ {}.tap do |parsed_options|
21
24
  OptionParser.new do |options|
22
25
  options.on("-d", "--dollar DOLLAR", "Select the rate") do |dollar|
23
- parsed_options << dollar
26
+ parsed_options[:dollar] = dollar
27
+ end
28
+ options.on("-v", "--version", "Show version") do
29
+ parsed_options[:version] = true
24
30
  end
25
31
  end.parse(@argv)
26
32
  end
data/lib/ambito/dollar.rb CHANGED
@@ -3,7 +3,7 @@ require "yaml"
3
3
  module Ambito
4
4
  class Dollar
5
5
  LIST = YAML.safe_load_file(
6
- "./config/dollars.yml",
6
+ "#{__dir__}/../../config/dollars.yml",
7
7
  permitted_classes: [Ambito::Dollar]
8
8
  ).freeze
9
9
 
@@ -17,9 +17,9 @@ module Ambito
17
17
 
18
18
  def rate
19
19
  gateway = Gateway.new(endpoint:)
20
- buy, sell, variation = gateway.get("compra", "venta", "variacion")
20
+ buy, sell, value, variation = gateway.get("compra", "venta", "valor", "variacion")
21
21
 
22
- Rate.new(dollar: self, buy:, sell:, variation:)
22
+ Rate.new(dollar: self, buy:, sell:, value:, variation:)
23
23
  end
24
24
 
25
25
  def to_s
@@ -36,10 +36,6 @@ module Ambito
36
36
  dollar.name == String(name)
37
37
  end
38
38
  end
39
-
40
- def where(name: nil)
41
- name && find(name) || all
42
- end
43
39
  end
44
40
  end
45
41
  end
@@ -0,0 +1,27 @@
1
+ module Ambito
2
+ class Price
3
+ attr_reader :quote
4
+
5
+ def initialize(quote)
6
+ @quote = parse(quote)
7
+ end
8
+
9
+ def +(other)
10
+ quote + other.quote
11
+ end
12
+
13
+ def parse(quote)
14
+ String(quote).tr(",", ".").to_f
15
+ end
16
+
17
+ def to_s
18
+ sprintf("$ %.2f" % quote)
19
+ end
20
+
21
+ class << self
22
+ def [](quote)
23
+ quote && new(quote) || nil
24
+ end
25
+ end
26
+ end
27
+ end
data/lib/ambito/rate.rb CHANGED
@@ -2,41 +2,28 @@ module Ambito
2
2
  class Rate
3
3
  TRENDS = {up: "📈", down: "📉", equal: "📊"}.freeze
4
4
 
5
- def initialize(dollar:, buy:, sell:, variation:)
5
+ def initialize(dollar:, buy:, sell:, value:, variation:)
6
6
  @dollar = dollar
7
- @buy = float(buy)
8
- @sell = float(sell)
9
- @variation = float(variation)
7
+ @buy = Price[buy]
8
+ @sell = Price[sell]
9
+ @value = Price[value]
10
+ @variation = Variation[variation]
10
11
  end
11
12
 
12
13
  def average
13
- (buy + sell) / 2
14
+ Price[(buy + sell) / 2]
14
15
  end
15
16
 
16
17
  def to_s
17
- "#{dollar}: $ #{format(average)} #{trend} #{format(variation)}%"
18
+ "#{dollar}: #{price} #{variation.trend} #{variation}"
18
19
  end
19
20
 
20
21
  private
21
22
 
22
- attr_reader :dollar, :buy, :sell, :variation
23
+ attr_reader :dollar, :buy, :sell, :value, :variation
23
24
 
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)
25
+ def price
26
+ value || average
40
27
  end
41
28
  end
42
29
  end
@@ -0,0 +1,37 @@
1
+ module Ambito
2
+ class Variation
3
+ TRENDS = {up: "📈", down: "📉", equal: "📊"}.freeze
4
+
5
+ attr_reader :value
6
+
7
+ def initialize(value)
8
+ @value = parse(value)
9
+ end
10
+
11
+ def to_s
12
+ sprintf("%.2f" % value) << "%"
13
+ end
14
+
15
+ def trend
16
+ if value.positive?
17
+ TRENDS[:up]
18
+ elsif value.negative?
19
+ TRENDS[:down]
20
+ else
21
+ TRENDS[:equal]
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def parse(value)
28
+ value.tr(",", ".").to_f
29
+ end
30
+
31
+ class << self
32
+ def [](value)
33
+ new(value)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ambito
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/ambito.rb CHANGED
@@ -3,13 +3,19 @@
3
3
  require_relative "ambito/cli"
4
4
  require_relative "ambito/dollar"
5
5
  require_relative "ambito/gateway"
6
+ require_relative "ambito/price"
6
7
  require_relative "ambito/rate"
8
+ require_relative "ambito/variation"
7
9
  require_relative "ambito/version"
8
10
 
9
11
  module Ambito
10
12
  class << self
11
13
  def rates
12
- Dollar.all.map(&:rate)
14
+ Dollar.all.map do |dollar|
15
+ Thread.new do
16
+ dollar.rate
17
+ end
18
+ end.map(&:value)
13
19
  end
14
20
 
15
21
  def rate(dollar)
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.2.0
4
+ version: 0.3.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-24 00:00:00.000000000 Z
11
+ date: 2023-11-27 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.
@@ -31,7 +31,9 @@ files:
31
31
  - lib/ambito/cli.rb
32
32
  - lib/ambito/dollar.rb
33
33
  - lib/ambito/gateway.rb
34
+ - lib/ambito/price.rb
34
35
  - lib/ambito/rate.rb
36
+ - lib/ambito/variation.rb
35
37
  - lib/ambito/version.rb
36
38
  homepage: https://github.com/arzezak/ambito
37
39
  licenses: