Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecate StripeObject#refresh_from #328

Merged
merged 4 commits into from
Oct 9, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions lib/stripe.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@

module Stripe
DEFAULT_CA_BUNDLE_PATH = File.dirname(__FILE__) + '/data/ca-certificates.crt'

@api_base = 'https://api.stripe.com'
@connect_base = 'https://connect.stripe.com'
@uploads_base = 'https://uploads.stripe.com'
Expand Down Expand Up @@ -209,6 +210,10 @@ def self._uname_ver
def self.uri_encode(params)
Util.encode_parameters(params)
end
class << self
extend Gem::Deprecate
deprecate :uri_encode, "Stripe::Util#encode_parameters", 2016, 01
end

def self.request_headers(api_key)
headers = {
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/api_operations/delete.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module Delete
def delete(params={}, opts={})
opts = Util.normalize_opts(opts)
response, opts = request(:delete, url, params, opts)
refresh_from(response, opts)
initialize_from(response, opts)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/api_operations/update.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def save(params={})
values.delete(:id)

response, opts = request(:post, req_url, values)
refresh_from(response, opts)
initialize_from(response, opts)
end
self
end
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/api_resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def url

def refresh
response, opts = request(:get, url, @retrieve_params)
refresh_from(response, opts)
initialize_from(response, opts)
end

def self.retrieve(id, opts={})
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/application_fee.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def self.url

def refund(params={}, opts={})
response, opts = request(:post, refund_url, params, opts)
refresh_from(response, opts)
initialize_from(response, opts)
end

private
Expand Down
12 changes: 6 additions & 6 deletions lib/stripe/charge.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,39 @@ class Charge < APIResource

def refund(params={}, opts={})
response, opts = request(:post, refund_url, params, opts)
refresh_from(response, opts)
initialize_from(response, opts)
end

def capture(params={}, opts={})
response, opts = request(:post, capture_url, params, opts)
refresh_from(response, opts)
initialize_from(response, opts)
end

def update_dispute(params={}, opts={})
response, opts = request(:post, dispute_url, params, opts)
refresh_from({ :dispute => response }, opts, true)
initialize_from({ :dispute => response }, opts, true)
dispute
end

def close_dispute(params={}, opts={})
response, opts = request(:post, close_dispute_url, params, opts)
refresh_from(response, opts)
initialize_from(response, opts)
end

def mark_as_fraudulent
params = {
:fraud_details => { :user_report => 'fraudulent' }
}
response, opts = request(:post, url, params)
refresh_from(response, opts)
initialize_from(response, opts)
end

def mark_as_safe
params = {
:fraud_details => { :user_report => 'safe' }
}
response, opts = request(:post, url, params)
refresh_from(response, opts)
initialize_from(response, opts)
end

private
Expand Down
8 changes: 4 additions & 4 deletions lib/stripe/customer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,25 +37,25 @@ def create_upcoming_invoice(params={}, opts={})

def cancel_subscription(params={}, opts={})
response, opts = request(:delete, subscription_url, params, opts)
refresh_from({ :subscription => response }, opts, true)
initialize_from({ :subscription => response }, opts, true)
subscription
end

def update_subscription(params={}, opts={})
response, opts = request(:post, subscription_url, params, opts)
refresh_from({ :subscription => response }, opts, true)
initialize_from({ :subscription => response }, opts, true)
subscription
end

def create_subscription(params={}, opts={})
response, opts = request(:post, subscriptions_url, params, opts)
refresh_from({ :subscription => response }, opts, true)
initialize_from({ :subscription => response }, opts, true)
subscription
end

def delete_discount
_, opts = request(:delete, discount_url)
refresh_from({ :discount => nil }, opts, true)
initialize_from({ :discount => nil }, opts, true)
end

private
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/dispute.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class Dispute < APIResource

def close(params={}, opts={})
response, opts = request(:post, close_url, params, opts)
refresh_from(response, opts)
initialize_from(response, opts)
end

def close_url
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/invoice.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def self.upcoming(params, opts={})

def pay(opts={})
response, opts = request(:post, pay_url, {}, opts)
refresh_from(response, opts)
initialize_from(response, opts)
end

private
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/order.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class Order < APIResource

def pay(params, opts={})
response, opts = request(:post, pay_url, params, opts)
refresh_from(response, opts)
initialize_from(response, opts)
end

private
Expand Down
84 changes: 55 additions & 29 deletions lib/stripe/stripe_object.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ def initialize(id=nil, opts={})

def self.construct_from(values, opts={})
values = Stripe::Util.symbolize_names(values)
self.new(values[:id]).refresh_from(values, opts)

# work around protected #initialize_from for now
self.new(values[:id]).send(:initialize_from, values, opts)
end

# Determines the equality of two Stripe objects. Stripe objects are
Expand All @@ -41,36 +43,17 @@ def inspect
"#<#{self.class}:0x#{self.object_id.to_s(16)}#{id_string}> JSON: " + JSON.pretty_generate(@values)
end

# Re-initializes the object based on a hash of values (usually one that's
# come back from an API call). Adds or removes value accessors as necessary
# and updates the state of internal data.
#
# Please don't use this method. If you're trying to do mass assignment, try
# #initialize_from instead.
def refresh_from(values, opts, partial=false)
@opts = Util.normalize_opts(opts)
@original_values = Marshal.load(Marshal.dump(values)) # deep copy

removed = partial ? Set.new : Set.new(@values.keys - values.keys)
added = Set.new(values.keys - @values.keys)

# Wipe old state before setting new. This is useful for e.g. updating a
# customer, where there is no persistent card parameter. Mark those values
# which don't persist as transient

instance_eval do
remove_accessors(removed)
add_accessors(added, values)
end

removed.each do |k|
@values.delete(k)
@transient_values.add(k)
@unsaved_values.delete(k)
end

update_attributes_with_options(values, :opts => opts)
values.each do |k, _|
@transient_values.delete(k)
@unsaved_values.delete(k)
end

return self
initialize_from(values, opts, partial)
end
extend Gem::Deprecate
deprecate :refresh_from, "#update_attributes", 2016, 01

# Mass assigns attributes on the model.
def update_attributes(values)
Expand Down Expand Up @@ -294,6 +277,49 @@ def respond_to_missing?(symbol, include_private = false)
@values && @values.has_key?(symbol) || super
end

# Re-initializes the object based on a hash of values (usually one that's
# come back from an API call). Adds or removes value accessors as necessary
# and updates the state of internal data.
#
# Protected on purpose! Please do not expose.
#
# ==== Options
#
# * +:values:+ Hash used to update accessors and values.
# * +:opts:+ Options for StripeObject like an API key.
# * +:partial:+ Indicates that the re-initialization should not attempt to
# remove accessors.
def initialize_from(values, opts, partial=false)
@opts = Util.normalize_opts(opts)
@original_values = Marshal.load(Marshal.dump(values)) # deep copy

removed = partial ? Set.new : Set.new(@values.keys - values.keys)
added = Set.new(values.keys - @values.keys)

# Wipe old state before setting new. This is useful for e.g. updating a
# customer, where there is no persistent card parameter. Mark those values
# which don't persist as transient

instance_eval do
remove_accessors(removed)
add_accessors(added, values)
end

removed.each do |k|
@values.delete(k)
@transient_values.add(k)
@unsaved_values.delete(k)
end

update_attributes_with_options(values, :opts => opts)
values.each do |k, _|
@transient_values.delete(k)
@unsaved_values.delete(k)
end

self
end

# Mass assigns attributes on the model.
#
# This is a version of +update_attributes+ that takes some extra options
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/subscription.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def self.retrieve(id, opts=nil)

def delete_discount
response, opts = request(:delete, discount_url)
refresh_from({ :discount => nil }, opts, true)
initialize_from({ :discount => nil }, opts, true)
end

private
Expand Down
2 changes: 1 addition & 1 deletion lib/stripe/transfer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class Transfer < APIResource

def cancel
response, api_key = Stripe.request(:post, cancel_url, @api_key)
refresh_from(response, api_key)
initialize_from(response, api_key)
end

def cancel_url
Expand Down
2 changes: 1 addition & 1 deletion test/stripe/metadata_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ class MetadataTest < Test::Unit::TestCase
obj.metadata['uuid'] = '6735'
end
params = {:metadata => {'type' => 'summer', 'uuid' => '6735'}}
curl_args = Stripe.uri_encode(params)
curl_args = Stripe::Util.encode_parameters(params)
check_metadata({:metadata => {'type' => 'christmas'}},
curl_args,
update_actions)
Expand Down
14 changes: 14 additions & 0 deletions test/stripe/stripe_object_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,19 @@ class StripeObjectTest < Test::Unit::TestCase
end
assert_equal "foo is not an attribute that can be assigned on this object", e.message
end

should "warn that #refresh_from is deprecated" do
old_stderr = $stderr
$stderr = StringIO.new
begin
obj = Stripe::StripeObject.construct_from({})
obj.refresh_from({}, {})
message = "NOTE: Stripe::StripeObject#refresh_from is " +
"deprecated; use #update_attributes instead"
assert_match Regexp.new(message), $stderr.string
ensure
$stderr = old_stderr
end
end
end
end
16 changes: 16 additions & 0 deletions test/stripe_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
require File.expand_path('../test_helper', __FILE__)

class StripeTest < Test::Unit::TestCase
should "warn that #refresh_from is deprecated" do
old_stderr = $stderr
$stderr = StringIO.new
begin
Stripe.uri_encode({})
message = "NOTE: Stripe.uri_encode is deprecated; use " +
"Stripe::Util#encode_parameters instead"
assert_match Regexp.new(message), $stderr.string
ensure
$stderr = old_stderr
end
end
end