Skip to content

Regression in 2.11.0: removed PRETTY_STATE_PROTOTYPE breaks multi-json #788

@myronmarston

Description

@myronmarston

My application uses the opensearch-ruby gem which in turn uses multi_json. When I upgrade my application from json 2.10.2 to 2.11.0 (or 2.11.1), I get failures:

NameError:
 uninitialized constant JSON::PRETTY_STATE_PROTOTYPE
# /usr/local/rvm/gems/ruby-3.2.8/gems/multi_json-1.15.0/lib/multi_json/adapters/json_common.rb:18:in `dump'
# /usr/local/rvm/gems/ruby-3.2.8/gems/multi_json-1.15.0/lib/multi_json/adapter.rb:25:in `dump'
# /usr/local/rvm/gems/ruby-3.2.8/gems/multi_json-1.15.0/lib/multi_json.rb:139:in `dump'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch/transport/transport/serializer/multi_json.rb:55:in `dump'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch/transport/transport/base.rb:218:in `__trace'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch/transport/transport/base.rb:366:in `perform_request'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch/transport/transport/http/faraday.rb:45:in `perform_request'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch/transport/client.rb:191:in `perform_request'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch.rb:92:in `open_search_validation_request'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch.rb:59:in `verify_open_search'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch.rb:47:in `method_missing'
# /usr/local/rvm/gems/ruby-3.2.8/gems/opensearch-ruby-3.4.0/lib/opensearch/api/actions/delete_by_query.rb:90:in `delete_by_query'

It appears this is caused by 18e5c3c.

Given that the removed constant is used in a dependency-of-a-dependency, there's not really a way I can fix this on my side (although I can obviously stick with json 2.10.2, and I will for now).

Would you consider restoring JSON::PRETTY_STATE_PROTOTYPE since it is in fact used by multi_json?

On a side note: the 2.10.0 release also broke multi_json compatibility. I wish my dependencies didn't use multi_json but they do (and it's apparently quite well used as it has almost a billion downloads...). Given that, it might be worth considering adding something to your CI build that runs the latest released version of multi_json against your code, to surface these issues sooner.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions