module JSON::ParserOptions
def create_additions_proc(opts)
def create_additions_proc(opts) if opts[:symbolize_names] raise ArgumentError, "options :symbolize_names and :create_additions cannot be used in conjunction" end opts = opts.dup create_additions = opts.fetch(:create_additions, false) on_load = opts[:on_load] object_class = opts[:object_class] || Hash opts[:on_load] = ->(object) do case object when String opts[:match_string]&.each do |pattern, klass| if match = pattern.match(object) create_additions_warning if create_additions.nil? object = klass.json_create(object) break end end when object_class if opts[:create_additions] != false if class_name = object[JSON.create_id] klass = JSON.deep_const_get(class_name) if (klass.respond_to?(:json_creatable?) && klass.json_creatable?) || klass.respond_to?(:json_create) create_additions_warning if create_additions.nil? object = klass.json_create(object) end end end end on_load.nil? ? object : on_load.call(object) end opts end