google4r-checkout 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,5 +1,21 @@
1
1
  =google4r-checkout Changelog
2
2
 
3
+ == 1.0.3 (2008-08-08)
4
+
5
+ * Added analytics_data support. Thanks to Will Schwenk!
6
+ * Added create_address_filters_allowed_area and create_address_filters_excluded_area method to the MerchantCalculatedShipping class.
7
+ * Created two aliases create_shipping_restrictions_allowed_area and create_shipping_restrictions_excluded_area to facilitate deprecation of create_allowed_area and create_excluded_area.
8
+ * country_code in PostalArea class is now optional in the initialize method so it can be called properly in the create_area method in shared.rb.
9
+ * Added line-item shipping support.
10
+ * Refactor notifications to extract a base notification class that has the front_end, serial_number, google_order_number and timestamp.
11
+ * Added notification handshake support (i.e. serial-number) for notifciation-acknowledgement.
12
+ * Added digital delivery support. Thanks to Andy Kim and Matthew Moore!
13
+ * Added Carrier Calculated Shipping support.
14
+ * Added unit tests - carrier_calculated_shipping_test.rb, digital_content_test.rb, *_items_*commands.rb
15
+ * Updated unit tests - item_test.rb, merchant_calculated_shipping_test.rb, notification_acknowledgement_test.rb
16
+ * Updated integration test - checkout_command_test.rb
17
+ * Added HTML Form API Signature support. It is included in utils.rb.
18
+
3
19
  == 1.0.2 (2007-08-18)
4
20
 
5
21
  * Moved Address from notifications.rb to shared.rb
@@ -40,17 +40,15 @@ module Google4R #:nodoc:
40
40
  class Command
41
41
  # The URL to use for requests to the sandboxed API. The merchant id is to be
42
42
  # put in via String#%.
43
- #--
44
- # TODO: Move this into a class variable (e.g. via cattr) so it is adaptable.
45
- #++
46
- SANDBOX_URL = "https://sandbox.google.com/checkout/cws/v2/Merchant/%s/request"
43
+ SANDBOX_URL_PREFIX = 'https://sandbox.google.com/checkout/'
47
44
 
48
45
  # The URL to use for real requests to the Google Checkout API. The merchant id
49
46
  # is to be put in via String#%.
50
- #--
51
- # TODO: Move this into a class variable (e.g. via cattr) so it is adaptable.
52
- #++
53
- PRODUCTION_URL = "https://checkout.google.com/cws/v2/Merchant/%s/request"
47
+ PRODUCTION_URL_PREFIX = 'https://checkout.google.com/'
48
+
49
+ CHECKOUT_API_URL = 'api/checkout/v2/merchantCheckout/Merchant/%s'
50
+
51
+ ORDER_PROCESSING_API_URL = 'api/checkout/v2/request/Merchant/%s'
54
52
 
55
53
  # The Frontent class that was used to create this CheckoutCommand and whose
56
54
  # configuration will be used.
@@ -64,6 +62,9 @@ module Google4R #:nodoc:
64
62
 
65
63
  # Initialize the frontend attribute with the value of the frontend parameter.
66
64
  def initialize(frontend)
65
+ if self.instance_of?(Command) || self.instance_of?(ItemsCommand)
66
+ raise 'Cannot instantiate abstract class ' + self.class.to_s
67
+ end
67
68
  @frontend = frontend
68
69
  end
69
70
 
@@ -81,10 +82,17 @@ module Google4R #:nodoc:
81
82
  # Create HTTP(S) POST command and set up Basic Authentication.
82
83
  url_str =
83
84
  if frontend.configuration[:use_sandbox] then
84
- SANDBOX_URL % frontend.configuration[:merchant_id]
85
+ SANDBOX_URL_PREFIX
86
+ else
87
+ PRODUCTION_URL_PREFIX
88
+ end
89
+ url_str +=
90
+ if self.class == CheckoutCommand then
91
+ CHECKOUT_API_URL
85
92
  else
86
- PRODUCTION_URL % frontend.configuration[:merchant_id]
93
+ ORDER_PROCESSING_API_URL
87
94
  end
95
+ url_str = url_str % frontend.configuration[:merchant_id]
88
96
  url = URI.parse(url_str)
89
97
 
90
98
  request = Net::HTTP::Post.new(url.path)
@@ -138,12 +146,8 @@ module Google4R #:nodoc:
138
146
 
139
147
  # Class method to return the command's XML representation.
140
148
  def to_xml
141
- if self.class == Command then
142
- raise NotImplementedError, "Command#to_xml has to be used in a subclass."
143
- else
144
- generator_class = Google4R::Command.get_const("#{self.class}XmlGenerator")
145
- return generator_class.new(self).generate
146
- end
149
+ generator_class = Google4R::Command.get_const("#{self.class}XmlGenerator")
150
+ return generator_class.new(self).generate
147
151
  end
148
152
 
149
153
  protected
@@ -219,6 +223,13 @@ module Google4R #:nodoc:
219
223
 
220
224
  # A Google Checkout merchant ID that identifies the eCommerce provider.
221
225
  attr_accessor :platform_id
226
+
227
+ # Setting this allows Google Analytics to track purchases that use Checkout
228
+ # The value should be as set by the analytics javascript in the hidden form
229
+ # element names "analyticsdata" on the page with the checkout button.
230
+ # If left unset then the element will not be generated.
231
+ # see: http://code.google.com/apis/checkout/developer/checkout_analytics_integration.html
232
+ attr_accessor :analytics_data
222
233
 
223
234
  # Generates the XML for this CheckoutCommand.
224
235
  def to_xml
@@ -249,7 +260,9 @@ module Google4R #:nodoc:
249
260
  #
250
261
  # Raises a ArgumentError if the parameter clazz is invalid.
251
262
  def create_shipping_method(clazz, &block)
252
- if not [ PickupShipping, FlatRateShipping, MerchantCalculatedShipping ].include?(clazz) then
263
+ if not [ PickupShipping, FlatRateShipping,
264
+ MerchantCalculatedShipping, CarrierCalculatedShipping
265
+ ].include?(clazz) then
253
266
  raise ArgumentError, "Unknown shipping method: #{clazz.inspect}."
254
267
  end
255
268
 
@@ -278,6 +291,10 @@ module Google4R #:nodoc:
278
291
  @serial_number = serial_number
279
292
  @redirect_url = redirect_url
280
293
  end
294
+
295
+ def to_s
296
+ return @redirect_url
297
+ end
281
298
  end
282
299
 
283
300
  #
@@ -288,11 +305,6 @@ module Google4R #:nodoc:
288
305
  # The amount to charge, optional, Money
289
306
  attr_accessor :amount
290
307
 
291
- # frontend, required
292
- def initialize(frontend)
293
- super(frontend)
294
- end
295
-
296
308
  # Generates the XML for this ChargeOrderCommand
297
309
  def to_xml
298
310
  ChargeOrderCommandXmlGenerator.new(self).generate
@@ -310,10 +322,6 @@ module Google4R #:nodoc:
310
322
  # A comment related to the refunded order, String of maximum 140 characters, optional
311
323
  attr_accessor :comment
312
324
 
313
- def initialize(frontend)
314
- super(frontend)
315
- end
316
-
317
325
  def to_xml
318
326
  RefundOrderCommandXmlGenerator.new(self).generate
319
327
  end
@@ -327,10 +335,6 @@ module Google4R #:nodoc:
327
335
  # A comment related to the cancelled order, String of maximum 140 characters, optional
328
336
  attr_accessor :comment
329
337
 
330
- def initialize(frontend)
331
- super(frontend)
332
- end
333
-
334
338
  def to_xml
335
339
  CancelOrderCommandXmlGenerator.new(self).generate
336
340
  end
@@ -340,10 +344,6 @@ module Google4R #:nodoc:
340
344
  # a customer's credit card for the uncharged balance of an order to verify that
341
345
  # funds for the order are available
342
346
  class AuthorizeOrderCommand < Command
343
- def initialize(frontend)
344
- super(frontend)
345
- end
346
-
347
347
  def to_xml
348
348
  AuthorizeOrderCommandXmlGenerator.new(self).generate
349
349
  end
@@ -352,10 +352,6 @@ module Google4R #:nodoc:
352
352
  # The ProcessOrderCommand instructs Google Checkout to to update
353
353
  # an order's fulfillment state from NEW to PROCESSING
354
354
  class ProcessOrderCommand < Command
355
- def initialize(frontend)
356
- super(frontend)
357
- end
358
-
359
355
  def to_xml
360
356
  ProcessOrderCommandXmlGenerator.new(self).generate
361
357
  end
@@ -366,10 +362,6 @@ module Google4R #:nodoc:
366
362
  class AddMerchantOrderNumberCommand < Command
367
363
  # The merchant-assigned order number associated with an order
368
364
  attr_accessor :merchant_order_number
369
-
370
- def initialize(frontend)
371
- super(frontend)
372
- end
373
365
 
374
366
  def to_xml
375
367
  AddMerchantOrderNumberCommandXmlGenerator.new(self).generate
@@ -387,10 +379,6 @@ module Google4R #:nodoc:
387
379
 
388
380
  # The shipper's tracking number that is associated with an order
389
381
  attr_accessor :tracking_number
390
-
391
- def initialize(frontend)
392
- super(frontend)
393
- end
394
382
 
395
383
  def to_xml
396
384
  DeliverOrderCommandXmlGenerator.new(self).generate
@@ -405,10 +393,6 @@ module Google4R #:nodoc:
405
393
 
406
394
  # The shipper's tracking number that is associated with an order
407
395
  attr_accessor :tracking_number
408
-
409
- def initialize(frontend)
410
- super(frontend)
411
- end
412
396
 
413
397
  def to_xml
414
398
  AddTrackingDataCommandXmlGenerator.new(self).generate
@@ -420,12 +404,8 @@ module Google4R #:nodoc:
420
404
  # The message to the customer
421
405
  attr_accessor :message
422
406
 
423
- # if google checkout should email buyer to ssay order is dispatched
407
+ # if google checkout should email buyer to say order is dispatched
424
408
  attr_accessor :send_email
425
-
426
- def initialize(frontend)
427
- super(frontend)
428
- end
429
409
 
430
410
  def to_xml
431
411
  SendBuyerMessageCommandXmlGenerator.new(self).generate
@@ -434,10 +414,6 @@ module Google4R #:nodoc:
434
414
 
435
415
  # The ArchiveOrderCommand instructs Google Checkout to remove an order from your Merchant Center Inbox.
436
416
  class ArchiveOrderCommand < Command
437
- def initialize(frontend)
438
- super(frontend)
439
- end
440
-
441
417
  def to_xml
442
418
  ArchiveOrderCommandXmlGenerator.new(self).generate
443
419
  end
@@ -445,12 +421,76 @@ module Google4R #:nodoc:
445
421
 
446
422
  # The UnarchiveOrderCommand instructs Google Checkout to return a previously archived order to your Merchant Center Inbox.
447
423
  class UnarchiveOrderCommand < Command
424
+ def to_xml
425
+ UnarchiveOrderCommandXmlGenerator.new(self).generate
426
+ end
427
+ end
428
+
429
+ #
430
+ # XML API Commands for Line-item Shipping
431
+ #
432
+
433
+ # Abstract class for Line-item shipping commands
434
+ class ItemsCommand < Command
435
+ # An array of ItemInfo objects that you are marking as backordered,
436
+ # cancelled, returned or resetting shipping information
437
+ attr_accessor :item_info_arr
438
+
439
+ # if google checkout should email buyer to say order is dispatched
440
+ attr_accessor :send_email
441
+
448
442
  def initialize(frontend)
449
- super(frontend)
443
+ super
444
+ @item_info_arr = []
445
+ @send_email = false
450
446
  end
447
+ end
451
448
 
449
+ # The <ship-items> command specifies shipping information for one or
450
+ # more items in an order.
451
+ class ShipItemsCommand < ItemsCommand
452
452
  def to_xml
453
- UnarchiveOrderCommandXmlGenerator.new(self).generate
453
+ ShipItemsCommandXmlGenerator.new(self).generate
454
+ end
455
+ end
456
+
457
+ # The <backorder-items> command lets you specify that one or more
458
+ # specific items in an order are out of stock.
459
+ class BackorderItemsCommand < ItemsCommand
460
+ def to_xml
461
+ BackorderItemsCommandXmlGenerator.new(self).generate
462
+ end
463
+ end
464
+
465
+ # The <cancel-items> command lets you specify that one or more
466
+ # specific items in an order have been cancelled, meaning they
467
+ # will not be delivered to the customer.
468
+ class CancelItemsCommand < ItemsCommand
469
+
470
+ # The reason that you are canceling one or more line items
471
+ attr_accessor :reason
472
+
473
+ # An optional comment related to one or more canceled line items
474
+ attr_accessor :comment
475
+
476
+ def to_xml
477
+ CancelItemsCommandXmlGenerator.new(self).generate
478
+ end
479
+ end
480
+
481
+ # The <return-items> command lets you specify that your customer
482
+ # returned one or more specific items in an order.
483
+ class ReturnItemsCommand < ItemsCommand
484
+ def to_xml
485
+ ReturnItemsCommandXmlGenerator.new(self).generate
486
+ end
487
+ end
488
+
489
+ # The <reset-items-shipping-information> command allows you to reset
490
+ # the shipping status for specific items in an order to "Not yet shipped".
491
+ class ResetItemsShippingInformationCommand < ItemsCommand
492
+ def to_xml
493
+ ResetItemsShippingInformationCommandXmlGenerator.new(self).generate
454
494
  end
455
495
  end
456
496
  end
@@ -169,6 +169,36 @@ module Google4R #:nodoc:
169
169
  def create_unarchive_order_command
170
170
  return UnarchiveOrderCommand.new(self)
171
171
  end
172
+
173
+ # Factory method to create a new ShipItemsCommand object. Use this method to create
174
+ # your ShipItemsCommand instances.
175
+ def create_ship_items_command
176
+ return ShipItemsCommand.new(self)
177
+ end
178
+
179
+ # Factory method to create a new BackorderItemsCommand object. Use this method to create
180
+ # your BackorderItemsCommand instances.
181
+ def create_backorder_items_command
182
+ return BackorderItemsCommand.new(self)
183
+ end
184
+
185
+ # Factory method to create a new ReturnItemsCommand object. Use this method to create
186
+ # your ReturnItemsCommand instances.
187
+ def create_return_items_command
188
+ return ReturnItemsCommand.new(self)
189
+ end
190
+
191
+ # Factory method to create a new CancelItemsCommand object. Use this method to create
192
+ # your CancelItemsCommand instances.
193
+ def create_cancel_items_command
194
+ return CancelItemsCommand.new(self)
195
+ end
196
+
197
+ # Factory method to create a new ResetItemsShippingInformationCommand object. Use this method to create
198
+ # your ResetItemsShippingInformationCommand instances.
199
+ def create_reset_items_shipping_information_command
200
+ return ResetItemsShippingInformationCommand.new(self)
201
+ end
172
202
  end
173
203
  end
174
204
  end
@@ -123,12 +123,16 @@ module Google4R #:nodoc:
123
123
  # An array of merchant codes
124
124
  attr_reader :merchant_code_strings
125
125
 
126
+ # The tax tables for the items in the order notification.
127
+ attr_reader :tax_tables
128
+
126
129
  # Sets the frontend attribute to the value of the frontend parameter.
127
130
  def initialize(frontend)
128
131
  @frontend = frontend
129
132
  @anonymous_addresses = Array.new
130
133
  @shipping_methods = Array.new
131
134
  @merchant_code_strings = Array.new
135
+ @tax_tables = frontend.tax_table_factory.effective_tax_tables_at(Time.now)
132
136
  end
133
137
 
134
138
  # Factory method to create a new MerchantCalculationCallback object from
@@ -35,17 +35,32 @@ module Google4R #:nodoc:
35
35
  class UnknownNotificationType < Exception
36
36
  end
37
37
 
38
- # Use this objects of this class to tell Google that everything went fine.
38
+ # Represents a notification acknowledgment to tell Google that the
39
+ # notification has been recieved and processed. Google guarantees not to
40
+ # resend any notification it has recieved an acknowledgment for.
41
+ #
42
+ # === For example, in a Rails app
39
43
  #
40
- # === Example
44
+ # # Let Google Checkout know we handled this notification with handshake
45
+ # notification_acknowledgement = Google4R::Checkout::NotificationAcknowledgement.new(notification).to_xml
46
+ # render :text => notification_acknowledgement, :status => 200
41
47
  #
42
- # render :text => NotificationAcknowledgement.to_xml
43
- #--
44
- # TODO: Should this become a Singleton?
45
- #++
46
- class NotificationAcknowledgement
48
+ # or
49
+ #
50
+ # # Without handshake
51
+ # notification_acknowledgement = Google4R::Checkout::NotificationAcknowledgement.new.to_xml
52
+ # render :text => notification_acknowledgement, :status => 200
53
+ #
54
+ class NotificationAcknowledgement
55
+
56
+ attr_reader :serial_number
57
+
58
+ def initialize(notification=nil)
59
+ @serial_number = notification.serial_number unless notification.nil?
60
+ end
61
+
47
62
  def to_xml
48
- %q{<?xml version="1.0" encoding="UTF-8"?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2"/>}
63
+ NotificationAcknowledgementXmlGenerator.new(self).generate
49
64
  end
50
65
  end
51
66
 
@@ -123,10 +138,9 @@ module Google4R #:nodoc:
123
138
  end
124
139
  end
125
140
 
126
- # Google Checkout sends <new-order-notification> messages to the web service when a new
127
- # order has been successfully filed with Google Checkout. These messages will be parsed
128
- # into NewOrderNotification instances.
129
- class NewOrderNotification
141
+ # Abstract class for all the notifications. It should not be instantiated
142
+ # directly.
143
+ class Notification
130
144
  # The frontend this notification belongs to.
131
145
  attr_accessor :frontend
132
146
 
@@ -136,6 +150,21 @@ module Google4R #:nodoc:
136
150
  # The Google order number the new order notification belongs to (String).
137
151
  attr_accessor :google_order_number
138
152
 
153
+ # The timestamp of the notification. Also see #timestamp=
154
+ attr_accessor :timestamp
155
+
156
+ # Initializes the RiskInformationNotification instance with the given Frontend instance.
157
+ def initialize(frontend)
158
+ @frontend = frontend
159
+ end
160
+
161
+ end
162
+
163
+ # Google Checkout sends <new-order-notification> messages to the web service when a new
164
+ # order has been successfully filed with Google Checkout. These messages will be parsed
165
+ # into NewOrderNotification instances.
166
+ class NewOrderNotification < Notification
167
+
139
168
  # The buyer's billing address (Address).
140
169
  attr_accessor :buyer_billing_address
141
170
 
@@ -166,8 +195,8 @@ module Google4R #:nodoc:
166
195
  # The order's shopping cart (ShoppingCart)
167
196
  attr_accessor :shopping_cart
168
197
 
169
- # The order's timestamp (Time), also see #timestamp=
170
- attr_accessor :timestamp
198
+ # The tax tables for the items in the order notification.
199
+ attr_reader :tax_tables
171
200
 
172
201
  # Set the order's timestamp (Time). When the timestamp is set then the tax tables valid
173
202
  # at the given point of time are set into the attribute tax tables from the frontend's
@@ -177,14 +206,6 @@ module Google4R #:nodoc:
177
206
  @tax_tables = frontend.tax_table_factory.effective_tax_tables_at(time)
178
207
  end
179
208
 
180
- # The tax tables for the items in the order notification.
181
- attr_reader :tax_tables
182
-
183
- # Sets the frontend attribute to the value of the frontend parameter.
184
- def initialize(frontend)
185
- @frontend = frontend
186
- end
187
-
188
209
  # Factory method to create a new CheckoutNotification object from the REXML:Element object
189
210
  #
190
211
  # Raises NoMethodError and RuntimeError exceptions if the given element misses required
@@ -216,15 +237,7 @@ module Google4R #:nodoc:
216
237
 
217
238
  # GoogleCheckout sends <order-change-notification> messages to the web service when the
218
239
  # order's state changes. They will get parsed into OrderStateChangeNotification objects.
219
- class OrderStateChangeNotification
220
- # The frontend this notification belongs to.
221
- attr_accessor :frontend
222
-
223
- # The serial number of the notification (String).
224
- attr_accessor :serial_number
225
-
226
- # The order number in Google's database (String).
227
- attr_accessor :google_order_number
240
+ class OrderStateChangeNotification < Notification
228
241
 
229
242
  # The previous financial state of the order (String, one of FinancialOrderState::*).
230
243
  attr_accessor :previous_financial_order_state
@@ -240,9 +253,9 @@ module Google4R #:nodoc:
240
253
 
241
254
  # The reason for the change (String, can be nil).
242
255
  attr_accessor :reason
243
-
244
- # The timestamp of the notification. Also see #timestamp=
245
- attr_accessor :timestamp
256
+
257
+ # The tax tables for the items in the order notification.
258
+ attr_reader :tax_tables
246
259
 
247
260
  # Set the order's timestamp (Time). When the timestamp is set then the tax tables valid
248
261
  # at the given point of time are set into the attribute tax tables from the frontend's
@@ -252,14 +265,6 @@ module Google4R #:nodoc:
252
265
  @tax_tables = frontend.tax_table_factory.effective_tax_tables_at(time)
253
266
  end
254
267
 
255
- # The tax tables for the items in the order notification.
256
- attr_reader :tax_tables
257
-
258
- # Sets the frontend attribute to the value of the frontend parameter.
259
- def initialize(frontend)
260
- @frontend = frontend
261
- end
262
-
263
268
  # Factory method that creates a new OrderStateChangeNotification from an REXML::Element instance.
264
269
  # Use this to create instances of OrderStateChangeNotification.
265
270
  #
@@ -283,16 +288,7 @@ module Google4R #:nodoc:
283
288
 
284
289
  # Google Checkout sends <charge-amount-notification> messages to the web service when the
285
290
  # to confirm that the charge was successfully executed.
286
- class ChargeAmountNotification
287
-
288
- # The serial number of the notification (String).
289
- attr_accessor :serial_number
290
-
291
- # The order number in Google's database (String).
292
- attr_accessor :google_order_number
293
-
294
- # The timestamp of the notification
295
- attr_accessor :timestamp
291
+ class ChargeAmountNotification < Notification
296
292
 
297
293
  # The amount most recently charged for an order (Money)
298
294
  attr_accessor :latest_charge_amount
@@ -300,14 +296,6 @@ module Google4R #:nodoc:
300
296
  # The total amount charged for an order (Money)
301
297
  attr_accessor :total_charge_amount
302
298
 
303
- # The Frontend instance for this Notification
304
- attr_accessor :frontend
305
-
306
- # Initializes the ChargeAmountNotification instance with the given Frontend instance.
307
- def initialize(frontend)
308
- @frontend = frontend
309
- end
310
-
311
299
  # Factory method that creates a new ChargeAmountNotification from an REXML::Element instance.
312
300
  # Use this to create instances of ChargeAmountNotification.
313
301
  #
@@ -336,15 +324,7 @@ module Google4R #:nodoc:
336
324
  # Google Checkout sends a <refund-amount-notification> after successfully executing
337
325
  # a <refund-order> order processing command. See the Google Checkout documentation for more details:
338
326
  # http://code.google.com/apis/checkout/developer/index.html#refund_amount_notification
339
- class RefundAmountNotification
340
- # The serial number of the notification (String).
341
- attr_accessor :serial_number
342
-
343
- # The order number in Google's database (String).
344
- attr_accessor :google_order_number
345
-
346
- # The timestamp of the notification
347
- attr_accessor :timestamp
327
+ class RefundAmountNotification < Notification
348
328
 
349
329
  # The amount most recently refunded for an order (Money)
350
330
  attr_accessor :latest_refund_amount
@@ -352,14 +332,6 @@ module Google4R #:nodoc:
352
332
  # The total amount refunded for an order (Money)
353
333
  attr_accessor :total_refund_amount
354
334
 
355
- # The Frontend instance for this Notification
356
- attr_accessor :frontend
357
-
358
- # Initializes the RefundAmountNotification instance with the given Frontend instance.
359
- def initialize(frontend)
360
- @frontend = frontend
361
- end
362
-
363
335
  # Factory method that creates a new RefundAmountNotification from an REXML::Element instance.
364
336
  # Use this to create instances of RefundAmountNotification.
365
337
  #
@@ -389,15 +361,7 @@ module Google4R #:nodoc:
389
361
  # chargeback against the order and Google approves the chargeback.
390
362
  # See the Google Checkout documentation for more details:
391
363
  # http://code.google.com/apis/checkout/developer/index.html#chargeback_amount_notification
392
- class ChargebackAmountNotification
393
- # The serial number of the notification (String).
394
- attr_accessor :serial_number
395
-
396
- # The order number in Google's database (String).
397
- attr_accessor :google_order_number
398
-
399
- # The timestamp of the notification
400
- attr_accessor :timestamp
364
+ class ChargebackAmountNotification < Notification
401
365
 
402
366
  # The amount most recently charged back for an order (Money)
403
367
  attr_accessor :latest_chargeback_amount
@@ -405,14 +369,6 @@ module Google4R #:nodoc:
405
369
  # The total amount charged back for an order (Money)
406
370
  attr_accessor :total_chargeback_amount
407
371
 
408
- # The Frontend instance for this Notification
409
- attr_accessor :frontend
410
-
411
- # Initializes the ChargebackAmountNotification instance with the given Frontend instance.
412
- def initialize(frontend)
413
- @frontend = frontend
414
- end
415
-
416
372
  # Factory method that creates a new ChargebackAmountNotification from an REXML::Element instance.
417
373
  # Use this to create instances of ChargebackAmountNotification.
418
374
  #
@@ -442,15 +398,7 @@ module Google4R #:nodoc:
442
398
  # request for an explicit credit card reauthorization.
443
399
  # See the Google Checkout documentation for more details:
444
400
  # http://code.google.com/apis/checkout/developer/index.html#authorization_amount_notification
445
- class AuthorizationAmountNotification
446
- # The serial number of the notification (String).
447
- attr_accessor :serial_number
448
-
449
- # The order number in Google's database (String).
450
- attr_accessor :google_order_number
451
-
452
- # The timestamp of the notification
453
- attr_accessor :timestamp
401
+ class AuthorizationAmountNotification < Notification
454
402
 
455
403
  # The amount that is reauthorized to be charged to the customer's credit card (Money)
456
404
  attr_accessor :authorization_amount
@@ -463,14 +411,6 @@ module Google4R #:nodoc:
463
411
 
464
412
  # Credit verification value for the order (String)
465
413
  attr_accessor :cvn_response
466
-
467
- # The Frontend instance for this Notification
468
- attr_accessor :frontend
469
-
470
- # Initializes the AuthorizationAmountNotification instance with the given Frontend instance.
471
- def initialize(frontend)
472
- @frontend = frontend
473
- end
474
414
 
475
415
  # Factory method that creates a new AuthorizationAmountNotification from an REXML::Element instance.
476
416
  # Use this to create instances of AuthorizationAmountNotification.
@@ -501,12 +441,7 @@ module Google4R #:nodoc:
501
441
  # Google Checkout sends out <risk-information-notification> messages for fraud detection
502
442
  # related information. See the Google Checkout documentation for more details:
503
443
  # http://code.google.com/apis/checkout/developer/index.html#risk_information_notification
504
- class RiskInformationNotification
505
- # The serial number of the notification (String).
506
- attr_accessor :serial_number
507
-
508
- # The order number in Google's database (String).
509
- attr_accessor :google_order_number
444
+ class RiskInformationNotification < Notification
510
445
 
511
446
  # Is the order eligible for Google Checkout's payment guarantee policy (boolean).
512
447
  attr_accessor :eligible_for_protection
@@ -527,18 +462,7 @@ module Google4R #:nodoc:
527
462
  attr_accessor :ip_address
528
463
 
529
464
  # The age of the buyer's google checkout account in days
530
- attr_accessor :buyer_account_age
531
-
532
- # The timestamp of the notification
533
- attr_accessor :timestamp
534
-
535
- # The Frontend instance for this Notification
536
- attr_accessor :frontend
537
-
538
- # Initializes the RiskInformationNotification instance with the given Frontend instance.
539
- def initialize(frontend)
540
- @frontend = frontend
541
- end
465
+ attr_accessor :buyer_account_age
542
466
 
543
467
  # Factory method that creates a new RiskInformationNotification from an REXML::Element instance.
544
468
  # Use this to create instances of RiskInformationNotification