Revision history for Perl extension Net::Gopher. 1.15 - New license: the GNU LGPL instead of the GNU GPL. Added a new option, Handler, to extract_items() to allow a user to process items as they're parsed. Also, the return value of both request() and extract_items() handlers are used as flags to tell those functions whether or not to keep on going or return abruptly. Also added dozens more tests. 1.11 - Simplified the requirements in Makefile.PL and Build.PL. 1.10 - Rewrote get_named_params() so it's significantly faster, especially with very, very large parameter values. The check_params() routine retains the old behavior. Also, fixed the error reporting for _find_item_blocks(), and added a test for it. 1.07 - Added dozens of new tests to information_blocks.t, and configured the test server to just listen on what ever ports the OS assigns to it instead of requesting specific ports. 1.06 - Deprecated extract_description() and is_description() in favor of extract_descriptor() and is_descriptor(), as well as deprecated the internal check_params() function in favor of get_named_params() (the old names still work, though, with an added warning). Cleaned up new(); it sets the Net::Gopher::Exception and Net::Gopher::Debugging variables using their global accessor methods. Removed remove_bytes() from Net::Gopher::Utility, as it's not needed anymore. Also, fixed the faulty rounding in extract_views(). 1.05 - Net::Gopher::Response::XML is gone, as is the as_xml() method; they're now distributed separately in their own package. 1.00 - First stable version. 0.98 - *Really* fixed the test server this time, and also fixed the extract_date_*() methods and their corresponding tests to use the Time::Local::timegm() and gmtime() functions instead of Time::Local::timelocal() and localtime(). The Net::Gopher internal methods _read() and _write() have been renamed _read_from_socket() and _write_to_socket() to synchronize them with the forthcoming C API. Also, the request() method now resets _network_error() to ensure subsequent calls using the same Net::Gopher object don't inherit the same error, and it now check the return value of IO::Socket::INET new() instead of looking at $@ to determine success or failure. 0.97 - Improved the timeout checking, fixed several errors in the POD, and fixed the newly added content length checking introduced in 0.96. The test suite is now also fixed, and should work right. Finally, _get_status_line() was renamed _read_status_line(), _parse_blocks() was renamed _extract_blocks(), _parse_error() was renamed _extract_error(), _parse_attributes() was renamed _extract_attributes(), and _parse_attr_timestamp() was renamed _extract_attribute_timestamp() to synchronize them with the public API. 0.96 - The _data_read() method is gone, long since outliving its usefulness and serving only as a redundant source of data copying. For Gopher+ responses with content lengths, Net::Gopher now makes sure the actual length of the content is equal to the alleged content length (give or take a single byte), resulting in an error if it isn't. There are also three new constants for Gopher+ error codes: DOES_NOT_EXIST_ERROR, TRY_AGAIN_LATER_ERROR, and HAS_MOVED_ERROR. Several new debugging statements have also been added. 0.95 - Fixed the test server and added some major POD updates. 0.94 - The Net::Gopher::MenuItem accessor methods are now get/set instead of just being get. Added the Net::Gopher::Response has_block() method to see if a particular block is in the response. Also, You can now prepend dashes to the front of all parameter names and put underscores in them too. Finally, the test suite tests the Net::Gopher::Response::InformationBlock methods much better. 0.93 - (1) The information block method attributes_as_hash() has been renamed get_attributes(). (2) Added the new information block method get_attribute() that returns a single block attribute, and has_attribute() to check to see if a block has a particular attribute. (3) Added the Net::Gopher::Response get_block() method to retrieve a single block. (4) Infromation block methods warn and die much more. 0.92 - (Gone from CPAN?) (1) Build.pl: you can use Module::Build to install now instead of MakeMaker. (2) A new, much improved, much enhanced test suite complete with its own (almost) functional server. (3) Net::Gopher now fully supports (experimentally) Unicode. Selector strings, attributes, data blocks--everything--can now contain multi-byte UTF-8 characters. (4) Net::Gopher now dies and warns much, much more and with much, much more detailed messages (using carp() and croak(), but this behavior can be controlled with the options listed next). (5) Named parameters are now case-insensitive. (6) The Net::Gopher constructor takes several new arguments: WarnHandler, DieHandler, Silent, and LogFile. (7) The request() method option "Callback" has been renamed "Handler". (8) User-defined response handler subs for the request() method now receive the following arguments in this order: the raw, unmodified buffer; the request object; the response object. (9) Net::Gopher::Response has three new methods: error_code(), error_admin(), and error_message() to parse Gopher+ errors. (10) The extract_menu_items() method has been renamed extract_items(). (11) The extract_administrator() method has been renamed extract_admin(), and extract_ask_queries() has been renamed extract_queries(). 0.90 - First beta release: (1) Added a new class for menu items called Net::Gopher::Response::MenuItem with methods to retrieve the tab-delimited fields of a menu item, convert a menu item to a Gopher URL, and convert the item into a request object. The as_menu() has been renamed extract_menu_items(), and it now returns a list containing Net::Gopher::Response::MenuItem objects for each item. (2) item_blocks(), directory_blocks(), and as_blocks(), are all gone, for good. The names were never that descriptive or well-thought out in the first place, and their functionality was easily condensed into one new method: get_blocks(). (3) The Net::Gopher::Response::Blocks class has been renamed Net::Gopher::Response::InformationBlock. In addition, its methods have been renamed, removed, and replaced. Where possible, they now return a list of elements, or the first element from the list. The old hash-based behavior was long since made antiquated by changes to the info block code. Also, this class now overloads stringification so block objects can be treated as simple scalars containing block values. (4) The items and their attribute information block objects are now stored internally as an array of arrays. (5) Added the as_xml() method to Net::Gopher::Response, which generates XML for item/directory attribute information requests, Gopher menus, and other non-menu text items. (6) A new module, Net::Gopher::Constants has been added, which exports on demand constants for every known item type, constants to compare against the value returned by request_type(), and constants to compare against the value returned by status(). (7) Added the as_url() method to Net::Gopher::Request, which generates a Gopher URL using the request object. (8) The Net::Gopher::Response as_string() method has been renamed raw_response(). Even if as_string() is the current president set by LWP and others, I don't think it's descriptive enough. (9) The attribute information block methods as_string() and content() have been replaced with raw_value() and value() respectively, and a new method, name(), has been added. (10) %GOPHER_ITEM_TYPES and %GOPHER_PLUS_ITEM_TYPES have been merged into %ITEM_DESCRIPTIONS. 0.80 - Many more POD changes. 0.78 - POD changes in each module. 0.77 - This version incorporates a wealth of new functionality into Net::Gopher, including: (1) A new class, Net::Gopher::Request, is used to encapsulate requests. This class has accessor methods to modify every relevant aspect of a Gopher/Gopher+ request, as well as named constructors you can import for each type of request. (2) The Net::Gopher connect() and disconnect() methods are gone. The request() method now takes care of connecting and disconnecting by itself. (3) The request() method now takes a Net::Gopher::Request object as its first argument. In addition, it takes the parameters "File" and "Callback," with the first specifying a file where the response content should be outputted to, and the other, a reference to a sub that will be called as the response is collected. (4) The request_url() method is gone. (5) Net::Gopher now has the Net::Gopher::Request shortcut methods gopher(), gopher_plus(), item() and directory(). (6) _get_buffer() is gone, replaced with _read() to do all reading, and a new function, _write(), used to do all writing. (7) The code to generate the request string from the parameters or from a URL has been moved to Net::Gopher::Request. (8) All response content-modifying code has been moved to Net::Gopher::Response, which means _unescape is gone. Net::Gopher::Response now has the methods _convert_newlines() and _clean_period_termination() to do that work. (9) Net::Gopher::Response now has the convenient is_gopher_plus() method and the is_text() method. (10) Added check_params() routine to Net::Gopher::Utility. This will ensure that param names are not misspelled, raising an error if the user supplies an invalid parameter name when calling a method. 0.57 - Added new Net::Gopher::Response::Blocks class and moved all block value manipulation methods to there. All newlines are now converted to standard Unix linefeed characters in the response content. 0.47 - Removed the ADMIN, ASK, INFO, and VIEWS block parsing from the _parse_blocks() method and put them into separate as_admin_block(), as_ask_block(), as_info_block(), and as_views_block() methods respectively. Also, changed the key for Gopher+ strings in the hash returned by as_menu() from 'gopher+' to 'gopher_plus'. 0.43 - You can now specify a which item you want for directory_blocks() by its selector, hostname, port, etc., in addition to its number. Fixed the typo in request_url() for the default scheme, and changed request_url() to die when you specify an invalid scheme. 0.40 - The Net::Gopher::Response attribute information methods now also parse Gopher+ +ASK blocks. The is_menu() method is now far more accurate. Also, request() now defaults to item type 1 (menu) if you don't specify the 'Type' named parameter. 0.37 - Added named parameters to the Net::Gopher constructor: BufferSize, GopherPlus, and Debug. Added debugging, which causes Net::Gopher to print out various diagnostic messages at different times. Also added a corresponding debug() method. The POD has also been substantially improved. Also refractored request(), and improved the error checking. 0.35 - Improved the error checking in request(). Also, request() now more efficiently handles Gopher+ responses with content lengths (a number denoting the length of the response in bytes as opposed to -1 or -2). 0.34 - The request() method now removes the period on a line by itself in the response content if type is supplied and isn't 0 or 1. Also, periods escaped by adding and extra period (e.g., '..' instead of '.'), are now unescaped in the response content. 0.33 - The request_url() now properly returns a Net::Gopher::Response object if if fails to connect to the server. Also fixed a typo in the POD which had (until now) gone unnoticed. 0.32 - Added new is_menu() and is_blocks() methods. 0.30 - Removed as_block() and replaced it with item_blocks(), and added the new directory_blocks() and as_blocks() methods. Also refractored the request_url() method. 0.27 - Refractored request() and removed the _get_gopher_response() and _get_gopher_plus_response() methods.