Refactor; makes address object responsible for setting its own fields in the request, removes this code from the transaction object.
Add new fields to the SDK. Raise an exception when attempting to set an unknown field (avoids silent failures).
Allow transaction to accept either a customer ID or a Customer object. This allows us to hide the constructor for the Customer object (in order to force SDK consumers to instantiate them correctly through static methods).
Allow Address objects to have their attributes written to (instead of read-only). Also, omit the :region attribute for billing addresses (don't know why, but this is how it's specced in the API).
Refactor the Customer object to hide the constructor. Add two new methods, Customer.from_cc_info, and Customer.from_transaction_id -- these map to the two call paths in the CreateCustomer API call (see: http://help.paytrace.com/api-create-customer-profile). Includes unit tests.
Customers are never going to be returned from the API fully-fleshed (aside from the export profiles command). So we CAN instantiate them just from an ID.
Since we're instantiating from the customer ID, we need a method to extract that ID from the response. Includes modification to the unit tests to simulate a response with a pre-set customer ID.
Enable debug request/response tracing on PayTrace::API::Gateway (this makes testing easier, less mocking required). Check in email request integration script. Add create customer integration script.
Move request field validation to set_param instead of to_params_string (fail fast!) Create PayTrace::Exceptions::ValidationError. Modify request spec to verify that attempting to set an unknown field raises a ValidationError.
Adds setting "next response" to Gateway object. Allows better debugging (without requiring so many mocks, unless wanted). Added tests to ensure it works, and that it does *not* send canned responses unless in debug mode. Also verifies that a canned response is only set once (to ensure that we don't end up with strange, stateful behavior.)
Changes PayTrace::API::Gateway.set_debug to debug=. Raises a PayTrace::Exceptions::ErrorResponse exception on an error response; this is disableable via PayTrace::API::Gateway.raise_exceptions = false. Modifies the Gateway spec to test this behavior (testing default on, also testing that it can be disabled). Changes Gateway.next_response from a Response object to a raw string (this allows more fine-grained testing.)
Modifies Customer object to allow initialization via both a PayTrace customer id and the user-supplied unique id. Modifies specs accordingly.
Modify request to not set a parameter if the value is nil.
Gateway stores last request as a raw request line rather than a request object.
Refactors Customer create and update methods to use a parameters hash rather than an argument list (getting too unwieldy). Modify customer object to allow updates, and modify spec to test it.
Allow Customer object to be instantiated with a (user-supplied) customer ID.
Adds delete instance method and static method to Customer object, and tests them.
Slight bug fix; ensure that a failed create customer returns nil; otherwise it'd return a Response and possibly break something. This needs to be thought through and refactored.
Add the SDK methods for create, update, and delete recurring transactions. Includes unit tests.
Bugfix in specs; I need to define helper methods inside the describe block, or Bad Things happen. All tests now pass again.