Changes for version 1.0100
- Change: e8e7ebfea48b4328933da9cf26d8683d160a0ab1 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-07-31 01:01:42 +0000
- feat: add head and options HTTP methods (#38)
- feat: add head and options HTTP methods
- test: add tests for head and options verbs
- docs: improve POD, fix broken examples, update verb lists
- refactor: consolidate verb methods into _request_with_params and _encode_params
- Change: 24390bd523c0493a531863d2efa5b76897e5c150 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-07-06 00:46:10 +0000
- refactor: consolidate headers handling into _headers and _headers_content_type
- Change: f47c8bd368e59f7642354e364a5c83a9f466dffb Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-07-06 00:46:10 +0000
- fix: stop sending Content-Type header on GET requests
- Change: a2ba104c312d9faf1fd4ac217f4bf0315a74c5b2 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-07-06 00:46:10 +0000
- test: verify all HTTP methods do not mutate caller arguments
- Uses Clone + is_deeply to snapshot inputs before each method call and compare after. Covers get, post, put, patch, delete.
- Change: 2040e521c79166ad453f17f5cd76261628c22ba4 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-07-02 11:28:49 +0000
- fix: stop sending Content-Type header on DELETE requests
- DELETE requests have no body, so sending Content-Type is incorrect and rejected by some APIs. This is a breaking change -- callers that relied on the old behavior must set Content-Type explicitly via the headers argument.
- Change: 31a4c80e9fa96ff8e6c1802012a2b98fe5340f7c Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-27 12:58:48 +0000
- Update README.md and Makefile.PL
- Change: a81303e325319cfff1bd1f201988330c87b7a2bb Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-27 12:58:48 +0000
- ci: add GitHub Actions workflow for dzil test
- Change: 907960582728121b1c799a32230d7b81e0deeb46 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-27 12:58:48 +0000
- fix: restore headers propagation broken by _headers // change
- Change: 019f25d3b6458a57696ecef112d26a713e30ea68 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-26 14:20:52 +0000
- fix: guard Response type-check against non-object values
- Change: cfdcafe6ad3bea7fe50d194bfa65cff7c6df5588 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-26 00:55:30 +0000
- Use defined-or instead of logical-or for default headers
- ||= replaced undef, 0, and '' with {} silently, hiding invalid non-hashref values from the is_plain_hashref validation croak. Changed to // which only replaces undef, allowing invalid values like 0 and '' to properly produce an error.
- Change: 2519adc310e18a92013cc9e44471f658ad5bb215 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-25 22:26:08 +0000
- fix: use PATCH from HTTP::Request::Common
- Import PATCH from HTTP::Request::Common - Rewrite patch method to match post/put pattern - Bump HTTP::Message minimum from 6.06 to 6.13
- Add test verifying method, URL, Content-Type, and body - Expand =head2 patch POD with signature and example
- Change: 1ec7fbdb8b911fb0d9f2a5e6c8ecdfa856cceceb Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-25 22:22:12 +0000
- Fix loose _url regex allowing http-prefixed paths to bypass base_url
- The regex /^http/ matched any path starting with 'http' (e.g. 'http:/evil.com/api'), treating it as an absolute URL and bypassing base_url. Tightened to m{^https?://} so only valid scheme-prefixed URLs are treated as absolute.
- Change: 76c96e2772fd45b666daf79ba99ec4ae5a89563d Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-25 21:24:17 +0000
- Use decoded_content instead of content in default deserializer
- Switch from ->content to ->decoded_content so that Content-Encoding (e.g. gzip) is properly handled before JSON deserialization. Without this, gzipped response bodies would be passed as raw compressed bytes to the JSON decoder, causing a parse failure.
- Also adds a test with a gzipped response to cover this path.
- Consistent with WebService::Client::Response::data() which already uses decoded_content (commit d133246).
- Change: 2c49537f167712a523c3e18745a99f2d82cd1be8 Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-25 21:22:50 +0000
- Fix each() iterator corruption in _php_params
- Replace each() with keys() + index to avoid corrupting the hash's internal iterator. When _php_params was called on a hashref that was also being externally iterated with each(), the two iterators would interfere, causing skipped keys and wrong query strings.
- Change: 12070a010dfb7d84811f797c1d1bf900555d659f Author: Dean Hamstead <dean@fragfest.com.au> Date : 2026-06-25 01:23:02 +0000
- Fix #25 - URL-encode query params in get(), add array_query_style attribute
- Replace manual query string building with URI->query_form_hash
- for proper RFC 3986 encoding - Add array_query_style attribute (default 'php', option 'rfc')
- to control how array params are serialized in query strings - Use Ref::Util::is_plain_* instead of bare ref eq checks - Document array_query_style in POD - Expand test coverage for both param styles
- Change: f44b7afcdc9304e4a07550b1cff424b7cef9b6b4 Author: Nicolas R <nicolas@atoomic.org> Date : 2020-11-05 20:43:57 +0000
- Add Test::LWP::UserAgent to TestRequires
- Change: bda2c08d624930acd9cf89458c8e4918c20be787 Author: Nicolas R <nicolas@atoomic.org> Date : 2020-11-05 20:41:52 +0000
- Add a basic .gitignore file
- Change: dc19d609ab78e7afde772fb4e4a6fb93e193bbc4 Author: Nicolas R <nicolas@atoomic.org> Date : 2020-11-05 20:41:06 +0000
- Avoid cruft files in release
- Note that the last release 1.0001 includes files like foo.pl and stocks.pl. These files should not have been part of the tarball as they are not versionned in git.
- Switch to Git::GatherDir to avoid such mistakes in the future.
- Change: b9c286dc6a80a8d9ca0f73dfa98ad09a671549ba Author: Nicolas R <nicolas@atoomic.org> Date : 2020-10-22 01:48:54 +0000
- Use some colors for README.md
- use Perl syntax highlighting when possible
- Change: 4a79563ed493b02688f767697a518df47d719621 Author: Naveed Massjouni <nmassjouni@harmonia.com> Date : 2020-07-05 16:20:44 +0000
- Fix #20 deserializer typo in POD documentation
Modules
A base role for creating web service clients