module PopulateMe::DocumentMixins::Typecasting

Public Instance Methods

typecast(k, v) click to toggle source

This module deals with typecasting the fields when they are received as strings, generally from a form or a csv file

# File lib/populate_me/document_mixins/typecasting.rb, line 9
def typecast k, v
  unless self.class.fields.key?(k)
    return WebUtils.automatic_typecast(v) 
  end
  f = self.class.fields[k].dup
  meth = "typecast_#{f[:type]}".to_sym
  unless respond_to? meth
    return WebUtils.automatic_typecast(v, [f[:type],:nil])
  end
  __send__ meth, k, v
end
typecast_attachment(k, v) click to toggle source
# File lib/populate_me/document_mixins/typecasting.rb, line 57
def typecast_attachment k, v
  attached = self.attachment k
  if WebUtils.blank? v
    attached.delete_all
    return nil
  elsif v.is_a?(Hash)&&v.key?(:tempfile)
    return attached.create v
  end
end
typecast_date(k, v) click to toggle source
# File lib/populate_me/document_mixins/typecasting.rb, line 38
def typecast_date k, v
  if v[/\d\d(\/|-)\d\d(\/|-)\d\d\d\d/]
    Date.parse v
  elsif v[/\d\d\d\d(\/|-)\d\d(\/|-)\d\d/]
    Date.parse v
  else
    nil
  end
end
typecast_datetime(k, v) click to toggle source
# File lib/populate_me/document_mixins/typecasting.rb, line 48
def typecast_datetime k, v
  if v[/\d\d(\/|-)\d\d(\/|-)\d\d\d\d \d\d?:\d\d?:\d\d?/]
    d,m,y,h,min,s = v.split(/[-:\s\/]/)
    Time.utc(y,m,d,h,min,s)
  else
    nil
  end
end
typecast_integer(k, v) click to toggle source
# File lib/populate_me/document_mixins/typecasting.rb, line 21
def typecast_integer k, v
  v.to_i
end
typecast_price(k, v) click to toggle source
# File lib/populate_me/document_mixins/typecasting.rb, line 25
def typecast_price k, v
  return nil if WebUtils.blank?(v)
  WebUtils.parse_price(v)
end
typecast_select(k, v) click to toggle source
# File lib/populate_me/document_mixins/typecasting.rb, line 30
def typecast_select k, v
  if v.is_a?(Array)
    v.reject{|str| str=='nil' }
  else
    v
  end
end