Class: Joyent::Cloud::Pricing::Configuration

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/pricing/configuration.rb

Constant Summary collapse

@@lock =
Mutex.new

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers

#currency_format, #monthly_from_hourly

Constructor Details

#initialize(hash = {}) ⇒ Configuration

Returns a new instance of Configuration.



39
40
41
# File 'lib/pricing/configuration.rb', line 39

def initialize(hash = {})
  @config = hash.symbolize_keys
end

Instance Attribute Details

#configObject

map of image names to prices



37
38
39
# File 'lib/pricing/configuration.rb', line 37

def config
  @config
end

Class Method Details

.from_url(url = JOYENT_URL) ⇒ Object



22
23
24
# File 'lib/pricing/configuration.rb', line 22

def from_url(url = JOYENT_URL)
  set_instance(new(Joyent::Cloud::Pricing::Scraper.new.scrape(url)))
end

.from_yaml(filename = PRICING_FILENAME) ⇒ Object



15
16
17
18
19
20
# File 'lib/pricing/configuration.rb', line 15

def from_yaml(filename = PRICING_FILENAME)
  legacy_prices = YAML.load(File.read(LEGACY_FILENAME)) rescue nil
  legacy_prices ||= {}
  current_prices = YAML.load(File.read(filename))[:pricing]
  set_instance(new(current_prices.merge(legacy_prices)))
end

.instance(reload = false) ⇒ Object



10
11
12
13
# File 'lib/pricing/configuration.rb', line 10

def instance(reload = false)
  @last_instance = from_yaml if reload || @last_instance.nil?
  @last_instance
end

Instance Method Details

#cost(flavor) ⇒ Object



43
44
45
46
# File 'lib/pricing/configuration.rb', line 43

def cost(flavor)
  f = config[flavor.to_sym]
  f.nil? ? nil : f[:cost]
end

#flavor(flavor) ⇒ Object



48
49
50
51
52
53
# File 'lib/pricing/configuration.rb', line 48

def flavor(flavor)
  f = config[flavor.to_sym]
  return nil if f.nil?
  f.delete(:name) # name is saved in YAML, but it's not in Flavor class hash attributes
  Flavor.new(flavor, f)
end

#merge(additional_pricing) ⇒ Object



67
68
69
# File 'lib/pricing/configuration.rb', line 67

def merge(additional_pricing)
  config.merge!(additional_pricing)
end

#monthly(flavor) ⇒ Object



55
56
57
58
# File 'lib/pricing/configuration.rb', line 55

def monthly(flavor)
  f = self.cost(flavor)
  f.nil? ? 0 : monthly_from_hourly(f)
end

#save_yaml(filename = PRICING_FILENAME) ⇒ Object



60
61
62
63
64
65
# File 'lib/pricing/configuration.rb', line 60

def save_yaml(filename = PRICING_FILENAME)
  File.open(filename, 'w') do |f|
    YAML.dump({:date => Time.now.to_s,
               :pricing => config, }, f)
  end
end