$Id: NEWS,v 1.5 2004/02/15 09:52:46 ianmacd Exp $


0.5.0, 2004-02-15

- New method Amazon::Search::Request#text_stream supports text stream
  searches.

- It's now no longer necessary to "require 'amazon'" before requiring
  'amazon/search', 'amazon/babyregistry', 'amazon/shoppingcart',
  'amazon/weddingregistry' and 'amazon/wishlist'.

- The Amazon::Search::Offerings module has been removed, as offerings are
  now completely integrated into Amazon::Search.

- Failed searches will now populate the @error attribute of Response objects
  when their #parse method is called.

- New module method Amazon::Search.offer_types replaces method of same name
  in Amazon::Search::Offerings.

- It's now possible to return offering (third-party item) data when using
  #asin_search, #keyword_search, #actor_search, #node_search,
  #director_search, #artist_search, #author_search, #power_search and
  #manufacturer_search. A new parameter must be passed to these methods to
  indicate what type of offering data is desired. This parameter must be
  equal to one of the offer types returned by Amazon::Search.offer_types.
  If it is nil, no offering data is returned with the search results.

- #asin_search now accepts an offer_page parameter, which is ignored if
  the offerings parameter is nil. Otherwise, it determines which page of
  offering results to return.

- Search heaviness is now stored in the @type attribute of Request objects.

- ALL_PAGES searches are now threaded, but this makes little difference if
  Amazon::Search::RATE_LIMIT_REQUESTS is set, which, by default, it is.

- Amazon::Search::Request#parse and similarly named methods in the subclasses
  now return @args if a block was passed to them.

- Amazon::Search::Response objects now populate a hash attribute, @args, when
  their #parse method is called. This corresponds to the args nodes returned
  by Amazon's servers.

- The HTTP response code will now be printed whenever an HTTPError exception
  is generated.

- A minor bug was fixed, whereby the user-agent was not set when searching
  for the second and subsequent pages of ALL_PAGES requests.

- 'apparel' and 'wireless-phones' are now a valid search mode, although their
  status with AWS is unofficial.


0.4.0, 2004-02-07

- New instance method Amazon::Search::Request#blended_search supports
  blended searches, which return products from up to 15 Amazon categories.

- New instance method Amazon::Search::Request#wishlist_search supports
  wishlist searches, although these are currently broken on Amazon's AWS
  servers.

- New Amazon::Search::Exchange module supports exchange searches. Exchange
  items are those offered for sale by third-parties. This module allows you
  to search for them by their unique ID.

- New Amazon::Search::Offerings module supports searching for offerings.
  Offerings are products sold by third-party sellers. This module allows you
  to search for them by their ASIN.

- New Amazon::Search::Seller module supports seller profile searches.

- New Amazon::Search::Exchange::ThirdParty module supports third party
  product searches. This allows you to find all products for sale by a
  given seller.

- New Amazon::BabyRegistry module generates HTML form for adding an item to a
  baby registry.

- New Amazon::ShoppingCart module generates HTML form for adding items to a
  shopping cart.

- New Amazon::WeddingRegistry module generates HTML form for adding an item to
  a wedding registry.

- New Amazon::Wishlist module generates HTML form for adding an item to a
  wishlist.

- New Amazon::Product#to_s method allows for easy human-friendly printing
  of products.

- Amazon::Search::Response#parse and other such #parse methods in subclasses
  can now act as iterators to an optional block, e.g.

  products.parse {|p| puts p}

- Amazon::Search::Request#similarity_search now allows up to 5 ASINs to be
  searched for. These may be passed as a comma- or space-separaterd string,
  or as an array of strings.

- Amazon::Search::Request methods #author_search, #keyword_search and
  #power_search now support an extra parameter at the end of the parameter
  list. Set this to Amazon::Search::ALL_EDITIONS to retrieve multiple editions
  of the same book or Amazon::Search::SINGLE_EDITION to retrieve just the
  latest. The default is SINGLE_EDITION.

- Amazon::Search::Response objects now contain new instance variables
  @total_results and @total_pages for tracking the total number of results and
  pages for each search.

- New exception class Amazon::Search::HTTPError.

- The URL of the page to be fetched is now printed if Ruby is run with -d.

- Amazon::Marketplace::Product has been renamed Amazon::Exchange::Product.

- Exception Amazon::Search::Request::SearchError has moved to
  Amazon::Search::SearchError, as it's useful to the Response class, too.

- Amazon::Search::Exchange::Marketplace#parse returns nil if no listings
  were found.

- Amazon::Search::Exchange::Marketplace#parse no longer returns a two-
  element array, consisting of an array of products and the number of open
  listings. Instead, a singleton array of products is returned, with the
  number of open listings available as @openlistings.

- Amazon::Search::Exchange::Marketplace class methods renamed:

  Marketplace.keyword_searches	->  Marketplace.keyword_search_types
  Marketplace.geos		->  Marketplace.geo_types
  Marketplace.sorts		->  Marketplace.sort_types
  Marketplace.indices		->  Marketplace.index_types

- New classes Amazon::Offerings::Product, Amazon::Blended::ProductLine,
  Amazon::Feedback, Amazon::ThirdPartyInfo and Amazon::Seller. These classes
  are needed by the new types of search that have been added in this version.

- Search facilities must now be specifically called, using:

  require 'amazon'
  require 'amazon/search'

- Fixed bad exception raising on HTTP errors.

- Fixed bug with searches using 'software' mode in 'uk' locale.

- Fixed a bug in ALL_PAGES requests that caused the first page of results
  to be fetched twice, resulting in duplicate products. The same bug caused
  the last page to not be returned at all.

- Improvements to RDoc documentation.

- Lots of new unit tests.


0.3.0, 2004-01-31

- Amazon::Search::Request#search has been subdivided into #keyword_search,
  #node_search, #asin_search, #upc_search, #author_search, #power_search,
  #artist_search, #actor_search, #director_search, #manufacturer_search,
  #listmania_search and #similarity_search.
  
  Rather than passing nil parameters where arguments were irrelevant, each of
  these new methods requires only those arguments that make sense for the
  particular type of search it supports.

- New module Amazon::Search::Marketplace for Amazon Marketplace searches.

- New product class Amazon::Search::Marketplace::Product.

- New instance methods Amazon::Search::Marketplace#keyword_search and
  Amazon::Search::Marketplace#listing_search for marketplace searches.
  These return Amazon::Search::Marketplace::Response objects.

- New class methods Amazon::Search::Marketplace.keyword_searches,
  Amazon::Search::Marketplace.geos, Amazon::Search::Marketplace.sorts and
  Amazon::Search::Marketplace.indices for determining valid keyword search
  types, geos types, sort types and index types when doing a marketplace
  search.

- The international properties amazon.co.uk, amazon.de and amazon.co.jp are
  now also supported via a 3rd parameter to Amazon::Search::Request.new. A two
  letter string, 'us', 'uk', 'de' or 'jp', can be passed. Request objects
  now contain a new instance variable, @locale, to track this when performing
  searches.

- Amazon::Search::Request.new can now take a 4th argument, which is a
  user-agent to pass on to Amazon's Web Services

- New Amazon::NAME constant gives library name.

- ALL_PAGES searches are now returned more efficiently, as XML parsing
  can be deferred until Amazon::Search#parse is used.

- UPC search now accepts extra modes: classical, software, dvd, vhs,
  electronics, pc-hardware.

- Price range restrictions are now supported on relevant searches.

- Single page ALL_PAGES searches now yield a single-element array, rather than
  directly returning an Amazon::Search::Response object.

- Exception classes are now subclasses of StandardError, not RuntimeError.

- Better error-checking and exception raising all around.


0.2.0, 2004-01-22

- The Associates ID is now optional in Amazon::Search::Request.new. As such,
  it has swapped places with the developer token as the second parameter. If
  you don't have an Associates ID, don't pass the second argument to the
  method and a default ('webservices-20') value will be used instead.

- When passing an explicit page number to Amazon::Search::Request#search, you
  can now use the constant Amazon::Search::Request::ALL_PAGES as the page
  number. This will cause all pages pertaining to your search to be returned.
  This can take quite some time for non-specific searches.

- If ALL_PAGES is given, an Array of Amazon::Search::Responses will be
  returned instead of a single Amazon::Search::Response, unless your search
  returns a single page.

- Search types that logically have no use for the 'page' parameter now ignore
  it if it is specified. The searches in question are ASIN, UPC and Listmania
  searches.

- The Amazon::Search::TypeError exception class has been added to catch
  non-existent search types.

- @avgcustomerrating was not being set in Amazon::Search::Review objects.

- There are new constants Amazon::Search::Request::HEAVY,
  Amazon::Search::Request::LITE (and Amazon::Search::Request::LIGHT, just for
  the sake of correct spelling).

- Amazon::Search::Request::POWER_SEARCH is supported as a new search type.

- Ruby/Amazon now makes calls to version 3 of the Amazon Web Services API.

- The Amazon::Search::Review struct is now a real class. This was done in
  order to make its instance variables read-only, which they now are.

0.1.0, 2004-01-17

- first public release
