Skip to content

Releases: ruby-protobuf/protobuf

v3.2.1

04 Aug 22:42
Compare
Choose a tag to compare

v3.2.0

01 Aug 23:09
Compare
Choose a tag to compare

Add Protobuf.ignore_unknown_fields config option (default true).

When setting this option to false, attempts to assign a value to an unknown field on a message will raise a FieldNotDefinedError. Assignment is protected in the initializer (hash argument), Message.encode class method, and the instance-level bracket method Message#[]=.

Decoding messages should ignore this behavior as it is a core tenet of the protocol buffers specification.

[#204, @wesleyk]

v3.1.0

28 Jul 15:54
Compare
Choose a tag to compare
  • Gracefully ignore unknown enum values when decoding an enum field. [ #197, @zachmargolis ]

v3.0.5

28 Jul 15:53
Compare
Choose a tag to compare

v3.0.4

14 Mar 17:48
Compare
Choose a tag to compare
  • Raise specific MethodNotFound when service class doesn't respond to (publicly implement)
    the rpc method called from the client. Stop rescuing all NoMethodError's thrown
    by service implementations. [#193, @liveh2o]

v3.0.3

13 Mar 17:28
Compare
Choose a tag to compare
  • Fix recursive memory/cpu growth issue when calling class-level Message.to_json. [#190]

v2.8.13

14 Mar 17:49
Compare
Choose a tag to compare
  • Backport #190 to 2.8 stable series. [#192]

v3.0.2

04 Mar 21:24
Compare
Choose a tag to compare
  • Queue requests at the broker when concurrent requests hit the ZMQ server, distribute to
    worker threads on each turn of the read poll loop. [#189, @abrandoned, @liveh2o]

v3.0.1

26 Feb 23:38
Compare
Choose a tag to compare
  • Fix NoMethodError that can occur when serializing a message with a missing required field. [#187, @abrandoned]

v3.0.0

26 Feb 17:47
Compare
Choose a tag to compare

A lot has changed since the last stable v2.8.12. For all the relevant changes,
see the closed pull requests and issues list in github.
Below is a high-level list of fixes, deprecations, breaking changes, and new APIs.

EventMachine is dead, Long live EventMachine

The EventMachine client and server have been removed from this gem. They code was far
too error prone and flawed to feasibly support going forward. It's recommended
to switch to the socket implementation (using PB_CLIENT_TYPE and PB_SERVER_TYPE of socket)
for a painless switchover. The ZMQ implementation is much more performant but
does have a dependency on libzmq.

Server Middlewares

The server/dispatcher stack has been converted to the Middleware pattern!
Exception handling (#162, #164), Request decoding (#160, #166), Response encoding (#161, #167),
Logging and stats (#163), and Method dispatch (#159) have all been extracted into their
own Middlewares to greatly simplify testing and further development of the server
stack, furthering our preparations for removing the socket implementations (zmq, socket)
into their own gems in version 4.0. Major props to @liveh2o for tackling this beast.

Bug Fixes

  • Resolve DNS names (e.g. localhost) when using ZMQ server. [#46, reported by @reddshack]
  • Switched to hash based value storage for messages to fix large field tag memory issues. [#118, #165]
  • Enum.fetch used to return an enum of any type if that is the value passed in. [#168]

Deprecations

!! NOTE: These deprecated methods will be removed in v3.1. !!

  • Deprecated BaseField#type in favor of #type_class.
  • Deprecated Message.get_ext_field_by_name in favor of .get_extension_field or .get_field(name_or_tag, true).
  • Deprecated Message.get_ext_field_by_tag, in favor of .get_extension_field or .get_field(name_or_tag, true).
  • Deprecated Message.get_field_by_name, in favor of .get_field.
  • Deprecated Message.get_field_by_tag, in favor of .get_field.
  • Deprecated Enum.enum_by_value in favor of .enum_for_tag.
  • Deprecated Enum.name_by_value in favor of .name_for_tag.
  • Deprecated Enum.get_name_by_tag in favor of .name_for_tag.
  • Deprecated Enum.value_by_name in favor of .enum_for_name.
  • Deprecated Enum.values in favor of .enums. Beware that .enums returns an array where .values returns a hash.
    Use .all_tags if you just need all the valid tag numbers. In other words, don't do this anymore: MyEnum.values.values.map(&:to_i).uniq.

Breaking Changes

  • Require Active Support 3.2+. [#177]
  • All files/classes relating to the EventMachine client and server are gone. Use PB_CLIENT_TYPE and PB_SERVER_TYPE of socket instead. [#116]
  • Cleaned up the Enum class, deprecating/renaming most methods. tl;dr, just use MyEnum.fetch.
    See #134 for more comprehensive documentation about which methods are going and away and which are being renamed. [#134]
  • Pulled EnumValue into Enum. The EnumValue class no longer exists. Use Enum for type-checking instead. [#168].
  • Removed previously deprecated bin/rprotoc executable. Use protoc --ruby_out=... instead. [13fbdb9]
  • Removed previously deprecated Service#rpc method. Use Service#env#method_name instead. [f391294]
  • Changed the Service#initialize to take an Env object instead of separate request, method, and client parameters. [6c61bf7]
  • Removed attribute readers for Service#method_name and Service#client_host. Use Service#env to get them instead.
  • Removed lib/protobuf/message/message.rb. Use lib/protobuf/message.rb instead.
  • Removed field getters from Message instances (e.g. Message#get_field_by_name).
    Use class-level getters instead (see Deprecations section).
  • Moved lib/protobuf/message/decoder.rb to lib/protobuf/decoder.rb. The module is still named Protobuf::Decoder.
  • Removed Protobuf::Field::ExtensionFields class.
  • Removed instance-level max and min methods from all relevant Field classes (e.g. Int32Field, Uint64Field, etc).
    Use class-level methods of the same names instead. [#176, 992eb05]
  • PbError#to_response no longer receives an argument, instead returning a new Socketrpc::Response object. [#147, @liveh2o]
  • The Server module has been stripped of almost all methods, now simply invokes the Middleware stack for each request. [#159, @liveh2o]
  • Removed Protobuf::PROTOC_VERSION constant now that the compiler supports any protoc version.

New APIs

  • Added support for enum allow_alias option. [#134]
  • Enum.all_tags returns an array of unique tags. Use it to replace Enum.values.values.map(&:to_i) (Enum.values is deprecated).
  • Enum.enums returns an array of all defined enums for that class (including any aliased Enums).
  • Reinstated support for symbol primitive field types in generated Message code. [#170]
  • Message.get_field accepts a second boolean parameter (default false) to return an extension field if found. [#169]
  • Mirror existing Decoder#decode_from(stream) with Encoder#encode_to(stream). [#169]
  • Server now invokes the middleware stack for request handling. [#159, @liveh2o]
  • Added protobuf:compile and protobuf:clean rake tasks. Simply load 'protobuf/tasks/compile.rake' in your Rakefile (see compile.rake for arguments and usage). [#142, #143]
  • Add Protobuf::Deprecator module to alias deprecated methods. [#165]
  • Add support for assigning a symbol to a string or bytes field. [#181, @abrandoned]
  • Add first_alive_load_balance option to rpc server. Pass PB_FIRST_ALIVE_LOAD_BALANCE
    as an env variable to the client process to ensure the client asks the server
    if it is alive (able to server requests to clients). [#183, @abrandoned]