Method: Xsys::Model::Product#initialize

Defined in:
lib/xsys/model/product.rb

#initialize(attributes = {}) ⇒ Product

Returns a new instance of Product.



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
# File 'lib/xsys/model/product.rb', line 18

def initialize(attributes={})
  time_fields = ['cost_update_time', 'last_cost_update_time', 'price_update_time', 'real_cost_update_time']
  date_fields = ['cost_update_date', 'last_cost_update_date', 'price_update_date', 
    'real_cost_update_date', 'availability_date']
  decimal_fields = ['vat_rate', 'taxed_cost', 'vat_cost', 'total_cost', 'last_total_cost', 'last_taxed_cost', 
    'regular_price', 'reduced_price', 'credit_card_price', 'total_real_cost']

  attributes.each do |k, v|
    if k.to_s == 'category'
      @category = ProductCategory.new(v) unless v.nil?
    elsif k.to_s == 'provider'
      @provider = ProductProvider.new(v) unless v.nil?
    elsif k.to_s == 'stocks'
      @stocks = v.map { |x| Stock.new(x) } unless v.nil?
    elsif k.to_s == 'prices'
      @prices = v.map { |x| ProductPriceList.new(x) } unless v.nil?
    elsif k.to_s == 'packages'
      @packages = v.map { |x| ProductPackage.new(x) } unless v.nil?
    elsif time_fields.include?(k.to_s)
      self.send("#{k}=", Time.parse(v)) unless v.nil?
    elsif date_fields.include?(k.to_s)
      self.send("#{k}=", Date.parse(v)) unless v.nil?
    elsif decimal_fields.include?(k.to_s)
      self.send("#{k}=", BigDecimal.new(v)) unless v.nil?
    else
      self.send("#{k}=", v) if self.respond_to?(k)
    end
  end
end