diff --git a/lib/stripe/stripe_object.rb b/lib/stripe/stripe_object.rb index 979fd4b7..2fa9cdd3 100644 --- a/lib/stripe/stripe_object.rb +++ b/lib/stripe/stripe_object.rb @@ -84,8 +84,8 @@ module Stripe # Default to true. TODO: Convert to optional arguments after we're off # 1.9 which will make this quite a bit more clear. dirty = method_options.fetch(:dirty, true) - values.each do |k, v| + add_accessors([k], values) unless metaclass.method_defined?(k.to_sym) @values[k] = Util.convert_to_stripe_object(v, opts) dirty_value!(@values[k]) if dirty @unsaved_values.add(k) diff --git a/test/stripe/stripe_object_test.rb b/test/stripe/stripe_object_test.rb index faabc3de..5e211dc1 100644 --- a/test/stripe/stripe_object_test.rb +++ b/test/stripe/stripe_object_test.rb @@ -90,6 +90,13 @@ module Stripe assert_equal Stripe::StripeObject, obj.metadata.class end + should "create accessors when #update_attributes is called" do + obj = Stripe::StripeObject.construct_from({}) + assert_equal false, obj.send(:metaclass).method_defined?(:foo) + obj.update_attributes(:foo => 'bar') + assert_equal true, obj.send(:metaclass).method_defined?(:foo) + end + should "warn that #refresh_from is deprecated" do old_stderr = $stderr $stderr = StringIO.new