diff --git a/lib/fog/aws/models/dns/record.rb b/lib/fog/aws/models/dns/record.rb index d1679bd99..bff2a62f2 100644 --- a/lib/fog/aws/models/dns/record.rb +++ b/lib/fog/aws/models/dns/record.rb @@ -23,14 +23,7 @@ module Fog end def destroy - requires :name, :ttl, :type, :value, :zone - options = { - :action => 'DELETE', - :name => name, - :resource_records => [*value], - :ttl => ttl, - :type => type - } + options = attributes_to_options('DELETE') connection.change_resource_record_sets(zone.id, [options]) true end @@ -40,25 +33,44 @@ module Fog end def save - requires :name, :ttl, :type, :value, :zone - options = { - :action => 'CREATE', - :name => name, - :resource_records => [*value], - :ttl => ttl, - :type => type - } + options = attributes_to_options('CREATE') data = connection.change_resource_record_sets(zone.id, [options]).body merge_attributes(data) true end + def modify(new_attributes) + options = [] + + # Delete the current attributes + options << attributes_to_options('DELETE') + + # Create the new attributes + merge_attributes(new_attributes) + options << attributes_to_options('CREATE') + + data = connection.change_resource_record_sets(zone.id, options).body + merge_attributes(data) + true + end + private def zone=(new_zone) @zone = new_zone end + def attributes_to_options(action) + requires :name, :ttl, :type, :value, :zone + { + :action => action, + :name => name, + :resource_records => [*value], + :ttl => ttl, + :type => type + } + end + end end