Class: DolarHoy::Currency

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/dolarhoy/currency.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, buy, sell) ⇒ Currency

Returns a new instance of Currency.



10
11
12
13
14
# File 'lib/dolarhoy/currency.rb', line 10

def initialize(name, buy, sell)
  @name = sanitize_name(name)
  @buy = parse(buy)
  @sell = parse(sell)
end

Instance Attribute Details

#buyObject

Returns the value of attribute buy.



8
9
10
# File 'lib/dolarhoy/currency.rb', line 8

def buy
  @buy
end

#nameObject

Returns the value of attribute name.



8
9
10
# File 'lib/dolarhoy/currency.rb', line 8

def name
  @name
end

#sellObject

Returns the value of attribute sell.



8
9
10
# File 'lib/dolarhoy/currency.rb', line 8

def sell
  @sell
end

Instance Method Details

#<=>(other) ⇒ Object



16
17
18
# File 'lib/dolarhoy/currency.rb', line 16

def <=>(other)
  self.alias <=> other.alias
end

#aliasObject



59
60
61
# File 'lib/dolarhoy/currency.rb', line 59

def alias
  reverse_aliases[name]
end

#aliased?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/dolarhoy/currency.rb', line 55

def aliased?
  !! self.alias
end

#aliasesObject



44
45
46
# File 'lib/dolarhoy/currency.rb', line 44

def aliases
  @@aliases ||= YAML.load_file(File.expand_path(File.join(File.dirname(__FILE__), '..', 'aliases.yml')))
end

#averageObject



63
64
65
# File 'lib/dolarhoy/currency.rb', line 63

def average
  (buy + sell) / 2.0
end

#format(number) ⇒ Object



24
25
26
# File 'lib/dolarhoy/currency.rb', line 24

def format(number)
  "%.3f" % number
end

#parse(text) ⇒ Object



20
21
22
# File 'lib/dolarhoy/currency.rb', line 20

def parse(text)
  text[/([\d\.,]+)/, 1].to_f
end

#reverse_aliasesObject



48
49
50
51
52
53
# File 'lib/dolarhoy/currency.rb', line 48

def reverse_aliases
  @@reverse_aliases ||= aliases.inject({}) do |reverse, (code, names)|
    [*names].each { |name| reverse[name] = code }
    reverse
  end
end

#sanitize_name(name) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/dolarhoy/currency.rb', line 28

def sanitize_name(name)
  name = name.dup
  name.gsub!('Á', 'A')
  name.gsub!('É', 'E')
  name.gsub!('Í', 'I')
  name.gsub!('Ó', 'O')
  name.gsub!('Ú', 'U')
  name.gsub!("\r", " ")
  name.gsub!("\n", " ")
  name[/^([\w\s\.\$]+)/, 1].strip.capitalize.squeeze(' ')
end

#to_sObject



40
41
42
# File 'lib/dolarhoy/currency.rb', line 40

def to_s
  "#{self.alias} #{format buy} #{format sell} #{format average}"
end