lib/databasedotcom/sobject/sobject.rb in databasedotcom-1.3.0 vs lib/databasedotcom/sobject/sobject.rb in databasedotcom-1.3.1
- old
+ new
@@ -12,19 +12,25 @@
# Returns a new Sobject. The default values for all attributes are set based on its description.
def initialize(attrs = {})
super()
self.class.description["fields"].each do |field|
- self.send("#{field["name"]}=", field["defaultValueFormula"])
+ if field['type'] =~ /(picklist|multipicklist)/ && picklist_option = field['picklistValues'].find { |p| p['defaultValue'] }
+ self.send("#{field["name"]}=", picklist_option["value"])
+ elsif field['type'] =~ /boolean/
+ self.send("#{field["name"]}=", field["defaultValue"])
+ else
+ self.send("#{field["name"]}=", field["defaultValueFormula"])
+ end
end
self.attributes=(attrs)
end
# Returns a hash representing the state of this object
def attributes
self.class.attributes.inject({}) do |hash, attr|
- hash[attr] = self.send(attr.to_sym)
+ hash[attr] = self.send(attr.to_sym) if self.respond_to?(attr.to_sym)
hash
end
end
# Set attributes of this object, from a hash, in bulk
@@ -312,9 +318,10 @@
params.each do |attr, value|
case self.field_type(attr)
when "boolean"
params[attr] = value.is_a?(String) ? value.to_i != 0 : value
when "currency", "percent", "double"
+ value = value.gsub(/[^-0-9.0-9]/, '').to_f if value.respond_to?(:gsub)
params[attr] = value.to_f
when "date"
params[attr] = Date.parse(value) rescue Date.today
when "datetime"
params[attr] = DateTime.parse(value) rescue DateTime.now