Project

General

Profile

« Previous | Next » 

Revision 7875f359

Added by Tom Caspy about 9 years ago

fixes #9240 - in case of hash with indifferent access, serialize as hash

(cherry picked from commit 3059cea1c207718217f07b9cdc706bc516f5db1b)

View differences:

app/models/compute_resource.rb
def save_vm(uuid, attr)
vm = find_vm_by_uuid(uuid)
vm.attributes.merge!(attr.symbolize_keys)
vm.attributes.merge!(attr.deep_symbolize_keys)
vm.save
end
......
# returns a new fog server instance
def new_vm(attr = {})
test_connection
client.servers.new vm_instance_defaults.merge(attr.to_hash.symbolize_keys) if errors.empty?
client.servers.new vm_instance_defaults.merge(attr.to_hash.deep_symbolize_keys) if errors.empty?
end
# return fog new interface ( network adapter )
......
end
def create_vm(args = {})
options = vm_instance_defaults.merge(args.to_hash.symbolize_keys)
options = vm_instance_defaults.merge(args.to_hash.deep_symbolize_keys)
logger.debug("creating VM with the following options: #{options.inspect}")
client.servers.create options
end
......
def nested_attributes_for(type, opts)
return [] unless opts
opts = opts.dup #duplicate to prevent changing the origin opts.
opts.delete("new_#{type}") # delete template
opts.delete("new_#{type}") || opts.delete("new_#{type}".to_sym) # delete template
# convert our options hash into a sorted array (e.g. to preserve nic / disks order)
opts = opts.sort { |l, r| l[0].sub('new_','').to_i <=> r[0].sub('new_','').to_i }.map { |e| Hash[e[1]] }
opts = opts.sort { |l, r| l[0].to_s.sub('new_','').to_i <=> r[0].to_s.sub('new_','').to_i }.map { |e| Hash[e[1]] }
opts.map do |v|
if v[:"_delete"] == '1' && v[:id].blank?
nil
else
v.symbolize_keys # convert to symbols deeper hashes
v.deep_symbolize_keys # convert to symbols deeper hashes
end
end.compact
end

Also available in: Unified diff