32 lines
967 B
Ruby

module Stripe
module APIOperations
module Update
def save
if @unsaved_values.length > 0
values = @unsaved_values.reduce({}) do |h, k|
# if we're updating (but not unsetting) metadata, unset existing keys
if k==:metadata and not @values[:metadata].nil?
@values[:metadata].update(metadata_unset_hash(@values[:metadata]))
end
h.update(k => @values[k].nil? ? '' : @values[k])
end
values.delete(:id)
response, api_key = Stripe.request(:post, url, @api_key, values)
refresh_from(response, api_key)
end
self
end
def metadata_unset_hash(updated_hash)
unset = {}
@previous_metadata.each do |key, val|
# don't unset if setting to a new value in the same request
unset.update(key => '') if not updated_hash.has_key?(key.to_s)
end
unset
end
end
end
end