<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -59,11 +59,6 @@ module Mousetrap
       self.class.raise_api_unsupported_error
     end
 
-    def save
-      mutated_attributes = attributes_for_api
-      self.class.put_resource('customers', 'edit-subscription', customer_code, mutated_attributes)
-    end
-
     def exists?
       self.class.raise_api_unsupported_error
     end
@@ -74,6 +69,22 @@ module Mousetrap
       subscription
     end
 
+    def self.update(customer_code, attributes)
+      mutated_attributes = attributes_for_api(attributes)
+
+      mutated_attributes.delete_if { |k, v| v.blank? }
+
+      response = put_resource(
+        'customers',
+        'edit-subscription',
+        customer_code,
+        mutated_attributes
+      )
+
+      raise response['error'] if response['error']
+    end
+
+
     protected
 
     attr_writer \</diff>
      <filename>lib/mousetrap/subscription.rb</filename>
    </modified>
    <modified>
      <diff>@@ -240,4 +240,30 @@ describe &quot;The Wrapper Gem&quot; do
       end
     end
   end
+
+  describe Mousetrap::Subscription do
+    describe &quot;Given a customer on CheddarGetter&quot; do
+      before :all do
+        @customer = Factory :new_customer
+        violated &quot;Use a visa for setup&quot; unless @customer.subscription.credit_card_number == '4111111111111111'
+        @customer.save
+      end
+
+      describe &quot;When I update a subscription field&quot; do
+        before :all do
+          Mousetrap::Subscription.update @customer.code, :credit_card_number =&gt; '5555555555554444'
+        end
+
+        describe &quot;And I get the customer&quot; do
+          before :all do
+            @api_customer = Mousetrap::Customer[@customer.code]
+          end
+
+          it 'Then I should see the updated field' do
+            @api_customer.subscription.credit_card_last_four_digits.should == '4444'
+          end
+        end
+      end
+    end
+  end
 end</diff>
      <filename>spec/integration/smoke_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,6 @@
 require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
 
 describe Mousetrap::Subscription do
-  # subscription:
-  #   ccExpirationDate: &quot;2010-01-31T00:00:00+00:00&quot;
-  #   gatewayToken:
-  #   createdDatetime: &quot;2009-08-27T15:55:51+00:00&quot;
-  #   ccType: visa
-  #   id: 46ad3f1c-e472-102c-a92d-40402145ee8b
-  #   ccLastFour: &quot;1111&quot;
-  #   canceledDatetime:
-
   include Fixtures
 
   describe '.[]' do
@@ -88,4 +79,74 @@ describe Mousetrap::Subscription do
       end.to raise_error(NotImplementedError, Mousetrap::API_UNSUPPORTED)
     end
   end
+
+  describe '.update' do
+    before do
+      Mousetrap::Subscription.stub :put_resource =&gt; { 'some' =&gt; 'hash' }
+    end
+
+    let (:mutated_attributes) do
+      {
+        :with =&gt; 'something',
+        :without =&gt; nil,
+        :also_without =&gt; ''
+      }
+    end
+
+    def do_update
+      Mousetrap::Subscription.update('some customer code', 'some attributes')
+    end
+
+    it &quot;transforms the attribute names for CheddarGetter&quot; do
+      Mousetrap::Subscription.should_receive(:attributes_for_api).with('some attributes').and_return({})
+      do_update
+    end
+
+    it &quot;deletes unfilled attribute entries&quot; do
+
+      Mousetrap::Subscription.stub :attributes_for_api =&gt; mutated_attributes
+
+      Mousetrap::Subscription.should_receive(:put_resource).with(
+        'customers',
+        'edit-subscription',
+        'some customer code',
+        { :with =&gt; 'something' }
+      )
+
+      do_update
+    end
+
+    it &quot;calls put_resource&quot; do
+      Mousetrap::Subscription.stub :attributes_for_api =&gt; mutated_attributes
+
+      Mousetrap::Subscription.should_receive(:put_resource).with(
+        'customers',
+        'edit-subscription',
+        'some customer code',
+        { :with =&gt; 'something' }
+      )
+
+      do_update
+    end
+
+    it &quot;raises a CheddarGetter error if returned&quot; do
+      Mousetrap::Subscription.stub \
+        :attributes_for_api =&gt; mutated_attributes,
+        :put_resource =&gt; { 'error' =&gt; 'some error message' }
+
+      expect { do_update }.to raise_error('some error message')
+    end
+  end
 end
+
+
+__END__
+
+subscription:
+  ccExpirationDate: &quot;2010-01-31T00:00:00+00:00&quot;
+  gatewayToken:
+  createdDatetime: &quot;2009-08-27T15:55:51+00:00&quot;
+  ccType: visa
+  id: 46ad3f1c-e472-102c-a92d-40402145ee8b
+  ccLastFour: &quot;1111&quot;
+  canceledDatetime:</diff>
      <filename>spec/mousetrap/subscription_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>932e1c25e48b9ce31acbfe19cf1a50e4efc369a4</id>
    </parent>
  </parents>
  <author>
    <name>Jon Larkowski</name>
    <email>jonlarkowski@gmail.com</email>
  </author>
  <url>http://github.com/hashrocket/mousetrap/commit/4544721b7483c1618237f6d4f76d79b1c23b9330</url>
  <id>4544721b7483c1618237f6d4f76d79b1c23b9330</id>
  <committed-date>2009-10-22T05:41:20-07:00</committed-date>
  <authored-date>2009-10-22T05:41:20-07:00</authored-date>
  <message>Add Subscription.update feature</message>
  <tree>a4c3901a581b81266e5d821c0c3196df3ac2442a</tree>
  <committer>
    <name>Jon Larkowski</name>
    <email>jonlarkowski@gmail.com</email>
  </committer>
</commit>
