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.