All changes to the Agoo gem are documented here. Releases follow semantic versioning.
- Thanks to @alistairjevans for fixing an SSL CTX certificate chain issue.
- When multiple threads are specified and the main thread exits worker threads not exit as well.
- The server root parameter (asset root) no longer raises and error when
nil
. - The server path handling behavior around the use of
/
has been improved.
- Added metadata element to the gemspec file.
- Updated to support the most recent version of rack.
-
Fixed race condition on starting a thread count set to 1.
-
Fixed crash with invalid bindings.
- Added command line options for TLS.
- Support for Apollo style POST requests fixed (again).
- Support for Apollo style POST requests fixed.
- Server static txt files now includes the UTF8 character set in the mime type tag.
- Ruby 3.2.1 and MacOS didn't work well together with libssl missing some symbols. Included libcrypt to fix that.
- Asset names with spaces or special characters are now loaded correctly.
- Request no longer crashes when
#env
is not called before#set
.
-
Introspection can now be disabled with the
hide_schema
option to the Agoo server. -
If an exception raised from a GraphQL callback responds to
code
that code will be used as the HTTP status. -
Added missing ability to set or add elements of a request argument on GraphQL callback methods.
-
Support added for PATCH.
-
A
:hide_schema
option has been added to show the graphql/schema as not found unless added by with the handle method of the server. -
Raising an exception that responds to
code
in a graphql resolve function will return that code as the HTTP status code.
- Agoo now reports an error if the developer make the mistake of building a schema that loops back on itself too many times using fragments.
- Invalid SDL now raises and exception instead of crashing.
- Evaluating an empty GraphQL request with comments only no longer crashes.
- JSON parser bug fixed.
-
REMOTE_ADDR element added to requests/env argument to
call()
. -
Added check for multiple Content-Length headers.
-
Multiple occurrances of a header are now passed to the Rack
call()
method as an array.
- Agoo::Server.use() added. It works similar to the Rack use() function.
- Header checks are now case insensitive to comply with RFC 7230.
rb_rescue2 termination
- rb_rescue2 must be terminated by a (VALUE)0 and not simply 0.
Stub generator
- GraphQL stub generator to generate Ruby class file corresponding to GraphQL schema type. The generator is
bin/agoo_stubs
.
Check SO_REUSEPORT
- Verifiy SO_REUSEPORT is define for older OS versions.
Request GraphQL access and GraphiQL support
-
Optional addition of request information is now available in GraphQL resolve functions.
-
Headers for GraphQL responses can now be set.
-
Fixed incorrect values in introspection responses.
-
Fixed JSON parser bug with null, true, and false.
Ruby 2.7.0 cleanup
-
.travis.yml cleanup (thanks waghanza).
-
Compile warnings eliminated.
-
Added
require 'stringio'
to agoo.rb (issue #80)
Bug fixes
-
Missing variable arguments no longer cause a crash.
-
Eliminated the type cast warnings introduced by the Ruby 2.6.5 which uses stricter makefile settings.
Alpine
- Added compiler directives to allow building on Alpine linux.
GraphQL Introspection
-
__Field deprecatedReason is no longer listed as 'reason'.
-
Missing SCHEMA __Type kind added.
Benchamark options
- An option for polling timeout added. Trade off CPU use with reponsiveness.
Coerce improvements
-
Coerce of
nil
to anything returns GraphQLnull
. -
Coerce String to defined scalar now succeeds.
-
Handle comments in all locations.
Race fix
- A race condion occurred with a slow Ruby response and a connection close. Fixed.
TLS using OpenSSL
- TLS (SSL) support added.
GraphQL subscriptions
- Rack multiple value header transformation changed to emit multiple entries instead of multiple values.
- GraphQL Subscriptions using Websockets and SSE are now supported.
Early hints and sub-domains
-
Support for early hints added. This includes a server option to activate and then a proposed
early_hints
member of theenv
argument to the Rack#call
method. -
Sub-domains based on the host header in an HTTP request can now be used to set up multiple root directories.
GraphQL with Rack
- Fixed an issue with using GraphQL with Rack. Added a Rack GraphQL example in example/graphql/config.ru.
Description parsing fix.
- Fixed a description parse bug that would fail to ignore whitespace after a description on some quoted descriptions.
Rack compatibility improvement.
- Rack builder wrapper added.
- Add miss
close
method toAgoo::ErrorStream
.
Add missing options.
- Add missing options to
bin/agoo
. - Add missing options to
rack::Handler::Agoo
. bin/agoo
now picks upconfig.ru
orconfig.rb
if no other files are specified.
Extend GraphQL
- Add support for the Graphql
extend
functionality. - Add the ID base scalar type.
- Use
schema
SDL element instead oftype schema
.
Static asset header rules functionality added.
Agoo::Server.header_rule()
added.
- Assorted code cleanup.
Ruby 2.6.0 compatibility release.
- Registering the GraphQL root object fixed for 2.6.0.
GraphQL supported with a simple, easy to use API. Existing API remain the same but a new Agoo::GraphQL module has been added along with supporting examples.
- Replaced the use of
gmtime
with an included function to assure support for dates before 1970.
Bad release fix along with upload example.
- Additional return value checking on
strdup
,strndup
, andfstat
. - Fix double free when a connection times out.
Even more cleanup and minor performance tweak.
- Compile option to use epoll instead of poll. (its slower)
- Changed the use of __ and _X in C code.
- Resuse of some memory for responses.
More optimizations and some cleanup.
- New optional hint to the server that allows responses to
#call
to be cached.
- Change C header file guards. No change in behavior. Just code cleanup.
- Fixed change that slowed down the server.
Third times a charm.
- Make sure response are sent when the request includes a close indicator.
Bug fix.
- The latest changes introduced a bug where requests were lost. Fixed in this release.
Latency improvements.
- Allow empty pages to be returned.
- Included multiple read/write threads.
Bug fix.
- Sending a POST request that was not handled and caused a segfault. Fixed.
The binding release with multiple options for connecting to the server.
- Multiple connection bindings now supported
- Binding to Unix named sockets support added.
- IPv6 now supported.
- Connection address now supported to restrict connection requests.
- Rack hijack now supported.
- Upgraded handler
on_error
now supported and called on Websocket or SSE errors.
- Added an
env
method to the upgrade (Websocket and SSE) client.
- Fixed Websocket bug where a pong caused a hang on the socket.
- Added optimization description in
misc/optimize.md
.
- Fixed
bin/agoo
which had become out of date. - Fixed static file asset page caching bug.
- Corrected header bug where a
:
in the value would cause an incorrect header key and value. - Improved idle CPU use.
- Clustering now supported with forked workers making Agoo even faster.
- Changed addition header keys to be all uppercase and also replace
-
with_
to match Rack unit tests instead of the spec.
- Optimized
rackup
to look for files in the root directory before calling rackup as the default. The root is now set to./public
instead of.
. The:rmux
(rack multiplex) turns that off.
- Added
#open?
method to the Upgraded (connection client) class. - Slight improvement performcance serving static assets for Rails.
- Subject can now be Symbols or any other object that responds top
#to_s
. - Super fast asset loading for Rails and Rack using
Agoo::Server.path_group
- Fixed bug where publishes from the
#on_open
callback broke the connection.
- Publish and subscribe to WebSocket and SSE connections now available. An example in the push subdirectory demonstrates how it works.
- Slight performance boost.
- This is a minor release even though the API has changed. The changed API is the one for Rack based WebSocket and SSE connection upgrades. The PR for the spec addition is currently stalled but some suggestions for a stateless API are implemented in this release. The proposed Rack SPEC is here. The PR is here
- Changed to putting all the path on the
REQUEST_PATH
variable instead of theSCRIPT_NAME
to accomodate Rails which only uses theREQUEST_PATH
. - Duplicated all
HTTP_
variables to use an all upper case key in addition to the Rack spec simple concatenation to make Rails middleware work. There seems to be an undocumented agreement that all keys will be uppercase.
- Fix allocation bug.
- Allow X-XSS-Protection and only check headers in pendantic mode.
- Fixed compiler issues for different OSs and compilers.
- More tolerant of
SERVER_NAME
capture from HTTP headers.
- Allow compilation on older macOS compilers.
- WebSocket and SSE support added.
- The API moved to a global server approach to support extended handlers for WebSocket and SSE connections.
- rackup option -s now works with 'agoo' as well as with 'Agoo'.
- Fixed a memory leak.
- Improved Rack handling. Rack version is an array as it was supposed to be. Hacked around Rack's handling of HEAD requests so that the content length can be returned more easily by the app.
- Added Rack::Handler::Agoo for a rackup like use of Agoo.
- Examples provided.
- Default thread count set to zero.
- Fixed pipelining to handle extreme rates.
- An
agoo
binary was added to run an Agoo server from the command line.
- New mime types can now be added
- Added support for rack.logger
- Add not found handler support.
- Fixed segfault due to GC of handlers.
Updated to get travis working correctly.
Initial release.